app-builder-lib 26.2.0 → 26.3.1

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 (71) hide show
  1. package/out/asar/asarUtil.js +78 -10
  2. package/out/asar/asarUtil.js.map +1 -1
  3. package/out/asar/unpackDetector.js +1 -3
  4. package/out/asar/unpackDetector.js.map +1 -1
  5. package/out/codeSign/macCodeSign.js +2 -1
  6. package/out/codeSign/macCodeSign.js.map +1 -1
  7. package/out/electron/search-module.js +1 -1
  8. package/out/electron/search-module.js.map +1 -1
  9. package/out/fileMatcher.js +1 -1
  10. package/out/fileMatcher.js.map +1 -1
  11. package/out/node-module-collector/bunNodeModulesCollector.d.ts +11 -0
  12. package/out/node-module-collector/bunNodeModulesCollector.js +22 -0
  13. package/out/node-module-collector/bunNodeModulesCollector.js.map +1 -0
  14. package/out/node-module-collector/index.d.ts +21 -6
  15. package/out/node-module-collector/index.js +93 -32
  16. package/out/node-module-collector/index.js.map +1 -1
  17. package/out/node-module-collector/moduleCache.d.ts +21 -0
  18. package/out/node-module-collector/moduleCache.js +16 -0
  19. package/out/node-module-collector/moduleCache.js.map +1 -0
  20. package/out/node-module-collector/nodeModulesCollector.d.ts +50 -14
  21. package/out/node-module-collector/nodeModulesCollector.js +239 -70
  22. package/out/node-module-collector/nodeModulesCollector.js.map +1 -1
  23. package/out/node-module-collector/npmNodeModulesCollector.d.ts +10 -3
  24. package/out/node-module-collector/npmNodeModulesCollector.js +100 -13
  25. package/out/node-module-collector/npmNodeModulesCollector.js.map +1 -1
  26. package/out/node-module-collector/packageManager.d.ts +8 -6
  27. package/out/node-module-collector/packageManager.js +73 -29
  28. package/out/node-module-collector/packageManager.js.map +1 -1
  29. package/out/node-module-collector/pnpmNodeModulesCollector.d.ts +4 -4
  30. package/out/node-module-collector/pnpmNodeModulesCollector.js +49 -23
  31. package/out/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
  32. package/out/node-module-collector/types.d.ts +25 -1
  33. package/out/node-module-collector/types.js.map +1 -1
  34. package/out/node-module-collector/yarnBerryNodeModulesCollector.d.ts +15 -0
  35. package/out/node-module-collector/yarnBerryNodeModulesCollector.js +93 -0
  36. package/out/node-module-collector/yarnBerryNodeModulesCollector.js.map +1 -0
  37. package/out/node-module-collector/yarnNodeModulesCollector.d.ts +12 -2
  38. package/out/node-module-collector/yarnNodeModulesCollector.js +234 -5
  39. package/out/node-module-collector/yarnNodeModulesCollector.js.map +1 -1
  40. package/out/options/winOptions.d.ts +2 -1
  41. package/out/options/winOptions.js.map +1 -1
  42. package/out/packager.d.ts +6 -1
  43. package/out/packager.js +12 -5
  44. package/out/packager.js.map +1 -1
  45. package/out/publish/PublishManager.js +2 -2
  46. package/out/publish/PublishManager.js.map +1 -1
  47. package/out/targets/AppxTarget.js +1 -1
  48. package/out/targets/AppxTarget.js.map +1 -1
  49. package/out/targets/MsiTarget.js +1 -1
  50. package/out/targets/MsiTarget.js.map +1 -1
  51. package/out/targets/nsis/NsisTarget.js +2 -2
  52. package/out/targets/nsis/NsisTarget.js.map +1 -1
  53. package/out/targets/nsis/nsisUtil.js +1 -1
  54. package/out/targets/nsis/nsisUtil.js.map +1 -1
  55. package/out/targets/tools.js +12 -12
  56. package/out/targets/tools.js.map +1 -1
  57. package/out/util/appFileCopier.js +18 -10
  58. package/out/util/appFileCopier.js.map +1 -1
  59. package/out/util/macosIconComposer.js +11 -4
  60. package/out/util/macosIconComposer.js.map +1 -1
  61. package/out/util/yarn.d.ts +4 -2
  62. package/out/util/yarn.js +34 -24
  63. package/out/util/yarn.js.map +1 -1
  64. package/out/version.d.ts +1 -1
  65. package/out/version.js +1 -1
  66. package/out/version.js.map +1 -1
  67. package/out/winPackager.d.ts +1 -1
  68. package/out/winPackager.js +26 -9
  69. package/out/winPackager.js.map +1 -1
  70. package/package.json +9 -9
  71. package/scheme.json +1 -1
