lib/condenser/processors/node_modules/json5/README.md in condenser-0.0.4 vs lib/condenser/processors/node_modules/json5/README.md in condenser-0.0.5

- old
+ new

@@ -1,286 +1,234 @@ -# JSON5 – Modern JSON +# JSON5 – JSON for Humans -[![Build Status](https://travis-ci.org/json5/json5.svg)](https://travis-ci.org/json5/json5) +[![Build Status](https://travis-ci.org/json5/json5.svg)][Build Status] +[![Coverage +Status](https://coveralls.io/repos/github/json5/json5/badge.svg)][Coverage +Status] -JSON is an excellent data format, but we think it can be better. +The JSON5 Data Interchange Format (JSON5) is a superset of [JSON] that aims to +alleviate some of the limitations of JSON by expanding its syntax to include +some productions from [ECMAScript 5.1]. -**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. +This JavaScript library is the official reference implementation for JSON5 +parsing and serialization libraries. -JSON5 remains a **strict subset of JavaScript**, adds **no new data types**, -and **works with all existing JSON content**. +[Build Status]: https://travis-ci.org/json5/json5 -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.)* +[Coverage Status]: https://coveralls.io/github/json5/json5 -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. +[JSON]: https://tools.ietf.org/html/rfc7159 +[ECMAScript 5.1]: https://www.ecma-international.org/ecma-262/5.1/ -## Why +## Summary of Features +The following ECMAScript 5.1 features, which are not supported in JSON, have +been extended to JSON5. -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 may be an ECMAScript 5.1 _[IdentifierName]_. +- Objects may have a single trailing comma. -- 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 may have a single trailing comma. -- Arrays can have trailing commas. - ### Strings +- Strings may be single quoted. +- Strings may span multiple lines by escaping new line characters. +- Strings may include character escapes. -- 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 may be hexadecimal. +- Numbers may have a leading or trailing decimal point. +- Numbers may be [IEEE 754] positive infinity, negative infinity, and NaN. +- Numbers may begin with an explicit plus sign. -- 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 +- Single and multi-line comments are allowed. -- Both inline (single-line) and block (multi-line) comments are allowed. +### White Space +- Additional white space characters are allowed. +[IdentifierName]: https://www.ecma-international.org/ecma-262/5.1/#sec-7.6 -## Example +[IEEE 754]: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933 -The following is a contrived example, but it illustrates most of the features: - +## Short Example ```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', - ], + // comments + unquoted: 'and you can quote me on that', + singleQuotes: 'I can use "double quotes" here', + lineBreaks: "Look, Mom! \ +No \\n's!", + hexadecimal: 0xdecaf, + leadingDecimalPoint: .8675309, andTrailing: 8675309., + positiveSign: +1, + trailingComma: 'in objects', andIn: ['arrays',], + "backwardsCompatible": "with JSON", } ``` -This implementation’s own [package.json5](package.json5) is more realistic: +## Specification +For a detailed explanation of the JSON5 format, please read the [official +specification](https://json5.github.io/json5-spec/). +## Installation +### Node.js +```sh +npm install json5 +``` + ```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! +const JSON5 = require('json5') +``` -{ - 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', - }, -} +### Browsers +```html +<script src="https://unpkg.com/json5@^2.0.0/dist/index.min.js"></script> ``` +This will create a global `JSON5` variable. -## Community +## API +The JSON5 API is compatible with the [JSON API]. -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. +[JSON API]: +https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON -The [GitHub wiki](https://github.com/aseemk/json5/wiki) is a good place to track -JSON5 support and usage. Contribute freely there! +### JSON5.parse() +Parses a JSON5 string, constructing the JavaScript value or object described by +the string. An optional reviver function can be provided to perform a +transformation on the resulting object before it is returned. -[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. +#### Syntax + JSON5.parse(text[, reviver]) +#### Parameters +- `text`: The string to parse as JSON5. +- `reviver`: If a function, this prescribes how the value originally produced by + parsing is transformed, before being returned. -## Usage +#### Return value +The object corresponding to the given JSON5 text. -This JavaScript implementation of JSON5 simply provides a `JSON5` object just -like the native ES5 `JSON` object. +### JSON5.stringify() +Converts a JavaScript value to a JSON5 string, optionally replacing values if a +replacer function is specified, or optionally including only the specified +properties if a replacer array is specified. -To use from Node: +#### Syntax + JSON5.stringify(value[, replacer[, space]]) + JSON5.stringify(value[, options]) -```sh -npm install json5 -``` +#### Parameters +- `value`: The value to convert to a JSON5 string. +- `replacer`: A function that alters the behavior of the stringification + process, or an array of String and Number objects that serve as a whitelist + for selecting/filtering the properties of the value object to be included in + the JSON5 string. If this value is null or not provided, all properties of the + object are included in the resulting JSON5 string. +- `space`: A String or Number object that's used to insert white space into the + output JSON5 string for readability purposes. If this is a Number, it + indicates the number of space characters to use as white space; this number is + capped at 10 (if it is greater, the value is just 10). Values less than 1 + indicate that no space should be used. If this is a String, the string (or the + first 10 characters of the string, if it's longer than that) is used as white + space. If this parameter is not provided (or is null), no white space is used. + If white space is used, trailing commas will be used in objects and arrays. +- `options`: An object with the following properties: + - `replacer`: Same as the `replacer` parameter. + - `space`: Same as the `space` parameter. + - `quote`: A String representing the quote character to use when serializing + strings. -```js -var JSON5 = require('json5'); -``` +#### Return value +A JSON5 string representing the value. -To use in the browser (adds the `JSON5` object to the global namespace): +### Node.js `require()` JSON5 files +When using Node.js, you can `require()` JSON5 files by adding the following +statement. -```html -<script src="json5.js"></script> +```js +require('json5/lib/register') ``` -Then in both cases, you can simply replace native `JSON` calls with `JSON5`: +Then you can load a JSON5 file with a Node.js `require()` statement. For +example: ```js -var obj = JSON5.parse('{unquoted:"key",trailing:"comma",}'); -var str = JSON5.stringify(obj); +const config = require('./config.json5') ``` -`JSON5.parse` supports all of the JSON5 features listed above (*TODO: except -Unicode*), as well as the native [`reviver` argument][json-parse]. +## CLI +Since JSON is more widely used than JSON5, this package includes a CLI for +converting JSON5 to JSON and for validating the syntax of JSON5 documents. -[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'); +### Installation +```sh +npm install --global json5 ``` -This module also provides a `json5` executable (requires Node) for converting -JSON5 files to JSON: - +### Usage ```sh -json5 -c path/to/foo.json5 # generates path/to/foo.json +json5 [options] <file> ``` +If `<file>` is not provided, then STDIN is used. -## Development +#### Options: +- `-s`, `--space`: The number of spaces to indent or `t` for tabs +- `-o`, `--out-file [file]`: Output to the specified file, otherwise STDOUT +- `-v`, `--validate`: Validate JSON5 but do not output JSON +- `-V`, `--version`: Output the version number +- `-h`, `--help`: Output usage information +## Contributing +### Development ```sh -git clone git://github.com/aseemk/json5.git +git clone https://github.com/json5/json5 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`. +When contributing code, please write relevant tests and run `npm test` and `npm +run lint` before submitting pull requests. Please use an editor that supports +[EditorConfig](http://editorconfig.org/). -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. +### Issues +To report bugs or request features regarding the JSON5 data format, please +submit an issue to the [official specification +repository](https://github.com/json5/json5-spec). +To report bugs or request features regarding the JavaScript implentation of +JSON5, please submit an issue to this repository. ## License - MIT. See [LICENSE.md](./LICENSE.md) for details. - ## Credits +[Assem Kishore](https://github.com/aseemk) founded this project. [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) +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, but his state machine diagrams on the [JSON website](http://json.org/), as +cheesy as it may sound, gave us motivation and confidence that building a new +parser to implement these ideas was within reach! The original +implementation of JSON5 was also modeled directly off of Doug’s open-source +[json_parse.js] parser. We’re grateful for that clean and well-documented +code. -[json_parse.js]: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js +[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! +supporter, contributing multiple patches and ideas. -[Andrew Eisenberg](https://github.com/aeisenberg) has contributed the +[Andrew Eisenberg](https://github.com/aeisenberg) contributed the original `stringify` method. [Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely -with ES5 and is actively maintaining this project. +with ES5, wrote the official JSON5 specification, completely rewrote the +codebase from the ground up, and is actively maintaining this project.