diff --git a/.gitignore b/.gitignore index 91b829c..70b5cb7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ .idea node_modules .DS_STORE +.vscode # ignore generated grammars -formatted-data +src/formatted-data src/grammars/generated diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..e438d55 --- /dev/null +++ b/.npmignore @@ -0,0 +1,4 @@ +test +src/grammars/json +src/grammars/js +src/grammars/nearley diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fd12500 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Mahir Shah + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..0e21ca7 --- /dev/null +++ b/NOTICE @@ -0,0 +1,7 @@ +This software uses a derivative form of the data contained in +https://github.com/mdn/data/blob/master/ (MDN Data). The software that is +a derivative form of MDN Data, either checked in under src/grammar/ or +distributed under src/grammar/generated, is licensed under MPL 2.0 +(https://www.mozilla.org/en-US/MPL/2.0/). + +All other software contained in this project is provided under the MIT license. \ No newline at end of file diff --git a/README.md b/README.md index 4bd34c0..5b7182c 100644 --- a/README.md +++ b/README.md @@ -316,6 +316,23 @@ setting a property to its initial value. * `property` - string. the property to which the value is assigned. * `value` string. the value to check. +##### Examples + +```js +console.log(isInitialValue('padding-left', '0')); +// => true +console.log(isInitialValue('padding-left', '0px')); +// => true +console.log(isInitialValue('padding-left', '1px')); +// => false +console.log(isInitialValue('padding', '0')); +// => true +console.log(isInitialValue('padding', '0 0px 0in')); +// => true +console.log(isInitialValue('padding', '1px')); +// => false +``` + ### [initialValues(property, recursivelyResolve, includeShorthands)](./src/initialValueMap.js) Get the initial values for a property. diff --git a/package-lock.json b/package-lock.json index e434e98..13bb63c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,8 @@ { "name": "css-property-parser", - "version": "0.1.0", + "version": "1.0.2", "lockfileVersion": 1, + "requires": true, "dependencies": { "acorn": { "version": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", @@ -12,6 +13,9 @@ "version": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, + "requires": { + "acorn": "3.3.0" + }, "dependencies": { "acorn": { "version": "3.3.0", @@ -24,7 +28,11 @@ "ajv": { "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true + "dev": true, + "requires": { + "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + } }, "ajv-keywords": { "version": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", @@ -36,6 +44,9 @@ "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", "dev": true, + "requires": { + "emoji-regex": "6.1.3" + }, "dependencies": { "emoji-regex": { "version": "6.1.3", @@ -70,17 +81,27 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz" + } }, "argparse": { "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + } }, "array-union": { "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true + "dev": true, + "requires": { + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + } }, "array-uniq": { "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -102,12 +123,20 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } }, "babel-code-frame": { "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz" + } }, "bail": { "version": "1.0.2", @@ -124,7 +153,11 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "platform": "1.3.4" + } }, "bindings": { "version": "1.2.1", @@ -136,7 +169,10 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz" + } }, "boundary": { "version": "1.0.1", @@ -147,7 +183,11 @@ "brace-expansion": { "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } }, "browser-stdout": { "version": "1.3.0", @@ -164,7 +204,10 @@ "caller-path": { "version": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true + "dev": true, + "requires": { + "callsites": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz" + } }, "callsites": { "version": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", @@ -181,12 +224,27 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", - "dev": true + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.3" + } }, "chalk": { "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } }, "character-entities": { "version": "1.2.1", @@ -232,7 +290,10 @@ "cli-cursor": { "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true + "dev": true, + "requires": { + "restore-cursor": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" + } }, "cli-width": { "version": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", @@ -264,7 +325,10 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "concat-map": { "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -274,7 +338,12 @@ "concat-stream": { "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true + "dev": true, + "requires": { + "inherits": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + } }, "console-control-strings": { "version": "1.1.0", @@ -290,14 +359,19 @@ }, "core-util-is": { "version": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-/4yt0HQoITgJEgOzwD9bEetKOIs=", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.2.14" + } }, "css-color-names": { "version": "0.0.4", @@ -310,6 +384,11 @@ "resolved": "https://registry.npmjs.org/css-values/-/css-values-0.1.0.tgz", "integrity": "sha1-Eot84QPU3AJ6gUpdWZXFR4HXtMY=", "dev": true, + "requires": { + "css-color-names": "0.0.4", + "ends-with": "0.2.0", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + }, "dependencies": { "ends-with": { "version": "0.2.0", @@ -322,18 +401,27 @@ "d": { "version": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true + "dev": true, + "requires": { + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz" + } }, "debug": { "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true + "dev": true, + "requires": { + "type-detect": "4.0.3" + } }, "deep-extend": { "version": "0.4.2", @@ -349,7 +437,16 @@ "del": { "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true + "dev": true, + "requires": { + "globby": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "is-path-cwd": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "is-path-in-cwd": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz" + } }, "delegates": { "version": "1.0.0", @@ -373,6 +470,14 @@ "resolved": "https://registry.npmjs.org/doctoc/-/doctoc-1.3.0.tgz", "integrity": "sha1-fwg5hR3VjICKLK5V2VBOAS0I7jA=", "dev": true, + "requires": { + "anchor-markdown-header": "0.5.7", + "htmlparser2": "3.9.2", + "markdown-to-ast": "3.4.0", + "minimist": "1.2.0", + "underscore": "1.8.3", + "update-section": "0.3.3" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -391,13 +496,21 @@ "doctrine": { "version": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "isarray": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/isarray/-/isarray-1.0.0.tgz" + } }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, "dependencies": { "domelementtype": { "version": "1.1.3", @@ -417,19 +530,29 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } }, "domutils": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz", "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=", - "dev": true + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } }, "end-of-stream": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } }, "entities": { "version": "1.1.1", @@ -441,37 +564,74 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "es5-ext": { "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz", "integrity": "sha1-GHbFH5kHacESx4HqPr6J+E/TkHE=", - "dev": true + "dev": true, + "requires": { + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } }, "es6-iterator": { "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } }, "es6-map": { "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-set": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + } }, "es6-set": { "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + } }, "es6-symbol": { "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz" + } }, "es6-weak-map": { "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } }, "escape-string-regexp": { "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -481,48 +641,121 @@ "escope": { "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true + "dev": true, + "requires": { + "es6-map": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "es6-weak-map": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "esrecurse": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } }, "eslint": { "version": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "escope": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "espree": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", + "esquery": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "file-entry-cache": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "globals": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", + "ignore": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", + "imurmurhash": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "inquirer": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "is-resolvable": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "natural-compare": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "pluralize": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "progress": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "require-uncached": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "table": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "text-table": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "user-home": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz" + } }, "eslint-config-airbnb": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz", "integrity": "sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ==", - "dev": true + "dev": true, + "requires": { + "eslint-config-airbnb-base": "11.3.1" + } }, "eslint-config-airbnb-base": { "version": "11.3.1", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.1.tgz", "integrity": "sha512-BXVH7PV5yiLjnkv49iOLJ8dWp+ljZf310ytQpqwrunFADiEbWRyN0tPGDU36FgEbdLvhJDWcJOngYDzPF4shDw==", - "dev": true + "dev": true, + "requires": { + "eslint-restricted-globals": "0.1.1" + } }, "eslint-import-resolver-node": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", - "dev": true + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz" + } }, "eslint-module-utils": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", - "dev": true + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "pkg-dir": "1.0.0" + } }, "eslint-plugin-import": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.7.0.tgz", "integrity": "sha512-HGYmpU9f/zJaQiKNQOVfHUh2oLWW3STBrCgH0sHTX1xtsxYlH1zjLh8FlQGEIdZSdTbUMaV36WaZ6ImXkenGxQ==", "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.1", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "read-pkg-up": "2.0.0" + }, "dependencies": { "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "isarray": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/isarray/-/isarray-1.0.0.tgz" + } } } }, @@ -535,7 +768,11 @@ "espree": { "version": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", - "dev": true + "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", + "acorn-jsx": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz" + } }, "esprima": { "version": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", @@ -545,12 +782,19 @@ "esquery": { "version": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } }, "esrecurse": { "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", "dev": true, + "requires": { + "estraverse": "4.1.1", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + }, "dependencies": { "estraverse": { "version": "4.1.1", @@ -573,7 +817,11 @@ "event-emitter": { "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.22.tgz" + } }, "exit-hook": { "version": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", @@ -600,33 +848,59 @@ "figures": { "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true + "dev": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } }, "file-entry-cache": { "version": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true + "dev": true, + "requires": { + "flat-cache": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } }, "flat-cache": { "version": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true + "dev": true, + "requires": { + "circular-json": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", + "del": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "write": "https://registry.npmjs.org/write/-/write-0.2.1.tgz" + } }, "formatio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true + "dev": true, + "requires": { + "samsam": "1.2.1" + } }, "fs-extra": { "version": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=" + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "jsonfile": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", + "universalify": "https://registry.npmjs.org/universalify/-/universalify-0.1.0.tgz" + } }, "fs.realpath": { "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -643,7 +917,17 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "signal-exit": "3.0.2", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "wide-align": "1.1.2" + } }, "generate-function": { "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", @@ -653,7 +937,10 @@ "generate-object-property": { "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true + "dev": true, + "requires": { + "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + } }, "get-func-name": { "version": "2.0.0", @@ -670,7 +957,15 @@ "glob": { "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } }, "globals": { "version": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", @@ -680,7 +975,15 @@ "globby": { "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } }, "graceful-fs": { "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -702,12 +1005,18 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true + "dev": true, + "requires": { + "function-bind": "1.1.0" + } }, "has-ansi": { "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } }, "has-flag": { "version": "1.0.0", @@ -731,7 +1040,15 @@ "version": "3.9.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.6.2", + "entities": "1.1.1", + "inherits": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz" + } }, "ignore": { "version": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", @@ -746,11 +1063,15 @@ "inflight": { "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } }, "inherits": { "version": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-zd1E7lGkOx7fGKu7yxTKEzcxqBs=", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { @@ -762,7 +1083,22 @@ "inquirer": { "version": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true + "dev": true, + "requires": { + "ansi-escapes": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "cli-width": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "readline2": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "run-async": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "rx-lite": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } }, "interpret": { "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", @@ -779,7 +1115,11 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", - "dev": true + "dev": true, + "requires": { + "is-alphabetical": "1.0.1", + "is-decimal": "1.0.1" + } }, "is-arrayish": { "version": "0.2.1", @@ -791,7 +1131,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-decimal": { "version": "1.0.1", @@ -802,7 +1145,10 @@ "is-fullwidth-code-point": { "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } }, "is-hexadecimal": { "version": "1.0.1", @@ -813,7 +1159,13 @@ "is-my-json-valid": { "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true + "dev": true, + "requires": { + "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "jsonpointer": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "xtend": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/xtend/-/xtend-4.0.1.tgz" + } }, "is-path-cwd": { "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -823,12 +1175,18 @@ "is-path-in-cwd": { "version": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true + "dev": true, + "requires": { + "is-path-inside": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz" + } }, "is-path-inside": { "version": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true + "dev": true, + "requires": { + "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + } }, "is-property": { "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", @@ -838,11 +1196,14 @@ "is-resolvable": { "version": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true + "dev": true, + "requires": { + "tryit": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz" + } }, "isarray": { "version": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-8X+wQYG3F3PewcS22EYF1vGo5v8=", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { @@ -859,12 +1220,19 @@ "js-yaml": { "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", - "dev": true + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz" + } }, "json-stable-stringify": { "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true + "dev": true, + "requires": { + "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + } }, "json3": { "version": "3.3.2", @@ -874,7 +1242,10 @@ }, "jsonfile": { "version": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", - "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=" + "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + } }, "jsonify": { "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -889,19 +1260,33 @@ "levn": { "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + } }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "parse-json": "2.2.0", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, "dependencies": { "path-exists": { "version": "3.0.0", @@ -920,7 +1305,11 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } }, "lodash._basecopy": { "version": "3.0.1", @@ -956,7 +1345,12 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } }, "lodash.isarguments": { "version": "3.1.0", @@ -974,7 +1368,12 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lolex": { "version": "1.6.0", @@ -992,7 +1391,11 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "markdown-table": { "version": "0.4.0", @@ -1004,7 +1407,13 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz", "integrity": "sha1-Diy6gTkLBUmpFT7DsNkVthwWS+c=", - "dev": true + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "remark": "5.1.0", + "structured-source": "3.0.2", + "traverse": "0.6.6" + } }, "mdn-data": { "version": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.0.0.tgz", @@ -1014,12 +1423,20 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/microtime/-/microtime-2.1.6.tgz", "integrity": "sha1-dgR6A/kc7Vq7LlNn5fHfLt51a64=", - "dev": true + "dev": true, + "requires": { + "bindings": "1.2.1", + "nan": "2.6.2", + "prebuild-install": "2.2.2" + } }, "minimatch": { "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz" + } }, "minimist": { "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", @@ -1029,25 +1446,52 @@ "mkdirp": { "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } }, "mocha": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz", "integrity": "sha512-pIU2PJjrPYvYRqVpjXzj76qltO9uBYI7woYAMoxbSefsa+vqAfptjoeevd6bUgwD0mPIO+hv9f7ltvsNreL2PA==", "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "diff": "3.2.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "glob": "7.1.1", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "supports-color": "3.1.2" + }, "dependencies": { "glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } }, "supports-color": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, @@ -1086,7 +1530,12 @@ "nearley": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.11.0.tgz", - "integrity": "sha512-clqqhEuP0ZCJQ85Xv2I/4o2Gs/fvSR6fCg5ZHVE2c8evWyNk2G++ih4JOO3lMb/k/09x6ihQ2nzKUlB/APCWjg==" + "integrity": "sha512-clqqhEuP0ZCJQ85Xv2I/4o2Gs/fvSR6fCg5ZHVE2c8evWyNk2G++ih4JOO3lMb/k/09x6ihQ2nzKUlB/APCWjg==", + "requires": { + "nomnom": "1.6.2", + "railroad-diagrams": "1.0.0", + "randexp": "0.4.6" + } }, "node-abi": { "version": "2.1.0", @@ -1097,7 +1546,11 @@ "nomnom": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", - "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=" + "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", + "requires": { + "colors": "0.5.1", + "underscore": "1.4.4" + } }, "noop-logger": { "version": "0.1.1", @@ -1109,13 +1562,25 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } }, "number-is-nan": { "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -1130,7 +1595,10 @@ "once": { "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } }, "onetime": { "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", @@ -1140,7 +1608,15 @@ "optionator": { "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true + "dev": true, + "requires": { + "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "fast-levenshtein": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + } }, "os-homedir": { "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -1163,25 +1639,42 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true + "dev": true, + "requires": { + "p-limit": "1.1.0" + } }, "parse-entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", - "dev": true + "dev": true, + "requires": { + "character-entities": "1.2.1", + "character-entities-legacy": "1.1.1", + "character-reference-invalid": "1.1.1", + "is-alphanumerical": "1.0.1", + "is-decimal": "1.0.1", + "is-hexadecimal": "1.0.1" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } }, "path-is-absolute": { "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1203,6 +1696,9 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", "dev": true, + "requires": { + "isarray": "0.0.1" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -1216,7 +1712,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true + "dev": true, + "requires": { + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + } }, "pathval": { "version": "1.1.0", @@ -1237,13 +1736,19 @@ "pinkie-promise": { "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } }, "pkg-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2" + } }, "platform": { "version": "1.3.4", @@ -1265,13 +1770,34 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz", "integrity": "sha1-287g7p3nI15X95xW186UZBpp7sY=", - "dev": true + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "spawn-sync": "1.0.15", + "which": "1.2.14" + } }, "prebuild-install": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.2.2.tgz", "integrity": "sha512-F46pcvDxtQhbV3B+dm+exHuKxIyJK26fVNiJRmbTW/5D7o0Z2yzc8CKeu7UWbo9XxQZoVOC88aKgySAsza+cWw==", "dev": true, + "requires": { + "expand-template": "1.0.3", + "github-from-package": "0.0.0", + "minimist": "1.2.0", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "node-abi": "2.1.0", + "noop-logger": "0.1.1", + "npmlog": "4.1.2", + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "pump": "1.0.2", + "rc": "1.2.1", + "simple-get": "1.4.3", + "tar-fs": "1.15.3", + "tunnel-agent": "0.6.0", + "xtend": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/xtend/-/xtend-4.0.1.tgz" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -1288,7 +1814,7 @@ }, "process-nextick-args": { "version": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-d2yv2tk+goW4BJfTpeQevKaqkmE=", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, "progress": { @@ -1306,7 +1832,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", - "dev": true + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } }, "railroad-diagrams": { "version": "1.0.0", @@ -1316,13 +1846,23 @@ "randexp": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==" + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "requires": { + "discontinuous-range": "1.0.0", + "ret": "0.1.15" + } }, "rc": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -1336,54 +1876,109 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } }, "read-pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + }, "dependencies": { "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true + "dev": true, + "requires": { + "locate-path": "2.0.0" + } } } }, "readable-stream": { "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", "integrity": "sha1-7/5yu3yITA3TNeI3nVJhltnQEe4=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/inherits/-/inherits-2.0.3.tgz", + "isarray": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "util-deprecate": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/util-deprecate/-/util-deprecate-1.0.2.tgz" + } }, "readline2": { "version": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "mute-stream": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz" + } }, "rechoir": { "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true + "dev": true, + "requires": { + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz" + } }, "remark": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/remark/-/remark-5.1.0.tgz", "integrity": "sha1-y0Y709vLS5l5STXu4c9x16jjBow=", - "dev": true + "dev": true, + "requires": { + "remark-parse": "1.1.0", + "remark-stringify": "1.1.0", + "unified": "4.2.1" + } }, "remark-parse": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-1.1.0.tgz", "integrity": "sha1-w8oQ+ajaBGFcKPCapOMEUQUm7CE=", - "dev": true + "dev": true, + "requires": { + "collapse-white-space": "1.0.3", + "extend": "3.0.1", + "parse-entities": "1.1.1", + "repeat-string": "1.6.1", + "trim": "0.0.1", + "trim-trailing-lines": "1.1.0", + "unherit": "1.1.0", + "unist-util-remove-position": "1.1.1", + "vfile-location": "2.0.2" + } }, "remark-stringify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-1.1.0.tgz", "integrity": "sha1-pxBeJbnuK/mkm3XSxCPxGwauIJI=", - "dev": true + "dev": true, + "requires": { + "ccount": "1.0.2", + "extend": "3.0.1", + "longest-streak": "1.0.0", + "markdown-table": "0.4.0", + "parse-entities": "1.1.1", + "repeat-string": "1.6.1", + "stringify-entities": "1.3.1", + "unherit": "1.1.0" + } }, "repeat-string": { "version": "1.6.1", @@ -1394,12 +1989,19 @@ "require-uncached": { "version": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true + "dev": true, + "requires": { + "caller-path": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "resolve-from": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz" + } }, "resolve": { "version": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true + "dev": true, + "requires": { + "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + } }, "resolve-from": { "version": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", @@ -1409,7 +2011,11 @@ "restore-cursor": { "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true + "dev": true, + "requires": { + "exit-hook": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "onetime": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" + } }, "ret": { "version": "0.1.15", @@ -1419,12 +2025,18 @@ "rimraf": { "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + } }, "run-async": { "version": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } }, "rx-lite": { "version": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", @@ -1458,7 +2070,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } }, "shebang-regex": { "version": "1.0.0", @@ -1469,7 +2084,12 @@ "shelljs": { "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz", "integrity": "sha1-svXHfvlxSPS09uImguELuoZnz/E=", - "dev": true + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "rechoir": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + } }, "signal-exit": { "version": "3.0.2", @@ -1481,13 +2101,28 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", - "dev": true + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "unzip-response": "1.0.2", + "xtend": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/xtend/-/xtend-4.0.1.tgz" + } }, "sinon": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==", - "dev": true + "dev": true, + "requires": { + "diff": "3.2.0", + "formatio": "1.2.0", + "lolex": "1.6.0", + "native-promise-only": "0.8.1", + "path-to-regexp": "1.7.0", + "samsam": "1.2.1", + "text-encoding": "0.6.4", + "type-detect": "4.0.3" + } }, "slice-ansi": { "version": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", @@ -1498,13 +2133,20 @@ "version": "1.0.15", "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "dev": true + "dev": true, + "requires": { + "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "os-shim": "0.1.3" + } }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -1526,23 +2168,40 @@ "string_decoder": { "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz" + } }, "string-width": { "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } }, "stringify-entities": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.1.tgz", "integrity": "sha1-sVDsLXKsTBtfMktR+2soyc3/BYw=", - "dev": true + "dev": true, + "requires": { + "character-entities-html4": "1.1.1", + "character-entities-legacy": "1.1.1", + "is-alphanumerical": "1.0.1", + "is-hexadecimal": "1.0.1" + } }, "strip-ansi": { "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } }, "strip-bom": { "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -1558,7 +2217,10 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", - "dev": true + "dev": true, + "requires": { + "boundary": "1.0.1" + } }, "supports-color": { "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -1569,6 +2231,14 @@ "version": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, + "requires": { + "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "ajv-keywords": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "slice-ansi": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "string-width": "2.1.1" + }, "dependencies": { "ansi-regex": { "version": "3.0.0", @@ -1586,13 +2256,20 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, @@ -1600,13 +2277,25 @@ "version": "1.15.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.15.3.tgz", "integrity": "sha1-7M+TXpQUk9gVECjmNuUc5MPKfyA=", - "dev": true + "dev": true, + "requires": { + "chownr": "1.0.1", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "pump": "1.0.2", + "tar-stream": "1.5.4" + } }, "tar-stream": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", - "dev": true + "dev": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "xtend": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/xtend/-/xtend-4.0.1.tgz" + } }, "text-encoding": { "version": "0.6.4", @@ -1657,12 +2346,18 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz" + } }, "type-check": { "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + } }, "type-detect": { "version": "4.0.3", @@ -1684,19 +2379,34 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", - "dev": true + "dev": true, + "requires": { + "inherits": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/inherits/-/inherits-2.0.3.tgz", + "xtend": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/xtend/-/xtend-4.0.1.tgz" + } }, "unified": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/unified/-/unified-4.2.1.tgz", "integrity": "sha1-dv9Dqo2kMPbn5KVchOusKtLPzS4=", - "dev": true + "dev": true, + "requires": { + "bail": "1.0.2", + "extend": "3.0.1", + "has": "1.0.1", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "trough": "1.0.1", + "vfile": "1.4.0" + } }, "unist-util-remove-position": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", - "dev": true + "dev": true, + "requires": { + "unist-util-visit": "1.1.3" + } }, "unist-util-visit": { "version": "1.1.3", @@ -1723,18 +2433,25 @@ "user-home": { "version": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + } }, "util-deprecate": { "version": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-PSemXEGpPzOAeLg2KlAGLrZcmJc=", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "vfile": { "version": "1.4.0", @@ -1752,13 +2469,19 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + } }, "wordwrap": { "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -1773,11 +2496,14 @@ "write": { "version": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true + "dev": true, + "requires": { + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + } }, "xtend": { "version": "http://artifactory.corp.linkedin.com:8081/artifactory/api/npm/npm-external/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-M3RmyjTYnlnX7rik4X7a69Drv+s=", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, "yallist": { diff --git a/package.json b/package.json index e784103..030afaa 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,20 @@ { "name": "css-property-parser", - "version": "0.1.0", + "version": "1.0.6", "description": "Validate css properties and expand shorthand css properties", + "keywords": [ + "css" + ], + "bugs": "https://github.com/mahirshah/css-property-parser/issues", "main": "src/index.js", "scripts": { - "test": "./node_modules/.bin/mocha --reporter spec --recursive", - "start": "mkdir -p formatted-data src/grammars/generated/json && node ./node_modules/nearley/bin/nearleyc.js ./src/grammars/nearley/formalSyntax.ne > ./src/grammars/js/formalSyntax.js && node ./src/scripts/updateBasicDataUnits.js && node ./src/scripts/formatData.js && node ./src/scripts/formatFormalSyntaxes.js && node ./src/scripts/formatGrammars.js", - "clean": "rm -rf src/grammars/generated", + "prepublish": "npm start", + "test": "mocha --reporter spec --recursive", + "start": "./updateCSSData.sh", + "clean": "rm -rf src/formatted-data src/grammars/generated", "benchmark": "node test/benchmark.js", - "doctoc": "node ./node_modules/doctoc/doctoc.js README.md", - "lint": "node node_modules/eslint/bin/eslint.js src/", + "doctoc": "doctoc README.md", + "lint": "eslint src/", "precommit-msg": "echo 'Pre-commit checks...' && exit 0" }, "pre-commit": [ @@ -18,7 +23,11 @@ "test" ], "author": "mahirshah", - "license": "ISC", + "license": "(MIT AND MPL-2.0)", + "repository": { + "type": "git", + "url": "https://github.com/mahirshah/css-property-parser" + }, "types": "css-property-parser.d.ts", "devDependencies": { "async": "^2.5.0", @@ -33,11 +42,11 @@ "mocha": "^3.5.0", "pre-commit": "^1.2.2", "postcss-value-parser": "^3.3.0", - "sinon": "^2.4.1" + "sinon": "^2.4.1", + "mdn-data": "1.0.0" }, "dependencies": { "fs-extra": "^3.0.1", - "mdn-data": "1.0.0", "moo": "^0.4.1", "nearley": "^2.11.0" } diff --git a/src/constants/paths.js b/src/constants/paths.js index 2ad87c6..fbc368b 100644 --- a/src/constants/paths.js +++ b/src/constants/paths.js @@ -1,12 +1,12 @@ const path = require('path'); module.exports = { - JSON_GRAMMAR_PATH: path.join(__dirname, '/../grammars/json/'), - NEARLEY_PROPERTY_GRAMMAR_PATH: path.join(__dirname, '/../grammars/nearley/properties/'), - GENERATED_JSON_GRAMMAR_PATH: path.join(__dirname, '/../grammars/generated/json/'), - GENERATED_NEARLEY_GRAMMAR_PATH: path.join(__dirname, '/../grammars/generated/nearley/'), - GENERATED_JS_GRAMMAR_PATH: path.join(__dirname, '/../grammars/generated/js/'), - FORMATTED_DATA_PATH: path.join(__dirname, '/../../formatted-data/'), - FORMAL_SYNTAX_GRAMMAR_PATH: path.join(__dirname, '/../grammars/'), - NEARLEY_BIN_ROOT: path.join(__dirname, '/../../node_modules/nearley/bin/'), + JSON_GRAMMAR_PATH: path.join(__dirname, '..', 'grammars', 'json'), + NEARLEY_PROPERTY_GRAMMAR_PATH: path.join(__dirname, '..', 'grammars', 'nearley', 'properties'), + GENERATED_JSON_GRAMMAR_PATH: path.join(__dirname, '..', 'grammars', 'generated', 'json'), + GENERATED_NEARLEY_GRAMMAR_PATH: path.join(__dirname, '..', 'grammars', 'generated', 'nearley'), + GENERATED_JS_GRAMMAR_PATH: path.join(__dirname, '..', 'grammars', 'generated', 'js'), + FORMATTED_DATA_PATH: path.join(__dirname, '..', 'formatted-data'), + FORMAL_SYNTAX_GRAMMAR_PATH: path.join(__dirname, '..', 'grammars'), + NEARLEY_BIN_ROOT: path.join(__dirname, '..', '..', 'node_modules', 'nearley', 'bin'), }; diff --git a/src/expandShorthandProperty.js b/src/expandShorthandProperty.js index f292efa..0f84a3d 100644 --- a/src/expandShorthandProperty.js +++ b/src/expandShorthandProperty.js @@ -1,8 +1,8 @@ const nearley = require('nearley'); -const { css: { properties } } = require('mdn-data'); +const properties = require('./formatted-data/properties.json'); const isShorthandProperty = require('./isShorthandProperty'); const getShorthandComputedProperties = require('./getShorthandComputedProperties'); -const shorthandProperties = require('../formatted-data/shorthand-properties.json'); +const shorthandProperties = require('./formatted-data/shorthand-properties.json'); const CSS_CONSTANTS = require('./constants/css'); const { CLASSIFICATIONS } = require('./constants/shorthandProperties'); const LocationIndexTracker = require('./utils/LocationIndexTracker'); @@ -18,6 +18,7 @@ const { UnorderedOptionalListPropertyFormatter, } = require('./formatters/shorthandPropertyTypeFormatters'); const { initialValue, initialValues } = require('./initialValueMap'); +const grammars = require('./grammars/generated'); const shorthandPropertyTypeToActionDictionaryFactoryMap = { [CLASSIFICATIONS.TRBL]: TrblPropertyFormatter, @@ -88,7 +89,7 @@ module.exports = function expandShorthandProperty(propertyName, } // get the compiled grammar file for this property - const grammar = require('./grammars/generated')[propertyName]; + const grammar = grammars[propertyName]; // remove any block style comments and extra whitespace const formattedPropertyValue = propertyValue.replace(R_BLOCK_COMMENT, ' ').replace(/\s+/g, ' ').trim(); let parser; @@ -97,7 +98,7 @@ module.exports = function expandShorthandProperty(propertyName, try { parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)).feed(formattedPropertyValue); } catch (parseError) { - throw new ParseError(`'Error parsing shorthand property ${propertyName}: ${propertyValue}. ${parseError.message}`); + throw new ParseError(`Error parsing shorthand property ${propertyName}: ${propertyValue}. ${parseError.message}`); } // get the first parsing and use the formatter for the specific shorthand type for this property diff --git a/src/formatters/grammarFormatters/NearleyGrammarFormatter.js b/src/formatters/grammarFormatters/NearleyGrammarFormatter.js index 19d3404..6171f13 100644 --- a/src/formatters/grammarFormatters/NearleyGrammarFormatter.js +++ b/src/formatters/grammarFormatters/NearleyGrammarFormatter.js @@ -1,5 +1,6 @@ const CaseConverterUtils = require('../../utils/CaseConverterUtils'); const fs = require('fs-extra'); +const path = require('path'); const PATHS = require('../../constants/paths'); const GRAMMAR_CONSTANTS = require('../../constants/grammars'); const shorthandIdentToLongHandPropertyMap = require('../../constants/shorthandIdentToLonghandPropertyMap.json'); @@ -36,7 +37,7 @@ module.exports = class NearleyGrammarFormatter { ._getGrammarsToResolve(jsonGrammar) .map(fileToResolve => [ fileToResolve, - fs.readJsonSync(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}${fileToResolve}.json`), + fs.readJsonSync(path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, `${fileToResolve}.json`)), ]) .filter(([, json]) => NearleyGrammarFormatter._isGrammarValid(json)) .map(([grammarName, jsonGrammar]) => ( @@ -122,7 +123,7 @@ module.exports = class NearleyGrammarFormatter { return [...new Set(resolutions.concat( ...resolutions - .map(file => fs.readJsonSync(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}${file}.json`)) + .map(file => fs.readJsonSync(path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, `${file}.json`))) .map(grammar => NearleyGrammarFormatter._getGrammarsToResolve(grammar, resolved.concat(resolutions)))))]; } diff --git a/src/getShorthandComputedProperties.js b/src/getShorthandComputedProperties.js index d2571eb..890b208 100644 --- a/src/getShorthandComputedProperties.js +++ b/src/getShorthandComputedProperties.js @@ -1,4 +1,4 @@ -const { css: { properties } } = require('mdn-data'); +const properties = require('./formatted-data/properties.json'); /** * Given a shorthand property, returns an array of the computed properties for that shorthand property. If given diff --git a/src/getShorthandsForProperty.js b/src/getShorthandsForProperty.js index 55024ad..eabad37 100644 --- a/src/getShorthandsForProperty.js +++ b/src/getShorthandsForProperty.js @@ -1,5 +1,5 @@ -const shortHandProperties = require('../formatted-data/shorthand-properties.json'); -const { css: { properties } } = require('mdn-data'); +const shortHandProperties = require('./formatted-data/shorthand-properties.json'); +const properties = require('./formatted-data/properties.json'); /** * @type {Object} diff --git a/src/grammars/LICENSE b/src/grammars/LICENSE new file mode 100644 index 0000000..949dd08 --- /dev/null +++ b/src/grammars/LICENSE @@ -0,0 +1,3 @@ +This Source Code Form is subject to the terms of the Mozilla Public License, +v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain +one at https://mozilla.org/MPL/2.0/. \ No newline at end of file diff --git a/src/grammars/js/formalSyntax.js b/src/grammars/js/formalSyntax.js index 13f9539..c28c2c1 100644 --- a/src/grammars/js/formalSyntax.js +++ b/src/grammars/js/formalSyntax.js @@ -1,7 +1,7 @@ -// Generated automatically by nearley +// Generated automatically by nearley, version 2.11.1 // http://github.com/Hardmath123/nearley (function () { -function id(x) {return x[0]; } +function id(x) { return x[0]; } var grammar = { Lexer: undefined, ParserRules: [ diff --git a/src/initialValueMap.js b/src/initialValueMap.js index de9b7b0..ee1a982 100644 --- a/src/initialValueMap.js +++ b/src/initialValueMap.js @@ -1,13 +1,13 @@ -const { css: { properties } } = require('mdn-data'); +const properties = require('./formatted-data/properties.json'); const getShorthandComputedProperties = require('./getShorthandComputedProperties'); const isShorthandProperty = require('./isShorthandProperty'); /** * Initial values are highly cacheable since they are just a function of the - * css specification so this module. By default we cache initial values lazily - * when each property's initial value is first requested. A function - * `computeInitialValues` is provided to warm the entire cache on demand if - * needed. + * css specification so this module stores all values in a singleton. By + * default we cache initial values lazily when each property's initial value is + * first requested. A function `computeInitialValues` is provided to warm the + * entire cache on demand if needed. * * In addition, the data for initial values is incomplete or ambiguous * per the spec so we synthesize initial values for shorthand properties. diff --git a/src/isShorthandProperty.js b/src/isShorthandProperty.js index d7c93f3..4389f3d 100644 --- a/src/isShorthandProperty.js +++ b/src/isShorthandProperty.js @@ -1,4 +1,4 @@ -const shortHandProperties = require('../formatted-data/shorthand-properties.json'); +const shortHandProperties = require('./formatted-data/shorthand-properties.json'); /** * Checks if a given property is a shorthand property diff --git a/src/isValidDeclaration.js b/src/isValidDeclaration.js index b5d554a..337af37 100644 --- a/src/isValidDeclaration.js +++ b/src/isValidDeclaration.js @@ -1,6 +1,7 @@ const nearley = require('nearley'); -const { css: { properties } } = require('mdn-data'); +const properties = require('./formatted-data/properties.json'); const { CSS } = require('./constants'); +const grammars = require('./grammars/generated'); /** * Checks if the given property, value pair is valid. @@ -16,7 +17,7 @@ module.exports = function isValidDeclaration(property, value) { return true; } - const propertyGrammar = require('./grammars/generated')[property]; + const propertyGrammar = grammars[property]; try { const parser = new nearley.Parser(nearley.Grammar.fromCompiled(propertyGrammar)).feed(value); diff --git a/src/scripts/extractProperties.js b/src/scripts/extractProperties.js new file mode 100644 index 0000000..5c5ab6e --- /dev/null +++ b/src/scripts/extractProperties.js @@ -0,0 +1,15 @@ +/** + * Takes raw data from MDN, filters out the shorthand properties, and decorates the data with additional properties. + * Writes the formatted data to FORMATTED_DATA_PATH. + */ +const fs = require('fs-extra'); +const path = require('path'); +const { css: { properties } } = require('mdn-data'); +const PATHS = require('../constants/paths'); + +const ALL_PROPERTIES_DATA_FILE_NAME = 'properties.json'; +const OUTPUT_FILE = path.join(PATHS.FORMATTED_DATA_PATH, ALL_PROPERTIES_DATA_FILE_NAME); +fs.writeJson(OUTPUT_FILE, properties, { spaces: 2 }) + .then(() => ( + console.log(`Successfully extracted properties to ${OUTPUT_FILE}`) + )); diff --git a/src/scripts/formatData.js b/src/scripts/formatData.js index fe56ad3..0aa3213 100755 --- a/src/scripts/formatData.js +++ b/src/scripts/formatData.js @@ -3,6 +3,7 @@ * Writes the formatted data to FORMATTED_DATA_PATH. */ const fs = require('fs-extra'); +const path = require('path'); const { css: { properties } } = require('mdn-data'); const ShorthandPropertyClassifierUtils = require('../utils/ShorthandPropertyClassifierUtils'); const PATHS = require('../constants/paths'); @@ -21,7 +22,8 @@ const formattedData = Object.entries(properties) // reduce it down to an object again so we can write it to a file .reduce((propertyMap, [property, data]) => Object.assign({ [property]: data }, propertyMap), {}); -fs.writeJson(`${PATHS.FORMATTED_DATA_PATH}${SHORTHAND_FORMATTED_DATA_FILE_NAME}`, formattedData, { spaces: 2 }) - .then(() => ( - console.log(`Successfully formatted data to ${PATHS.FORMATTED_DATA_PATH}${SHORTHAND_FORMATTED_DATA_FILE_NAME}`) - )); +fs.writeJson(path.join(PATHS.FORMATTED_DATA_PATH, SHORTHAND_FORMATTED_DATA_FILE_NAME), formattedData, { spaces: 2 }) + .then(() => { + const fdPath = path.join(PATHS.FORMATTED_DATA_PATH, SHORTHAND_FORMATTED_DATA_FILE_NAME); + console.log(`Successfully formatted data to ${fdPath}`); + }); diff --git a/src/scripts/formatFormalSyntaxes.js b/src/scripts/formatFormalSyntaxes.js index cc21c81..8f2c741 100644 --- a/src/scripts/formatFormalSyntaxes.js +++ b/src/scripts/formatFormalSyntaxes.js @@ -2,6 +2,7 @@ * Format each formal syntax into a json grammar */ const fs = require('fs-extra'); +const path = require('path'); const { css: { properties, syntaxes } } = require('mdn-data'); const { PATHS, SYNTAX_OVERRIDES } = require('../constants/index'); const JsonGrammarFormatter = require('../formatters/grammarFormatters/JsonGrammarFormatter'); @@ -30,18 +31,20 @@ const syntaxesSyntaxMap = Object.entries(syntaxes) const propertySyntaxMap = Object.entries(properties).reduce((syntaxMap, [propertyName, { syntax }]) => ( Object.assign({ [propertyName]: syntax }, syntaxMap) ), syntaxesSyntaxMap); -const overridenPropertySyntaxMap = Object.assign(propertySyntaxMap, SYNTAX_OVERRIDES); +const overriddenPropertySyntaxMap = Object.assign(propertySyntaxMap, SYNTAX_OVERRIDES); // make the json grammar directory if needed if (!fs.existsSync(PATHS.GENERATED_JSON_GRAMMAR_PATH)) { fs.mkdirSync(PATHS.GENERATED_JSON_GRAMMAR_PATH); } -Object.entries(overridenPropertySyntaxMap) +Object.entries(overriddenPropertySyntaxMap) // filter out any entries that we need to do manually .filter(([grammarName]) => !manualSyntaxes.includes(grammarName)) .forEach(([grammarName, formalSyntax]) => { - console.log(`creating ${PATHS.GENERATED_JSON_GRAMMAR_PATH}${grammarName}.json`); + const safeName = grammarName.replace('*', 'STAR'); + const filename = path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, `${safeName}.json`); + console.log(`creating ${filename}`); const jsonGrammar = JsonGrammarFormatter.format(formalSyntax); - fs.writeJson(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}${grammarName}.json`, jsonGrammar, { spaces: 2 }); + fs.writeJson(filename, jsonGrammar, { spaces: 2 }); }); diff --git a/src/scripts/formatGrammars.js b/src/scripts/formatGrammars.js index 347571f..d34ac03 100644 --- a/src/scripts/formatGrammars.js +++ b/src/scripts/formatGrammars.js @@ -24,20 +24,22 @@ if (!fs.existsSync(PATHS.GENERATED_JS_GRAMMAR_PATH)) { } // move manual json grammars into generated folder for grammar resolution -fs.readdirSync(`${PATHS.JSON_GRAMMAR_PATH}`) - .forEach(fileName => ( - fs.copySync(`${PATHS.JSON_GRAMMAR_PATH}${fileName}`, `${PATHS.GENERATED_JSON_GRAMMAR_PATH}${fileName}`)) - ); +fs.readdirSync(PATHS.JSON_GRAMMAR_PATH) + .forEach((fileName) => { + const fullSrc = path.join(PATHS.JSON_GRAMMAR_PATH, fileName); + const fullDest = path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, fileName); + fs.copySync(fullSrc, fullDest); + }); // read each json grammar and format it into an nearley grammar fs.readdirSync(PATHS.GENERATED_JSON_GRAMMAR_PATH) - .map(fileName => [fileName, fs.readJsonSync(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}${fileName}`)]) + .map(fileName => [fileName, fs.readJsonSync(path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, fileName))]) .forEach(([fileName, jsonGrammar]) => { console.log(`creating ${fileName}`); const grammarName = fileName.replace('.json', ''); const nearleyGrammar = NearleyGrammarFormatter.format(jsonGrammar, grammarName); - const fileToWrite = `${PATHS.GENERATED_NEARLEY_GRAMMAR_PATH}${fileName.replace('.json', `.${GRAMMAR_CONSTANTS.GRAMMAR_FILE_EXTENSION}`)}`; + const fileToWrite = path.join(PATHS.GENERATED_NEARLEY_GRAMMAR_PATH, fileName.replace('.json', `.${GRAMMAR_CONSTANTS.GRAMMAR_FILE_EXTENSION}`)); fs.createFileSync(fileToWrite); fs.writeFileSync(fileToWrite, nearleyGrammar); @@ -45,12 +47,11 @@ fs.readdirSync(PATHS.GENERATED_JSON_GRAMMAR_PATH) // copy over overridden grammars fs.readdirSync(PATHS.NEARLEY_PROPERTY_GRAMMAR_PATH) - .forEach(fileName => ( - fs.copySync( - `${PATHS.NEARLEY_PROPERTY_GRAMMAR_PATH}${fileName}`, - `${PATHS.GENERATED_NEARLEY_GRAMMAR_PATH}${fileName}` - ) - )); + .forEach((fileName) => { + const fullSrc = path.join(PATHS.NEARLEY_PROPERTY_GRAMMAR_PATH, fileName); + const fullDest = path.join(PATHS.GENERATED_NEARLEY_GRAMMAR_PATH, fileName); + fs.copySync(fullSrc, fullDest); + }); console.log('...Successfully created nearley grammars...'); @@ -64,20 +65,21 @@ const jsModules = []; const compilationCommands = fs.readdirSync(PATHS.GENERATED_NEARLEY_GRAMMAR_PATH) .map((fileName) => { const propName = fileName.replace(`.${GRAMMAR_CONSTANTS.GRAMMAR_FILE_EXTENSION}`, ''); - const jsFileName = `${propName}.${JAVASCRIPT_FILE_EXTENSION}`; - const nearleyFilePath = JSON.stringify(`${PATHS.GENERATED_NEARLEY_GRAMMAR_PATH}${fileName}`); + const safeFileName = propName.replace('*', 'STAR'); + const jsFileName = `${safeFileName}.${JAVASCRIPT_FILE_EXTENSION}`; + const nearleyFilePath = JSON.stringify(path.join(PATHS.GENERATED_NEARLEY_GRAMMAR_PATH, fileName.replace('*', 'STAR'))); const jsFilePath = JSON.stringify( path.join(PATHS.GENERATED_JS_GRAMMAR_PATH, jsFileName) ); jsModules.push(` '${propName}': require('./js/${jsFileName}')`); - return `node ${PATHS.NEARLEY_BIN_ROOT}${NEARLEY_COMPILER_FILE_NAME} ${nearleyFilePath} > ${jsFilePath}`; + return `node ${path.join(PATHS.NEARLEY_BIN_ROOT, NEARLEY_COMPILER_FILE_NAME)} ${nearleyFilePath} > ${jsFilePath}`; }); const jsExportsFile = `module.exports = {\n${jsModules.join(',\n')}\n}`; -fs.writeFileSync(path.join(PATHS.GENERATED_JS_GRAMMAR_PATH, '../index.js'), jsExportsFile); +fs.writeFileSync(path.resolve(PATHS.GENERATED_JS_GRAMMAR_PATH, '..', 'index.js'), jsExportsFile); compilationQueue.push(compilationCommands, (err) => { if (err) { diff --git a/src/scripts/updateBasicDataUnits.js b/src/scripts/updateBasicDataUnits.js index 4586204..2a4b8e3 100644 --- a/src/scripts/updateBasicDataUnits.js +++ b/src/scripts/updateBasicDataUnits.js @@ -5,6 +5,7 @@ */ const { css: { units } } = require('mdn-data'); const fs = require('fs-extra'); +const path = require('path'); const PATHS = require('../constants/paths'); const GRAMMAR_CONSTANTS = require('../constants/grammars'); @@ -28,7 +29,7 @@ const unitToTypesMap = Object.entries(units).reduce((unitMap, [unit, { groups }] Promise.all( Object.entries(unitToTypesMap).map(([fileName, unitList]) => ( - fs.writeJson(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}${fileName}.json`, [ + fs.writeJson(path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, `${fileName}.json`), [ [GRAMMAR_CONSTANTS.BASE_GRAMMAR_RULE_NAME, `( ${unitList.map(unit => `"${unit}"`).join(' | ')} )`], ], { spaces: 2 }) ))) diff --git a/test/InitialValuesTest.js b/test/InitialValuesTest.js index 1647144..e043724 100644 --- a/test/InitialValuesTest.js +++ b/test/InitialValuesTest.js @@ -1,5 +1,5 @@ const { assert } = require('chai'); -const { css: { properties: cssProperties } } = require('mdn-data'); +const properties = require('../src/formatted-data/properties.json'); const { initialValue, initialValues, @@ -31,7 +31,7 @@ describe('Initial values', function () { 'position', 'transform-box', ]); - Object.keys(cssProperties).forEach((prop) => { + Object.keys(properties).forEach((prop) => { if (prop.startsWith('-') || buggyValues.has(prop)) return; // bug in grammar data let initial = initialValue(prop); assert(isValidDeclaration(prop, initial), `${prop}: ${initial} is not a legal initial value`); diff --git a/test/formatters/NearleyGrammarFormatterTest.js b/test/formatters/NearleyGrammarFormatterTest.js index 7dd5da1..5f3d41e 100644 --- a/test/formatters/NearleyGrammarFormatterTest.js +++ b/test/formatters/NearleyGrammarFormatterTest.js @@ -1,5 +1,6 @@ const sinon = require('sinon'); const fs = require('fs-extra'); +const path = require('path'); const { assert } = require('chai'); const PATHS = require('../../src/constants/paths'); const GRAMMAR_CONSTANTS = require('../../src/constants/grammars'); @@ -58,17 +59,17 @@ describe('NearleyGrammarFormatter#format', function () { describe('recursive cases', function () { it('should handle deeply recursive cases', function () { sandbox.stub(fs, 'readJsonSync') - .withArgs(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}ra.json`) + .withArgs(path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, 'ra.json')) .returns([ [GRAMMAR_CONSTANTS.BASE_GRAMMAR_RULE_NAME, ''], [''], ]) - .withArgs(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}rb.json`) + .withArgs(path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, 'rb.json')) .returns([ [GRAMMAR_CONSTANTS.BASE_GRAMMAR_RULE_NAME, ''], [''], ]) - .withArgs(`${PATHS.GENERATED_JSON_GRAMMAR_PATH}rc.json`) + .withArgs(path.join(PATHS.GENERATED_JSON_GRAMMAR_PATH, 'rc.json')) .returns([ [GRAMMAR_CONSTANTS.BASE_GRAMMAR_RULE_NAME, '"d"'], ]); diff --git a/updateCSSData.sh b/updateCSSData.sh new file mode 100755 index 0000000..0e5e1d2 --- /dev/null +++ b/updateCSSData.sh @@ -0,0 +1,23 @@ +#!/bin/bash +function realpath() +{ + f=$@ + if [ -d "$f" ]; then + base="" + dir="$f" + else + base="/$(basename "$f")" + dir=$(dirname "$f") + fi + dir=$(cd "$dir" && /bin/pwd) + echo "$dir$base" +} +cd "$(dirname "$(realpath "$0")")"; +rm -rf src/formatted-data src/grammars/generated/json +mkdir -p src/formatted-data src/grammars/generated/json +node ./node_modules/nearley/bin/nearleyc.js ./src/grammars/nearley/formalSyntax.ne > ./src/grammars/js/formalSyntax.js || exit 1 +node ./src/scripts/updateBasicDataUnits.js || exit 1 +node ./src/scripts/formatData.js || exit 1 +node ./src/scripts/formatFormalSyntaxes.js || exit 1 +node ./src/scripts/formatGrammars.js || exit 1 +node ./src/scripts/extractProperties.js || exit 1 \ No newline at end of file