@@ -1,9 +1,24 @@
1
+ import { CancellationToken, Nullish } from "builder-util-runtime";
2
+ import { TmpDir } from "temp-file";
1
3
  import { NpmNodeModulesCollector } from "./npmNodeModulesCollector";
4
+ import { getPackageManagerCommand, PM } from "./packageManager";
2
5
  import { PnpmNodeModulesCollector } from "./pnpmNodeModulesCollector";
3
- import { PM, getPackageManagerCommand } from "./packageManager";
4
6
  import { NodeModuleInfo } from "./types";
5
- import { TmpDir } from "temp-file";
6
- export declare function getCollectorByPackageManager(pm: PM, rootDir: string, tempDirManager: TmpDir): Promise<NpmNodeModulesCollector | PnpmNodeModulesCollector>;
7
- export declare function getNodeModules(pm: PM, rootDir: string, tempDirManager: TmpDir): Promise<NodeModuleInfo[]>;
8
- export declare function detectPackageManager(dirs: string[]): PM;
9
- export { PM, getPackageManagerCommand };
7
+ import { YarnNodeModulesCollector } from "./yarnNodeModulesCollector";
8
+ import { Lazy } from "lazy-val";
9
+ export { getPackageManagerCommand, PM };
10
+ export declare function getCollectorByPackageManager(pm: PM, rootDir: string, tempDirManager: TmpDir): NpmNodeModulesCollector | PnpmNodeModulesCollector | YarnNodeModulesCollector;
11
+ export declare function getNodeModules(pm: PM, { rootDir, tempDirManager, cancellationToken, packageName, }: {
12
+ rootDir: string;
13
+ tempDirManager: TmpDir;
14
+ cancellationToken: CancellationToken;
15
+ packageName: string;
16
+ }): Promise<NodeModuleInfo[]>;
17
+ export declare const determinePackageManagerEnv: ({ projectDir, appDir, workspaceRoot }: {
18
+ projectDir: string;
19
+ appDir: string;
20
+ workspaceRoot: string | Nullish;
21
+ }) => Lazy<{
22
+ pm: PM;
23
+ workspaceRoot: Promise<string | undefined>;
24
+ }>;
@@ -1,54 +1,115 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPackageManagerCommand = exports.PM = void 0;
3
+ exports.determinePackageManagerEnv = exports.PM = exports.getPackageManagerCommand = void 0;
4
4
  exports.getCollectorByPackageManager = getCollectorByPackageManager;
5
5
  exports.getNodeModules = getNodeModules;
6
- exports.detectPackageManager = detectPackageManager;
7
6
  const npmNodeModulesCollector_1 = require("./npmNodeModulesCollector");
8
- const pnpmNodeModulesCollector_1 = require("./pnpmNodeModulesCollector");
9
- const yarnNodeModulesCollector_1 = require("./yarnNodeModulesCollector");
10
7
  const packageManager_1 = require("./packageManager");
11
- Object.defineProperty(exports, "PM", { enumerable: true, get: function () { return packageManager_1.PM; } });
12
8
  Object.defineProperty(exports, "getPackageManagerCommand", { enumerable: true, get: function () { return packageManager_1.getPackageManagerCommand; } });
