@pnpm/core 0.0.0-20230605-20230605142810

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +107 -0
  3. package/lib/api.d.ts +4 -0
  4. package/lib/api.js +23 -0
  5. package/lib/api.js.map +1 -0
  6. package/lib/fs/gracefulify.d.ts +0 -0
  7. package/lib/fs/gracefulify.js +2 -0
  8. package/lib/fs/gracefulify.js.map +1 -0
  9. package/lib/getPeerDependencyIssues.d.ts +5 -0
  10. package/lib/getPeerDependencyIssues.js +65 -0
  11. package/lib/getPeerDependencyIssues.js.map +1 -0
  12. package/lib/index.d.ts +7 -0
  13. package/lib/index.js +22 -0
  14. package/lib/index.js.map +1 -0
  15. package/lib/install/allProjectsAreUpToDate.d.ts +12 -0
  16. package/lib/install/allProjectsAreUpToDate.js +106 -0
  17. package/lib/install/allProjectsAreUpToDate.js.map +1 -0
  18. package/lib/install/extendInstallOptions.d.ts +116 -0
  19. package/lib/install/extendInstallOptions.js +134 -0
  20. package/lib/install/extendInstallOptions.js.map +1 -0
  21. package/lib/install/getPreferredVersions.d.ts +5 -0
  22. package/lib/install/getPreferredVersions.js +62 -0
  23. package/lib/install/getPreferredVersions.js.map +1 -0
  24. package/lib/install/getPreferredVersions.test.d.ts +1 -0
  25. package/lib/install/getPreferredVersions.test.js +30 -0
  26. package/lib/install/getPreferredVersions.test.js.map +1 -0
  27. package/lib/install/hooks.d.ts +16 -0
  28. package/lib/install/hooks.js +3 -0
  29. package/lib/install/hooks.js.map +1 -0
  30. package/lib/install/index.d.ts +92 -0
  31. package/lib/install/index.js +1092 -0
  32. package/lib/install/index.js.map +1 -0
  33. package/lib/install/link.d.ts +43 -0
  34. package/lib/install/link.js +359 -0
  35. package/lib/install/link.js.map +1 -0
  36. package/lib/install/reportPeerDependencyIssues.d.ts +10 -0
  37. package/lib/install/reportPeerDependencyIssues.js +29 -0
  38. package/lib/install/reportPeerDependencyIssues.js.map +1 -0
  39. package/lib/link/index.d.ts +11 -0
  40. package/lib/link/index.js +145 -0
  41. package/lib/link/index.js.map +1 -0
  42. package/lib/link/options.d.ts +31 -0
  43. package/lib/link/options.js +39 -0
  44. package/lib/link/options.js.map +1 -0
  45. package/lib/parseWantedDependencies.d.ts +14 -0
  46. package/lib/parseWantedDependencies.js +60 -0
  47. package/lib/parseWantedDependencies.js.map +1 -0
  48. package/lib/pnpmPkgJson.d.ts +3 -0
  49. package/lib/pnpmPkgJson.js +19 -0
  50. package/lib/pnpmPkgJson.js.map +1 -0
  51. package/lib/types.d.ts +2 -0
  52. package/lib/types.js +3 -0
  53. package/lib/types.js.map +1 -0
  54. package/lib/uninstall/removeDeps.d.ts +5 -0
  55. package/lib/uninstall/removeDeps.js +40 -0
  56. package/lib/uninstall/removeDeps.js.map +1 -0
  57. package/package.json +156 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015-2016 Rico Sta. Cruz and other contributors
