You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# read-package-json-fast
Like [`read-package-json`](http://npm.im/read-package-json), but faster andmore accepting of "missing" data.
This is only suitable for reading package.json files in a node_modulestree, since it doesn't do the various cleanups, normalization, and warningsthat are beneficial at the root level in a package being published.
## USAGE
```jsconst rpj = require('read-package-json-fast')
// typical promisey type APIrpj('/path/to/package.json') .then(data => ...) .catch(er => ...)
// or just normalize a package manifestconst normalized = rpj.normalize(packageJsonObject)```
Errors raised from parsing will use[`json-parse-even-better-errors`](http://npm.im/json-parse-even-better-errors),so they'll be of type `JSONParseError` and have a `code: 'EJSONPARSE'`property. Errors will also always have a `path` member referring to thepath originally passed into the function.
## Indentation
To preserve indentation when the file is saved back to disk, use`data[Symbol.for('indent')]` as the third argument to `JSON.stringify`, andif you want to preserve windows `\r\n` newlines, replace the `\n` chars inthe string with `data[Symbol.for('newline')]`.
For example:
```jsconst data = await readPackageJsonFast('./package.json')const indent = Symbol.for('indent')const newline = Symbol.for('newline')// .. do some stuff to the data ..const string = JSON.stringify(data, null, data[indent]) + '\n'const eolFixed = data[newline] === '\n' ? string : string.replace(/\n/g, data[newline])await writeFile('./package.json', eolFixed)```
Indentation is determined by looking at the whitespace between the initial`{` and the first `"` that follows it. If you have lots of weirdinconsistent indentation, then it won't track that or give you any way topreserve it. Whether this is a bug or a feature is debatable ;)
## WHAT THIS MODULE DOES
- Parse JSON- Normalize `bundledDependencies`/`bundleDependencies` naming to just `bundleDependencies` (without the extra `d`)- Handle `true`, `false`, or object values passed to `bundleDependencies`- Normalize `funding: <string>` to `funding: { url: <string> }`- Remove any `scripts` members that are not a string value.- Normalize a string `bin` member to `{ [name]: bin }`.- Fold `optionalDependencies` into `dependencies`.- Set the `_id` property if name and version are set. (This is load-bearing in a few places within the npm CLI.)
## WHAT THIS MODULE DOES NOT DO
- Warn about invalid/missing name, version, repository, etc.- Extract a description from the `README.md` file, or attach the readme to the parsed data object.- Read the `HEAD` value out of the `.git` folder.- Warn about potentially typo'ed scripts (eg, `tset` instead of `test`)- Check to make sure that all the files in the `files` field exist and are valid files.- Fix bundleDependencies that are not listed in `dependencies`.- Fix `dependencies` fields that are not strictly objects of string values.- Anything involving the `directories` field (ie, bins, mans, and so on).
|