@stll/oxlint-config 1.2.1 → 1.2.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolchain-changed.cjs","names":["isCompilerPackage","valid","parseDocument","yaml","promisify","execFile","isDockerDefinitionPath","isComposeDefinitionPath","isKubernetesDefinitionPath","path","isMiseConfigPath","githubAutomationFileKind","spawn","parseDocument","valid","parseToml","parseAllDocuments","containerDocumentImages","workspaceContains","validRange","satisfies"],"sources":["../src/toolchain-changed-locks.ts","../src/toolchain-changed.ts"],"sourcesContent":["import { valid } from \"semver\";\nimport { parseDocument } from \"yaml\";\n\nimport { isCompilerPackage } from \"./compiler-packages\";\n\nexport const toolchainChangedTools = [\n \"bun\",\n \"node\",\n \"typescript\",\n \"oxlint\",\n \"oxlint-tsgolint\",\n \"oxfmt\",\n \"shared\",\n] as const;\nexport type ToolchainChangedTool = (typeof toolchainChangedTools)[number];\n\nexport const changedRecord = (\n value: unknown,\n): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const changedPackageTool = (\n name: string,\n): ToolchainChangedTool | undefined => {\n if (isCompilerPackage(name)) return \"typescript\";\n if (name === \"oxlint\" || name === \"oxfmt\" || name === \"oxlint-tsgolint\")\n return name;\n if (\n name.startsWith(\"@stll/\") ||\n name === \"@oxlint/plugins\" ||\n name === \"lefthook\"\n )\n return \"shared\";\n return undefined;\n};\n\n/** Compiler patch declarations retain hashes as well as referenced source paths. */\nexport const changedCompilerPatches = ({\n value,\n stringsArePaths,\n compilerNames,\n}: {\n value: unknown;\n stringsArePaths: boolean;\n compilerNames: ReadonlySet<string>;\n}) => {\n const patches: { name: string; metadata: unknown; reference?: string }[] = [];\n if (!changedRecord(value)) return patches;\n const declarations = value[\"patchedDependencies\"];\n if (declarations === undefined) return patches;\n if (!changedRecord(declarations))\n throw new Error(\"Unclassifiable patchedDependencies declaration\");\n for (const [descriptor, metadata] of Object.entries(declarations)) {\n const name = /^(@[^/]+\\/[^@]+|[^@]+)(?:@.*)?$/.exec(descriptor)?.[1];\n if (\n !name ||\n (changedPackageTool(name) !== \"typescript\" && !compilerNames.has(name))\n )\n continue;\n let reference: string | undefined;\n if (typeof metadata === \"string\") {\n if (metadata.trim() === \"\")\n throw new Error(`Empty compiler patch metadata: ${descriptor}`);\n if (stringsArePaths) reference = metadata;\n } else if (changedRecord(metadata)) {\n const declaredPath = metadata[\"path\"];\n if (declaredPath !== undefined) {\n if (typeof declaredPath !== \"string\")\n throw new Error(`Invalid compiler patch path: ${descriptor}`);\n reference = declaredPath;\n }\n } else throw new Error(`Invalid compiler patch metadata: ${descriptor}`);\n if (stringsArePaths && reference === undefined)\n throw new Error(`Missing compiler patch path: ${descriptor}`);\n if (reference === undefined) patches.push({ name: descriptor, metadata });\n else patches.push({ name: descriptor, metadata, reference });\n }\n return patches;\n};\n\n/** JSONC permits comments and trailing commas, never alterations inside strings. */\nexport const parseChangedJson = (text: string): unknown => {\n let clean = \"\";\n let quote = false;\n for (let index = 0; index < text.length; index++) {\n const char = text[index];\n if (quote) {\n clean += char;\n if (char === \"\\\\\") {\n index++;\n clean += text[index] ?? \"\";\n } else if (char === '\"') quote = false;\n continue;\n }\n if (char === '\"') {\n quote = true;\n clean += char;\n continue;\n }\n if (char === \"/\" && text[index + 1] === \"/\") {\n while (index < text.length && text[index] !== \"\\n\") index++;\n clean += \"\\n\";\n continue;\n }\n if (char === \"/\" && text[index + 1] === \"*\") {\n index += 2;\n while (\n index < text.length &&\n !(text[index] === \"*\" && text[index + 1] === \"/\")\n )\n index++;\n if (index >= text.length) throw new Error(\"Unterminated JSONC comment\");\n index++;\n clean += \" \";\n continue;\n }\n clean += char;\n }\n let result = \"\";\n quote = false;\n for (let index = 0; index < clean.length; index++) {\n const char = clean[index];\n if (quote) {\n result += char;\n if (char === \"\\\\\") {\n index++;\n result += clean[index] ?? \"\";\n } else if (char === '\"') quote = false;\n continue;\n }\n if (char === '\"') quote = true;\n if (char === \",\") {\n let next = index + 1;\n while (/\\s/.test(clean[next] ?? \"\") && next < clean.length) next++;\n if (clean[next] === \"}\" || clean[next] === \"]\") continue;\n }\n result += char;\n }\n return JSON.parse(result);\n};\n\nexport const changedYarnSelectors = (location: string) =>\n location\n .replace(/\"/g, \"\")\n .split(/,\\s*/)\n .map((selector) => selector.trim());\n\nexport type ChangedLockSourceProof =\n | { type: \"registry\" }\n | { type: \"immutable\"; identity: string }\n | { type: \"unidentified\" };\nexport type ChangedLockResolution = {\n tool: ToolchainChangedTool;\n name: string;\n version: string;\n dependency: string;\n location: string;\n identity: string;\n sourceProof: ChangedLockSourceProof;\n};\nexport type ChangedLock = {\n resolutions: ChangedLockResolution[];\n importers: Record<string, Record<string, string>>;\n};\nconst packageDescriptor = (descriptor: string) => {\n const match = /^(@[^/]+\\/[^@]+|[^@]+)@(.+)$/.exec(\n descriptor.replace(/^\\//, \"\"),\n );\n const name = match?.[1];\n const version = match?.[2];\n if (!name || !version) return undefined;\n return { name, version };\n};\nconst dependencyName = (location: string) => {\n const parts = location.split(\"/\");\n const last = parts.at(-1);\n const scope = parts.at(-2);\n return scope?.startsWith(\"@\") ? `${scope}/${last}` : (last ?? location);\n};\nconst exactVersion = (value: string) => {\n const version = value.split(\"(\")[0];\n if (version && valid(version) === version) return version;\n throw new Error(`Unresolved toolchain lock version: ${value}`);\n};\nconst stableIdentity = (value: unknown): string => {\n if (Array.isArray(value)) return JSON.stringify(value.map(stableIdentity));\n if (changedRecord(value))\n return JSON.stringify(\n Object.entries(value)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, entry]) => [key, stableIdentity(entry)]),\n );\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n};\nconst validIntegrity = (value: string) =>\n value.split(/\\s+/).some((item) => {\n const match = /^(sha1|sha256|sha384|sha512)-([A-Za-z0-9+/]+={0,2})$/.exec(\n item,\n );\n const algorithm = match?.[1];\n const encoded = match?.[2];\n if (!algorithm || !encoded) return false;\n const bytes = Buffer.from(encoded, \"base64\");\n if (bytes.toString(\"base64\") !== encoded) return false;\n switch (algorithm) {\n case \"sha1\":\n return bytes.length === 20;\n case \"sha256\":\n return bytes.length === 32;\n case \"sha384\":\n return bytes.length === 48;\n case \"sha512\":\n return bytes.length === 64;\n default:\n return false;\n }\n });\nconst lockSourceProof = (raw: unknown): ChangedLockSourceProof => {\n const sources: string[] = [];\n const evidence: string[] = [];\n const commits: string[] = [];\n const source = (value: unknown) => {\n if (typeof value !== \"string\") return;\n sources.push(value);\n const commit = /#(?:commit=)?([a-f0-9]{40}|[a-f0-9]{64})(?:[&#]|$)/i.exec(\n value,\n )?.[1];\n if (commit) commits.push(`commit:${commit.toLowerCase()}`);\n };\n const digest = (key: string, value: unknown) => {\n if (typeof value !== \"string\") return;\n if (\n (key === \"integrity\" && validIntegrity(value)) ||\n (key === \"checksum\" && /^(?:[a-f0-9]+\\/)?[a-f0-9]{128}$/i.test(value)) ||\n (key === \"shasum\" && /^[a-f0-9]{40}$/i.test(value))\n )\n evidence.push(`${key}:${value}`);\n if (key === \"commit\" && /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/i.test(value))\n commits.push(`commit:${value.toLowerCase()}`);\n };\n const metadata = (value: unknown) => {\n if (!changedRecord(value)) return;\n for (const key of [\"resolved\", \"resolution\", \"tarball\", \"repo\", \"version\"])\n source(value[key]);\n for (const key of [\"integrity\", \"checksum\", \"shasum\", \"commit\"])\n digest(key, value[key]);\n if (changedRecord(value[\"resolution\"])) {\n const resolution = value[\"resolution\"];\n for (const key of [\"tarball\", \"repo\", \"directory\"])\n source(resolution[key]);\n for (const key of [\"integrity\", \"commit\"]) digest(key, resolution[key]);\n if (\n resolution[\"type\"] === \"directory\" ||\n typeof resolution[\"directory\"] === \"string\"\n )\n sources.push(\"file:\");\n if (resolution[\"type\"] === \"git\") sources.push(\"git:\");\n }\n if (value[\"link\"] === true) sources.push(\"link:\");\n };\n if (Array.isArray(raw)) {\n source(raw[0]);\n source(raw[1]);\n digest(\"integrity\", raw[3]);\n } else if (changedRecord(raw)) {\n if (changedRecord(raw[\"metadata\"])) {\n metadata(raw[\"metadata\"]);\n const descriptor = raw[\"descriptor\"];\n // Legacy pnpm registry keys start with /; source metadata remains authoritative.\n source(\n typeof descriptor === \"string\"\n ? descriptor.replace(/^\\//, \"\")\n : descriptor,\n );\n } else metadata(raw);\n }\n // Directory protocols are not archive bytes; unrelated hashes cannot prove them.\n const directory = sources.some((value) => {\n if (/(?:^|@)(?:link:|portal:|workspace:)/i.test(value)) return true;\n const local = /(?:^|@)file:(.*)$/i.exec(value)?.[1];\n if (local !== undefined)\n return !/\\.(?:tgz|tar\\.gz)(?:[?#].*)?$/i.test(local);\n return (\n /^(?:\\.{1,2}\\/|\\/)/.test(value) &&\n !/\\.(?:tgz|tar\\.gz)(?:[?#].*)?$/i.test(value)\n );\n });\n if (directory) return { type: \"unidentified\" };\n const gitSource = sources.some((value) =>\n /(?:^|@)(?:git(?:\\+[^:]+)?:|github:|gitlab:|bitbucket:|ssh:)|(?:github\\.com|gitlab\\.com)[:/]|(?:^|@)git@|^[\\w.-]+@(?!(?:npm|patch|file|link|portal|workspace|https?|git(?:\\+[^:]+)?|github|gitlab|bitbucket|ssh):)[^/:]+:|\\.git(?:#|$)/i.test(\n value,\n ),\n );\n if (gitSource) {\n const proof = commits;\n return proof.length > 0\n ? { type: \"immutable\", identity: stableIdentity(proof.sort()) }\n : { type: \"unidentified\" };\n }\n const externalArchive = sources.some(\n (value) =>\n /(?:^|@)file:/i.test(value) ||\n (/(?:^|@)https?:/i.test(value) &&\n !/(?:^|@)https:\\/\\/(?:registry\\.npmjs\\.org|registry\\.yarnpkg\\.com)\\//i.test(\n value,\n )),\n );\n if (externalArchive && evidence.length === 0) return { type: \"unidentified\" };\n if (evidence.length > 0)\n return { type: \"immutable\", identity: stableIdentity(evidence.sort()) };\n return { type: \"registry\" };\n};\ntype AddResolutionOptions = {\n raw: unknown;\n resolutions: ChangedLockResolution[];\n name: string;\n version: string;\n dependency: string;\n location: string;\n};\nconst addResolution = ({\n raw,\n resolutions,\n name,\n version,\n dependency,\n location,\n}: AddResolutionOptions) => {\n const tool = changedPackageTool(name) ?? changedPackageTool(dependency);\n if (tool === undefined) return;\n const sourceProof = lockSourceProof(raw);\n if (tool === \"typescript\" && sourceProof.type === \"unidentified\")\n throw new Error(`Compiler source has no immutable identity: ${name}`);\n const identity = stableIdentity(raw);\n if (version.startsWith(\"workspace:\") || version.startsWith(\"link:\")) {\n if (tool !== \"shared\")\n throw new Error(`Unresolved compiler workspace lock version: ${name}`);\n resolutions.push({\n tool,\n name,\n version,\n dependency,\n location,\n identity,\n sourceProof,\n });\n return;\n }\n resolutions.push({\n tool,\n name,\n version: exactVersion(version),\n identity,\n sourceProof,\n dependency,\n location,\n });\n};\nconst dependencyFields = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n] as const;\nconst importerDependencies = (value: unknown) => {\n if (!changedRecord(value)) throw new Error(\"Invalid lockfile importer\");\n const result: Record<string, string> = {};\n for (const field of dependencyFields) {\n const dependencies = value[field];\n if (dependencies === undefined) continue;\n if (!changedRecord(dependencies))\n throw new Error(\"Invalid lockfile dependency table\");\n for (const [name, metadata] of Object.entries(dependencies)) {\n if (typeof metadata === \"string\") result[name] = metadata;\n else if (\n changedRecord(metadata) &&\n typeof metadata[\"version\"] === \"string\"\n )\n result[name] = metadata[\"version\"];\n else if (changedPackageTool(name) !== undefined)\n throw new Error(`Unresolved lockfile importer dependency: ${name}`);\n }\n }\n return result;\n};\n\n// Bun text lockfiles 0-2 share the workspaces table and the\n// [descriptor, registry, metadata, integrity] package entries read below.\nconst BUN_TEXT_LOCKFILE_VERSIONS: ReadonlySet<number> = new Set([0, 1, 2]);\n\nexport const parseChangedLock = ({\n file,\n text,\n}: {\n file: string;\n text: string;\n}): ChangedLock => {\n const resolutions: ChangedLockResolution[] = [];\n const importers: Record<string, Record<string, string>> = {};\n if (file.endsWith(\"bun.lock\")) {\n const parsed = parseChangedJson(text);\n if (\n !changedRecord(parsed) ||\n !BUN_TEXT_LOCKFILE_VERSIONS.has(Number(parsed[\"lockfileVersion\"])) ||\n !changedRecord(parsed[\"packages\"]) ||\n !changedRecord(parsed[\"workspaces\"])\n )\n throw new Error(\"Unsupported Bun lockfile shape\");\n for (const [directory, workspace] of Object.entries(parsed[\"workspaces\"]))\n importers[directory || \".\"] = importerDependencies(workspace);\n for (const [location, value] of Object.entries(parsed[\"packages\"])) {\n const dependency = dependencyName(location);\n const first: unknown = Array.isArray(value) ? value.at(0) : undefined;\n const descriptor =\n typeof first === \"string\" ? packageDescriptor(first) : undefined;\n if (descriptor !== undefined)\n addResolution({\n resolutions,\n ...descriptor,\n dependency,\n location,\n raw: value,\n });\n else if (changedPackageTool(dependency) !== undefined)\n throw new Error(`Invalid Bun toolchain lock entry: ${location}`);\n }\n } else if (file.endsWith(\"pnpm-lock.yaml\")) {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(\"Invalid pnpm lockfile YAML\");\n const parsed: unknown = document.toJS({ maxAliasCount: 100 });\n if (\n !changedRecord(parsed) ||\n ![5.4, 6, 9].includes(Number(parsed[\"lockfileVersion\"]))\n )\n throw new Error(\"Unsupported pnpm lockfile shape\");\n const sourceImporters = changedRecord(parsed[\"importers\"])\n ? parsed[\"importers\"]\n : { \".\": parsed };\n for (const [directory, importer] of Object.entries(sourceImporters))\n importers[directory] = importerDependencies(importer);\n const packages = parsed[\"packages\"] ?? {};\n if (!changedRecord(packages))\n throw new Error(\"Invalid pnpm lockfile packages\");\n for (const [location, metadata] of Object.entries(packages)) {\n let descriptor = packageDescriptor(location);\n if (descriptor === undefined) {\n const legacy = /^(.*)\\/([^/]+)$/.exec(location.replace(/^\\//, \"\"));\n if (legacy?.[1] && legacy[2])\n descriptor = { name: legacy[1], version: legacy[2] };\n }\n if (!descriptor) continue;\n const version =\n changedRecord(metadata) && typeof metadata[\"version\"] === \"string\"\n ? metadata[\"version\"]\n : descriptor.version;\n const baseDescriptor = location.split(\"(\").at(0);\n const snapshots = changedRecord(parsed[\"snapshots\"])\n ? Object.fromEntries(\n Object.entries(parsed[\"snapshots\"]).filter(\n ([key]) => key.split(\"(\").at(0) === baseDescriptor,\n ),\n )\n : {};\n addResolution({\n resolutions,\n name: descriptor.name,\n raw: { descriptor: location, metadata, snapshots },\n version,\n dependency: descriptor.name,\n location,\n });\n }\n } else if (file.endsWith(\"yarn.lock\")) {\n const classic = /^# yarn lockfile v1\\s*$/m.test(text);\n let yaml = text;\n if (classic) {\n yaml = text\n .split(/\\r?\\n/)\n .map((line) => {\n if (line === \"\" || /^\\s*#/.test(line)) return line;\n if (!/^\\s/.test(line) && line.endsWith(\":\"))\n return `${JSON.stringify(line.slice(0, -1))}:`;\n const field = /^(\\s+)([A-Za-z][\\w-]*|\"(?:[^\"\\\\]|\\\\.)*\") (.+)$/.exec(\n line,\n );\n if (field) return `${field[1]}${field[2]}: ${field[3]}`;\n return line;\n })\n .join(\"\\n\");\n }\n const document = parseDocument(yaml);\n if (document.errors.length > 0) throw new Error(\"Invalid Yarn lockfile\");\n const parsed: unknown = document.toJS({ maxAliasCount: 100 });\n if (\n !changedRecord(parsed) ||\n (!classic && !changedRecord(parsed[\"__metadata\"]))\n )\n throw new Error(\"Unsupported Yarn lockfile shape\");\n for (const [location, metadata] of Object.entries(parsed)) {\n if (location === \"__metadata\") continue;\n const selectors = changedYarnSelectors(location);\n const descriptors = selectors\n .map(packageDescriptor)\n .filter((item) => item !== undefined);\n for (const descriptor of descriptors) {\n const alias = descriptor.version.startsWith(\"npm:\")\n ? packageDescriptor(descriptor.version.slice(4))\n : undefined;\n const dependency = descriptor.name;\n const resolution =\n changedRecord(metadata) && typeof metadata[\"resolution\"] === \"string\"\n ? packageDescriptor(metadata[\"resolution\"])\n : undefined;\n const resolutionAlias = resolution?.version.startsWith(\"npm:\")\n ? packageDescriptor(resolution.version.slice(4))\n : undefined;\n let name = resolutionAlias?.name ?? resolution?.name ?? dependency;\n if (alias && !isCompilerPackage(name)) name = alias.name;\n const patchDescriptor = descriptor.version.startsWith(\"patch:\")\n ? packageDescriptor(descriptor.version.slice(\"patch:\".length))\n : undefined;\n if (\n (isCompilerPackage(name) ||\n isCompilerPackage(dependency) ||\n (patchDescriptor !== undefined &&\n isCompilerPackage(patchDescriptor.name))) &&\n (descriptor.version.startsWith(\"patch:\") ||\n resolution?.version.startsWith(\"patch:\"))\n )\n throw new Error(\n `Yarn compiler patch identity requires tracked patch bytes: ${location}`,\n );\n if (\n changedPackageTool(name) === undefined &&\n changedPackageTool(dependency) === undefined\n )\n continue;\n if (!changedRecord(metadata) || typeof metadata[\"version\"] !== \"string\")\n throw new Error(`Missing Yarn toolchain version: ${location}`);\n if (!classic && typeof metadata[\"resolution\"] !== \"string\")\n throw new Error(`Missing Yarn compiler resolution: ${location}`);\n addResolution({\n resolutions,\n name,\n version: metadata[\"version\"],\n dependency,\n location: selectors.join(\", \"),\n raw: { selectors, metadata },\n });\n }\n }\n } else {\n const parsed = parseChangedJson(text);\n if (\n !changedRecord(parsed) ||\n ![1, 2, 3].includes(Number(parsed[\"lockfileVersion\"]))\n )\n throw new Error(\"Unsupported npm lockfile shape\");\n if (changedRecord(parsed[\"packages\"])) {\n for (const [location, metadata] of Object.entries(parsed[\"packages\"])) {\n if (!changedRecord(metadata))\n throw new Error(\"Invalid npm lockfile package\");\n if (!location.includes(\"node_modules/\")) {\n const ownName = metadata[\"name\"];\n if (typeof ownName === \"string\" && isCompilerPackage(ownName))\n throw new Error(\n `Compiler directory lock entry has no tracked byte identity: ${location || \".\"}`,\n );\n importers[location || \".\"] = importerDependencies(metadata);\n continue;\n }\n const dependency = dependencyName(location);\n const name =\n typeof metadata[\"name\"] === \"string\" ? metadata[\"name\"] : dependency;\n if (metadata[\"link\"] === true) {\n addResolution({\n resolutions,\n name,\n raw: metadata,\n version: `link:${String(metadata[\"resolved\"])}`,\n dependency,\n location,\n });\n continue;\n }\n if (typeof metadata[\"version\"] === \"string\")\n addResolution({\n resolutions,\n name,\n raw: metadata,\n version: metadata[\"version\"],\n dependency,\n location,\n });\n else if (\n changedPackageTool(name) !== undefined ||\n changedPackageTool(dependency) !== undefined\n )\n throw new Error(`Missing npm toolchain version: ${name}`);\n }\n } else if (changedRecord(parsed[\"dependencies\"])) {\n const visit = ({\n dependencies,\n parent,\n }: {\n dependencies: Record<string, unknown>;\n parent: string;\n }) => {\n for (const [dependency, metadata] of Object.entries(dependencies)) {\n if (!changedRecord(metadata))\n throw new Error(\"Invalid npm lockfile dependency\");\n const location = `${parent}node_modules/${dependency}`;\n const version = metadata[\"version\"];\n const alias =\n typeof version === \"string\" && version.startsWith(\"npm:\")\n ? packageDescriptor(version.slice(4))\n : undefined;\n if (typeof version === \"string\")\n addResolution({\n resolutions,\n name: alias?.name ?? dependency,\n raw: metadata,\n version: alias?.version ?? version,\n dependency,\n location,\n });\n else if (changedPackageTool(dependency) !== undefined)\n throw new Error(`Missing npm toolchain version: ${dependency}`);\n if (changedRecord(metadata[\"dependencies\"]))\n visit({\n dependencies: metadata[\"dependencies\"],\n parent: `${location}/`,\n });\n }\n };\n visit({ dependencies: parsed[\"dependencies\"], parent: \"\" });\n } else throw new Error(\"Missing npm lockfile dependency resolutions\");\n }\n return { resolutions, importers };\n};\n","import { execFile, spawn } from \"node:child_process\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { satisfies, valid, validRange } from \"semver\";\nimport { parse as parseToml } from \"smol-toml\";\nimport { parseAllDocuments, parseDocument } from \"yaml\";\n\nimport {\n changedPackageTool,\n changedYarnSelectors,\n changedCompilerPatches,\n changedRecord,\n parseChangedJson,\n parseChangedLock,\n toolchainChangedTools,\n type ChangedLock,\n type ToolchainChangedTool,\n} from \"./toolchain-changed-locks\";\nimport {\n containerDocumentImages,\n isComposeDefinitionPath,\n isKubernetesDefinitionPath,\n} from \"./toolchain-container-inputs\";\nimport {\n isDockerDefinitionPath,\n githubAutomationFileKind,\n isMiseConfigPath,\n} from \"./toolchain-inputs\";\nimport { workspaceContains } from \"./toolchain-workspaces\";\n\nexport type ToolchainChanges =\n | {\n status: \"compared\";\n changed: boolean;\n tools: ToolchainChangedTool[];\n current: { bun: string[]; typescript: string[] };\n }\n | {\n status: \"unreadable\";\n changed: true;\n tools: ToolchainChangedTool[];\n error: string;\n };\n\nconst git = promisify(execFile);\nconst otherRuntimeFiles = new Set([\n \".python-version\",\n \"rust-toolchain\",\n \"rust-toolchain.toml\",\n \".go-version\",\n \"go.mod\",\n \"go.work\",\n \".java-version\",\n \".ruby-version\",\n \".sdkmanrc\",\n \".dotnet-version\",\n \"global.json\",\n \".terraform-version\",\n \".deno-version\",\n]);\nconst containerDefinition = (file: string) =>\n isDockerDefinitionPath(file) ||\n isComposeDefinitionPath(file) ||\n isKubernetesDefinitionPath(file);\nconst compilerPatchPackageFile = (\n file: string,\n compilerNames: ReadonlySet<string>,\n) => {\n if (!file.endsWith(\".patch\")) return false;\n // patch-package encodes nested installations with ++; the final package is patched.\n const target = path.posix.basename(file).split(\"++\").at(-1);\n if (target === undefined) return false;\n const encoded = /^(@[^+]+\\+[^+]+|[^+]+)\\+/.exec(target)?.[1];\n return (\n encoded !== undefined &&\n (changedPackageTool(encoded.replace(\"+\", \"/\")) === \"typescript\" ||\n compilerNames.has(encoded.replace(\"+\", \"/\")))\n );\n};\nconst trackedInput = (file: string) => {\n if (\n file.split(\"/\").some((part) => part === \"node_modules\" || part === \"vendor\")\n )\n return false;\n const name = path.posix.basename(file);\n return (\n [\n \"package.json\",\n \"bun.lock\",\n \"bun.lockb\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n \"pnpm-workspace.yaml\",\n \".node-version\",\n \".nvmrc\",\n \".bun-version\",\n \".tool-versions\",\n \"toolchain.json\",\n \".npmrc\",\n ].includes(name) ||\n file.endsWith(\".patch\") ||\n otherRuntimeFiles.has(name) ||\n isMiseConfigPath(file) ||\n githubAutomationFileKind(file) !== undefined ||\n containerDefinition(file)\n );\n};\ntype TreeEntry = { mode: string; oid: string };\ntype GitSnapshot = {\n entries: Map<string, TreeEntry>;\n blobs: Map<string, string>;\n};\nconst readTree = async ({ repo, ref }: { repo: string; ref: string }) => {\n const { stdout } = await git(\"git\", [\"ls-tree\", \"-rz\", \"--full-tree\", ref], {\n cwd: repo,\n encoding: \"utf8\",\n maxBuffer: 32 * 1024 * 1024,\n });\n const entries = new Map<string, TreeEntry>();\n for (const entry of stdout.split(\"\\0\")) {\n if (entry === \"\") continue;\n const tab = entry.indexOf(\"\\t\");\n if (tab < 0) throw new Error(\"Invalid Git tree response\");\n const file = entry.slice(tab + 1);\n const [mode, type, oid] = entry.slice(0, tab).split(\" \");\n if (type !== \"blob\" && !trackedInput(file)) continue;\n if (type !== \"blob\" || !mode || !oid || !/^[a-f0-9]{40,64}$/.test(oid))\n throw new Error(\"Unreadable tracked toolchain input\");\n entries.set(file, { mode, oid });\n }\n return entries;\n};\nconst readBlobs = async ({ repo, oids }: { repo: string; oids: string[] }) => {\n if (oids.length === 0) return new Map<string, string>();\n const data = await new Promise<Buffer>((resolve, reject) => {\n const child = spawn(\"git\", [\"cat-file\", \"--batch\"], {\n cwd: repo,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n const chunks: Buffer[] = [];\n let size = 0;\n child.stdout.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > 128 * 1024 * 1024) {\n child.kill();\n reject(new Error(\"Toolchain Git snapshot exceeds the read limit\"));\n return;\n }\n chunks.push(chunk);\n });\n child.stderr.resume();\n child.on(\"error\", reject);\n child.on(\"close\", (code) =>\n code === 0\n ? resolve(Buffer.concat(chunks))\n : reject(new Error(\"Unable to read Git snapshot blobs\")),\n );\n child.stdin.on(\"error\", reject);\n child.stdin.end(`${oids.join(\"\\n\")}\\n`);\n });\n const blobs = new Map<string, string>();\n let offset = 0;\n for (const oid of oids) {\n const end = data.indexOf(10, offset);\n if (end < 0) throw new Error(\"Invalid Git blob response\");\n const [actual, type, length] = data\n .subarray(offset, end)\n .toString(\"utf8\")\n .split(\" \");\n const size = Number(length);\n if (\n actual !== oid ||\n type !== \"blob\" ||\n !Number.isSafeInteger(size) ||\n size < 0 ||\n end + size + 1 >= data.length\n )\n throw new Error(\"Unreadable Git blob response\");\n offset = end + 1;\n blobs.set(oid, data.subarray(offset, offset + size).toString(\"utf8\"));\n offset += size + 1;\n }\n if (offset !== data.length) throw new Error(\"Unexpected Git blob response\");\n return blobs;\n};\nconst snapshotText = ({\n snapshot,\n file,\n visited = new Set<string>(),\n}: {\n snapshot: GitSnapshot;\n file: string;\n visited?: Set<string>;\n}): string => {\n if (visited.has(file))\n throw new Error(\"Cyclic tracked toolchain file reference\");\n visited.add(file);\n const entry = snapshot.entries.get(file);\n const text = entry && snapshot.blobs.get(entry.oid);\n if (!entry || text === undefined)\n throw new Error(`Missing tracked toolchain input: ${file}`);\n if (entry.mode !== \"120000\") return text;\n const target = path.posix.normalize(\n path.posix.join(path.posix.dirname(file), text),\n );\n if (\n path.posix.isAbsolute(text) ||\n target === \"..\" ||\n target.startsWith(\"../\")\n )\n throw new Error(\"Toolchain file reference leaves the tracked snapshot\");\n return snapshotText({ snapshot, file: target, visited });\n};\n/** Read declared selector files too, without executing workflows or inspecting installed tools. */\ntype CheckoutStep =\n | { kind: \"root\"; sameRepository: boolean }\n | { kind: \"unknown\" }\n | { kind: \"path\"; path: string; sameRepository: boolean };\n\n/**\n * What one `actions/checkout` step puts where, or `undefined` for any other step.\n *\n * A selector such as `base/package.json` after a checkout of this repository\n * with `path: base` names the repository's own `package.json` at another ref,\n * so it is read as that tracked file. A path built from an expression could\n * replace any directory, so it is `unknown`.\n */\nconst checkoutStep = (step: unknown): CheckoutStep | undefined => {\n if (!changedRecord(step)) return undefined;\n const uses = step[\"uses\"];\n if (typeof uses !== \"string\" || !uses.startsWith(\"actions/checkout@\"))\n return undefined;\n const options = changedRecord(step[\"with\"]) ? step[\"with\"] : {};\n const repository = options[\"repository\"];\n const sameRepository =\n repository === undefined || repository === \"${{ github.repository }}\";\n const checkoutPath = options[\"path\"];\n if (checkoutPath === undefined) return { kind: \"root\", sameRepository };\n if (\n typeof checkoutPath !== \"string\" ||\n checkoutPath.includes(\"${{\") ||\n path.posix.isAbsolute(checkoutPath)\n )\n return { kind: \"unknown\" };\n const normalized = path.posix.normalize(checkoutPath).replace(/\\/+$/, \"\");\n if (normalized === \"\" || normalized === \".\") return { kind: \"root\", sameRepository };\n if (normalized.split(\"/\").includes(\"..\")) return { kind: \"unknown\" };\n return { kind: \"path\", path: normalized, sameRepository };\n};\n\n/**\n * Checked-out directories in step order, each owned by this repository\n * (`true`) or another (`false`). `\"\"` is the workspace root. With no\n * checkout recorded, selectors name tracked files directly.\n */\ntype CheckoutScope = ReadonlyMap<string, boolean>;\n\n/**\n * The tracked file a declared selector names under the checkouts preceding\n * its step. The most specific checkout directory decides; a selector inside\n * another repository's checkout is not a tracked file, whatever this\n * repository tracks at the same path.\n */\nconst resolveCheckoutSelector = (\n declared: string,\n checkouts: CheckoutScope,\n): string => {\n const file = path.posix.normalize(declared);\n let owner: string | undefined;\n for (const directory of checkouts.keys())\n if (\n (directory === \"\" || file.startsWith(`${directory}/`)) &&\n (owner === undefined || directory.length > owner.length)\n )\n owner = directory;\n if (owner === undefined) return file;\n if (checkouts.get(owner) !== true)\n throw new Error(\n `Setup version-file names a file outside this repository: ${declared}`,\n );\n return owner === \"\" ? file : file.slice(owner.length + 1);\n};\n\n/** Visit each step with only the checkouts that precede it. */\nconst visitStepsInOrder = (\n steps: readonly unknown[],\n checkouts: CheckoutScope,\n visitStep: (step: unknown, checkouts: CheckoutScope) => void,\n) => {\n // Each visit completes before the next checkout changes the scope.\n const scope = new Map(checkouts);\n for (const step of steps) {\n visitStep(step, scope);\n const checkout = checkoutStep(step);\n if (checkout === undefined) continue;\n if (checkout.kind !== \"path\") {\n // A root checkout replaces the workspace; an expression path may\n // replace anything, so nothing after it is known to be tracked.\n scope.clear();\n scope.set(\"\", checkout.kind === \"root\" && checkout.sameRepository);\n continue;\n }\n for (const directory of scope.keys())\n if (\n directory === checkout.path ||\n directory.startsWith(`${checkout.path}/`)\n )\n scope.delete(directory);\n scope.set(checkout.path, checkout.sameRepository);\n }\n};\n\nconst selectorFiles = (snapshot: GitSnapshot) => {\n const files = new Map<string, Set<ToolchainChangedTool>>();\n const visit = (value: unknown, checkouts: CheckoutScope = new Map()) => {\n if (Array.isArray(value)) {\n for (const entry of value) visit(entry, checkouts);\n return;\n }\n if (!changedRecord(value)) return;\n for (const [key, entry] of Object.entries(value)) {\n if (key === \"steps\" && Array.isArray(entry)) {\n visitStepsInOrder(entry, checkouts, visit);\n continue;\n }\n const input = key.toLowerCase();\n if (\n !/(?:^|-)version-file$/.test(input) &&\n ![\"toolchain-file\", \"rust-toolchain-file\", \"global-json-file\"].includes(\n input,\n )\n ) {\n visit(entry, checkouts);\n continue;\n }\n if (\n typeof entry !== \"string\" ||\n entry.trim() === \"\" ||\n entry.includes(\"${{\") ||\n path.posix.isAbsolute(entry) ||\n entry.split(\"/\").includes(\"..\")\n )\n throw new Error(\"Unclassifiable setup version-file declaration\");\n const file = resolveCheckoutSelector(entry, checkouts);\n if (\n file === \".\" ||\n file\n .split(\"/\")\n .some((part) => part === \"vendor\" || part === \"node_modules\")\n )\n throw new Error(\n \"Setup version-file leaves the tracked toolchain scope\",\n );\n let tool: ToolchainChangedTool = \"shared\";\n if (input === \"node-version-file\") tool = \"node\";\n else if (input === \"bun-version-file\") tool = \"bun\";\n const selected = files.get(file) ?? new Set<ToolchainChangedTool>();\n selected.add(tool);\n files.set(file, selected);\n }\n };\n for (const file of snapshot.entries.keys()) {\n if (githubAutomationFileKind(file) === undefined) continue;\n const document = parseDocument(snapshotText({ snapshot, file }));\n if (document.errors.length > 0)\n throw new Error(\"Unreadable workflow declaration\");\n const value: unknown = document.toJS({ maxAliasCount: 100 });\n visit(value);\n }\n return files;\n};\n\nconst compilerInstallationNames = (snapshot: GitSnapshot) => {\n const names = new Set<string>();\n const collectCatalogs = (value: unknown) => {\n if (!changedRecord(value)) return;\n const visit = (entry: unknown) => {\n if (!changedRecord(entry)) return;\n for (const [name, specifier] of Object.entries(entry)) {\n if (\n typeof specifier === \"string\" &&\n changedPackageTool(packageTarget({ name, specifier })) ===\n \"typescript\"\n )\n names.add(name);\n else visit(specifier);\n }\n };\n visit(value[\"catalog\"]);\n visit(value[\"catalogs\"]);\n };\n for (const file of snapshot.entries.keys()) {\n const basename = path.posix.basename(file);\n if (basename === \"package.json\") {\n const manifest = parseChangedJson(snapshotText({ snapshot, file }));\n if (!changedRecord(manifest))\n throw new Error(`Invalid tracked manifest: ${file}`);\n if (\n typeof manifest[\"name\"] === \"string\" &&\n changedPackageTool(manifest[\"name\"]) === \"typescript\"\n )\n throw new Error(\n `Tracked compiler source has no immutable artifact identity: ${file}`,\n );\n collectCatalogs(manifest);\n collectCatalogs(manifest[\"workspaces\"]);\n\n for (const field of installedFields) {\n const dependencies = manifest[field];\n if (!changedRecord(dependencies)) continue;\n for (const [name, specifier] of Object.entries(dependencies))\n if (\n typeof specifier === \"string\" &&\n changedPackageTool(packageTarget({ name, specifier })) ===\n \"typescript\"\n )\n names.add(name);\n }\n } else if (basename === \"pnpm-workspace.yaml\") {\n const document = parseDocument(snapshotText({ snapshot, file }));\n if (document.errors.length > 0)\n throw new Error(`Invalid catalog YAML: ${file}`);\n collectCatalogs(document.toJS({ maxAliasCount: 100 }));\n } else if (\n [\n \"bun.lock\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n ].includes(basename)\n ) {\n const lock = parseChangedLock({\n file,\n text: snapshotText({ snapshot, file }),\n });\n for (const resolution of lock.resolutions)\n if (resolution.tool === \"typescript\") names.add(resolution.dependency);\n for (const dependencies of Object.values(lock.importers))\n for (const [name, version] of Object.entries(dependencies))\n if (\n changedPackageTool(\n importerRegistryName({ dependency: name, version }) ?? name,\n ) === \"typescript\"\n )\n names.add(name);\n }\n }\n return names;\n};\n\ntype EffectiveCatalogSpecifierOptions = {\n snapshot: GitSnapshot;\n file: string;\n dependency: string;\n specifier: string;\n};\nconst effectiveCatalogSpecifier = ({\n snapshot,\n file,\n dependency,\n specifier,\n}: EffectiveCatalogSpecifierOptions) => {\n if (!specifier.startsWith(\"catalog:\")) return specifier;\n const catalog = specifier.slice(\"catalog:\".length);\n const owners = [...snapshot.entries.keys()]\n .filter(\n (candidate) =>\n [\"package.json\", \"pnpm-workspace.yaml\"].includes(\n path.posix.basename(candidate),\n ) &&\n isAncestor(path.posix.dirname(candidate), path.posix.dirname(file)),\n )\n .sort(\n (a, b) =>\n directoryDepth(path.posix.dirname(b)) -\n directoryDepth(path.posix.dirname(a)) ||\n Number(b.endsWith(\"pnpm-workspace.yaml\")) -\n Number(a.endsWith(\"pnpm-workspace.yaml\")),\n );\n for (const owner of owners) {\n const text = snapshotText({ snapshot, file: owner });\n let value: unknown;\n if (owner.endsWith(\".yaml\")) {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(`Invalid catalog YAML: ${owner}`);\n value = document.toJS({ maxAliasCount: 100 });\n } else value = parseChangedJson(text);\n if (!changedRecord(value)) continue;\n const sources = [value];\n if (changedRecord(value[\"workspaces\"])) sources.push(value[\"workspaces\"]);\n for (const source of sources) {\n let declarations: unknown;\n if (catalog === \"\") declarations = source[\"catalog\"];\n else if (changedRecord(source[\"catalogs\"]))\n declarations = source[\"catalogs\"][catalog];\n if (declarations === undefined) continue;\n if (\n !changedRecord(declarations) ||\n typeof declarations[dependency] !== \"string\"\n )\n throw new Error(\n `Missing effective catalog dependency: ${file}:${dependency}`,\n );\n const effective = declarations[dependency];\n if (effective.startsWith(\"catalog:\"))\n throw new Error(`Recursive compiler catalog: ${file}:${dependency}`);\n return effective;\n }\n }\n throw new Error(`Missing effective catalog: ${file}:${dependency}`);\n};\nconst compilerPatches = (snapshot: GitSnapshot) => {\n const compilerNames = compilerInstallationNames(snapshot);\n const result: {\n file: string;\n name: string;\n metadata: unknown;\n reference?: string;\n }[] = [];\n for (const file of snapshot.entries.keys()) {\n const name = path.posix.basename(file);\n if (\n ![\n \"package.json\",\n \"pnpm-workspace.yaml\",\n \"pnpm-lock.yaml\",\n \"bun.lock\",\n ].includes(name)\n )\n continue;\n const text = snapshotText({ snapshot, file });\n let value: unknown;\n if (name.endsWith(\".yaml\")) {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(`Invalid compiler patch YAML: ${file}`);\n value = document.toJS({ maxAliasCount: 100 });\n } else value = parseChangedJson(text);\n const sources = [value];\n if (name === \"package.json\" && changedRecord(value))\n sources.push(value[\"pnpm\"]);\n for (const source of sources)\n for (const patch of changedCompilerPatches({\n value: source,\n compilerNames,\n stringsArePaths:\n name === \"package.json\" || name === \"pnpm-workspace.yaml\",\n })) {\n if (patch.reference === undefined) {\n result.push({ file, name: patch.name, metadata: patch.metadata });\n continue;\n }\n const reference = path.posix.normalize(\n path.posix.join(path.posix.dirname(file), patch.reference),\n );\n if (\n patch.reference.trim() === \"\" ||\n path.posix.isAbsolute(patch.reference) ||\n patch.reference.includes(\"\\\\\") ||\n patch.reference\n .split(\"\")\n .some(\n (character) =>\n character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n ) ||\n reference === \"..\" ||\n reference.startsWith(\"../\")\n )\n throw new Error(\n `Compiler patch reference leaves the tracked snapshot: ${file}:${patch.name}`,\n );\n result.push({\n file,\n name: patch.name,\n metadata: patch.metadata,\n reference,\n });\n }\n // pnpm snapshot identifiers carry patch hashes even when package versions agree.\n if (\n name === \"pnpm-lock.yaml\" &&\n changedRecord(value) &&\n changedRecord(value[\"snapshots\"])\n )\n for (const descriptor of Object.keys(value[\"snapshots\"])) {\n const packageName = /^(@[^/]+\\/[^@]+|[^@]+)@/.exec(descriptor)?.[1];\n if (\n packageName &&\n (changedPackageTool(packageName) === \"typescript\" ||\n compilerNames.has(packageName)) &&\n descriptor.includes(\"patch_hash=\")\n )\n result.push({ file, name: descriptor, metadata: descriptor });\n }\n }\n return result;\n};\n\nconst readSnapshots = async ({\n repo,\n trees,\n}: {\n repo: string;\n trees: Map<string, TreeEntry>[];\n}) => {\n const selected = trees.map(\n (tree) => new Map([...tree].filter(([file]) => trackedInput(file))),\n );\n const blobs = new Map<string, string>();\n for (;;) {\n const pending = [\n ...new Set(\n selected.flatMap((entries) =>\n [...entries.values()].map((entry) => entry.oid),\n ),\n ),\n ].filter((oid) => !blobs.has(oid));\n for (const [oid, text] of await readBlobs({ repo, oids: pending }))\n blobs.set(oid, text);\n let expanded = false;\n for (let index = 0; index < selected.length; index += 1) {\n const entries = selected.at(index);\n const tree = trees.at(index);\n if (!entries || !tree) throw new Error(\"Missing Git tree\");\n const required = new Set<string>();\n const requiredPatches = new Set<string>();\n for (const [file, entry] of entries) {\n if (entry.mode !== \"120000\") continue;\n const text = blobs.get(entry.oid);\n if (text === undefined) throw new Error(\"Missing tracked symlink\");\n const target = path.posix.normalize(\n path.posix.join(path.posix.dirname(file), text),\n );\n if (\n path.posix.isAbsolute(text) ||\n target === \"..\" ||\n target.startsWith(\"../\")\n )\n throw new Error(\"Toolchain symlink leaves the tracked tree\");\n required.add(target);\n }\n // Resolve symlink closure before reading workflow YAML.\n const unresolvedLinks = [...required].some((file) => !entries.has(file));\n if (!unresolvedLinks) {\n const snapshot = { entries, blobs };\n for (const file of selectorFiles(snapshot).keys()) required.add(file);\n for (const patch of compilerPatches(snapshot))\n if (patch.reference !== undefined) {\n required.add(patch.reference);\n requiredPatches.add(patch.reference);\n }\n }\n for (const file of required) {\n if (entries.has(file)) continue;\n const entry = tree.get(file);\n if (!entry)\n throw new Error(\n requiredPatches.has(file)\n ? `Missing tracked compiler patch: ${file}`\n : `Missing tracked toolchain selector file: ${file}`,\n );\n entries.set(file, entry);\n expanded = true;\n }\n }\n if (!expanded) return selected.map((entries) => ({ entries, blobs }));\n }\n};\n\nconst stableJson = (value: unknown): string => {\n if (Array.isArray(value)) return JSON.stringify(value.map(stableJson));\n if (changedRecord(value))\n return JSON.stringify(\n Object.entries(value)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, item]) => [key, stableJson(item)]),\n );\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n};\nconst inventory = () =>\n ({\n bun: new Set<string>(),\n node: new Set<string>(),\n typescript: new Set<string>(),\n oxlint: new Set<string>(),\n \"oxlint-tsgolint\": new Set<string>(),\n oxfmt: new Set<string>(),\n shared: new Set<string>(),\n }) satisfies Record<ToolchainChangedTool, Set<string>>;\nconst installedFields = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n] as const;\nconst exactBun = (value: string) => stableVersion(value);\nconst nonRegistryResolution = (specifier: string) =>\n /^(?:link:|workspace:|file:|portal:|catalog:|git:|github:|gitlab:|bitbucket:|git\\+|https?:|ssh:|git@)/i.test(\n specifier,\n );\n\nconst packageTarget = ({\n name,\n specifier,\n}: {\n name: string;\n specifier: string;\n}) => {\n if (!specifier.startsWith(\"npm:\")) return name;\n const match = /^npm:((?:@[^/@\\s]+\\/)?[^/@\\s]+)(?:@.*)?$/.exec(specifier);\n const target = match?.[1];\n if (target === undefined)\n throw new Error(\"Unclassifiable npm alias declaration\");\n return target;\n};\n/** Importers contain resolved descriptors, not declarations; classify protocols first. */\nconst importerRegistryName = ({\n dependency,\n version,\n}: {\n dependency: string;\n version: string;\n}) => {\n if (nonRegistryResolution(version)) return dependency;\n if (version.startsWith(\"npm:\"))\n return packageTarget({ name: dependency, specifier: version });\n const descriptor = version.split(\"(\").at(0) ?? \"\";\n return /^((?:@[^/@\\s]+\\/)?[^/@\\s]+)@/.exec(descriptor)?.[1];\n};\nconst directoryDepth = (directory: string) =>\n directory.split(\"/\").filter((part) => part !== \".\" && part !== \"\").length;\nconst isAncestor = (directory: string, child: string) => {\n const relative = path.posix.relative(directory, child);\n return (\n relative !== \"..\" &&\n !relative.startsWith(\"../\") &&\n !path.posix.isAbsolute(relative)\n );\n};\ntype BoundResolutionOptions = {\n lockFile: string;\n lock: ChangedLock;\n file: string;\n manifest: Record<string, unknown>;\n dependency: string;\n name: string;\n};\nconst boundResolution = ({\n lockFile,\n lock,\n file,\n manifest,\n dependency,\n name,\n}: BoundResolutionOptions) => {\n const directory =\n path.posix.relative(\n path.posix.dirname(lockFile),\n path.posix.dirname(file),\n ) || \".\";\n const importerVersion = lock.importers[directory]?.[dependency];\n const importerName =\n path.posix.basename(lockFile) === \"pnpm-lock.yaml\" &&\n importerVersion !== undefined\n ? importerRegistryName({ dependency, version: importerVersion })\n : undefined;\n const candidates = lock.resolutions.filter(\n (item) =>\n item.name === (importerName ?? name) || item.dependency === dependency,\n );\n if (path.posix.basename(lockFile) === \"pnpm-lock.yaml\") {\n const value = lock.importers[directory]?.[dependency];\n if (value === undefined)\n throw new Error(`Missing resolved importer: ${file}:${dependency}`);\n const descriptor = value.replace(/^npm:/, \"\");\n const version = descriptor.startsWith(`${importerName ?? name}@`)\n ? descriptor.slice((importerName ?? name).length + 1)\n : descriptor;\n const resolvedVersion = version.split(\"(\").at(0);\n const matched = candidates.filter(\n (item) => item.version === resolvedVersion,\n );\n const versions = new Set(\n matched.map((item) => `${item.name}@${item.version}`),\n );\n if (versions.size === 1) return matched;\n throw new Error(`Ambiguous resolved importer: ${file}:${dependency}`);\n }\n if (path.posix.basename(lockFile) === \"yarn.lock\") {\n const declarations = installedFields.flatMap((field) => {\n const source = manifest[field];\n return changedRecord(source) && typeof source[dependency] === \"string\"\n ? [source[dependency]]\n : [];\n });\n const declaredSelectors = new Set(\n declarations.flatMap((specifier) =>\n [\n `${dependency}@${specifier}`,\n `${dependency}@npm:${specifier}`,\n ].flatMap(changedYarnSelectors),\n ),\n );\n const matched = candidates.filter((item) =>\n changedYarnSelectors(item.location).some((selector) =>\n declaredSelectors.has(selector),\n ),\n );\n if (matched.length > 0) return matched;\n throw new Error(\n `Missing resolved Yarn compiler declaration: ${file}:${dependency}`,\n );\n }\n const locations: string[] = [];\n if (path.posix.basename(lockFile) === \"bun.lock\") {\n if (\n directory !== \".\" &&\n typeof manifest[\"name\"] !== \"string\" &&\n candidates.length > 1\n )\n throw new Error(\n `Ambiguous Bun workspace resolution: ${file}:${dependency}`,\n );\n if (directory !== \".\" && typeof manifest[\"name\"] === \"string\")\n locations.push(`${manifest[\"name\"]}/${dependency}`);\n locations.push(dependency);\n } else {\n let current = directory;\n for (;;) {\n locations.push(path.posix.join(current, \"node_modules\", dependency));\n if (current === \".\") break;\n current = path.posix.dirname(current);\n }\n }\n for (const location of locations) {\n const matched = candidates.filter((item) => item.location === location);\n if (matched.length === 1) return matched;\n if (matched.length > 1)\n throw new Error(`Ambiguous lock location: ${file}:${dependency}`);\n }\n throw new Error(\n `Missing resolved toolchain dependency: ${file}:${dependency}`,\n );\n};\nconst stableVersion = (value: unknown) => {\n if (typeof value !== \"string\")\n throw new Error(\"Runtime selector is not an exact stable version\");\n const version = value.trim().replace(/^v/, \"\");\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(version) || valid(version) !== version)\n throw new Error(\"Runtime selector is not an exact stable version\");\n return version;\n};\nconst setupRuntimeVersion = (value: unknown) => {\n if (typeof value !== \"string\" && typeof value !== \"number\")\n throw new Error(\"Unclassifiable setup runtime selector\");\n const selector = String(value).trim();\n return stableVersion(selector);\n};\ntype SetupRuntimeFileOptions = {\n snapshot: GitSnapshot;\n file: string;\n runtime: string;\n};\nconst setupRuntimeFileVersion = ({\n snapshot,\n file,\n runtime,\n}: SetupRuntimeFileOptions) => {\n const text = snapshotText({ snapshot, file }).trim();\n if (runtime === \"bun\" && file.endsWith(\".json\")) {\n const manifest = parseChangedJson(text);\n const manager = changedRecord(manifest)\n ? manifest[\"packageManager\"]\n : undefined;\n if (typeof manager !== \"string\" || !manager.startsWith(\"bun@\"))\n throw new Error(\n \"Bun selector manifest lacks an exact Bun packageManager\",\n );\n return stableVersion(manager.slice(4));\n }\n if (runtime === \"go\" && path.posix.basename(file) === \"go.mod\") {\n const goLines = text.split(/\\r?\\n/).filter((line) => /^\\s*go\\b/.test(line));\n const toolchainLines = text\n .split(/\\r?\\n/)\n .filter((line) => /^\\s*toolchain\\b/.test(line));\n if (goLines.length !== 1 || toolchainLines.length > 1)\n throw new Error(\"Unclassifiable Go runtime directives\");\n const version = /^\\s*go\\s+(\\S+)\\s*(?:\\/\\/.*)?$/.exec(\n goLines.at(0) ?? \"\",\n )?.[1];\n const go = stableVersion(version);\n if (toolchainLines.length === 0) return go;\n const toolchain = /^\\s*toolchain\\s+(\\S+)\\s*(?:\\/\\/.*)?$/.exec(\n toolchainLines.at(0) ?? \"\",\n )?.[1];\n if (toolchain === undefined)\n throw new Error(\"Unclassifiable Go toolchain directive\");\n if (!toolchain.startsWith(\"go\"))\n throw new Error(\"Unclassifiable Go toolchain directive\");\n return stableVersion(toolchain.slice(2));\n }\n if (file.endsWith(\".toml\")) {\n const value: unknown = parseToml(text);\n if (!changedRecord(value))\n throw new Error(\"Unclassifiable setup runtime TOML\");\n if (runtime === \"rust\" && changedRecord(value[\"toolchain\"]))\n return setupRuntimeVersion(value[\"toolchain\"][\"channel\"]);\n if (runtime === \"python\")\n return setupRuntimeVersion(value[\"python-version\"]);\n throw new Error(\"Unclassifiable setup runtime TOML\");\n }\n return setupRuntimeVersion(text);\n};\n\nconst setupRuntimeVersions = (snapshot: GitSnapshot) => {\n const versions: { file: string; runtime: string; version: string }[] = [];\n const step = (value: unknown, file: string, checkouts: CheckoutScope) => {\n if (!changedRecord(value) || typeof value[\"uses\"] !== \"string\") return;\n const action = value[\"uses\"].split(\"@\").at(0)?.toLowerCase();\n let runtime = /(?:^|\\/)setup-([^/]+)$/.exec(action ?? \"\")?.[1];\n if (action === \"dtolnay/rust-toolchain\") runtime = \"rust\";\n if (runtime === undefined) return;\n const raw = value[\"with\"];\n if (!changedRecord(raw))\n throw new Error(`Missing setup runtime selector: ${file}:${runtime}`);\n const inputs = new Map<string, unknown>();\n for (const [key, input] of Object.entries(raw)) {\n const folded = key.toLowerCase();\n if (inputs.has(folded))\n throw new Error(`Duplicate setup input: ${file}:${folded}`);\n inputs.set(folded, input);\n }\n let selected = false;\n for (const [key, input] of inputs) {\n if (\n !/(?:^|-)version(?:-file)?$/.test(key) &&\n ![\"toolchain\", \"toolchain-file\", \"rust-toolchain-file\"].includes(key)\n )\n continue;\n if ([\"bun\", \"node\", \"python\", \"go\", \"java\"].includes(runtime)) {\n if (key === `${runtime}-version` || key === `${runtime}-version-file`)\n selected = true;\n } else if (runtime === \"rust\") {\n if (\n [\n \"toolchain\",\n \"toolchain-file\",\n \"rust-toolchain-file\",\n \"rust-version\",\n \"rust-version-file\",\n ].includes(key)\n )\n selected = true;\n } else if (\n key === \"version\" ||\n key === \"version-file\" ||\n key === `${runtime}-version` ||\n key === `${runtime}-version-file`\n )\n selected = true;\n const inputRuntime =\n [\"bun\", \"node\", \"python\", \"go\", \"java\", \"rust\"].find((candidate) =>\n key.startsWith(`${candidate}-`),\n ) ?? runtime;\n let version: string;\n if (key.endsWith(\"-file\")) {\n if (\n typeof input !== \"string\" ||\n input.trim() === \"\" ||\n input.includes(\"${{\")\n )\n throw new Error(\"Unclassifiable setup version-file declaration\");\n version = setupRuntimeFileVersion({\n snapshot,\n file: resolveCheckoutSelector(input, checkouts),\n runtime: inputRuntime,\n });\n } else version = setupRuntimeVersion(input);\n versions.push({ file, runtime: inputRuntime, version });\n }\n if (!selected)\n throw new Error(`Missing setup runtime selector: ${file}:${runtime}`);\n };\n const visit = (value: unknown, file: string) => {\n if (Array.isArray(value)) {\n for (const entry of value) visit(entry, file);\n return;\n }\n if (!changedRecord(value)) return;\n for (const [key, entry] of Object.entries(value)) {\n if (key === \"steps\" && Array.isArray(entry)) {\n visitStepsInOrder(entry, new Map(), (child, checkouts) =>\n step(child, file, checkouts),\n );\n } else visit(entry, file);\n }\n };\n for (const file of snapshot.entries.keys()) {\n if (githubAutomationFileKind(file) === undefined) continue;\n const document = parseDocument(snapshotText({ snapshot, file }));\n if (document.errors.length > 0)\n throw new Error(\"Unreadable workflow declaration\");\n visit(document.toJS({ maxAliasCount: 100 }), file);\n }\n return versions;\n};\n\nconst stableBunImageVersion = (image: string) => {\n const match = /^oven\\/bun(?::([^@]+))?(?:@[^\\s]+)?$/.exec(image);\n if (match === null) return undefined;\n const version = match[1]?.replace(/-(?:alpine|slim|debian|distroless)$/, \"\");\n return stableVersion(version);\n};\n\nconst assertLiteralDockerImages = (text: string) => {\n const defaults = new Map<string, string>();\n for (const line of text.replace(/\\\\\\r?\\n/g, \" \").split(/\\r?\\n/)) {\n const arg = /^\\s*ARG\\s+([A-Za-z_]\\w*)(?:=(\\S+))?\\s*(?:#.*)?$/i.exec(line);\n if (arg?.[1]) {\n const value = arg[2];\n if (value !== undefined && /^[A-Za-z0-9_.:/@+-]+$/.test(value))\n defaults.set(arg[1], value);\n else defaults.delete(arg[1]);\n }\n const image = /^\\s*FROM\\s+(?:--[^\\s]+\\s+)*(\\S+)/i.exec(line)?.[1];\n if (image === undefined) continue;\n const expanded = image.replace(\n /\\$\\{([A-Za-z_]\\w*)\\}|\\$([A-Za-z_]\\w*)/g,\n (\n original: string,\n braced: string | undefined,\n plain: string | undefined,\n ) => defaults.get(braced ?? plain ?? \"\") ?? original,\n );\n if (expanded.includes(\"$\"))\n throw new Error(\"Unclassifiable Docker image selector\");\n stableBunImageVersion(expanded);\n }\n};\n\ntype ParsedSnapshot = {\n tools: ReturnType<typeof inventory>;\n current: { bun: string[]; typescript: string[] };\n};\nconst parseSnapshot = (snapshot: GitSnapshot): ParsedSnapshot => {\n const tools = inventory();\n const bunVersions = new Set<string>();\n const bunRanges: string[] = [];\n const manifests = new Map<string, Record<string, unknown>>();\n const locks = new Map<string, ChangedLock>();\n const workspacePatterns = new Map<string, unknown>();\n const typescript = new Set<string>();\n const selectedFiles = selectorFiles(snapshot);\n for (const { file, runtime, version } of setupRuntimeVersions(snapshot)) {\n let tool: ToolchainChangedTool = \"shared\";\n if (runtime === \"bun\") tool = \"bun\";\n else if (runtime === \"node\") tool = \"node\";\n tools[tool].add(`setup-runtime:${file}:${runtime}:${version}`);\n }\n const compilerNames = compilerInstallationNames(snapshot);\n for (const patch of compilerPatches(snapshot)) {\n tools.typescript.add(\n `compiler-patch:${patch.file}:${patch.name}:${stableJson(patch.metadata)}`,\n );\n if (patch.reference !== undefined)\n tools.typescript.add(\n `compiler-patch-source:${patch.reference}:${snapshotText({ snapshot, file: patch.reference })}`,\n );\n }\n const addBun = (value: string) => {\n const version = exactBun(value);\n bunVersions.add(version);\n tools.bun.add(version);\n };\n const catalogs = (file: string, value: Record<string, unknown>) => {\n for (const field of [\"catalog\", \"catalogs\"]) {\n if (value[field] === undefined) continue;\n // Catalog names and aliases need their owner's lockfile to classify; unknown\n // entries conservatively force parity through the shared category.\n tools.shared.add(`${file}:${field}:${stableJson(value[field])}`);\n const visit = (entry: unknown, at: string) => {\n if (!changedRecord(entry)) return;\n for (const [name, specifier] of Object.entries(entry)) {\n const target =\n typeof specifier === \"string\"\n ? packageTarget({ name, specifier })\n : name;\n if (changedPackageTool(target) === \"typescript\")\n tools.typescript.add(\n `${file}:${at}:${name}:${stableJson(specifier)}`,\n );\n visit(specifier, `${at}:${name}`);\n }\n };\n visit(value[field], field);\n }\n };\n for (const file of snapshot.entries.keys()) {\n const text = snapshotText({ snapshot, file });\n const name = path.posix.basename(file);\n if (compilerPatchPackageFile(file, compilerNames))\n tools.typescript.add(`patch-package:${file}:${text}`);\n for (const tool of selectedFiles.get(file) ?? [])\n tools[tool].add(`selector-file:${file}:${text}`);\n if (name === \"package.json\") {\n const manifest = parseChangedJson(text);\n if (!changedRecord(manifest))\n throw new Error(`Invalid tracked manifest: ${file}`);\n if (\n typeof manifest[\"name\"] === \"string\" &&\n changedPackageTool(manifest[\"name\"]) === \"typescript\"\n )\n throw new Error(\n `Tracked compiler source has no immutable artifact identity: ${file}`,\n );\n\n manifests.set(file, manifest);\n catalogs(file, manifest);\n if (changedRecord(manifest[\"workspaces\"]))\n catalogs(`${file}:workspaces`, manifest[\"workspaces\"]);\n } else if (name === \".npmrc\") {\n for (const line of text.split(/\\r?\\n/)) {\n if (!/^\\s*(?:use-node-version|node-version)\\s*=/i.test(line)) continue;\n if (/\\$\\{/.test(line))\n throw new Error(\"Unclassifiable npm Node selector\");\n const selector =\n /^\\s*(?:use-node-version|node-version)\\s*=\\s*(.*?)\\s*$/i.exec(\n line,\n )?.[1];\n tools.node.add(`${file}:${stableVersion(selector)}`);\n }\n } else if (name === \"pnpm-workspace.yaml\") {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(\"Invalid pnpm workspace YAML\");\n const workspace: unknown = document.toJS({ maxAliasCount: 100 });\n if (!changedRecord(workspace))\n throw new Error(\"Invalid pnpm workspace configuration\");\n workspacePatterns.set(path.posix.dirname(file), workspace[\"packages\"]);\n catalogs(file, workspace);\n for (const key of [\"useNodeVersion\", \"nodeVersion\"]) {\n if (workspace[key] !== undefined)\n tools.node.add(`${file}:${key}:${stableVersion(workspace[key])}`);\n }\n } else if (\n [\n \"bun.lock\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n ].includes(name)\n )\n locks.set(file, parseChangedLock({ file, text }));\n else if (name === \"bun.lockb\") {\n if (\n !snapshot.entries.has(\n path.posix.join(path.posix.dirname(file), \"bun.lock\"),\n )\n )\n throw new Error(\n \"Binary Bun lockfile cannot be resolved without executing Bun\",\n );\n } else if (name === \".bun-version\") addBun(text.trim());\n else if (otherRuntimeFiles.has(name)) tools.shared.add(`${file}:${text}`);\n else if (name === \".node-version\" || name === \".nvmrc\")\n tools.node.add(`${file}:${stableVersion(text)}`);\n else if (name === \"toolchain.json\") {\n const policy = parseChangedJson(text);\n if (!changedRecord(policy))\n throw new Error(\"Invalid shared toolchain policy\");\n tools.shared.add(`${file}:${stableJson(policy)}`);\n if (typeof policy[\"bun\"] === \"string\") addBun(policy[\"bun\"]);\n } else if (name === \".tool-versions\") {\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n for (const line of text.split(/\\r?\\n/)) {\n const [tool, ...versions] = line.trim().split(/\\s+/);\n const value = versions.join(\" \").split(\"#\")[0]?.trim();\n if (tool === \"bun\" && value) addBun(value);\n if (tool === \"node\" || tool === \"nodejs\")\n tools.node.add(`${file}:${stableVersion(value)}`);\n }\n } else if (isMiseConfigPath(file)) {\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n const parsed: unknown = parseToml(text);\n if (changedRecord(parsed) && changedRecord(parsed[\"tools\"])) {\n for (const [tool, selector] of Object.entries(parsed[\"tools\"])) {\n const value = changedRecord(selector)\n ? selector[\"version\"]\n : selector;\n const values = Array.isArray(value) ? value : [value];\n if (tool === \"bun\" || tool === \"core:bun\")\n for (const version of values) {\n if (typeof version !== \"string\")\n throw new Error(\"Unresolved mise Bun selector\");\n addBun(version);\n }\n if ([\"node\", \"nodejs\", \"core:node\"].includes(tool)) {\n if (values.length === 0)\n throw new Error(\"Unresolved mise Node selector\");\n for (const version of values)\n tools.node.add(`${file}:${stableVersion(version)}`);\n }\n }\n }\n } else if (githubAutomationFileKind(file) !== undefined) {\n tools.shared.add(`${file}:${text}`);\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n } else if (isDockerDefinitionPath(file)) {\n assertLiteralDockerImages(text);\n tools.shared.add(`${file}:${text}`);\n tools.node.add(`${file}:${text}`);\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n for (const match of text.matchAll(\n /^\\s*FROM\\s+(?:--[^\\s]+\\s+)*oven\\/bun:([\\w.+-]+)/gim,\n )) {\n const tag = match[1];\n if (tag !== undefined) {\n const version = stableBunImageVersion(`oven/bun:${tag}`);\n if (version !== undefined) addBun(version);\n }\n }\n } else if (containerDefinition(file)) {\n for (const document of parseAllDocuments(text)) {\n if (document.errors.length > 0) {\n if (\n isComposeDefinitionPath(file) ||\n /(?:^|\\n)\\s*(?:apiVersion|kind)\\s*:/.test(text)\n )\n throw new Error(`Unreadable container declaration: ${file}`);\n continue;\n }\n const value: unknown = document.toJS({ maxAliasCount: 100 });\n const container = containerDocumentImages(value, file);\n if (container === undefined) {\n if (isComposeDefinitionPath(file))\n throw new Error(`Unclassifiable Compose declaration: ${file}`);\n continue;\n }\n for (const { image } of container.images) {\n if (typeof image !== \"string\" || image.includes(\"$\"))\n throw new Error(`Unclassifiable container image selector: ${file}`);\n stableBunImageVersion(image);\n }\n for (const tool of [\"bun\", \"node\", \"typescript\", \"shared\"] as const)\n tools[tool].add(`${file}:${text}`);\n }\n }\n }\n const activeManifest = (file: string) => {\n if (file === \"package.json\") return true;\n const directory = path.posix.dirname(file);\n if (\n [\n \"bun.lock\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n ].some((name) => locks.has(path.posix.join(directory, name)))\n )\n return true;\n const owners = [...manifests]\n .filter(\n ([ownerFile, owner]) =>\n owner[\"workspaces\"] !== undefined &&\n isAncestor(path.posix.dirname(ownerFile), directory),\n )\n .map(([ownerFile, owner]) => ({\n directory: path.posix.dirname(ownerFile),\n patterns: changedRecord(owner[\"workspaces\"])\n ? owner[\"workspaces\"][\"packages\"]\n : owner[\"workspaces\"],\n }));\n const pnpmOwner = [...workspacePatterns]\n .filter(([ownerDirectory]) => isAncestor(ownerDirectory, directory))\n .sort(([a], [b]) => directoryDepth(b) - directoryDepth(a))\n .at(0);\n if (pnpmOwner)\n return workspaceContains({\n directory: pnpmOwner[0],\n file,\n patterns: pnpmOwner[1],\n rootMembership: \"implicit\",\n });\n const owner = owners\n .sort((a, b) => directoryDepth(b.directory) - directoryDepth(a.directory))\n .at(0);\n if (owner)\n return workspaceContains({\n directory: owner.directory,\n file,\n patterns: owner.patterns,\n rootMembership: \"implicit\",\n });\n for (const [lockFile, lock] of locks) {\n const relative =\n path.posix.relative(path.posix.dirname(lockFile), directory) || \".\";\n if (Object.hasOwn(lock.importers, relative)) return true;\n }\n return false;\n };\n for (const [file, manifest] of manifests) {\n const active = activeManifest(file);\n const manager = manifest[\"packageManager\"];\n if (manager !== undefined) {\n if (typeof manager !== \"string\")\n throw new Error(`Unclassifiable package manager: ${file}`);\n if (manager.startsWith(\"bun@\")) addBun(manager.slice(4));\n else tools.shared.add(`${file}:packageManager:${manager}`);\n }\n for (const field of [\"volta\", \"devEngines\"]) {\n if (manifest[field] === undefined) continue;\n for (const tool of [\"bun\", \"node\", \"typescript\", \"shared\"] as const)\n tools[tool].add(`${file}:${field}:${stableJson(manifest[field])}`);\n }\n const engines = manifest[\"engines\"];\n if (changedRecord(engines)) {\n if (typeof engines[\"node\"] === \"string\")\n tools.node.add(`${file}:${engines[\"node\"]}`);\n if (typeof engines[\"bun\"] === \"string\") {\n if (!validRange(engines[\"bun\"]))\n throw new Error(\"Invalid Bun engine selector\");\n bunRanges.push(engines[\"bun\"]);\n tools.bun.add(`${file}:engines.bun:${engines[\"bun\"]}`);\n if (valid(engines[\"bun\"]) !== null) addBun(engines[\"bun\"]);\n }\n }\n // Peer declarations do not install a compiler. Excluded manifests have no\n // modeled workspace lock owner, so preserve their declarations conservatively.\n for (const field of active\n ? [\"peerDependencies\"]\n : [...installedFields, \"peerDependencies\"]) {\n const declarations = manifest[field];\n if (declarations === undefined) continue;\n if (!changedRecord(declarations))\n throw new Error(`Invalid toolchain declarations: ${file}:${field}`);\n for (const [dependency, specifier] of Object.entries(declarations)) {\n if (typeof specifier !== \"string\")\n throw new Error(\n `Unclassifiable toolchain declaration: ${file}:${dependency}`,\n );\n const tool =\n changedPackageTool(packageTarget({ name: dependency, specifier })) ??\n changedPackageTool(dependency) ??\n (compilerNames.has(dependency) ? \"typescript\" : undefined);\n if (tool !== undefined)\n tools[tool].add(`${file}:${field}:${dependency}:${specifier}`);\n }\n }\n if (!active) continue;\n const ownName = manifest[\"name\"];\n const ownVersion = manifest[\"version\"];\n if (\n typeof ownName === \"string\" &&\n changedPackageTool(ownName) === \"shared\" &&\n typeof ownVersion === \"string\"\n )\n tools.shared.add(`${ownName}@${ownVersion}`);\n for (const field of installedFields) {\n const dependencies = manifest[field];\n if (dependencies === undefined) continue;\n if (!changedRecord(dependencies))\n throw new Error(`Invalid manifest dependency table: ${file}`);\n for (const [dependency, specifier] of Object.entries(dependencies)) {\n if (typeof specifier !== \"string\")\n throw new Error(`Invalid dependency specifier: ${file}`);\n const declaredTarget = packageTarget({ name: dependency, specifier });\n if (\n changedPackageTool(declaredTarget) === undefined &&\n changedPackageTool(dependency) === undefined &&\n !compilerNames.has(dependency)\n )\n continue;\n const effectiveSpecifier = effectiveCatalogSpecifier({\n snapshot,\n file,\n dependency,\n specifier,\n });\n const name = packageTarget({\n name: dependency,\n specifier: effectiveSpecifier,\n });\n const tool =\n changedPackageTool(name) ??\n changedPackageTool(dependency) ??\n (compilerNames.has(dependency) ? \"typescript\" : undefined);\n if (tool === undefined) continue;\n const sourceSpecifier = effectiveSpecifier.startsWith(\"npm:\")\n ? effectiveSpecifier.slice(4 + name.length + 1)\n : effectiveSpecifier;\n if (\n tool === \"typescript\" &&\n (/^(?:link:|portal:|workspace:)/i.test(sourceSpecifier) ||\n (/^(?:file:|\\.{1,2}\\/|\\/)/i.test(sourceSpecifier) &&\n !/\\.(?:tgz|tar\\.gz)(?:[?#].*)?$/i.test(sourceSpecifier)))\n )\n throw new Error(\n `Compiler source has no immutable identity: ${file}:${dependency}`,\n );\n if (tool === \"typescript\")\n tools.typescript.add(\n `${file}:${field}:${dependency}:specifier:${specifier}`,\n );\n const candidates = [...locks]\n .filter(([lockFile]) => {\n const relative = path.posix.relative(\n path.posix.dirname(lockFile),\n path.posix.dirname(file),\n );\n return relative !== \"..\" && !relative.startsWith(\"../\");\n })\n .sort(\n ([a], [b]) =>\n directoryDepth(path.posix.dirname(b)) -\n directoryDepth(path.posix.dirname(a)),\n );\n const nearest = candidates.at(0);\n if (!nearest)\n throw new Error(`Missing toolchain lockfile: ${file}:${dependency}`);\n const lockDirectory = path.posix.dirname(nearest[0]);\n const owner = [...manifests]\n .filter(\n ([ownerFile, ownerManifest]) =>\n typeof ownerManifest[\"packageManager\"] === \"string\" &&\n isAncestor(\n path.posix.dirname(ownerFile),\n path.posix.dirname(file),\n ),\n )\n .sort(\n ([a], [b]) =>\n directoryDepth(path.posix.dirname(b)) -\n directoryDepth(path.posix.dirname(a)),\n )\n .at(0);\n const ownerManager = owner?.[1][\"packageManager\"];\n const sameOwner = candidates.filter(\n ([candidate]) => path.posix.dirname(candidate) === lockDirectory,\n );\n const selectedLocks = sameOwner.filter(([candidate]) => {\n if (typeof ownerManager !== \"string\") return true;\n const lockName = path.posix.basename(candidate);\n if (ownerManager.startsWith(\"bun@\")) return lockName === \"bun.lock\";\n if (ownerManager.startsWith(\"pnpm@\"))\n return lockName === \"pnpm-lock.yaml\";\n if (ownerManager.startsWith(\"yarn@\")) return lockName === \"yarn.lock\";\n if (ownerManager.startsWith(\"npm@\"))\n return (\n lockName === \"package-lock.json\" ||\n lockName === \"npm-shrinkwrap.json\"\n );\n return false;\n });\n const selected = selectedLocks.at(0);\n if (selectedLocks.length !== 1 || !selected)\n throw new Error(\n `Ambiguous or missing effective lockfile: ${file}:${dependency}`,\n );\n const [lockFile, lock] = selected;\n const resolved = boundResolution({\n lockFile,\n lock,\n file,\n manifest,\n dependency,\n name,\n });\n if (\n tool === \"typescript\" &&\n resolved.some((item) => item.name !== name)\n )\n throw new Error(\n `Compiler lock name does not match effective declaration: ${file}:${dependency}`,\n );\n if (\n tool === \"typescript\" &&\n nonRegistryResolution(sourceSpecifier) &&\n resolved.some((item) => item.sourceProof.type !== \"immutable\")\n )\n throw new Error(\n `Compiler source has no immutable identity: ${file}:${dependency}`,\n );\n if (\n tool === \"typescript\" &&\n /^(?:git(?:\\+[^:]+)?:|github:|gitlab:|bitbucket:|ssh:|git@)/i.test(\n sourceSpecifier,\n ) &&\n resolved.some(\n (item) =>\n !/(?:git(?:\\+[^:]+)?:|github:|gitlab:|bitbucket:|ssh:|git@|\\.git(?:#|[\"\\\\]))/i.test(\n item.identity,\n ),\n )\n )\n throw new Error(\n `Compiler Git source has no matching immutable identity: ${file}:${dependency}`,\n );\n const range = effectiveSpecifier.startsWith(\"npm:\")\n ? effectiveSpecifier.slice(effectiveSpecifier.lastIndexOf(\"@\") + 1)\n : effectiveSpecifier;\n if (\n validRange(range) &&\n !resolved.some(\n (item) =>\n valid(item.version) !== null && satisfies(item.version, range),\n )\n )\n throw new Error(\n `Toolchain lock resolution does not satisfy manifest: ${file}:${dependency}`,\n );\n for (const item of resolved)\n tools[tool].add(\n `${file}:${dependency}=>${item.location}:${item.name}@${item.version}:${item.identity}`,\n );\n }\n }\n }\n for (const [lockFile, lock] of locks) {\n for (const item of lock.resolutions) {\n tools[item.tool].add(\n `${lockFile}:${item.location}:${item.dependency}=>${item.name}@${item.version}:${item.identity}`,\n );\n if (item.tool === \"typescript\")\n typescript.add(`${item.name}@${item.version}`);\n }\n if (path.posix.basename(lockFile) !== \"pnpm-lock.yaml\") continue;\n for (const [directory, dependencies] of Object.entries(lock.importers))\n for (const [dependency, version] of Object.entries(dependencies)) {\n // Importer versions are resolved descriptors, not npm alias specs.\n // Local/non-registry dependencies must never be reinterpreted as aliases.\n const namedTool = changedPackageTool(dependency);\n const nonRegistry = nonRegistryResolution(version);\n const registryName = importerRegistryName({ dependency, version });\n const tool =\n (registryName === undefined\n ? undefined\n : changedPackageTool(registryName)) ??\n namedTool ??\n (nonRegistry\n ? undefined\n : lock.resolutions.find((item) => item.dependency === dependency)\n ?.tool);\n if (tool !== undefined)\n tools[tool].add(\n `${lockFile}:importer:${directory}:${dependency}:${version}`,\n );\n }\n }\n if (bunVersions.size > 1)\n throw new Error(\"Conflicting Bun runtime versions in tracked declarations\");\n const bun = [...bunVersions].sort();\n if (bunRanges.length > 0 && bun.length === 0)\n throw new Error(\"Bun engine range has no exact runtime declaration\");\n for (const range of bunRanges)\n if (!bun.every((version) => satisfies(version, range)))\n throw new Error(\"Bun runtime does not satisfy tracked engine range\");\n return { tools, current: { bun, typescript: [...typescript].sort() } };\n};\n\nexport const detectToolchainChanges = async ({\n repo,\n since,\n}: {\n repo: string;\n since: string;\n}): Promise<ToolchainChanges> => {\n try {\n const refs = await Promise.all(\n [since, \"HEAD\"].map(async (ref) => {\n const { stdout } = await git(\n \"git\",\n [\"rev-parse\", \"--verify\", \"--end-of-options\", `${ref}^{commit}`],\n { cwd: repo, encoding: \"utf8\" },\n );\n const oid = stdout.trim();\n if (!/^[a-f0-9]{40,64}$/.test(oid))\n throw new Error(\"Invalid Git commit response\");\n return oid;\n }),\n );\n const previousRef = refs.at(0);\n const currentRef = refs.at(1);\n if (!previousRef || !currentRef)\n throw new Error(\"Missing Git comparison snapshot\");\n const [previousEntries, currentEntries] = await Promise.all([\n readTree({ repo, ref: previousRef }),\n readTree({ repo, ref: currentRef }),\n ]);\n const snapshots = await readSnapshots({\n repo,\n trees: [previousEntries, currentEntries],\n });\n const previousSnapshot = snapshots.at(0);\n const currentSnapshot = snapshots.at(1);\n if (!previousSnapshot || !currentSnapshot)\n throw new Error(\"Missing toolchain snapshot\");\n const previous = parseSnapshot(previousSnapshot);\n const current = parseSnapshot(currentSnapshot);\n const tools = toolchainChangedTools.filter(\n (tool) =>\n stableJson([...previous.tools[tool]].sort()) !==\n stableJson([...current.tools[tool]].sort()),\n );\n return {\n status: \"compared\",\n changed: tools.length > 0,\n tools,\n current: current.current,\n };\n } catch (error) {\n return {\n status: \"unreadable\",\n changed: true,\n tools: [...toolchainChangedTools],\n error:\n error instanceof Error\n ? error.message\n : \"Unreadable toolchain Git snapshot\",\n };\n }\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolchain-changed.cjs","names":["isCompilerPackage","valid","parseDocument","yaml","promisify","execFile","isDockerDefinitionPath","isComposeDefinitionPath","isKubernetesDefinitionPath","path","isMiseConfigPath","githubAutomationFileKind","spawn","parseDocument","valid","parseToml","parseAllDocuments","containerDocumentImages","workspaceContains","validRange","satisfies"],"sources":["../src/toolchain-changed-locks.ts","../src/toolchain-changed.ts"],"sourcesContent":["import { valid } from \"semver\";\nimport { parseDocument } from \"yaml\";\n\nimport { isCompilerPackage } from \"./compiler-packages\";\n\nexport const toolchainChangedTools = [\n \"bun\",\n \"node\",\n \"typescript\",\n \"oxlint\",\n \"oxlint-tsgolint\",\n \"oxfmt\",\n \"shared\",\n] as const;\nexport type ToolchainChangedTool = (typeof toolchainChangedTools)[number];\n\nexport const changedRecord = (\n value: unknown,\n): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const changedPackageTool = (\n name: string,\n): ToolchainChangedTool | undefined => {\n if (isCompilerPackage(name)) return \"typescript\";\n if (name === \"oxlint\" || name === \"oxfmt\" || name === \"oxlint-tsgolint\")\n return name;\n if (\n name.startsWith(\"@stll/\") ||\n name === \"@oxlint/plugins\" ||\n name === \"lefthook\"\n )\n return \"shared\";\n return undefined;\n};\n\n/** Compiler patch declarations retain hashes as well as referenced source paths. */\nexport const changedCompilerPatches = ({\n value,\n stringsArePaths,\n compilerNames,\n}: {\n value: unknown;\n stringsArePaths: boolean;\n compilerNames: ReadonlySet<string>;\n}) => {\n const patches: { name: string; metadata: unknown; reference?: string }[] = [];\n if (!changedRecord(value)) return patches;\n const declarations = value[\"patchedDependencies\"];\n if (declarations === undefined) return patches;\n if (!changedRecord(declarations))\n throw new Error(\"Unclassifiable patchedDependencies declaration\");\n for (const [descriptor, metadata] of Object.entries(declarations)) {\n const name = /^(@[^/]+\\/[^@]+|[^@]+)(?:@.*)?$/.exec(descriptor)?.[1];\n if (\n !name ||\n (changedPackageTool(name) !== \"typescript\" && !compilerNames.has(name))\n )\n continue;\n let reference: string | undefined;\n if (typeof metadata === \"string\") {\n if (metadata.trim() === \"\")\n throw new Error(`Empty compiler patch metadata: ${descriptor}`);\n if (stringsArePaths) reference = metadata;\n } else if (changedRecord(metadata)) {\n const declaredPath = metadata[\"path\"];\n if (declaredPath !== undefined) {\n if (typeof declaredPath !== \"string\")\n throw new Error(`Invalid compiler patch path: ${descriptor}`);\n reference = declaredPath;\n }\n } else throw new Error(`Invalid compiler patch metadata: ${descriptor}`);\n if (stringsArePaths && reference === undefined)\n throw new Error(`Missing compiler patch path: ${descriptor}`);\n if (reference === undefined) patches.push({ name: descriptor, metadata });\n else patches.push({ name: descriptor, metadata, reference });\n }\n return patches;\n};\n\n/** JSONC permits comments and trailing commas, never alterations inside strings. */\nexport const parseChangedJson = (text: string): unknown => {\n let clean = \"\";\n let quote = false;\n for (let index = 0; index < text.length; index++) {\n const char = text[index];\n if (quote) {\n clean += char;\n if (char === \"\\\\\") {\n index++;\n clean += text[index] ?? \"\";\n } else if (char === '\"') quote = false;\n continue;\n }\n if (char === '\"') {\n quote = true;\n clean += char;\n continue;\n }\n if (char === \"/\" && text[index + 1] === \"/\") {\n while (index < text.length && text[index] !== \"\\n\") index++;\n clean += \"\\n\";\n continue;\n }\n if (char === \"/\" && text[index + 1] === \"*\") {\n index += 2;\n while (\n index < text.length &&\n !(text[index] === \"*\" && text[index + 1] === \"/\")\n )\n index++;\n if (index >= text.length) throw new Error(\"Unterminated JSONC comment\");\n index++;\n clean += \" \";\n continue;\n }\n clean += char;\n }\n let result = \"\";\n quote = false;\n for (let index = 0; index < clean.length; index++) {\n const char = clean[index];\n if (quote) {\n result += char;\n if (char === \"\\\\\") {\n index++;\n result += clean[index] ?? \"\";\n } else if (char === '\"') quote = false;\n continue;\n }\n if (char === '\"') quote = true;\n if (char === \",\") {\n let next = index + 1;\n while (/\\s/.test(clean[next] ?? \"\") && next < clean.length) next++;\n if (clean[next] === \"}\" || clean[next] === \"]\") continue;\n }\n result += char;\n }\n return JSON.parse(result);\n};\n\nexport const changedYarnSelectors = (location: string) =>\n location\n .replace(/\"/g, \"\")\n .split(/,\\s*/)\n .map((selector) => selector.trim());\n\nexport type ChangedLockSourceProof =\n | { type: \"registry\" }\n | { type: \"immutable\"; identity: string }\n | { type: \"unidentified\" };\nexport type ChangedLockResolution = {\n tool: ToolchainChangedTool;\n name: string;\n version: string;\n dependency: string;\n location: string;\n identity: string;\n sourceProof: ChangedLockSourceProof;\n};\nexport type ChangedLock = {\n resolutions: ChangedLockResolution[];\n importers: Record<string, Record<string, string>>;\n};\nconst packageDescriptor = (descriptor: string) => {\n const match = /^(@[^/]+\\/[^@]+|[^@]+)@(.+)$/.exec(\n descriptor.replace(/^\\//, \"\"),\n );\n const name = match?.[1];\n const version = match?.[2];\n if (!name || !version) return undefined;\n return { name, version };\n};\nconst dependencyName = (location: string) => {\n const parts = location.split(\"/\");\n const last = parts.at(-1);\n const scope = parts.at(-2);\n return scope?.startsWith(\"@\") ? `${scope}/${last}` : (last ?? location);\n};\nconst exactVersion = (value: string) => {\n const version = value.split(\"(\")[0];\n if (version && valid(version) === version) return version;\n throw new Error(`Unresolved toolchain lock version: ${value}`);\n};\nconst stableIdentity = (value: unknown): string => {\n if (Array.isArray(value)) return JSON.stringify(value.map(stableIdentity));\n if (changedRecord(value))\n return JSON.stringify(\n Object.entries(value)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, entry]) => [key, stableIdentity(entry)]),\n );\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n};\nconst validIntegrity = (value: string) =>\n value.split(/\\s+/).some((item) => {\n const match = /^(sha1|sha256|sha384|sha512)-([A-Za-z0-9+/]+={0,2})$/.exec(\n item,\n );\n const algorithm = match?.[1];\n const encoded = match?.[2];\n if (!algorithm || !encoded) return false;\n const bytes = Buffer.from(encoded, \"base64\");\n if (bytes.toString(\"base64\") !== encoded) return false;\n switch (algorithm) {\n case \"sha1\":\n return bytes.length === 20;\n case \"sha256\":\n return bytes.length === 32;\n case \"sha384\":\n return bytes.length === 48;\n case \"sha512\":\n return bytes.length === 64;\n default:\n return false;\n }\n });\nconst lockSourceProof = (raw: unknown): ChangedLockSourceProof => {\n const sources: string[] = [];\n const evidence: string[] = [];\n const commits: string[] = [];\n const source = (value: unknown) => {\n if (typeof value !== \"string\") return;\n sources.push(value);\n const commit = /#(?:commit=)?([a-f0-9]{40}|[a-f0-9]{64})(?:[&#]|$)/i.exec(\n value,\n )?.[1];\n if (commit) commits.push(`commit:${commit.toLowerCase()}`);\n };\n const digest = (key: string, value: unknown) => {\n if (typeof value !== \"string\") return;\n if (\n (key === \"integrity\" && validIntegrity(value)) ||\n (key === \"checksum\" && /^(?:[a-f0-9]+\\/)?[a-f0-9]{128}$/i.test(value)) ||\n (key === \"shasum\" && /^[a-f0-9]{40}$/i.test(value))\n )\n evidence.push(`${key}:${value}`);\n if (key === \"commit\" && /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/i.test(value))\n commits.push(`commit:${value.toLowerCase()}`);\n };\n const metadata = (value: unknown) => {\n if (!changedRecord(value)) return;\n for (const key of [\"resolved\", \"resolution\", \"tarball\", \"repo\", \"version\"])\n source(value[key]);\n for (const key of [\"integrity\", \"checksum\", \"shasum\", \"commit\"])\n digest(key, value[key]);\n if (changedRecord(value[\"resolution\"])) {\n const resolution = value[\"resolution\"];\n for (const key of [\"tarball\", \"repo\", \"directory\"])\n source(resolution[key]);\n for (const key of [\"integrity\", \"commit\"]) digest(key, resolution[key]);\n if (\n resolution[\"type\"] === \"directory\" ||\n typeof resolution[\"directory\"] === \"string\"\n )\n sources.push(\"file:\");\n if (resolution[\"type\"] === \"git\") sources.push(\"git:\");\n }\n if (value[\"link\"] === true) sources.push(\"link:\");\n };\n if (Array.isArray(raw)) {\n source(raw[0]);\n source(raw[1]);\n digest(\"integrity\", raw[3]);\n } else if (changedRecord(raw)) {\n if (changedRecord(raw[\"metadata\"])) {\n metadata(raw[\"metadata\"]);\n const descriptor = raw[\"descriptor\"];\n // Legacy pnpm registry keys start with /; source metadata remains authoritative.\n source(\n typeof descriptor === \"string\"\n ? descriptor.replace(/^\\//, \"\")\n : descriptor,\n );\n } else metadata(raw);\n }\n // Directory protocols are not archive bytes; unrelated hashes cannot prove them.\n const directory = sources.some((value) => {\n if (/(?:^|@)(?:link:|portal:|workspace:)/i.test(value)) return true;\n const local = /(?:^|@)file:(.*)$/i.exec(value)?.[1];\n if (local !== undefined)\n return !/\\.(?:tgz|tar\\.gz)(?:[?#].*)?$/i.test(local);\n return (\n /^(?:\\.{1,2}\\/|\\/)/.test(value) &&\n !/\\.(?:tgz|tar\\.gz)(?:[?#].*)?$/i.test(value)\n );\n });\n if (directory) return { type: \"unidentified\" };\n const gitSource = sources.some((value) =>\n /(?:^|@)(?:git(?:\\+[^:]+)?:|github:|gitlab:|bitbucket:|ssh:)|(?:github\\.com|gitlab\\.com)[:/]|(?:^|@)git@|^[\\w.-]+@(?!(?:npm|patch|file|link|portal|workspace|https?|git(?:\\+[^:]+)?|github|gitlab|bitbucket|ssh):)[^/:]+:|\\.git(?:#|$)/i.test(\n value,\n ),\n );\n if (gitSource) {\n const proof = commits;\n return proof.length > 0\n ? { type: \"immutable\", identity: stableIdentity(proof.sort()) }\n : { type: \"unidentified\" };\n }\n const externalArchive = sources.some(\n (value) =>\n /(?:^|@)file:/i.test(value) ||\n (/(?:^|@)https?:/i.test(value) &&\n !/(?:^|@)https:\\/\\/(?:registry\\.npmjs\\.org|registry\\.yarnpkg\\.com)\\//i.test(\n value,\n )),\n );\n if (externalArchive && evidence.length === 0) return { type: \"unidentified\" };\n if (evidence.length > 0)\n return { type: \"immutable\", identity: stableIdentity(evidence.sort()) };\n return { type: \"registry\" };\n};\ntype AddResolutionOptions = {\n raw: unknown;\n resolutions: ChangedLockResolution[];\n name: string;\n version: string;\n dependency: string;\n location: string;\n};\nconst addResolution = ({\n raw,\n resolutions,\n name,\n version,\n dependency,\n location,\n}: AddResolutionOptions) => {\n const tool = changedPackageTool(name) ?? changedPackageTool(dependency);\n if (tool === undefined) return;\n const sourceProof = lockSourceProof(raw);\n if (tool === \"typescript\" && sourceProof.type === \"unidentified\")\n throw new Error(`Compiler source has no immutable identity: ${name}`);\n const identity = stableIdentity(raw);\n if (version.startsWith(\"workspace:\") || version.startsWith(\"link:\")) {\n if (tool !== \"shared\")\n throw new Error(`Unresolved compiler workspace lock version: ${name}`);\n resolutions.push({\n tool,\n name,\n version,\n dependency,\n location,\n identity,\n sourceProof,\n });\n return;\n }\n resolutions.push({\n tool,\n name,\n version: exactVersion(version),\n identity,\n sourceProof,\n dependency,\n location,\n });\n};\nconst dependencyFields = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n] as const;\nconst importerDependencies = (value: unknown) => {\n if (!changedRecord(value)) throw new Error(\"Invalid lockfile importer\");\n const result: Record<string, string> = {};\n for (const field of dependencyFields) {\n const dependencies = value[field];\n if (dependencies === undefined) continue;\n if (!changedRecord(dependencies))\n throw new Error(\"Invalid lockfile dependency table\");\n for (const [name, metadata] of Object.entries(dependencies)) {\n if (typeof metadata === \"string\") result[name] = metadata;\n else if (\n changedRecord(metadata) &&\n typeof metadata[\"version\"] === \"string\"\n )\n result[name] = metadata[\"version\"];\n else if (changedPackageTool(name) !== undefined)\n throw new Error(`Unresolved lockfile importer dependency: ${name}`);\n }\n }\n return result;\n};\n\n// Bun text lockfiles 0-2 share the workspaces table and the\n// [descriptor, registry, metadata, integrity] package entries read below.\nconst BUN_TEXT_LOCKFILE_VERSIONS: ReadonlySet<number> = new Set([0, 1, 2]);\n\nexport const parseChangedLock = ({\n file,\n text,\n}: {\n file: string;\n text: string;\n}): ChangedLock => {\n const resolutions: ChangedLockResolution[] = [];\n const importers: Record<string, Record<string, string>> = {};\n if (file.endsWith(\"bun.lock\")) {\n const parsed = parseChangedJson(text);\n if (\n !changedRecord(parsed) ||\n !BUN_TEXT_LOCKFILE_VERSIONS.has(Number(parsed[\"lockfileVersion\"])) ||\n !changedRecord(parsed[\"packages\"]) ||\n !changedRecord(parsed[\"workspaces\"])\n )\n throw new Error(\"Unsupported Bun lockfile shape\");\n for (const [directory, workspace] of Object.entries(parsed[\"workspaces\"]))\n importers[directory || \".\"] = importerDependencies(workspace);\n for (const [location, value] of Object.entries(parsed[\"packages\"])) {\n const dependency = dependencyName(location);\n const first: unknown = Array.isArray(value) ? value.at(0) : undefined;\n const descriptor =\n typeof first === \"string\" ? packageDescriptor(first) : undefined;\n if (descriptor !== undefined)\n addResolution({\n resolutions,\n ...descriptor,\n dependency,\n location,\n raw: value,\n });\n else if (changedPackageTool(dependency) !== undefined)\n throw new Error(`Invalid Bun toolchain lock entry: ${location}`);\n }\n } else if (file.endsWith(\"pnpm-lock.yaml\")) {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(\"Invalid pnpm lockfile YAML\");\n const parsed: unknown = document.toJS({ maxAliasCount: 100 });\n if (\n !changedRecord(parsed) ||\n ![5.4, 6, 9].includes(Number(parsed[\"lockfileVersion\"]))\n )\n throw new Error(\"Unsupported pnpm lockfile shape\");\n const sourceImporters = changedRecord(parsed[\"importers\"])\n ? parsed[\"importers\"]\n : { \".\": parsed };\n for (const [directory, importer] of Object.entries(sourceImporters))\n importers[directory] = importerDependencies(importer);\n const packages = parsed[\"packages\"] ?? {};\n if (!changedRecord(packages))\n throw new Error(\"Invalid pnpm lockfile packages\");\n for (const [location, metadata] of Object.entries(packages)) {\n let descriptor = packageDescriptor(location);\n if (descriptor === undefined) {\n const legacy = /^(.*)\\/([^/]+)$/.exec(location.replace(/^\\//, \"\"));\n if (legacy?.[1] && legacy[2])\n descriptor = { name: legacy[1], version: legacy[2] };\n }\n if (!descriptor) continue;\n const version =\n changedRecord(metadata) && typeof metadata[\"version\"] === \"string\"\n ? metadata[\"version\"]\n : descriptor.version;\n const baseDescriptor = location.split(\"(\").at(0);\n const snapshots = changedRecord(parsed[\"snapshots\"])\n ? Object.fromEntries(\n Object.entries(parsed[\"snapshots\"]).filter(\n ([key]) => key.split(\"(\").at(0) === baseDescriptor,\n ),\n )\n : {};\n addResolution({\n resolutions,\n name: descriptor.name,\n raw: { descriptor: location, metadata, snapshots },\n version,\n dependency: descriptor.name,\n location,\n });\n }\n } else if (file.endsWith(\"yarn.lock\")) {\n const classic = /^# yarn lockfile v1\\s*$/m.test(text);\n let yaml = text;\n if (classic) {\n yaml = text\n .split(/\\r?\\n/)\n .map((line) => {\n if (line === \"\" || /^\\s*#/.test(line)) return line;\n if (!/^\\s/.test(line) && line.endsWith(\":\"))\n return `${JSON.stringify(line.slice(0, -1))}:`;\n const field = /^(\\s+)([A-Za-z][\\w-]*|\"(?:[^\"\\\\]|\\\\.)*\") (.+)$/.exec(\n line,\n );\n if (field) return `${field[1]}${field[2]}: ${field[3]}`;\n return line;\n })\n .join(\"\\n\");\n }\n const document = parseDocument(yaml);\n if (document.errors.length > 0) throw new Error(\"Invalid Yarn lockfile\");\n const parsed: unknown = document.toJS({ maxAliasCount: 100 });\n if (\n !changedRecord(parsed) ||\n (!classic && !changedRecord(parsed[\"__metadata\"]))\n )\n throw new Error(\"Unsupported Yarn lockfile shape\");\n for (const [location, metadata] of Object.entries(parsed)) {\n if (location === \"__metadata\") continue;\n const selectors = changedYarnSelectors(location);\n const descriptors = selectors\n .map(packageDescriptor)\n .filter((item) => item !== undefined);\n for (const descriptor of descriptors) {\n const alias = descriptor.version.startsWith(\"npm:\")\n ? packageDescriptor(descriptor.version.slice(4))\n : undefined;\n const dependency = descriptor.name;\n const resolution =\n changedRecord(metadata) && typeof metadata[\"resolution\"] === \"string\"\n ? packageDescriptor(metadata[\"resolution\"])\n : undefined;\n const resolutionAlias = resolution?.version.startsWith(\"npm:\")\n ? packageDescriptor(resolution.version.slice(4))\n : undefined;\n let name = resolutionAlias?.name ?? resolution?.name ?? dependency;\n if (alias && !isCompilerPackage(name)) name = alias.name;\n const patchDescriptor = descriptor.version.startsWith(\"patch:\")\n ? packageDescriptor(descriptor.version.slice(\"patch:\".length))\n : undefined;\n if (\n (isCompilerPackage(name) ||\n isCompilerPackage(dependency) ||\n (patchDescriptor !== undefined &&\n isCompilerPackage(patchDescriptor.name))) &&\n (descriptor.version.startsWith(\"patch:\") ||\n resolution?.version.startsWith(\"patch:\"))\n )\n throw new Error(\n `Yarn compiler patch identity requires tracked patch bytes: ${location}`,\n );\n if (\n changedPackageTool(name) === undefined &&\n changedPackageTool(dependency) === undefined\n )\n continue;\n if (!changedRecord(metadata) || typeof metadata[\"version\"] !== \"string\")\n throw new Error(`Missing Yarn toolchain version: ${location}`);\n if (!classic && typeof metadata[\"resolution\"] !== \"string\")\n throw new Error(`Missing Yarn compiler resolution: ${location}`);\n addResolution({\n resolutions,\n name,\n version: metadata[\"version\"],\n dependency,\n location: selectors.join(\", \"),\n raw: { selectors, metadata },\n });\n }\n }\n } else {\n const parsed = parseChangedJson(text);\n if (\n !changedRecord(parsed) ||\n ![1, 2, 3].includes(Number(parsed[\"lockfileVersion\"]))\n )\n throw new Error(\"Unsupported npm lockfile shape\");\n if (changedRecord(parsed[\"packages\"])) {\n for (const [location, metadata] of Object.entries(parsed[\"packages\"])) {\n if (!changedRecord(metadata))\n throw new Error(\"Invalid npm lockfile package\");\n if (!location.includes(\"node_modules/\")) {\n const ownName = metadata[\"name\"];\n if (typeof ownName === \"string\" && isCompilerPackage(ownName))\n throw new Error(\n `Compiler directory lock entry has no tracked byte identity: ${location || \".\"}`,\n );\n importers[location || \".\"] = importerDependencies(metadata);\n continue;\n }\n const dependency = dependencyName(location);\n const name =\n typeof metadata[\"name\"] === \"string\" ? metadata[\"name\"] : dependency;\n if (metadata[\"link\"] === true) {\n addResolution({\n resolutions,\n name,\n raw: metadata,\n version: `link:${String(metadata[\"resolved\"])}`,\n dependency,\n location,\n });\n continue;\n }\n if (typeof metadata[\"version\"] === \"string\")\n addResolution({\n resolutions,\n name,\n raw: metadata,\n version: metadata[\"version\"],\n dependency,\n location,\n });\n else if (\n changedPackageTool(name) !== undefined ||\n changedPackageTool(dependency) !== undefined\n )\n throw new Error(`Missing npm toolchain version: ${name}`);\n }\n } else if (changedRecord(parsed[\"dependencies\"])) {\n const visit = ({\n dependencies,\n parent,\n }: {\n dependencies: Record<string, unknown>;\n parent: string;\n }) => {\n for (const [dependency, metadata] of Object.entries(dependencies)) {\n if (!changedRecord(metadata))\n throw new Error(\"Invalid npm lockfile dependency\");\n const location = `${parent}node_modules/${dependency}`;\n const version = metadata[\"version\"];\n const alias =\n typeof version === \"string\" && version.startsWith(\"npm:\")\n ? packageDescriptor(version.slice(4))\n : undefined;\n if (typeof version === \"string\")\n addResolution({\n resolutions,\n name: alias?.name ?? dependency,\n raw: metadata,\n version: alias?.version ?? version,\n dependency,\n location,\n });\n else if (changedPackageTool(dependency) !== undefined)\n throw new Error(`Missing npm toolchain version: ${dependency}`);\n if (changedRecord(metadata[\"dependencies\"]))\n visit({\n dependencies: metadata[\"dependencies\"],\n parent: `${location}/`,\n });\n }\n };\n visit({ dependencies: parsed[\"dependencies\"], parent: \"\" });\n } else throw new Error(\"Missing npm lockfile dependency resolutions\");\n }\n return { resolutions, importers };\n};\n","import { execFile, spawn } from \"node:child_process\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { satisfies, valid, validRange } from \"semver\";\nimport { parse as parseToml } from \"smol-toml\";\nimport { parseAllDocuments, parseDocument } from \"yaml\";\n\nimport {\n changedPackageTool,\n changedYarnSelectors,\n changedCompilerPatches,\n changedRecord,\n parseChangedJson,\n parseChangedLock,\n toolchainChangedTools,\n type ChangedLock,\n type ToolchainChangedTool,\n} from \"./toolchain-changed-locks\";\nimport {\n containerDocumentImages,\n isComposeDefinitionPath,\n isKubernetesDefinitionPath,\n} from \"./toolchain-container-inputs\";\nimport {\n isDockerDefinitionPath,\n githubAutomationFileKind,\n isMiseConfigPath,\n} from \"./toolchain-inputs\";\nimport { workspaceContains } from \"./toolchain-workspaces\";\n\nexport type ToolchainChanges =\n | {\n status: \"compared\";\n changed: boolean;\n tools: ToolchainChangedTool[];\n current: { bun: string[]; typescript: string[] };\n }\n | {\n status: \"unreadable\";\n changed: true;\n tools: ToolchainChangedTool[];\n error: string;\n };\n\nconst git = promisify(execFile);\nconst otherRuntimeFiles = new Set([\n \".python-version\",\n \"rust-toolchain\",\n \"rust-toolchain.toml\",\n \".go-version\",\n \"go.mod\",\n \"go.work\",\n \".java-version\",\n \".ruby-version\",\n \".sdkmanrc\",\n \".dotnet-version\",\n \"global.json\",\n \".terraform-version\",\n \".deno-version\",\n]);\nconst containerDefinition = (file: string) =>\n isDockerDefinitionPath(file) ||\n isComposeDefinitionPath(file) ||\n isKubernetesDefinitionPath(file);\nconst compilerPatchPackageFile = (\n file: string,\n compilerNames: ReadonlySet<string>,\n) => {\n if (!file.endsWith(\".patch\")) return false;\n // patch-package encodes nested installations with ++; the final package is patched.\n const target = path.posix.basename(file).split(\"++\").at(-1);\n if (target === undefined) return false;\n const encoded = /^(@[^+]+\\+[^+]+|[^+]+)\\+/.exec(target)?.[1];\n return (\n encoded !== undefined &&\n (changedPackageTool(encoded.replace(\"+\", \"/\")) === \"typescript\" ||\n compilerNames.has(encoded.replace(\"+\", \"/\")))\n );\n};\nconst trackedInput = (file: string) => {\n if (\n file.split(\"/\").some((part) => part === \"node_modules\" || part === \"vendor\")\n )\n return false;\n const name = path.posix.basename(file);\n return (\n [\n \"package.json\",\n \"bun.lock\",\n \"bun.lockb\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n \"pnpm-workspace.yaml\",\n \".node-version\",\n \".nvmrc\",\n \".bun-version\",\n \".tool-versions\",\n \"toolchain.json\",\n \".npmrc\",\n ].includes(name) ||\n file.endsWith(\".patch\") ||\n otherRuntimeFiles.has(name) ||\n isMiseConfigPath(file) ||\n githubAutomationFileKind(file) !== undefined ||\n containerDefinition(file)\n );\n};\ntype TreeEntry = { mode: string; oid: string };\ntype GitSnapshot = {\n entries: Map<string, TreeEntry>;\n blobs: Map<string, string>;\n};\nconst readTree = async ({ repo, ref }: { repo: string; ref: string }) => {\n const { stdout } = await git(\"git\", [\"ls-tree\", \"-rz\", \"--full-tree\", ref], {\n cwd: repo,\n encoding: \"utf8\",\n maxBuffer: 32 * 1024 * 1024,\n });\n const entries = new Map<string, TreeEntry>();\n for (const entry of stdout.split(\"\\0\")) {\n if (entry === \"\") continue;\n const tab = entry.indexOf(\"\\t\");\n if (tab < 0) throw new Error(\"Invalid Git tree response\");\n const file = entry.slice(tab + 1);\n const [mode, type, oid] = entry.slice(0, tab).split(\" \");\n if (type !== \"blob\" && !trackedInput(file)) continue;\n if (type !== \"blob\" || !mode || !oid || !/^[a-f0-9]{40,64}$/.test(oid))\n throw new Error(\"Unreadable tracked toolchain input\");\n entries.set(file, { mode, oid });\n }\n return entries;\n};\nconst readBlobs = async ({ repo, oids }: { repo: string; oids: string[] }) => {\n if (oids.length === 0) return new Map<string, string>();\n const data = await new Promise<Buffer>((resolve, reject) => {\n const child = spawn(\"git\", [\"cat-file\", \"--batch\"], {\n cwd: repo,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n const chunks: Buffer[] = [];\n let size = 0;\n child.stdout.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > 128 * 1024 * 1024) {\n child.kill();\n reject(new Error(\"Toolchain Git snapshot exceeds the read limit\"));\n return;\n }\n chunks.push(chunk);\n });\n child.stderr.resume();\n child.on(\"error\", reject);\n child.on(\"close\", (code) =>\n code === 0\n ? resolve(Buffer.concat(chunks))\n : reject(new Error(\"Unable to read Git snapshot blobs\")),\n );\n child.stdin.on(\"error\", reject);\n child.stdin.end(`${oids.join(\"\\n\")}\\n`);\n });\n const blobs = new Map<string, string>();\n let offset = 0;\n for (const oid of oids) {\n const end = data.indexOf(10, offset);\n if (end < 0) throw new Error(\"Invalid Git blob response\");\n const [actual, type, length] = data\n .subarray(offset, end)\n .toString(\"utf8\")\n .split(\" \");\n const size = Number(length);\n if (\n actual !== oid ||\n type !== \"blob\" ||\n !Number.isSafeInteger(size) ||\n size < 0 ||\n end + size + 1 >= data.length\n )\n throw new Error(\"Unreadable Git blob response\");\n offset = end + 1;\n blobs.set(oid, data.subarray(offset, offset + size).toString(\"utf8\"));\n offset += size + 1;\n }\n if (offset !== data.length) throw new Error(\"Unexpected Git blob response\");\n return blobs;\n};\nconst snapshotText = ({\n snapshot,\n file,\n visited = new Set<string>(),\n}: {\n snapshot: GitSnapshot;\n file: string;\n visited?: Set<string>;\n}): string => {\n if (visited.has(file))\n throw new Error(\"Cyclic tracked toolchain file reference\");\n visited.add(file);\n const entry = snapshot.entries.get(file);\n const text = entry && snapshot.blobs.get(entry.oid);\n if (!entry || text === undefined)\n throw new Error(`Missing tracked toolchain input: ${file}`);\n if (entry.mode !== \"120000\") return text;\n const target = path.posix.normalize(\n path.posix.join(path.posix.dirname(file), text),\n );\n if (\n path.posix.isAbsolute(text) ||\n target === \"..\" ||\n target.startsWith(\"../\")\n )\n throw new Error(\"Toolchain file reference leaves the tracked snapshot\");\n return snapshotText({ snapshot, file: target, visited });\n};\n/** Read declared selector files too, without executing workflows or inspecting installed tools. */\ntype CheckoutStep =\n | { kind: \"root\"; sameRepository: boolean }\n | { kind: \"unknown\" }\n | { kind: \"path\"; path: string; sameRepository: boolean };\n\n/**\n * What one `actions/checkout` step puts where, or `undefined` for any other step.\n *\n * A selector such as `base/package.json` after a checkout of this repository\n * with `path: base` names the repository's own `package.json` at another ref,\n * so it is read as that tracked file. A path built from an expression could\n * replace any directory, so it is `unknown`.\n */\nconst checkoutStep = (step: unknown): CheckoutStep | undefined => {\n if (!changedRecord(step)) return undefined;\n const uses = step[\"uses\"];\n if (typeof uses !== \"string\" || !uses.startsWith(\"actions/checkout@\"))\n return undefined;\n const options = changedRecord(step[\"with\"]) ? step[\"with\"] : {};\n const repository = options[\"repository\"];\n const sameRepository =\n repository === undefined || repository === \"${{ github.repository }}\";\n const checkoutPath = options[\"path\"];\n if (checkoutPath === undefined) return { kind: \"root\", sameRepository };\n if (\n typeof checkoutPath !== \"string\" ||\n checkoutPath.includes(\"${{\") ||\n path.posix.isAbsolute(checkoutPath)\n )\n return { kind: \"unknown\" };\n const normalized = path.posix.normalize(checkoutPath).replace(/\\/+$/, \"\");\n if (normalized === \"\" || normalized === \".\") return { kind: \"root\", sameRepository };\n if (normalized.split(\"/\").includes(\"..\")) return { kind: \"unknown\" };\n return { kind: \"path\", path: normalized, sameRepository };\n};\n\n/**\n * Checked-out directories in step order, each owned by this repository\n * (`true`) or another (`false`). `\"\"` is the workspace root. With no\n * checkout recorded, selectors name tracked files directly.\n */\ntype CheckoutScope = ReadonlyMap<string, boolean>;\n\n/**\n * The tracked file a declared selector names under the checkouts preceding\n * its step. The most specific checkout directory decides; a selector inside\n * another repository's checkout is not a tracked file, whatever this\n * repository tracks at the same path.\n */\nconst resolveCheckoutSelector = (\n declared: string,\n checkouts: CheckoutScope,\n): string => {\n const file = path.posix.normalize(declared);\n let owner: string | undefined;\n for (const directory of checkouts.keys())\n if (\n (directory === \"\" || file.startsWith(`${directory}/`)) &&\n (owner === undefined || directory.length > owner.length)\n )\n owner = directory;\n if (owner === undefined) return file;\n if (checkouts.get(owner) !== true)\n throw new Error(\n `Setup version-file names a file outside this repository: ${declared}`,\n );\n return owner === \"\" ? file : file.slice(owner.length + 1);\n};\n\n/** Visit each step with only the checkouts that precede it. */\nconst visitStepsInOrder = (\n steps: readonly unknown[],\n checkouts: CheckoutScope,\n visitStep: (step: unknown, checkouts: CheckoutScope) => void,\n) => {\n // Each visit completes before the next checkout changes the scope.\n const scope = new Map(checkouts);\n for (const step of steps) {\n visitStep(step, scope);\n const checkout = checkoutStep(step);\n if (checkout === undefined) continue;\n if (checkout.kind !== \"path\") {\n // A root checkout replaces the workspace; an expression path may\n // replace anything, so nothing after it is known to be tracked.\n scope.clear();\n scope.set(\"\", checkout.kind === \"root\" && checkout.sameRepository);\n continue;\n }\n for (const directory of scope.keys())\n if (\n directory === checkout.path ||\n directory.startsWith(`${checkout.path}/`)\n )\n scope.delete(directory);\n scope.set(checkout.path, checkout.sameRepository);\n }\n};\n\nconst selectorFiles = (snapshot: GitSnapshot) => {\n const files = new Map<string, Set<ToolchainChangedTool>>();\n const visit = (value: unknown, checkouts: CheckoutScope = new Map()) => {\n if (Array.isArray(value)) {\n for (const entry of value) visit(entry, checkouts);\n return;\n }\n if (!changedRecord(value)) return;\n for (const [key, entry] of Object.entries(value)) {\n if (key === \"steps\" && Array.isArray(entry)) {\n visitStepsInOrder(entry, checkouts, visit);\n continue;\n }\n const input = key.toLowerCase();\n if (\n !/(?:^|-)version-file$/.test(input) &&\n ![\"toolchain-file\", \"rust-toolchain-file\", \"global-json-file\"].includes(\n input,\n )\n ) {\n visit(entry, checkouts);\n continue;\n }\n if (\n typeof entry !== \"string\" ||\n entry.trim() === \"\" ||\n entry.includes(\"${{\") ||\n path.posix.isAbsolute(entry) ||\n entry.split(\"/\").includes(\"..\")\n )\n throw new Error(\"Unclassifiable setup version-file declaration\");\n const file = resolveCheckoutSelector(entry, checkouts);\n if (\n file === \".\" ||\n file\n .split(\"/\")\n .some((part) => part === \"vendor\" || part === \"node_modules\")\n )\n throw new Error(\n \"Setup version-file leaves the tracked toolchain scope\",\n );\n let tool: ToolchainChangedTool = \"shared\";\n if (input === \"node-version-file\") tool = \"node\";\n else if (input === \"bun-version-file\") tool = \"bun\";\n const selected = files.get(file) ?? new Set<ToolchainChangedTool>();\n selected.add(tool);\n files.set(file, selected);\n }\n };\n for (const file of snapshot.entries.keys()) {\n if (githubAutomationFileKind(file) === undefined) continue;\n const document = parseDocument(snapshotText({ snapshot, file }));\n if (document.errors.length > 0)\n throw new Error(\"Unreadable workflow declaration\");\n const value: unknown = document.toJS({ maxAliasCount: 100 });\n visit(value);\n }\n return files;\n};\n\nconst compilerInstallationNames = (snapshot: GitSnapshot) => {\n const names = new Set<string>();\n const collectCatalogs = (value: unknown) => {\n if (!changedRecord(value)) return;\n const visit = (entry: unknown) => {\n if (!changedRecord(entry)) return;\n for (const [name, specifier] of Object.entries(entry)) {\n if (\n typeof specifier === \"string\" &&\n changedPackageTool(packageTarget({ name, specifier })) ===\n \"typescript\"\n )\n names.add(name);\n else visit(specifier);\n }\n };\n visit(value[\"catalog\"]);\n visit(value[\"catalogs\"]);\n };\n for (const file of snapshot.entries.keys()) {\n const basename = path.posix.basename(file);\n if (basename === \"package.json\") {\n const manifest = parseChangedJson(snapshotText({ snapshot, file }));\n if (!changedRecord(manifest))\n throw new Error(`Invalid tracked manifest: ${file}`);\n if (\n typeof manifest[\"name\"] === \"string\" &&\n changedPackageTool(manifest[\"name\"]) === \"typescript\"\n )\n throw new Error(\n `Tracked compiler source has no immutable artifact identity: ${file}`,\n );\n collectCatalogs(manifest);\n collectCatalogs(manifest[\"workspaces\"]);\n\n for (const field of installedFields) {\n const dependencies = manifest[field];\n if (!changedRecord(dependencies)) continue;\n for (const [name, specifier] of Object.entries(dependencies))\n if (\n typeof specifier === \"string\" &&\n changedPackageTool(packageTarget({ name, specifier })) ===\n \"typescript\"\n )\n names.add(name);\n }\n } else if (basename === \"pnpm-workspace.yaml\") {\n const document = parseDocument(snapshotText({ snapshot, file }));\n if (document.errors.length > 0)\n throw new Error(`Invalid catalog YAML: ${file}`);\n collectCatalogs(document.toJS({ maxAliasCount: 100 }));\n } else if (\n [\n \"bun.lock\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n ].includes(basename)\n ) {\n const lock = parseChangedLock({\n file,\n text: snapshotText({ snapshot, file }),\n });\n for (const resolution of lock.resolutions)\n if (resolution.tool === \"typescript\") names.add(resolution.dependency);\n for (const dependencies of Object.values(lock.importers))\n for (const [name, version] of Object.entries(dependencies))\n if (\n changedPackageTool(\n importerRegistryName({ dependency: name, version }) ?? name,\n ) === \"typescript\"\n )\n names.add(name);\n }\n }\n return names;\n};\n\ntype EffectiveCatalogSpecifierOptions = {\n snapshot: GitSnapshot;\n file: string;\n dependency: string;\n specifier: string;\n};\nconst effectiveCatalogSpecifier = ({\n snapshot,\n file,\n dependency,\n specifier,\n}: EffectiveCatalogSpecifierOptions) => {\n if (!specifier.startsWith(\"catalog:\")) return specifier;\n const catalog = specifier.slice(\"catalog:\".length);\n const owners = [...snapshot.entries.keys()]\n .filter(\n (candidate) =>\n [\"package.json\", \"pnpm-workspace.yaml\"].includes(\n path.posix.basename(candidate),\n ) &&\n isAncestor(path.posix.dirname(candidate), path.posix.dirname(file)),\n )\n .sort(\n (a, b) =>\n directoryDepth(path.posix.dirname(b)) -\n directoryDepth(path.posix.dirname(a)) ||\n Number(b.endsWith(\"pnpm-workspace.yaml\")) -\n Number(a.endsWith(\"pnpm-workspace.yaml\")),\n );\n for (const owner of owners) {\n const text = snapshotText({ snapshot, file: owner });\n let value: unknown;\n if (owner.endsWith(\".yaml\")) {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(`Invalid catalog YAML: ${owner}`);\n value = document.toJS({ maxAliasCount: 100 });\n } else value = parseChangedJson(text);\n if (!changedRecord(value)) continue;\n const sources = [value];\n if (changedRecord(value[\"workspaces\"])) sources.push(value[\"workspaces\"]);\n for (const source of sources) {\n let declarations: unknown;\n if (catalog === \"\") declarations = source[\"catalog\"];\n else if (changedRecord(source[\"catalogs\"]))\n declarations = source[\"catalogs\"][catalog];\n if (declarations === undefined) continue;\n if (\n !changedRecord(declarations) ||\n typeof declarations[dependency] !== \"string\"\n )\n throw new Error(\n `Missing effective catalog dependency: ${file}:${dependency}`,\n );\n const effective = declarations[dependency];\n if (effective.startsWith(\"catalog:\"))\n throw new Error(`Recursive compiler catalog: ${file}:${dependency}`);\n return effective;\n }\n }\n throw new Error(`Missing effective catalog: ${file}:${dependency}`);\n};\nconst compilerPatches = (snapshot: GitSnapshot) => {\n const compilerNames = compilerInstallationNames(snapshot);\n const result: {\n file: string;\n name: string;\n metadata: unknown;\n reference?: string;\n }[] = [];\n for (const file of snapshot.entries.keys()) {\n const name = path.posix.basename(file);\n if (\n ![\n \"package.json\",\n \"pnpm-workspace.yaml\",\n \"pnpm-lock.yaml\",\n \"bun.lock\",\n ].includes(name)\n )\n continue;\n const text = snapshotText({ snapshot, file });\n let value: unknown;\n if (name.endsWith(\".yaml\")) {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(`Invalid compiler patch YAML: ${file}`);\n value = document.toJS({ maxAliasCount: 100 });\n } else value = parseChangedJson(text);\n const sources = [value];\n if (name === \"package.json\" && changedRecord(value))\n sources.push(value[\"pnpm\"]);\n for (const source of sources)\n for (const patch of changedCompilerPatches({\n value: source,\n compilerNames,\n stringsArePaths:\n name === \"package.json\" || name === \"pnpm-workspace.yaml\",\n })) {\n if (patch.reference === undefined) {\n result.push({ file, name: patch.name, metadata: patch.metadata });\n continue;\n }\n const reference = path.posix.normalize(\n path.posix.join(path.posix.dirname(file), patch.reference),\n );\n if (\n patch.reference.trim() === \"\" ||\n path.posix.isAbsolute(patch.reference) ||\n patch.reference.includes(\"\\\\\") ||\n patch.reference\n .split(\"\")\n .some(\n (character) =>\n character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n ) ||\n reference === \"..\" ||\n reference.startsWith(\"../\")\n )\n throw new Error(\n `Compiler patch reference leaves the tracked snapshot: ${file}:${patch.name}`,\n );\n result.push({\n file,\n name: patch.name,\n metadata: patch.metadata,\n reference,\n });\n }\n // pnpm snapshot identifiers carry patch hashes even when package versions agree.\n if (\n name === \"pnpm-lock.yaml\" &&\n changedRecord(value) &&\n changedRecord(value[\"snapshots\"])\n )\n for (const descriptor of Object.keys(value[\"snapshots\"])) {\n const packageName = /^(@[^/]+\\/[^@]+|[^@]+)@/.exec(descriptor)?.[1];\n if (\n packageName &&\n (changedPackageTool(packageName) === \"typescript\" ||\n compilerNames.has(packageName)) &&\n descriptor.includes(\"patch_hash=\")\n )\n result.push({ file, name: descriptor, metadata: descriptor });\n }\n }\n return result;\n};\n\nconst readSnapshots = async ({\n repo,\n trees,\n}: {\n repo: string;\n trees: Map<string, TreeEntry>[];\n}) => {\n const selected = trees.map(\n (tree) => new Map([...tree].filter(([file]) => trackedInput(file))),\n );\n const blobs = new Map<string, string>();\n for (;;) {\n const pending = [\n ...new Set(\n selected.flatMap((entries) =>\n [...entries.values()].map((entry) => entry.oid),\n ),\n ),\n ].filter((oid) => !blobs.has(oid));\n for (const [oid, text] of await readBlobs({ repo, oids: pending }))\n blobs.set(oid, text);\n let expanded = false;\n for (let index = 0; index < selected.length; index += 1) {\n const entries = selected.at(index);\n const tree = trees.at(index);\n if (!entries || !tree) throw new Error(\"Missing Git tree\");\n const required = new Set<string>();\n const requiredPatches = new Set<string>();\n for (const [file, entry] of entries) {\n if (entry.mode !== \"120000\") continue;\n const text = blobs.get(entry.oid);\n if (text === undefined) throw new Error(\"Missing tracked symlink\");\n const target = path.posix.normalize(\n path.posix.join(path.posix.dirname(file), text),\n );\n if (\n path.posix.isAbsolute(text) ||\n target === \"..\" ||\n target.startsWith(\"../\")\n )\n throw new Error(\"Toolchain symlink leaves the tracked tree\");\n required.add(target);\n }\n // Resolve symlink closure before reading workflow YAML.\n const unresolvedLinks = [...required].some((file) => !entries.has(file));\n if (!unresolvedLinks) {\n const snapshot = { entries, blobs };\n for (const file of selectorFiles(snapshot).keys()) required.add(file);\n for (const patch of compilerPatches(snapshot))\n if (patch.reference !== undefined) {\n required.add(patch.reference);\n requiredPatches.add(patch.reference);\n }\n }\n for (const file of required) {\n if (entries.has(file)) continue;\n const entry = tree.get(file);\n if (!entry)\n throw new Error(\n requiredPatches.has(file)\n ? `Missing tracked compiler patch: ${file}`\n : `Missing tracked toolchain selector file: ${file}`,\n );\n entries.set(file, entry);\n expanded = true;\n }\n }\n if (!expanded) return selected.map((entries) => ({ entries, blobs }));\n }\n};\n\nconst stableJson = (value: unknown): string => {\n if (Array.isArray(value)) return JSON.stringify(value.map(stableJson));\n if (changedRecord(value))\n return JSON.stringify(\n Object.entries(value)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, item]) => [key, stableJson(item)]),\n );\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n};\nconst inventory = () =>\n ({\n bun: new Set<string>(),\n node: new Set<string>(),\n typescript: new Set<string>(),\n oxlint: new Set<string>(),\n \"oxlint-tsgolint\": new Set<string>(),\n oxfmt: new Set<string>(),\n shared: new Set<string>(),\n }) satisfies Record<ToolchainChangedTool, Set<string>>;\nconst installedFields = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n] as const;\nconst exactBun = (value: string) => stableVersion(value);\nconst nonRegistryResolution = (specifier: string) =>\n /^(?:link:|workspace:|file:|portal:|catalog:|git:|github:|gitlab:|bitbucket:|git\\+|https?:|ssh:|git@)/i.test(\n specifier,\n );\n\nconst packageTarget = ({\n name,\n specifier,\n}: {\n name: string;\n specifier: string;\n}) => {\n if (!specifier.startsWith(\"npm:\")) return name;\n const match = /^npm:((?:@[^/@\\s]+\\/)?[^/@\\s]+)(?:@.*)?$/.exec(specifier);\n const target = match?.[1];\n if (target === undefined)\n throw new Error(\"Unclassifiable npm alias declaration\");\n return target;\n};\n/** Importers contain resolved descriptors, not declarations; classify protocols first. */\nconst importerRegistryName = ({\n dependency,\n version,\n}: {\n dependency: string;\n version: string;\n}) => {\n if (nonRegistryResolution(version)) return dependency;\n if (version.startsWith(\"npm:\"))\n return packageTarget({ name: dependency, specifier: version });\n const descriptor = version.split(\"(\").at(0) ?? \"\";\n return /^((?:@[^/@\\s]+\\/)?[^/@\\s]+)@/.exec(descriptor)?.[1];\n};\nconst directoryDepth = (directory: string) =>\n directory.split(\"/\").filter((part) => part !== \".\" && part !== \"\").length;\nconst isAncestor = (directory: string, child: string) => {\n const relative = path.posix.relative(directory, child);\n return (\n relative !== \"..\" &&\n !relative.startsWith(\"../\") &&\n !path.posix.isAbsolute(relative)\n );\n};\ntype BoundResolutionOptions = {\n lockFile: string;\n lock: ChangedLock;\n file: string;\n manifest: Record<string, unknown>;\n dependency: string;\n name: string;\n};\nconst boundResolution = ({\n lockFile,\n lock,\n file,\n manifest,\n dependency,\n name,\n}: BoundResolutionOptions) => {\n const directory =\n path.posix.relative(\n path.posix.dirname(lockFile),\n path.posix.dirname(file),\n ) || \".\";\n const importerVersion = lock.importers[directory]?.[dependency];\n const importerName =\n path.posix.basename(lockFile) === \"pnpm-lock.yaml\" &&\n importerVersion !== undefined\n ? importerRegistryName({ dependency, version: importerVersion })\n : undefined;\n const candidates = lock.resolutions.filter(\n (item) =>\n item.name === (importerName ?? name) || item.dependency === dependency,\n );\n if (path.posix.basename(lockFile) === \"pnpm-lock.yaml\") {\n const value = lock.importers[directory]?.[dependency];\n if (value === undefined)\n throw new Error(`Missing resolved importer: ${file}:${dependency}`);\n const descriptor = value.replace(/^npm:/, \"\");\n const version = descriptor.startsWith(`${importerName ?? name}@`)\n ? descriptor.slice((importerName ?? name).length + 1)\n : descriptor;\n const resolvedVersion = version.split(\"(\").at(0);\n const matched = candidates.filter(\n (item) => item.version === resolvedVersion,\n );\n const versions = new Set(\n matched.map((item) => `${item.name}@${item.version}`),\n );\n if (versions.size === 1) return matched;\n throw new Error(`Ambiguous resolved importer: ${file}:${dependency}`);\n }\n if (path.posix.basename(lockFile) === \"yarn.lock\") {\n const declarations = installedFields.flatMap((field) => {\n const source = manifest[field];\n return changedRecord(source) && typeof source[dependency] === \"string\"\n ? [source[dependency]]\n : [];\n });\n const declaredSelectors = new Set(\n declarations.flatMap((specifier) =>\n [\n `${dependency}@${specifier}`,\n `${dependency}@npm:${specifier}`,\n ].flatMap(changedYarnSelectors),\n ),\n );\n const matched = candidates.filter((item) =>\n changedYarnSelectors(item.location).some((selector) =>\n declaredSelectors.has(selector),\n ),\n );\n if (matched.length > 0) return matched;\n throw new Error(\n `Missing resolved Yarn compiler declaration: ${file}:${dependency}`,\n );\n }\n const locations: string[] = [];\n if (path.posix.basename(lockFile) === \"bun.lock\") {\n if (\n directory !== \".\" &&\n typeof manifest[\"name\"] !== \"string\" &&\n candidates.length > 1\n )\n throw new Error(\n `Ambiguous Bun workspace resolution: ${file}:${dependency}`,\n );\n if (directory !== \".\" && typeof manifest[\"name\"] === \"string\")\n locations.push(`${manifest[\"name\"]}/${dependency}`);\n locations.push(dependency);\n } else {\n let current = directory;\n for (;;) {\n locations.push(path.posix.join(current, \"node_modules\", dependency));\n if (current === \".\") break;\n current = path.posix.dirname(current);\n }\n }\n for (const location of locations) {\n const matched = candidates.filter((item) => item.location === location);\n if (matched.length === 1) return matched;\n if (matched.length > 1)\n throw new Error(`Ambiguous lock location: ${file}:${dependency}`);\n }\n throw new Error(\n `Missing resolved toolchain dependency: ${file}:${dependency}`,\n );\n};\nconst stableVersion = (value: unknown) => {\n if (typeof value !== \"string\")\n throw new Error(\"Runtime selector is not an exact stable version\");\n const version = value.trim().replace(/^v/, \"\");\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(version) || valid(version) !== version)\n throw new Error(\"Runtime selector is not an exact stable version\");\n return version;\n};\nconst setupRuntimeVersion = (value: unknown) => {\n if (typeof value !== \"string\" && typeof value !== \"number\")\n throw new Error(\"Unclassifiable setup runtime selector\");\n const selector = String(value).trim();\n return stableVersion(selector);\n};\ntype SetupRuntimeFileOptions = {\n snapshot: GitSnapshot;\n file: string;\n runtime: string;\n};\nconst setupRuntimeFileVersion = ({\n snapshot,\n file,\n runtime,\n}: SetupRuntimeFileOptions) => {\n const text = snapshotText({ snapshot, file }).trim();\n if (runtime === \"bun\" && file.endsWith(\".json\")) {\n const manifest = parseChangedJson(text);\n const manager = changedRecord(manifest)\n ? manifest[\"packageManager\"]\n : undefined;\n if (typeof manager !== \"string\" || !manager.startsWith(\"bun@\"))\n throw new Error(\n \"Bun selector manifest lacks an exact Bun packageManager\",\n );\n return stableVersion(manager.slice(4));\n }\n if (runtime === \"go\" && path.posix.basename(file) === \"go.mod\") {\n const goLines = text.split(/\\r?\\n/).filter((line) => /^\\s*go\\b/.test(line));\n const toolchainLines = text\n .split(/\\r?\\n/)\n .filter((line) => /^\\s*toolchain\\b/.test(line));\n if (goLines.length !== 1 || toolchainLines.length > 1)\n throw new Error(\"Unclassifiable Go runtime directives\");\n const version = /^\\s*go\\s+(\\S+)\\s*(?:\\/\\/.*)?$/.exec(\n goLines.at(0) ?? \"\",\n )?.[1];\n const go = stableVersion(version);\n if (toolchainLines.length === 0) return go;\n const toolchain = /^\\s*toolchain\\s+(\\S+)\\s*(?:\\/\\/.*)?$/.exec(\n toolchainLines.at(0) ?? \"\",\n )?.[1];\n if (toolchain === undefined)\n throw new Error(\"Unclassifiable Go toolchain directive\");\n if (!toolchain.startsWith(\"go\"))\n throw new Error(\"Unclassifiable Go toolchain directive\");\n return stableVersion(toolchain.slice(2));\n }\n if (file.endsWith(\".toml\")) {\n const value: unknown = parseToml(text);\n if (!changedRecord(value))\n throw new Error(\"Unclassifiable setup runtime TOML\");\n if (runtime === \"rust\" && changedRecord(value[\"toolchain\"]))\n return setupRuntimeVersion(value[\"toolchain\"][\"channel\"]);\n if (runtime === \"python\")\n return setupRuntimeVersion(value[\"python-version\"]);\n throw new Error(\"Unclassifiable setup runtime TOML\");\n }\n return setupRuntimeVersion(text);\n};\n\nconst setupRuntimeVersions = (snapshot: GitSnapshot) => {\n const versions: { file: string; runtime: string; version: string }[] = [];\n const step = (value: unknown, file: string, checkouts: CheckoutScope) => {\n if (!changedRecord(value) || typeof value[\"uses\"] !== \"string\") return;\n const action = value[\"uses\"].split(\"@\").at(0)?.toLowerCase();\n let runtime = /(?:^|\\/)setup-([^/]+)$/.exec(action ?? \"\")?.[1];\n // A wrapper such as `setup-bun-cached` sets up the runtime its name starts with.\n const wrapped = [\"bun\", \"node\", \"python\", \"go\", \"java\"].find((candidate) =>\n runtime?.startsWith(`${candidate}-`),\n );\n if (wrapped !== undefined) runtime = wrapped;\n if (action === \"dtolnay/rust-toolchain\") runtime = \"rust\";\n if (runtime === undefined) return;\n const raw = value[\"with\"];\n if (!changedRecord(raw))\n throw new Error(`Missing setup runtime selector: ${file}:${runtime}`);\n const inputs = new Map<string, unknown>();\n for (const [key, input] of Object.entries(raw)) {\n const folded = key.toLowerCase();\n if (inputs.has(folded))\n throw new Error(`Duplicate setup input: ${file}:${folded}`);\n inputs.set(folded, input);\n }\n let selected = false;\n for (const [key, input] of inputs) {\n if (\n !/(?:^|-)version(?:-file)?$/.test(key) &&\n ![\"toolchain\", \"toolchain-file\", \"rust-toolchain-file\"].includes(key)\n )\n continue;\n if ([\"bun\", \"node\", \"python\", \"go\", \"java\"].includes(runtime)) {\n if (key === `${runtime}-version` || key === `${runtime}-version-file`)\n selected = true;\n } else if (runtime === \"rust\") {\n if (\n [\n \"toolchain\",\n \"toolchain-file\",\n \"rust-toolchain-file\",\n \"rust-version\",\n \"rust-version-file\",\n ].includes(key)\n )\n selected = true;\n } else if (\n key === \"version\" ||\n key === \"version-file\" ||\n key === `${runtime}-version` ||\n key === `${runtime}-version-file`\n )\n selected = true;\n const inputRuntime =\n [\"bun\", \"node\", \"python\", \"go\", \"java\", \"rust\"].find((candidate) =>\n key.startsWith(`${candidate}-`),\n ) ?? runtime;\n let version: string;\n if (key.endsWith(\"-file\")) {\n if (\n typeof input !== \"string\" ||\n input.trim() === \"\" ||\n input.includes(\"${{\")\n )\n throw new Error(\"Unclassifiable setup version-file declaration\");\n version = setupRuntimeFileVersion({\n snapshot,\n file: resolveCheckoutSelector(input, checkouts),\n runtime: inputRuntime,\n });\n } else version = setupRuntimeVersion(input);\n versions.push({ file, runtime: inputRuntime, version });\n }\n if (!selected)\n throw new Error(`Missing setup runtime selector: ${file}:${runtime}`);\n };\n const visit = (value: unknown, file: string) => {\n if (Array.isArray(value)) {\n for (const entry of value) visit(entry, file);\n return;\n }\n if (!changedRecord(value)) return;\n for (const [key, entry] of Object.entries(value)) {\n if (key === \"steps\" && Array.isArray(entry)) {\n visitStepsInOrder(entry, new Map(), (child, checkouts) =>\n step(child, file, checkouts),\n );\n } else visit(entry, file);\n }\n };\n for (const file of snapshot.entries.keys()) {\n if (githubAutomationFileKind(file) === undefined) continue;\n const document = parseDocument(snapshotText({ snapshot, file }));\n if (document.errors.length > 0)\n throw new Error(\"Unreadable workflow declaration\");\n visit(document.toJS({ maxAliasCount: 100 }), file);\n }\n return versions;\n};\n\nconst stableBunImageVersion = (image: string) => {\n const match = /^oven\\/bun(?::([^@]+))?(?:@[^\\s]+)?$/.exec(image);\n if (match === null) return undefined;\n const version = match[1]?.replace(/-(?:alpine|slim|debian|distroless)$/, \"\");\n return stableVersion(version);\n};\n\nconst assertLiteralDockerImages = (text: string) => {\n const defaults = new Map<string, string>();\n for (const line of text.replace(/\\\\\\r?\\n/g, \" \").split(/\\r?\\n/)) {\n const arg = /^\\s*ARG\\s+([A-Za-z_]\\w*)(?:=(\\S+))?\\s*(?:#.*)?$/i.exec(line);\n if (arg?.[1]) {\n const value = arg[2];\n if (value !== undefined && /^[A-Za-z0-9_.:/@+-]+$/.test(value))\n defaults.set(arg[1], value);\n else defaults.delete(arg[1]);\n }\n const image = /^\\s*FROM\\s+(?:--[^\\s]+\\s+)*(\\S+)/i.exec(line)?.[1];\n if (image === undefined) continue;\n const expanded = image.replace(\n /\\$\\{([A-Za-z_]\\w*)\\}|\\$([A-Za-z_]\\w*)/g,\n (\n original: string,\n braced: string | undefined,\n plain: string | undefined,\n ) => defaults.get(braced ?? plain ?? \"\") ?? original,\n );\n if (expanded.includes(\"$\"))\n throw new Error(\"Unclassifiable Docker image selector\");\n stableBunImageVersion(expanded);\n }\n};\n\ntype ParsedSnapshot = {\n tools: ReturnType<typeof inventory>;\n current: { bun: string[]; typescript: string[] };\n};\nconst parseSnapshot = (snapshot: GitSnapshot): ParsedSnapshot => {\n const tools = inventory();\n const bunVersions = new Set<string>();\n const bunRanges: string[] = [];\n const manifests = new Map<string, Record<string, unknown>>();\n const locks = new Map<string, ChangedLock>();\n const workspacePatterns = new Map<string, unknown>();\n const typescript = new Set<string>();\n const selectedFiles = selectorFiles(snapshot);\n for (const { file, runtime, version } of setupRuntimeVersions(snapshot)) {\n let tool: ToolchainChangedTool = \"shared\";\n if (runtime === \"bun\") tool = \"bun\";\n else if (runtime === \"node\") tool = \"node\";\n tools[tool].add(`setup-runtime:${file}:${runtime}:${version}`);\n }\n const compilerNames = compilerInstallationNames(snapshot);\n for (const patch of compilerPatches(snapshot)) {\n tools.typescript.add(\n `compiler-patch:${patch.file}:${patch.name}:${stableJson(patch.metadata)}`,\n );\n if (patch.reference !== undefined)\n tools.typescript.add(\n `compiler-patch-source:${patch.reference}:${snapshotText({ snapshot, file: patch.reference })}`,\n );\n }\n const addBun = (value: string) => {\n const version = exactBun(value);\n bunVersions.add(version);\n tools.bun.add(version);\n };\n const catalogs = (file: string, value: Record<string, unknown>) => {\n for (const field of [\"catalog\", \"catalogs\"]) {\n if (value[field] === undefined) continue;\n // Catalog names and aliases need their owner's lockfile to classify; unknown\n // entries conservatively force parity through the shared category.\n tools.shared.add(`${file}:${field}:${stableJson(value[field])}`);\n const visit = (entry: unknown, at: string) => {\n if (!changedRecord(entry)) return;\n for (const [name, specifier] of Object.entries(entry)) {\n const target =\n typeof specifier === \"string\"\n ? packageTarget({ name, specifier })\n : name;\n if (changedPackageTool(target) === \"typescript\")\n tools.typescript.add(\n `${file}:${at}:${name}:${stableJson(specifier)}`,\n );\n visit(specifier, `${at}:${name}`);\n }\n };\n visit(value[field], field);\n }\n };\n for (const file of snapshot.entries.keys()) {\n const text = snapshotText({ snapshot, file });\n const name = path.posix.basename(file);\n if (compilerPatchPackageFile(file, compilerNames))\n tools.typescript.add(`patch-package:${file}:${text}`);\n for (const tool of selectedFiles.get(file) ?? [])\n tools[tool].add(`selector-file:${file}:${text}`);\n if (name === \"package.json\") {\n const manifest = parseChangedJson(text);\n if (!changedRecord(manifest))\n throw new Error(`Invalid tracked manifest: ${file}`);\n if (\n typeof manifest[\"name\"] === \"string\" &&\n changedPackageTool(manifest[\"name\"]) === \"typescript\"\n )\n throw new Error(\n `Tracked compiler source has no immutable artifact identity: ${file}`,\n );\n\n manifests.set(file, manifest);\n catalogs(file, manifest);\n if (changedRecord(manifest[\"workspaces\"]))\n catalogs(`${file}:workspaces`, manifest[\"workspaces\"]);\n } else if (name === \".npmrc\") {\n for (const line of text.split(/\\r?\\n/)) {\n if (!/^\\s*(?:use-node-version|node-version)\\s*=/i.test(line)) continue;\n if (/\\$\\{/.test(line))\n throw new Error(\"Unclassifiable npm Node selector\");\n const selector =\n /^\\s*(?:use-node-version|node-version)\\s*=\\s*(.*?)\\s*$/i.exec(\n line,\n )?.[1];\n tools.node.add(`${file}:${stableVersion(selector)}`);\n }\n } else if (name === \"pnpm-workspace.yaml\") {\n const document = parseDocument(text);\n if (document.errors.length > 0)\n throw new Error(\"Invalid pnpm workspace YAML\");\n const workspace: unknown = document.toJS({ maxAliasCount: 100 });\n if (!changedRecord(workspace))\n throw new Error(\"Invalid pnpm workspace configuration\");\n workspacePatterns.set(path.posix.dirname(file), workspace[\"packages\"]);\n catalogs(file, workspace);\n for (const key of [\"useNodeVersion\", \"nodeVersion\"]) {\n if (workspace[key] !== undefined)\n tools.node.add(`${file}:${key}:${stableVersion(workspace[key])}`);\n }\n } else if (\n [\n \"bun.lock\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n ].includes(name)\n )\n locks.set(file, parseChangedLock({ file, text }));\n else if (name === \"bun.lockb\") {\n if (\n !snapshot.entries.has(\n path.posix.join(path.posix.dirname(file), \"bun.lock\"),\n )\n )\n throw new Error(\n \"Binary Bun lockfile cannot be resolved without executing Bun\",\n );\n } else if (name === \".bun-version\") addBun(text.trim());\n else if (otherRuntimeFiles.has(name)) tools.shared.add(`${file}:${text}`);\n else if (name === \".node-version\" || name === \".nvmrc\")\n tools.node.add(`${file}:${stableVersion(text)}`);\n else if (name === \"toolchain.json\") {\n const policy = parseChangedJson(text);\n if (!changedRecord(policy))\n throw new Error(\"Invalid shared toolchain policy\");\n tools.shared.add(`${file}:${stableJson(policy)}`);\n if (typeof policy[\"bun\"] === \"string\") addBun(policy[\"bun\"]);\n } else if (name === \".tool-versions\") {\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n for (const line of text.split(/\\r?\\n/)) {\n const [tool, ...versions] = line.trim().split(/\\s+/);\n const value = versions.join(\" \").split(\"#\")[0]?.trim();\n if (tool === \"bun\" && value) addBun(value);\n if (tool === \"node\" || tool === \"nodejs\")\n tools.node.add(`${file}:${stableVersion(value)}`);\n }\n } else if (isMiseConfigPath(file)) {\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n const parsed: unknown = parseToml(text);\n if (changedRecord(parsed) && changedRecord(parsed[\"tools\"])) {\n for (const [tool, selector] of Object.entries(parsed[\"tools\"])) {\n const value = changedRecord(selector)\n ? selector[\"version\"]\n : selector;\n const values = Array.isArray(value) ? value : [value];\n if (tool === \"bun\" || tool === \"core:bun\")\n for (const version of values) {\n if (typeof version !== \"string\")\n throw new Error(\"Unresolved mise Bun selector\");\n addBun(version);\n }\n if ([\"node\", \"nodejs\", \"core:node\"].includes(tool)) {\n if (values.length === 0)\n throw new Error(\"Unresolved mise Node selector\");\n for (const version of values)\n tools.node.add(`${file}:${stableVersion(version)}`);\n }\n }\n }\n } else if (githubAutomationFileKind(file) !== undefined) {\n tools.shared.add(`${file}:${text}`);\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n } else if (isDockerDefinitionPath(file)) {\n assertLiteralDockerImages(text);\n tools.shared.add(`${file}:${text}`);\n tools.node.add(`${file}:${text}`);\n tools.bun.add(`${file}:${text}`);\n tools.typescript.add(`${file}:${text}`);\n for (const match of text.matchAll(\n /^\\s*FROM\\s+(?:--[^\\s]+\\s+)*oven\\/bun:([\\w.+-]+)/gim,\n )) {\n const tag = match[1];\n if (tag !== undefined) {\n const version = stableBunImageVersion(`oven/bun:${tag}`);\n if (version !== undefined) addBun(version);\n }\n }\n } else if (containerDefinition(file)) {\n for (const document of parseAllDocuments(text)) {\n if (document.errors.length > 0) {\n if (\n isComposeDefinitionPath(file) ||\n /(?:^|\\n)\\s*(?:apiVersion|kind)\\s*:/.test(text)\n )\n throw new Error(`Unreadable container declaration: ${file}`);\n continue;\n }\n const value: unknown = document.toJS({ maxAliasCount: 100 });\n const container = containerDocumentImages(value, file);\n if (container === undefined) {\n if (isComposeDefinitionPath(file))\n throw new Error(`Unclassifiable Compose declaration: ${file}`);\n continue;\n }\n for (const { image } of container.images) {\n if (typeof image !== \"string\" || image.includes(\"$\"))\n throw new Error(`Unclassifiable container image selector: ${file}`);\n stableBunImageVersion(image);\n }\n for (const tool of [\"bun\", \"node\", \"typescript\", \"shared\"] as const)\n tools[tool].add(`${file}:${text}`);\n }\n }\n }\n const activeManifest = (file: string) => {\n if (file === \"package.json\") return true;\n const directory = path.posix.dirname(file);\n if (\n [\n \"bun.lock\",\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"yarn.lock\",\n ].some((name) => locks.has(path.posix.join(directory, name)))\n )\n return true;\n const owners = [...manifests]\n .filter(\n ([ownerFile, owner]) =>\n owner[\"workspaces\"] !== undefined &&\n isAncestor(path.posix.dirname(ownerFile), directory),\n )\n .map(([ownerFile, owner]) => ({\n directory: path.posix.dirname(ownerFile),\n patterns: changedRecord(owner[\"workspaces\"])\n ? owner[\"workspaces\"][\"packages\"]\n : owner[\"workspaces\"],\n }));\n const pnpmOwner = [...workspacePatterns]\n .filter(([ownerDirectory]) => isAncestor(ownerDirectory, directory))\n .sort(([a], [b]) => directoryDepth(b) - directoryDepth(a))\n .at(0);\n if (pnpmOwner)\n return workspaceContains({\n directory: pnpmOwner[0],\n file,\n patterns: pnpmOwner[1],\n rootMembership: \"implicit\",\n });\n const owner = owners\n .sort((a, b) => directoryDepth(b.directory) - directoryDepth(a.directory))\n .at(0);\n if (owner)\n return workspaceContains({\n directory: owner.directory,\n file,\n patterns: owner.patterns,\n rootMembership: \"implicit\",\n });\n for (const [lockFile, lock] of locks) {\n const relative =\n path.posix.relative(path.posix.dirname(lockFile), directory) || \".\";\n if (Object.hasOwn(lock.importers, relative)) return true;\n }\n return false;\n };\n for (const [file, manifest] of manifests) {\n const active = activeManifest(file);\n const manager = manifest[\"packageManager\"];\n if (manager !== undefined) {\n if (typeof manager !== \"string\")\n throw new Error(`Unclassifiable package manager: ${file}`);\n if (manager.startsWith(\"bun@\")) addBun(manager.slice(4));\n else tools.shared.add(`${file}:packageManager:${manager}`);\n }\n for (const field of [\"volta\", \"devEngines\"]) {\n if (manifest[field] === undefined) continue;\n for (const tool of [\"bun\", \"node\", \"typescript\", \"shared\"] as const)\n tools[tool].add(`${file}:${field}:${stableJson(manifest[field])}`);\n }\n const engines = manifest[\"engines\"];\n if (changedRecord(engines)) {\n if (typeof engines[\"node\"] === \"string\")\n tools.node.add(`${file}:${engines[\"node\"]}`);\n if (typeof engines[\"bun\"] === \"string\") {\n if (!validRange(engines[\"bun\"]))\n throw new Error(\"Invalid Bun engine selector\");\n bunRanges.push(engines[\"bun\"]);\n tools.bun.add(`${file}:engines.bun:${engines[\"bun\"]}`);\n if (valid(engines[\"bun\"]) !== null) addBun(engines[\"bun\"]);\n }\n }\n // Peer declarations do not install a compiler. Excluded manifests have no\n // modeled workspace lock owner, so preserve their declarations conservatively.\n for (const field of active\n ? [\"peerDependencies\"]\n : [...installedFields, \"peerDependencies\"]) {\n const declarations = manifest[field];\n if (declarations === undefined) continue;\n if (!changedRecord(declarations))\n throw new Error(`Invalid toolchain declarations: ${file}:${field}`);\n for (const [dependency, specifier] of Object.entries(declarations)) {\n if (typeof specifier !== \"string\")\n throw new Error(\n `Unclassifiable toolchain declaration: ${file}:${dependency}`,\n );\n const tool =\n changedPackageTool(packageTarget({ name: dependency, specifier })) ??\n changedPackageTool(dependency) ??\n (compilerNames.has(dependency) ? \"typescript\" : undefined);\n if (tool !== undefined)\n tools[tool].add(`${file}:${field}:${dependency}:${specifier}`);\n }\n }\n if (!active) continue;\n const ownName = manifest[\"name\"];\n const ownVersion = manifest[\"version\"];\n if (\n typeof ownName === \"string\" &&\n changedPackageTool(ownName) === \"shared\" &&\n typeof ownVersion === \"string\"\n )\n tools.shared.add(`${ownName}@${ownVersion}`);\n for (const field of installedFields) {\n const dependencies = manifest[field];\n if (dependencies === undefined) continue;\n if (!changedRecord(dependencies))\n throw new Error(`Invalid manifest dependency table: ${file}`);\n for (const [dependency, specifier] of Object.entries(dependencies)) {\n if (typeof specifier !== \"string\")\n throw new Error(`Invalid dependency specifier: ${file}`);\n const declaredTarget = packageTarget({ name: dependency, specifier });\n if (\n changedPackageTool(declaredTarget) === undefined &&\n changedPackageTool(dependency) === undefined &&\n !compilerNames.has(dependency)\n )\n continue;\n const effectiveSpecifier = effectiveCatalogSpecifier({\n snapshot,\n file,\n dependency,\n specifier,\n });\n const name = packageTarget({\n name: dependency,\n specifier: effectiveSpecifier,\n });\n const tool =\n changedPackageTool(name) ??\n changedPackageTool(dependency) ??\n (compilerNames.has(dependency) ? \"typescript\" : undefined);\n if (tool === undefined) continue;\n const sourceSpecifier = effectiveSpecifier.startsWith(\"npm:\")\n ? effectiveSpecifier.slice(4 + name.length + 1)\n : effectiveSpecifier;\n if (\n tool === \"typescript\" &&\n (/^(?:link:|portal:|workspace:)/i.test(sourceSpecifier) ||\n (/^(?:file:|\\.{1,2}\\/|\\/)/i.test(sourceSpecifier) &&\n !/\\.(?:tgz|tar\\.gz)(?:[?#].*)?$/i.test(sourceSpecifier)))\n )\n throw new Error(\n `Compiler source has no immutable identity: ${file}:${dependency}`,\n );\n if (tool === \"typescript\")\n tools.typescript.add(\n `${file}:${field}:${dependency}:specifier:${specifier}`,\n );\n const candidates = [...locks]\n .filter(([lockFile]) => {\n const relative = path.posix.relative(\n path.posix.dirname(lockFile),\n path.posix.dirname(file),\n );\n return relative !== \"..\" && !relative.startsWith(\"../\");\n })\n .sort(\n ([a], [b]) =>\n directoryDepth(path.posix.dirname(b)) -\n directoryDepth(path.posix.dirname(a)),\n );\n const nearest = candidates.at(0);\n if (!nearest)\n throw new Error(`Missing toolchain lockfile: ${file}:${dependency}`);\n const lockDirectory = path.posix.dirname(nearest[0]);\n const owner = [...manifests]\n .filter(\n ([ownerFile, ownerManifest]) =>\n typeof ownerManifest[\"packageManager\"] === \"string\" &&\n isAncestor(\n path.posix.dirname(ownerFile),\n path.posix.dirname(file),\n ),\n )\n .sort(\n ([a], [b]) =>\n directoryDepth(path.posix.dirname(b)) -\n directoryDepth(path.posix.dirname(a)),\n )\n .at(0);\n const ownerManager = owner?.[1][\"packageManager\"];\n const sameOwner = candidates.filter(\n ([candidate]) => path.posix.dirname(candidate) === lockDirectory,\n );\n const selectedLocks = sameOwner.filter(([candidate]) => {\n if (typeof ownerManager !== \"string\") return true;\n const lockName = path.posix.basename(candidate);\n if (ownerManager.startsWith(\"bun@\")) return lockName === \"bun.lock\";\n if (ownerManager.startsWith(\"pnpm@\"))\n return lockName === \"pnpm-lock.yaml\";\n if (ownerManager.startsWith(\"yarn@\")) return lockName === \"yarn.lock\";\n if (ownerManager.startsWith(\"npm@\"))\n return (\n lockName === \"package-lock.json\" ||\n lockName === \"npm-shrinkwrap.json\"\n );\n return false;\n });\n const selected = selectedLocks.at(0);\n if (selectedLocks.length !== 1 || !selected)\n throw new Error(\n `Ambiguous or missing effective lockfile: ${file}:${dependency}`,\n );\n const [lockFile, lock] = selected;\n const resolved = boundResolution({\n lockFile,\n lock,\n file,\n manifest,\n dependency,\n name,\n });\n if (\n tool === \"typescript\" &&\n resolved.some((item) => item.name !== name)\n )\n throw new Error(\n `Compiler lock name does not match effective declaration: ${file}:${dependency}`,\n );\n if (\n tool === \"typescript\" &&\n nonRegistryResolution(sourceSpecifier) &&\n resolved.some((item) => item.sourceProof.type !== \"immutable\")\n )\n throw new Error(\n `Compiler source has no immutable identity: ${file}:${dependency}`,\n );\n if (\n tool === \"typescript\" &&\n /^(?:git(?:\\+[^:]+)?:|github:|gitlab:|bitbucket:|ssh:|git@)/i.test(\n sourceSpecifier,\n ) &&\n resolved.some(\n (item) =>\n !/(?:git(?:\\+[^:]+)?:|github:|gitlab:|bitbucket:|ssh:|git@|\\.git(?:#|[\"\\\\]))/i.test(\n item.identity,\n ),\n )\n )\n throw new Error(\n `Compiler Git source has no matching immutable identity: ${file}:${dependency}`,\n );\n const range = effectiveSpecifier.startsWith(\"npm:\")\n ? effectiveSpecifier.slice(effectiveSpecifier.lastIndexOf(\"@\") + 1)\n : effectiveSpecifier;\n if (\n validRange(range) &&\n !resolved.some(\n (item) =>\n valid(item.version) !== null && satisfies(item.version, range),\n )\n )\n throw new Error(\n `Toolchain lock resolution does not satisfy manifest: ${file}:${dependency}`,\n );\n for (const item of resolved)\n tools[tool].add(\n `${file}:${dependency}=>${item.location}:${item.name}@${item.version}:${item.identity}`,\n );\n }\n }\n }\n for (const [lockFile, lock] of locks) {\n for (const item of lock.resolutions) {\n tools[item.tool].add(\n `${lockFile}:${item.location}:${item.dependency}=>${item.name}@${item.version}:${item.identity}`,\n );\n if (item.tool === \"typescript\")\n typescript.add(`${item.name}@${item.version}`);\n }\n if (path.posix.basename(lockFile) !== \"pnpm-lock.yaml\") continue;\n for (const [directory, dependencies] of Object.entries(lock.importers))\n for (const [dependency, version] of Object.entries(dependencies)) {\n // Importer versions are resolved descriptors, not npm alias specs.\n // Local/non-registry dependencies must never be reinterpreted as aliases.\n const namedTool = changedPackageTool(dependency);\n const nonRegistry = nonRegistryResolution(version);\n const registryName = importerRegistryName({ dependency, version });\n const tool =\n (registryName === undefined\n ? undefined\n : changedPackageTool(registryName)) ??\n namedTool ??\n (nonRegistry\n ? undefined\n : lock.resolutions.find((item) => item.dependency === dependency)\n ?.tool);\n if (tool !== undefined)\n tools[tool].add(\n `${lockFile}:importer:${directory}:${dependency}:${version}`,\n );\n }\n }\n if (bunVersions.size > 1)\n throw new Error(\"Conflicting Bun runtime versions in tracked declarations\");\n const bun = [...bunVersions].sort();\n if (bunRanges.length > 0 && bun.length === 0)\n throw new Error(\"Bun engine range has no exact runtime declaration\");\n for (const range of bunRanges)\n if (!bun.every((version) => satisfies(version, range)))\n throw new Error(\"Bun runtime does not satisfy tracked engine range\");\n return { tools, current: { bun, typescript: [...typescript].sort() } };\n};\n\nexport const detectToolchainChanges = async ({\n repo,\n since,\n}: {\n repo: string;\n since: string;\n}): Promise<ToolchainChanges> => {\n try {\n const refs = await Promise.all(\n [since, \"HEAD\"].map(async (ref) => {\n const { stdout } = await git(\n \"git\",\n [\"rev-parse\", \"--verify\", \"--end-of-options\", `${ref}^{commit}`],\n { cwd: repo, encoding: \"utf8\" },\n );\n const oid = stdout.trim();\n if (!/^[a-f0-9]{40,64}$/.test(oid))\n throw new Error(\"Invalid Git commit response\");\n return oid;\n }),\n );\n const previousRef = refs.at(0);\n const currentRef = refs.at(1);\n if (!previousRef || !currentRef)\n throw new Error(\"Missing Git comparison snapshot\");\n const [previousEntries, currentEntries] = await Promise.all([\n readTree({ repo, ref: previousRef }),\n readTree({ repo, ref: currentRef }),\n ]);\n const snapshots = await readSnapshots({\n repo,\n trees: [previousEntries, currentEntries],\n });\n const previousSnapshot = snapshots.at(0);\n const currentSnapshot = snapshots.at(1);\n if (!previousSnapshot || !currentSnapshot)\n throw new Error(\"Missing toolchain snapshot\");\n const previous = parseSnapshot(previousSnapshot);\n const current = parseSnapshot(currentSnapshot);\n const tools = toolchainChangedTools.filter(\n (tool) =>\n stableJson([...previous.tools[tool]].sort()) !==\n stableJson([...current.tools[tool]].sort()),\n );\n return {\n status: \"compared\",\n changed: tools.length > 0,\n tools,\n current: current.current,\n };\n } catch (error) {\n return {\n status: \"unreadable\",\n changed: true,\n tools: [...toolchainChangedTools],\n error:\n error instanceof Error\n ? error.message\n : \"Unreadable toolchain Git snapshot\",\n };\n }\n};\n"],"mappings":"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"}
|