4
+ Copyright (c) 2016-2023 Zoltan Kochan and other contributors
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # @pnpm/core
2
+
3
+ > Fast, disk space efficient installation engine. Used by [pnpm](https://github.com/pnpm/pnpm)
4
+
5
+ ## Install
6
+
7
+ Install it via npm.
8
+
9
+ ```
10
+ pnpm add @pnpm/core
11
+ ```
12
+
13
+ It also depends on `@pnpm/logger` version `1`, so install it as well via:
14
+
15
+ ```
16
+ pnpm add @pnpm/logger@1
17
+ ```
18
+
19
+ ## API
20
+
21
+ ### `mutateModules(importers, options)`
22
+
23
+ TODO
24
+
25
+ ### `link(linkFromPkgs, linkToModules, [options])`
26
+
27
+ Create symbolic links from the linked packages to the target package's `node_modules` (and its `node_modules/.bin`).
28
+
29
+ **Arguments:**
30
+
31
+ * `linkFromPkgs` - *String[]* - paths to the packages that should be linked.
32
+ * `linkToModules` - *String* - path to the dependent package's `node_modules` directory.
33
+ * `options.reporter` - *Function* - A function that listens for logs.
34
+
35
+ ### `linkToGlobal(linkFrom, options)`
36
+
37
+ Create a symbolic link from the specified package to the global `node_modules`.
38
+
39
+ **Arguments:**
40
+
41
+ * `linkFrom` - *String* - path to the package that should be linked.
42
+ * `globalDir` - *String* - path to the global directory.
43
+ * `options.reporter` - *Function* - A function that listens for logs.
44
+
45
+ ### `linkFromGlobal(pkgNames, linkTo, options)`
46
+
47
+ Create symbolic links from the global `pkgName`s to the `linkTo/node_modules` folder.
48
+
49
+ **Arguments:**
50
+
51
+ * `pkgNames` - *String[]* - packages to link.
52
+ * `linkTo` - *String* - package to link to.
53
+ * `globalDir` - *String* - path to the global directory.
54
+ * `options.reporter` - *Function* - A function that listens for logs.
55
+
56
+ ### `storeStatus([options])`
57
+
58
+ Return the list of modified dependencies.
59
+
60
+ **Arguments:**
61
+
62
+ * `options.reporter` - *Function* - A function that listens for logs.
63
+
64
+ **Returns:** `Promise<string[]>` - the paths to the modified packages of the current project. The paths contain the location of packages in the store,
65
+ not in the projects `node_modules` folder.
66
+
67
+ ### `storePrune([options])`
68
+
69
+ Remove unreferenced packages from the store.
70
+
71
+ ## Hooks
72
+
73
+ Hooks are functions that can step into the installation process.
74
+
75
+ ### `readPackage(pkg: Manifest): Manifest | Promise<Manifest>`
76
+
77
+ This hook is called with every dependency's manifest information.
78
+ The modified manifest returned by this hook is then used by `@pnpm/core` during installation.
79
+ An async function is supported.
80
+
81
+ **Example:**
82
+
83
+ ```js
84
+ const { installPkgs } = require('@pnpm/core')
85
+
86
+ installPkgs({
87
+ hooks: {readPackage}
88
+ })
89
+
90
+ function readPackage (pkg) {
91
+ if (pkg.name === 'foo') {
92
+ pkg.dependencies = {
93
+ bar: '^2.0.0',
94
+ }
95
+ }
96
+ return pkg
97
+ }
98
+ ```
99
+
100
+ ### `afterAllResolved(lockfile: Lockfile): Lockfile | Promise<Lockfile>`
101
+
102
+ This hook is called after all dependencies are resolved. It receives and returns the resolved lockfile object.
103
+ An async function is supported.
104
+
105
+ ## License
106
+
107
+ [MIT](LICENSE)
package/lib/api.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './install';
2
+ export { PeerDependencyIssuesError } from './install/reportPeerDependencyIssues';
3
+ export * from './link';
4
+ export * from './getPeerDependencyIssues';
package/lib/api.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.PeerDependencyIssuesError = void 0;
18
+ __exportStar(require("./install"), exports);
19
+ var reportPeerDependencyIssues_1 = require("./install/reportPeerDependencyIssues");
20
+ Object.defineProperty(exports, "PeerDependencyIssuesError", { enumerable: true, get: function () { return reportPeerDependencyIssues_1.PeerDependencyIssuesError; } });
21
+ __exportStar(require("./link"), exports);
22
+ __exportStar(require("./getPeerDependencyIssues"), exports);
23
+ //# sourceMappingURL=api.js.map
package/lib/api.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,mFAAgF;AAAvE,uIAAA,yBAAyB,OAAA;AAClC,yCAAsB;AACtB,4DAAyC"}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=gracefulify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gracefulify.js","sourceRoot":"","sources":["../../src/fs/gracefulify.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { type PeerDependencyIssuesByProjects } from '@pnpm/types';
2
+ import { type GetContextOptions, type ProjectOptions } from '@pnpm/get-context';
3
+ import { type InstallOptions } from './install/extendInstallOptions';
4
+ export type ListMissingPeersOptions = Partial<GetContextOptions> & Pick<InstallOptions, 'hooks' | 'ignoreCompatibilityDb' | 'linkWorkspacePackagesDepth' | 'nodeVersion' | 'nodeLinker' | 'overrides' | 'packageExtensions' | 'preferWorkspacePackages' | 'saveWorkspaceProtocol' | 'storeController' | 'useGitBranchLockfile' | 'workspacePackages'> & Pick<GetContextOptions, 'autoInstallPeers' | 'excludeLinksFromLockfile' | 'storeDir'>;
5
+ export declare function getPeerDependencyIssues(projects: ProjectOptions[], opts: ListMissingPeersOptions): Promise<PeerDependencyIssuesByProjects>;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPeerDependencyIssues = void 0;
4
+ const resolve_dependencies_1 = require("@pnpm/resolve-dependencies");
5
+ const get_context_1 = require("@pnpm/get-context");
6
+ const hooks_read_package_hook_1 = require("@pnpm/hooks.read-package-hook");
7
+ const getPreferredVersions_1 = require("./install/getPreferredVersions");
8
+ const normalize_registries_1 = require("@pnpm/normalize-registries");
9
+ async function getPeerDependencyIssues(projects, opts) {
10
+ const lockfileDir = opts.lockfileDir ?? process.cwd();
11
+ const ctx = await (0, get_context_1.getContext)({
12
+ force: false,
13
+ forceSharedLockfile: false,
14
+ extraBinPaths: [],
15
+ lockfileDir,
16
+ nodeLinker: opts.nodeLinker ?? 'isolated',
17
+ registries: normalize_registries_1.DEFAULT_REGISTRIES,
18
+ useLockfile: true,
19
+ allProjects: projects,
20
+ ...opts,
21
+ });
22
+ const projectsToResolve = Object.values(ctx.projects).map((project) => ({
23
+ ...project,
24
+ updatePackageManifest: false,
25
+ wantedDependencies: (0, resolve_dependencies_1.getWantedDependencies)(project.manifest),
26
+ }));
27
+ const preferredVersions = (0, getPreferredVersions_1.getPreferredVersionsFromLockfileAndManifests)(ctx.wantedLockfile.packages, Object.values(ctx.projects).map(({ manifest }) => manifest));
28
+ const { peerDependencyIssuesByProjects, waitTillAllFetchingsFinish, } = await (0, resolve_dependencies_1.resolveDependencies)(projectsToResolve, {
29
+ currentLockfile: ctx.currentLockfile,
30
+ allowedDeprecatedVersions: {},
31
+ allowNonAppliedPatches: false,
32
+ defaultUpdateDepth: -1,
33
+ dryRun: true,
34
+ engineStrict: false,
35
+ force: false,
36
+ forceFullResolution: true,
37
+ hooks: {
38
+ readPackage: (0, hooks_read_package_hook_1.createReadPackageHook)({
39
+ ignoreCompatibilityDb: opts.ignoreCompatibilityDb,
40
+ lockfileDir,
41
+ overrides: opts.overrides,
42
+ packageExtensions: opts.packageExtensions,
43
+ readPackageHook: opts.hooks?.readPackage,
44
+ }),
45
+ },
46
+ linkWorkspacePackagesDepth: opts.linkWorkspacePackagesDepth ?? (opts.saveWorkspaceProtocol ? 0 : -1),
47
+ lockfileDir,
48
+ nodeVersion: opts.nodeVersion ?? process.version,
49
+ pnpmVersion: '',
50
+ preferWorkspacePackages: opts.preferWorkspacePackages,
51
+ preferredVersions,
52
+ preserveWorkspaceProtocol: false,
53
+ registries: ctx.registries,
54
+ saveWorkspaceProtocol: false,
55
+ storeController: opts.storeController,
56
+ tag: 'latest',
57
+ virtualStoreDir: ctx.virtualStoreDir,
58
+ wantedLockfile: ctx.wantedLockfile,
59
+ workspacePackages: opts.workspacePackages ?? {},
60
+ });
61
+ await waitTillAllFetchingsFinish();
62
+ return peerDependencyIssuesByProjects;
63
+ }
64
+ exports.getPeerDependencyIssues = getPeerDependencyIssues;
65
+ //# sourceMappingURL=getPeerDependencyIssues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPeerDependencyIssues.js","sourceRoot":"","sources":["../src/getPeerDependencyIssues.ts"],"names":[],"mappings":";;;AAAA,qEAAuF;AAEvF,mDAA2F;AAC3F,2EAAqE;AACrE,yEAA6F;AAE7F,qEAA+D;AAkBxD,KAAK,UAAU,uBAAuB,CAC3C,QAA0B,EAC1B,IAA6B;IAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,MAAM,IAAA,wBAAU,EAAC;QAC3B,KAAK,EAAE,KAAK;QACZ,mBAAmB,EAAE,KAAK;QAC1B,aAAa,EAAE,EAAE;QACjB,WAAW;QACX,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,UAAU;QACzC,UAAU,EAAE,yCAAkB;QAC9B,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,QAAQ;QACrB,GAAG,IAAI;KACR,CAAC,CAAA;IACF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtE,GAAG,OAAO;QACV,qBAAqB,EAAE,KAAK;QAC5B,kBAAkB,EAAE,IAAA,4CAAqB,EAAC,OAAO,CAAC,QAAQ,CAAC;KAC5D,CAAC,CAAC,CAAA;IACH,MAAM,iBAAiB,GAAG,IAAA,mEAA4C,EACpE,GAAG,CAAC,cAAc,CAAC,QAAQ,EAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAC5D,CAAA;IACD,MAAM,EACJ,8BAA8B,EAC9B,0BAA0B,GAC3B,GAAG,MAAM,IAAA,0CAAmB,EAC3B,iBAAiB,EACjB;QACE,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,yBAAyB,EAAE,EAAE;QAC7B,sBAAsB,EAAE,KAAK;QAC7B,kBAAkB,EAAE,CAAC,CAAC;QACtB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,KAAK;QACZ,mBAAmB,EAAE,IAAI;QACzB,KAAK,EAAE;YACL,WAAW,EAAE,IAAA,+CAAqB,EAAC;gBACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW;aACzC,CAAC;SACH;QACD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,WAAW;QACX,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO;QAChD,WAAW,EAAE,EAAE;QACf,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,iBAAiB;QACjB,yBAAyB,EAAE,KAAK;QAChC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,qBAAqB,EAAE,KAAK;QAC5B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,GAAG,EAAE,QAAQ;QACb,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,EAAE;KAChD,CACF,CAAA;IAED,MAAM,0BAA0B,EAAE,CAAA;IAElC,OAAO,8BAA8B,CAAA;AACvC,CAAC;AApED,0DAoEC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type { BadPeerDependencyIssue, MissingPeerDependencyIssue, MissingPeerIssuesByPeerName, PackageManifest, PeerDependencyIssues, PeerDependencyIssuesByProjects, } from '@pnpm/types';
2
+ export type { HoistingLimits } from '@pnpm/headless';
3
+ export * from './api';
4
+ export { type ProjectOptions, UnexpectedStoreError, UnexpectedVirtualStoreDirError } from '@pnpm/get-context';
5
+ export type { InstallOptions } from './install/extendInstallOptions';
6
+ export type { WorkspacePackages } from '@pnpm/resolver-base';
7
+ export type { UpdateMatchingFunction } from '@pnpm/resolve-dependencies';
package/lib/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.UnexpectedVirtualStoreDirError = exports.UnexpectedStoreError = void 0;
18
+ __exportStar(require("./api"), exports);
19
+ var get_context_1 = require("@pnpm/get-context");
20
+ Object.defineProperty(exports, "UnexpectedStoreError", { enumerable: true, get: function () { return get_context_1.UnexpectedStoreError; } });
21
+ Object.defineProperty(exports, "UnexpectedVirtualStoreDirError", { enumerable: true, get: function () { return get_context_1.UnexpectedVirtualStoreDirError; } });
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AASA,wCAAqB;AAErB,iDAA6G;AAA/E,mHAAA,oBAAoB,OAAA;AAAE,6HAAA,8BAA8B,OAAA"}
@@ -0,0 +1,12 @@
1
+ import { type ProjectOptions } from '@pnpm/get-context';
2
+ import { type Lockfile } from '@pnpm/lockfile-file';
3
+ import { type WorkspacePackages } from '@pnpm/resolver-base';
4
+ export declare function allProjectsAreUpToDate(projects: Array<ProjectOptions & {
5
+ id: string;
6
+ }>, opts: {
7
+ autoInstallPeers: boolean;
8
+ excludeLinksFromLockfile: boolean;
9
+ linkWorkspacePackages: boolean;
10
+ wantedLockfile: Lockfile;
11
+ workspacePackages: WorkspacePackages;
12
+ }): Promise<boolean>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.allProjectsAreUpToDate = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const lockfile_utils_1 = require("@pnpm/lockfile-utils");
9
+ const read_package_json_1 = require("@pnpm/read-package-json");
10
+ const types_1 = require("@pnpm/types");
11
+ const p_every_1 = __importDefault(require("p-every"));
12
+ const any_1 = __importDefault(require("ramda/src/any"));
13
+ const semver_1 = __importDefault(require("semver"));
14
+ async function allProjectsAreUpToDate(projects, opts) {
15
+ const manifestsByDir = opts.workspacePackages ? getWorkspacePackagesByDirectory(opts.workspacePackages) : {};
16
+ const _satisfiesPackageManifest = lockfile_utils_1.satisfiesPackageManifest.bind(null, {
17
+ autoInstallPeers: opts.autoInstallPeers,
18
+ excludeLinksFromLockfile: opts.excludeLinksFromLockfile,
19
+ });
20
+ const _linkedPackagesAreUpToDate = linkedPackagesAreUpToDate.bind(null, {
21
+ linkWorkspacePackages: opts.linkWorkspacePackages,
22
+ manifestsByDir,
23
+ workspacePackages: opts.workspacePackages,
24
+ });
25
+ return (0, p_every_1.default)(projects, (project) => {
26
+ const importer = opts.wantedLockfile.importers[project.id];
27
+ return !hasLocalTarballDepsInRoot(importer) &&
28
+ _satisfiesPackageManifest(importer, project.manifest).satisfies &&
29
+ _linkedPackagesAreUpToDate({
30
+ dir: project.rootDir,
31
+ manifest: project.manifest,
32
+ snapshot: importer,
33
+ });
34
+ });
35
+ }
36
+ exports.allProjectsAreUpToDate = allProjectsAreUpToDate;
37
+ function getWorkspacePackagesByDirectory(workspacePackages) {
38
+ const workspacePackagesByDirectory = {};
39
+ Object.keys(workspacePackages || {}).forEach((pkgName) => {
40
+ Object.keys(workspacePackages[pkgName] || {}).forEach((pkgVersion) => {
41
+ workspacePackagesByDirectory[workspacePackages[pkgName][pkgVersion].dir] = workspacePackages[pkgName][pkgVersion].manifest;
42
+ });
43
+ });
44
+ return workspacePackagesByDirectory;
45
+ }
46
+ async function linkedPackagesAreUpToDate({ linkWorkspacePackages, manifestsByDir, workspacePackages, }, project) {
47
+ return (0, p_every_1.default)(types_1.DEPENDENCIES_FIELDS, (depField) => {
48
+ const lockfileDeps = project.snapshot[depField];
49
+ const manifestDeps = project.manifest[depField];
50
+ if ((lockfileDeps == null) || (manifestDeps == null))
51
+ return true;
52
+ const depNames = Object.keys(lockfileDeps);
53
+ return (0, p_every_1.default)(depNames, async (depName) => {
54
+ const currentSpec = manifestDeps[depName];
55
+ if (!currentSpec)
56
+ return true;
57
+ const lockfileRef = lockfileDeps[depName];
58
+ const isLinked = lockfileRef.startsWith('link:');
59
+ if (isLinked &&
60
+ (currentSpec.startsWith('link:') ||
61
+ currentSpec.startsWith('file:') ||
62
+ currentSpec.startsWith('workspace:.'))) {
63
+ return true;
64
+ }
65
+ const linkedDir = isLinked
66
+ ? path_1.default.join(project.dir, lockfileRef.slice(5))
67
+ : workspacePackages?.[depName]?.[lockfileRef]?.dir;
68
+ if (!linkedDir)
69
+ return true;
70
+ if (!linkWorkspacePackages && !currentSpec.startsWith('workspace:')) {
71
+ // we found a linked dir, but we don't want to use it, because it's not specified as a
72
+ // workspace:x.x.x dependency
73
+ return true;
74
+ }
75
+ const linkedPkg = manifestsByDir[linkedDir] ?? await (0, read_package_json_1.safeReadPackageJsonFromDir)(linkedDir);
76
+ const availableRange = getVersionRange(currentSpec);
77
+ // This should pass the same options to semver as @pnpm/npm-resolver
78
+ const localPackageSatisfiesRange = availableRange === '*' || availableRange === '^' || availableRange === '~' ||
79
+ linkedPkg && semver_1.default.satisfies(linkedPkg.version, availableRange, { loose: true });
80
+ if (isLinked !== localPackageSatisfiesRange)
81
+ return false;
82
+ return true;
83
+ });
84
+ });
85
+ }
86
+ function getVersionRange(spec) {
87
+ if (spec.startsWith('workspace:'))
88
+ return spec.slice(10);
89
+ if (spec.startsWith('npm:')) {
90
+ spec = spec.slice(4);
91
+ const index = spec.indexOf('@', 1);
92
+ if (index === -1)
93
+ return '*';
94
+ return spec.slice(index + 1) || '*';
95
+ }
96
+ return spec;
97
+ }
98
+ function hasLocalTarballDepsInRoot(importer) {
99
+ return (0, any_1.default)(refIsLocalTarball, Object.values(importer.dependencies ?? {})) ||
100
+ (0, any_1.default)(refIsLocalTarball, Object.values(importer.devDependencies ?? {})) ||
101
+ (0, any_1.default)(refIsLocalTarball, Object.values(importer.optionalDependencies ?? {}));
102
+ }
103
+ function refIsLocalTarball(ref) {
104
+ return ref.startsWith('file:') && (ref.endsWith('.tgz') || ref.endsWith('.tar.gz') || ref.endsWith('.tar'));
105
+ }
106
+ //# sourceMappingURL=allProjectsAreUpToDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allProjectsAreUpToDate.js","sourceRoot":"","sources":["../../src/install/allProjectsAreUpToDate.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AAMvB,yDAA+D;AAC/D,+DAAoE;AAEpE,uCAIoB;AACpB,sDAA4B;AAC5B,wDAA+B;AAC/B,oDAA2B;AAEpB,KAAK,UAAU,sBAAsB,CAC1C,QAAgD,EAChD,IAMC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,+BAA+B,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5G,MAAM,yBAAyB,GAAG,yCAAwB,CAAC,IAAI,CAAC,IAAI,EAAE;QACpE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;KACxD,CAAC,CAAA;IACF,MAAM,0BAA0B,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE;QACtE,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,cAAc;QACd,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CAAC,CAAA;IACF,OAAO,IAAA,iBAAM,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC1D,OAAO,CAAC,yBAAyB,CAAC,QAAQ,CAAC;YACzC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS;YAC/D,0BAA0B,CAAC;gBACzB,GAAG,EAAE,OAAO,CAAC,OAAO;gBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACJ,CAAC;AA9BD,wDA8BC;AAED,SAAS,+BAA+B,CAAE,iBAAoC;IAC5E,MAAM,4BAA4B,GAAuC,EAAE,CAAA;IAC3E,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACvD,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACnE,4BAA4B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAA;QAC5H,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,OAAO,4BAA4B,CAAA;AACrC,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,EACE,qBAAqB,EACrB,cAAc,EACd,iBAAiB,GAKlB,EACD,OAIC;IAED,OAAO,IAAA,iBAAM,EACX,2BAAmB,EACnB,CAAC,QAAQ,EAAE,EAAE;QACX,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC1C,OAAO,IAAA,iBAAM,EACX,QAAQ,EACR,KAAK,EAAE,OAAO,EAAE,EAAE;YAChB,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YACzC,IAAI,CAAC,WAAW;gBAAE,OAAO,IAAI,CAAA;YAC7B,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAChD,IACE,QAAQ;gBACR,CACE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC/B,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC/B,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CACtC,EACD;gBACA,OAAO,IAAI,CAAA;aACZ;YACD,MAAM,SAAS,GAAG,QAAQ;gBACxB,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,CAAA;YACpD,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,CAAC,qBAAqB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBACnE,sFAAsF;gBACtF,6BAA6B;gBAC7B,OAAO,IAAI,CAAA;aACZ;YACD,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,MAAM,IAAA,8CAA0B,EAAC,SAAS,CAAC,CAAA;YAC1F,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;YACnD,oEAAoE;YACpE,MAAM,0BAA0B,GAAG,cAAc,KAAK,GAAG,IAAI,cAAc,KAAK,GAAG,IAAI,cAAc,KAAK,GAAG;gBAC3G,SAAS,IAAI,gBAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACnF,IAAI,QAAQ,KAAK,0BAA0B;gBAAE,OAAO,KAAK,CAAA;YACzD,OAAO,IAAI,CAAA;QACb,CAAC,CACF,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAE,IAAY;IACpC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACxD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,GAAG,CAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAA;KACpC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,yBAAyB,CAAE,QAAyB;IAC3D,OAAO,IAAA,aAAG,EAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACvE,IAAA,aAAG,EAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QACrE,IAAA,aAAG,EAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,SAAS,iBAAiB,CAAE,GAAW;IACrC,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AAC7G,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { type ProjectOptions } from '@pnpm/get-context';
2
+ import { type HoistingLimits } from '@pnpm/headless';
3
+ import { type Lockfile } from '@pnpm/lockfile-file';
4
+ import { type IncludedDependencies } from '@pnpm/modules-yaml';
5
+ import { type WorkspacePackages } from '@pnpm/resolver-base';
6
+ import { type StoreController } from '@pnpm/store-controller-types';
7
+ import { type AllowedDeprecatedVersions, type PackageExtension, type PeerDependencyRules, type ReadPackageHook, type Registries } from '@pnpm/types';
8
+ import { type ReporterFunction } from '../types';
9
+ import { type PreResolutionHookContext } from '@pnpm/hooks.types';
10
+ export interface StrictInstallOptions {
11
+ autoInstallPeers: boolean;
12
+ forceSharedLockfile: boolean;
13
+ frozenLockfile: boolean;
14
+ frozenLockfileIfExists: boolean;
15
+ enablePnp: boolean;
16
+ extraBinPaths: string[];
17
+ extraEnv: Record<string, string>;
18
+ hoistingLimits?: HoistingLimits;
19
+ externalDependencies?: Set<string>;
20
+ useLockfile: boolean;
21
+ saveLockfile: boolean;
22
+ useGitBranchLockfile: boolean;
23
+ mergeGitBranchLockfiles: boolean;
24
+ linkWorkspacePackagesDepth: number;
25
+ lockfileOnly: boolean;
26
+ forceFullResolution: boolean;
27
+ fixLockfile: boolean;
28
+ dedupe: boolean;
29
+ ignoreCompatibilityDb: boolean;
30
+ ignoreDepScripts: boolean;
31
+ ignorePackageManifest: boolean;
32
+ preferFrozenLockfile: boolean;
33
+ saveWorkspaceProtocol: boolean | 'rolling';
34
+ lockfileCheck?: (prev: Lockfile, next: Lockfile) => void;
35
+ lockfileIncludeTarballUrl: boolean;
36
+ preferWorkspacePackages: boolean;
37
+ preserveWorkspaceProtocol: boolean;
38
+ scriptsPrependNodePath: boolean | 'warn-only';
39
+ scriptShell?: string;
40
+ shellEmulator: boolean;
41
+ storeController: StoreController;
42
+ storeDir: string;
43
+ reporter: ReporterFunction;
44
+ force: boolean;
45
+ forcePublicHoistPattern: boolean;
46
+ depth: number;
47
+ lockfileDir: string;
48
+ modulesDir: string;
49
+ rawConfig: Record<string, any>;
50
+ verifyStoreIntegrity: boolean;
51
+ engineStrict: boolean;
52
+ neverBuiltDependencies?: string[];
53
+ onlyBuiltDependencies?: string[];
54
+ nodeExecPath?: string;
55
+ nodeLinker: 'isolated' | 'hoisted' | 'pnp';
56
+ nodeVersion: string;
57
+ packageExtensions: Record<string, PackageExtension>;
58
+ packageManager: {
59
+ name: string;
60
+ version: string;
61
+ };
62
+ pruneLockfileImporters: boolean;
63
+ hooks: {
64
+ readPackage?: ReadPackageHook[];
65
+ preResolution?: (ctx: PreResolutionHookContext) => Promise<void>;
66
+ afterAllResolved?: Array<(lockfile: Lockfile) => Lockfile | Promise<Lockfile>>;
67
+ };
68
+ sideEffectsCacheRead: boolean;
69
+ sideEffectsCacheWrite: boolean;
70
+ strictPeerDependencies: boolean;
71
+ include: IncludedDependencies;
72
+ includeDirect: IncludedDependencies;
73
+ ignoreCurrentPrefs: boolean;
74
+ ignoreScripts: boolean;
75
+ childConcurrency: number;
76
+ userAgent: string;
77
+ unsafePerm: boolean;
78
+ registries: Registries;
79
+ tag: string;
80
+ overrides: Record<string, string>;
81
+ ownLifecycleHooksStdio: 'inherit' | 'pipe';
82
+ workspacePackages: WorkspacePackages;
83
+ pruneStore: boolean;
84
+ virtualStoreDir?: string;
85
+ dir: string;
86
+ symlink: boolean;
87
+ enableModulesDir: boolean;
88
+ modulesCacheMaxAge: number;
89
+ peerDependencyRules: PeerDependencyRules;
90
+ allowedDeprecatedVersions: AllowedDeprecatedVersions;
91
+ allowNonAppliedPatches: boolean;
92
+ preferSymlinkedExecutables: boolean;
93
+ resolutionMode: 'highest' | 'time-based' | 'lowest-direct';
94
+ resolvePeersFromWorkspaceRoot: boolean;
95
+ ignoreWorkspaceCycles: boolean;
96
+ publicHoistPattern: string[] | undefined;
97
+ hoistPattern: string[] | undefined;
98
+ forceHoistPattern: boolean;
99
+ shamefullyHoist: boolean;
100
+ forceShamefullyHoist: boolean;
101
+ global: boolean;
102
+ globalBin?: string;
103
+ patchedDependencies?: Record<string, string>;
104
+ allProjects: ProjectOptions[];
105
+ resolveSymlinksInInjectedDirs: boolean;
106
+ dedupeDirectDeps: boolean;
107
+ dedupePeerDependents: boolean;
108
+ extendNodePath: boolean;
109
+ excludeLinksFromLockfile: boolean;
110
+ confirmModulesPurge: boolean;
111
+ }
112
+ export type InstallOptions = Partial<StrictInstallOptions> & Pick<StrictInstallOptions, 'storeDir' | 'storeController'>;
113
+ export type ProcessedInstallOptions = StrictInstallOptions & {
114
+ readPackageHook?: ReadPackageHook;
115
+ };
116
+ export declare function extendOptions(opts: InstallOptions): Promise<ProcessedInstallOptions>;