@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.
- package/README.md +83 -0
- package/dist/package.json +45 -0
- package/dist/src/cache/archive.d.ts +15 -0
- package/dist/src/cache/archive.js +163 -0
- package/dist/src/cache/archive.js.map +1 -0
- package/dist/src/cache/commands.d.ts +15 -0
- package/dist/src/cache/commands.js +168 -0
- package/dist/src/cache/commands.js.map +1 -0
- package/dist/src/cache/quarantine.d.ts +18 -0
- package/dist/src/cache/quarantine.js +104 -0
- package/dist/src/cache/quarantine.js.map +1 -0
- package/dist/src/cache/store.d.ts +10 -0
- package/dist/src/cache/store.js +155 -0
- package/dist/src/cache/store.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +4 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/diff.d.ts +34 -0
- package/dist/src/commands/diff.js +223 -0
- package/dist/src/commands/diff.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +14 -0
- package/dist/src/commands/doctor.js +42 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/edit.d.ts +12 -0
- package/dist/src/commands/edit.js +100 -0
- package/dist/src/commands/edit.js.map +1 -0
- package/dist/src/commands/fund.d.ts +10 -0
- package/dist/src/commands/fund.js +32 -0
- package/dist/src/commands/fund.js.map +1 -0
- package/dist/src/commands/graph.d.ts +29 -0
- package/dist/src/commands/graph.js +90 -0
- package/dist/src/commands/graph.js.map +1 -0
- package/dist/src/commands/index.d.ts +20 -0
- package/dist/src/commands/index.js +1753 -0
- package/dist/src/commands/index.js.map +1 -0
- package/dist/src/commands/navigation.d.ts +2 -0
- package/dist/src/commands/navigation.js +47 -0
- package/dist/src/commands/navigation.js.map +1 -0
- package/dist/src/commands/outdated.d.ts +17 -0
- package/dist/src/commands/outdated.js +69 -0
- package/dist/src/commands/outdated.js.map +1 -0
- package/dist/src/commands/process.d.ts +11 -0
- package/dist/src/commands/process.js +189 -0
- package/dist/src/commands/process.js.map +1 -0
- package/dist/src/commands/prompts.d.ts +6 -0
- package/dist/src/commands/prompts.js +86 -0
- package/dist/src/commands/prompts.js.map +1 -0
- package/dist/src/commands/query.d.ts +48 -0
- package/dist/src/commands/query.js +639 -0
- package/dist/src/commands/query.js.map +1 -0
- package/dist/src/commands/rebuild.d.ts +16 -0
- package/dist/src/commands/rebuild.js +44 -0
- package/dist/src/commands/rebuild.js.map +1 -0
- package/dist/src/commands/sbom.d.ts +6 -0
- package/dist/src/commands/sbom.js +31 -0
- package/dist/src/commands/sbom.js.map +1 -0
- package/dist/src/commands/script-approvals.d.ts +22 -0
- package/dist/src/commands/script-approvals.js +128 -0
- package/dist/src/commands/script-approvals.js.map +1 -0
- package/dist/src/commands/shrinkwrap.d.ts +6 -0
- package/dist/src/commands/shrinkwrap.js +97 -0
- package/dist/src/commands/shrinkwrap.js.map +1 -0
- package/dist/src/commands/stage.d.ts +20 -0
- package/dist/src/commands/stage.js +40 -0
- package/dist/src/commands/stage.js.map +1 -0
- package/dist/src/commands/token.d.ts +2 -0
- package/dist/src/commands/token.js +47 -0
- package/dist/src/commands/token.js.map +1 -0
- package/dist/src/commands/trust.d.ts +5 -0
- package/dist/src/commands/trust.js +41 -0
- package/dist/src/commands/trust.js.map +1 -0
- package/dist/src/config/commands.d.ts +5 -0
- package/dist/src/config/commands.js +91 -0
- package/dist/src/config/commands.js.map +1 -0
- package/dist/src/config/configuration.d.ts +40 -0
- package/dist/src/config/configuration.js +157 -0
- package/dist/src/config/configuration.js.map +1 -0
- package/dist/src/config/interactive.d.ts +16 -0
- package/dist/src/config/interactive.js +19 -0
- package/dist/src/config/interactive.js.map +1 -0
- package/dist/src/config/paths.d.ts +22 -0
- package/dist/src/config/paths.js +46 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/config/types.d.ts +15 -0
- package/dist/src/config/types.js +6 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/core/cli-parser.d.ts +102 -0
- package/dist/src/core/cli-parser.js +1148 -0
- package/dist/src/core/cli-parser.js.map +1 -0
- package/dist/src/core/cli-runner.d.ts +15 -0
- package/dist/src/core/cli-runner.js +261 -0
- package/dist/src/core/cli-runner.js.map +1 -0
- package/dist/src/core/exit-codes.d.ts +13 -0
- package/dist/src/core/exit-codes.js +13 -0
- package/dist/src/core/exit-codes.js.map +1 -0
- package/dist/src/core/output.d.ts +23 -0
- package/dist/src/core/output.js +123 -0
- package/dist/src/core/output.js.map +1 -0
- package/dist/src/installer/install.d.ts +73 -0
- package/dist/src/installer/install.js +596 -0
- package/dist/src/installer/install.js.map +1 -0
- package/dist/src/installer/mutations.d.ts +5 -0
- package/dist/src/installer/mutations.js +160 -0
- package/dist/src/installer/mutations.js.map +1 -0
- package/dist/src/linker/project-linker.d.ts +9 -0
- package/dist/src/linker/project-linker.js +223 -0
- package/dist/src/linker/project-linker.js.map +1 -0
- package/dist/src/lockfile/index.d.ts +27 -0
- package/dist/src/lockfile/index.js +221 -0
- package/dist/src/lockfile/index.js.map +1 -0
- package/dist/src/package/authoring.d.ts +31 -0
- package/dist/src/package/authoring.js +125 -0
- package/dist/src/package/authoring.js.map +1 -0
- package/dist/src/package/pack.d.ts +22 -0
- package/dist/src/package/pack.js +238 -0
- package/dist/src/package/pack.js.map +1 -0
- package/dist/src/package/provenance.d.ts +28 -0
- package/dist/src/package/provenance.js +162 -0
- package/dist/src/package/provenance.js.map +1 -0
- package/dist/src/package/publish.d.ts +28 -0
- package/dist/src/package/publish.js +189 -0
- package/dist/src/package/publish.js.map +1 -0
- package/dist/src/package/trusted-publishing.d.ts +7 -0
- package/dist/src/package/trusted-publishing.js +84 -0
- package/dist/src/package/trusted-publishing.js.map +1 -0
- package/dist/src/project/dependency-error.d.ts +3 -0
- package/dist/src/project/dependency-error.js +7 -0
- package/dist/src/project/dependency-error.js.map +1 -0
- package/dist/src/project/dev-engines.d.ts +10 -0
- package/dist/src/project/dev-engines.js +70 -0
- package/dist/src/project/dev-engines.js.map +1 -0
- package/dist/src/project/discovery.d.ts +6 -0
- package/dist/src/project/discovery.js +51 -0
- package/dist/src/project/discovery.js.map +1 -0
- package/dist/src/project/global.d.ts +3 -0
- package/dist/src/project/global.js +43 -0
- package/dist/src/project/global.js.map +1 -0
- package/dist/src/project/invalidation.d.ts +3 -0
- package/dist/src/project/invalidation.js +21 -0
- package/dist/src/project/invalidation.js.map +1 -0
- package/dist/src/project/link.d.ts +21 -0
- package/dist/src/project/link.js +152 -0
- package/dist/src/project/link.js.map +1 -0
- package/dist/src/project/manifest.d.ts +27 -0
- package/dist/src/project/manifest.js +378 -0
- package/dist/src/project/manifest.js.map +1 -0
- package/dist/src/project/pkg.d.ts +5 -0
- package/dist/src/project/pkg.js +94 -0
- package/dist/src/project/pkg.js.map +1 -0
- package/dist/src/project/recovery.d.ts +2 -0
- package/dist/src/project/recovery.js +82 -0
- package/dist/src/project/recovery.js.map +1 -0
- package/dist/src/project/workspaces.d.ts +4 -0
- package/dist/src/project/workspaces.js +59 -0
- package/dist/src/project/workspaces.js.map +1 -0
- package/dist/src/registry/account.d.ts +79 -0
- package/dist/src/registry/account.js +305 -0
- package/dist/src/registry/account.js.map +1 -0
- package/dist/src/registry/audit.d.ts +18 -0
- package/dist/src/registry/audit.js +74 -0
- package/dist/src/registry/audit.js.map +1 -0
- package/dist/src/registry/client.d.ts +19 -0
- package/dist/src/registry/client.js +102 -0
- package/dist/src/registry/client.js.map +1 -0
- package/dist/src/registry/configuration.d.ts +36 -0
- package/dist/src/registry/configuration.js +133 -0
- package/dist/src/registry/configuration.js.map +1 -0
- package/dist/src/registry/operations.d.ts +163 -0
- package/dist/src/registry/operations.js +502 -0
- package/dist/src/registry/operations.js.map +1 -0
- package/dist/src/registry/types.d.ts +30 -0
- package/dist/src/registry/types.js +2 -0
- package/dist/src/registry/types.js.map +1 -0
- package/dist/src/resolver/registry-resolver.d.ts +40 -0
- package/dist/src/resolver/registry-resolver.js +354 -0
- package/dist/src/resolver/registry-resolver.js.map +1 -0
- package/dist/src/resolver/source-provider.d.ts +17 -0
- package/dist/src/resolver/source-provider.js +336 -0
- package/dist/src/resolver/source-provider.js.map +1 -0
- package/dist/src/resolver/types.d.ts +28 -0
- package/dist/src/resolver/types.js +2 -0
- package/dist/src/resolver/types.js.map +1 -0
- package/dist/src/security/analyzer.d.ts +38 -0
- package/dist/src/security/analyzer.js +241 -0
- package/dist/src/security/analyzer.js.map +1 -0
- package/dist/src/security/audit.d.ts +19 -0
- package/dist/src/security/audit.js +61 -0
- package/dist/src/security/audit.js.map +1 -0
- package/dist/src/security/findings.d.ts +23 -0
- package/dist/src/security/findings.js +2 -0
- package/dist/src/security/findings.js.map +1 -0
- package/dist/src/security/integrity.d.ts +14 -0
- package/dist/src/security/integrity.js +40 -0
- package/dist/src/security/integrity.js.map +1 -0
- package/dist/src/security/policy.d.ts +16 -0
- package/dist/src/security/policy.js +24 -0
- package/dist/src/security/policy.js.map +1 -0
- package/dist/src/security/recent-release.d.ts +19 -0
- package/dist/src/security/recent-release.js +27 -0
- package/dist/src/security/recent-release.js.map +1 -0
- package/dist/src/security/script-runner.d.ts +13 -0
- package/dist/src/security/script-runner.js +73 -0
- package/dist/src/security/script-runner.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import npa from "npm-package-arg";
|
|
2
|
+
import semver from "semver";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import { mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
|
|
6
|
+
import { dirname, join, resolve, sep } from "node:path";
|
|
7
|
+
import { pathToFileURL } from "node:url";
|
|
8
|
+
import { extractPackageArchive } from "../cache/archive.js";
|
|
9
|
+
import { downloadUnverifiedToQuarantine } from "../cache/quarantine.js";
|
|
10
|
+
import { parseManifest } from "../project/manifest.js";
|
|
11
|
+
import { ResolutionError } from "./registry-resolver.js";
|
|
12
|
+
import { packPackage } from "../package/pack.js";
|
|
13
|
+
async function defaultRunGit(args, cwd, signal) {
|
|
14
|
+
const child = spawn("git", ["-c", "core.hooksPath=/dev/null", "-c", "protocol.file.allow=never", ...args], {
|
|
15
|
+
cwd,
|
|
16
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
17
|
+
windowsHide: true,
|
|
18
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: "0", GIT_OPTIONAL_LOCKS: "0", GIT_SSH_COMMAND: "ssh -o BatchMode=yes" },
|
|
19
|
+
});
|
|
20
|
+
const stdout = [];
|
|
21
|
+
let bytes = 0;
|
|
22
|
+
let exceeded = false;
|
|
23
|
+
const consume = (chunk, keep) => {
|
|
24
|
+
bytes += chunk.length;
|
|
25
|
+
if (bytes > 1024 * 1024) {
|
|
26
|
+
exceeded = true;
|
|
27
|
+
child.kill("SIGTERM");
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (keep)
|
|
31
|
+
stdout.push(Buffer.from(chunk));
|
|
32
|
+
};
|
|
33
|
+
child.stdout.on("data", (chunk) => consume(chunk, true));
|
|
34
|
+
child.stderr.on("data", (chunk) => consume(chunk, false));
|
|
35
|
+
const abort = () => { child.kill("SIGTERM"); };
|
|
36
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
37
|
+
const timer = setTimeout(() => child.kill("SIGTERM"), 2 * 60_000);
|
|
38
|
+
timer.unref();
|
|
39
|
+
try {
|
|
40
|
+
const result = await new Promise((resolvePromise, reject) => {
|
|
41
|
+
child.once("error", reject);
|
|
42
|
+
child.once("close", (code, closedSignal) => resolvePromise({ code, signal: closedSignal }));
|
|
43
|
+
});
|
|
44
|
+
if (signal?.aborted)
|
|
45
|
+
throw signal.reason;
|
|
46
|
+
if (exceeded)
|
|
47
|
+
throw new ResolutionError("git produced more than 1 MiB of output");
|
|
48
|
+
if (result.code !== 0)
|
|
49
|
+
throw new ResolutionError(`git ${args[0] ?? "command"} failed (${result.code ?? result.signal})`);
|
|
50
|
+
return Buffer.concat(stdout).toString("utf8").trim();
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
clearTimeout(timer);
|
|
54
|
+
signal?.removeEventListener("abort", abort);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function gitTagForRange(output, range) {
|
|
58
|
+
const validRange = semver.validRange(range);
|
|
59
|
+
if (!validRange)
|
|
60
|
+
throw new ResolutionError(`invalid git semver range ${range}`);
|
|
61
|
+
const tags = new Map();
|
|
62
|
+
for (const line of output.split(/\r?\n/)) {
|
|
63
|
+
const match = /^[a-f0-9]{40}\s+refs\/tags\/(.+?)(?:\^\{\})?$/i.exec(line.trim());
|
|
64
|
+
const tag = match?.[1];
|
|
65
|
+
if (!tag)
|
|
66
|
+
continue;
|
|
67
|
+
const version = semver.valid(tag);
|
|
68
|
+
if (version && semver.satisfies(version, validRange))
|
|
69
|
+
tags.set(tag, version);
|
|
70
|
+
}
|
|
71
|
+
const selected = [...tags].sort(([leftTag, leftVersion], [rightTag, rightVersion]) => semver.rcompare(leftVersion, rightVersion) || leftTag.localeCompare(rightTag))[0];
|
|
72
|
+
if (!selected)
|
|
73
|
+
throw new ResolutionError(`no git tag satisfies ${range}`);
|
|
74
|
+
return `refs/tags/${selected[0]}`;
|
|
75
|
+
}
|
|
76
|
+
function safeGitSubdir(value) {
|
|
77
|
+
if (value === undefined)
|
|
78
|
+
return undefined;
|
|
79
|
+
const normalized = value.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
80
|
+
if (!normalized || normalized.includes("\\") || normalized.split("/").some((part) => !part || part === "." || part === "..") || !/^[A-Za-z0-9._/-]+$/.test(normalized)) {
|
|
81
|
+
throw new ResolutionError("git package subdirectory is unsafe");
|
|
82
|
+
}
|
|
83
|
+
return normalized;
|
|
84
|
+
}
|
|
85
|
+
function gitBuildRequired(manifest) {
|
|
86
|
+
const scripts = manifest.scripts;
|
|
87
|
+
const hasBuildScript = typeof scripts === "object" && scripts !== null && !Array.isArray(scripts) && ["preinstall", "install", "postinstall", "prepare"].some((stage) => typeof scripts[stage] === "string");
|
|
88
|
+
const bundles = manifest.bundleDependencies ?? manifest.bundledDependencies;
|
|
89
|
+
return hasBuildScript || manifest.workspaces !== undefined || bundles === true || (Array.isArray(bundles) && bundles.length > 0);
|
|
90
|
+
}
|
|
91
|
+
async function gitModules(directory, repository, runGit, signal) {
|
|
92
|
+
try {
|
|
93
|
+
if (!(await stat(join(directory, ".gitmodules"))).isFile())
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error.code === "ENOENT")
|
|
98
|
+
return [];
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
const output = await runGit(["config", "--file", ".gitmodules", "--get-regexp", "^submodule\\..*\\.url$"], directory, signal);
|
|
102
|
+
const names = [];
|
|
103
|
+
for (const line of output.split(/\r?\n/).filter(Boolean)) {
|
|
104
|
+
const match = /^submodule\.(.+)\.url\s+(.+)$/.exec(line.trim());
|
|
105
|
+
if (!match?.[1] || !match[2] || !/^[A-Za-z0-9._/-]+$/.test(match[1]))
|
|
106
|
+
throw new ResolutionError("git submodule configuration is malformed");
|
|
107
|
+
const raw = match[2];
|
|
108
|
+
let url;
|
|
109
|
+
try {
|
|
110
|
+
if (raw.startsWith("./") || raw.startsWith("../"))
|
|
111
|
+
url = new URL(raw, `${repository.href.replace(/\/+$/, "")}/`);
|
|
112
|
+
else
|
|
113
|
+
url = new URL(raw);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
throw new ResolutionError(`git submodule ${match[1]} has an invalid URL`);
|
|
117
|
+
}
|
|
118
|
+
if (!secureGitUrl(url))
|
|
119
|
+
throw new ResolutionError(`git submodule ${match[1]} must use HTTPS or SSH without embedded passwords`);
|
|
120
|
+
names.push(match[1]);
|
|
121
|
+
}
|
|
122
|
+
if (names.length === 0)
|
|
123
|
+
throw new ResolutionError(".gitmodules does not declare any valid submodule URLs");
|
|
124
|
+
return names.sort((left, right) => left.localeCompare(right));
|
|
125
|
+
}
|
|
126
|
+
async function findGitModuleRoots(root) {
|
|
127
|
+
const found = [];
|
|
128
|
+
let directories = 0;
|
|
129
|
+
const walk = async (directory) => {
|
|
130
|
+
directories += 1;
|
|
131
|
+
if (directories > 20_000)
|
|
132
|
+
throw new ResolutionError("git submodule scan exceeds 20,000 directories");
|
|
133
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
134
|
+
if (entry.name === ".git" || entry.name === "node_modules")
|
|
135
|
+
continue;
|
|
136
|
+
if (entry.isFile() && entry.name === ".gitmodules")
|
|
137
|
+
found.push(directory);
|
|
138
|
+
else if (entry.isDirectory())
|
|
139
|
+
await walk(join(directory, entry.name));
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
await walk(root);
|
|
143
|
+
return found.sort((left, right) => left.localeCompare(right));
|
|
144
|
+
}
|
|
145
|
+
async function initializeSubmodules(checkout, repository, runGit, signal) {
|
|
146
|
+
const names = await gitModules(checkout, repository, runGit, signal);
|
|
147
|
+
if (names.length === 0)
|
|
148
|
+
return;
|
|
149
|
+
const overrides = names.flatMap((name) => ["-c", `submodule.${name}.update=checkout`]);
|
|
150
|
+
await runGit([...overrides, "submodule", "update", "--init", "--depth=1"], checkout, signal);
|
|
151
|
+
for (const directory of await findGitModuleRoots(checkout)) {
|
|
152
|
+
if (directory === checkout)
|
|
153
|
+
continue;
|
|
154
|
+
const originValue = await runGit(["remote", "get-url", "origin"], directory, signal);
|
|
155
|
+
const origin = new URL(originValue);
|
|
156
|
+
if (!secureGitUrl(origin))
|
|
157
|
+
throw new ResolutionError("nested git submodule origin must use HTTPS or SSH without embedded passwords");
|
|
158
|
+
await gitModules(directory, origin, runGit, signal);
|
|
159
|
+
}
|
|
160
|
+
await runGit([...overrides, "submodule", "update", "--init", "--recursive", "--depth=1"], checkout, signal);
|
|
161
|
+
}
|
|
162
|
+
function gitRepository(parsed) {
|
|
163
|
+
const hosted = parsed.hosted;
|
|
164
|
+
const value = typeof parsed.fetchSpec === "string" ? parsed.fetchSpec : hosted?.https({ noCommittish: true, noGitPlus: true });
|
|
165
|
+
let url;
|
|
166
|
+
try {
|
|
167
|
+
url = new URL(value ?? "");
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
throw new ResolutionError("git dependency does not provide a valid HTTPS repository URL");
|
|
171
|
+
}
|
|
172
|
+
if (!secureGitUrl(url))
|
|
173
|
+
throw new ResolutionError("git dependencies must use HTTPS or SSH without embedded passwords, query, or fragment");
|
|
174
|
+
return url;
|
|
175
|
+
}
|
|
176
|
+
function secureGitUrl(url) {
|
|
177
|
+
return (url.protocol === "https:" || url.protocol === "ssh:") && !url.password && !url.search && !url.hash && (url.protocol === "ssh:" || !url.username);
|
|
178
|
+
}
|
|
179
|
+
export class RemoteSourceProvider {
|
|
180
|
+
options;
|
|
181
|
+
#pending = new Map();
|
|
182
|
+
#temporaryDirectories = new Set();
|
|
183
|
+
constructor(options) {
|
|
184
|
+
this.options = options;
|
|
185
|
+
}
|
|
186
|
+
async resolve(name, specifier, fromDirectory, signal) {
|
|
187
|
+
let parsed;
|
|
188
|
+
try {
|
|
189
|
+
parsed = npa.resolve(name, specifier, fromDirectory);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
if (parsed.type !== "remote" && parsed.type !== "git" && parsed.type !== "file")
|
|
195
|
+
return undefined;
|
|
196
|
+
if (parsed.type === "file") {
|
|
197
|
+
const path = typeof parsed.fetchSpec === "string" ? parsed.fetchSpec : "";
|
|
198
|
+
const canonical = resolve(path);
|
|
199
|
+
const key = pathToFileURL(canonical).href;
|
|
200
|
+
let pending = this.#pending.get(key);
|
|
201
|
+
if (!pending) {
|
|
202
|
+
pending = this.#materializeLocalArchive(name, canonical);
|
|
203
|
+
this.#pending.set(key, pending);
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
return await pending;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
this.#pending.delete(key);
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const url = parsed.type === "remote" ? new URL(parsed.fetchSpec) : gitRepository(parsed);
|
|
214
|
+
if (parsed.type === "remote" && (url.protocol !== "https:" || url.username || url.password || url.hash))
|
|
215
|
+
throw new ResolutionError(`remote tarball for ${name} must be an HTTPS URL without credentials or fragment`);
|
|
216
|
+
const gitSubdir = safeGitSubdir(parsed.gitSubdir);
|
|
217
|
+
const key = parsed.type === "git" ? `${url.href}#${parsed.gitRange === undefined ? parsed.gitCommittish ?? "HEAD" : `semver:${parsed.gitRange}`}:${gitSubdir ?? ""}` : url.href;
|
|
218
|
+
let pending = this.#pending.get(key);
|
|
219
|
+
if (!pending) {
|
|
220
|
+
pending = parsed.type === "git" ? this.#materializeGit(name, url, parsed.gitCommittish ?? "HEAD", parsed.gitRange ?? undefined, gitSubdir, signal) : this.#materialize(name, url, signal);
|
|
221
|
+
this.#pending.set(key, pending);
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
return await pending;
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
this.#pending.delete(key);
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async #materializeLocalArchive(requestedName, archive) {
|
|
232
|
+
const info = await stat(archive);
|
|
233
|
+
if (!info.isFile() || info.size > 512 * 1024 * 1024)
|
|
234
|
+
throw new ResolutionError(`local package archive for ${requestedName} is invalid or exceeds 512 MiB`);
|
|
235
|
+
const bytes = await readFile(archive);
|
|
236
|
+
const integrity = `sha512-${createHash("sha512").update(bytes).digest("base64")}`;
|
|
237
|
+
await mkdir(this.options.quarantineRoot, { recursive: true, mode: 0o700 });
|
|
238
|
+
const directory = await mkdtemp(join(this.options.quarantineRoot, "file-"));
|
|
239
|
+
const extractedPath = join(directory, "extracted");
|
|
240
|
+
try {
|
|
241
|
+
const extracted = await extractPackageArchive(archive, extractedPath);
|
|
242
|
+
const manifestPath = join(extracted.path, "package.json");
|
|
243
|
+
const raw = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
244
|
+
parseManifest(JSON.stringify(raw), manifestPath);
|
|
245
|
+
if (typeof raw.name !== "string" || typeof raw.version !== "string" || !semver.valid(raw.version))
|
|
246
|
+
throw new ResolutionError(`local package archive ${archive} requires a valid package name and semantic version`);
|
|
247
|
+
this.#temporaryDirectories.add(directory);
|
|
248
|
+
return { actualName: raw.name, version: raw.version, manifest: { ...raw, dist: { integrity, tarball: pathToFileURL(archive).href } }, integrity, tarball: pathToFileURL(archive), preparedPath: extracted.path, source: "tarball" };
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
await rm(directory, { recursive: true, force: true });
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
async cleanup() {
|
|
256
|
+
const paths = [...this.#temporaryDirectories];
|
|
257
|
+
this.#temporaryDirectories.clear();
|
|
258
|
+
await Promise.all(paths.map((path) => rm(path, { recursive: true, force: true })));
|
|
259
|
+
}
|
|
260
|
+
async #materialize(requestedName, url, signal) {
|
|
261
|
+
const quarantined = await downloadUnverifiedToQuarantine(url, {
|
|
262
|
+
root: this.options.quarantineRoot,
|
|
263
|
+
...(this.options.fetch === undefined ? {} : { fetch: this.options.fetch }),
|
|
264
|
+
headers: (target) => this.options.registryConfiguration.headersFor(target),
|
|
265
|
+
...(signal === undefined ? {} : { signal }),
|
|
266
|
+
});
|
|
267
|
+
const directory = dirname(quarantined.path);
|
|
268
|
+
const extractedPath = join(directory, "extracted");
|
|
269
|
+
try {
|
|
270
|
+
const extracted = await extractPackageArchive(quarantined.path, extractedPath);
|
|
271
|
+
const manifestPath = join(extracted.path, "package.json");
|
|
272
|
+
const bytes = await readFile(manifestPath, "utf8");
|
|
273
|
+
parseManifest(bytes, manifestPath);
|
|
274
|
+
const raw = JSON.parse(bytes);
|
|
275
|
+
if (typeof raw.name !== "string" || typeof raw.version !== "string" || !semver.valid(raw.version)) {
|
|
276
|
+
throw new ResolutionError(`remote tarball ${url.href} requires a valid package name and semantic version`);
|
|
277
|
+
}
|
|
278
|
+
const manifest = { ...raw, dist: { integrity: quarantined.integrity, tarball: url.href } };
|
|
279
|
+
this.#temporaryDirectories.add(directory);
|
|
280
|
+
return {
|
|
281
|
+
actualName: raw.name,
|
|
282
|
+
version: raw.version,
|
|
283
|
+
manifest,
|
|
284
|
+
integrity: quarantined.integrity,
|
|
285
|
+
tarball: url,
|
|
286
|
+
preparedPath: extracted.path,
|
|
287
|
+
source: "tarball",
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
await rm(directory, { recursive: true, force: true });
|
|
292
|
+
throw error;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
async #materializeGit(requestedName, repository, ref, range, subdir, signal) {
|
|
296
|
+
await mkdir(this.options.quarantineRoot, { recursive: true });
|
|
297
|
+
const directory = await mkdtemp(join(this.options.quarantineRoot, "git-"));
|
|
298
|
+
const checkout = join(directory, "checkout");
|
|
299
|
+
await mkdir(checkout);
|
|
300
|
+
const runGit = this.options.runGit ?? defaultRunGit;
|
|
301
|
+
try {
|
|
302
|
+
await runGit(["init", "--quiet"], checkout, signal);
|
|
303
|
+
await runGit(["remote", "add", "origin", repository.href], checkout, signal);
|
|
304
|
+
const selectedRef = range === undefined ? ref : gitTagForRange(await runGit(["ls-remote", "--tags", "origin"], checkout, signal), range);
|
|
305
|
+
await runGit(["fetch", "--quiet", "--depth=1", "--filter=blob:none", "origin", selectedRef], checkout, signal);
|
|
306
|
+
await runGit(["checkout", "--quiet", "--detach", "FETCH_HEAD"], checkout, signal);
|
|
307
|
+
await initializeSubmodules(checkout, repository, runGit, signal);
|
|
308
|
+
const commit = await runGit(["rev-parse", "--verify", "HEAD"], checkout, signal);
|
|
309
|
+
if (!/^[a-f0-9]{40}$/i.test(commit))
|
|
310
|
+
throw new ResolutionError("git did not resolve an exact commit");
|
|
311
|
+
const packageRoot = subdir === undefined ? checkout : resolve(checkout, ...subdir.split("/"));
|
|
312
|
+
if (packageRoot !== checkout && !packageRoot.startsWith(`${checkout}${sep}`))
|
|
313
|
+
throw new ResolutionError("git package subdirectory escapes the checkout");
|
|
314
|
+
const sourceManifest = JSON.parse(await readFile(join(packageRoot, "package.json"), "utf8"));
|
|
315
|
+
if (gitBuildRequired(sourceManifest)) {
|
|
316
|
+
if (!this.options.prepareGit)
|
|
317
|
+
throw new ResolutionError("git package requires a build but no approved build workflow is available");
|
|
318
|
+
await this.options.prepareGit(packageRoot, sourceManifest, signal);
|
|
319
|
+
}
|
|
320
|
+
const artifact = await packPackage(packageRoot);
|
|
321
|
+
const tarballPath = join(directory, "package.tgz");
|
|
322
|
+
await writeFile(tarballPath, artifact.tarball, { flag: "wx", mode: 0o600 });
|
|
323
|
+
const extracted = await extractPackageArchive(tarballPath, join(directory, "extracted"));
|
|
324
|
+
await rm(checkout, { recursive: true, force: true });
|
|
325
|
+
const exactUrl = new URL(`git+${repository.href}#${commit}${subdir === undefined ? "" : `::path:${subdir}`}`);
|
|
326
|
+
const manifest = { ...artifact.manifest, name: artifact.name, version: artifact.version, dist: { integrity: artifact.integrity, tarball: exactUrl.href } };
|
|
327
|
+
this.#temporaryDirectories.add(directory);
|
|
328
|
+
return { actualName: artifact.name, version: artifact.version, manifest, integrity: artifact.integrity, tarball: exactUrl, preparedPath: extracted.path, source: "git" };
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
await rm(directory, { recursive: true, force: true });
|
|
332
|
+
throw error;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=source-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-provider.js","sourceRoot":"","sources":["../../../src/resolver/source-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PackageVersionManifest } from "../registry/types.js";
|
|
2
|
+
export interface Requirement {
|
|
3
|
+
name: string;
|
|
4
|
+
specifier: string;
|
|
5
|
+
kind: "dependency" | "dev" | "optional" | "peer" | "workspace";
|
|
6
|
+
importer?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ResolvedPackage {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
version: string;
|
|
12
|
+
integrity: string;
|
|
13
|
+
tarball: URL;
|
|
14
|
+
localPath?: string;
|
|
15
|
+
preparedPath?: string;
|
|
16
|
+
source?: "registry" | "directory" | "tarball" | "git";
|
|
17
|
+
publishedAt?: Date;
|
|
18
|
+
manifest: PackageVersionManifest;
|
|
19
|
+
dependencies: ReadonlyMap<string, string>;
|
|
20
|
+
}
|
|
21
|
+
export interface ResolutionGraph {
|
|
22
|
+
roots: ReadonlyMap<string, string>;
|
|
23
|
+
packages: ReadonlyMap<string, ResolvedPackage>;
|
|
24
|
+
importers?: ReadonlyMap<string, ReadonlyMap<string, string>>;
|
|
25
|
+
}
|
|
26
|
+
export interface Resolver {
|
|
27
|
+
resolve(requirements: readonly Requirement[], signal?: AbortSignal): Promise<ResolutionGraph>;
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/resolver/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PackageAnalysis } from "./findings.js";
|
|
2
|
+
export declare const lifecycleStages: readonly ["preinstall", "install", "postinstall"];
|
|
3
|
+
export declare const gitBuildStages: readonly ["preinstall", "install", "postinstall", "prepare"];
|
|
4
|
+
export type LifecycleStage = (typeof gitBuildStages)[number] | "prepack" | "postpack" | "prepublishOnly" | "publish" | "postpublish";
|
|
5
|
+
export interface LifecycleFact {
|
|
6
|
+
readonly packageName: string;
|
|
7
|
+
readonly packageVersion: string;
|
|
8
|
+
readonly integrity: string;
|
|
9
|
+
readonly stage: LifecycleStage;
|
|
10
|
+
readonly command: string;
|
|
11
|
+
readonly commandHash: string;
|
|
12
|
+
readonly contentHash: string;
|
|
13
|
+
readonly referencedFiles: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
export interface AnalyzedPackage {
|
|
16
|
+
readonly analysis: PackageAnalysis;
|
|
17
|
+
readonly lifecycles: readonly LifecycleFact[];
|
|
18
|
+
readonly capabilities?: readonly ExecutionCapability[];
|
|
19
|
+
}
|
|
20
|
+
export type ExecutionCapabilityKind = "ai-history-read" | "credential-read" | "network-access" | "local-write" | "process-spawn" | "native-code";
|
|
21
|
+
export interface ExecutionCapability {
|
|
22
|
+
readonly kind: ExecutionCapabilityKind;
|
|
23
|
+
readonly severity: "notice" | "warning";
|
|
24
|
+
readonly packageName: string;
|
|
25
|
+
readonly packageVersion: string;
|
|
26
|
+
readonly behavior: string;
|
|
27
|
+
readonly evidence: readonly string[];
|
|
28
|
+
}
|
|
29
|
+
export declare function analyzePackage(options: {
|
|
30
|
+
readonly root: string;
|
|
31
|
+
readonly packageName: string;
|
|
32
|
+
readonly packageVersion: string;
|
|
33
|
+
readonly integrity: string;
|
|
34
|
+
readonly scripts?: Readonly<Record<string, string>>;
|
|
35
|
+
readonly stages?: readonly LifecycleStage[];
|
|
36
|
+
readonly maxFiles?: number;
|
|
37
|
+
readonly maxBytes?: number;
|
|
38
|
+
}): Promise<AnalyzedPackage>;
|