{"_id":"npm-logical-tree","_rev":"147123","name":"npm-logical-tree","description":"Calculate 'logical' trees from a package.json + package-lock","dist-tags":{"latest":"1.2.1"},"maintainers":[{"name":"zkat","email":"kat@sykosomatic.org"}],"time":{"modified":"2021-06-03T11:30:18.000Z","created":"2017-10-07T18:36:46.940Z","1.2.1":"2018-01-19T02:46:59.579Z","1.2.0":"2017-10-13T04:54:58.075Z","1.1.0":"2017-10-11T01:35:36.069Z","1.0.0":"2017-10-07T18:36:46.940Z"},"users":{"evocateur":true},"author":{"name":"Kat Marchán","email":"kzm@sykosomatic.org"},"repository":{"type":"git","url":"git+https://github.com/npm/logical-tree.git"},"versions":{"1.2.1":{"name":"npm-logical-tree","version":"1.2.1","description":"Calculate 'logical' trees from a package.json + package-lock","main":"index.js","files":["*.js"],"scripts":{"prerelease":"npm t","postrelease":"npm publish && git push --follow-tags","pretest":"standard lib test *.js","release":"standard-version -s","test":"nyc --all -- tap -J test/*.js","update-coc":"weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'","update-contrib":"weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'"},"repository":{"type":"git","url":"git+https://github.com/npm/logical-tree.git"},"keywords":["npm","package manager"],"author":{"name":"Kat Marchán","email":"kzm@sykosomatic.org"},"contributors":[{"name":"Rebecca Turner","email":"me@re-becca.org"}],"license":"ISC","devDependencies":{"bluebird":"^3.5.1","nyc":"^11.1.0","standard":"^10.0.2","standard-version":"^4.2.0","tap":"^10.7.0","weallbehave":"^1.2.0","weallcontribute":"^1.0.8"},"config":{"nyc":{"exclude":["node_modules/**","test/**"]}},"gitHead":"675632c9ad38b47ccd495df3baad19b6f6ab5f74","bugs":{"url":"https://github.com/npm/logical-tree/issues"},"homepage":"https://github.com/npm/logical-tree#readme","_id":"npm-logical-tree@1.2.1","_npmVersion":"5.6.0","_nodeVersion":"9.3.0","_npmUser":{"name":"zkat","email":"kzm@sykosomatic.org"},"dist":{"shasum":"44610141ca24664cad35d1e607176193fd8f5b88","size":4799,"noattachment":false,"key":"/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/npm-logical-tree/download/npm-logical-tree-1.2.1.tgz"},"maintainers":[{"name":"zkat","email":"kat@sykosomatic.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/npm-logical-tree-1.2.1.tgz_1516330018706_0.8357883766293526"},"directories":{},"publish_time":1516330019579,"_hasShrinkwrap":false,"_cnpm_publish_time":1516330019579},"1.2.0":{"name":"npm-logical-tree","version":"1.2.0","description":"Calculate 'logical' trees from a package.json + package-lock","main":"index.js","files":["*.js"],"scripts":{"prerelease":"npm t","postrelease":"npm publish && git push --follow-tags","pretest":"standard lib test *.js","release":"standard-version -s","test":"nyc --all -- tap -J test/*.js","update-coc":"weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'","update-contrib":"weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'"},"repository":{"type":"git","url":"git+https://github.com/npm/logical-tree.git"},"keywords":["npm","package manager"],"author":{"name":"Kat Marchán","email":"kzm@sykosomatic.org"},"contributors":[{"name":"Rebecca Turner","email":"me@re-becca.org"}],"license":"ISC","devDependencies":{"bluebird":"^3.5.1","nyc":"^11.1.0","standard":"^10.0.2","standard-version":"^4.2.0","tap":"^10.7.0","weallbehave":"^1.2.0","weallcontribute":"^1.0.8"},"config":{"nyc":{"exclude":["node_modules/**","test/**"]}},"gitHead":"d9499d7817b75dcdd210558889ad7940b2f071b3","bugs":{"url":"https://github.com/npm/logical-tree/issues"},"homepage":"https://github.com/npm/logical-tree#readme","_id":"npm-logical-tree@1.2.0","_npmVersion":"5.5.1","_nodeVersion":"8.5.0","_npmUser":{"name":"zkat","email":"kzm@sykosomatic.org"},"dist":{"shasum":"cd1926e80e593c56978fe446d67154752be8a1aa","size":4450,"noattachment":false,"key":"/npm-logical-tree/-/npm-logical-tree-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/npm-logical-tree/download/npm-logical-tree-1.2.0.tgz"},"maintainers":[{"name":"zkat","email":"kat@sykosomatic.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/npm-logical-tree-1.2.0.tgz_1507870497136_0.5671836531255394"},"directories":{},"publish_time":1507870498075,"_hasShrinkwrap":false,"_cnpm_publish_time":1507870498075},"1.1.0":{"name":"npm-logical-tree","version":"1.1.0","description":"Calculate 'logical' trees from a package.json + package-lock","main":"index.js","files":["*.js"],"scripts":{"prerelease":"npm t","postrelease":"npm publish && git push --follow-tags","pretest":"standard lib test *.js","release":"standard-version -s","test":"nyc --all -- tap -J test/*.js","update-coc":"weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'","update-contrib":"weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'"},"repository":{"type":"git","url":"git+https://github.com/npm/npm-logical-tree.git"},"keywords":["npm","package manager"],"author":{"name":"Kat Marchán","email":"kzm@sykosomatic.org"},"contributors":[{"name":"Rebecca Turner","email":"me@re-becca.org"}],"license":"ISC","devDependencies":{"nyc":"^11.1.0","standard":"^10.0.2","standard-version":"^4.2.0","tap":"^10.7.0","weallbehave":"^1.2.0","weallcontribute":"^1.0.8"},"config":{"nyc":{"exclude":["node_modules/**","test/**"]}},"gitHead":"bc9acd852afe378224cf1407146505ca1457956f","bugs":{"url":"https://github.com/npm/npm-logical-tree/issues"},"homepage":"https://github.com/npm/npm-logical-tree#readme","_id":"npm-logical-tree@1.1.0","_npmVersion":"5.5.1","_nodeVersion":"8.5.0","_npmUser":{"name":"zkat","email":"kzm@sykosomatic.org"},"dist":{"shasum":"0e38233b12bfe99f5aae67029146f11ceef027c0","size":3653,"noattachment":false,"key":"/npm-logical-tree/-/npm-logical-tree-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/npm-logical-tree/download/npm-logical-tree-1.1.0.tgz"},"maintainers":[{"name":"zkat","email":"kat@sykosomatic.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/npm-logical-tree-1.1.0.tgz_1507685735973_0.36328960745595396"},"directories":{},"publish_time":1507685736069,"_hasShrinkwrap":false,"_cnpm_publish_time":1507685736069},"1.0.0":{"name":"npm-logical-tree","version":"1.0.0","description":"Calculate 'logical' trees from a package.json + package-lock","main":"index.js","files":["*.js"],"scripts":{"prerelease":"npm t","postrelease":"npm publish && git push --follow-tags","pretest":"standard lib test *.js","release":"standard-version -s","test":"nyc --all -- tap -J test/*.js","update-coc":"weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'","update-contrib":"weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'"},"repository":{"type":"git","url":"git+https://github.com/npm/npm-logical-tree.git"},"keywords":["npm","package manager"],"author":{"name":"Kat Marchán","email":"kzm@sykosomatic.org"},"contributors":[{"name":"Rebecca Turner","email":"me@re-becca.org"}],"license":"ISC","devDependencies":{"nyc":"^11.1.0","standard":"^10.0.2","standard-version":"^4.2.0","tap":"^10.7.0","weallbehave":"^1.2.0","weallcontribute":"^1.0.8"},"config":{"nyc":{"exclude":["node_modules/**","test/**"]}},"gitHead":"2046318b565be06dfb960820a3df2e62a38fc000","bugs":{"url":"https://github.com/npm/npm-logical-tree/issues"},"homepage":"https://github.com/npm/npm-logical-tree#readme","_id":"npm-logical-tree@1.0.0","_npmVersion":"5.4.2-canary.7","_nodeVersion":"8.5.0","_npmUser":{"name":"zkat","email":"kzm@sykosomatic.org"},"dist":{"shasum":"1385b1360fc97caa08ae38dd38a32883f45dd27f","size":3541,"noattachment":false,"key":"/npm-logical-tree/-/npm-logical-tree-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/npm-logical-tree/download/npm-logical-tree-1.0.0.tgz"},"maintainers":[{"name":"zkat","email":"kat@sykosomatic.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/npm-logical-tree-1.0.0.tgz_1507401406796_0.5783647443167865"},"directories":{},"publish_time":1507401406940,"_hasShrinkwrap":false,"_cnpm_publish_time":1507401406940}},"readme":"# npm-logical-tree [![npm version](https://img.shields.io/npm/v/npm-logical-tree.svg)](https://npm.im/npm-logical-tree) [![license](https://img.shields.io/npm/l/npm-logical-tree.svg)](https://npm.im/npm-logical-tree) [![Travis](https://img.shields.io/travis/npm/logical-tree.svg)](https://travis-ci.org/npm/logical-tree) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/npm/logical-tree?svg=true)](https://ci.appveyor.com/project/npm/logical-tree) [![Coverage Status](https://coveralls.io/repos/github/npm/logical-tree/badge.svg?branch=latest)](https://coveralls.io/github/npm/logical-tree?branch=latest)\n\n[`npm-logical-tree`](https://github.com/npm/npm-logical-tree) is a Node.js\nlibrary that takes the contents of a `package.json` and `package-lock.json` (or\n`npm-shrinkwrap.json`) and returns a nested tree data structure representing the\nlogical relationships between the different dependencies.\n\n## Install\n\n`$ npm install npm-logical-tree`\n\n## Table of Contents\n\n* [Example](#example)\n* [Contributing](#contributing)\n* [API](#api)\n  * [`logicalTree`](#logical-tree)\n  * [`logicalTree.node`](#make-node)\n  * [`tree.isRoot`](#is-root)\n  * [`tree.addDep`](#add-dep)\n  * [`tree.delDep`](#del-dep)\n  * [`tree.getDep`](#get-dep)\n  * [`tree.path`](#path)\n  * [`tree.hasCycle`](#has-cycle)\n  * [`tree.forEach`](#for-each)\n  * [`tree.forEachAsync`](#for-each-async)\n\n### Example\n\n```javascript\nconst fs = require('fs')\nconst logicalTree = require('npm-logical-tree')\n\nconst pkg = require('./package.json')\nconst pkgLock = require('./package-lock.json')\n\nlogicalTree(pkg, pkgLock)\n// returns:\nLogicalTree {\n  name: 'npm-logical-tree',\n  version: '1.0.0',\n  address: null,\n  optional: false,\n  dev: false,\n  bundled: false,\n  resolved: undefined,\n  integrity: undefined,\n  requiredBy: Set { },\n  dependencies:\n   Map {\n     'foo' => LogicalTree {\n       name: 'foo',\n       version: '1.2.3',\n       address: 'foo',\n       optional: false,\n       dev: true,\n       bundled: false,\n       resolved: 'https://registry.npmjs.org/foo/-/foo-1.2.3.tgz',\n       integrity: 'sha1-rYUK/p261/SXByi0suR/7Rw4chw=',\n       dependencies: Map { ... },\n       requiredBy: Set { ... },\n     },\n     ...\n  }\n}\n```\n\n### Contributing\n\nThe npm team enthusiastically welcomes contributions and project participation!\nThere's a bunch of things you can do if you want to contribute! The [Contributor\nGuide](CONTRIBUTING.md) has all the information you need for everything from\nreporting bugs to contributing entire new features. Please don't hesitate to\njump in if you'd like to, or even ask us questions if something isn't clear.\n\nAll participants and maintainers in this project are expected to follow [Code of\nConduct](CODE_OF_CONDUCT.md), and just generally be excellent to each other.\n\nPlease refer to the [Changelog](CHANGELOG.md) for project history details, too.\n\nHappy hacking!\n\n### API\n\n#### <a name=\"logical-tree\"></a> `> logicalTree(pkg, lock) -> LogicalTree`\n\nCalculates a logical tree based on a matching `package.json` and\n`package-lock.json` pair. A \"logical tree\" is a fully-nested dependency graph\nfor an npm package, as opposed to a physical tree which might be flattened.\n\n`logical-tree` will represent deduplicated/flattened nodes using the same object\nthroughout the tree, so duplication can be checked by object identity.\n\n##### Example\n\n```javascript\nconst pkg = require('./package.json')\nconst pkgLock = require('./package-lock.json')\n\nlogicalTree(pkg, pkgLock)\n// returns:\nLogicalTree {\n  name: 'npm-logical-tree',\n  version: '1.0.0',\n  address: null,\n  optional: false,\n  dev: false,\n  bundled: false,\n  resolved: undefined,\n  integrity: undefined,\n  requiredBy: Set { },\n  dependencies:\n   Map {\n     'foo' => LogicalTree {\n       name: 'foo',\n       version: '1.2.3',\n       address: 'foo',\n       optional: false,\n       dev: true,\n       bundled: false,\n       resolved: 'https://registry.npmjs.org/foo/-/foo-1.2.3.tgz',\n       integrity: 'sha1-rYUK/p261/SXByi0suR/7Rw4chw=',\n       requiredBy: Set { ... },\n       dependencies: Map { ... }\n     },\n     ...\n  }\n}\n```\n\n#### <a name=\"make-node\"></a> `> logicalTree.node(name, [address, [opts]]) -> LogicalTree`\n\nManually creates a new LogicalTree node.\n\n##### Options\n\n* `opts.version` - version of the node.\n* `opts.optional` - is this node an optionalDep?\n* `opts.dev` - is this node a devDep?\n* `opts.bundled` - is this bundled?\n* `opts.resolved` - resolved address.\n* `opts.integrity` - SRI string.\n\n##### Example\n```javascript\nlogicalTree.node('hello', 'subpath:to:@foo/bar', {dev: true})\n```\n","_attachments":{},"homepage":"https://github.com/npm/logical-tree#readme","bugs":{"url":"https://github.com/npm/logical-tree/issues"},"license":"ISC"}