diff --git a/docs/content/commands/npm-audit.md b/docs/content/commands/npm-audit.md index 0f164ac9d3ec5..9d09a4107fdc7 100644 --- a/docs/content/commands/npm-audit.md +++ b/docs/content/commands/npm-audit.md @@ -399,6 +399,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-ci.md b/docs/content/commands/npm-ci.md index b4ce811869bb2..2bb542a725b5d 100644 --- a/docs/content/commands/npm-ci.md +++ b/docs/content/commands/npm-ci.md @@ -48,8 +48,9 @@ In short, the main differences between using `npm install` and `npm ci` are: NOTE: If you create your `package-lock.json` file by running `npm install` with flags that can affect the shape of your dependency tree, such as -`--legacy-peer-deps`, you _must_ provide the same flags to `npm ci` or you -are likely to encounter errors. An easy way to do this is to run +`--legacy-peer-deps` or `--install-links`, you _must_ provide the same +flags to `npm ci` or you are likely to encounter errors. An easy way to do +this is to run, for example, `npm config set legacy-peer-deps=true --location=project` and commit the `.npmrc` file to your repo. diff --git a/docs/content/commands/npm-dedupe.md b/docs/content/commands/npm-dedupe.md index b9768c25db88d..f816b99433581 100644 --- a/docs/content/commands/npm-dedupe.md +++ b/docs/content/commands/npm-dedupe.md @@ -310,6 +310,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-find-dupes.md b/docs/content/commands/npm-find-dupes.md index 3549be47daae9..a92c57bd7e183 100644 --- a/docs/content/commands/npm-find-dupes.md +++ b/docs/content/commands/npm-find-dupes.md @@ -234,6 +234,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-install-test.md b/docs/content/commands/npm-install-test.md index 8975fc4ce61de..931ff050718e1 100644 --- a/docs/content/commands/npm-install-test.md +++ b/docs/content/commands/npm-install-test.md @@ -319,6 +319,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-install.md b/docs/content/commands/npm-install.md index 7e370319b82ff..5cf3b0326d72f 100644 --- a/docs/content/commands/npm-install.md +++ b/docs/content/commands/npm-install.md @@ -91,12 +91,12 @@ into a tarball (b). *npm will not install the package dependencies* in the directory ``, but it will create a symlink to ``. - > NOTE: If you want to install the content of a directory like a package from the registry instead of creating a link, you would need to use [`npm pack`](/commands/npm-pack) while in the `` directory, and then install the resulting tarball instead of the `` using `npm install ` + > NOTE: If you want to install the content of a directory like a package from the registry instead of creating a link, you would need to use the `--install-links` option. Example: ```bash - npm install ../../other-package + npm install ../../other-package --install-links npm install ./sub-package ``` @@ -709,6 +709,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### Algorithm diff --git a/docs/content/commands/npm-link.md b/docs/content/commands/npm-link.md index fb7e46de04a09..fb2b23921b044 100644 --- a/docs/content/commands/npm-link.md +++ b/docs/content/commands/npm-link.md @@ -387,6 +387,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-ls.md b/docs/content/commands/npm-ls.md index 8d4799777e20f..ded8c0c0d26ef 100644 --- a/docs/content/commands/npm-ls.md +++ b/docs/content/commands/npm-ls.md @@ -285,6 +285,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-prune.md b/docs/content/commands/npm-prune.md index 81dccf889ce4d..28f02f6add190 100644 --- a/docs/content/commands/npm-prune.md +++ b/docs/content/commands/npm-prune.md @@ -191,6 +191,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-rebuild.md b/docs/content/commands/npm-rebuild.md index bddd18c2bcaf4..52c368c8c513b 100644 --- a/docs/content/commands/npm-rebuild.md +++ b/docs/content/commands/npm-rebuild.md @@ -162,6 +162,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-uninstall.md b/docs/content/commands/npm-uninstall.md index 572d9dd8aaa3d..e39c7e328b20a 100644 --- a/docs/content/commands/npm-uninstall.md +++ b/docs/content/commands/npm-uninstall.md @@ -145,6 +145,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/commands/npm-update.md b/docs/content/commands/npm-update.md index be0b0cb937eae..394773214995c 100644 --- a/docs/content/commands/npm-update.md +++ b/docs/content/commands/npm-update.md @@ -437,6 +437,18 @@ This value is not exported to the environment for child processes. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + ### See Also diff --git a/docs/content/using-npm/config.md b/docs/content/using-npm/config.md index 71dab98a3831e..200a2e401c7a6 100644 --- a/docs/content/using-npm/config.md +++ b/docs/content/using-npm/config.md @@ -891,6 +891,18 @@ number, if not already set in package.json. +#### `install-links` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + #### `json` * Default: false diff --git a/lib/arborist-cmd.js b/lib/arborist-cmd.js index 6518e91e0ad9d..5007fbd9244d2 100644 --- a/lib/arborist-cmd.js +++ b/lib/arborist-cmd.js @@ -12,6 +12,7 @@ class ArboristCmd extends BaseCommand { 'workspace', 'workspaces', 'include-workspace-root', + 'install-links', ] static ignoreImplicitWorkspace = false diff --git a/lib/utils/config/definitions.js b/lib/utils/config/definitions.js index 7ff0eeb1283c5..f4ffb821837b0 100644 --- a/lib/utils/config/definitions.js +++ b/lib/utils/config/definitions.js @@ -1070,6 +1070,17 @@ define('init.version', { `, }) +define('install-links', { + default: false, + type: Boolean, + description: ` + When set file: protocol dependencies that exist outside of the project root + will be packed and installed as regular dependencies instead of creating a + symlink. This option has no effect on workspaces. + `, + flatten, +}) + define('json', { default: false, type: Boolean, diff --git a/tap-snapshots/test/lib/commands/config.js.test.cjs b/tap-snapshots/test/lib/commands/config.js.test.cjs index 56ef71f3efd3c..c6f07dd326cb2 100644 --- a/tap-snapshots/test/lib/commands/config.js.test.cjs +++ b/tap-snapshots/test/lib/commands/config.js.test.cjs @@ -81,6 +81,7 @@ exports[`test/lib/commands/config.js TAP config list --json > output matches sna "init.license": "ISC", "init.module": "{HOME}/.npm-init.js", "init.version": "1.0.0", + "install-links": false, "key": null, "legacy-bundling": false, "legacy-peer-deps": false, @@ -234,6 +235,7 @@ init.author.url = "" init.license = "ISC" init.module = "{HOME}/.npm-init.js" init.version = "1.0.0" +install-links = false json = false key = null legacy-bundling = false diff --git a/tap-snapshots/test/lib/commands/ls.js.test.cjs b/tap-snapshots/test/lib/commands/ls.js.test.cjs index e98898aeff417..a10d37ab92881 100644 --- a/tap-snapshots/test/lib/commands/ls.js.test.cjs +++ b/tap-snapshots/test/lib/commands/ls.js.test.cjs @@ -114,23 +114,6 @@ test-npm-ls@1.0.0 ` -exports[`test/lib/commands/ls.js TAP ls --only=development > should output tree containing only development deps 1`] = ` -test-npm-ls@1.0.0 {CWD}/tap-testdir-ls-ls---only-development -\`-- dev-dep@1.0.0 - \`-- foo@1.0.0 - \`-- dog@1.0.0 - -` - -exports[`test/lib/commands/ls.js TAP ls --only=prod > should output tree containing only prod deps 1`] = ` -test-npm-ls@1.0.0 {CWD}/tap-testdir-ls-ls---only-prod -+-- chai@1.0.0 -+-- optional-dep@1.0.0 -\`-- prod-dep@1.0.0 - \`-- dog@2.0.0 - -` - exports[`test/lib/commands/ls.js TAP ls --parseable --depth=0 > should output tree containing only top-level dependencies 1`] = ` {CWD}/tap-testdir-ls-ls---parseable---depth-0 {CWD}/tap-testdir-ls-ls---parseable---depth-0/node_modules/chai @@ -204,21 +187,6 @@ exports[`test/lib/commands/ls.js TAP ls --parseable --long with extraneous deps {CWD}/tap-testdir-ls-ls---parseable---long-with-extraneous-deps/node_modules/dog:dog@1.0.0 ` -exports[`test/lib/commands/ls.js TAP ls --parseable --only=development > should output tree containing only development deps 1`] = ` -{CWD}/tap-testdir-ls-ls---parseable---only-development -{CWD}/tap-testdir-ls-ls---parseable---only-development/node_modules/dev-dep -{CWD}/tap-testdir-ls-ls---parseable---only-development/node_modules/foo -{CWD}/tap-testdir-ls-ls---parseable---only-development/node_modules/dog -` - -exports[`test/lib/commands/ls.js TAP ls --parseable --only=prod > should output tree containing only prod deps 1`] = ` -{CWD}/tap-testdir-ls-ls---parseable---only-prod -{CWD}/tap-testdir-ls-ls---parseable---only-prod/node_modules/chai -{CWD}/tap-testdir-ls-ls---parseable---only-prod/node_modules/optional-dep -{CWD}/tap-testdir-ls-ls---parseable---only-prod/node_modules/prod-dep -{CWD}/tap-testdir-ls-ls---parseable---only-prod/node_modules/prod-dep/node_modules/dog -` - exports[`test/lib/commands/ls.js TAP ls --parseable --production > should output tree containing production deps 1`] = ` {CWD}/tap-testdir-ls-ls---parseable---production {CWD}/tap-testdir-ls-ls---parseable---production/node_modules/chai diff --git a/tap-snapshots/test/lib/load-all-commands.js.test.cjs b/tap-snapshots/test/lib/load-all-commands.js.test.cjs index cd8b0592c36e8..37349cbe01e7d 100644 --- a/tap-snapshots/test/lib/load-all-commands.js.test.cjs +++ b/tap-snapshots/test/lib/load-all-commands.js.test.cjs @@ -51,7 +51,7 @@ Options: [--omit [--omit ...]] [--foreground-scripts] [--ignore-scripts] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] Run "npm help audit" for more info ` @@ -164,7 +164,7 @@ Options: [--omit [--omit ...]] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] alias: ddp @@ -314,7 +314,7 @@ Options: [--omit [--omit ...]] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] Run "npm help find-dupes" for more info ` @@ -423,7 +423,7 @@ Options: [--strict-peer-deps] [--no-package-lock] [--foreground-scripts] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall @@ -467,7 +467,7 @@ Options: [--strict-peer-deps] [--no-package-lock] [--foreground-scripts] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] alias: it @@ -488,7 +488,7 @@ Options: [--omit [--omit ...]] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] alias: ln @@ -506,7 +506,7 @@ Options: [--omit [--omit ...]] [--link] [--package-lock-only] [--unicode] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] alias: la @@ -550,7 +550,7 @@ Options: [--omit [--omit ...]] [--link] [--package-lock-only] [--unicode] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] alias: list @@ -683,7 +683,7 @@ Options: [--omit [--omit ...]] [--dry-run] [--json] [--foreground-scripts] [--ignore-scripts] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] Run "npm help prune" for more info ` @@ -711,7 +711,7 @@ npm rebuild [[<@scope>/][@] ...] Options: [-g|--global] [--no-bin-links] [--foreground-scripts] [--ignore-scripts] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] alias: rb @@ -921,7 +921,7 @@ npm uninstall [<@scope>/]... Options: [-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] aliases: unlink, remove, rm, r, un @@ -967,7 +967,7 @@ Options: [--strict-peer-deps] [--no-package-lock] [--foreground-scripts] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] -[-ws|--workspaces] [--include-workspace-root] +[-ws|--workspaces] [--include-workspace-root] [--install-links] aliases: up, upgrade, udpate diff --git a/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs b/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs index 91f0d782878a3..b190d7eb10ba6 100644 --- a/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs +++ b/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs @@ -76,6 +76,7 @@ Array [ "init.license", "init.module", "init.version", + "install-links", "json", "key", "legacy-bundling", @@ -973,6 +974,17 @@ exports[`test/lib/utils/config/definitions.js TAP > config description for init. Alias for \`--init-version\` ` +exports[`test/lib/utils/config/definitions.js TAP > config description for install-links 1`] = ` +#### \`install-links\` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. +` + exports[`test/lib/utils/config/definitions.js TAP > config description for json 1`] = ` #### \`json\` diff --git a/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs b/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs index 7b13c34daf682..a97b35d3acfe2 100644 --- a/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs +++ b/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs @@ -765,6 +765,18 @@ number, if not already set in package.json. +#### \`install-links\` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + + + + #### \`json\` * Default: false diff --git a/tap-snapshots/test/lib/utils/npm-usage.js.test.cjs b/tap-snapshots/test/lib/utils/npm-usage.js.test.cjs index fef4cc65edc65..eb71ced8d73b5 100644 --- a/tap-snapshots/test/lib/utils/npm-usage.js.test.cjs +++ b/tap-snapshots/test/lib/utils/npm-usage.js.test.cjs @@ -206,7 +206,7 @@ All commands: [--omit [--omit ...]] [--foreground-scripts] [--ignore-scripts] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] Run "npm help audit" for more info @@ -296,7 +296,7 @@ All commands: [--omit [--omit ...]] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] alias: ddp @@ -426,7 +426,7 @@ All commands: [--omit [--omit ...]] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] Run "npm help find-dupes" for more info @@ -511,7 +511,7 @@ All commands: [--strict-peer-deps] [--no-package-lock] [--foreground-scripts] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall @@ -551,7 +551,7 @@ All commands: [--strict-peer-deps] [--no-package-lock] [--foreground-scripts] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] alias: it @@ -570,7 +570,7 @@ All commands: [--omit [--omit ...]] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] alias: ln @@ -586,7 +586,7 @@ All commands: [--omit [--omit ...]] [--link] [--package-lock-only] [--unicode] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] alias: la @@ -624,7 +624,7 @@ All commands: [--omit [--omit ...]] [--link] [--package-lock-only] [--unicode] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] alias: list @@ -739,7 +739,7 @@ All commands: [--omit [--omit ...]] [--dry-run] [--json] [--foreground-scripts] [--ignore-scripts] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] Run "npm help prune" for more info @@ -763,7 +763,7 @@ All commands: Options: [-g|--global] [--no-bin-links] [--foreground-scripts] [--ignore-scripts] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] alias: rb @@ -941,7 +941,7 @@ All commands: Options: [-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] aliases: unlink, remove, rm, r, un @@ -981,7 +981,7 @@ All commands: [--strict-peer-deps] [--no-package-lock] [--foreground-scripts] [--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] [-w|--workspace [-w|--workspace ...]] - [-ws|--workspaces] [--include-workspace-root] + [-ws|--workspaces] [--include-workspace-root] [--install-links] aliases: up, upgrade, udpate diff --git a/workspaces/arborist/lib/arborist/build-ideal-tree.js b/workspaces/arborist/lib/arborist/build-ideal-tree.js index f3166c37e1475..55eb8292335d0 100644 --- a/workspaces/arborist/lib/arborist/build-ideal-tree.js +++ b/workspaces/arborist/lib/arborist/build-ideal-tree.js @@ -124,6 +124,7 @@ module.exports = cls => class IdealTreeBuilder extends cls { globalStyle = false, idealTree = null, includeWorkspaceRoot = false, + installLinks = false, legacyPeerDeps = false, packageLock = true, strictPeerDeps = false, @@ -135,6 +136,7 @@ module.exports = cls => class IdealTreeBuilder extends cls { this[_strictPeerDeps] = !!strictPeerDeps this.idealTree = idealTree + this.installLinks = installLinks this.legacyPeerDeps = legacyPeerDeps this[_usePackageLock] = packageLock @@ -410,6 +412,7 @@ Try using the package name instead, e.g: peer: false, optional: false, global: this[_global], + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, loadOverrides: true, }) @@ -424,6 +427,7 @@ Try using the package name instead, e.g: peer: false, optional: false, global: this[_global], + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, root, }) @@ -992,6 +996,7 @@ This is a one-time fix-up, please be patient... preferDedupe: this[_preferDedupe], legacyBundling: this[_legacyBundling], strictPeerDeps: this[_strictPeerDeps], + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, globalStyle: this[_globalStyle], })) @@ -1151,6 +1156,7 @@ This is a one-time fix-up, please be patient... const vr = new Node({ path: node.realpath, sourceReference: node, + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, overrides: node.overrides, }) @@ -1268,17 +1274,18 @@ This is a one-time fix-up, please be patient... // the object so it doesn't get mutated. // Don't bother to load the manifest for link deps, because the target // might be within another package that doesn't exist yet. - const { legacyPeerDeps } = this + const { installLinks, legacyPeerDeps } = this + const isWorkspace = this.idealTree.workspaces && this.idealTree.workspaces.has(spec.name) - // spec is a directory, link it - if (spec.type === 'directory') { + // spec is a directory, link it unless installLinks is set or it's a workspace + if (spec.type === 'directory' && (isWorkspace || !installLinks)) { return this[_linkFromSpec](name, spec, parent, edge) } // if the spec matches a workspace name, then see if the workspace node will // satisfy the edge. if it does, we return the workspace node to make sure it // takes priority. - if (this.idealTree.workspaces && this.idealTree.workspaces.has(spec.name)) { + if (isWorkspace) { const existingNode = this.idealTree.edgesOut.get(spec.name).to if (existingNode && existingNode.isWorkspace && existingNode.satisfies(edge)) { return edge.to @@ -1288,7 +1295,7 @@ This is a one-time fix-up, please be patient... // spec isn't a directory, and either isn't a workspace or the workspace we have // doesn't satisfy the edge. try to fetch a manifest and build a node from that. return this[_fetchManifest](spec) - .then(pkg => new Node({ name, pkg, parent, legacyPeerDeps }), error => { + .then(pkg => new Node({ name, pkg, parent, installLinks, legacyPeerDeps }), error => { error.requiredBy = edge.from.location || '.' // failed to load the spec, either because of enotarget or @@ -1298,6 +1305,7 @@ This is a one-time fix-up, please be patient... name, parent, error, + installLinks, legacyPeerDeps, }) this[_loadFailures].add(n) @@ -1307,9 +1315,9 @@ This is a one-time fix-up, please be patient... [_linkFromSpec] (name, spec, parent, edge) { const realpath = spec.fetchSpec - const { legacyPeerDeps } = this + const { installLinks, legacyPeerDeps } = this return rpj(realpath + '/package.json').catch(() => ({})).then(pkg => { - const link = new Link({ name, parent, realpath, pkg, legacyPeerDeps }) + const link = new Link({ name, parent, realpath, pkg, installLinks, legacyPeerDeps }) this[_linkNodes].add(link) return link }) diff --git a/workspaces/arborist/lib/arborist/load-actual.js b/workspaces/arborist/lib/arborist/load-actual.js index b04fc88f65ccb..70b898141cc54 100644 --- a/workspaces/arborist/lib/arborist/load-actual.js +++ b/workspaces/arborist/lib/arborist/load-actual.js @@ -283,6 +283,7 @@ module.exports = cls => class ActualLoader extends cls { .then(pkg => [pkg, null], error => [null, error]) .then(([pkg, error]) => { return this[normalize(path) === real ? _newNode : _newLink]({ + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, path, realpath: real, diff --git a/workspaces/arborist/lib/arborist/load-virtual.js b/workspaces/arborist/lib/arborist/load-virtual.js index 8a41e7686e7e1..097e5fb84298e 100644 --- a/workspaces/arborist/lib/arborist/load-virtual.js +++ b/workspaces/arborist/lib/arborist/load-virtual.js @@ -278,6 +278,7 @@ module.exports = cls => class VirtualLoader extends cls { const peer = sw.peer const node = new Node({ + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, root: this.virtualTree, path, @@ -304,6 +305,7 @@ module.exports = cls => class VirtualLoader extends cls { [loadLink] (location, targetLoc, target, meta) { const path = resolve(this.path, location) const link = new Link({ + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, path, realpath: resolve(this.path, targetLoc), diff --git a/workspaces/arborist/lib/dep-valid.js b/workspaces/arborist/lib/dep-valid.js index 2c837ae888448..c69ab557ae491 100644 --- a/workspaces/arborist/lib/dep-valid.js +++ b/workspaces/arborist/lib/dep-valid.js @@ -53,9 +53,7 @@ const depValid = (child, requested, requestor) => { return semver.satisfies(child.version, requested.fetchSpec, true) case 'directory': - // directory must be a link to the specified folder - return !!child.isLink && - relative(child.realpath, requested.fetchSpec) === '' + return linkValid(child, requested, requestor) case 'file': return tarballValid(child, requested, requestor) @@ -108,6 +106,18 @@ const depValid = (child, requested, requestor) => { return false } +const linkValid = (child, requested, requestor) => { + const isLink = !!child.isLink + // if we're installing links and the node is a link, then it's invalid because we want + // a real node to be there + if (requestor.installLinks) { + return !isLink + } + + // directory must be a link to the specified folder + return isLink && relative(child.realpath, requested.fetchSpec) === '' +} + const tarballValid = (child, requested, requestor) => { if (child.isLink) { return false diff --git a/workspaces/arborist/lib/node.js b/workspaces/arborist/lib/node.js index c79bc0bd3a00b..60301798b918d 100644 --- a/workspaces/arborist/lib/node.js +++ b/workspaces/arborist/lib/node.js @@ -86,6 +86,7 @@ class Node { name, children, fsChildren, + installLinks = false, legacyPeerDeps = false, linksIn, hasShrinkwrap, @@ -152,6 +153,7 @@ class Node { } this.integrity = integrity || pkg._integrity || null this.hasShrinkwrap = hasShrinkwrap || pkg._hasShrinkwrap || false + this.installLinks = installLinks this.legacyPeerDeps = legacyPeerDeps this.children = new CaseInsensitiveMap() @@ -1149,6 +1151,9 @@ class Node { for (const kid of node.children.values()) { kid.parent = this } + if (node.isLink && node.target) { + node.target.root = null + } } if (!node.isRoot) { diff --git a/workspaces/arborist/lib/place-dep.js b/workspaces/arborist/lib/place-dep.js index c0cbe91fe3667..9d84d3f1b08a5 100644 --- a/workspaces/arborist/lib/place-dep.js +++ b/workspaces/arborist/lib/place-dep.js @@ -45,6 +45,7 @@ class PlaceDep { auditReport, legacyBundling, strictPeerDeps, + installLinks, legacyPeerDeps, globalStyle, } = parent || options @@ -56,6 +57,7 @@ class PlaceDep { auditReport, legacyBundling, strictPeerDeps, + installLinks, legacyPeerDeps, globalStyle, }) @@ -293,6 +295,7 @@ class PlaceDep { pkg: dep.package, resolved: dep.resolved, integrity: dep.integrity, + installLinks: this.installLinks, legacyPeerDeps: this.legacyPeerDeps, error: dep.errors[0], ...(dep.overrides ? { overrides: dep.overrides } : {}), diff --git a/workspaces/arborist/tap-snapshots/test/arborist/reify.js.test.cjs b/workspaces/arborist/tap-snapshots/test/arborist/reify.js.test.cjs index 49b02273ec59f..32b02494f7cf2 100644 --- a/workspaces/arborist/tap-snapshots/test/arborist/reify.js.test.cjs +++ b/workspaces/arborist/tap-snapshots/test/arborist/reify.js.test.cjs @@ -2228,19 +2228,6 @@ ArboristNode { "type": "prod", }, }, - "fsChildren": Set { - ArboristNode { - "dev": true, - "extraneous": true, - "location": "target", - "name": "target", - "optional": true, - "packageName": "ABBREV", - "path": "{CWD}/test/arborist/tap-testdir-reify-collide-case-variant-dep-names/target", - "peer": true, - "version": "1.0.0", - }, - }, "isProjectRoot": true, "location": "", "name": "tap-testdir-reify-collide-case-variant-dep-names", @@ -2275,19 +2262,6 @@ ArboristNode { "type": "prod", }, }, - "fsChildren": Set { - ArboristNode { - "dev": true, - "extraneous": true, - "location": "target", - "name": "target", - "optional": true, - "packageName": "ABBREV", - "path": "{CWD}/test/arborist/tap-testdir-reify-collide-case-variant-dep-names/target", - "peer": true, - "version": "1.0.0", - }, - }, "isProjectRoot": true, "location": "", "name": "tap-testdir-reify-collide-case-variant-dep-names", diff --git a/workspaces/arborist/tap-snapshots/test/link.js.test.cjs b/workspaces/arborist/tap-snapshots/test/link.js.test.cjs index a1b4d8753ff97..71d4414c33c56 100644 --- a/workspaces/arborist/tap-snapshots/test/link.js.test.cjs +++ b/workspaces/arborist/tap-snapshots/test/link.js.test.cjs @@ -16,6 +16,7 @@ Link { "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -42,6 +43,7 @@ exports[`test/link.js TAP > instantiate without providing target 1`] = ` "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "../../../../../some/other/path" => <*ref_1>, @@ -56,6 +58,7 @@ exports[`test/link.js TAP > instantiate without providing target 1`] = ` "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -94,6 +97,7 @@ exports[`test/link.js TAP > instantiate without providing target 1`] = ` "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, diff --git a/workspaces/arborist/tap-snapshots/test/node.js.test.cjs b/workspaces/arborist/tap-snapshots/test/node.js.test.cjs index cc83ba8656ca7..08705aca6f8eb 100644 --- a/workspaces/arborist/tap-snapshots/test/node.js.test.cjs +++ b/workspaces/arborist/tap-snapshots/test/node.js.test.cjs @@ -17,6 +17,7 @@ exports[`test/node.js TAP basic instantiation > just a lone root node 1`] = ` "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -204,6 +205,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -227,6 +229,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -267,6 +270,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -285,6 +289,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -320,6 +325,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -334,6 +340,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -360,6 +367,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -377,6 +385,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -401,6 +410,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -419,6 +429,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -453,6 +464,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -477,6 +489,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -491,6 +504,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -538,6 +552,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -556,6 +571,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -591,6 +607,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -605,6 +622,7 @@ exports[`test/node.js TAP set workspaces > should setup edges out for each works "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -650,6 +668,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -684,6 +703,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -733,6 +753,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -749,6 +770,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -785,6 +807,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -814,6 +837,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -843,6 +867,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -872,6 +897,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -897,6 +923,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -930,6 +957,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -944,6 +972,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1000,6 +1029,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -1017,6 +1047,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1051,6 +1082,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1100,6 +1132,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1116,6 +1149,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1145,6 +1179,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1181,6 +1216,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1210,6 +1246,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1239,6 +1276,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1268,6 +1306,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1293,6 +1332,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1326,6 +1366,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1340,6 +1381,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1376,6 +1418,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1410,6 +1453,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1434,6 +1478,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1474,6 +1519,7 @@ exports[`test/node.js TAP testing with dep tree with meta > add new meta under p "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1519,6 +1565,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1568,6 +1615,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1584,6 +1632,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1620,6 +1669,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1649,6 +1699,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1678,6 +1729,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1707,6 +1759,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1732,6 +1785,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1778,6 +1832,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -1805,6 +1860,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1854,6 +1910,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1870,6 +1927,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1899,6 +1957,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1935,6 +1994,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -1971,6 +2031,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2000,6 +2061,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2029,6 +2091,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2058,6 +2121,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2083,6 +2147,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2124,6 +2189,7 @@ exports[`test/node.js TAP testing with dep tree with meta > initial load with so "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2181,6 +2247,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2197,6 +2264,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2233,6 +2301,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2262,6 +2331,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2291,6 +2361,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2320,6 +2391,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2345,6 +2417,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2384,6 +2457,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2430,6 +2504,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -2469,6 +2544,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2485,6 +2561,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2514,6 +2591,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2550,6 +2628,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2579,6 +2658,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2608,6 +2688,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2637,6 +2718,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2662,6 +2744,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2701,6 +2784,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2742,6 +2826,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move meta to top lev "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2799,6 +2884,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2815,6 +2901,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2848,6 +2935,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2877,6 +2965,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2906,6 +2995,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2935,6 +3025,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2960,6 +3051,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -2986,6 +3078,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3023,6 +3116,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3037,6 +3131,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3093,6 +3188,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -3132,6 +3228,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3148,6 +3245,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3177,6 +3275,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3210,6 +3309,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3239,6 +3339,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3268,6 +3369,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3297,6 +3399,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3322,6 +3425,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3346,6 +3450,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3371,6 +3476,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3408,6 +3514,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3422,6 +3529,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3473,6 +3581,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3530,6 +3639,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3546,6 +3656,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3579,6 +3690,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3608,6 +3720,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3637,6 +3750,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3666,6 +3780,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3691,6 +3806,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3717,6 +3833,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3754,6 +3871,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3768,6 +3886,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3824,6 +3943,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -3863,6 +3983,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3879,6 +4000,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3908,6 +4030,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3941,6 +4064,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3970,6 +4094,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -3999,6 +4124,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4028,6 +4154,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4053,6 +4180,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4077,6 +4205,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4102,6 +4231,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4139,6 +4269,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4153,6 +4284,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4204,6 +4336,7 @@ exports[`test/node.js TAP testing with dep tree with meta > move new meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4239,6 +4372,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4273,6 +4407,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4322,6 +4457,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4338,6 +4474,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4374,6 +4511,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4403,6 +4541,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4432,6 +4571,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4461,6 +4601,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4486,6 +4627,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4519,6 +4661,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4533,6 +4676,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4589,6 +4733,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -4606,6 +4751,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4640,6 +4786,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4689,6 +4836,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4705,6 +4853,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4734,6 +4883,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4770,6 +4920,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4799,6 +4950,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4828,6 +4980,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4857,6 +5010,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4882,6 +5036,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4915,6 +5070,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4929,6 +5085,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4965,6 +5122,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -4999,6 +5157,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5023,6 +5182,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5063,6 +5223,7 @@ exports[`test/node.js TAP testing with dep tree without meta > add new meta unde "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5108,6 +5269,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5157,6 +5319,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5173,6 +5336,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5209,6 +5373,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5238,6 +5403,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5267,6 +5433,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5296,6 +5463,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5321,6 +5489,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5367,6 +5536,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -5394,6 +5564,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5443,6 +5614,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5459,6 +5631,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5488,6 +5661,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5524,6 +5698,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5560,6 +5735,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5589,6 +5765,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5618,6 +5795,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5647,6 +5825,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5672,6 +5851,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5713,6 +5893,7 @@ exports[`test/node.js TAP testing with dep tree without meta > initial load with "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5770,6 +5951,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5786,6 +5968,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5822,6 +6005,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5851,6 +6035,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5880,6 +6065,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5909,6 +6095,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5934,6 +6121,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -5973,6 +6161,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6019,6 +6208,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -6058,6 +6248,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6074,6 +6265,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6103,6 +6295,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6139,6 +6332,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6168,6 +6362,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6197,6 +6392,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6226,6 +6422,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6251,6 +6448,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6290,6 +6488,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "meta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6331,6 +6530,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move meta to top "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6388,6 +6588,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6404,6 +6605,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6437,6 +6639,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6466,6 +6669,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6495,6 +6699,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6524,6 +6729,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6549,6 +6755,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6575,6 +6782,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6612,6 +6820,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6626,6 +6835,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6682,6 +6892,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -6721,6 +6932,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6737,6 +6949,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6766,6 +6979,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6799,6 +7013,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6828,6 +7043,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6857,6 +7073,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6886,6 +7103,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6911,6 +7129,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6935,6 +7154,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6960,6 +7180,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -6997,6 +7218,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7011,6 +7233,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7062,6 +7285,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7119,6 +7343,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7135,6 +7360,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7168,6 +7394,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7197,6 +7424,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7226,6 +7454,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7255,6 +7484,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7280,6 +7510,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7306,6 +7537,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7343,6 +7575,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7357,6 +7590,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7413,6 +7647,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory { "" => <*ref_1>, @@ -7452,6 +7687,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7468,6 +7704,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to }, }, "hasShrinkwrap": false, + "installLinks": false, "integrity": "prod", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7497,6 +7734,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7530,6 +7768,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "bundled", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7559,6 +7798,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "dev", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7588,6 +7828,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "opt", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7617,6 +7858,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "peer", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7642,6 +7884,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "extraneous", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7666,6 +7909,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7691,6 +7935,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7728,6 +7973,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "newMeta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7742,6 +7988,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": "metameta", "inventory": Inventory {}, "legacyPeerDeps": false, @@ -7793,6 +8040,7 @@ exports[`test/node.js TAP testing with dep tree without meta > move new meta to "extraneous": true, "fsChildren": Set {}, "hasShrinkwrap": false, + "installLinks": false, "integrity": null, "inventory": Inventory {}, "legacyPeerDeps": false, diff --git a/workspaces/arborist/test/arborist/reify.js b/workspaces/arborist/test/arborist/reify.js index 9124b4630ca88..5097004041174 100644 --- a/workspaces/arborist/test/arborist/reify.js +++ b/workspaces/arborist/test/arborist/reify.js @@ -2652,3 +2652,216 @@ t.test('save package.json on update', t => { }) t.end() }) + +t.test('installLinks', (t) => { + t.test('when true, packs and extracts instead of symlinks', async (t) => { + const path = t.testdir({ + a: { + 'package.json': JSON.stringify({ + name: 'a', + version: '1.0.0', + main: 'index.js', + dependencies: { + b: 'file:../b', + }, + }), + 'index.js': '', + }, + b: { + 'package.json': JSON.stringify({ + name: 'b', + version: '1.0.0', + main: 'index.js', + }), + 'index.js': '', + }, + }) + + await reify(resolve(path, 'a'), { installLinks: true }) + + const installedB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(installedB.isDirectory(), 'a/node_modules/b is a directory') + }) + + t.test('when false, symlinks', async (t) => { + const path = t.testdir({ + a: { + 'package.json': JSON.stringify({ + name: 'a', + version: '1.0.0', + main: 'index.js', + dependencies: { + b: 'file:../b', + }, + }), + 'index.js': '', + }, + b: { + 'package.json': JSON.stringify({ + name: 'b', + version: '1.0.0', + main: 'index.js', + }), + 'index.js': '', + }, + }) + + await reify(resolve(path, 'a'), { installLinks: false }) + + const installedB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(installedB.isSymbolicLink(), 'a/node_modules/b is a symlink') + }) + + t.test('when symlinks exist, installLinks set to true replaces them with dirs', async (t) => { + const path = t.testdir({ + a: { + 'package.json': JSON.stringify({ + name: 'a', + version: '1.0.0', + main: 'index.js', + dependencies: { + b: 'file:../b', + }, + }), + 'index.js': '', + }, + b: { + 'package.json': JSON.stringify({ + name: 'b', + version: '1.0.0', + main: 'index.js', + }), + 'index.js': '', + }, + }) + + await reify(resolve(path, 'a'), { installLinks: false, save: true }) + + const firstB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(firstB.isSymbolicLink(), 'a/node_modules/b is a symlink') + + await reify(resolve(path, 'a'), { installLinks: true, save: true }) + + const secondB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(secondB.isDirectory(), 'a/node_modules/b is now a directory') + }) + + t.test('when directories exist, installLinks set to false replaces them with symlinks', async (t) => { + const path = t.testdir({ + a: { + 'package.json': JSON.stringify({ + name: 'a', + version: '1.0.0', + main: 'index.js', + dependencies: { + b: 'file:../b', + }, + }), + 'index.js': '', + }, + b: { + 'package.json': JSON.stringify({ + name: 'b', + version: '1.0.0', + main: 'index.js', + }), + 'index.js': '', + }, + }) + + await reify(resolve(path, 'a'), { installLinks: true }) + + const firstB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(firstB.isDirectory(), 'a/node_modules/b is a directory') + + await reify(resolve(path, 'a'), { installLinks: false }) + + const secondB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(secondB.isSymbolicLink(), 'a/node_modules/b is now a symlink') + }) + + t.test('when installLinks is true, dependencies of links are installed', async (t) => { + const path = t.testdir({ + a: { + 'package.json': JSON.stringify({ + name: 'a', + version: '1.0.0', + main: 'index.js', + dependencies: { + b: 'file:../b', + }, + }), + 'index.js': '', + }, + b: { + 'package.json': JSON.stringify({ + name: 'b', + version: '1.0.0', + main: 'index.js', + dependencies: { + abbrev: '^1.0.0', + }, + }), + 'index.js': '', + }, + }) + + await reify(resolve(path, 'a'), { installLinks: true }) + + const installedB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(installedB.isDirectory(), 'a/node_modules/b is a directory') + + const abbrev = fs.lstatSync(resolve(path, 'a/node_modules/abbrev')) + t.ok(abbrev.isDirectory(), 'abbrev got installed') + }) + + t.test('workspaces are always symlinks, even with installLinks set to true', async (t) => { + const path = t.testdir({ + a: { + 'package.json': JSON.stringify({ + name: 'a', + version: '1.0.0', + main: 'index.js', + dependencies: { + b: 'file:../b', + c: '^1.0.0', + }, + workspaces: ['./c'], + }), + 'index.js': '', + c: { + 'package.json': JSON.stringify({ + name: 'c', + version: '1.0.0', + main: 'index.js', + }), + 'index.js': '', + }, + }, + b: { + 'package.json': JSON.stringify({ + name: 'b', + version: '1.0.0', + main: 'index.js', + dependencies: { + abbrev: '^1.0.0', + }, + }), + 'index.js': '', + }, + }) + + await reify(resolve(path, 'a'), { installLinks: true }) + + const installedB = fs.lstatSync(resolve(path, 'a/node_modules/b')) + t.ok(installedB.isDirectory(), 'a/node_modules/b is a directory') + + const installedC = fs.lstatSync(resolve(path, 'a/node_modules/c')) + t.ok(installedC.isSymbolicLink(), 'a/node_modules/c is a symlink') + + const abbrev = fs.lstatSync(resolve(path, 'a/node_modules/abbrev')) + t.ok(abbrev.isDirectory(), 'abbrev got installed') + }) + + t.end() +}) diff --git a/workspaces/arborist/test/dep-valid.js b/workspaces/arborist/test/dep-valid.js index 3294ea4e88acf..901325b2390b9 100644 --- a/workspaces/arborist/test/dep-valid.js +++ b/workspaces/arborist/test/dep-valid.js @@ -176,3 +176,11 @@ t.test('invalid request all together', t => { }, 'parent got an error for their invalid request') t.end() }) + +t.test('installLinks makes Link nodes invalid', t => { + const requestor = { errors: [], installLinks: true } + const child = { isLink: true, name: 'kid' } + const request = { type: 'directory' } + t.notOk(depValid(child, request, null, requestor)) + t.end() +}) diff --git a/workspaces/arborist/test/node.js b/workspaces/arborist/test/node.js index 80bc21559569b..73e0818938f27 100644 --- a/workspaces/arborist/test/node.js +++ b/workspaces/arborist/test/node.js @@ -328,6 +328,16 @@ t.test('testing with dep tree', t => { t.equal(prodLink.children.size, 0, 'links do not have child nodes') t.equal(prodLink.target.children.size, kidCount, 'link target has children') + t.equal(newProd.canReplace(prodLink), true, 'node can replace link') + const { target } = prodLink + newProd.replace(prodLink) + t.equal(prodLink.parent, null, 'prodLink removed from tree') + t.equal(prodLink.target, null, 'prodLink lost its target') + t.equal(prodLink.root, prodLink, 'prodLink removed from tree') + t.equal(target.root, target, 'prodLinks old target removed from tree') + t.equal(normalizePath(newProd.path), normalizePath(prodLink.path), 'replaced node') + t.equal(prodLink.children.size, 0, 'prodLink has no child nodes') + t.end() })