smock 0.1.217 → 0.1.218
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/app/assets/javascripts/modules/category_dropdown.coffee +0 -1
- data/examples/pages/homepage.html +1 -0
- data/node_modules/exports-loader/.npmignore +1 -0
- data/node_modules/exports-loader/README.md +18 -0
- data/node_modules/exports-loader/index.js +36 -0
- data/node_modules/exports-loader/node_modules/loader-utils/.npmignore +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/README.md +129 -0
- data/node_modules/exports-loader/node_modules/loader-utils/index.js +229 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/.bin/json5 +41 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/.npmignore +0 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/LICENCE +23 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/README.md +214 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/big.js +1026 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/big.min.js +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/doc/bigAPI.html +1026 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/package.json +61 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/big-vs-bigdecimal.html +678 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/bigtime.js +324 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/BigDecTest.class +0 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/BigDecTest.java +60 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/LICENCE.txt +205 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/bigdecimal.js +592 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/bugs.js +53 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_ICU4J/BigDecimal-all-last.js +5724 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_ICU4J/BigDecimal-all-last.min.js +61 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_ICU4J/LICENCE.txt +30 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/abs.js +555 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/browser/big-vs-number.html +249 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/browser/every-test.html +66 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/browser/single-test.html +26 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/cmp.js +4305 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/div.js +9978 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/every-test.js +31 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/minus.js +1793 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/mod.js +1838 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/plus.js +1916 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/pow.js +1233 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/round.js +5173 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/sqrt.js +788 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/times.js +2159 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/toExponential.js +472 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/toFixed.js +1030 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/toPrecision.js +508 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/big.js/test/toString.js +1068 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/.npmignore +4 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/CHANGELOG.md +56 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/Makefile +27 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/README.md +173 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/lib/cli.js +41 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/lib/json5.js +462 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/lib/require.js +18 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/package.json +66 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/package.json5 +24 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/empty-array.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/leading-comma-array.js +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/lone-trailing-comma-array.js +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/no-comma-array.txt +4 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/regular-array.json +5 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/trailing-comma-array.json5 +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-following-array-element.json5 +6 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-following-top-level-value.json5 +5 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-in-string.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-preceding-top-level-value.json5 +5 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-with-asterisks.json5 +7 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-following-array-element.json5 +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-following-top-level-value.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-in-string.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-preceding-top-level-value.json5 +2 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/top-level-block-comment.txt +4 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/top-level-inline-comment.txt +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/unterminated-block-comment.txt +5 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/empty.txt +0 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/npm-package.json +106 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/npm-package.json5 +106 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/readme-example.json5 +23 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/decimal-literal-with-exponent.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/decimal-literal-with-negative-exponent.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/decimal-literal.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal-with-lowercase-letter.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal-with-no-digits.txt +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal-with-uppercase-x.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/leading-decimal-point.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/negative-decimal-literal.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/negative-hexadecimal-literal.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/negative-leading-decimal-point.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/noctal-literal-with-octal-digit-after-leading-zero.js +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/noctal-literal.js +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/octal-literal.txt +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/trailing-decimal-point-with-exponent.js +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/trailing-decimal-point.js +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/zero-literal.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/empty-object.json +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/illegal-unquoted-key-number.txt +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/illegal-unquoted-key-symbol.txt +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/leading-comma-object.txt +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/lone-trailing-comma-object.txt +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/no-comma-object.txt +4 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/reserved-unquoted-key.json5 +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/single-quoted-key.json5 +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/trailing-comma-object.json5 +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/unquoted-keys.json5 +8 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/strings/escaped-single-quoted-string.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/strings/multi-line-string.json5 +2 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/strings/single-quoted-string.json5 +1 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/todo/unicode-escaped-unquoted-key.json5 +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/todo/unicode-unquoted-key.json5 +3 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/parse.js +74 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/readme.md +23 -0
- data/node_modules/exports-loader/node_modules/loader-utils/node_modules/json5/test/require.js +18 -0
- data/node_modules/exports-loader/node_modules/loader-utils/package.json +54 -0
- data/node_modules/exports-loader/node_modules/loader-utils/test/index.js +62 -0
- data/node_modules/exports-loader/node_modules/source-map/.npmignore +2 -0
- data/node_modules/exports-loader/node_modules/source-map/.travis.yml +4 -0
- data/node_modules/exports-loader/node_modules/source-map/CHANGELOG.md +194 -0
- data/node_modules/exports-loader/node_modules/source-map/LICENSE +28 -0
- data/node_modules/exports-loader/node_modules/source-map/Makefile.dryice.js +166 -0
- data/node_modules/exports-loader/node_modules/source-map/README.md +475 -0
- data/node_modules/exports-loader/node_modules/source-map/build/assert-shim.js +56 -0
- data/node_modules/exports-loader/node_modules/source-map/build/mini-require.js +152 -0
- data/node_modules/exports-loader/node_modules/source-map/build/prefix-source-map.jsm +20 -0
- data/node_modules/exports-loader/node_modules/source-map/build/prefix-utils.jsm +18 -0
- data/node_modules/exports-loader/node_modules/source-map/build/suffix-browser.js +8 -0
- data/node_modules/exports-loader/node_modules/source-map/build/suffix-source-map.jsm +6 -0
- data/node_modules/exports-loader/node_modules/source-map/build/suffix-utils.jsm +21 -0
- data/node_modules/exports-loader/node_modules/source-map/build/test-prefix.js +8 -0
- data/node_modules/exports-loader/node_modules/source-map/build/test-suffix.js +3 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map.js +8 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/array-set.js +97 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/base64-vlq.js +142 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/base64.js +42 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/binary-search.js +80 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/mapping-list.js +86 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/source-map-consumer.js +575 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/source-map-generator.js +400 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/source-node.js +414 -0
- data/node_modules/exports-loader/node_modules/source-map/lib/source-map/util.js +319 -0
- data/node_modules/exports-loader/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
- data/node_modules/exports-loader/node_modules/source-map/node_modules/amdefine/README.md +171 -0
- data/node_modules/exports-loader/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
- data/node_modules/exports-loader/node_modules/source-map/node_modules/amdefine/intercept.js +36 -0
- data/node_modules/exports-loader/node_modules/source-map/node_modules/amdefine/package.json +37 -0
- data/node_modules/exports-loader/node_modules/source-map/package.json +186 -0
- data/node_modules/exports-loader/node_modules/source-map/test/run-tests.js +62 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-api.js +26 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-array-set.js +104 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-base64-vlq.js +23 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-base64.js +35 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-dog-fooding.js +84 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-source-map-consumer.js +702 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-source-map-generator.js +679 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-source-node.js +612 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/test-util.js +216 -0
- data/node_modules/exports-loader/node_modules/source-map/test/source-map/util.js +192 -0
- data/node_modules/exports-loader/package.json +46 -0
- data/node_modules/imports-loader/.npmignore +1 -0
- data/node_modules/imports-loader/README.md +17 -0
- data/node_modules/imports-loader/index.js +46 -0
- data/node_modules/imports-loader/node_modules/loader-utils/.npmignore +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/README.md +129 -0
- data/node_modules/imports-loader/node_modules/loader-utils/index.js +229 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/.bin/json5 +41 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/.npmignore +0 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/LICENCE +23 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/README.md +214 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/big.js +1026 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/big.min.js +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/doc/bigAPI.html +1026 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/package.json +61 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/big-vs-bigdecimal.html +678 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/bigtime.js +324 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/BigDecTest.class +0 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/BigDecTest.java +60 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/LICENCE.txt +205 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/bigdecimal.js +592 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_GWT/bugs.js +53 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_ICU4J/BigDecimal-all-last.js +5724 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_ICU4J/BigDecimal-all-last.min.js +61 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/perf/lib/bigdecimal_ICU4J/LICENCE.txt +30 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/abs.js +555 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/browser/big-vs-number.html +249 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/browser/every-test.html +66 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/browser/single-test.html +26 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/cmp.js +4305 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/div.js +9978 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/every-test.js +31 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/minus.js +1793 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/mod.js +1838 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/plus.js +1916 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/pow.js +1233 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/round.js +5173 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/sqrt.js +788 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/times.js +2159 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/toExponential.js +472 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/toFixed.js +1030 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/toPrecision.js +508 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/big.js/test/toString.js +1068 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/.npmignore +4 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/CHANGELOG.md +56 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/Makefile +27 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/README.md +173 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/lib/cli.js +41 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/lib/json5.js +462 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/lib/require.js +18 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/package.json +66 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/package.json5 +24 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/empty-array.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/leading-comma-array.js +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/lone-trailing-comma-array.js +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/no-comma-array.txt +4 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/regular-array.json +5 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/arrays/trailing-comma-array.json5 +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-following-array-element.json5 +6 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-following-top-level-value.json5 +5 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-in-string.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-preceding-top-level-value.json5 +5 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/block-comment-with-asterisks.json5 +7 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-following-array-element.json5 +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-following-top-level-value.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-in-string.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/inline-comment-preceding-top-level-value.json5 +2 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/top-level-block-comment.txt +4 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/top-level-inline-comment.txt +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/comments/unterminated-block-comment.txt +5 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/empty.txt +0 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/npm-package.json +106 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/npm-package.json5 +106 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/misc/readme-example.json5 +23 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/decimal-literal-with-exponent.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/decimal-literal-with-negative-exponent.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/decimal-literal.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal-with-lowercase-letter.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal-with-no-digits.txt +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal-with-uppercase-x.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/hexadecimal-literal.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/leading-decimal-point.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/negative-decimal-literal.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/negative-hexadecimal-literal.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/negative-leading-decimal-point.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/noctal-literal-with-octal-digit-after-leading-zero.js +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/noctal-literal.js +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/octal-literal.txt +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/trailing-decimal-point-with-exponent.js +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/trailing-decimal-point.js +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/numbers/zero-literal.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/empty-object.json +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/illegal-unquoted-key-number.txt +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/illegal-unquoted-key-symbol.txt +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/leading-comma-object.txt +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/lone-trailing-comma-object.txt +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/no-comma-object.txt +4 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/reserved-unquoted-key.json5 +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/single-quoted-key.json5 +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/trailing-comma-object.json5 +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/objects/unquoted-keys.json5 +8 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/strings/escaped-single-quoted-string.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/strings/multi-line-string.json5 +2 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/strings/single-quoted-string.json5 +1 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/todo/unicode-escaped-unquoted-key.json5 +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse-cases/todo/unicode-unquoted-key.json5 +3 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/parse.js +74 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/readme.md +23 -0
- data/node_modules/imports-loader/node_modules/loader-utils/node_modules/json5/test/require.js +18 -0
- data/node_modules/imports-loader/node_modules/loader-utils/package.json +53 -0
- data/node_modules/imports-loader/node_modules/loader-utils/test/index.js +62 -0
- data/node_modules/imports-loader/node_modules/source-map/.npmignore +2 -0
- data/node_modules/imports-loader/node_modules/source-map/.travis.yml +4 -0
- data/node_modules/imports-loader/node_modules/source-map/CHANGELOG.md +194 -0
- data/node_modules/imports-loader/node_modules/source-map/LICENSE +28 -0
- data/node_modules/imports-loader/node_modules/source-map/Makefile.dryice.js +166 -0
- data/node_modules/imports-loader/node_modules/source-map/README.md +475 -0
- data/node_modules/imports-loader/node_modules/source-map/build/assert-shim.js +56 -0
- data/node_modules/imports-loader/node_modules/source-map/build/mini-require.js +152 -0
- data/node_modules/imports-loader/node_modules/source-map/build/prefix-source-map.jsm +20 -0
- data/node_modules/imports-loader/node_modules/source-map/build/prefix-utils.jsm +18 -0
- data/node_modules/imports-loader/node_modules/source-map/build/suffix-browser.js +8 -0
- data/node_modules/imports-loader/node_modules/source-map/build/suffix-source-map.jsm +6 -0
- data/node_modules/imports-loader/node_modules/source-map/build/suffix-utils.jsm +21 -0
- data/node_modules/imports-loader/node_modules/source-map/build/test-prefix.js +8 -0
- data/node_modules/imports-loader/node_modules/source-map/build/test-suffix.js +3 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map.js +8 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/array-set.js +97 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/base64-vlq.js +142 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/base64.js +42 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/binary-search.js +80 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/mapping-list.js +86 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/source-map-consumer.js +575 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/source-map-generator.js +400 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/source-node.js +414 -0
- data/node_modules/imports-loader/node_modules/source-map/lib/source-map/util.js +319 -0
- data/node_modules/imports-loader/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
- data/node_modules/imports-loader/node_modules/source-map/node_modules/amdefine/README.md +171 -0
- data/node_modules/imports-loader/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
- data/node_modules/imports-loader/node_modules/source-map/node_modules/amdefine/intercept.js +36 -0
- data/node_modules/imports-loader/node_modules/source-map/node_modules/amdefine/package.json +37 -0
- data/node_modules/imports-loader/node_modules/source-map/package.json +186 -0
- data/node_modules/imports-loader/node_modules/source-map/test/run-tests.js +62 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-api.js +26 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-array-set.js +104 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-base64-vlq.js +23 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-base64.js +35 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-dog-fooding.js +84 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-source-map-consumer.js +702 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-source-map-generator.js +679 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-source-node.js +612 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/test-util.js +216 -0
- data/node_modules/imports-loader/node_modules/source-map/test/source-map/util.js +192 -0
- data/node_modules/imports-loader/package.json +46 -0
- data/package.json +4 -2
- data/webpack.config.js +3 -6
- metadata +312 -5
- data/app/assets/javascripts/vendor/jquery.js +0 -10346
@@ -0,0 +1,56 @@
|
|
1
|
+
### v0.1.0 [[code][c0.1.0], [diff][d0.1.0]]
|
2
|
+
|
3
|
+
[c0.1.0]: https://github.com/aseemk/json5/tree/v0.1.0
|
4
|
+
[d0.1.0]: https://github.com/aseemk/json5/compare/v0.0.1...v0.1.0
|
5
|
+
|
6
|
+
This release tightens JSON5 support and adds helpful utility features:
|
7
|
+
|
8
|
+
- Support hexadecimal numbers. (Thanks [@MaxNanasy][].)
|
9
|
+
|
10
|
+
- Reject octal numbers properly now. Previously, they were accepted but
|
11
|
+
improperly parsed as base-10 numbers. (Thanks [@MaxNanasy][].)
|
12
|
+
|
13
|
+
- **Breaking:** Reject "noctal" numbers now (base-10 numbers that begin with a
|
14
|
+
leading zero). These are disallowed by both JSON5 and JSON, as well as by
|
15
|
+
ES5's strict mode. (Thanks [@MaxNanasy][].)
|
16
|
+
|
17
|
+
- Support leading decimal points in decimal numbers. (Thanks [@MaxNanasy][].)
|
18
|
+
|
19
|
+
- **Breaking:** Reject trailing decimal points in decimal numbers now. These
|
20
|
+
are disallowed by both JSON5 and JSON. (Thanks [@MaxNanasy][].)
|
21
|
+
|
22
|
+
- **Breaking:** Reject omitted elements in arrays now. These are disallowed by
|
23
|
+
both JSON5 and JSON.
|
24
|
+
|
25
|
+
- Throw proper `SyntaxError` instances on errors now.
|
26
|
+
|
27
|
+
- Add Node.js `require()` hook. Require `json5/lib/require` to register it.
|
28
|
+
|
29
|
+
- Add Node.js executable to compile JSON5 files to JSON. Run with `json5`.
|
30
|
+
|
31
|
+
### v0.0.1 [[code][c0.0.1], [diff][d0.0.1]]
|
32
|
+
|
33
|
+
[c0.0.1]: https://github.com/aseemk/json5/tree/v0.0.1
|
34
|
+
[d0.0.1]: https://github.com/aseemk/json5/compare/v0.0.0...v0.0.1
|
35
|
+
|
36
|
+
This was the first implementation of this JSON5 parser.
|
37
|
+
|
38
|
+
- Support unquoted object keys, including reserved words. Unicode characters
|
39
|
+
and escape sequences sequences aren't yet supported.
|
40
|
+
|
41
|
+
- Support single-quoted strings.
|
42
|
+
|
43
|
+
- Support multi-line strings.
|
44
|
+
|
45
|
+
- Support trailing commas in arrays and objects.
|
46
|
+
|
47
|
+
- Support comments, both inline and block.
|
48
|
+
|
49
|
+
### v0.0.0 [[code](https://github.com/aseemk/json5/tree/v0.0.0)]
|
50
|
+
|
51
|
+
Let's consider this to be Douglas Crockford's original [json_parse.js][] — a
|
52
|
+
parser for the regular JSON format.
|
53
|
+
|
54
|
+
[json_parse.js]: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js
|
55
|
+
|
56
|
+
[@MaxNanasy]: https://github.com/MaxNanasy
|
@@ -0,0 +1,27 @@
|
|
1
|
+
all: install
|
2
|
+
|
3
|
+
clean:
|
4
|
+
$(call clean)
|
5
|
+
|
6
|
+
install: package
|
7
|
+
@npm install
|
8
|
+
$(call clean)
|
9
|
+
|
10
|
+
link: package
|
11
|
+
@npm link
|
12
|
+
$(call clean)
|
13
|
+
|
14
|
+
package:
|
15
|
+
@./lib/cli.js -c package.json5
|
16
|
+
|
17
|
+
publish: package
|
18
|
+
@npm publish
|
19
|
+
$(call clean)
|
20
|
+
|
21
|
+
test: package
|
22
|
+
@npm test || : # don't fail on test errors; TODO still fail after clean?
|
23
|
+
$(call clean)
|
24
|
+
|
25
|
+
# Helpers:
|
26
|
+
|
27
|
+
clean = @rm -f package.json
|
@@ -0,0 +1,173 @@
|
|
1
|
+
# JSON5 – Modern JSON
|
2
|
+
|
3
|
+
JSON isn't the friendliest to write and maintain by hand. Keys need to be
|
4
|
+
quoted; objects and arrays can't have trailing commas; comments aren't
|
5
|
+
supported — even though none of these is the case with regular JavaScript
|
6
|
+
today.
|
7
|
+
|
8
|
+
Restricting JSON to such a strict subset of "JavaScript object notation" made
|
9
|
+
sense for making it a great data-exchange format, but JSON's usage has
|
10
|
+
expanded [beyond][ex1] [machine-to-machine][ex2] [communication][ex3].
|
11
|
+
|
12
|
+
[ex1]: http://plovr.com/docs.html
|
13
|
+
[ex2]: http://npmjs.org/doc/json.html
|
14
|
+
[ex3]: http://code.google.com/p/fuzztester/wiki/JSONFileFormat
|
15
|
+
|
16
|
+
**JSON5 is a proposed extension to JSON** that brings ES5 enhancements to its
|
17
|
+
syntax. It remains a **strict subset of JavaScript**, adds **no new data
|
18
|
+
types**, and is a **strict superset of existing JSON**.
|
19
|
+
|
20
|
+
JSON5 is not an official successor to JSON, and existing JSON parsers may not
|
21
|
+
understand these new features. It's thus recommended that files use a new
|
22
|
+
extension like `.json5` to be explicit. *[TODO: New MIME type too?]*
|
23
|
+
|
24
|
+
This module provides a JavaScript implementation that works on all modern JS
|
25
|
+
engines (even IE6). Its parser is based directly off of Douglas Crockford's
|
26
|
+
eval-free [json_parse.js][], making it both secure and robust. Give it a try!
|
27
|
+
|
28
|
+
## Features
|
29
|
+
|
30
|
+
These are the new features of JSON5's syntax. All of these are optional, and
|
31
|
+
all of these are part of ES5 JavaScript.
|
32
|
+
|
33
|
+
- Object keys don't need to be quoted if they're valid [identifiers](
|
34
|
+
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables). Yes, even reserved keywords are valid unquoted keys in ES5 [[§11.1.5](http://es5.github.com/#x11.1.5), [§7.6](http://es5.github.com/#x7.6)].
|
35
|
+
*[TODO: Unicode characters and escape sequences aren't yet supported in this implementation.]*
|
36
|
+
|
37
|
+
- Strings can be single-quoted.
|
38
|
+
|
39
|
+
- Strings can be split across multiple lines; just prefix each newline with a
|
40
|
+
backslash. [ES5 [§7.8.4](http://es5.github.com/#x7.8.4)]
|
41
|
+
|
42
|
+
- Objects and arrays can have trailing commas.
|
43
|
+
|
44
|
+
- Both inline (single-line) and block (multi-line) comments are allowed.
|
45
|
+
|
46
|
+
- Numbers can be hexadecimal (base 16), and they can also begin with a leading
|
47
|
+
decimal (e.g. `.5`).
|
48
|
+
|
49
|
+
## Example
|
50
|
+
|
51
|
+
```js
|
52
|
+
{
|
53
|
+
foo: 'bar',
|
54
|
+
while: true,
|
55
|
+
|
56
|
+
this: 'is a\
|
57
|
+
multi-line string',
|
58
|
+
|
59
|
+
// this is an inline comment
|
60
|
+
here: 'is another', // inline comment
|
61
|
+
|
62
|
+
/* this is a block comment
|
63
|
+
that continues on another line */
|
64
|
+
|
65
|
+
hex: 0xDEADbeef,
|
66
|
+
half: .5,
|
67
|
+
|
68
|
+
finally: 'a trailing comma',
|
69
|
+
oh: [
|
70
|
+
"we shouldn't forget",
|
71
|
+
'arrays can have',
|
72
|
+
'trailing commas too',
|
73
|
+
],
|
74
|
+
}
|
75
|
+
```
|
76
|
+
|
77
|
+
## Installation
|
78
|
+
|
79
|
+
Via npm on Node:
|
80
|
+
|
81
|
+
```
|
82
|
+
npm install json5
|
83
|
+
```
|
84
|
+
|
85
|
+
```js
|
86
|
+
var JSON5 = require('json5');
|
87
|
+
```
|
88
|
+
|
89
|
+
Or in the browser (adds the `JSON5` object to the global namespace):
|
90
|
+
|
91
|
+
```html
|
92
|
+
<script src="json5.js"></script>
|
93
|
+
```
|
94
|
+
|
95
|
+
## Usage
|
96
|
+
|
97
|
+
```js
|
98
|
+
var obj = JSON5.parse('{unquoted:"key",trailing:"comma",}');
|
99
|
+
var str = JSON5.stringify(obj);
|
100
|
+
console.log(obj);
|
101
|
+
console.log(str);
|
102
|
+
```
|
103
|
+
|
104
|
+
`JSON5.stringify()` is currently aliased to the native `JSON.stringify()` in
|
105
|
+
order for the output to be fully compatible with all JSON parsers today.
|
106
|
+
|
107
|
+
If you're running Node, you can also register a JSON5 `require()` hook to let
|
108
|
+
you `require()` `.json5` files just like you can `.json` files:
|
109
|
+
|
110
|
+
```js
|
111
|
+
require('json5/lib/require');
|
112
|
+
require('./path/to/foo'); // tries foo.json5 after foo.js, foo.json, etc.
|
113
|
+
require('./path/to/bar.json5');
|
114
|
+
```
|
115
|
+
|
116
|
+
This module also provides a `json5` executable (requires Node) for converting
|
117
|
+
JSON5 files to sibling JSON files:
|
118
|
+
|
119
|
+
```
|
120
|
+
$ json5 -c path/to/foo.json5 # generates path/to/foo.json
|
121
|
+
```
|
122
|
+
|
123
|
+
## Development
|
124
|
+
|
125
|
+
```
|
126
|
+
git clone git://github.com/aseemk/json5.git
|
127
|
+
cd json5
|
128
|
+
make
|
129
|
+
make test
|
130
|
+
```
|
131
|
+
|
132
|
+
If your system doesn't have Make, this should work in place of `make [test]`:
|
133
|
+
|
134
|
+
```
|
135
|
+
./lib/cli.js -c package.json5
|
136
|
+
npm install
|
137
|
+
npm test
|
138
|
+
```
|
139
|
+
|
140
|
+
Make is used to auto-generate the package.json file that npm requires from our
|
141
|
+
package.json5 file. Just re-run `make` (or `./lib/cli.js -c package.json5`) on
|
142
|
+
changes to package.json5.
|
143
|
+
|
144
|
+
Feel free to [file issues](https://github.com/aseemk/json5/issues) and submit
|
145
|
+
[pull requests](https://github.com/aseemk/json5/pulls) — contributions are
|
146
|
+
welcome.
|
147
|
+
|
148
|
+
If you submit a pull request, please be sure to add or update corresponding
|
149
|
+
test cases, and ensure that `make test` (or `npm test`) continues to pass.
|
150
|
+
|
151
|
+
## License
|
152
|
+
|
153
|
+
MIT License. © 2012 Aseem Kishore, and [others](
|
154
|
+
https://github.com/aseemk/json5/contributors).
|
155
|
+
|
156
|
+
## Credits
|
157
|
+
|
158
|
+
[Michael Bolin](http://bolinfest.com/) independently arrived at and published
|
159
|
+
some of these same ideas with awesome explanations and detail.
|
160
|
+
Recommended reading:
|
161
|
+
[Suggested Improvements to JSON](http://bolinfest.com/essays/json.html)
|
162
|
+
|
163
|
+
[Douglas Crockford](http://www.crockford.com/) of course designed and built
|
164
|
+
JSON, but his state machine diagrams on the [JSON website](http://json.org/),
|
165
|
+
as cheesy as it may sound, gave me motivation and confidence that building a
|
166
|
+
new parser to implement these ideas this was within my reach!
|
167
|
+
This code is also modeled directly off of Doug's open-source [json_parse.js][]
|
168
|
+
parser. I'm super grateful for that clean and well-documented code.
|
169
|
+
|
170
|
+
[json_parse.js]: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js
|
171
|
+
|
172
|
+
[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific
|
173
|
+
supporter, contributing multiple patches and ideas. Thanks Max!
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
// cli.js
|
4
|
+
// JSON5 command-line interface.
|
5
|
+
//
|
6
|
+
// This is pretty minimal for now; just supports compiling files via `-c`.
|
7
|
+
// TODO More useful functionality, like output path, watch, etc.?
|
8
|
+
|
9
|
+
var FS = require('fs');
|
10
|
+
var JSON5 = require('./json5');
|
11
|
+
var Path = require('path');
|
12
|
+
|
13
|
+
var USAGE = [
|
14
|
+
'Usage: json5 -c path/to/file.json5 ...',
|
15
|
+
'Compiles JSON5 files into sibling JSON files with the same basenames.',
|
16
|
+
].join('\n');
|
17
|
+
|
18
|
+
// if valid, args look like [node, json5, -c, file1, file2, ...]
|
19
|
+
var args = process.argv;
|
20
|
+
|
21
|
+
if (args.length < 4 || args[2] !== '-c') {
|
22
|
+
console.error(USAGE);
|
23
|
+
process.exit(1);
|
24
|
+
}
|
25
|
+
|
26
|
+
var cwd = process.cwd();
|
27
|
+
var files = args.slice(3);
|
28
|
+
|
29
|
+
// iterate over each file and convert JSON5 files to JSON:
|
30
|
+
files.forEach(function (file) {
|
31
|
+
var path = Path.resolve(cwd, file);
|
32
|
+
var basename = Path.basename(path, '.json5');
|
33
|
+
var dirname = Path.dirname(path);
|
34
|
+
|
35
|
+
var json5 = FS.readFileSync(path, 'utf8');
|
36
|
+
var obj = JSON5.parse(json5);
|
37
|
+
var json = JSON.stringify(obj, null, 4); // 4 spaces; TODO configurable?
|
38
|
+
|
39
|
+
path = Path.join(dirname, basename + '.json');
|
40
|
+
FS.writeFileSync(path, json, 'utf8');
|
41
|
+
});
|
@@ -0,0 +1,462 @@
|
|
1
|
+
// json5.js
|
2
|
+
// Modern JSON. See README.md for details.
|
3
|
+
//
|
4
|
+
// This file is based directly off of Douglas Crockford's json_parse.js:
|
5
|
+
// https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js
|
6
|
+
|
7
|
+
var JSON5 = (typeof exports === 'object' ? exports : {});
|
8
|
+
|
9
|
+
JSON5.parse = (function () {
|
10
|
+
"use strict";
|
11
|
+
|
12
|
+
// This is a function that can parse a JSON5 text, producing a JavaScript
|
13
|
+
// data structure. It is a simple, recursive descent parser. It does not use
|
14
|
+
// eval or regular expressions, so it can be used as a model for implementing
|
15
|
+
// a JSON5 parser in other languages.
|
16
|
+
|
17
|
+
// We are defining the function inside of another function to avoid creating
|
18
|
+
// global variables.
|
19
|
+
|
20
|
+
var at, // The index of the current character
|
21
|
+
ch, // The current character
|
22
|
+
escapee = {
|
23
|
+
"'": "'",
|
24
|
+
'"': '"',
|
25
|
+
'\\': '\\',
|
26
|
+
'/': '/',
|
27
|
+
'\n': '', // Replace escaped newlines in strings w/ empty string
|
28
|
+
b: '\b',
|
29
|
+
f: '\f',
|
30
|
+
n: '\n',
|
31
|
+
r: '\r',
|
32
|
+
t: '\t'
|
33
|
+
},
|
34
|
+
text,
|
35
|
+
|
36
|
+
error = function (m) {
|
37
|
+
|
38
|
+
// Call error when something is wrong.
|
39
|
+
|
40
|
+
var error = new SyntaxError();
|
41
|
+
error.message = m;
|
42
|
+
error.at = at;
|
43
|
+
error.text = text;
|
44
|
+
throw error;
|
45
|
+
},
|
46
|
+
|
47
|
+
next = function (c) {
|
48
|
+
|
49
|
+
// If a c parameter is provided, verify that it matches the current character.
|
50
|
+
|
51
|
+
if (c && c !== ch) {
|
52
|
+
error("Expected '" + c + "' instead of '" + ch + "'");
|
53
|
+
}
|
54
|
+
|
55
|
+
// Get the next character. When there are no more characters,
|
56
|
+
// return the empty string.
|
57
|
+
|
58
|
+
ch = text.charAt(at);
|
59
|
+
at += 1;
|
60
|
+
return ch;
|
61
|
+
},
|
62
|
+
|
63
|
+
identifier = function () {
|
64
|
+
|
65
|
+
// Parse an identifier. Normally, reserved words are disallowed here, but we
|
66
|
+
// only use this for unquoted object keys, where reserved words are allowed,
|
67
|
+
// so we don't check for those here. References:
|
68
|
+
// - http://es5.github.com/#x7.6
|
69
|
+
// - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables
|
70
|
+
// - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm
|
71
|
+
// TODO Identifiers can have Unicode "letters" in them; add support for those.
|
72
|
+
|
73
|
+
var key = ch;
|
74
|
+
|
75
|
+
// Identifiers must start with a letter, _ or $.
|
76
|
+
if ((ch !== '_' && ch !== '$') &&
|
77
|
+
(ch < 'a' || ch > 'z') &&
|
78
|
+
(ch < 'A' || ch > 'Z')) {
|
79
|
+
error("Bad identifier");
|
80
|
+
}
|
81
|
+
|
82
|
+
// Subsequent characters can contain digits.
|
83
|
+
while (next() && (
|
84
|
+
ch === '_' || ch === '$' ||
|
85
|
+
(ch >= 'a' && ch <= 'z') ||
|
86
|
+
(ch >= 'A' && ch <= 'Z') ||
|
87
|
+
(ch >= '0' && ch <= '9'))) {
|
88
|
+
key += ch;
|
89
|
+
}
|
90
|
+
|
91
|
+
return key;
|
92
|
+
},
|
93
|
+
|
94
|
+
number = function () {
|
95
|
+
|
96
|
+
// Parse a number value.
|
97
|
+
|
98
|
+
var number,
|
99
|
+
string = '',
|
100
|
+
base = 10;
|
101
|
+
|
102
|
+
if (ch === '-') {
|
103
|
+
string = '-';
|
104
|
+
next('-');
|
105
|
+
}
|
106
|
+
if (ch === '0') {
|
107
|
+
string += ch;
|
108
|
+
next();
|
109
|
+
if (ch === 'x' || ch === 'X') {
|
110
|
+
string += ch;
|
111
|
+
next();
|
112
|
+
base = 16;
|
113
|
+
} else if (ch >= '0' && ch <= '9') {
|
114
|
+
error('Octal literal');
|
115
|
+
}
|
116
|
+
}
|
117
|
+
switch (base) {
|
118
|
+
case 10:
|
119
|
+
while (ch >= '0' && ch <= '9' ) {
|
120
|
+
string += ch;
|
121
|
+
next();
|
122
|
+
}
|
123
|
+
if (ch === '.') {
|
124
|
+
string += '.';
|
125
|
+
next('.');
|
126
|
+
if (ch < '0' || ch > '9') {
|
127
|
+
error('Trailing decimal point');
|
128
|
+
}
|
129
|
+
do {
|
130
|
+
string += ch;
|
131
|
+
next();
|
132
|
+
} while (ch && ch >= '0' && ch <= '9');
|
133
|
+
}
|
134
|
+
if (ch === 'e' || ch === 'E') {
|
135
|
+
string += ch;
|
136
|
+
next();
|
137
|
+
if (ch === '-' || ch === '+') {
|
138
|
+
string += ch;
|
139
|
+
next();
|
140
|
+
}
|
141
|
+
while (ch >= '0' && ch <= '9') {
|
142
|
+
string += ch;
|
143
|
+
next();
|
144
|
+
}
|
145
|
+
}
|
146
|
+
break;
|
147
|
+
case 16:
|
148
|
+
while (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f') {
|
149
|
+
string += ch;
|
150
|
+
next();
|
151
|
+
}
|
152
|
+
break;
|
153
|
+
}
|
154
|
+
number = +string;
|
155
|
+
if (!isFinite(number)) {
|
156
|
+
error("Bad number");
|
157
|
+
} else {
|
158
|
+
return number;
|
159
|
+
}
|
160
|
+
},
|
161
|
+
|
162
|
+
string = function () {
|
163
|
+
|
164
|
+
// Parse a string value.
|
165
|
+
|
166
|
+
var hex,
|
167
|
+
i,
|
168
|
+
string = '',
|
169
|
+
delim, // double quote or single quote
|
170
|
+
uffff;
|
171
|
+
|
172
|
+
// When parsing for string values, we must look for ' or " and \ characters.
|
173
|
+
|
174
|
+
if (ch === '"' || ch === "'") {
|
175
|
+
delim = ch;
|
176
|
+
while (next()) {
|
177
|
+
if (ch === delim) {
|
178
|
+
next();
|
179
|
+
return string;
|
180
|
+
} else if (ch === '\\') {
|
181
|
+
next();
|
182
|
+
if (ch === 'u') {
|
183
|
+
uffff = 0;
|
184
|
+
for (i = 0; i < 4; i += 1) {
|
185
|
+
hex = parseInt(next(), 16);
|
186
|
+
if (!isFinite(hex)) {
|
187
|
+
break;
|
188
|
+
}
|
189
|
+
uffff = uffff * 16 + hex;
|
190
|
+
}
|
191
|
+
string += String.fromCharCode(uffff);
|
192
|
+
} else if (typeof escapee[ch] === 'string') {
|
193
|
+
string += escapee[ch];
|
194
|
+
} else {
|
195
|
+
break;
|
196
|
+
}
|
197
|
+
} else {
|
198
|
+
string += ch;
|
199
|
+
}
|
200
|
+
}
|
201
|
+
}
|
202
|
+
error("Bad string");
|
203
|
+
},
|
204
|
+
|
205
|
+
inlineComment = function () {
|
206
|
+
|
207
|
+
// Skip an inline comment, assuming this is one. The current character should
|
208
|
+
// be the second / character in the // pair that begins this inline comment.
|
209
|
+
// To finish the inline comment, we look for a newline or the end of the text.
|
210
|
+
|
211
|
+
if (ch !== '/') {
|
212
|
+
error("Not an inline comment");
|
213
|
+
}
|
214
|
+
|
215
|
+
do {
|
216
|
+
next();
|
217
|
+
if (ch === '\n') {
|
218
|
+
next('\n');
|
219
|
+
return;
|
220
|
+
}
|
221
|
+
} while (ch);
|
222
|
+
},
|
223
|
+
|
224
|
+
blockComment = function () {
|
225
|
+
|
226
|
+
// Skip a block comment, assuming this is one. The current character should be
|
227
|
+
// the * character in the /* pair that begins this block comment.
|
228
|
+
// To finish the block comment, we look for an ending */ pair of characters,
|
229
|
+
// but we also watch for the end of text before the comment is terminated.
|
230
|
+
|
231
|
+
if (ch !== '*') {
|
232
|
+
error("Not a block comment");
|
233
|
+
}
|
234
|
+
|
235
|
+
do {
|
236
|
+
next();
|
237
|
+
while (ch === '*') {
|
238
|
+
next('*');
|
239
|
+
if (ch === '/') {
|
240
|
+
next('/');
|
241
|
+
return;
|
242
|
+
}
|
243
|
+
}
|
244
|
+
} while (ch);
|
245
|
+
|
246
|
+
error("Unterminated block comment");
|
247
|
+
},
|
248
|
+
|
249
|
+
comment = function () {
|
250
|
+
|
251
|
+
// Skip a comment, whether inline or block-level, assuming this is one.
|
252
|
+
// Comments always begin with a / character.
|
253
|
+
|
254
|
+
if (ch !== '/') {
|
255
|
+
error("Not a comment");
|
256
|
+
}
|
257
|
+
|
258
|
+
next('/');
|
259
|
+
|
260
|
+
if (ch === '/') {
|
261
|
+
inlineComment();
|
262
|
+
} else if (ch === '*') {
|
263
|
+
blockComment();
|
264
|
+
} else {
|
265
|
+
error("Unrecognized comment");
|
266
|
+
}
|
267
|
+
},
|
268
|
+
|
269
|
+
white = function () {
|
270
|
+
|
271
|
+
// Skip whitespace and comments.
|
272
|
+
// Note that we're detecting comments by only a single / character.
|
273
|
+
// This works since regular expressions are not valid JSON(5), but this will
|
274
|
+
// break if there are other valid values that begin with a / character!
|
275
|
+
|
276
|
+
while (ch) {
|
277
|
+
if (ch === '/') {
|
278
|
+
comment();
|
279
|
+
} else if (ch <= ' ') {
|
280
|
+
next();
|
281
|
+
} else {
|
282
|
+
return;
|
283
|
+
}
|
284
|
+
}
|
285
|
+
},
|
286
|
+
|
287
|
+
word = function () {
|
288
|
+
|
289
|
+
// true, false, or null.
|
290
|
+
|
291
|
+
switch (ch) {
|
292
|
+
case 't':
|
293
|
+
next('t');
|
294
|
+
next('r');
|
295
|
+
next('u');
|
296
|
+
next('e');
|
297
|
+
return true;
|
298
|
+
case 'f':
|
299
|
+
next('f');
|
300
|
+
next('a');
|
301
|
+
next('l');
|
302
|
+
next('s');
|
303
|
+
next('e');
|
304
|
+
return false;
|
305
|
+
case 'n':
|
306
|
+
next('n');
|
307
|
+
next('u');
|
308
|
+
next('l');
|
309
|
+
next('l');
|
310
|
+
return null;
|
311
|
+
}
|
312
|
+
error("Unexpected '" + ch + "'");
|
313
|
+
},
|
314
|
+
|
315
|
+
value, // Place holder for the value function.
|
316
|
+
|
317
|
+
array = function () {
|
318
|
+
|
319
|
+
// Parse an array value.
|
320
|
+
|
321
|
+
var array = [];
|
322
|
+
|
323
|
+
if (ch === '[') {
|
324
|
+
next('[');
|
325
|
+
white();
|
326
|
+
while (ch) {
|
327
|
+
if (ch === ']') {
|
328
|
+
next(']');
|
329
|
+
return array; // Potentially empty array
|
330
|
+
}
|
331
|
+
// ES5 allows omitting elements in arrays, e.g. [,] and
|
332
|
+
// [,null]. We don't allow this in JSON5.
|
333
|
+
if (ch === ',') {
|
334
|
+
error("Missing array element");
|
335
|
+
} else {
|
336
|
+
array.push(value());
|
337
|
+
}
|
338
|
+
white();
|
339
|
+
// If there's no comma after this value, this needs to
|
340
|
+
// be the end of the array.
|
341
|
+
if (ch !== ',') {
|
342
|
+
next(']');
|
343
|
+
return array;
|
344
|
+
}
|
345
|
+
next(',');
|
346
|
+
white();
|
347
|
+
}
|
348
|
+
}
|
349
|
+
error("Bad array");
|
350
|
+
},
|
351
|
+
|
352
|
+
object = function () {
|
353
|
+
|
354
|
+
// Parse an object value.
|
355
|
+
|
356
|
+
var key,
|
357
|
+
object = {};
|
358
|
+
|
359
|
+
if (ch === '{') {
|
360
|
+
next('{');
|
361
|
+
white();
|
362
|
+
while (ch) {
|
363
|
+
if (ch === '}') {
|
364
|
+
next('}');
|
365
|
+
return object; // Potentially empty object
|
366
|
+
}
|
367
|
+
|
368
|
+
// Keys can be unquoted. If they are, they need to be
|
369
|
+
// valid JS identifiers.
|
370
|
+
if (ch === '"' || ch === "'") {
|
371
|
+
key = string();
|
372
|
+
} else {
|
373
|
+
key = identifier();
|
374
|
+
}
|
375
|
+
|
376
|
+
white();
|
377
|
+
next(':');
|
378
|
+
if (Object.hasOwnProperty.call(object, key)) {
|
379
|
+
error('Duplicate key "' + key + '"');
|
380
|
+
}
|
381
|
+
object[key] = value();
|
382
|
+
white();
|
383
|
+
// If there's no comma after this pair, this needs to be
|
384
|
+
// the end of the object.
|
385
|
+
if (ch !== ',') {
|
386
|
+
next('}');
|
387
|
+
return object;
|
388
|
+
}
|
389
|
+
next(',');
|
390
|
+
white();
|
391
|
+
}
|
392
|
+
}
|
393
|
+
error("Bad object");
|
394
|
+
};
|
395
|
+
|
396
|
+
value = function () {
|
397
|
+
|
398
|
+
// Parse a JSON value. It could be an object, an array, a string, a number,
|
399
|
+
// or a word.
|
400
|
+
|
401
|
+
white();
|
402
|
+
switch (ch) {
|
403
|
+
case '{':
|
404
|
+
return object();
|
405
|
+
case '[':
|
406
|
+
return array();
|
407
|
+
case '"':
|
408
|
+
case "'":
|
409
|
+
return string();
|
410
|
+
case '-':
|
411
|
+
case '.':
|
412
|
+
return number();
|
413
|
+
default:
|
414
|
+
return ch >= '0' && ch <= '9' ? number() : word();
|
415
|
+
}
|
416
|
+
};
|
417
|
+
|
418
|
+
// Return the json_parse function. It will have access to all of the above
|
419
|
+
// functions and variables.
|
420
|
+
|
421
|
+
return function (source, reviver) {
|
422
|
+
var result;
|
423
|
+
|
424
|
+
text = source;
|
425
|
+
at = 0;
|
426
|
+
ch = ' ';
|
427
|
+
result = value();
|
428
|
+
white();
|
429
|
+
if (ch) {
|
430
|
+
error("Syntax error");
|
431
|
+
}
|
432
|
+
|
433
|
+
// If there is a reviver function, we recursively walk the new structure,
|
434
|
+
// passing each name/value pair to the reviver function for possible
|
435
|
+
// transformation, starting with a temporary root object that holds the result
|
436
|
+
// in an empty key. If there is not a reviver function, we simply return the
|
437
|
+
// result.
|
438
|
+
|
439
|
+
return typeof reviver === 'function' ? (function walk(holder, key) {
|
440
|
+
var k, v, value = holder[key];
|
441
|
+
if (value && typeof value === 'object') {
|
442
|
+
for (k in value) {
|
443
|
+
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
444
|
+
v = walk(value, k);
|
445
|
+
if (v !== undefined) {
|
446
|
+
value[k] = v;
|
447
|
+
} else {
|
448
|
+
delete value[k];
|
449
|
+
}
|
450
|
+
}
|
451
|
+
}
|
452
|
+
}
|
453
|
+
return reviver.call(holder, key, value);
|
454
|
+
}({'': result}, '')) : result;
|
455
|
+
};
|
456
|
+
}());
|
457
|
+
|
458
|
+
JSON5.stringify = function (obj, replacer, space) {
|
459
|
+
// Since regular JSON is a strict subset of JSON5, we'll always output
|
460
|
+
// regular JSON to foster better interoperability. TODO Should we not?
|
461
|
+
return JSON.stringify.apply(JSON, arguments);
|
462
|
+
};
|