smock 0.1.217 → 0.1.218
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
};
|