13
- async function getCollectorByPackageManager(pm, rootDir, tempDirManager) {
9
+ Object.defineProperty(exports, "PM", { enumerable: true, get: function () { return packageManager_1.PM; } });
10
+ const pnpmNodeModulesCollector_1 = require("./pnpmNodeModulesCollector");
11
+ const yarnBerryNodeModulesCollector_1 = require("./yarnBerryNodeModulesCollector");
12
+ const yarnNodeModulesCollector_1 = require("./yarnNodeModulesCollector");
13
+ const bunNodeModulesCollector_1 = require("./bunNodeModulesCollector");
14
+ const lazy_val_1 = require("lazy-val");
15
+ const builder_util_1 = require("builder-util");
16
+ const fs = require("fs-extra");
17
+ const path = require("path");
18
+ function getCollectorByPackageManager(pm, rootDir, tempDirManager) {
14
19
  switch (pm) {
15
20
  case packageManager_1.PM.PNPM:
16
- if (await pnpmNodeModulesCollector_1.PnpmNodeModulesCollector.isPnpmProjectHoisted(rootDir)) {
17
- return new npmNodeModulesCollector_1.NpmNodeModulesCollector(rootDir, tempDirManager);
18
- }
19
21
  return new pnpmNodeModulesCollector_1.PnpmNodeModulesCollector(rootDir, tempDirManager);
20
- case packageManager_1.PM.NPM:
21
- case packageManager_1.PM.BUN:
22
- return new npmNodeModulesCollector_1.NpmNodeModulesCollector(rootDir, tempDirManager);
23
22
  case packageManager_1.PM.YARN:
24
23
  return new yarnNodeModulesCollector_1.YarnNodeModulesCollector(rootDir, tempDirManager);
25
- default:
24
+ case packageManager_1.PM.YARN_BERRY:
25
+ return new yarnBerryNodeModulesCollector_1.YarnBerryNodeModulesCollector(rootDir, tempDirManager);
26
+ case packageManager_1.PM.BUN:
27
+ return new bunNodeModulesCollector_1.BunNodeModulesCollector(rootDir, tempDirManager);
28
+ case packageManager_1.PM.NPM:
26
29
  return new npmNodeModulesCollector_1.NpmNodeModulesCollector(rootDir, tempDirManager);
27
30
  }
28
31
  }
29
- async function getNodeModules(pm, rootDir, tempDirManager) {
30
- const collector = await getCollectorByPackageManager(pm, rootDir, tempDirManager);
31
- return collector.getNodeModules();
32
+ function getNodeModules(pm, { rootDir, tempDirManager, cancellationToken, packageName, }) {
33
+ const collector = getCollectorByPackageManager(pm, rootDir, tempDirManager);
34
+ return collector.getNodeModules({ cancellationToken, packageName });
32
35
  }
33
- function detectPackageManager(dirs) {
34
- let pm = null;
35
- const resolveYarnVersion = (pm) => {
36
- if (pm === packageManager_1.PM.YARN) {
37
- return (0, packageManager_1.detectYarnBerry)();
38
- }
39
- return pm;
36
+ const determinePackageManagerEnv = ({ projectDir, appDir, workspaceRoot }) => new lazy_val_1.Lazy(async () => {
37
+ const availableDirs = [projectDir, appDir, workspaceRoot].filter((it) => it != null);
38
+ const pm = await (0, packageManager_1.detectPackageManager)(availableDirs);
39
+ const root = await findWorkspaceRoot(pm.pm, projectDir);
40
+ if (root != null) {
41
+ // re-detect package manager from workspace root, this seems particularly necessary for pnpm workspaces
42
+ const actualPm = await (0, packageManager_1.detectPackageManager)([root]);
43
+ return {
44
+ pm: actualPm.pm,
45
+ workspaceRoot: Promise.resolve(actualPm.resolvedDirectory),
46
+ };
47
+ }
48
+ return {
49
+ pm: pm.pm,
50
+ workspaceRoot: Promise.resolve(pm.resolvedDirectory),
40
51
  };
41
- for (const dir of dirs) {
42
- pm = (0, packageManager_1.detectPackageManagerByLockfile)(dir);
43
- if (pm) {
44
- return resolveYarnVersion(pm);
52
+ });
53
+ exports.determinePackageManagerEnv = determinePackageManagerEnv;
54
+ async function findWorkspaceRoot(pm, cwd) {
55
+ let command;
56
+ switch (pm) {
57
+ case packageManager_1.PM.PNPM:
58
+ command = { command: "pnpm", args: ["--workspace-root", "exec", "pwd"] };
59
+ break;
60
+ case packageManager_1.PM.YARN_BERRY:
61
+ command = { command: "yarn", args: ["config", "get", "workspaceRoot"] };
62
+ break;
63
+ case packageManager_1.PM.YARN: {
64
+ command = { command: "yarn", args: ["workspaces", "info", "--silent"] };
65
+ break;
45
66
  }
67
+ case packageManager_1.PM.BUN:
68
+ command = { command: "bun", args: ["pm", "ls", "--json"] };
69
+ break;
70
+ case packageManager_1.PM.NPM:
71
+ default:
72
+ command = { command: "npm", args: ["prefix", "-w"] };
73
+ break;
46
74
  }
47
- pm = (0, packageManager_1.detectPackageManagerByEnv)();
48
- if (pm) {
49
- return resolveYarnVersion(pm);
75
+ const output = await (0, builder_util_1.spawn)(command.command, command.args, { cwd, stdio: ["ignore", "pipe", "ignore"] })
76
+ .then(it => {
77
+ const out = it === null || it === void 0 ? void 0 : it.trim();
78
+ if (pm === packageManager_1.PM.YARN) {
79
+ JSON.parse(out); // if JSON valid, workspace detected
80
+ return findNearestWithWorkspacesField(cwd);
81
+ }
82
+ else if (pm === packageManager_1.PM.BUN) {
83
+ const json = JSON.parse(out);
84
+ if (Array.isArray(json) && json.length > 0) {
85
+ return findNearestWithWorkspacesField(cwd);
86
+ }
87
+ }
88
+ return !(out === null || out === void 0 ? void 0 : out.length) || out === "undefined" ? undefined : out;
89
+ })
90
+ .catch(() => findNearestWithWorkspacesField(cwd));
91
+ builder_util_1.log.debug({ root: output || cwd }, output ? "workspace root detected" : "workspace root not detected, using project root");
92
+ return output;
93
+ }
94
+ async function findNearestWithWorkspacesField(dir) {
95
+ let current = dir;
96
+ while (true) {
97
+ const pkgPath = path.join(current, "package.json");
98
+ try {
99
+ const pkg = JSON.parse(await fs.readFile(pkgPath, "utf8"));
100
+ if (pkg.workspaces) {
101
+ return current;
102
+ }
103
+ }
104
+ catch {
105
+ // ignore
106
+ }
107
+ const parent = path.dirname(current);
108
+ if (parent === current) {
109
+ break;
110
+ }
111
+ current = parent;
50
112
  }
51
- // Default to npm
52
- return packageManager_1.PM.NPM;
113
+ return undefined;
53
114
  }
54
115
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node-module-collector/index.ts"],"names":[],"mappings":";;;AAOA,oEAeC;AAED,wCAGC;AAED,oDAwBC;AArDD,uEAAmE;AACnE,yEAAqE;AACrE,yEAAqE;AACrE,qDAA2I;AAoDlI,mFApD2D,mBAAE,OAoD3D;AAAE,yGApD2D,yCAAwB,OAoD3D;AAhD9B,KAAK,UAAU,4BAA4B,CAAC,EAAM,EAAE,OAAe,EAAE,cAAsB;IAChG,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,mBAAE,CAAC,IAAI;YACV,IAAI,MAAM,mDAAwB,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjE,OAAO,IAAI,iDAAuB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;YAC7D,CAAC;YACD,OAAO,IAAI,mDAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;QAC9D,KAAK,mBAAE,CAAC,GAAG,CAAC;QACZ,KAAK,mBAAE,CAAC,GAAG;YACT,OAAO,IAAI,iDAAuB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;QAC7D,KAAK,mBAAE,CAAC,IAAI;YACV,OAAO,IAAI,mDAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;QAC9D;YACE,OAAO,IAAI,iDAAuB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,EAAM,EAAE,OAAe,EAAE,cAAsB;IAClF,MAAM,SAAS,GAAG,MAAM,4BAA4B,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IACjF,OAAO,SAAS,CAAC,cAAc,EAAE,CAAA;AACnC,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAc;IACjD,IAAI,EAAE,GAAc,IAAI,CAAA;IAExB,MAAM,kBAAkB,GAAG,CAAC,EAAM,EAAE,EAAE;QACpC,IAAI,EAAE,KAAK,mBAAE,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,IAAA,gCAAe,GAAE,CAAA;QAC1B,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAA;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,EAAE,GAAG,IAAA,+CAA8B,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,EAAE,GAAG,IAAA,0CAAyB,GAAE,CAAA;IAChC,IAAI,EAAE,EAAE,CAAC;QACP,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,iBAAiB;IACjB,OAAO,mBAAE,CAAC,GAAG,CAAA;AACf,CAAC","sourcesContent":["import { NpmNodeModulesCollector } from \"./npmNodeModulesCollector\"\nimport { PnpmNodeModulesCollector } from \"./pnpmNodeModulesCollector\"\nimport { YarnNodeModulesCollector } from \"./yarnNodeModulesCollector\"\nimport { detectPackageManagerByLockfile, detectPackageManagerByEnv, PM, getPackageManagerCommand, detectYarnBerry } from \"./packageManager\"\nimport { NodeModuleInfo } from \"./types\"\nimport { TmpDir } from \"temp-file\"\n\nexport async function getCollectorByPackageManager(pm: PM, rootDir: string, tempDirManager: TmpDir) {\n switch (pm) {\n case PM.PNPM:\n if (await PnpmNodeModulesCollector.isPnpmProjectHoisted(rootDir)) {\n return new NpmNodeModulesCollector(rootDir, tempDirManager)\n }\n return new PnpmNodeModulesCollector(rootDir, tempDirManager)\n case PM.NPM:\n case PM.BUN:\n return new NpmNodeModulesCollector(rootDir, tempDirManager)\n case PM.YARN:\n return new YarnNodeModulesCollector(rootDir, tempDirManager)\n default:\n return new NpmNodeModulesCollector(rootDir, tempDirManager)\n }\n}\n\nexport async function getNodeModules(pm: PM, rootDir: string, tempDirManager: TmpDir): Promise<NodeModuleInfo[]> {\n const collector = await getCollectorByPackageManager(pm, rootDir, tempDirManager)\n return collector.getNodeModules()\n}\n\nexport function detectPackageManager(dirs: string[]): PM {\n let pm: PM | null = null\n\n const resolveYarnVersion = (pm: PM) => {\n if (pm === PM.YARN) {\n return detectYarnBerry()\n }\n return pm\n }\n\n for (const dir of dirs) {\n pm = detectPackageManagerByLockfile(dir)\n if (pm) {\n return resolveYarnVersion(pm)\n }\n }\n\n pm = detectPackageManagerByEnv()\n if (pm) {\n return resolveYarnVersion(pm)\n }\n\n // Default to npm\n return PM.NPM\n}\n\nexport { PM, getPackageManagerCommand }\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node-module-collector/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { CancellationToken, Nullish } from \"builder-util-runtime\"\nimport { TmpDir } from \"temp-file\"\nimport { NpmNodeModulesCollector } from \"./npmNodeModulesCollector\"\nimport { detectPackageManager, getPackageManagerCommand, PM } from \"./packageManager\"\nimport { PnpmNodeModulesCollector } from \"./pnpmNodeModulesCollector\"\nimport { NodeModuleInfo } from \"./types\"\nimport { YarnBerryNodeModulesCollector } from \"./yarnBerryNodeModulesCollector\"\nimport { YarnNodeModulesCollector } from \"./yarnNodeModulesCollector\"\nimport { BunNodeModulesCollector } from \"./bunNodeModulesCollector\"\nimport { Lazy } from \"lazy-val\"\nimport { spawn, log } from \"builder-util\"\nimport * as fs from \"fs-extra\"\nimport * as path from \"path\"\n\nexport { getPackageManagerCommand, PM }\n\nexport function getCollectorByPackageManager(pm: PM, rootDir: string, tempDirManager: TmpDir) {\n switch (pm) {\n case PM.PNPM:\n return new PnpmNodeModulesCollector(rootDir, tempDirManager)\n case PM.YARN:\n return new YarnNodeModulesCollector(rootDir, tempDirManager)\n case PM.YARN_BERRY:\n return new YarnBerryNodeModulesCollector(rootDir, tempDirManager)\n case PM.BUN:\n return new BunNodeModulesCollector(rootDir, tempDirManager)\n case PM.NPM:\n return new NpmNodeModulesCollector(rootDir, tempDirManager)\n }\n}\n\nexport function getNodeModules(\n pm: PM,\n {\n rootDir,\n tempDirManager,\n cancellationToken,\n packageName,\n }: {\n rootDir: string\n tempDirManager: TmpDir\n cancellationToken: CancellationToken\n packageName: string\n }\n): Promise<NodeModuleInfo[]> {\n const collector = getCollectorByPackageManager(pm, rootDir, tempDirManager)\n return collector.getNodeModules({ cancellationToken, packageName })\n}\n\nexport const determinePackageManagerEnv = ({ projectDir, appDir, workspaceRoot }: { projectDir: string; appDir: string; workspaceRoot: string | Nullish }) =>\n new Lazy(async () => {\n const availableDirs = [projectDir, appDir, workspaceRoot].filter((it): it is string => it != null)\n const pm = await detectPackageManager(availableDirs)\n const root = await findWorkspaceRoot(pm.pm, projectDir)\n if (root != null) {\n // re-detect package manager from workspace root, this seems particularly necessary for pnpm workspaces\n const actualPm = await detectPackageManager([root])\n return {\n pm: actualPm.pm,\n workspaceRoot: Promise.resolve(actualPm.resolvedDirectory),\n }\n }\n return {\n pm: pm.pm,\n workspaceRoot: Promise.resolve(pm.resolvedDirectory),\n }\n })\n\nasync function findWorkspaceRoot(pm: PM, cwd: string): Promise<string | undefined> {\n let command: { command: string; args: string[] } | undefined\n\n switch (pm) {\n case PM.PNPM:\n command = { command: \"pnpm\", args: [\"--workspace-root\", \"exec\", \"pwd\"] }\n break\n\n case PM.YARN_BERRY:\n command = { command: \"yarn\", args: [\"config\", \"get\", \"workspaceRoot\"] }\n break\n\n case PM.YARN: {\n command = { command: \"yarn\", args: [\"workspaces\", \"info\", \"--silent\"] }\n break\n }\n\n case PM.BUN:\n command = { command: \"bun\", args: [\"pm\", \"ls\", \"--json\"] }\n break\n\n case PM.NPM:\n default:\n command = { command: \"npm\", args: [\"prefix\", \"-w\"] }\n break\n }\n\n const output = await spawn(command.command, command.args, { cwd, stdio: [\"ignore\", \"pipe\", \"ignore\"] })\n .then(it => {\n const out = it?.trim()\n if (pm === PM.YARN) {\n JSON.parse(out) // if JSON valid, workspace detected\n return findNearestWithWorkspacesField(cwd)\n } else if (pm === PM.BUN) {\n const json = JSON.parse(out)\n if (Array.isArray(json) && json.length > 0) {\n return findNearestWithWorkspacesField(cwd)\n }\n }\n return !out?.length || out === \"undefined\" ? undefined : out\n })\n .catch(() => findNearestWithWorkspacesField(cwd))\n\n log.debug({ root: output || cwd }, output ? \"workspace root detected\" : \"workspace root not detected, using project root\")\n return output\n}\n\nasync function findNearestWithWorkspacesField(dir: string): Promise<string | undefined> {\n let current = dir\n while (true) {\n const pkgPath = path.join(current, \"package.json\")\n try {\n const pkg = JSON.parse(await fs.readFile(pkgPath, \"utf8\"))\n if (pkg.workspaces) {\n return current\n }\n } catch {\n // ignore\n }\n const parent = path.dirname(current)\n if (parent === current) {\n break\n }\n current = parent\n }\n return undefined\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import * as fs from "fs";
2
+ import { PackageJson } from "./types";
3
+ /**
4
+ * Unified cache for all file system and module resolution operations
5
+ */
6
+ export type ModuleCache = {
7
+ /** Cache for package.json contents (readJson/require) */
8
+ packageJson: Map<string, PackageJson>;
9
+ /** Cache for resolved real paths (realpath) */
10
+ realPath: Map<string, string>;
11
+ /** Cache for file/directory existence checks */
12
+ exists: Map<string, boolean>;
13
+ /** Cache for lstat results */
14
+ lstat: Map<string, fs.Stats>;
15
+ /** Cache for require.resolve results (key: "packageName::fromDir") */
16
+ requireResolve: Map<string, string | null>;
17
+ };
18
+ /**
19
+ * Creates a new empty ModuleCache instance
20
+ */
21
+ export declare function createModuleCache(): ModuleCache;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createModuleCache = createModuleCache;
4
+ /**
5
+ * Creates a new empty ModuleCache instance
6
+ */
7
+ function createModuleCache() {
8
+ return {
9
+ packageJson: new Map(),
10
+ realPath: new Map(),
11
+ exists: new Map(),
12
+ lstat: new Map(),
13
+ requireResolve: new Map(),
14
+ };
15
+ }
16
+ //# sourceMappingURL=moduleCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleCache.js","sourceRoot":"","sources":["../../src/node-module-collector/moduleCache.ts"],"names":[],"mappings":";;AAsBA,8CAQC;AAXD;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO;QACL,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,cAAc,EAAE,IAAI,GAAG,EAAE;KAC1B,CAAA;AACH,CAAC","sourcesContent":["import * as fs from \"fs\"\nimport { PackageJson } from \"./types\"\n\n/**\n * Unified cache for all file system and module resolution operations\n */\nexport type ModuleCache = {\n /** Cache for package.json contents (readJson/require) */\n packageJson: Map<string, PackageJson>\n /** Cache for resolved real paths (realpath) */\n realPath: Map<string, string>\n /** Cache for file/directory existence checks */\n exists: Map<string, boolean>\n /** Cache for lstat results */\n lstat: Map<string, fs.Stats>\n /** Cache for require.resolve results (key: \"packageName::fromDir\") */\n requireResolve: Map<string, string | null>\n}\n\n/**\n * Creates a new empty ModuleCache instance\n */\nexport function createModuleCache(): ModuleCache {\n return {\n packageJson: new Map(),\n realPath: new Map(),\n exists: new Map(),\n lstat: new Map(),\n requireResolve: new Map(),\n }\n}\n"]}
@@ -1,27 +1,63 @@
1
- import type { NodeModuleInfo, DependencyGraph, Dependency } from "./types";
2
1
  import { TmpDir } from "builder-util";
2
+ import { CancellationToken } from "builder-util-runtime";
3
+ import * as fs from "fs-extra";
4
+ import { Lazy } from "lazy-val";
5
+ import { type ModuleCache } from "./moduleCache";
3
6
  import { PM } from "./packageManager";
4
- export declare abstract class NodeModulesCollector<T extends Dependency<T, OptionalsType>, OptionalsType> {
5
- private readonly rootDir;
7
+ import type { Dependency, DependencyGraph, NodeModuleInfo, PackageJson } from "./types";
8
+ export declare abstract class NodeModulesCollector<ProdDepType extends Dependency<ProdDepType, OptionalDepType>, OptionalDepType> {
9
+ protected readonly rootDir: string;
6
10
  private readonly tempDirManager;
7
11
  private nodeModules;
8
- protected allDependencies: Map<string, T>;
12
+ protected allDependencies: Map<string, ProdDepType>;
9
13
  protected productionGraph: DependencyGraph;
14
+ protected pkgJsonCache: Map<string, string>;
15
+ protected memoResolvedModules: Map<string, Promise<string | null>>;
16
+ private importMetaResolve;
17
+ protected cache: ModuleCache;
18
+ protected isHoisted: Lazy<boolean>;
19
+ protected appPkgJson: Lazy<PackageJson>;
10
20
  constructor(rootDir: string, tempDirManager: TmpDir);
11
- getNodeModules(): Promise<NodeModuleInfo[]>;
21
+ getNodeModules({ cancellationToken, packageName }: {
22
+ cancellationToken: CancellationToken;
23
+ packageName: string;
24
+ }): Promise<NodeModuleInfo[]>;
12
25
  abstract readonly installOptions: {
13
26
  manager: PM;
14
27
  lockfile: string;
15
28
  };
16
29
  protected abstract getArgs(): string[];
17
- protected abstract parseDependenciesTree(jsonBlob: string): T;
18
- protected abstract extractProductionDependencyGraph(tree: Dependency<T, OptionalsType>, dependencyId: string): void;
19
- protected abstract collectAllDependencies(tree: Dependency<T, OptionalsType>): void;
20
- protected getDependenciesTree(): Promise<T>;
21
- protected resolvePath(filePath: string): string;
22
- private getTreeFromWorkspaces;
23
- private transToHoisterTree;
30
+ protected abstract parseDependenciesTree(jsonBlob: string): Promise<ProdDepType>;
31
+ protected abstract extractProductionDependencyGraph(tree: Dependency<ProdDepType, OptionalDepType>, dependencyId: string): Promise<void>;
32
+ protected abstract collectAllDependencies(tree: Dependency<ProdDepType, OptionalDepType>, appPackageName: string): Promise<void>;
33
+ protected getDependenciesTree(pm: PM): Promise<ProdDepType>;
34
+ protected existsMemoized(filePath: string): Promise<boolean>;
35
+ protected readJsonMemoized(filePath: string): Promise<PackageJson>;
36
+ protected lstatMemoized(filePath: string): Promise<fs.Stats>;
37
+ protected realpathMemoized(filePath: string): Promise<string>;
38
+ protected resolvePath(filePath: string): Promise<string>;
39
+ /**
40
+ * Resolves a package to its filesystem location using Node.js module resolution.
41
+ * Returns the directory containing the package, not the package.json path.
42
+ */
43
+ protected resolvePackageDir(packageName: string, fromDir: string): Promise<string | null>;
44
+ protected requireMemoized(pkgPath: string): PackageJson;
45
+ protected existsSyncMemoized(filePath: string): boolean;
46
+ protected cacheKey(pkg: ProdDepType): string;
47
+ protected packageVersionString(pkg: ProdDepType): string;
48
+ /**
49
+ * Parse a dependency identifier like "@scope/pkg@1.2.3" or "pkg@1.2.3"
50
+ */
51
+ protected parseNameVersion(identifier: string): {
52
+ name: string;
53
+ version: string;
54
+ };
55
+ protected getTreeFromWorkspaces(tree: ProdDepType, packageName: string): Promise<ProdDepType>;
56
+ private transformToHoisterTree;
24
57
  private _getNodeModules;
25
- static safeExec(command: string, args: string[], cwd: string): Promise<string>;
26
- streamCollectorCommandToJsonFile(command: string, args: string[], cwd: string, tempOutputFile: string): Promise<void>;
58
+ asyncExec(command: string, args: string[], cwd?: string): Promise<{
59
+ stdout: string | undefined;
60
+ stderr: string | undefined;
61
+ }>;
62
+ streamCollectorCommandToFile(command: string, args: string[], cwd: string, tempOutputFile: string): Promise<void>;
27
63
  }