Flat, round, designer-friendly pseudo-3D engine for canvas & SVG
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

๐Ÿ‘• Switch to eslint. #18 #30

+ create eslintrc.json; fix lints
+ remove jshint

+1161 -206
+218
.eslintrc.json
··· 1 + { 2 + "env": { 3 + "browser": true, 4 + "commonjs": true 5 + }, 6 + "extends": "eslint:recommended", 7 + "parserOptions": { 8 + "ecmaVersion": 5 9 + }, 10 + "rules": { 11 + "accessor-pairs": "error", 12 + "array-bracket-spacing": [ "error", "always" ], 13 + "array-callback-return": "error", 14 + "array-element-newline": "off", 15 + "arrow-body-style": [ "error", "always" ], 16 + "arrow-parens": [ "error", "always" ], 17 + "arrow-spacing": "error", 18 + "block-scoped-var": "error", 19 + "block-spacing": "error", 20 + "brace-style": [ "error", "1tbs" ], 21 + "camelcase": "error", 22 + "class-methods-use-this": "error", 23 + "comma-dangle": [ "error", "always-multiline" ], 24 + "comma-spacing": "error", 25 + "comma-style": [ "error", "last" ], 26 + "complexity": [ "error", 12 ], 27 + "consistent-this": [ "error", "_this" ], 28 + "curly": "error", 29 + "default-case": "error", 30 + "dot-location": [ "error", "property" ], 31 + "dot-notation": "error", 32 + "eol-last": "error", 33 + "eqeqeq": "off", 34 + "func-call-spacing": "error", 35 + "func-name-matching": "error", 36 + "func-style": [ "error", "declaration" ], 37 + "function-paren-newline": [ "error", "consistent" ], 38 + "generator-star-spacing": "error", 39 + "id-blacklist": [ "error", "data", "callback" ], 40 + "id-length": [ "error", { 41 + "min": 3, 42 + "max": 30, 43 + "exceptions": [ "x", "y", "z", "i", "a", "b" ] 44 + }], 45 + "id-match": "error", 46 + "implicit-arrow-linebreak": "error", 47 + "indent": [ "error", 2, { 48 + "VariableDeclarator": 4, 49 + "CallExpression": { "arguments": 2 }, 50 + "FunctionExpression": { "body": 1, "parameters": 2 }, 51 + "ignoredNodes": [ "CallExpression > FunctionExpression > BlockStatement.body" ] 52 + }], 53 + "key-spacing": "error", 54 + "keyword-spacing": [ "error", { 55 + "before": true, 56 + "after": true 57 + }], 58 + "linebreak-style": [ "error", "unix" ], 59 + "lines-around-comment": "error", 60 + "lines-between-class-members": "error", 61 + "max-classes-per-file": "error", 62 + "max-depth": "error", 63 + "max-len": [ "error", { 64 + "code": 80 65 + }], 66 + "max-lines": [ "error", { 67 + "max": 300 68 + }], 69 + "max-nested-callbacks": "error", 70 + "max-statements-per-line": "error", 71 + "new-cap": "error", 72 + "new-parens": "error", 73 + "newline-per-chained-call": "error", 74 + "no-alert": "error", 75 + "no-array-constructor": "error", 76 + "no-async-promise-executor": "error", 77 + "no-await-in-loop": "error", 78 + "no-bitwise": "error", 79 + "no-buffer-constructor": "error", 80 + "no-caller": "error", 81 + "no-catch-shadow": "error", 82 + "no-confusing-arrow": "error", 83 + "no-continue": "error", 84 + "no-div-regex": "error", 85 + "no-duplicate-imports": "error", 86 + "no-eq-null": "error", 87 + "no-eval": "error", 88 + "no-extend-native": "error", 89 + "no-extra-bind": "error", 90 + "no-extra-label": "error", 91 + "no-extra-parens": [ "error", "all", { 92 + "nestedBinaryExpressions": false 93 + }], 94 + "no-floating-decimal": "error", 95 + "no-implicit-globals": "error", 96 + "no-implied-eval": "error", 97 + "no-inner-declarations": [ "error", "functions" ], 98 + "no-invalid-this": "error", 99 + "no-iterator": "error", 100 + "no-label-var": "error", 101 + "no-labels": "error", 102 + "no-lone-blocks": "error", 103 + "no-lonely-if": "error", 104 + "no-loop-func": "error", 105 + "no-magic-numbers": "off", 106 + "no-misleading-character-class": "error", 107 + "no-mixed-requires": "error", 108 + "no-multi-assign": "off", 109 + "no-multi-spaces": [ "error", { 110 + "exceptions": { "Property": true } 111 + }], 112 + "no-multi-str": "error", 113 + "no-multiple-empty-lines": "error", 114 + "no-native-reassign": "error", 115 + "no-negated-condition": "off", 116 + "no-negated-in-lhs": "error", 117 + "no-nested-ternary": "error", 118 + "no-new-func": "error", 119 + "no-new-object": "error", 120 + "no-new-require": "error", 121 + "no-new-wrappers": "error", 122 + "no-octal-escape": "error", 123 + "no-param-reassign": "off", 124 + "no-path-concat": "error", 125 + "no-process-env": "error", 126 + "no-process-exit": "error", 127 + "no-proto": "error", 128 + "no-prototype-builtins": "error", 129 + "no-restricted-globals": "error", 130 + "no-restricted-imports": "error", 131 + "no-restricted-modules": "error", 132 + "no-restricted-properties": "error", 133 + "no-restricted-syntax": "error", 134 + "no-return-assign": "error", 135 + "no-return-await": "error", 136 + "no-script-url": "error", 137 + "no-self-compare": "error", 138 + "no-sequences": "error", 139 + "no-shadow": "error", 140 + "no-shadow-restricted-names": "error", 141 + "no-spaced-func": "error", 142 + "no-tabs": "error", 143 + "no-template-curly-in-string": "error", 144 + "no-ternary": "off", 145 + "no-throw-literal": "error", 146 + "no-trailing-spaces": "error", 147 + "no-undef-init": "error", 148 + "no-undefined": "off", 149 + "no-underscore-dangle": "off", 150 + "no-unmodified-loop-condition": "error", 151 + "no-unneeded-ternary": "error", 152 + "no-unused-expressions": "error", 153 + "no-use-before-define": [ "error", { 154 + "functions": false 155 + }], 156 + "no-useless-call": "error", 157 + "no-useless-catch": "error", 158 + "no-useless-computed-key": "error", 159 + "no-useless-concat": "error", 160 + "no-useless-constructor": "error", 161 + "no-useless-rename": "error", 162 + "no-useless-return": "error", 163 + "no-var": "off", 164 + "no-void": "error", 165 + "no-warning-comments": "off", 166 + "no-whitespace-before-property": "error", 167 + "no-with": "error", 168 + "nonblock-statement-body-position": "error", 169 + "object-curly-newline": "error", 170 + "one-var": [ "error", { 171 + "initialized": "never", 172 + "uninitialized": "always" 173 + }], 174 + "one-var-declaration-per-line": [ "error", "initializations" ], 175 + "operator-assignment": "error", 176 + "operator-linebreak": [ "error", "after" ], 177 + "padded-blocks": "off", 178 + "padding-line-between-statements": "error", 179 + "prefer-arrow-callback": "off", 180 + "prefer-numeric-literals": "error", 181 + "prefer-object-spread": "error", 182 + "prefer-promise-reject-errors": "error", 183 + "prefer-spread": "error", 184 + "quote-props": [ "error", "as-needed" ], 185 + "quotes": [ "error", "single", { 186 + "avoidEscape": true 187 + }], 188 + "radix": "error", 189 + "require-atomic-updates": "error", 190 + "require-await": "error", 191 + "rest-spread-spacing": "error", 192 + "semi": "error", 193 + "semi-spacing": [ "error", { 194 + "after": true, 195 + "before": false 196 + }], 197 + "semi-style": [ "error", "last" ], 198 + "sort-imports": "error", 199 + "space-before-blocks": "error", 200 + "space-before-function-paren": [ "error", "never" ], 201 + "space-in-parens": "off", 202 + "space-infix-ops": "off", 203 + "space-unary-ops": "error", 204 + "spaced-comment": "off", 205 + "strict": [ "error", "never" ], 206 + "switch-colon-spacing": "error", 207 + "symbol-description": "error", 208 + "template-curly-spacing": "error", 209 + "template-tag-spacing": "error", 210 + "unicode-bom": [ "error", "never" ], 211 + "valid-jsdoc": "error", 212 + "vars-on-top": "off", 213 + "wrap-iife": [ "error", "any" ], 214 + "wrap-regex": "error", 215 + "yield-star-spacing": "error", 216 + "yoda": [ "error", "never" ] 217 + } 218 + }
+1 -1
Makefile
··· 5 5 npx uglifyjs dist/zdog.dist.js -o dist/zdog.dist.min.js --mangle --comments /^!/ 6 6 7 7 lint: 8 - npx jshint js/*.js demos/**/*.js tasks/*.js 8 + npx eslint js/ demos/ tasks/ 9 9 10 10 dist: bundle uglify 11 11
+14
demos/.eslintrc.json
··· 1 + { 2 + "extends": "../.eslintrc.json", 3 + "globals": { 4 + "Zdog": "readonly" 5 + }, 6 + "rules": { 7 + "key-spacing": "off", 8 + "max-lines": "off", 9 + "one-var": [ "error", { 10 + "initialized": "never", 11 + "uninitialized": "consecutive" 12 + }] 13 + } 14 + }
-8
demos/.jshintrc
··· 1 - { 2 - "browser": true, 3 - "unused": true, 4 - "undef": true, 5 - "globals": { 6 - "Zdog": false 7 - } 8 - }
+1 -1
demos/box-cross/box-cross.js
··· 123 123 var progress = ticker / cycleCount; 124 124 var turn = Math.floor( progress % 4 ); 125 125 var theta = Zdog.easeInOut( progress % 1, 3 ) * TAU; 126 - if ( turn == 0 || turn == 2 ) { 126 + if ( turn == 0 || turn == 2 ) { 127 127 model.rotate.y = theta; 128 128 } else if ( turn == 1 ) { 129 129 model.rotate.x = theta;
+5 -5
demos/hemisphere-cone-ball/hemisphere-cone-ball.js
··· 45 45 stroke: false, 46 46 }); 47 47 48 - var colorWheel = [ eggplant, garnet, orange, gold, yellow, ]; 48 + var colorWheel = [ eggplant, garnet, orange, gold, yellow ]; 49 49 50 50 [ true, false ].forEach( function( isHemi ) { 51 51 var shape = isHemi ? hemi : cone; ··· 71 71 // ----- animate ----- // 72 72 73 73 var keyframes = [ 74 - { x: TAU * 0, y: TAU * 0 }, 75 - { x: TAU * 1/2, y: TAU * 1/2 }, 76 - { x: TAU * 1, y: TAU * 1 }, 74 + { x: TAU*0, y: TAU*0 }, 75 + { x: TAU/2, y: TAU/2 }, 76 + { x: TAU*1, y: TAU*1 }, 77 77 ]; 78 78 79 79 var ticker = 0; ··· 97 97 var keyB = keyframes[ turn + 1 ]; 98 98 var thetaX = Zdog.lerp( keyA.x, keyB.x, tween ); 99 99 illo.rotate.x = Math.cos( thetaX ) * TAU/12; 100 - illo.rotate.y = Zdog.lerp( keyA.y, keyB.y, tween ) ; 100 + illo.rotate.y = Zdog.lerp( keyA.y, keyB.y, tween ); 101 101 ticker++; 102 102 } 103 103
+1 -1
demos/houses/houses.js
··· 84 84 { x: 2, y: -3 }, 85 85 { x: 2, y: -1 }, 86 86 ]}, 87 - { x: 2, y: 3 } 87 + { x: 2, y: 3 }, 88 88 ], 89 89 translate: { x: 2, y: 4 }, 90 90 color: eggplant,
+2 -2
demos/kid-kit/kid-kit.js
··· 127 127 var innerEarXShift = 4; 128 128 new Zdog.Shape({ 129 129 path: [ 130 - { x: earA.x - innerEarXShift , y: earA.y-3 }, 130 + { x: earA.x - innerEarXShift, y: earA.y-3 }, 131 131 { x: earD.x, y: earD.y+5 }, 132 132 { x: earE.x + innerEarXShift, y: earE.y+2 }, 133 133 ], ··· 242 242 }); 243 243 244 244 // top straps 245 - var topCloakStrap = new Zdog.Shape({ 245 + var topCloakStrap = new Zdog.Shape({ 246 246 path: [ 247 247 { x: cloakX0, y: cloakY0, z: cloakZ0 }, 248 248 { x: cloakX0, y: cloakY1, z: cloakZ1 },
+1 -1
demos/kirby-parasol/kirby-parasol.js
··· 165 165 166 166 rightFoot.copy({ 167 167 translate: { x: 9.5, y: 6, z: -6 }, 168 - rotate: { z: -1.1, y: 0.8 } 168 + rotate: { z: -1.1, y: 0.8 }, 169 169 }); 170 170 171 171 // ----- umbrella ----- //
+3 -3
demos/shade-and-shades/shade-and-shades.js
··· 102 102 { bezier: [ 103 103 { x: -16, y: 4, z: 30 }, 104 104 brimEdge, 105 - brimTip 105 + brimTip, 106 106 ]}, 107 107 ], 108 108 }); 109 109 brimBridge.copy({ 110 - scale: { x: - 1}, 110 + scale: { x: -1}, 111 111 }); 112 112 113 113 // glasses front top ··· 115 115 addTo: illo, 116 116 path: [ 117 117 { x: -16 }, 118 - { x: 16 } 118 + { x: 16 }, 119 119 ], 120 120 translate: { y: 8, z: 12 }, 121 121 color: eggplant,
+1 -1
demos/shapes/shapes.js
··· 67 67 { move: { y: -1 } }, 68 68 { y: 1 }, 69 69 { move: { z: -1 } }, 70 - { z: 1 } 70 + { z: 1 }, 71 71 ], 72 72 scale: 1.25, 73 73 stroke: 1,
+3 -3
demos/solids/solids.js
··· 156 156 var rotor2 = new Zdog.Anchor({ 157 157 addTo: rotor1, 158 158 translate: { z: inradius, y: height/2 }, 159 - rotate: { x: Math.acos(1/3) * -1 + TAU/4 }, 159 + rotate: { x: Math.acos(1/3) * -1 + TAU/4 }, 160 160 }); 161 161 triangle.copy({ 162 162 addTo: rotor2, ··· 284 284 for ( var i=0; i < 5; i++ ) { 285 285 var rotor1 = new Zdog.Anchor({ 286 286 addTo: dodecahedron, 287 - rotate: { y: TAU/5 * (i) }, 287 + rotate: { y: TAU/5 * i }, 288 288 }); 289 289 var rotor2 = new Zdog.Anchor({ 290 290 addTo: rotor1, ··· 377 377 addTo: sideAnchor, 378 378 translate: { y: -faceRadius/2 }, 379 379 rotate: { y: TAU/2 }, 380 - color: sideColors[i] 380 + color: sideColors[i], 381 381 }); 382 382 383 383 }
+3 -2
demos/strutter/strutter.js
··· 86 86 path: [ { x: 0 }, { x: armSize } ], 87 87 scale: { x: xSide }, 88 88 translate: { x: 4.5 * xSide, y: -8, z: -4 }, 89 - rotate: isRight ? { y: TAU/8, z: -TAU/16 } : { y: TAU/8 }, 89 + rotate: isRight ? { y: TAU/8, z: -TAU/16 } : { y: TAU/8 }, 90 90 color: eggplant, 91 91 stroke: 4, 92 92 }); ··· 95 95 addTo: upperArm, 96 96 path: [ { x: 0 }, { x: armSize-2 } ], 97 97 translate: { x: armSize }, 98 - rotate: isRight ? { z: TAU/16 * 3, y: TAU/4 } : { z: -TAU/4, x: -TAU/32 * 2, y: TAU/8 }, 98 + rotate: isRight ? { z: TAU/16 * 3, y: TAU/4 } : 99 + { z: -TAU/4, x: -TAU/32 * 2, y: TAU/8 }, 99 100 color: orange, 100 101 stroke: 4, 101 102 });
+5 -5
demos/zdog-logo/zdog-logo.js
··· 63 63 backface: false, 64 64 }); 65 65 endCap.copy({ 66 - translate: { x: 20, y: 16 }, 66 + translate: { x: 20, y: 16 }, 67 67 rotate: { y: -TAU/4 }, 68 68 }); 69 69 ··· 129 129 var tongueAnchor = new Zdog.Anchor({ 130 130 addTo: backGroup, 131 131 translate: { x: -6, y: -7 }, 132 - rotate: { y: TAU/4 }, 132 + rotate: { y: TAU/4 }, 133 133 134 134 }); 135 135 136 136 var tongueH = 12; 137 137 var tongueS = 5; 138 - var tongueTip = tongueH + tongueS; 138 + var tongueTip = tongueH + tongueS; 139 139 140 140 new Zdog.Shape({ 141 141 addTo: tongueAnchor, ··· 145 145 { x: tongueS, y: tongueH }, 146 146 { arc: [ 147 147 { x: tongueS, y: tongueTip }, 148 - { x: 0, y: tongueTip } 148 + { x: 0, y: tongueTip }, 149 149 ]}, 150 150 { arc: [ 151 151 { x: -tongueS, y: tongueTip }, 152 - { x: -tongueS, y: tongueH } 152 + { x: -tongueS, y: tongueH }, 153 153 ]}, 154 154 ], 155 155 rotate: { x: TAU/4 - Math.atan(16/22) },
-5
js/.jshintrc
··· 1 - { 2 - "browser": true, 3 - "unused": true, 4 - "undef": true 5 - }
+2 -2
js/anchor.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate'), require('./vector'), 10 - require('./canvas-renderer'), require('./svg-renderer') ); 10 + require('./canvas-renderer'), require('./svg-renderer') ); 11 11 } else { 12 12 // browser global 13 13 var Zdog = root.Zdog;
+6 -6
js/boilerplate.js
··· 13 13 ( function( root, factory ) { 14 14 // module definition 15 15 if ( typeof module == 'object' && module.exports ) { 16 - /* globals module */ // CommonJS 16 + // CommonJS 17 17 module.exports = factory(); 18 18 } else { 19 19 // browser global ··· 32 32 return a; 33 33 }; 34 34 35 - Zdog.lerp = function( a, b, t ) { 36 - return ( b - a ) * t + a; 35 + Zdog.lerp = function( a, b, alpha ) { 36 + return ( b - a ) * alpha + a; 37 37 }; 38 38 39 39 Zdog.modulo = function( num, div ) { ··· 52 52 }, 53 53 5: function( a ) { 54 54 return a * a * a * a * a; 55 - } 55 + }, 56 56 }; 57 57 58 58 Zdog.easeInOut = function( alpha, power ) { ··· 62 62 alpha = Math.max( 0, Math.min( 1, alpha ) ); 63 63 var isFirstHalf = alpha < 0.5; 64 64 var slope = isFirstHalf ? alpha : 1 - alpha; 65 - slope = slope / 0.5; 65 + slope /= 0.5; 66 66 // make easing steeper with more multiples 67 67 var powerMultiplier = powerMultipliers[ power ] || powerMultipliers[2]; 68 68 var curve = powerMultiplier( slope ); 69 - curve = curve / 2; 69 + curve /= 2; 70 70 return isFirstHalf ? curve : 1 - curve; 71 71 }; 72 72
+1 -1
js/box.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate'), require('./anchor'), 10 10 require('./shape'), require('./rect') ); 11 11 } else {
+1 -1
js/canvas-renderer.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory(); 10 10 } else { 11 11 // browser global
+3 -2
js/cone.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate'), require('./vector'), 10 10 require('./path-command'), require('./anchor'), require('./ellipse') ); 11 11 } else { ··· 69 69 return; 70 70 } 71 71 // update tangents 72 - var apexAngle = Math.atan2( this.renderNormal.y, this.renderNormal.x ) + TAU/2; 72 + var apexAngle = Math.atan2( this.renderNormal.y, this.renderNormal.x ) + 73 + TAU/2; 73 74 var projectLength = apexDistance / eccen; 74 75 var projectAngle = Math.acos( radius / projectLength ); 75 76 // set tangent points
+2 -2
js/cylinder.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate'), 10 10 require('./path-command'), require('./shape'), require('./group'), 11 11 require('./ellipse') ); ··· 20 20 function noop() {} 21 21 22 22 // ----- CylinderGroup ----- // 23 - 23 + 24 24 var CylinderGroup = Group.subclass({ 25 25 color: '#333', 26 26 updateSort: true,
+2 -2
js/dragger.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( root ); 10 10 } else { 11 11 // browser global ··· 49 49 Dragger.prototype.bindDrag = function( element ) { 50 50 element = this.getQueryElement( element ); 51 51 if ( element ) { 52 - element.addEventListener( downEvent , this ); 52 + element.addEventListener( downEvent, this ); 53 53 } 54 54 }; 55 55
+2 -2
js/ellipse.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./shape') ); 10 10 } else { 11 11 // browser global ··· 33 33 { arc: [ // top right 34 34 { x: x, y: -y }, 35 35 { x: x, y: 0 }, 36 - ]} 36 + ]}, 37 37 ]; 38 38 // bottom right 39 39 if ( this.quarters > 1 ) {
+2 -2
js/group.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./anchor') ); 10 10 } else { 11 11 // browser global ··· 52 52 Group.prototype.updateFlatGraph = function() { 53 53 // do not include self 54 54 var flatGraph = []; 55 - this.flatGraph = this.addChildFlatGraph( flatGraph ); 55 + this.flatGraph = this.addChildFlatGraph( flatGraph ); 56 56 }; 57 57 58 58 // do not include children, group handles rendering & sorting internally
+4 -4
js/hemisphere.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate'), require('./ellipse') ); 10 10 } else { 11 11 // browser global ··· 45 45 } else if ( renderer.isSvg ) { 46 46 // svg 47 47 contourAngle = (contourAngle - TAU/4) / TAU * 360; 48 - this.domeSvgElement.setAttribute( 'd', 'M ' + (-domeRadius) + ',0 A ' + 49 - domeRadius + ',' + domeRadius + ' 0 0 1 ' + domeRadius + ',0' ); 48 + this.domeSvgElement.setAttribute( 'd', 'M ' + -domeRadius + ',0 A ' + 49 + domeRadius + ',' + domeRadius + ' 0 0 1 ' + domeRadius + ',0' ); 50 50 this.domeSvgElement.setAttribute( 'transform', 51 - 'translate(' + x + ',' + y + ' ) rotate(' + contourAngle + ')' ); 51 + 'translate(' + x + ',' + y + ' ) rotate(' + contourAngle + ')' ); 52 52 } 53 53 54 54 renderer.stroke( ctx, elem, this.stroke, this.color, this.getLineWidth() );
+4 -3
js/illustration.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate'), require('./anchor'), 10 10 require('./dragger') ); 11 11 } else { ··· 48 48 } 49 49 50 50 var nodeName = element.nodeName.toLowerCase(); 51 - if ( nodeName == 'canvas' ) { 51 + if ( nodeName == 'canvas' ) { 52 52 this.setCanvas( element ); 53 53 } else if ( nodeName == 'svg' ) { 54 54 this.setSvg( element ); ··· 163 163 this.onPrerender( ctx ); 164 164 }; 165 165 166 - Illustration.prototype.postrenderCanvas = function () { 166 + Illustration.prototype.postrenderCanvas = function() { 167 167 this.ctx.restore(); 168 168 }; 169 169 ··· 217 217 if ( !item ) { 218 218 return; 219 219 } else if ( item === true ) { 220 + /* eslint consistent-this: "off" */ 220 221 item = this; 221 222 } 222 223 this.dragRotate = item;
+20 -21
js/index.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( 10 - require('./boilerplate'), 11 - require('./canvas-renderer'), 12 - require('./svg-renderer'), 13 - require('./vector'), 14 - require('./anchor'), 15 - require('./dragger'), 16 - require('./illustration'), 17 - require('./path-command'), 18 - require('./shape'), 19 - require('./group'), 20 - require('./rect'), 21 - require('./rounded-rect'), 22 - require('./ellipse'), 23 - require('./polygon'), 24 - require('./hemisphere'), 25 - require('./cylinder'), 26 - require('./cone'), 27 - require('./box') 10 + require('./boilerplate'), 11 + require('./canvas-renderer'), 12 + require('./svg-renderer'), 13 + require('./vector'), 14 + require('./anchor'), 15 + require('./dragger'), 16 + require('./illustration'), 17 + require('./path-command'), 18 + require('./shape'), 19 + require('./group'), 20 + require('./rect'), 21 + require('./rounded-rect'), 22 + require('./ellipse'), 23 + require('./polygon'), 24 + require('./hemisphere'), 25 + require('./cylinder'), 26 + require('./cone'), 27 + require('./box') 28 28 ); 29 29 } else if ( typeof define == 'function' && define.amd ) { 30 30 /* globals define */ // AMD ··· 53 53 Zdog.Box = Box; 54 54 55 55 return Zdog; 56 - } 57 - ); 56 + });
+5 -3
js/path-command.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./vector') ); 10 10 } else { 11 11 // browser global ··· 73 73 return renderer.bezier( ctx, elem, cp0, cp1, end ); 74 74 }; 75 75 76 + var arcHandleLength = 9/16; 77 + 76 78 PathCommand.prototype.arc = function( ctx, elem, renderer ) { 77 79 var prev = this.previousPoint; 78 80 var corner = this.renderPoints[0]; 79 81 var end = this.renderPoints[1]; 80 82 var cp0 = this.controlPoints[0]; 81 83 var cp1 = this.controlPoints[1]; 82 - cp0.set( prev ).lerp( corner, 9/16 ); 83 - cp1.set( end ).lerp( corner, 9/16 ); 84 + cp0.set( prev ).lerp( corner, arcHandleLength ); 85 + cp1.set( end ).lerp( corner, arcHandleLength ); 84 86 return renderer.bezier( ctx, elem, cp0, cp1, end ); 85 87 }; 86 88
+1 -1
js/polygon.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate'), require('./shape') ); 10 10 } else { 11 11 // browser global
+2 -1
js/rect.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */// CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./shape') ); 10 10 } else { 11 11 // browser global ··· 22 22 Rect.prototype.setPath = function() { 23 23 var x = this.width / 2; 24 24 var y = this.height / 2; 25 + /* eslint key-spacing: "off" */ 25 26 this.path = [ 26 27 { x: -x, y: -y }, 27 28 { x: x, y: -y },
+4 -1
js/rounded-rect.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./shape') ); 10 10 } else { 11 11 // browser global ··· 22 22 }); 23 23 24 24 RoundedRect.prototype.setPath = function() { 25 + /* eslint 26 + id-length: [ "error", { "min": 2, "exceptions": [ "x", "y" ] }], 27 + key-spacing: "off" */ 25 28 var xA = this.width / 2; 26 29 var yA = this.height / 2; 27 30 var shortSide = Math.min( xA, yA );
+2 -2
js/shape.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 9 - module.exports = factory( require('./boilerplate'), require('./vector'), 8 + // CommonJS 9 + module.exports = factory( require('./boilerplate'), require('./vector'), 10 10 require('./path-command'), require('./anchor') ); 11 11 } else { 12 12 // browser global
+1 -1
js/svg-renderer.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory(); 10 10 } else { 11 11 // browser global
+5 -5
js/vector.js
··· 5 5 ( function( root, factory ) { 6 6 // module definition 7 7 if ( typeof module == 'object' && module.exports ) { 8 - /* globals module, require */ // CommonJS 8 + // CommonJS 9 9 module.exports = factory( require('./boilerplate') ); 10 10 } else { 11 11 // browser global ··· 120 120 return this; 121 121 }; 122 122 123 - Vector.prototype.lerp = function( pos, t ) { 124 - this.x = utils.lerp( this.x, pos.x || 0, t ); 125 - this.y = utils.lerp( this.y, pos.y || 0, t ); 126 - this.z = utils.lerp( this.z, pos.z || 0, t ); 123 + Vector.prototype.lerp = function( pos, alpha ) { 124 + this.x = utils.lerp( this.x, pos.x || 0, alpha ); 125 + this.y = utils.lerp( this.y, pos.y || 0, alpha ); 126 + this.z = utils.lerp( this.z, pos.z || 0, alpha ); 127 127 return this; 128 128 }; 129 129
+804 -96
package-lock.json
··· 4 4 "lockfileVersion": 1, 5 5 "requires": true, 6 6 "dependencies": { 7 + "@babel/code-frame": { 8 + "version": "7.0.0", 9 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", 10 + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", 11 + "dev": true, 12 + "requires": { 13 + "@babel/highlight": "^7.0.0" 14 + } 15 + }, 16 + "@babel/highlight": { 17 + "version": "7.0.0", 18 + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", 19 + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", 20 + "dev": true, 21 + "requires": { 22 + "chalk": "^2.0.0", 23 + "esutils": "^2.0.2", 24 + "js-tokens": "^4.0.0" 25 + } 26 + }, 27 + "acorn": { 28 + "version": "6.1.1", 29 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", 30 + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", 31 + "dev": true 32 + }, 33 + "acorn-jsx": { 34 + "version": "5.0.1", 35 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", 36 + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", 37 + "dev": true 38 + }, 39 + "ajv": { 40 + "version": "6.10.0", 41 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 42 + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 43 + "dev": true, 44 + "requires": { 45 + "fast-deep-equal": "^2.0.1", 46 + "fast-json-stable-stringify": "^2.0.0", 47 + "json-schema-traverse": "^0.4.1", 48 + "uri-js": "^4.2.2" 49 + } 50 + }, 51 + "ansi-escapes": { 52 + "version": "3.2.0", 53 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 54 + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 55 + "dev": true 56 + }, 57 + "ansi-regex": { 58 + "version": "3.0.0", 59 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 60 + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 61 + "dev": true 62 + }, 63 + "ansi-styles": { 64 + "version": "3.2.1", 65 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 66 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 67 + "dev": true, 68 + "requires": { 69 + "color-convert": "^1.9.0" 70 + } 71 + }, 72 + "argparse": { 73 + "version": "1.0.10", 74 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 75 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 76 + "dev": true, 77 + "requires": { 78 + "sprintf-js": "~1.0.2" 79 + } 80 + }, 81 + "astral-regex": { 82 + "version": "1.0.0", 83 + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 84 + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 85 + "dev": true 86 + }, 7 87 "balanced-match": { 8 88 "version": "1.0.0", 9 89 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", ··· 20 100 "concat-map": "0.0.1" 21 101 } 22 102 }, 23 - "cli": { 24 - "version": "1.0.1", 25 - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", 26 - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", 103 + "callsites": { 104 + "version": "3.1.0", 105 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 106 + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 107 + "dev": true 108 + }, 109 + "chalk": { 110 + "version": "2.4.2", 111 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 112 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 113 + "dev": true, 114 + "requires": { 115 + "ansi-styles": "^3.2.1", 116 + "escape-string-regexp": "^1.0.5", 117 + "supports-color": "^5.3.0" 118 + } 119 + }, 120 + "chardet": { 121 + "version": "0.7.0", 122 + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 123 + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 124 + "dev": true 125 + }, 126 + "cli-cursor": { 127 + "version": "2.1.0", 128 + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 129 + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 130 + "dev": true, 131 + "requires": { 132 + "restore-cursor": "^2.0.0" 133 + } 134 + }, 135 + "cli-width": { 136 + "version": "2.2.0", 137 + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 138 + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 139 + "dev": true 140 + }, 141 + "color-convert": { 142 + "version": "1.9.3", 143 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 144 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 27 145 "dev": true, 28 146 "requires": { 29 - "exit": "0.1.2", 30 - "glob": "^7.1.1" 147 + "color-name": "1.1.3" 31 148 } 149 + }, 150 + "color-name": { 151 + "version": "1.1.3", 152 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 153 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 154 + "dev": true 32 155 }, 33 156 "commander": { 34 157 "version": "2.19.0", ··· 42 165 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 43 166 "dev": true 44 167 }, 45 - "console-browserify": { 46 - "version": "1.1.0", 47 - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 48 - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 168 + "cross-spawn": { 169 + "version": "6.0.5", 170 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 171 + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 49 172 "dev": true, 50 173 "requires": { 51 - "date-now": "^0.1.4" 174 + "nice-try": "^1.0.4", 175 + "path-key": "^2.0.1", 176 + "semver": "^5.5.0", 177 + "shebang-command": "^1.2.0", 178 + "which": "^1.2.9" 52 179 } 53 180 }, 54 - "core-util-is": { 55 - "version": "1.0.2", 56 - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 57 - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 181 + "debug": { 182 + "version": "4.1.1", 183 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 184 + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 185 + "dev": true, 186 + "requires": { 187 + "ms": "^2.1.1" 188 + } 189 + }, 190 + "deep-is": { 191 + "version": "0.1.3", 192 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 193 + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 58 194 "dev": true 59 195 }, 60 - "date-now": { 61 - "version": "0.1.4", 62 - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 63 - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 196 + "doctrine": { 197 + "version": "3.0.0", 198 + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 199 + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 200 + "dev": true, 201 + "requires": { 202 + "esutils": "^2.0.2" 203 + } 204 + }, 205 + "emoji-regex": { 206 + "version": "7.0.3", 207 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 208 + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 64 209 "dev": true 65 210 }, 66 - "dom-serializer": { 67 - "version": "0.1.1", 68 - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 69 - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 211 + "escape-string-regexp": { 212 + "version": "1.0.5", 213 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 214 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 215 + "dev": true 216 + }, 217 + "eslint": { 218 + "version": "5.16.0", 219 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", 220 + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", 70 221 "dev": true, 71 222 "requires": { 72 - "domelementtype": "^1.3.0", 73 - "entities": "^1.1.1" 223 + "@babel/code-frame": "^7.0.0", 224 + "ajv": "^6.9.1", 225 + "chalk": "^2.1.0", 226 + "cross-spawn": "^6.0.5", 227 + "debug": "^4.0.1", 228 + "doctrine": "^3.0.0", 229 + "eslint-scope": "^4.0.3", 230 + "eslint-utils": "^1.3.1", 231 + "eslint-visitor-keys": "^1.0.0", 232 + "espree": "^5.0.1", 233 + "esquery": "^1.0.1", 234 + "esutils": "^2.0.2", 235 + "file-entry-cache": "^5.0.1", 236 + "functional-red-black-tree": "^1.0.1", 237 + "glob": "^7.1.2", 238 + "globals": "^11.7.0", 239 + "ignore": "^4.0.6", 240 + "import-fresh": "^3.0.0", 241 + "imurmurhash": "^0.1.4", 242 + "inquirer": "^6.2.2", 243 + "js-yaml": "^3.13.0", 244 + "json-stable-stringify-without-jsonify": "^1.0.1", 245 + "levn": "^0.3.0", 246 + "lodash": "^4.17.11", 247 + "minimatch": "^3.0.4", 248 + "mkdirp": "^0.5.1", 249 + "natural-compare": "^1.4.0", 250 + "optionator": "^0.8.2", 251 + "path-is-inside": "^1.0.2", 252 + "progress": "^2.0.0", 253 + "regexpp": "^2.0.1", 254 + "semver": "^5.5.1", 255 + "strip-ansi": "^4.0.0", 256 + "strip-json-comments": "^2.0.1", 257 + "table": "^5.2.3", 258 + "text-table": "^0.2.0" 74 259 }, 75 260 "dependencies": { 76 - "entities": { 77 - "version": "1.1.2", 78 - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 79 - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", 261 + "strip-json-comments": { 262 + "version": "2.0.1", 263 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 264 + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 80 265 "dev": true 81 266 } 82 267 } 83 268 }, 84 - "domelementtype": { 269 + "eslint-scope": { 270 + "version": "4.0.3", 271 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", 272 + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", 273 + "dev": true, 274 + "requires": { 275 + "esrecurse": "^4.1.0", 276 + "estraverse": "^4.1.1" 277 + } 278 + }, 279 + "eslint-utils": { 85 280 "version": "1.3.1", 86 - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 87 - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 281 + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", 282 + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", 283 + "dev": true 284 + }, 285 + "eslint-visitor-keys": { 286 + "version": "1.0.0", 287 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 288 + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", 289 + "dev": true 290 + }, 291 + "espree": { 292 + "version": "5.0.1", 293 + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", 294 + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", 295 + "dev": true, 296 + "requires": { 297 + "acorn": "^6.0.7", 298 + "acorn-jsx": "^5.0.0", 299 + "eslint-visitor-keys": "^1.0.0" 300 + } 301 + }, 302 + "esprima": { 303 + "version": "4.0.1", 304 + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 305 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 88 306 "dev": true 89 307 }, 90 - "domhandler": { 91 - "version": "2.3.0", 92 - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 93 - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", 308 + "esquery": { 309 + "version": "1.0.1", 310 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", 311 + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", 94 312 "dev": true, 95 313 "requires": { 96 - "domelementtype": "1" 314 + "estraverse": "^4.0.0" 97 315 } 98 316 }, 99 - "domutils": { 100 - "version": "1.5.1", 101 - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 102 - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 317 + "esrecurse": { 318 + "version": "4.2.1", 319 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 320 + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 103 321 "dev": true, 104 322 "requires": { 105 - "dom-serializer": "0", 106 - "domelementtype": "1" 323 + "estraverse": "^4.1.0" 107 324 } 108 325 }, 109 - "entities": { 110 - "version": "1.0.0", 111 - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 112 - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", 326 + "estraverse": { 327 + "version": "4.2.0", 328 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 329 + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 330 + "dev": true 331 + }, 332 + "esutils": { 333 + "version": "2.0.2", 334 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 335 + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 336 + "dev": true 337 + }, 338 + "external-editor": { 339 + "version": "3.0.3", 340 + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", 341 + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", 342 + "dev": true, 343 + "requires": { 344 + "chardet": "^0.7.0", 345 + "iconv-lite": "^0.4.24", 346 + "tmp": "^0.0.33" 347 + } 348 + }, 349 + "fast-deep-equal": { 350 + "version": "2.0.1", 351 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 352 + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 353 + "dev": true 354 + }, 355 + "fast-json-stable-stringify": { 356 + "version": "2.0.0", 357 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 358 + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 359 + "dev": true 360 + }, 361 + "fast-levenshtein": { 362 + "version": "2.0.6", 363 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 364 + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 113 365 "dev": true 114 366 }, 115 - "exit": { 116 - "version": "0.1.2", 117 - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 118 - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", 367 + "figures": { 368 + "version": "2.0.0", 369 + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 370 + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 371 + "dev": true, 372 + "requires": { 373 + "escape-string-regexp": "^1.0.5" 374 + } 375 + }, 376 + "file-entry-cache": { 377 + "version": "5.0.1", 378 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 379 + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 380 + "dev": true, 381 + "requires": { 382 + "flat-cache": "^2.0.1" 383 + } 384 + }, 385 + "flat-cache": { 386 + "version": "2.0.1", 387 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 388 + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 389 + "dev": true, 390 + "requires": { 391 + "flatted": "^2.0.0", 392 + "rimraf": "2.6.3", 393 + "write": "1.0.3" 394 + } 395 + }, 396 + "flatted": { 397 + "version": "2.0.0", 398 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", 399 + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", 119 400 "dev": true 120 401 }, 121 402 "fs.realpath": { 122 403 "version": "1.0.0", 123 404 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 124 405 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 406 + "dev": true 407 + }, 408 + "functional-red-black-tree": { 409 + "version": "1.0.1", 410 + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 411 + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 125 412 "dev": true 126 413 }, 127 414 "glob": { ··· 138 425 "path-is-absolute": "^1.0.0" 139 426 } 140 427 }, 141 - "htmlparser2": { 142 - "version": "3.8.3", 143 - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 144 - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", 428 + "globals": { 429 + "version": "11.12.0", 430 + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 431 + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 432 + "dev": true 433 + }, 434 + "has-flag": { 435 + "version": "3.0.0", 436 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 437 + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 438 + "dev": true 439 + }, 440 + "iconv-lite": { 441 + "version": "0.4.24", 442 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 443 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 145 444 "dev": true, 146 445 "requires": { 147 - "domelementtype": "1", 148 - "domhandler": "2.3", 149 - "domutils": "1.5", 150 - "entities": "1.0", 151 - "readable-stream": "1.1" 446 + "safer-buffer": ">= 2.1.2 < 3" 152 447 } 153 448 }, 449 + "ignore": { 450 + "version": "4.0.6", 451 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 452 + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 453 + "dev": true 454 + }, 455 + "import-fresh": { 456 + "version": "3.0.0", 457 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", 458 + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", 459 + "dev": true, 460 + "requires": { 461 + "parent-module": "^1.0.0", 462 + "resolve-from": "^4.0.0" 463 + } 464 + }, 465 + "imurmurhash": { 466 + "version": "0.1.4", 467 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 468 + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 469 + "dev": true 470 + }, 154 471 "inflight": { 155 472 "version": "1.0.6", 156 473 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", ··· 167 484 "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 168 485 "dev": true 169 486 }, 170 - "isarray": { 171 - "version": "0.0.1", 172 - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 173 - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 487 + "inquirer": { 488 + "version": "6.3.1", 489 + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", 490 + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", 491 + "dev": true, 492 + "requires": { 493 + "ansi-escapes": "^3.2.0", 494 + "chalk": "^2.4.2", 495 + "cli-cursor": "^2.1.0", 496 + "cli-width": "^2.0.0", 497 + "external-editor": "^3.0.3", 498 + "figures": "^2.0.0", 499 + "lodash": "^4.17.11", 500 + "mute-stream": "0.0.7", 501 + "run-async": "^2.2.0", 502 + "rxjs": "^6.4.0", 503 + "string-width": "^2.1.0", 504 + "strip-ansi": "^5.1.0", 505 + "through": "^2.3.6" 506 + }, 507 + "dependencies": { 508 + "ansi-regex": { 509 + "version": "4.1.0", 510 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 511 + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 512 + "dev": true 513 + }, 514 + "strip-ansi": { 515 + "version": "5.2.0", 516 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 517 + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 518 + "dev": true, 519 + "requires": { 520 + "ansi-regex": "^4.1.0" 521 + } 522 + } 523 + } 524 + }, 525 + "is-fullwidth-code-point": { 526 + "version": "2.0.0", 527 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 528 + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 174 529 "dev": true 175 530 }, 176 - "jshint": { 177 - "version": "2.10.2", 178 - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.2.tgz", 179 - "integrity": "sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA==", 531 + "is-promise": { 532 + "version": "2.1.0", 533 + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 534 + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 535 + "dev": true 536 + }, 537 + "isexe": { 538 + "version": "2.0.0", 539 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 540 + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 541 + "dev": true 542 + }, 543 + "js-tokens": { 544 + "version": "4.0.0", 545 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 546 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 547 + "dev": true 548 + }, 549 + "js-yaml": { 550 + "version": "3.13.1", 551 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 552 + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 553 + "dev": true, 554 + "requires": { 555 + "argparse": "^1.0.7", 556 + "esprima": "^4.0.0" 557 + } 558 + }, 559 + "json-schema-traverse": { 560 + "version": "0.4.1", 561 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 562 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 563 + "dev": true 564 + }, 565 + "json-stable-stringify-without-jsonify": { 566 + "version": "1.0.1", 567 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 568 + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 569 + "dev": true 570 + }, 571 + "levn": { 572 + "version": "0.3.0", 573 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 574 + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 180 575 "dev": true, 181 576 "requires": { 182 - "cli": "~1.0.0", 183 - "console-browserify": "1.1.x", 184 - "exit": "0.1.x", 185 - "htmlparser2": "3.8.x", 186 - "lodash": "~4.17.11", 187 - "minimatch": "~3.0.2", 188 - "shelljs": "0.3.x", 189 - "strip-json-comments": "1.0.x" 577 + "prelude-ls": "~1.1.2", 578 + "type-check": "~0.3.2" 190 579 } 191 580 }, 192 581 "lodash": { ··· 195 584 "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", 196 585 "dev": true 197 586 }, 587 + "mimic-fn": { 588 + "version": "1.2.0", 589 + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 590 + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 591 + "dev": true 592 + }, 198 593 "minimatch": { 199 594 "version": "3.0.4", 200 595 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", ··· 204 599 "brace-expansion": "^1.1.7" 205 600 } 206 601 }, 602 + "minimist": { 603 + "version": "0.0.8", 604 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 605 + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 606 + "dev": true 607 + }, 608 + "mkdirp": { 609 + "version": "0.5.1", 610 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 611 + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 612 + "dev": true, 613 + "requires": { 614 + "minimist": "0.0.8" 615 + } 616 + }, 617 + "ms": { 618 + "version": "2.1.1", 619 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 620 + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 621 + "dev": true 622 + }, 623 + "mute-stream": { 624 + "version": "0.0.7", 625 + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 626 + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 627 + "dev": true 628 + }, 629 + "natural-compare": { 630 + "version": "1.4.0", 631 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 632 + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 633 + "dev": true 634 + }, 635 + "nice-try": { 636 + "version": "1.0.5", 637 + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 638 + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 639 + "dev": true 640 + }, 207 641 "once": { 208 642 "version": "1.4.0", 209 643 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", ··· 213 647 "wrappy": "1" 214 648 } 215 649 }, 650 + "onetime": { 651 + "version": "2.0.1", 652 + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 653 + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 654 + "dev": true, 655 + "requires": { 656 + "mimic-fn": "^1.0.0" 657 + } 658 + }, 659 + "optionator": { 660 + "version": "0.8.2", 661 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 662 + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 663 + "dev": true, 664 + "requires": { 665 + "deep-is": "~0.1.3", 666 + "fast-levenshtein": "~2.0.4", 667 + "levn": "~0.3.0", 668 + "prelude-ls": "~1.1.2", 669 + "type-check": "~0.3.2", 670 + "wordwrap": "~1.0.0" 671 + } 672 + }, 673 + "os-tmpdir": { 674 + "version": "1.0.2", 675 + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 676 + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 677 + "dev": true 678 + }, 679 + "parent-module": { 680 + "version": "1.0.1", 681 + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 682 + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 683 + "dev": true, 684 + "requires": { 685 + "callsites": "^3.0.0" 686 + } 687 + }, 216 688 "path-is-absolute": { 217 689 "version": "1.0.1", 218 690 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 219 691 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 220 692 "dev": true 221 693 }, 222 - "readable-stream": { 223 - "version": "1.1.14", 224 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 225 - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 694 + "path-is-inside": { 695 + "version": "1.0.2", 696 + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 697 + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 698 + "dev": true 699 + }, 700 + "path-key": { 701 + "version": "2.0.1", 702 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 703 + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 704 + "dev": true 705 + }, 706 + "prelude-ls": { 707 + "version": "1.1.2", 708 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 709 + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 710 + "dev": true 711 + }, 712 + "progress": { 713 + "version": "2.0.3", 714 + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 715 + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 716 + "dev": true 717 + }, 718 + "punycode": { 719 + "version": "2.1.1", 720 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 721 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 722 + "dev": true 723 + }, 724 + "regexpp": { 725 + "version": "2.0.1", 726 + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 727 + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 728 + "dev": true 729 + }, 730 + "resolve-from": { 731 + "version": "4.0.0", 732 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 733 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 734 + "dev": true 735 + }, 736 + "restore-cursor": { 737 + "version": "2.0.0", 738 + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 739 + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 226 740 "dev": true, 227 741 "requires": { 228 - "core-util-is": "~1.0.0", 229 - "inherits": "~2.0.1", 230 - "isarray": "0.0.1", 231 - "string_decoder": "~0.10.x" 742 + "onetime": "^2.0.0", 743 + "signal-exit": "^3.0.2" 744 + } 745 + }, 746 + "rimraf": { 747 + "version": "2.6.3", 748 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 749 + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 750 + "dev": true, 751 + "requires": { 752 + "glob": "^7.1.3" 753 + } 754 + }, 755 + "run-async": { 756 + "version": "2.3.0", 757 + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 758 + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 759 + "dev": true, 760 + "requires": { 761 + "is-promise": "^2.1.0" 762 + } 763 + }, 764 + "rxjs": { 765 + "version": "6.5.2", 766 + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", 767 + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", 768 + "dev": true, 769 + "requires": { 770 + "tslib": "^1.9.0" 232 771 } 233 772 }, 234 - "shelljs": { 235 - "version": "0.3.0", 236 - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", 237 - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", 773 + "safer-buffer": { 774 + "version": "2.1.2", 775 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 776 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 777 + "dev": true 778 + }, 779 + "semver": { 780 + "version": "5.7.0", 781 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 782 + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", 783 + "dev": true 784 + }, 785 + "shebang-command": { 786 + "version": "1.2.0", 787 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 788 + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 789 + "dev": true, 790 + "requires": { 791 + "shebang-regex": "^1.0.0" 792 + } 793 + }, 794 + "shebang-regex": { 795 + "version": "1.0.0", 796 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 797 + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 238 798 "dev": true 239 799 }, 800 + "signal-exit": { 801 + "version": "3.0.2", 802 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 803 + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 804 + "dev": true 805 + }, 806 + "slice-ansi": { 807 + "version": "2.1.0", 808 + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 809 + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 810 + "dev": true, 811 + "requires": { 812 + "ansi-styles": "^3.2.0", 813 + "astral-regex": "^1.0.0", 814 + "is-fullwidth-code-point": "^2.0.0" 815 + } 816 + }, 240 817 "source-map": { 241 818 "version": "0.6.1", 242 819 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 243 820 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 244 821 "dev": true 245 822 }, 246 - "string_decoder": { 247 - "version": "0.10.31", 248 - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 249 - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 823 + "sprintf-js": { 824 + "version": "1.0.3", 825 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 826 + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 827 + "dev": true 828 + }, 829 + "string-width": { 830 + "version": "2.1.1", 831 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 832 + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 833 + "dev": true, 834 + "requires": { 835 + "is-fullwidth-code-point": "^2.0.0", 836 + "strip-ansi": "^4.0.0" 837 + } 838 + }, 839 + "strip-ansi": { 840 + "version": "4.0.0", 841 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 842 + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 843 + "dev": true, 844 + "requires": { 845 + "ansi-regex": "^3.0.0" 846 + } 847 + }, 848 + "supports-color": { 849 + "version": "5.5.0", 850 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 851 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 852 + "dev": true, 853 + "requires": { 854 + "has-flag": "^3.0.0" 855 + } 856 + }, 857 + "table": { 858 + "version": "5.4.0", 859 + "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", 860 + "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", 861 + "dev": true, 862 + "requires": { 863 + "ajv": "^6.9.1", 864 + "lodash": "^4.17.11", 865 + "slice-ansi": "^2.1.0", 866 + "string-width": "^3.0.0" 867 + }, 868 + "dependencies": { 869 + "ansi-regex": { 870 + "version": "4.1.0", 871 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 872 + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 873 + "dev": true 874 + }, 875 + "string-width": { 876 + "version": "3.1.0", 877 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 878 + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 879 + "dev": true, 880 + "requires": { 881 + "emoji-regex": "^7.0.1", 882 + "is-fullwidth-code-point": "^2.0.0", 883 + "strip-ansi": "^5.1.0" 884 + } 885 + }, 886 + "strip-ansi": { 887 + "version": "5.2.0", 888 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 889 + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 890 + "dev": true, 891 + "requires": { 892 + "ansi-regex": "^4.1.0" 893 + } 894 + } 895 + } 896 + }, 897 + "text-table": { 898 + "version": "0.2.0", 899 + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 900 + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 250 901 "dev": true 251 902 }, 252 - "strip-json-comments": { 253 - "version": "1.0.4", 254 - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 255 - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", 903 + "through": { 904 + "version": "2.3.8", 905 + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 906 + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 256 907 "dev": true 257 908 }, 909 + "tmp": { 910 + "version": "0.0.33", 911 + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 912 + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 913 + "dev": true, 914 + "requires": { 915 + "os-tmpdir": "~1.0.2" 916 + } 917 + }, 918 + "tslib": { 919 + "version": "1.9.3", 920 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", 921 + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", 922 + "dev": true 923 + }, 924 + "type-check": { 925 + "version": "0.3.2", 926 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 927 + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 928 + "dev": true, 929 + "requires": { 930 + "prelude-ls": "~1.1.2" 931 + } 932 + }, 258 933 "uglify-js": { 259 934 "version": "3.5.3", 260 935 "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.3.tgz", ··· 265 940 "source-map": "~0.6.1" 266 941 } 267 942 }, 943 + "uri-js": { 944 + "version": "4.2.2", 945 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 946 + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 947 + "dev": true, 948 + "requires": { 949 + "punycode": "^2.1.0" 950 + } 951 + }, 952 + "which": { 953 + "version": "1.3.1", 954 + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 955 + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 956 + "dev": true, 957 + "requires": { 958 + "isexe": "^2.0.0" 959 + } 960 + }, 961 + "wordwrap": { 962 + "version": "1.0.0", 963 + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 964 + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 965 + "dev": true 966 + }, 268 967 "wrappy": { 269 968 "version": "1.0.2", 270 969 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 271 970 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 272 971 "dev": true 972 + }, 973 + "write": { 974 + "version": "1.0.3", 975 + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 976 + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 977 + "dev": true, 978 + "requires": { 979 + "mkdirp": "^0.5.1" 980 + } 273 981 } 274 982 } 275 983 }
+1 -1
package.json
··· 11 11 ], 12 12 "dependencies": {}, 13 13 "devDependencies": { 14 - "jshint": "^2.10.2", 14 + "eslint": "^5.16.0", 15 15 "uglify-js": "^3.5.3" 16 16 }, 17 17 "scripts": {
+26
tasks/.eslintrc.json
··· 1 + { 2 + "extends": "../.eslintrc.json", 3 + "env": { 4 + "browser": false 5 + }, 6 + "parserOptions": { 7 + "ecmaVersion": 2018 8 + }, 9 + "globals": { 10 + "console": "readonly" 11 + }, 12 + "rules": { 13 + "callback-return": "error", 14 + "global-require": "error", 15 + "handle-callback-err": "error", 16 + "id-length": [ "error", { 17 + "min": 2, 18 + "max": 30 19 + }], 20 + "max-params": [ "error", { 21 + "max": 4 22 + }], 23 + "no-console": "off", 24 + "no-var": "error" 25 + } 26 + }
-6
tasks/.jshintrc
··· 1 - { 2 - "esversion": 6, 3 - "node": true, 4 - "unused": true, 5 - "undef": true 6 - }
+3 -3
tasks/bundle.js
··· 4 4 // get file paths from index.js 5 5 const indexPath = 'js/index.js'; 6 6 let indexSrc = fs.readFileSync( `./${indexPath}`, 'utf8' ); 7 - let cjsBlockRegex = /module\.exports = factory\([\w ,'\.\-\(\)\/\n]+;/i; 7 + let cjsBlockRegex = /module\.exports = factory\([\w ,'.\-()/\n]+;/i; 8 8 let cjsBlockMatch = indexSrc.match( cjsBlockRegex ); 9 - let paths = cjsBlockMatch[0].match( /require\('([\.\-\/\w]+)'\)/gi ); 9 + let paths = cjsBlockMatch[0].match( /require\('([.\-/\w]+)'\)/gi ); 10 10 11 11 paths = paths.map( function( path ) { 12 - return path.replace( `require('.`, 'js' ).replace( `')`, '.js' ); 12 + return path.replace( "require('.", 'js' ).replace( "')", '.js' ); 13 13 }); 14 14 paths.push( indexPath ); 15 15