4.0.0 • Published 9 months ago

read-package-json-fast v4.0.0

Weekly downloads
1,471,963
License
ISC
Repository
github
Last release
9 months ago

read-package-json-fast

Like read-package-json, but faster and more accepting of "missing" data.

This is only suitable for reading package.json files in a node_modules tree, since it doesn't do the various cleanups, normalization, and warnings that are beneficial at the root level in a package being published.

USAGE

const rpj = require('read-package-json-fast')

// typical promisey type API
rpj('/path/to/package.json')
  .then(data => ...)
  .catch(er => ...)

// or just normalize a package manifest
const normalized = rpj.normalize(packageJsonObject)

Errors raised from parsing will use 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 the path 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, and if you want to preserve windows \r\n newlines, replace the \n chars in the string with data[Symbol.for('newline')].

For example:

const 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 weird inconsistent indentation, then it won't track that or give you any way to preserve 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).
@saeon/ol-react@saeon/quick-formcogoportutilsgtpmgtmpultrapkg@mink-opn/build-tokens@infinitebrahmanuniverse/nolb-read-ms-teams-vscode-extension@everything-registry/sub-chunk-2628winx-form-winxwireit-packageworkspace-infowrkspcwow.js-juzi@cromwell/cli@cromwell/cms@cromwell/core-backend@positionex/position-sdkjolt-frameworksushi-sdk-ftm0oscpuzzzxxxyyy321123tehmusimhujanud7-act2@another-web-starter/dev@backpackjs/transform-core@backpackjs/transform-search-indexes@binarybutterfly/k-cli@buganto/client@cdk8s-extensions/argo-rollout@cleveradssolutions/cas.cordova.ironsource@cleveradssolutions/cas.cordova.kidoz@cleveradssolutions/cas.cordova.mintegral@cleveradssolutions/cas.cordova.mytarget@cleveradssolutions/cas.cordova.optimal@cleveradssolutions/cas.cordova.pangle@cleveradssolutions/cas.cordova.superawesome@cleveradssolutions/cas.cordova.tapjoy@cleveradssolutions/cas.cordova.unity@cleveradssolutions/cas.cordova.vungle@cleveradssolutions/cas.cordova.yandex@cleveradssolutions/cas.cordova.adcolony@cleveradssolutions/cas.cordova.admob@cleveradssolutions/cas.cordova.applovin@cleveradssolutions/cas.cordova.facebook@cleveradssolutions/cas.cordova.families@cleveradssolutions/cas.cordova.fyber@cleveradssolutions/cas.cordova.inmobi@abhinavoneuipoc/stencil-testyingpengsha-npm@parallelnft/web3modal@dxv/cli@fnpm-io/cli@hexlet/chat-server@informaticon/web.compiler@itandu/cli@itandu/cms@itandu/core-backend@m59/gerbv-bin@marinaga/bananize@enirisdev/angular-google-charts@microsoft/teamsfx-core@saeon/logger@pnpm/arborist__fork@npmcli/arborist@plogg/three@opn-ooo/eslint-config-opn@snpm-io/cli@se-yl/npmmynancepackage-metricspackage-bundle-fixnpx-utilsnpm-run-all2nuxtpaginationsoffice-addin-clipatepangdeuisedanbosokrollup-plugin-zxppyreswap-sdksemantic-release-workspace-dependencypileuleuyantearefinejs-reporeact-picky-with-cleargh-monoproject-cligit-branching-workflowiiif-manifest-editorhypmgundam5libnpmexecluojia-cli-devmangudinlagirajinmaxnpmmaxarborist@vdtn359/workspace-info@tomw2w/my-nuxt-layeranakketigaanaklanangteaanakwadontea
4.0.0

9 months ago

3.0.2

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.0.3

4 years ago

2.0.2

4 years ago

1.2.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.2

6 years ago

1.0.3

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago