@0xrama/bnpm 0.0.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 (204) hide show
  1. package/README.md +83 -0
  2. package/dist/package.json +45 -0
  3. package/dist/src/cache/archive.d.ts +15 -0
  4. package/dist/src/cache/archive.js +163 -0
  5. package/dist/src/cache/archive.js.map +1 -0
  6. package/dist/src/cache/commands.d.ts +15 -0
  7. package/dist/src/cache/commands.js +168 -0
  8. package/dist/src/cache/commands.js.map +1 -0
  9. package/dist/src/cache/quarantine.d.ts +18 -0
  10. package/dist/src/cache/quarantine.js +104 -0
  11. package/dist/src/cache/quarantine.js.map +1 -0
  12. package/dist/src/cache/store.d.ts +10 -0
  13. package/dist/src/cache/store.js +155 -0
  14. package/dist/src/cache/store.js.map +1 -0
  15. package/dist/src/cli.d.ts +2 -0
  16. package/dist/src/cli.js +4 -0
  17. package/dist/src/cli.js.map +1 -0
  18. package/dist/src/commands/diff.d.ts +34 -0
  19. package/dist/src/commands/diff.js +223 -0
  20. package/dist/src/commands/diff.js.map +1 -0
  21. package/dist/src/commands/doctor.d.ts +14 -0
  22. package/dist/src/commands/doctor.js +42 -0
  23. package/dist/src/commands/doctor.js.map +1 -0
  24. package/dist/src/commands/edit.d.ts +12 -0
  25. package/dist/src/commands/edit.js +100 -0
  26. package/dist/src/commands/edit.js.map +1 -0
  27. package/dist/src/commands/fund.d.ts +10 -0
  28. package/dist/src/commands/fund.js +32 -0
  29. package/dist/src/commands/fund.js.map +1 -0
  30. package/dist/src/commands/graph.d.ts +29 -0
  31. package/dist/src/commands/graph.js +90 -0
  32. package/dist/src/commands/graph.js.map +1 -0
  33. package/dist/src/commands/index.d.ts +20 -0
  34. package/dist/src/commands/index.js +1753 -0
  35. package/dist/src/commands/index.js.map +1 -0
  36. package/dist/src/commands/navigation.d.ts +2 -0
  37. package/dist/src/commands/navigation.js +47 -0
  38. package/dist/src/commands/navigation.js.map +1 -0
  39. package/dist/src/commands/outdated.d.ts +17 -0
  40. package/dist/src/commands/outdated.js +69 -0
  41. package/dist/src/commands/outdated.js.map +1 -0
  42. package/dist/src/commands/process.d.ts +11 -0
  43. package/dist/src/commands/process.js +189 -0
  44. package/dist/src/commands/process.js.map +1 -0
  45. package/dist/src/commands/prompts.d.ts +6 -0
  46. package/dist/src/commands/prompts.js +86 -0
  47. package/dist/src/commands/prompts.js.map +1 -0
  48. package/dist/src/commands/query.d.ts +48 -0
  49. package/dist/src/commands/query.js +639 -0
  50. package/dist/src/commands/query.js.map +1 -0
  51. package/dist/src/commands/rebuild.d.ts +16 -0
  52. package/dist/src/commands/rebuild.js +44 -0
  53. package/dist/src/commands/rebuild.js.map +1 -0
  54. package/dist/src/commands/sbom.d.ts +6 -0
  55. package/dist/src/commands/sbom.js +31 -0
  56. package/dist/src/commands/sbom.js.map +1 -0
  57. package/dist/src/commands/script-approvals.d.ts +22 -0
  58. package/dist/src/commands/script-approvals.js +128 -0
  59. package/dist/src/commands/script-approvals.js.map +1 -0
  60. package/dist/src/commands/shrinkwrap.d.ts +6 -0
  61. package/dist/src/commands/shrinkwrap.js +97 -0
  62. package/dist/src/commands/shrinkwrap.js.map +1 -0
  63. package/dist/src/commands/stage.d.ts +20 -0
  64. package/dist/src/commands/stage.js +40 -0
  65. package/dist/src/commands/stage.js.map +1 -0
  66. package/dist/src/commands/token.d.ts +2 -0
  67. package/dist/src/commands/token.js +47 -0
  68. package/dist/src/commands/token.js.map +1 -0
  69. package/dist/src/commands/trust.d.ts +5 -0
  70. package/dist/src/commands/trust.js +41 -0
  71. package/dist/src/commands/trust.js.map +1 -0
  72. package/dist/src/config/commands.d.ts +5 -0
  73. package/dist/src/config/commands.js +91 -0
  74. package/dist/src/config/commands.js.map +1 -0
  75. package/dist/src/config/configuration.d.ts +40 -0
  76. package/dist/src/config/configuration.js +157 -0
  77. package/dist/src/config/configuration.js.map +1 -0
  78. package/dist/src/config/interactive.d.ts +16 -0
  79. package/dist/src/config/interactive.js +19 -0
  80. package/dist/src/config/interactive.js.map +1 -0
  81. package/dist/src/config/paths.d.ts +22 -0
  82. package/dist/src/config/paths.js +46 -0
  83. package/dist/src/config/paths.js.map +1 -0
  84. package/dist/src/config/types.d.ts +15 -0
  85. package/dist/src/config/types.js +6 -0
  86. package/dist/src/config/types.js.map +1 -0
  87. package/dist/src/core/cli-parser.d.ts +102 -0
  88. package/dist/src/core/cli-parser.js +1148 -0
  89. package/dist/src/core/cli-parser.js.map +1 -0
  90. package/dist/src/core/cli-runner.d.ts +15 -0
  91. package/dist/src/core/cli-runner.js +261 -0
  92. package/dist/src/core/cli-runner.js.map +1 -0
  93. package/dist/src/core/exit-codes.d.ts +13 -0
  94. package/dist/src/core/exit-codes.js +13 -0
  95. package/dist/src/core/exit-codes.js.map +1 -0
  96. package/dist/src/core/output.d.ts +23 -0
  97. package/dist/src/core/output.js +123 -0
  98. package/dist/src/core/output.js.map +1 -0
  99. package/dist/src/installer/install.d.ts +73 -0
  100. package/dist/src/installer/install.js +596 -0
  101. package/dist/src/installer/install.js.map +1 -0
  102. package/dist/src/installer/mutations.d.ts +5 -0
  103. package/dist/src/installer/mutations.js +160 -0
  104. package/dist/src/installer/mutations.js.map +1 -0
  105. package/dist/src/linker/project-linker.d.ts +9 -0
  106. package/dist/src/linker/project-linker.js +223 -0
  107. package/dist/src/linker/project-linker.js.map +1 -0
  108. package/dist/src/lockfile/index.d.ts +27 -0
  109. package/dist/src/lockfile/index.js +221 -0
  110. package/dist/src/lockfile/index.js.map +1 -0
  111. package/dist/src/package/authoring.d.ts +31 -0
  112. package/dist/src/package/authoring.js +125 -0
  113. package/dist/src/package/authoring.js.map +1 -0
  114. package/dist/src/package/pack.d.ts +22 -0
  115. package/dist/src/package/pack.js +238 -0
  116. package/dist/src/package/pack.js.map +1 -0
  117. package/dist/src/package/provenance.d.ts +28 -0
  118. package/dist/src/package/provenance.js +162 -0
  119. package/dist/src/package/provenance.js.map +1 -0
  120. package/dist/src/package/publish.d.ts +28 -0
  121. package/dist/src/package/publish.js +189 -0
  122. package/dist/src/package/publish.js.map +1 -0
  123. package/dist/src/package/trusted-publishing.d.ts +7 -0
  124. package/dist/src/package/trusted-publishing.js +84 -0
  125. package/dist/src/package/trusted-publishing.js.map +1 -0
  126. package/dist/src/project/dependency-error.d.ts +3 -0
  127. package/dist/src/project/dependency-error.js +7 -0
  128. package/dist/src/project/dependency-error.js.map +1 -0
  129. package/dist/src/project/dev-engines.d.ts +10 -0
  130. package/dist/src/project/dev-engines.js +70 -0
  131. package/dist/src/project/dev-engines.js.map +1 -0
  132. package/dist/src/project/discovery.d.ts +6 -0
  133. package/dist/src/project/discovery.js +51 -0
  134. package/dist/src/project/discovery.js.map +1 -0
  135. package/dist/src/project/global.d.ts +3 -0
  136. package/dist/src/project/global.js +43 -0
  137. package/dist/src/project/global.js.map +1 -0
  138. package/dist/src/project/invalidation.d.ts +3 -0
  139. package/dist/src/project/invalidation.js +21 -0
  140. package/dist/src/project/invalidation.js.map +1 -0
  141. package/dist/src/project/link.d.ts +21 -0
  142. package/dist/src/project/link.js +152 -0
  143. package/dist/src/project/link.js.map +1 -0
  144. package/dist/src/project/manifest.d.ts +27 -0
  145. package/dist/src/project/manifest.js +378 -0
  146. package/dist/src/project/manifest.js.map +1 -0
  147. package/dist/src/project/pkg.d.ts +5 -0
  148. package/dist/src/project/pkg.js +94 -0
  149. package/dist/src/project/pkg.js.map +1 -0
  150. package/dist/src/project/recovery.d.ts +2 -0
  151. package/dist/src/project/recovery.js +82 -0
  152. package/dist/src/project/recovery.js.map +1 -0
  153. package/dist/src/project/workspaces.d.ts +4 -0
  154. package/dist/src/project/workspaces.js +59 -0
  155. package/dist/src/project/workspaces.js.map +1 -0
  156. package/dist/src/registry/account.d.ts +79 -0
  157. package/dist/src/registry/account.js +305 -0
  158. package/dist/src/registry/account.js.map +1 -0
  159. package/dist/src/registry/audit.d.ts +18 -0
  160. package/dist/src/registry/audit.js +74 -0
  161. package/dist/src/registry/audit.js.map +1 -0
  162. package/dist/src/registry/client.d.ts +19 -0
  163. package/dist/src/registry/client.js +102 -0
  164. package/dist/src/registry/client.js.map +1 -0
  165. package/dist/src/registry/configuration.d.ts +36 -0
  166. package/dist/src/registry/configuration.js +133 -0
  167. package/dist/src/registry/configuration.js.map +1 -0
  168. package/dist/src/registry/operations.d.ts +163 -0
  169. package/dist/src/registry/operations.js +502 -0
  170. package/dist/src/registry/operations.js.map +1 -0
  171. package/dist/src/registry/types.d.ts +30 -0
  172. package/dist/src/registry/types.js +2 -0
  173. package/dist/src/registry/types.js.map +1 -0
  174. package/dist/src/resolver/registry-resolver.d.ts +40 -0
  175. package/dist/src/resolver/registry-resolver.js +354 -0
  176. package/dist/src/resolver/registry-resolver.js.map +1 -0
  177. package/dist/src/resolver/source-provider.d.ts +17 -0
  178. package/dist/src/resolver/source-provider.js +336 -0
  179. package/dist/src/resolver/source-provider.js.map +1 -0
  180. package/dist/src/resolver/types.d.ts +28 -0
  181. package/dist/src/resolver/types.js +2 -0
  182. package/dist/src/resolver/types.js.map +1 -0
  183. package/dist/src/security/analyzer.d.ts +38 -0
  184. package/dist/src/security/analyzer.js +241 -0
  185. package/dist/src/security/analyzer.js.map +1 -0
  186. package/dist/src/security/audit.d.ts +19 -0
  187. package/dist/src/security/audit.js +61 -0
  188. package/dist/src/security/audit.js.map +1 -0
  189. package/dist/src/security/findings.d.ts +23 -0
  190. package/dist/src/security/findings.js +2 -0
  191. package/dist/src/security/findings.js.map +1 -0
  192. package/dist/src/security/integrity.d.ts +14 -0
  193. package/dist/src/security/integrity.js +40 -0
  194. package/dist/src/security/integrity.js.map +1 -0
  195. package/dist/src/security/policy.d.ts +16 -0
  196. package/dist/src/security/policy.js +24 -0
  197. package/dist/src/security/policy.js.map +1 -0
  198. package/dist/src/security/recent-release.d.ts +19 -0
  199. package/dist/src/security/recent-release.js +27 -0
  200. package/dist/src/security/recent-release.js.map +1 -0
  201. package/dist/src/security/script-runner.d.ts +13 -0
  202. package/dist/src/security/script-runner.js +73 -0
  203. package/dist/src/security/script-runner.js.map +1 -0
  204. package/package.json +45 -0
@@ -0,0 +1,152 @@
1
+ import { chmod, lstat, mkdir, readFile, realpath, rm, symlink, writeFile } from "node:fs/promises";
2
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
3
+ import { createBnpmPaths } from "../config/paths.js";
4
+ import { discoverProject } from "./discovery.js";
5
+ import { ManifestError } from "./manifest.js";
6
+ const packageName = /^(?:@[^/@\s]+\/)?[A-Za-z0-9][A-Za-z0-9._-]*$/;
7
+ async function manifest(root) {
8
+ const value = JSON.parse(await readFile(join(root, "package.json"), "utf8"));
9
+ if (typeof value.name !== "string" || !packageName.test(value.name) || typeof value.version !== "string")
10
+ throw new ManifestError(`${root}/package.json requires a valid name and version`);
11
+ const bin = {};
12
+ if (typeof value.bin === "string")
13
+ bin[value.name.includes("/") ? value.name.slice(value.name.lastIndexOf("/") + 1) : value.name] = value.bin;
14
+ else if (typeof value.bin === "object" && value.bin !== null && !Array.isArray(value.bin)) {
15
+ for (const [name, path] of Object.entries(value.bin))
16
+ if (/^[A-Za-z0-9._-]+$/.test(name) && typeof path === "string")
17
+ bin[name] = path;
18
+ }
19
+ for (const path of Object.values(bin))
20
+ if (!path || isAbsolute(path) || path.split(/[\\/]/).includes(".."))
21
+ throw new ManifestError(`${root}/package.json has an unsafe bin path`);
22
+ return { name: value.name, version: value.version, bin };
23
+ }
24
+ function packagePath(nodeModules, name) {
25
+ return join(nodeModules, ...name.split("/"));
26
+ }
27
+ async function replaceWithLink(path, target) {
28
+ try {
29
+ const info = await lstat(path);
30
+ if (!info.isSymbolicLink())
31
+ throw new ManifestError(`refusing to replace non-link path ${path}`);
32
+ await rm(path);
33
+ }
34
+ catch (error) {
35
+ if (error.code !== "ENOENT")
36
+ throw error;
37
+ }
38
+ await mkdir(dirname(path), { recursive: true });
39
+ const linkParent = await realpath(dirname(path));
40
+ const relativeTarget = process.platform === "win32" ? target : relative(linkParent, target) || ".";
41
+ await symlink(relativeTarget, path, process.platform === "win32" ? "junction" : "dir");
42
+ }
43
+ async function writeBins(binRoot, packageRoot, packageId, bins) {
44
+ await mkdir(binRoot, { recursive: true });
45
+ const canonicalBinRoot = await realpath(binRoot);
46
+ for (const [name, entry] of Object.entries(bins)) {
47
+ const executable = resolve(packageRoot, ...entry.split(/[\\/]/));
48
+ if (executable !== packageRoot && !executable.startsWith(`${packageRoot}${sep}`))
49
+ throw new ManifestError(`bin ${name} escapes linked package`);
50
+ const shim = join(binRoot, process.platform === "win32" ? `${name}.cmd` : name);
51
+ try {
52
+ if (process.platform === "win32") {
53
+ if (!(await readFile(shim, "utf8")).startsWith(`@REM bnpm-link:${packageId}\r\n`))
54
+ throw new ManifestError(`refusing to replace bin ${shim} owned by another package`);
55
+ }
56
+ else {
57
+ const info = await lstat(shim);
58
+ if (!info.isSymbolicLink() || await realpath(shim) !== executable)
59
+ throw new ManifestError(`refusing to replace bin ${shim} owned by another package`);
60
+ }
61
+ await rm(shim);
62
+ }
63
+ catch (error) {
64
+ if (error.code !== "ENOENT")
65
+ throw error;
66
+ }
67
+ if (process.platform === "win32")
68
+ await writeFile(shim, `@REM bnpm-link:${packageId}\r\n@node "${executable.replaceAll('"', '""')}" %*\r\n`, { mode: 0o755 });
69
+ else {
70
+ await symlink(relative(canonicalBinRoot, executable), shim);
71
+ await chmod(executable, (await lstat(executable)).mode | 0o111);
72
+ }
73
+ }
74
+ }
75
+ async function removeBins(binRoot, packageRoot, packageId, bins) {
76
+ for (const [name, entry] of Object.entries(bins)) {
77
+ const shim = join(binRoot, process.platform === "win32" ? `${name}.cmd` : name);
78
+ try {
79
+ if (process.platform === "win32") {
80
+ if ((await readFile(shim, "utf8")).startsWith(`@REM bnpm-link:${packageId}\r\n`))
81
+ await rm(shim);
82
+ }
83
+ else if ((await realpath(shim)) === resolve(packageRoot, ...entry.split(/[\\/]/)))
84
+ await rm(shim);
85
+ }
86
+ catch (error) {
87
+ if (error.code !== "ENOENT")
88
+ throw error;
89
+ }
90
+ }
91
+ }
92
+ async function removeOwnedLink(path, expectedTarget) {
93
+ const info = await lstat(path).catch((error) => error.code === "ENOENT" ? undefined : Promise.reject(error));
94
+ if (!info)
95
+ return;
96
+ if (!info.isSymbolicLink())
97
+ throw new ManifestError(`refusing to remove non-link path ${path}`);
98
+ if (expectedTarget && await realpath(path) !== await realpath(expectedTarget))
99
+ throw new ManifestError(`link ${path} does not point to the expected package`);
100
+ await rm(path);
101
+ }
102
+ export async function registerLink(options) {
103
+ const target = await realpath(options.cwd);
104
+ const value = await manifest(target);
105
+ const paths = options.paths ?? createBnpmPaths({ cwd: target });
106
+ const link = packagePath(join(paths.globalRoot, "node_modules"), value.name);
107
+ await replaceWithLink(link, target);
108
+ await writeBins(paths.globalBin, target, value.name, value.bin);
109
+ return { name: value.name, target };
110
+ }
111
+ export async function linkPackages(options) {
112
+ const discovered = await discoverProject(options.cwd);
113
+ const project = discovered?.importerRoot ?? options.cwd;
114
+ const paths = options.paths ?? createBnpmPaths({ cwd: project });
115
+ const results = [];
116
+ for (const name of options.names) {
117
+ if (!packageName.test(name))
118
+ throw new ManifestError(`invalid linked package name ${name}`);
119
+ const globalLink = packagePath(join(paths.globalRoot, "node_modules"), name);
120
+ const target = await realpath(globalLink);
121
+ const value = await manifest(target);
122
+ if (value.name !== name)
123
+ throw new ManifestError(`global link ${name} points to package ${value.name}`);
124
+ await replaceWithLink(packagePath(join(project, "node_modules"), name), target);
125
+ await writeBins(join(project, "node_modules", ".bin"), target, name, value.bin);
126
+ results.push({ name, target });
127
+ }
128
+ return results;
129
+ }
130
+ export async function unregisterLink(options) {
131
+ const paths = options.paths ?? createBnpmPaths({ cwd: options.cwd });
132
+ if (options.names.length === 0) {
133
+ const target = await realpath(options.cwd);
134
+ const value = await manifest(target);
135
+ await removeOwnedLink(packagePath(join(paths.globalRoot, "node_modules"), value.name), target);
136
+ await removeBins(paths.globalBin, target, value.name, value.bin);
137
+ return [value.name];
138
+ }
139
+ const discovered = await discoverProject(options.cwd);
140
+ const project = discovered?.importerRoot ?? options.cwd;
141
+ for (const name of options.names) {
142
+ if (!packageName.test(name))
143
+ throw new ManifestError(`invalid linked package name ${name}`);
144
+ const path = packagePath(join(project, "node_modules"), name);
145
+ const target = await realpath(path);
146
+ const value = await manifest(target);
147
+ await removeOwnedLink(path);
148
+ await removeBins(join(project, "node_modules", ".bin"), target, name, value.bin);
149
+ }
150
+ return [...options.names];
151
+ }
152
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/project/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,WAAW,GAAG,8CAA8C,CAAC;AAEnE,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAyD,CAAC;IACrI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,aAAa,CAAC,GAAG,IAAI,iDAAiD,CAAC,CAAC;IAC5L,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;QAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;SACzI,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1F,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzI,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,GAAG,IAAI,sCAAsC,CAAC,CAAC;IACnL,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAAC,WAAmB,EAAE,IAAY;IACpD,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,MAAc;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QACjG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC;IACnG,MAAM,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACzF,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,WAAmB,EAAE,SAAiB,EAAE,IAAsC;IACtH,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,IAAI,UAAU,KAAK,WAAW,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,GAAG,EAAE,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC;QAChJ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,SAAS,MAAM,CAAC;oBAAE,MAAM,IAAI,aAAa,CAAC,2BAA2B,IAAI,2BAA2B,CAAC,CAAC;YACzK,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,UAAU;oBAAE,MAAM,IAAI,aAAa,CAAC,2BAA2B,IAAI,2BAA2B,CAAC,CAAC;YACzJ,CAAC;YACD,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACtE,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,SAAS,CAAC,IAAI,EAAE,kBAAkB,SAAS,cAAc,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;aACzJ,CAAC;YACJ,MAAM,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,WAAmB,EAAE,SAAiB,EAAE,IAAsC;IACvH,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,SAAS,MAAM,CAAC;oBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACnG,CAAC;iBAAM,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACtG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,cAAuB;IAClE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpI,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAAE,MAAM,IAAI,aAAa,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;IAChG,IAAI,cAAc,IAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,QAAQ,CAAC,cAAc,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,QAAQ,IAAI,yCAAyC,CAAC,CAAC;IAC9J,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA6D;IAC9F,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgG;IACjI,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,UAAU,EAAE,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAuC,EAAE,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,aAAa,CAAC,eAAe,IAAI,sBAAsB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxG,MAAM,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAChF,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgG;IACnI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/F,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,UAAU,EAAE,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAC5F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,27 @@
1
+ export declare class ManifestError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export type DependencySection = "dependencies" | "devDependencies" | "optionalDependencies" | "peerDependencies";
5
+ export interface PackageManifest {
6
+ readonly path: string;
7
+ readonly bytes: string;
8
+ readonly name?: string;
9
+ readonly dependencies: Readonly<Partial<Record<DependencySection, Readonly<Record<string, string>>>>>;
10
+ readonly workspaces: readonly string[];
11
+ readonly overrides: Readonly<Record<string, string>>;
12
+ }
13
+ export interface ManifestMutation {
14
+ readonly operation: "add" | "remove";
15
+ readonly name: string;
16
+ readonly section: DependencySection;
17
+ readonly specifier?: string;
18
+ readonly exact?: boolean;
19
+ readonly noSave?: boolean;
20
+ }
21
+ export interface ManifestMutationPlan {
22
+ readonly path: string;
23
+ readonly bytes: string;
24
+ readonly changed: boolean;
25
+ }
26
+ export declare function parseManifest(bytes: string, path: string): PackageManifest;
27
+ export declare function planManifestMutation(manifest: PackageManifest, mutation: ManifestMutation): ManifestMutationPlan;
@@ -0,0 +1,378 @@
1
+ import npa from "npm-package-arg";
2
+ import semver from "semver";
3
+ export class ManifestError extends Error {
4
+ constructor(message) {
5
+ super(`Manifest error: ${message}`);
6
+ this.name = "ManifestError";
7
+ }
8
+ }
9
+ const packageName = /^(?:@[^/@\s]+\/)?[A-Za-z0-9][A-Za-z0-9._-]*$/;
10
+ const sections = ["dependencies", "devDependencies", "optionalDependencies", "peerDependencies"];
11
+ function strictJson(bytes, path) {
12
+ let index = 0;
13
+ function whitespace() {
14
+ while (/\s/.test(bytes[index] ?? ""))
15
+ index += 1;
16
+ }
17
+ function string() {
18
+ const start = index;
19
+ index += 1;
20
+ let escaped = false;
21
+ while (index < bytes.length) {
22
+ const character = bytes[index++] ?? "";
23
+ if (!escaped && character === '"') {
24
+ try {
25
+ return JSON.parse(bytes.slice(start, index));
26
+ }
27
+ catch {
28
+ throw new ManifestError(`${path}: invalid JSON string`);
29
+ }
30
+ }
31
+ escaped = !escaped && character === "\\";
32
+ if (character !== "\\")
33
+ escaped = false;
34
+ }
35
+ throw new ManifestError(`${path}: unterminated JSON string`);
36
+ }
37
+ function value() {
38
+ whitespace();
39
+ const character = bytes[index];
40
+ if (character === '"')
41
+ return string();
42
+ if (character === "{") {
43
+ index += 1;
44
+ const result = {};
45
+ const keys = new Set();
46
+ whitespace();
47
+ if (bytes[index] === "}") {
48
+ index += 1;
49
+ return result;
50
+ }
51
+ while (true) {
52
+ whitespace();
53
+ if (bytes[index] !== '"')
54
+ throw new ManifestError(`${path}: object key must be a string`);
55
+ const key = string();
56
+ if (keys.has(key))
57
+ throw new ManifestError(`${path}: duplicate key ${key}`);
58
+ keys.add(key);
59
+ whitespace();
60
+ if (bytes[index++] !== ":")
61
+ throw new ManifestError(`${path}: expected ':' after ${key}`);
62
+ result[key] = value();
63
+ whitespace();
64
+ const separator = bytes[index++];
65
+ if (separator === "}")
66
+ return result;
67
+ if (separator !== ",")
68
+ throw new ManifestError(`${path}: expected ',' or '}'`);
69
+ }
70
+ }
71
+ if (character === "[") {
72
+ index += 1;
73
+ const result = [];
74
+ whitespace();
75
+ if (bytes[index] === "]") {
76
+ index += 1;
77
+ return result;
78
+ }
79
+ while (true) {
80
+ result.push(value());
81
+ whitespace();
82
+ const separator = bytes[index++];
83
+ if (separator === "]")
84
+ return result;
85
+ if (separator !== ",")
86
+ throw new ManifestError(`${path}: expected ',' or ']'`);
87
+ }
88
+ }
89
+ const primitive = /^(?:true|false|null|-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)/.exec(bytes.slice(index))?.[0];
90
+ if (!primitive)
91
+ throw new ManifestError(`${path}: invalid JSON value`);
92
+ index += primitive.length;
93
+ return JSON.parse(primitive);
94
+ }
95
+ const parsed = value();
96
+ whitespace();
97
+ if (index !== bytes.length)
98
+ throw new ManifestError(`${path}: unexpected trailing JSON`);
99
+ return parsed;
100
+ }
101
+ function record(value, path, field) {
102
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
103
+ throw new ManifestError(`${path}: ${field} must be an object`);
104
+ }
105
+ return value;
106
+ }
107
+ function validateSpecifier(name, specifier, path) {
108
+ if (!packageName.test(name))
109
+ throw new ManifestError(`${path}: invalid dependency name ${name}`);
110
+ try {
111
+ const parsed = npa(specifier);
112
+ if (parsed.type === "directory" && specifier.includes("file:./"))
113
+ return;
114
+ if (parsed.type === "directory" && specifier.includes("file:../"))
115
+ return;
116
+ if (parsed.type === "remote") {
117
+ const url = new URL(parsed.fetchSpec);
118
+ if (url.protocol === "https:" && !url.username && !url.password && !url.hash)
119
+ return;
120
+ }
121
+ if (parsed.type === "git") {
122
+ const hosted = parsed.hosted;
123
+ const value = typeof parsed.fetchSpec === "string" ? parsed.fetchSpec : hosted?.https({ noCommittish: true, noGitPlus: true });
124
+ const url = new URL(value ?? "");
125
+ const secureTransport = (url.protocol === "https:" && !url.username) || url.protocol === "ssh:";
126
+ if (secureTransport && !url.password && !url.search && !url.hash && (parsed.gitRange === undefined || semver.validRange(parsed.gitRange)))
127
+ return;
128
+ }
129
+ if (parsed.type === "version" || parsed.type === "range" || parsed.type === "tag" || parsed.type === "alias")
130
+ return;
131
+ }
132
+ catch {
133
+ // Normalized workspace syntax is not understood by npm-package-arg.
134
+ if (/^(?:@[^/@\s]+\/)?[A-Za-z0-9][A-Za-z0-9._-]*@workspace:(?:[*~^]|[~^]?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/.test(`${name}@${specifier}`))
135
+ return;
136
+ }
137
+ throw new ManifestError(`${path}: unsupported dependency specification for ${name}`);
138
+ }
139
+ function workspacePatterns(value, path) {
140
+ if (value === undefined)
141
+ return [];
142
+ const patterns = Array.isArray(value) ? value : record(value, path, "workspaces").packages;
143
+ if (!Array.isArray(patterns) || patterns.some((pattern) => typeof pattern !== "string" || pattern.length === 0)) {
144
+ throw new ManifestError(`${path}: workspaces must be an array of non-empty strings`);
145
+ }
146
+ return [...patterns];
147
+ }
148
+ export function parseManifest(bytes, path) {
149
+ const root = record(strictJson(bytes, path), path, "root");
150
+ if (root.name !== undefined && (typeof root.name !== "string" || !packageName.test(root.name))) {
151
+ throw new ManifestError(`${path}: name must be a valid package name`);
152
+ }
153
+ const dependencies = {};
154
+ for (const section of sections) {
155
+ if (root[section] === undefined)
156
+ continue;
157
+ const entries = record(root[section], path, section);
158
+ const parsed = {};
159
+ for (const [name, specifier] of Object.entries(entries)) {
160
+ if (typeof specifier !== "string")
161
+ throw new ManifestError(`${path}: ${section}.${name} must be a string`);
162
+ validateSpecifier(name, specifier, path);
163
+ parsed[name] = specifier;
164
+ }
165
+ dependencies[section] = parsed;
166
+ }
167
+ const overrides = {};
168
+ if (root.overrides !== undefined) {
169
+ for (const [name, specifier] of Object.entries(record(root.overrides, path, "overrides"))) {
170
+ if (typeof specifier !== "string")
171
+ throw new ManifestError(`${path}: overrides.${name} must be a string`);
172
+ validateSpecifier(name, specifier, path);
173
+ overrides[name] = specifier;
174
+ }
175
+ }
176
+ return {
177
+ path,
178
+ bytes,
179
+ ...(root.name === undefined ? {} : { name: root.name }),
180
+ dependencies,
181
+ workspaces: workspacePatterns(root.workspaces, path),
182
+ overrides,
183
+ };
184
+ }
185
+ function closingBrace(bytes, start) {
186
+ let depth = 0;
187
+ let quoted = false;
188
+ let escaped = false;
189
+ for (let index = start; index < bytes.length; index += 1) {
190
+ const character = bytes[index] ?? "";
191
+ if (quoted) {
192
+ if (!escaped && character === '"')
193
+ quoted = false;
194
+ escaped = !escaped && character === "\\";
195
+ if (character !== "\\")
196
+ escaped = false;
197
+ continue;
198
+ }
199
+ if (character === '"')
200
+ quoted = true;
201
+ if (character === "{")
202
+ depth += 1;
203
+ if (character === "}") {
204
+ depth -= 1;
205
+ if (depth === 0)
206
+ return index;
207
+ }
208
+ }
209
+ throw new ManifestError("manifest object is not closed");
210
+ }
211
+ function sectionRange(bytes, section) {
212
+ let index = bytes.indexOf("{");
213
+ if (index < 0)
214
+ throw new ManifestError("manifest root is not an object");
215
+ index += 1;
216
+ while (index < bytes.length) {
217
+ while (/\s/.test(bytes[index] ?? ""))
218
+ index += 1;
219
+ if (bytes[index] === "}")
220
+ return undefined;
221
+ if (bytes[index] !== '"')
222
+ throw new ManifestError("manifest object key must be a string");
223
+ const keyStart = index;
224
+ index += 1;
225
+ let escaped = false;
226
+ while (index < bytes.length) {
227
+ const character = bytes[index++] ?? "";
228
+ if (!escaped && character === '"')
229
+ break;
230
+ escaped = character === "\\" && !escaped;
231
+ if (character !== "\\")
232
+ escaped = false;
233
+ }
234
+ const key = JSON.parse(bytes.slice(keyStart, index));
235
+ while (/\s/.test(bytes[index] ?? ""))
236
+ index += 1;
237
+ if (bytes[index++] !== ":")
238
+ throw new ManifestError(`manifest expected ':' after ${key}`);
239
+ while (/\s/.test(bytes[index] ?? ""))
240
+ index += 1;
241
+ const valueStart = index;
242
+ if (key === section) {
243
+ if (bytes[valueStart] !== "{")
244
+ throw new ManifestError(`manifest ${section} does not contain an object`);
245
+ return { start: valueStart, end: closingBrace(bytes, valueStart) };
246
+ }
247
+ let depth = 0;
248
+ let quoted = false;
249
+ escaped = false;
250
+ while (index < bytes.length) {
251
+ const character = bytes[index] ?? "";
252
+ if (quoted) {
253
+ index += 1;
254
+ if (!escaped && character === '"')
255
+ quoted = false;
256
+ escaped = character === "\\" && !escaped;
257
+ if (character !== "\\")
258
+ escaped = false;
259
+ continue;
260
+ }
261
+ if (character === '"')
262
+ quoted = true;
263
+ else if (character === "{" || character === "[")
264
+ depth += 1;
265
+ else if (character === "}" || character === "]") {
266
+ if (depth === 0)
267
+ break;
268
+ depth -= 1;
269
+ }
270
+ else if (character === "," && depth === 0)
271
+ break;
272
+ index += 1;
273
+ }
274
+ if (bytes[index] === ",")
275
+ index += 1;
276
+ }
277
+ return undefined;
278
+ }
279
+ function indentation(bytes, position) {
280
+ const lineStart = bytes.lastIndexOf("\n", position) + 1;
281
+ return /^[\t ]*/.exec(bytes.slice(lineStart))?.[0] ?? "";
282
+ }
283
+ function addToExistingSection(manifest, mutation, range) {
284
+ const specifier = mutation.specifier;
285
+ if (!specifier)
286
+ throw new ManifestError("add requires a dependency specification");
287
+ validateSpecifier(mutation.name, specifier, manifest.path);
288
+ const current = manifest.dependencies[mutation.section] ?? {};
289
+ const previous = current[mutation.name];
290
+ const saved = mutation.exact ? specifier.replace(/^[~^]/, "") : specifier;
291
+ if (previous === saved)
292
+ return manifest.bytes;
293
+ const newline = manifest.bytes.includes("\r\n") ? "\r\n" : "\n";
294
+ const childIndent = Object.keys(current).length > 0 ? indentation(manifest.bytes, range.end - 1) + (indentation(manifest.bytes, range.end - 1) === indentation(manifest.bytes, range.start) ? "\t" : "") : indentation(manifest.bytes, range.start) + "\t";
295
+ const property = `${JSON.stringify(mutation.name)}: ${JSON.stringify(saved)}`;
296
+ if (previous !== undefined) {
297
+ const expression = new RegExp(`(${JSON.stringify(mutation.name).replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*:\\s*)"(?:[^"\\\\]|\\\\.)*"`);
298
+ const inside = manifest.bytes.slice(range.start, range.end + 1);
299
+ return `${manifest.bytes.slice(0, range.start)}${inside.replace(expression, `$1${JSON.stringify(saved)}`)}${manifest.bytes.slice(range.end + 1)}`;
300
+ }
301
+ const beforeClosing = manifest.bytes.slice(range.start + 1, range.end);
302
+ const hasEntries = Object.keys(current).length > 0;
303
+ if (hasEntries) {
304
+ const trailing = /\s*$/.exec(beforeClosing)?.[0] ?? "";
305
+ const content = beforeClosing.slice(0, beforeClosing.length - trailing.length);
306
+ return `${manifest.bytes.slice(0, range.start + 1)}${content},${newline}${childIndent}${property}${trailing}${manifest.bytes.slice(range.end)}`;
307
+ }
308
+ const insertion = `${newline}${childIndent}${property}${newline}${indentation(manifest.bytes, range.start)}`;
309
+ return `${manifest.bytes.slice(0, range.end)}${insertion}${manifest.bytes.slice(range.end)}`;
310
+ }
311
+ function addSection(manifest, mutation) {
312
+ const specifier = mutation.specifier;
313
+ if (!specifier)
314
+ throw new ManifestError("add requires a dependency specification");
315
+ validateSpecifier(mutation.name, specifier, manifest.path);
316
+ const saved = mutation.exact ? specifier.replace(/^[~^]/, "") : specifier;
317
+ const rootStart = manifest.bytes.indexOf("{");
318
+ const rootEnd = closingBrace(manifest.bytes, rootStart);
319
+ const newline = manifest.bytes.includes("\r\n") ? "\r\n" : "\n";
320
+ const inside = manifest.bytes.slice(rootStart + 1, rootEnd);
321
+ const trailing = /\s*$/.exec(inside)?.[0] ?? "";
322
+ const content = inside.slice(0, inside.length - trailing.length);
323
+ const detectedIndent = /(?:\r?\n)([\t ]+)"/.exec(inside)?.[1];
324
+ const childIndent = detectedIndent ?? " ";
325
+ const indentUnit = childIndent.startsWith("\t") ? "\t" : " ";
326
+ const sectionBytes = `${JSON.stringify(mutation.section)}: {${newline}${childIndent}${indentUnit}${JSON.stringify(mutation.name)}: ${JSON.stringify(saved)}${newline}${childIndent}}`;
327
+ const prefix = content.trim().length === 0 ? "" : `${content},`;
328
+ const replacement = `${prefix}${newline}${childIndent}${sectionBytes}${trailing.length === 0 ? `${newline}${indentation(manifest.bytes, rootStart)}` : trailing}`;
329
+ return `${manifest.bytes.slice(0, rootStart + 1)}${replacement}${manifest.bytes.slice(rootEnd)}`;
330
+ }
331
+ function removeFromSection(manifest, mutation, range) {
332
+ const escapedName = JSON.stringify(mutation.name).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
333
+ const inside = manifest.bytes.slice(range.start + 1, range.end);
334
+ const expression = new RegExp(`${escapedName}\\s*:\\s*"(?:[^"\\\\]|\\\\.)*"`);
335
+ const match = expression.exec(inside);
336
+ if (!match || match.index === undefined)
337
+ return manifest.bytes;
338
+ let start = match.index;
339
+ let end = start + match[0].length;
340
+ let cursor = end;
341
+ while (/\s/.test(inside[cursor] ?? ""))
342
+ cursor += 1;
343
+ if (inside[cursor] === ",") {
344
+ end = cursor + 1;
345
+ while (/\s/.test(inside[end] ?? ""))
346
+ end += 1;
347
+ }
348
+ else {
349
+ cursor = start - 1;
350
+ while (cursor >= 0 && /\s/.test(inside[cursor] ?? ""))
351
+ cursor -= 1;
352
+ if (inside[cursor] === ",")
353
+ start = cursor;
354
+ }
355
+ const changed = `${inside.slice(0, start)}${inside.slice(end)}`;
356
+ return `${manifest.bytes.slice(0, range.start + 1)}${changed}${manifest.bytes.slice(range.end)}`;
357
+ }
358
+ export function planManifestMutation(manifest, mutation) {
359
+ if (!packageName.test(mutation.name))
360
+ throw new ManifestError(`invalid dependency name ${mutation.name}`);
361
+ if (mutation.noSave)
362
+ throw new ManifestError("no-save mutations do not modify package.json");
363
+ const range = sectionRange(manifest.bytes, mutation.section);
364
+ if (mutation.operation === "remove") {
365
+ if (!range || manifest.dependencies[mutation.section]?.[mutation.name] === undefined) {
366
+ return { path: manifest.path, bytes: manifest.bytes, changed: false };
367
+ }
368
+ const bytes = removeFromSection(manifest, mutation, range);
369
+ return { path: manifest.path, bytes, changed: bytes !== manifest.bytes };
370
+ }
371
+ if (!range) {
372
+ const bytes = addSection(manifest, mutation);
373
+ return { path: manifest.path, bytes, changed: bytes !== manifest.bytes };
374
+ }
375
+ const bytes = addToExistingSection(manifest, mutation, range);
376
+ return { path: manifest.path, bytes, changed: bytes !== manifest.bytes };
377
+ }
378
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/project/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function packageProperties(options: {
2
+ readonly directory: string;
3
+ readonly action: "get" | "set" | "delete";
4
+ readonly operands: readonly string[];
5
+ }): Promise<unknown>;