diff options
Diffstat (limited to 'node_modules/json5')
| -rw-r--r-- | node_modules/json5/CHANGELOG.md | 169 | ||||
| -rw-r--r-- | node_modules/json5/LICENSE.md | 21 | ||||
| -rw-r--r-- | node_modules/json5/README.md | 286 | ||||
| -rwxr-xr-x | node_modules/json5/lib/cli.js | 41 | ||||
| -rw-r--r-- | node_modules/json5/lib/json5.js | 770 | ||||
| -rw-r--r-- | node_modules/json5/lib/require.js | 18 | ||||
| -rw-r--r-- | node_modules/json5/package.json | 38 | 
7 files changed, 0 insertions, 1343 deletions
diff --git a/node_modules/json5/CHANGELOG.md b/node_modules/json5/CHANGELOG.md deleted file mode 100644 index 6db820cbc..000000000 --- a/node_modules/json5/CHANGELOG.md +++ /dev/null @@ -1,169 +0,0 @@ -### v0.5.1 [[code][c0.5.1], [diff][d0.5.1]] - -[c0.5.1]: https://github.com/aseemk/json5/tree/v0.5.1 -[d0.5.1]: https://github.com/aseemk/json5/compare/v0.5.0...v0.5.1 - -This release includes a minor fix for indentations when stringifying empty -arrays. - -- Fix: Indents no longer appear in empty arrays when stringified. ([#134]) - - -### v0.5.0 [[code][c0.5.0], [diff][d0.5.0]] - -[c0.5.0]: https://github.com/aseemk/json5/tree/v0.5.0 -[d0.5.0]: https://github.com/aseemk/json5/compare/v0.4.0...v0.5.0 - -This release includes major internal changes and public API enhancements. - -- **Major:** JSON5 officially supports Node.js v4 LTS and v5. Support for -  Node.js v0.6 and v0.8 have been dropped, while support for v0.10 and v0.12 -  remain. - -- Fix: YUI Compressor no longer fails when compressing json5.js. ([#97]) - -- New: `parse` and the CLI provide line and column numbers when displaying error -  messages. ([#101]; awesome work by [@amb26].) - - -### v0.4.0 [[code][c0.4.0], [diff][d0.4.0]] - -[c0.4.0]: https://github.com/aseemk/json5/tree/v0.4.0 -[d0.4.0]: https://github.com/aseemk/json5/compare/v0.2.0...v0.4.0 - -Note that v0.3.0 was tagged, but never published to npm, so this v0.4.0 -changelog entry includes v0.3.0 features. - -This is a massive release that adds `stringify` support, among other things. - -- **Major:** `JSON5.stringify()` now exists! -  This method is analogous to the native `JSON.stringify()`; -  it just avoids quoting keys where possible. -  See the [usage documentation](./README.md#usage) for more. -  ([#32]; huge thanks and props [@aeisenberg]!) - -- New: `NaN` and `-NaN` are now allowed number literals. -  ([#30]; thanks [@rowanhill].) - -- New: Duplicate object keys are now allowed; the last value is used. -  This is the same behavior as JSON. ([#57]; thanks [@jordanbtucker].) - -- Fix: Properly handle various whitespace and newline cases now. -  E.g. JSON5 now properly supports escaped CR and CRLF newlines in strings, -  and JSON5 now accepts the same whitespace as JSON (stricter than ES5). -  ([#58], [#60], and [#63]; thanks [@jordanbtucker].) - -- New: Negative hexadecimal numbers (e.g. `-0xC8`) are allowed again. -  (They were disallowed in v0.2.0; see below.) -  It turns out they *are* valid in ES5, so JSON5 supports them now too. -  ([#36]; thanks [@jordanbtucker]!) - - -### v0.2.0 [[code][c0.2.0], [diff][d0.2.0]] - -[c0.2.0]: https://github.com/aseemk/json5/tree/v0.2.0 -[d0.2.0]: https://github.com/aseemk/json5/compare/v0.1.0...v0.2.0 - -This release fixes some bugs and adds some more utility features to help you -express data more easily: - -- **Breaking:** Negative hexadecimal numbers (e.g. `-0xC8`) are rejected now. -  While V8 (e.g. Chrome and Node) supported them, it turns out they're invalid -  in ES5. This has been [fixed in V8][v8-hex-fix] (and by extension, Chrome -  and Node), so JSON5 officially rejects them now, too. ([#36]) - -- New: Trailing decimal points in decimal numbers are allowed again. -  (They were disallowed in v0.1.0; see below.) -  They're allowed by ES5, and differentiating between integers and floats may -  make sense on some platforms. ([#16]; thanks [@Midar].) - -- New: `Infinity` and `-Infinity` are now allowed number literals. -  ([#30]; thanks [@pepkin88].) - -- New: Plus signs (`+`) in front of numbers are now allowed, since it can -  be helpful in some contexts to explicitly mark numbers as positive. -  (E.g. when a property represents changes or deltas.) - -- Fix: unescaped newlines in strings are rejected now. -  ([#24]; thanks [@Midar].) - - -### v0.1.0 [[code][c0.1.0], [diff][d0.1.0]] - -[c0.1.0]: https://github.com/aseemk/json5/tree/v0.1.0 -[d0.1.0]: https://github.com/aseemk/json5/compare/v0.0.1...v0.1.0 - -This release tightens JSON5 support and adds helpful utility features: - -- New: Support hexadecimal numbers. (Thanks [@MaxNanasy].) - -- Fix: Reject octal numbers properly now. Previously, they were accepted but -  improperly parsed as base-10 numbers. (Thanks [@MaxNanasy].) - -- **Breaking:** Reject "noctal" numbers now (base-10 numbers that begin with a -  leading zero). These are disallowed by both JSON5 and JSON, as well as by -  ES5's strict mode. (Thanks [@MaxNanasy].) - -- New: Support leading decimal points in decimal numbers. -  (Thanks [@MaxNanasy].) - -- **Breaking:** Reject trailing decimal points in decimal numbers now. These -  are disallowed by both JSON5 and JSON. (Thanks [@MaxNanasy].) - -- **Breaking:** Reject omitted elements in arrays now. These are disallowed by -  both JSON5 and JSON. - -- Fix: Throw proper `SyntaxError` instances on errors now. - -- New: Add Node.js `require()` hook. Register via `json5/lib/require`. - -- New: Add Node.js `json5` executable to compile JSON5 files to JSON. - - -### v0.0.1 [[code][c0.0.1], [diff][d0.0.1]] - -[c0.0.1]: https://github.com/aseemk/json5/tree/v0.0.1 -[d0.0.1]: https://github.com/aseemk/json5/compare/v0.0.0...v0.0.1 - -This was the first implementation of this JSON5 parser. - -- Support unquoted object keys, including reserved words. Unicode characters -  and escape sequences sequences aren't yet supported. - -- Support single-quoted strings. - -- Support multi-line strings. - -- Support trailing commas in arrays and objects. - -- Support comments, both inline and block. - - -### v0.0.0 [[code](https://github.com/aseemk/json5/tree/v0.0.0)] - -Let's consider this to be Douglas Crockford's original [json_parse.js] — a -parser for the regular JSON format. - - -[json_parse.js]: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js -[v8-hex-fix]: http://code.google.com/p/v8/issues/detail?id=2240 - -[@MaxNanasy]: https://github.com/MaxNanasy -[@Midar]: https://github.com/Midar -[@pepkin88]: https://github.com/pepkin88 -[@rowanhill]: https://github.com/rowanhill -[@aeisenberg]: https://github.com/aeisenberg -[@jordanbtucker]: https://github.com/jordanbtucker -[@amb26]: https://github.com/amb26 - -[#16]: https://github.com/aseemk/json5/issues/16 -[#24]: https://github.com/aseemk/json5/issues/24 -[#30]: https://github.com/aseemk/json5/issues/30 -[#32]: https://github.com/aseemk/json5/issues/32 -[#36]: https://github.com/aseemk/json5/issues/36 -[#57]: https://github.com/aseemk/json5/issues/57 -[#58]: https://github.com/aseemk/json5/pull/58 -[#60]: https://github.com/aseemk/json5/pull/60 -[#63]: https://github.com/aseemk/json5/pull/63 -[#97]: https://github.com/aseemk/json5/pull/97 -[#101]: https://github.com/aseemk/json5/pull/101 diff --git a/node_modules/json5/LICENSE.md b/node_modules/json5/LICENSE.md deleted file mode 100644 index 861df26e6..000000000 --- a/node_modules/json5/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2012-2016 Aseem Kishore, and [others](https://github.com/aseemk/json5/contributors). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/json5/README.md b/node_modules/json5/README.md deleted file mode 100644 index a42851484..000000000 --- a/node_modules/json5/README.md +++ /dev/null @@ -1,286 +0,0 @@ -# JSON5 – Modern JSON - -[](https://travis-ci.org/json5/json5) - -JSON is an excellent data format, but we think it can be better. - -**JSON5 is a proposed extension to JSON** that aims to make it easier for -*humans to write and maintain* by hand. It does this by adding some minimal -syntax features directly from ECMAScript 5. - -JSON5 remains a **strict subset of JavaScript**, adds **no new data types**, -and **works with all existing JSON content**. - -JSON5 is *not* an official successor to JSON, and JSON5 content may *not* -work with existing JSON parsers. For this reason, JSON5 files use a new .json5 -extension. *(TODO: new MIME type needed too.)* - -The code here is a **reference JavaScript implementation** for both Node.js -and all browsers. It’s based directly off of Douglas Crockford’s own [JSON -implementation][json_parse.js], and it’s both robust and secure. - - -## Why - -JSON isn’t the friendliest to *write*. Keys need to be quoted, objects and -arrays can’t have trailing commas, and comments aren’t allowed — even though -none of these are the case with regular JavaScript today. - -That was fine when JSON’s goal was to be a great data format, but JSON’s usage -has expanded beyond *machines*. JSON is now used for writing [configs][ex1], -[manifests][ex2], even [tests][ex3] — all by *humans*. - -[ex1]: http://plovr.com/docs.html -[ex2]: https://www.npmjs.org/doc/files/package.json.html -[ex3]: http://code.google.com/p/fuzztester/wiki/JSONFileFormat - -There are other formats that are human-friendlier, like YAML, but changing -from JSON to a completely different format is undesirable in many cases. -JSON5’s aim is to remain close to JSON and JavaScript. - - -## Features - -The following is the exact list of additions to JSON’s syntax introduced by -JSON5. **All of these are optional**, and **all of these come from ES5**. - -### Objects - -- Object keys can be unquoted if they’re valid [identifiers][mdn_variables]. -  Yes, even reserved keywords (like `default`) are valid unquoted keys in ES5 -  [[§11.1.5](http://es5.github.com/#x11.1.5), [§7.6](http://es5.github.com/#x7.6)]. -  ([More info](https://mathiasbynens.be/notes/javascript-identifiers)) - -  *(TODO: Unicode characters and escape sequences aren’t yet supported in this -  implementation.)* -   -- Object keys can also be single-quoted. - -- Objects can have trailing commas. - -[mdn_variables]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables - -### Arrays - -- Arrays can have trailing commas. - -### Strings - -- Strings can be single-quoted. - -- Strings can be split across multiple lines; just prefix each newline with a -  backslash. [ES5 [§7.8.4](http://es5.github.com/#x7.8.4)] - -### Numbers - -- Numbers can be hexadecimal (base 16). - -- Numbers can begin or end with a (leading or trailing) decimal point. - -- Numbers can include `Infinity`, `-Infinity`,  `NaN`, and `-NaN`. - -- Numbers can begin with an explicit plus sign. - -### Comments - -- Both inline (single-line) and block (multi-line) comments are allowed. - - -## Example - -The following is a contrived example, but it illustrates most of the features: - -```js -{ -    foo: 'bar', -    while: true, - -    this: 'is a \ -multi-line string', - -    // this is an inline comment -    here: 'is another', // inline comment - -    /* this is a block comment -       that continues on another line */ - -    hex: 0xDEADbeef, -    half: .5, -    delta: +10, -    to: Infinity,   // and beyond! - -    finally: 'a trailing comma', -    oh: [ -        "we shouldn't forget", -        'arrays can have', -        'trailing commas too', -    ], -} -``` - -This implementation’s own [package.json5](package.json5) is more realistic: - -```js -// This file is written in JSON5 syntax, naturally, but npm needs a regular -// JSON file, so compile via `npm run build`. Be sure to keep both in sync! - -{ -    name: 'json5', -    version: '0.5.0', -    description: 'JSON for the ES5 era.', -    keywords: ['json', 'es5'], -    author: 'Aseem Kishore <aseem.kishore@gmail.com>', -    contributors: [ -        // TODO: Should we remove this section in favor of GitHub's list? -        // https://github.com/aseemk/json5/contributors -        'Max Nanasy <max.nanasy@gmail.com>', -        'Andrew Eisenberg <andrew@eisenberg.as>', -        'Jordan Tucker <jordanbtucker@gmail.com>', -    ], -    main: 'lib/json5.js', -    bin: 'lib/cli.js', -    files: ["lib/"], -    dependencies: {}, -    devDependencies: { -        gulp: "^3.9.1", -        'gulp-jshint': "^2.0.0", -        jshint: "^2.9.1", -        'jshint-stylish': "^2.1.0", -        mocha: "^2.4.5" -    }, -    scripts: { -        build: 'node ./lib/cli.js -c package.json5', -        test: 'mocha --ui exports --reporter spec', -            // TODO: Would it be better to define these in a mocha.opts file? -    }, -    homepage: 'http://json5.org/', -    license: 'MIT', -    repository: { -        type: 'git', -        url: 'https://github.com/aseemk/json5.git', -    }, -} -``` - - -## Community - -Join the [Google Group](http://groups.google.com/group/json5) if you’re -interested in JSON5 news, updates, and general discussion. -Don’t worry, it’s very low-traffic. - -The [GitHub wiki](https://github.com/aseemk/json5/wiki) is a good place to track -JSON5 support and usage. Contribute freely there! - -[GitHub Issues](https://github.com/aseemk/json5/issues) is the place to -formally propose feature requests and report bugs. Questions and general -feedback are better directed at the Google Group. - - -## Usage - -This JavaScript implementation of JSON5 simply provides a `JSON5` object just -like the native ES5 `JSON` object. - -To use from Node: - -```sh -npm install json5 -``` - -```js -var JSON5 = require('json5'); -``` - -To use in the browser (adds the `JSON5` object to the global namespace): - -```html -<script src="json5.js"></script> -``` - -Then in both cases, you can simply replace native `JSON` calls with `JSON5`: - -```js -var obj = JSON5.parse('{unquoted:"key",trailing:"comma",}'); -var str = JSON5.stringify(obj); -``` - -`JSON5.parse` supports all of the JSON5 features listed above (*TODO: except -Unicode*), as well as the native [`reviver` argument][json-parse]. - -[json-parse]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse - -`JSON5.stringify` mainly avoids quoting keys where possible, but we hope to -keep expanding it in the future (e.g. to also output trailing commas). -It supports the native [`replacer` and `space` arguments][json-stringify], -as well. *(TODO: Any implemented `toJSON` methods aren’t used today.)* - -[json-stringify]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify - - -### Extras - -If you’re running this on Node, you can also register a JSON5 `require()` hook -to let you `require()` `.json5` files just like you can `.json` files: - -```js -require('json5/lib/require'); -require('./path/to/foo');   // tries foo.json5 after foo.js, foo.json, etc. -require('./path/to/bar.json5'); -``` - -This module also provides a `json5` executable (requires Node) for converting -JSON5 files to JSON: - -```sh -json5 -c path/to/foo.json5    # generates path/to/foo.json -``` - - -## Development - -```sh -git clone git://github.com/aseemk/json5.git -cd json5 -npm install -npm test -``` - -As the `package.json5` file states, be sure to run `npm run build` on changes -to `package.json5`, since npm requires `package.json`. - -Feel free to [file issues](https://github.com/aseemk/json5/issues) and submit -[pull requests](https://github.com/aseemk/json5/pulls) — contributions are -welcome. If you do submit a pull request, please be sure to add or update the -tests, and ensure that `npm test` continues to pass. - - -## License - -MIT. See [LICENSE.md](./LICENSE.md) for details. - - -## Credits - -[Michael Bolin](http://bolinfest.com/) independently arrived at and published -some of these same ideas with awesome explanations and detail. -Recommended reading: -[Suggested Improvements to JSON](http://bolinfest.com/essays/json.html) - -[Douglas Crockford](http://www.crockford.com/) of course designed and built -JSON, but his state machine diagrams on the [JSON website](http://json.org/), -as cheesy as it may sound, gave me motivation and confidence that building a -new parser to implement these ideas this was within my reach! -This code is also modeled directly off of Doug’s open-source [json_parse.js][] -parser. I’m super grateful for that clean and well-documented code. - -[json_parse.js]: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js - -[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific -supporter, contributing multiple patches and ideas. Thanks Max! - -[Andrew Eisenberg](https://github.com/aeisenberg) has contributed the -`stringify` method. - -[Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely -with ES5 and is actively maintaining this project. diff --git a/node_modules/json5/lib/cli.js b/node_modules/json5/lib/cli.js deleted file mode 100755 index 9b72f6d19..000000000 --- a/node_modules/json5/lib/cli.js +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env node - -// cli.js -// JSON5 command-line interface. -// -// This is pretty minimal for now; just supports compiling files via `-c`. -// TODO More useful functionality, like output path, watch, etc.? - -var FS = require('fs'); -var JSON5 = require('./json5'); -var Path = require('path'); - -var USAGE = [ -    'Usage: json5 -c path/to/file.json5 ...', -    'Compiles JSON5 files into sibling JSON files with the same basenames.', -].join('\n'); - -// if valid, args look like [node, json5, -c, file1, file2, ...] -var args = process.argv; - -if (args.length < 4 || args[2] !== '-c') { -    console.error(USAGE); -    process.exit(1); -} - -var cwd = process.cwd(); -var files = args.slice(3); - -// iterate over each file and convert JSON5 files to JSON: -files.forEach(function (file) { -    var path = Path.resolve(cwd, file); -    var basename = Path.basename(path, '.json5'); -    var dirname = Path.dirname(path); - -    var json5 = FS.readFileSync(path, 'utf8'); -    var obj = JSON5.parse(json5); -    var json = JSON.stringify(obj, null, 4); // 4 spaces; TODO configurable? - -    path = Path.join(dirname, basename + '.json'); -    FS.writeFileSync(path, json, 'utf8'); -}); diff --git a/node_modules/json5/lib/json5.js b/node_modules/json5/lib/json5.js deleted file mode 100644 index 4a4590d0c..000000000 --- a/node_modules/json5/lib/json5.js +++ /dev/null @@ -1,770 +0,0 @@ -// json5.js -// Modern JSON. See README.md for details. -// -// This file is based directly off of Douglas Crockford's json_parse.js: -// https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js - -var JSON5 = (typeof exports === 'object' ? exports : {}); - -JSON5.parse = (function () { -    "use strict"; - -// This is a function that can parse a JSON5 text, producing a JavaScript -// data structure. It is a simple, recursive descent parser. It does not use -// eval or regular expressions, so it can be used as a model for implementing -// a JSON5 parser in other languages. - -// We are defining the function inside of another function to avoid creating -// global variables. - -    var at,           // The index of the current character -        lineNumber,   // The current line number -        columnNumber, // The current column number -        ch,           // The current character -        escapee = { -            "'":  "'", -            '"':  '"', -            '\\': '\\', -            '/':  '/', -            '\n': '',       // Replace escaped newlines in strings w/ empty string -            b:    '\b', -            f:    '\f', -            n:    '\n', -            r:    '\r', -            t:    '\t' -        }, -        ws = [ -            ' ', -            '\t', -            '\r', -            '\n', -            '\v', -            '\f', -            '\xA0', -            '\uFEFF' -        ], -        text, - -        renderChar = function (chr) { -            return chr === '' ? 'EOF' : "'" + chr + "'"; -        }, - -        error = function (m) { - -// Call error when something is wrong. - -            var error = new SyntaxError(); -            // beginning of message suffix to agree with that provided by Gecko - see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse -            error.message = m + " at line " + lineNumber + " column " + columnNumber + " of the JSON5 data. Still to read: " + JSON.stringify(text.substring(at - 1, at + 19)); -            error.at = at; -            // These two property names have been chosen to agree with the ones in Gecko, the only popular -            // environment which seems to supply this info on JSON.parse -            error.lineNumber = lineNumber; -            error.columnNumber = columnNumber; -            throw error; -        }, - -        next = function (c) { - -// If a c parameter is provided, verify that it matches the current character. - -            if (c && c !== ch) { -                error("Expected " + renderChar(c) + " instead of " + renderChar(ch)); -            } - -// Get the next character. When there are no more characters, -// return the empty string. - -            ch = text.charAt(at); -            at++; -            columnNumber++; -            if (ch === '\n' || ch === '\r' && peek() !== '\n') { -                lineNumber++; -                columnNumber = 0; -            } -            return ch; -        }, - -        peek = function () { - -// Get the next character without consuming it or -// assigning it to the ch varaible. - -            return text.charAt(at); -        }, - -        identifier = function () { - -// Parse an identifier. Normally, reserved words are disallowed here, but we -// only use this for unquoted object keys, where reserved words are allowed, -// so we don't check for those here. References: -// - http://es5.github.com/#x7.6 -// - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables -// - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm -// TODO Identifiers can have Unicode "letters" in them; add support for those. - -            var key = ch; - -            // Identifiers must start with a letter, _ or $. -            if ((ch !== '_' && ch !== '$') && -                    (ch < 'a' || ch > 'z') && -                    (ch < 'A' || ch > 'Z')) { -                error("Bad identifier as unquoted key"); -            } - -            // Subsequent characters can contain digits. -            while (next() && ( -                    ch === '_' || ch === '$' || -                    (ch >= 'a' && ch <= 'z') || -                    (ch >= 'A' && ch <= 'Z') || -                    (ch >= '0' && ch <= '9'))) { -                key += ch; -            } - -            return key; -        }, - -        number = function () { - -// Parse a number value. - -            var number, -                sign = '', -                string = '', -                base = 10; - -            if (ch === '-' || ch === '+') { -                sign = ch; -                next(ch); -            } - -            // support for Infinity (could tweak to allow other words): -            if (ch === 'I') { -                number = word(); -                if (typeof number !== 'number' || isNaN(number)) { -                    error('Unexpected word for number'); -                } -                return (sign === '-') ? -number : number; -            } - -            // support for NaN -            if (ch === 'N' ) { -              number = word(); -              if (!isNaN(number)) { -                error('expected word to be NaN'); -              } -              // ignore sign as -NaN also is NaN -              return number; -            } - -            if (ch === '0') { -                string += ch; -                next(); -                if (ch === 'x' || ch === 'X') { -                    string += ch; -                    next(); -                    base = 16; -                } else if (ch >= '0' && ch <= '9') { -                    error('Octal literal'); -                } -            } - -            switch (base) { -            case 10: -                while (ch >= '0' && ch <= '9' ) { -                    string += ch; -                    next(); -                } -                if (ch === '.') { -                    string += '.'; -                    while (next() && ch >= '0' && ch <= '9') { -                        string += ch; -                    } -                } -                if (ch === 'e' || ch === 'E') { -                    string += ch; -                    next(); -                    if (ch === '-' || ch === '+') { -                        string += ch; -                        next(); -                    } -                    while (ch >= '0' && ch <= '9') { -                        string += ch; -                        next(); -                    } -                } -                break; -            case 16: -                while (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f') { -                    string += ch; -                    next(); -                } -                break; -            } - -            if(sign === '-') { -                number = -string; -            } else { -                number = +string; -            } - -            if (!isFinite(number)) { -                error("Bad number"); -            } else { -                return number; -            } -        }, - -        string = function () { - -// Parse a string value. - -            var hex, -                i, -                string = '', -                delim,      // double quote or single quote -                uffff; - -// When parsing for string values, we must look for ' or " and \ characters. - -            if (ch === '"' || ch === "'") { -                delim = ch; -                while (next()) { -                    if (ch === delim) { -                        next(); -                        return string; -                    } else if (ch === '\\') { -                        next(); -                        if (ch === 'u') { -                            uffff = 0; -                            for (i = 0; i < 4; i += 1) { -                                hex = parseInt(next(), 16); -                                if (!isFinite(hex)) { -                                    break; -                                } -                                uffff = uffff * 16 + hex; -                            } -                            string += String.fromCharCode(uffff); -                        } else if (ch === '\r') { -                            if (peek() === '\n') { -                                next(); -                            } -                        } else if (typeof escapee[ch] === 'string') { -                            string += escapee[ch]; -                        } else { -                            break; -                        } -                    } else if (ch === '\n') { -                        // unescaped newlines are invalid; see: -                        // https://github.com/aseemk/json5/issues/24 -                        // TODO this feels special-cased; are there other -                        // invalid unescaped chars? -                        break; -                    } else { -                        string += ch; -                    } -                } -            } -            error("Bad string"); -        }, - -        inlineComment = function () { - -// Skip an inline comment, assuming this is one. The current character should -// be the second / character in the // pair that begins this inline comment. -// To finish the inline comment, we look for a newline or the end of the text. - -            if (ch !== '/') { -                error("Not an inline comment"); -            } - -            do { -                next(); -                if (ch === '\n' || ch === '\r') { -                    next(); -                    return; -                } -            } while (ch); -        }, - -        blockComment = function () { - -// Skip a block comment, assuming this is one. The current character should be -// the * character in the /* pair that begins this block comment. -// To finish the block comment, we look for an ending */ pair of characters, -// but we also watch for the end of text before the comment is terminated. - -            if (ch !== '*') { -                error("Not a block comment"); -            } - -            do { -                next(); -                while (ch === '*') { -                    next('*'); -                    if (ch === '/') { -                        next('/'); -                        return; -                    } -                } -            } while (ch); - -            error("Unterminated block comment"); -        }, - -        comment = function () { - -// Skip a comment, whether inline or block-level, assuming this is one. -// Comments always begin with a / character. - -            if (ch !== '/') { -                error("Not a comment"); -            } - -            next('/'); - -            if (ch === '/') { -                inlineComment(); -            } else if (ch === '*') { -                blockComment(); -            } else { -                error("Unrecognized comment"); -            } -        }, - -        white = function () { - -// Skip whitespace and comments. -// Note that we're detecting comments by only a single / character. -// This works since regular expressions are not valid JSON(5), but this will -// break if there are other valid values that begin with a / character! - -            while (ch) { -                if (ch === '/') { -                    comment(); -                } else if (ws.indexOf(ch) >= 0) { -                    next(); -                } else { -                    return; -                } -            } -        }, - -        word = function () { - -// true, false, or null. - -            switch (ch) { -            case 't': -                next('t'); -                next('r'); -                next('u'); -                next('e'); -                return true; -            case 'f': -                next('f'); -                next('a'); -                next('l'); -                next('s'); -                next('e'); -                return false; -            case 'n': -                next('n'); -                next('u'); -                next('l'); -                next('l'); -                return null; -            case 'I': -                next('I'); -                next('n'); -                next('f'); -                next('i'); -                next('n'); -                next('i'); -                next('t'); -                next('y'); -                return Infinity; -            case 'N': -              next( 'N' ); -              next( 'a' ); -              next( 'N' ); -              return NaN; -            } -            error("Unexpected " + renderChar(ch)); -        }, - -        value,  // Place holder for the value function. - -        array = function () { - -// Parse an array value. - -            var array = []; - -            if (ch === '[') { -                next('['); -                white(); -                while (ch) { -                    if (ch === ']') { -                        next(']'); -                        return array;   // Potentially empty array -                    } -                    // ES5 allows omitting elements in arrays, e.g. [,] and -                    // [,null]. We don't allow this in JSON5. -                    if (ch === ',') { -                        error("Missing array element"); -                    } else { -                        array.push(value()); -                    } -                    white(); -                    // If there's no comma after this value, this needs to -                    // be the end of the array. -                    if (ch !== ',') { -                        next(']'); -                        return array; -                    } -                    next(','); -                    white(); -                } -            } -            error("Bad array"); -        }, - -        object = function () { - -// Parse an object value. - -            var key, -                object = {}; - -            if (ch === '{') { -                next('{'); -                white(); -                while (ch) { -                    if (ch === '}') { -                        next('}'); -                        return object;   // Potentially empty object -                    } - -                    // Keys can be unquoted. If they are, they need to be -                    // valid JS identifiers. -                    if (ch === '"' || ch === "'") { -                        key = string(); -                    } else { -                        key = identifier(); -                    } - -                    white(); -                    next(':'); -                    object[key] = value(); -                    white(); -                    // If there's no comma after this pair, this needs to be -                    // the end of the object. -                    if (ch !== ',') { -                        next('}'); -                        return object; -                    } -                    next(','); -                    white(); -                } -            } -            error("Bad object"); -        }; - -    value = function () { - -// Parse a JSON value. It could be an object, an array, a string, a number, -// or a word. - -        white(); -        switch (ch) { -        case '{': -            return object(); -        case '[': -            return array(); -        case '"': -        case "'": -            return string(); -        case '-': -        case '+': -        case '.': -            return number(); -        default: -            return ch >= '0' && ch <= '9' ? number() : word(); -        } -    }; - -// Return the json_parse function. It will have access to all of the above -// functions and variables. - -    return function (source, reviver) { -        var result; - -        text = String(source); -        at = 0; -        lineNumber = 1; -        columnNumber = 1; -        ch = ' '; -        result = value(); -        white(); -        if (ch) { -            error("Syntax error"); -        } - -// If there is a reviver function, we recursively walk the new structure, -// passing each name/value pair to the reviver function for possible -// transformation, starting with a temporary root object that holds the result -// in an empty key. If there is not a reviver function, we simply return the -// result. - -        return typeof reviver === 'function' ? (function walk(holder, key) { -            var k, v, value = holder[key]; -            if (value && typeof value === 'object') { -                for (k in value) { -                    if (Object.prototype.hasOwnProperty.call(value, k)) { -                        v = walk(value, k); -                        if (v !== undefined) { -                            value[k] = v; -                        } else { -                            delete value[k]; -                        } -                    } -                } -            } -            return reviver.call(holder, key, value); -        }({'': result}, '')) : result; -    }; -}()); - -// JSON5 stringify will not quote keys where appropriate -JSON5.stringify = function (obj, replacer, space) { -    if (replacer && (typeof(replacer) !== "function" && !isArray(replacer))) { -        throw new Error('Replacer must be a function or an array'); -    } -    var getReplacedValueOrUndefined = function(holder, key, isTopLevel) { -        var value = holder[key]; - -        // Replace the value with its toJSON value first, if possible -        if (value && value.toJSON && typeof value.toJSON === "function") { -            value = value.toJSON(); -        } - -        // If the user-supplied replacer if a function, call it. If it's an array, check objects' string keys for -        // presence in the array (removing the key/value pair from the resulting JSON if the key is missing). -        if (typeof(replacer) === "function") { -            return replacer.call(holder, key, value); -        } else if(replacer) { -            if (isTopLevel || isArray(holder) || replacer.indexOf(key) >= 0) { -                return value; -            } else { -                return undefined; -            } -        } else { -            return value; -        } -    }; - -    function isWordChar(c) { -        return (c >= 'a' && c <= 'z') || -            (c >= 'A' && c <= 'Z') || -            (c >= '0' && c <= '9') || -            c === '_' || c === '$'; -    } - -    function isWordStart(c) { -        return (c >= 'a' && c <= 'z') || -            (c >= 'A' && c <= 'Z') || -            c === '_' || c === '$'; -    } - -    function isWord(key) { -        if (typeof key !== 'string') { -            return false; -        } -        if (!isWordStart(key[0])) { -            return false; -        } -        var i = 1, length = key.length; -        while (i < length) { -            if (!isWordChar(key[i])) { -                return false; -            } -            i++; -        } -        return true; -    } - -    // export for use in tests -    JSON5.isWord = isWord; - -    // polyfills -    function isArray(obj) { -        if (Array.isArray) { -            return Array.isArray(obj); -        } else { -            return Object.prototype.toString.call(obj) === '[object Array]'; -        } -    } - -    function isDate(obj) { -        return Object.prototype.toString.call(obj) === '[object Date]'; -    } - -    var objStack = []; -    function checkForCircular(obj) { -        for (var i = 0; i < objStack.length; i++) { -            if (objStack[i] === obj) { -                throw new TypeError("Converting circular structure to JSON"); -            } -        } -    } - -    function makeIndent(str, num, noNewLine) { -        if (!str) { -            return ""; -        } -        // indentation no more than 10 chars -        if (str.length > 10) { -            str = str.substring(0, 10); -        } - -        var indent = noNewLine ? "" : "\n"; -        for (var i = 0; i < num; i++) { -            indent += str; -        } - -        return indent; -    } - -    var indentStr; -    if (space) { -        if (typeof space === "string") { -            indentStr = space; -        } else if (typeof space === "number" && space >= 0) { -            indentStr = makeIndent(" ", space, true); -        } else { -            // ignore space parameter -        } -    } - -    // Copied from Crokford's implementation of JSON -    // See https://github.com/douglascrockford/JSON-js/blob/e39db4b7e6249f04a195e7dd0840e610cc9e941e/json2.js#L195 -    // Begin -    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, -        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, -        meta = { // table of character substitutions -        '\b': '\\b', -        '\t': '\\t', -        '\n': '\\n', -        '\f': '\\f', -        '\r': '\\r', -        '"' : '\\"', -        '\\': '\\\\' -    }; -    function escapeString(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. -        escapable.lastIndex = 0; -        return escapable.test(string) ? '"' + string.replace(escapable, function (a) { -            var c = meta[a]; -            return typeof c === 'string' ? -                c : -                '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); -        }) + '"' : '"' + string + '"'; -    } -    // End - -    function internalStringify(holder, key, isTopLevel) { -        var buffer, res; - -        // Replace the value, if necessary -        var obj_part = getReplacedValueOrUndefined(holder, key, isTopLevel); - -        if (obj_part && !isDate(obj_part)) { -            // unbox objects -            // don't unbox dates, since will turn it into number -            obj_part = obj_part.valueOf(); -        } -        switch(typeof obj_part) { -            case "boolean": -                return obj_part.toString(); - -            case "number": -                if (isNaN(obj_part) || !isFinite(obj_part)) { -                    return "null"; -                } -                return obj_part.toString(); - -            case "string": -                return escapeString(obj_part.toString()); - -            case "object": -                if (obj_part === null) { -                    return "null"; -                } else if (isArray(obj_part)) { -                    checkForCircular(obj_part); -                    buffer = "["; -                    objStack.push(obj_part); - -                    for (var i = 0; i < obj_part.length; i++) { -                        res = internalStringify(obj_part, i, false); -                        buffer += makeIndent(indentStr, objStack.length); -                        if (res === null || typeof res === "undefined") { -                            buffer += "null"; -                        } else { -                            buffer += res; -                        } -                        if (i < obj_part.length-1) { -                            buffer += ","; -                        } else if (indentStr) { -                            buffer += "\n"; -                        } -                    } -                    objStack.pop(); -                    if (obj_part.length) { -                        buffer += makeIndent(indentStr, objStack.length, true) -                    } -                    buffer += "]"; -                } else { -                    checkForCircular(obj_part); -                    buffer = "{"; -                    var nonEmpty = false; -                    objStack.push(obj_part); -                    for (var prop in obj_part) { -                        if (obj_part.hasOwnProperty(prop)) { -                            var value = internalStringify(obj_part, prop, false); -                            isTopLevel = false; -                            if (typeof value !== "undefined" && value !== null) { -                                buffer += makeIndent(indentStr, objStack.length); -                                nonEmpty = true; -                                key = isWord(prop) ? prop : escapeString(prop); -                                buffer += key + ":" + (indentStr ? ' ' : '') + value + ","; -                            } -                        } -                    } -                    objStack.pop(); -                    if (nonEmpty) { -                        buffer = buffer.substring(0, buffer.length-1) + makeIndent(indentStr, objStack.length) + "}"; -                    } else { -                        buffer = '{}'; -                    } -                } -                return buffer; -            default: -                // functions and undefined should be ignored -                return undefined; -        } -    } - -    // special case...when undefined is used inside of -    // a compound object/array, return null. -    // but when top-level, return undefined -    var topLevelHolder = {"":obj}; -    if (obj === undefined) { -        return getReplacedValueOrUndefined(topLevelHolder, '', true); -    } -    return internalStringify(topLevelHolder, '', true); -}; diff --git a/node_modules/json5/lib/require.js b/node_modules/json5/lib/require.js deleted file mode 100644 index 73e56fe92..000000000 --- a/node_modules/json5/lib/require.js +++ /dev/null @@ -1,18 +0,0 @@ -// require.js -// Node.js only: adds a require() hook for .json5 files, just like the native -// hook for .json files. -// -// Usage: -// require('json5/require'); -// require('./foo');    // will check foo.json5 after foo.js, foo.json, etc. -// require('./bar.json5'); - -var FS = require('fs'); -var JSON5 = require('./json5'); - -// Modeled off of (v0.6.18 link; check latest too): -// https://github.com/joyent/node/blob/v0.6.18/lib/module.js#L468-L472 -require.extensions['.json5'] = function (module, filename) { -    var content = FS.readFileSync(filename, 'utf8'); -    module.exports = JSON5.parse(content); -}; diff --git a/node_modules/json5/package.json b/node_modules/json5/package.json deleted file mode 100644 index 44059b492..000000000 --- a/node_modules/json5/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ -    "name": "json5", -    "version": "0.5.1", -    "description": "JSON for the ES5 era.", -    "keywords": [ -        "json", -        "es5" -    ], -    "author": "Aseem Kishore <aseem.kishore@gmail.com>", -    "contributors": [ -        "Max Nanasy <max.nanasy@gmail.com>", -        "Andrew Eisenberg <andrew@eisenberg.as>", -        "Jordan Tucker <jordanbtucker@gmail.com>" -    ], -    "main": "lib/json5.js", -    "bin": "lib/cli.js", -    "files": [ -        "lib/" -    ], -    "dependencies": {}, -    "devDependencies": { -        "gulp": "^3.9.1", -        "gulp-jshint": "^2.0.1", -        "jshint": "^2.9.3", -        "jshint-stylish": "^2.2.1", -        "mocha": "^3.1.0" -    }, -    "scripts": { -        "build": "node ./lib/cli.js -c package.json5", -        "test": "mocha --ui exports --reporter spec" -    }, -    "homepage": "http://json5.org/", -    "license": "MIT", -    "repository": { -        "type": "git", -        "url": "https://github.com/aseemk/json5.git" -    } -}
\ No newline at end of file  | 
