@stll/oxlint-config 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cloud-setup-cli.mjs +1 -1
- package/dist/consumer-compat-cli.cjs.map +1 -1
- package/dist/consumer-compat-cli.mjs.map +1 -1
- package/dist/consumer-node-support.mjs +1 -1
- package/dist/dependabot.d.cts +10 -0
- package/dist/dependabot.d.mts +10 -0
- package/dist/engine-support-cli.cjs.map +1 -1
- package/dist/engine-support-cli.mjs.map +1 -1
- package/dist/git-tracked-output.cjs.map +1 -1
- package/dist/git-tracked-output.mjs.map +1 -1
- package/dist/publish-artifact-syntax.cjs.map +1 -1
- package/dist/publish-artifact-syntax.mjs.map +1 -1
- package/dist/publish-build-target-vite-dts-helper2.cjs.map +1 -1
- package/dist/publish-build-target-vite-dts-helper2.mjs.map +1 -1
- package/dist/publish-contract-cli.cjs.map +1 -1
- package/dist/publish-contract-cli.mjs.map +1 -1
- package/dist/quarantine-policy2.cjs.map +1 -1
- package/dist/quarantine-policy2.mjs.map +1 -1
- package/dist/toolchain-changed.cjs +1 -3
- package/dist/toolchain-changed.cjs.map +1 -1
- package/dist/toolchain-changed.mjs +2 -4
- package/dist/toolchain-changed.mjs.map +1 -1
- package/dist/toolchain-dependabot.cjs.map +1 -1
- package/dist/toolchain-dependabot.mjs +1 -1
- package/dist/toolchain-dependabot.mjs.map +1 -1
- package/dist/toolchain-guard.cjs +11 -4
- package/dist/toolchain-guard.cjs.map +1 -1
- package/dist/toolchain-guard.mjs +12 -5
- package/dist/toolchain-guard.mjs.map +1 -1
- package/dist/toolchain-inputs.cjs +99 -9
- package/dist/toolchain-inputs.cjs.map +1 -1
- package/dist/toolchain-inputs.mjs +88 -10
- package/dist/toolchain-inputs.mjs.map +1 -1
- package/dist/toolchain-schema.cjs +179 -1
- package/dist/toolchain-schema.cjs.map +1 -1
- package/dist/toolchain-schema.mjs +167 -3
- package/dist/toolchain-schema.mjs.map +1 -1
- package/dist/typecheck-parity.cjs.map +1 -1
- package/dist/typecheck-parity.mjs.map +1 -1
- package/dist/wasi-loader-normalizer-cli.cjs.map +1 -1
- package/dist/wasi-loader-normalizer-cli.mjs.map +1 -1
- package/package.json +2 -4
- package/toolchain.json +54 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolchain-schema.mjs","names":[],"sources":["../src/toolchain-schema.ts"],"sourcesContent":["import { valid } from \"semver\";\n\nimport { nodePolicyValid } from \"./toolchain-node\";\n\nexport const packagePinKeys = [\n \"oxlint\",\n \"oxlint-tsgolint\",\n \"@oxlint/plugins\",\n \"@stll/oxlint-plugin\",\n \"oxfmt\",\n \"lefthook\",\n] as const;\n\nexport const valkeyArchitectures = [\"amd64\", \"arm64\"] as const;\nexport const valkeyArtifactPackages = {\n server: \"valkey-server\",\n tools: \"valkey-tools\",\n} as const;\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst artifactRecord = (value: unknown, keys: readonly string[]) => {\n if (\n !record(value) ||\n Object.keys(value).some((key) => !keys.includes(key)) ||\n keys.some((key) => !Object.hasOwn(value, key))\n )\n throw new Error(\n \"valkeyArtifacts requires complete, closed artifact objects\",\n );\n return value;\n};\n\nconst parseValkeyArtifacts = (input: unknown, version: string) => {\n const architectures = artifactRecord(input, valkeyArchitectures);\n const line = version.split(\".\").slice(0, 2).join(\".\");\n const parseArchitecture = (\n architecture: (typeof valkeyArchitectures)[number],\n ) => {\n const packages = artifactRecord(\n architectures[architecture],\n Object.keys(valkeyArtifactPackages),\n );\n const parseArtifact = (kind: keyof typeof valkeyArtifactPackages) => {\n const artifact = artifactRecord(packages[kind], [\"url\", \"sha256\"]);\n const url = artifact[\"url\"];\n const sha256 = artifact[\"sha256\"];\n const expected = `https://download.valkey.io/packaging/valkey-${line}/deb/ubuntu2404/${architecture}/${valkeyArtifactPackages[kind]}_${version}-1.noble_${architecture}.deb`;\n if (typeof url !== \"string\" || url !== expected)\n throw new Error(\n \"valkeyArtifacts URL must select the exact official versioned Ubuntu artifact\",\n );\n if (typeof sha256 !== \"string\" || !/^[a-f0-9]{64}$/.test(sha256))\n throw new Error(\"valkeyArtifacts requires a lowercase SHA256 pin\");\n return { url, sha256 };\n };\n return {\n server: parseArtifact(\"server\"),\n tools: parseArtifact(\"tools\"),\n } satisfies Record<\n keyof typeof valkeyArtifactPackages,\n ReturnType<typeof parseArtifact>\n >;\n };\n return {\n amd64: parseArchitecture(\"amd64\"),\n arm64: parseArchitecture(\"arm64\"),\n } satisfies Record<\n (typeof valkeyArchitectures)[number],\n ReturnType<typeof parseArchitecture>\n >;\n};\n\n/** Reject unsupported or incomplete installed policies before inspecting a consumer. */\nexport const parseToolchainPolicy = (input: unknown) => {\n if (!record(input) || input[\"schemaVersion\"] !== 1)\n throw new Error(\"toolchain.json must use schemaVersion 1\");\n const string = (object: Record<string, unknown>, key: string) => {\n const value = object[key];\n if (typeof value !== \"string\" || value.trim() === \"\")\n throw new Error(`toolchain.json requires a nonempty ${key}`);\n return value;\n };\n const packages: Record<string, string> = {};\n for (const key of packagePinKeys) packages[key] = string(input, key);\n const bun = string(input, \"bun\");\n const typescript = string(input, \"typescript\");\n const node = string(input, \"node\");\n const consumerNode = string(input, \"consumerNode\");\n const consumerNpm = string(input, \"consumerNpm\");\n const consumerPnpm = string(input, \"consumerPnpm\");\n const consumerTypescript = string(input, \"consumerTypescript\");\n const python = string(input, \"python\");\n const postgres = string(input, \"postgres\");\n const valkey = string(input, \"valkey\");\n const rust = string(input, \"rust\");\n for (const [name, value] of Object.entries({\n ...packages,\n bun,\n typescript,\n consumerNpm,\n consumerPnpm,\n consumerTypescript,\n }))\n if (valid(value) !== value)\n throw new Error(`toolchain.json ${name} must be an exact release`);\n if (!/^[1-9]\\d*$/.test(postgres) || !Number.isSafeInteger(Number(postgres)))\n throw new Error(\"PostgreSQL must be a canonical positive major\");\n if (valid(valkey) !== valkey || !/^\\d+\\.\\d+\\.\\d+$/.test(valkey))\n throw new Error(\"Valkey must be an exact stable release\");\n const valkeyArtifacts = parseValkeyArtifacts(\n input[\"valkeyArtifacts\"],\n valkey,\n );\n if (!nodePolicyValid(node))\n throw new Error(\"Node must be a canonical major N.x series\");\n if (\n valid(consumerNode) !== consumerNode ||\n !consumerNode.startsWith(\"22.\") ||\n consumerNode.includes(\"-\") ||\n consumerNode.includes(\"+\")\n )\n throw new Error(\"consumerNode must be an exact stable Node 22 release\");\n if (!/^\\d+\\.\\d+(?:\\.\\d+)?$/.test(python))\n throw new Error(\"Python must be an exact minor or patch release\");\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(rust))\n throw new Error(\"Rust must be an exact stable release\");\n if (\n !consumerTypescript.startsWith(\"6.\") ||\n consumerTypescript.includes(\"-\") ||\n consumerTypescript.includes(\"+\")\n )\n throw new Error(\n \"consumerTypescript must be an exact stable TypeScript 6 release\",\n );\n const compatibility = input[\"typescript6Compatibility\"];\n if (!record(compatibility))\n throw new Error(\"missing TypeScript compatibility policy\");\n const version = string(compatibility, \"version\");\n const packageAlias = string(compatibility, \"packageAlias\");\n if (valid(version) !== version)\n throw new Error(\"TypeScript compatibility must be an exact release\");\n const layouts = input[\"typescriptInstallLayouts\"];\n if (!Array.isArray(layouts) || layouts.length === 0)\n throw new Error(\"missing TypeScript install layouts\");\n const typescriptInstallLayouts = layouts.map((layout: unknown) => {\n if (!record(layout)) throw new Error(\"invalid TypeScript install layout\");\n const compilerPackage = string(layout, \"compilerPackage\");\n const compilerSpecifier = string(layout, \"compilerSpecifier\");\n const typecheckCommand = string(layout, \"typecheckCommand\");\n switch (layout[\"type\"]) {\n case \"direct\":\n if (\n compilerSpecifier !== typescript ||\n compilerPackage !== \"typescript\"\n )\n throw new Error(\n \"direct TypeScript layout differs from shared version\",\n );\n return {\n type: \"direct\",\n compilerPackage,\n compilerSpecifier,\n typecheckCommand,\n } as const;\n case \"split-compatibility\": {\n const compatibilityPackage = string(layout, \"compatibilityPackage\");\n const compatibilitySpecifier = string(layout, \"compatibilitySpecifier\");\n if (\n compilerSpecifier !== `npm:typescript@${typescript}` ||\n compatibilitySpecifier !== version\n )\n throw new Error(\n \"split TypeScript layout differs from shared versions\",\n );\n return {\n type: \"split-compatibility\",\n compilerPackage,\n compilerSpecifier,\n compatibilityPackage,\n compatibilitySpecifier,\n typecheckCommand,\n } as const;\n }\n default:\n throw new Error(\"unsupported TypeScript install layout\");\n }\n });\n const actionsInput = input[\"actions\"];\n if (!record(actionsInput) || Object.keys(actionsInput).length === 0)\n throw new Error(\"missing approved actions\");\n const actions: Record<string, { sha: string; version: string }> = {};\n for (const [name, action] of Object.entries(actionsInput)) {\n if (!record(action)) throw new Error(`invalid action policy: ${name}`);\n const sha = string(action, \"sha\");\n const actionVersion = string(action, \"version\");\n if (!/^[a-f0-9]{40}$/.test(sha) || !/^v\\d+(?:\\.\\d+)*$/.test(actionVersion))\n throw new Error(`invalid action SHA/version: ${name}`);\n actions[name] = { sha, version: actionVersion };\n }\n const dependabotInput = input[\"dependabot\"];\n if (\n !record(dependabotInput) ||\n !record(dependabotInput[\"schedule\"]) ||\n !record(dependabotInput[\"cooldown\"]) ||\n !record(dependabotInput[\"groups\"])\n )\n throw new Error(\"missing Dependabot policy\");\n const scheduleInput = dependabotInput[\"schedule\"];\n const schedule = {\n interval: string(scheduleInput, \"interval\"),\n day: string(scheduleInput, \"day\"),\n time: string(scheduleInput, \"time\"),\n timezone: string(scheduleInput, \"timezone\"),\n };\n const defaultDays = dependabotInput[\"cooldown\"][\"defaultDays\"];\n if (\n typeof defaultDays !== \"number\" ||\n !Number.isInteger(defaultDays) ||\n defaultDays < 5\n )\n throw new Error(\"Dependabot cooldown must be at least five days\");\n const strings = (value: unknown): string[] => {\n if (\n !Array.isArray(value) ||\n !value.every((entry: unknown) => typeof entry === \"string\")\n )\n throw new Error(\"Dependabot group values must be string arrays\");\n return value;\n };\n const groups: Record<string, { patterns: string[]; updateTypes: string[] }> =\n {};\n for (const [name, group] of Object.entries(dependabotInput[\"groups\"])) {\n if (!record(group)) throw new Error(`invalid Dependabot group: ${name}`);\n groups[name] = {\n patterns: strings(group[\"patterns\"]),\n updateTypes: strings(group[\"updateTypes\"]),\n };\n }\n return {\n bun,\n typescript,\n node,\n postgres,\n valkey,\n valkeyArtifacts,\n consumerNode,\n consumerNpm,\n consumerPnpm,\n consumerTypescript,\n python,\n rust,\n packages,\n actions,\n typescriptInstallLayouts,\n typescript6Compatibility: { version, packageAlias },\n dependabot: {\n schedule,\n cooldown: { defaultDays },\n groups,\n ignoredPackages: [\n ...new Set([\n ...Object.keys(packages),\n ...typescriptInstallLayouts.flatMap((layout) =>\n layout.type === \"direct\"\n ? [layout.compilerPackage]\n : [layout.compilerPackage, layout.compatibilityPackage],\n ),\n packageAlias,\n \"bun-types\",\n ]),\n ],\n ignoredActions: Object.keys(actions),\n ignoredImages: [\"node\", \"python\", \"oven/bun\"],\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolchain-schema.mjs","names":["record","parseToml"],"sources":["../src/toolchain-formatter.ts","../src/toolchain-schema.ts"],"sourcesContent":["import path from \"node:path\";\nimport { parse as parseToml } from \"smol-toml\";\nimport { parseDocument } from \"yaml\";\n\nimport {\n githubAutomationFileKind,\n isDockerDefinitionPath,\n isFormatterConfigPath,\n isLefthookConfigPath,\n isShellScript,\n} from \"./toolchain-inputs\";\n\nexport const formatterRule = \"formatter-policy\" as const;\n\ntype Diagnostic = {\n rule: typeof formatterRule;\n path: string;\n line: number;\n message: string;\n};\n\nexport type FormatterStyle = Readonly<Record<string, unknown>>;\n\nexport type FormatterPolicy = {\n command: \"bun fmt\";\n style: FormatterStyle;\n /** Generated files every repository leaves to their generators. */\n ignorePatterns: readonly string[];\n};\n\n/** Repository-owned [fmt] keys: what to skip, and the Tailwind entry point. */\nexport const repositoryFormatKeys = [\n \"ignorePatterns\",\n \"sortTailwindcss\",\n] as const;\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** One style for every repository; only repository-owned keys may differ. */\nexport const parseFormatterPolicy = (input: unknown): FormatterPolicy => {\n if (\n !record(input) ||\n Object.keys(input).some(\n (key) => key !== \"command\" && key !== \"style\" && key !== \"ignorePatterns\",\n )\n )\n throw new Error(\n \"toolchain.json formatter accepts only command, style and ignorePatterns\",\n );\n if (input[\"command\"] !== \"bun fmt\")\n throw new Error(\"toolchain.json formatter command must be bun fmt\");\n const style = input[\"style\"];\n if (!record(style) || Object.keys(style).length === 0)\n throw new Error(\"toolchain.json formatter style must be a nonempty table\");\n for (const key of Object.keys(style))\n if (repositoryFormatKeys.some((owned) => owned === key))\n throw new Error(\n `toolchain.json formatter style cannot own the repository key ${key}`,\n );\n const ignorePatterns = input[\"ignorePatterns\"];\n if (\n !Array.isArray(ignorePatterns) ||\n !ignorePatterns.every(\n (pattern): pattern is string =>\n typeof pattern === \"string\" && pattern !== \"\",\n )\n )\n throw new Error(\n \"toolchain.json formatter ignorePatterns must be nonempty strings\",\n );\n return { command: \"bun fmt\", style, ignorePatterns };\n};\n\nconst tomlValue = (value: unknown): string => {\n if (Array.isArray(value)) return `[${value.map(tomlValue).join(\", \")}]`;\n if (record(value))\n return `{ ${Object.entries(value)\n .map(([key, entry]) => `${key} = ${tomlValue(entry)}`)\n .join(\", \")} }`;\n return JSON.stringify(value);\n};\n\nconst tomlLines = (entries: readonly (readonly [string, unknown])[]) =>\n entries.map(([key, value]) => `${key} = ${tomlValue(value)}\\n`).join(\"\");\n\n/** Render the shared bunfig.toml [fmt] tables. */\nexport const sharedFormatTables = (policy: FormatterPolicy) => {\n const entries = Object.entries(policy.style);\n let output = `[fmt]\\n${tomlLines(\n entries.filter(([, value]) => !record(value)),\n )}ignorePatterns = ${tomlValue(policy.ignorePatterns)}\\n`;\n for (const [name, table] of entries)\n if (record(table))\n output += `\\n[fmt.${name}]\\n${tomlLines(Object.entries(table))}`;\n return output;\n};\n\nconst stableJson = (value: unknown): string =>\n JSON.stringify(value, (_key, entry: unknown) =>\n record(entry)\n ? Object.fromEntries(\n Object.entries(entry).toSorted(([left], [right]) =>\n left.localeCompare(right),\n ),\n )\n : entry,\n );\n\n// Every alternative formatter is rejected, not only the one being replaced.\nconst formatterPackage = (name: string) =>\n name === \"oxfmt\" ||\n name === \"prettier\" ||\n name === \"dprint\" ||\n name === \"@biomejs/biome\" ||\n name.startsWith(\"@dprint/\") ||\n /^(?:@[^/]+\\/)?prettier-plugin-/.test(name);\n\nconst dependencyFields = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n \"overrides\",\n \"resolutions\",\n \"catalog\",\n] as const;\n\nconst declaredPackages = (manifest: Record<string, unknown>) => {\n const tables: unknown[] = dependencyFields.map((field) => manifest[field]);\n const workspaces = manifest[\"workspaces\"];\n for (const owner of [manifest, record(workspaces) ? workspaces : {}]) {\n if (owner !== manifest) tables.push(owner[\"catalog\"]);\n const catalogs = owner[\"catalogs\"];\n if (record(catalogs)) tables.push(...Object.values(catalogs));\n }\n return tables.flatMap((table) => (record(table) ? Object.keys(table) : []));\n};\n\nconst shellWords = (command: string) =>\n command\n .split(/[\\s;&|()<>`]+/u)\n .map((word) => word.replace(/^[\"']+|[\"']+$/gu, \"\"))\n .filter((word) => word !== \"\");\n\n/** Over-approximate: any formatter executable named as a word is an invocation. */\nconst invokesFormatter = (command: string) => {\n const words = shellWords(command);\n return words.some((word, index) => {\n const name = path.posix.basename(word);\n if (name === \"oxfmt\" || name === \"prettier\" || name === \"dprint\")\n return true;\n return (\n name === \"biome\" &&\n [\"format\", \"check\", \"ci\"].includes(words.at(index + 1) ?? \"\")\n );\n });\n};\n\nconst lineOf = (text: string, needle: string) =>\n Math.max(\n 1,\n text.split(/\\r?\\n/u).findIndex((line) => line.includes(needle)) + 1,\n );\n\n/** Collect every `run` string of a workflow, composite action or hook config. */\nconst runValues = (value: unknown): string[] => {\n if (Array.isArray(value)) return value.flatMap(runValues);\n if (!record(value)) return [];\n return Object.entries(value).flatMap(([key, entry]) =>\n key === \"run\" && typeof entry === \"string\" ? [entry] : runValues(entry),\n );\n};\n\nconst commandLines = (commands: readonly string[]) =>\n commands.flatMap((command) =>\n command\n .replace(/\\\\\\r?\\n/gu, \" \")\n .split(/\\r?\\n|&&|;/u)\n .map((line) => line.trim()),\n );\n\nconst isBunFormat = (line: string, flag: \"--check\" | \"--staged\") => {\n const words = shellWords(line);\n // Only flags may follow: a path operand narrows the check below the repository.\n return (\n words[0] === \"bun\" &&\n words[1] === \"fmt\" &&\n words.slice(2).includes(flag) &&\n words.slice(2).every((word) => word.startsWith(\"-\"))\n );\n};\n\nconst checkFormatConfig = (\n bunfig: string,\n policy: FormatterPolicy,\n): string[] => {\n let parsed: Record<string, unknown>;\n try {\n parsed = parseToml(bunfig);\n } catch {\n return [\"bunfig.toml must be valid TOML\"];\n }\n const fmt = parsed[\"fmt\"];\n if (!record(fmt))\n return [\n `bunfig.toml requires a [fmt] table: bun fmt reads its configuration only from there; start from:\\n${sharedFormatTables(policy)}`,\n ];\n const errors: string[] = [];\n for (const key of Object.keys(fmt))\n if (\n !Object.hasOwn(policy.style, key) &&\n !repositoryFormatKeys.some((owned) => owned === key)\n )\n errors.push(\n `bunfig.toml [fmt] ${key} is not part of the shared style; every repository formats alike`,\n );\n const ignored = Array.isArray(fmt[\"ignorePatterns\"])\n ? fmt[\"ignorePatterns\"]\n : [];\n const missing = policy.ignorePatterns.filter(\n (pattern) => !ignored.includes(pattern),\n );\n if (missing.length > 0)\n errors.push(\n `bunfig.toml [fmt] ignorePatterns must include the shared generated files: ${missing.join(\", \")}`,\n );\n for (const [key, value] of Object.entries(policy.style))\n if (stableJson(fmt[key]) !== stableJson(value))\n errors.push(\n `bunfig.toml [fmt] ${key} must equal the shared style:\\n${sharedFormatTables(policy)}`,\n );\n return errors;\n};\n\ntype CheckFormatterOptions = {\n files: Record<string, string>;\n policy: FormatterPolicy;\n usesBun: boolean;\n};\n\n/** bun fmt is the only formatter: one config table, staged hooks and a full CI check. */\nexport const checkFormatter = ({\n files,\n policy,\n usesBun,\n}: CheckFormatterOptions): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const add = (file: string, line: number, message: string) =>\n diagnostics.push({ rule: formatterRule, path: file, line, message });\n const workflowCommands: string[] = [];\n for (const [file, text] of Object.entries(files)) {\n const name = path.posix.basename(file);\n if (isFormatterConfigPath(file))\n add(\n file,\n 1,\n \"formatter configuration belongs in bunfig.toml [fmt]; remove this file\",\n );\n if (name === \"package.json\") {\n let manifest: unknown;\n try {\n manifest = JSON.parse(text);\n } catch {\n // Package diagnostics already reject malformed manifests.\n continue;\n }\n if (!record(manifest)) continue;\n for (const dependency of declaredPackages(manifest))\n if (formatterPackage(dependency))\n add(\n file,\n lineOf(text, JSON.stringify(dependency)),\n `${dependency} is not allowed: bun fmt is the only formatter`,\n );\n if (manifest[\"prettier\"] !== undefined)\n add(\n file,\n lineOf(text, '\"prettier\"'),\n \"package.json prettier configuration belongs in bunfig.toml [fmt]\",\n );\n const scripts = manifest[\"scripts\"];\n if (record(scripts))\n for (const [script, command] of Object.entries(scripts)) {\n if (script === \"fmt\")\n add(\n file,\n lineOf(text, '\"fmt\"'),\n \"a package script named fmt shadows bun fmt; remove it\",\n );\n if (typeof command === \"string\" && invokesFormatter(command))\n add(\n file,\n lineOf(text, JSON.stringify(script)),\n `script ${script} runs another formatter; use bun fmt`,\n );\n }\n continue;\n }\n if (file === \".changeset/config.json\") {\n try {\n const config: unknown = JSON.parse(text);\n if (record(config) && config[\"format\"] !== false)\n add(\n file,\n lineOf(text, '\"format\"'),\n \"changesets must not run a formatter (format: false); format releases with bun fmt\",\n );\n } catch {\n add(file, 1, \"changeset configuration must be valid JSON\");\n }\n continue;\n }\n const automation = githubAutomationFileKind(file);\n if (automation !== undefined || isLefthookConfigPath(file)) {\n const document = parseDocument(text);\n if (document.errors.length > 0) continue;\n const parsed: unknown = document.toJS();\n const commands = runValues(parsed);\n for (const command of commands)\n if (invokesFormatter(command))\n add(\n file,\n lineOf(text, command.split(/\\r?\\n/u)[0] ?? command),\n \"command runs another formatter; use bun fmt\",\n );\n if (automation === \"workflow\") workflowCommands.push(...commands);\n if (isLefthookConfigPath(file) && usesBun) {\n const preCommit = record(parsed) ? parsed[\"pre-commit\"] : undefined;\n if (\n !commandLines(runValues(preCommit)).some((line) =>\n isBunFormat(line, \"--staged\"),\n )\n )\n add(\n file,\n lineOf(text, \"pre-commit\"),\n \"lefthook pre-commit must run bun fmt --staged\",\n );\n }\n continue;\n }\n if (\n text !== \"\" &&\n (isDockerDefinitionPath(file) || isShellScript(file, text))\n )\n for (const [index, line] of text.split(/\\r?\\n/u).entries())\n if (!line.trimStart().startsWith(\"#\") && invokesFormatter(line))\n add(file, index + 1, \"command runs another formatter; use bun fmt\");\n }\n if (!usesBun) return diagnostics;\n const bunfig = files[\"bunfig.toml\"];\n if (bunfig !== undefined)\n for (const message of checkFormatConfig(bunfig, policy))\n add(\"bunfig.toml\", lineOf(bunfig, \"[fmt\"), message);\n const hasWorkflows = Object.keys(files).some(\n (file) => githubAutomationFileKind(file) === \"workflow\",\n );\n if (\n hasWorkflows &&\n !commandLines(workflowCommands).some((line) => isBunFormat(line, \"--check\"))\n )\n add(\n \".github/workflows\",\n 1,\n \"a workflow must run bun fmt --check over the whole repository\",\n );\n return diagnostics;\n};\n","import { valid } from \"semver\";\n\nimport { parseFormatterPolicy } from \"./toolchain-formatter\";\nimport { nodePolicyValid } from \"./toolchain-node\";\n\nexport const packagePinKeys = [\n \"oxlint\",\n \"oxlint-tsgolint\",\n \"@oxlint/plugins\",\n \"@stll/oxlint-plugin\",\n \"lefthook\",\n] as const;\n\nexport const valkeyArchitectures = [\"amd64\", \"arm64\"] as const;\nexport const valkeyArtifactPackages = {\n server: \"valkey-server\",\n tools: \"valkey-tools\",\n} as const;\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst artifactRecord = (value: unknown, keys: readonly string[]) => {\n if (\n !record(value) ||\n Object.keys(value).some((key) => !keys.includes(key)) ||\n keys.some((key) => !Object.hasOwn(value, key))\n )\n throw new Error(\n \"valkeyArtifacts requires complete, closed artifact objects\",\n );\n return value;\n};\n\nconst parseValkeyArtifacts = (input: unknown, version: string) => {\n const architectures = artifactRecord(input, valkeyArchitectures);\n const line = version.split(\".\").slice(0, 2).join(\".\");\n const parseArchitecture = (\n architecture: (typeof valkeyArchitectures)[number],\n ) => {\n const packages = artifactRecord(\n architectures[architecture],\n Object.keys(valkeyArtifactPackages),\n );\n const parseArtifact = (kind: keyof typeof valkeyArtifactPackages) => {\n const artifact = artifactRecord(packages[kind], [\"url\", \"sha256\"]);\n const url = artifact[\"url\"];\n const sha256 = artifact[\"sha256\"];\n const expected = `https://download.valkey.io/packaging/valkey-${line}/deb/ubuntu2404/${architecture}/${valkeyArtifactPackages[kind]}_${version}-1.noble_${architecture}.deb`;\n if (typeof url !== \"string\" || url !== expected)\n throw new Error(\n \"valkeyArtifacts URL must select the exact official versioned Ubuntu artifact\",\n );\n if (typeof sha256 !== \"string\" || !/^[a-f0-9]{64}$/.test(sha256))\n throw new Error(\"valkeyArtifacts requires a lowercase SHA256 pin\");\n return { url, sha256 };\n };\n return {\n server: parseArtifact(\"server\"),\n tools: parseArtifact(\"tools\"),\n } satisfies Record<\n keyof typeof valkeyArtifactPackages,\n ReturnType<typeof parseArtifact>\n >;\n };\n return {\n amd64: parseArchitecture(\"amd64\"),\n arm64: parseArchitecture(\"arm64\"),\n } satisfies Record<\n (typeof valkeyArchitectures)[number],\n ReturnType<typeof parseArchitecture>\n >;\n};\n\n/** Reject unsupported or incomplete installed policies before inspecting a consumer. */\nexport const parseToolchainPolicy = (input: unknown) => {\n if (!record(input) || input[\"schemaVersion\"] !== 1)\n throw new Error(\"toolchain.json must use schemaVersion 1\");\n const string = (object: Record<string, unknown>, key: string) => {\n const value = object[key];\n if (typeof value !== \"string\" || value.trim() === \"\")\n throw new Error(`toolchain.json requires a nonempty ${key}`);\n return value;\n };\n const packages: Record<string, string> = {};\n for (const key of packagePinKeys) packages[key] = string(input, key);\n const bun = string(input, \"bun\");\n const typescript = string(input, \"typescript\");\n const node = string(input, \"node\");\n const consumerNode = string(input, \"consumerNode\");\n const consumerNpm = string(input, \"consumerNpm\");\n const consumerPnpm = string(input, \"consumerPnpm\");\n const consumerTypescript = string(input, \"consumerTypescript\");\n const python = string(input, \"python\");\n const postgres = string(input, \"postgres\");\n const valkey = string(input, \"valkey\");\n const rust = string(input, \"rust\");\n for (const [name, value] of Object.entries({\n ...packages,\n bun,\n typescript,\n consumerNpm,\n consumerPnpm,\n consumerTypescript,\n }))\n if (valid(value) !== value)\n throw new Error(`toolchain.json ${name} must be an exact release`);\n if (!/^[1-9]\\d*$/.test(postgres) || !Number.isSafeInteger(Number(postgres)))\n throw new Error(\"PostgreSQL must be a canonical positive major\");\n if (valid(valkey) !== valkey || !/^\\d+\\.\\d+\\.\\d+$/.test(valkey))\n throw new Error(\"Valkey must be an exact stable release\");\n const valkeyArtifacts = parseValkeyArtifacts(\n input[\"valkeyArtifacts\"],\n valkey,\n );\n if (!nodePolicyValid(node))\n throw new Error(\"Node must be a canonical major N.x series\");\n if (\n valid(consumerNode) !== consumerNode ||\n !consumerNode.startsWith(\"22.\") ||\n consumerNode.includes(\"-\") ||\n consumerNode.includes(\"+\")\n )\n throw new Error(\"consumerNode must be an exact stable Node 22 release\");\n if (!/^\\d+\\.\\d+(?:\\.\\d+)?$/.test(python))\n throw new Error(\"Python must be an exact minor or patch release\");\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(rust))\n throw new Error(\"Rust must be an exact stable release\");\n if (\n !consumerTypescript.startsWith(\"6.\") ||\n consumerTypescript.includes(\"-\") ||\n consumerTypescript.includes(\"+\")\n )\n throw new Error(\n \"consumerTypescript must be an exact stable TypeScript 6 release\",\n );\n const compatibility = input[\"typescript6Compatibility\"];\n if (!record(compatibility))\n throw new Error(\"missing TypeScript compatibility policy\");\n const version = string(compatibility, \"version\");\n const packageAlias = string(compatibility, \"packageAlias\");\n if (valid(version) !== version)\n throw new Error(\"TypeScript compatibility must be an exact release\");\n const layouts = input[\"typescriptInstallLayouts\"];\n if (!Array.isArray(layouts) || layouts.length === 0)\n throw new Error(\"missing TypeScript install layouts\");\n const typescriptInstallLayouts = layouts.map((layout: unknown) => {\n if (!record(layout)) throw new Error(\"invalid TypeScript install layout\");\n const compilerPackage = string(layout, \"compilerPackage\");\n const compilerSpecifier = string(layout, \"compilerSpecifier\");\n const typecheckCommand = string(layout, \"typecheckCommand\");\n switch (layout[\"type\"]) {\n case \"direct\":\n if (\n compilerSpecifier !== typescript ||\n compilerPackage !== \"typescript\"\n )\n throw new Error(\n \"direct TypeScript layout differs from shared version\",\n );\n return {\n type: \"direct\",\n compilerPackage,\n compilerSpecifier,\n typecheckCommand,\n } as const;\n case \"split-compatibility\": {\n const compatibilityPackage = string(layout, \"compatibilityPackage\");\n const compatibilitySpecifier = string(layout, \"compatibilitySpecifier\");\n if (\n compilerSpecifier !== `npm:typescript@${typescript}` ||\n compatibilitySpecifier !== version\n )\n throw new Error(\n \"split TypeScript layout differs from shared versions\",\n );\n return {\n type: \"split-compatibility\",\n compilerPackage,\n compilerSpecifier,\n compatibilityPackage,\n compatibilitySpecifier,\n typecheckCommand,\n } as const;\n }\n default:\n throw new Error(\"unsupported TypeScript install layout\");\n }\n });\n const actionsInput = input[\"actions\"];\n if (!record(actionsInput) || Object.keys(actionsInput).length === 0)\n throw new Error(\"missing approved actions\");\n const actions: Record<string, { sha: string; version: string }> = {};\n for (const [name, action] of Object.entries(actionsInput)) {\n if (!record(action)) throw new Error(`invalid action policy: ${name}`);\n const sha = string(action, \"sha\");\n const actionVersion = string(action, \"version\");\n if (!/^[a-f0-9]{40}$/.test(sha) || !/^v\\d+(?:\\.\\d+)*$/.test(actionVersion))\n throw new Error(`invalid action SHA/version: ${name}`);\n actions[name] = { sha, version: actionVersion };\n }\n const dependabotInput = input[\"dependabot\"];\n if (\n !record(dependabotInput) ||\n !record(dependabotInput[\"schedule\"]) ||\n !record(dependabotInput[\"cooldown\"]) ||\n !record(dependabotInput[\"groups\"])\n )\n throw new Error(\"missing Dependabot policy\");\n const scheduleInput = dependabotInput[\"schedule\"];\n const schedule = {\n interval: string(scheduleInput, \"interval\"),\n day: string(scheduleInput, \"day\"),\n time: string(scheduleInput, \"time\"),\n timezone: string(scheduleInput, \"timezone\"),\n };\n const defaultDays = dependabotInput[\"cooldown\"][\"defaultDays\"];\n if (\n typeof defaultDays !== \"number\" ||\n !Number.isInteger(defaultDays) ||\n defaultDays < 5\n )\n throw new Error(\"Dependabot cooldown must be at least five days\");\n const strings = (value: unknown): string[] => {\n if (\n !Array.isArray(value) ||\n !value.every((entry: unknown) => typeof entry === \"string\")\n )\n throw new Error(\"Dependabot group values must be string arrays\");\n return value;\n };\n const groups: Record<string, { patterns: string[]; updateTypes: string[] }> =\n {};\n for (const [name, group] of Object.entries(dependabotInput[\"groups\"])) {\n if (!record(group)) throw new Error(`invalid Dependabot group: ${name}`);\n groups[name] = {\n patterns: strings(group[\"patterns\"]),\n updateTypes: strings(group[\"updateTypes\"]),\n };\n }\n return {\n bun,\n formatter: parseFormatterPolicy(input[\"formatter\"]),\n typescript,\n node,\n postgres,\n valkey,\n valkeyArtifacts,\n consumerNode,\n consumerNpm,\n consumerPnpm,\n consumerTypescript,\n python,\n rust,\n packages,\n actions,\n typescriptInstallLayouts,\n typescript6Compatibility: { version, packageAlias },\n dependabot: {\n schedule,\n cooldown: { defaultDays },\n groups,\n ignoredPackages: [\n ...new Set([\n ...Object.keys(packages),\n ...typescriptInstallLayouts.flatMap((layout) =>\n layout.type === \"direct\"\n ? [layout.compilerPackage]\n : [layout.compilerPackage, layout.compatibilityPackage],\n ),\n packageAlias,\n \"bun-types\",\n ]),\n ],\n ignoredActions: Object.keys(actions),\n ignoredImages: [\"node\", \"python\", \"oven/bun\"],\n },\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typecheck-parity.cjs","names":["resolve","relative","stripVTControlCharacters","readFile","join","require","createRequire","spawnSync","dirname","readFileSync","realpathSync","statSync","performance","mkdir","symlink","basename","mkdtemp","tmpdir","writeFile","rm"],"sources":["../src/typecheck-parity.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { readFileSync, realpathSync, statSync } from \"node:fs\";\nimport {\n mkdtemp,\n mkdir,\n readFile,\n rm,\n writeFile,\n symlink,\n} from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { resolve, join, relative, dirname, basename } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { stripVTControlCharacters } from \"node:util\";\n\nexport const fixtures = [\n {\n name: \"module-detection\",\n flags: [\"noUnusedLocals\"],\n files: { \"input.ts\": \"const unused = 1;\" },\n codes: [6133],\n },\n {\n name: \"skip-declaration-check\",\n flags: [\"skipLibCheck\"],\n files: { \"input.d.ts\": \"export declare const value: MissingType;\" },\n codes: [],\n },\n {\n name: \"json-import\",\n flags: [\"resolveJsonModule\"],\n files: {\n \"data.json\": '{ \"name\": \"value\" }',\n \"input.ts\":\n 'import data from \"./data.json\"; export const value: string = data.name;',\n },\n codes: [],\n },\n {\n name: \"interop-import\",\n flags: [\"esModuleInterop\"],\n files: {\n \"types.d.cts\": \"declare const value: string; export = value;\",\n \"input.ts\":\n 'import value from \"./types.cjs\"; export const result: string = value;',\n },\n codes: [],\n },\n {\n name: \"valid-control\",\n flags: [],\n files: { \"input.ts\": 'export const value: string = \"correct\";' },\n codes: [],\n },\n {\n name: \"type-mismatch\",\n flags: [],\n files: { \"input.ts\": 'export const value: number = \"wrong\";' },\n codes: [2322],\n },\n {\n name: \"missing-property\",\n flags: [],\n files: { \"input.ts\": \"export const value: { name: string } = {};\" },\n codes: [2741],\n },\n {\n name: \"strict-null\",\n flags: [\"strictNullChecks\"],\n files: { \"input.ts\": \"export const value: string = null;\" },\n codes: [2322],\n },\n {\n name: \"unchecked-index\",\n flags: [\"noUncheckedIndexedAccess\"],\n files: { \"input.ts\": 'export const value: string = [\"value\"][1];' },\n codes: [2322],\n },\n {\n name: \"unused-local\",\n flags: [\"noUnusedLocals\"],\n files: { \"input.ts\": \"const unused = 1; export {};\" },\n codes: [6133],\n },\n {\n name: \"unused-parameter\",\n flags: [\"noUnusedParameters\"],\n files: { \"input.ts\": \"export const value = (unused: string) => 1;\" },\n codes: [6133],\n },\n {\n name: \"implicit-any\",\n flags: [\"noImplicitAny\"],\n files: { \"input.ts\": \"export const value = (input) => input;\" },\n codes: [7006],\n },\n {\n name: \"missing-import\",\n flags: [],\n files: {\n \"input.ts\": 'import { value } from \"./missing.js\"; export { value };',\n },\n codes: [2307],\n },\n {\n name: \"side-effect-import\",\n flags: [\"noUncheckedSideEffectImports\"],\n files: { \"input.ts\": 'import \"./missing.js\";' },\n codes: [2882],\n },\n {\n name: \"generic-constraint\",\n flags: [],\n files: {\n \"input.ts\":\n \"type Box<T extends string> = { value: T }; export type Value = Box<number>;\",\n },\n codes: [2344],\n },\n {\n name: \"exact-optional\",\n flags: [\"exactOptionalPropertyTypes\"],\n files: {\n \"input.ts\":\n \"export const value: { optional?: string } = { optional: undefined };\",\n },\n codes: [2375],\n },\n {\n name: \"fallthrough\",\n flags: [\"noFallthroughCasesInSwitch\"],\n files: {\n \"input.ts\":\n \"export const run = (value: number) => { switch (value) { case 0: value++; case 1: return value; default: return 0; } };\",\n },\n codes: [7029],\n },\n {\n name: \"implicit-override\",\n flags: [\"noImplicitOverride\"],\n files: {\n \"input.ts\":\n \"class Base { value = 1; } export class Child extends Base { value = 2; }\",\n },\n codes: [4114],\n },\n {\n name: \"implicit-return\",\n flags: [\"noImplicitReturns\"],\n files: {\n \"input.ts\":\n \"export const run = (value: boolean) => { if (value) return 1; };\",\n },\n codes: [7030],\n },\n {\n name: \"unknown-catch\",\n flags: [\"useUnknownInCatchVariables\"],\n files: {\n \"input.ts\":\n \"export const run = () => { try { return 1; } catch (error) { return error.message; } };\",\n },\n codes: [18046],\n },\n {\n name: \"index-property\",\n flags: [\"noPropertyAccessFromIndexSignature\"],\n files: {\n \"input.ts\":\n \"export const run = (value: Record<string, string>) => value.name;\",\n },\n codes: [4111],\n },\n {\n name: \"erasable-syntax\",\n flags: [\"erasableSyntaxOnly\"],\n files: { \"input.ts\": \"export enum Value { First }\" },\n codes: [1294],\n },\n {\n name: \"type-only-import\",\n flags: [\"verbatimModuleSyntax\"],\n files: {\n \"types.ts\": \"export type Value = string;\",\n \"input.ts\":\n 'import { Value } from \"./types.js\"; export const value: Value = \"value\";',\n },\n codes: [1484],\n },\n {\n name: \"checked-javascript\",\n flags: [\"allowJs\", \"checkJs\"],\n files: {\n \"input.js\": '/** @type {number} */\\nexport const value = \"wrong\";',\n },\n codes: [2322],\n },\n {\n name: \"strict-function\",\n flags: [\"strictFunctionTypes\"],\n files: {\n \"input.ts\":\n \"export const value: (input: string | number) => void = (input: string) => { input.toUpperCase(); };\",\n },\n codes: [2322],\n },\n {\n name: \"strict-initialization\",\n flags: [\"strictPropertyInitialization\"],\n files: { \"input.ts\": \"export class Value { name: string; }\" },\n codes: [2564],\n },\n {\n name: \"strict-bind\",\n flags: [\"strictBindCallApply\"],\n files: {\n \"input.ts\":\n \"const value = (input: string) => input; export const result = value.call(undefined, 1);\",\n },\n codes: [2345],\n },\n {\n name: \"implicit-this\",\n flags: [\"noImplicitThis\"],\n files: { \"input.ts\": \"export function value() { return this.name; }\" },\n codes: [2683],\n },\n {\n name: \"strict-iterator\",\n flags: [\"strictBuiltinIteratorReturn\"],\n files: {\n \"input.ts\":\n 'export const value: string = [\"value\"].values().next().value;',\n },\n codes: [2322],\n },\n {\n name: \"always-strict\",\n flags: [\"alwaysStrict\"],\n files: { \"input.ts\": \"export const value = (eval: string) => eval;\" },\n codes: [1215],\n },\n {\n name: \"file-casing\",\n flags: [\"forceConsistentCasingInFileNames\"],\n files: {\n \"named.ts\": 'export const name = \"value\";',\n \"Named.ts\": 'export const name = \"value\";',\n \"input.ts\":\n 'import { name } from \"./named.js\"; import { name as other } from \"./Named.js\"; export const value = name + other;',\n },\n codes: [1149, 1261],\n anyCode: true,\n },\n];\nexport const diagnosticCodes = (text: string) =>\n [\n ...new Set(\n [\n ...text.matchAll(\n /(?:\\b(?:error|warning)\\s+(?:TS)?|<error\\b[^>]*\\bcode=\"TS)(\\d{4,5})(?=:|\")/g,\n ),\n ].map((match) => Number(match.at(1))),\n ),\n ].sort((a, b) => a - b);\n\ntype DiagnosticCheckResult = { status: number | null; output: string };\ntype DiagnosticParityOptions = {\n expected: readonly number[];\n match: \"all\" | \"any\";\n baseline: DiagnosticCheckResult;\n candidate: DiagnosticCheckResult;\n repo?: string;\n};\nexport const diagnosticParity = ({\n expected,\n match,\n baseline,\n candidate,\n}: DiagnosticParityOptions) => {\n const tscCodes = diagnosticCodes(baseline.output);\n const bunCodes = diagnosticCodes(candidate.output);\n const seeded =\n match === \"any\"\n ? expected.some((code) => tscCodes.includes(code))\n : expected.every((code) => tscCodes.includes(code));\n const missing = tscCodes.filter((code) => !bunCodes.includes(code));\n const extra = bunCodes.filter((code) => !tscCodes.includes(code));\n const exitsMatch =\n expected.length === 0\n ? baseline.status === 0 &&\n candidate.status === 0 &&\n tscCodes.length === 0 &&\n bunCodes.length === 0\n : baseline.status !== null &&\n baseline.status !== 0 &&\n candidate.status !== null &&\n candidate.status !== 0;\n return {\n tscCodes,\n bunCodes,\n missing,\n extra,\n passed:\n seeded &&\n exitsMatch &&\n baseline.status === candidate.status &&\n missing.length === 0 &&\n extra.length === 0,\n };\n};\n\nconst configurationDiagnostics = (output: string, repo: string) =>\n diagnosticSet(output, repo).filter(\n (diagnostic) =>\n /^(?:<config>:0:|.*\\.json:[0-9]+:)(?:[56][0-9]{3}|1800[23]|2688)(?::|$)/.test(\n diagnostic,\n ) || /:1800[23](?::|$)/.test(diagnostic),\n );\n\ntype FixtureParityOptions = DiagnosticParityOptions & {\n seedFiles: readonly string[];\n};\nexport const fixtureParity = (options: FixtureParityOptions) => {\n const result = diagnosticParity(options);\n const { baseline, candidate, expected, match } = options;\n const identityParity = compareDiagnosticSets(\n {\n status: baseline.status,\n diagnostics: diagnosticSet(\n baseline.output,\n options.repo ?? process.cwd(),\n ),\n },\n {\n status: candidate.status,\n diagnostics: diagnosticSet(\n candidate.output,\n options.repo ?? process.cwd(),\n ),\n },\n );\n const configDiagnostics = [\n ...configurationDiagnostics(\n baseline.output,\n options.repo ?? process.cwd(),\n ).map((diagnostic) => `TypeScript: ${diagnostic}`),\n ...configurationDiagnostics(\n candidate.output,\n options.repo ?? process.cwd(),\n ).map((diagnostic) => `Bun: ${diagnostic}`),\n ];\n const seedFiles = new Set(\n options.seedFiles.map((file) =>\n resolve(options.repo ?? process.cwd(), file),\n ),\n );\n const seededCodes = new Set(\n diagnosticSet(baseline.output, options.repo ?? process.cwd()).flatMap(\n (diagnostic) => {\n const diagnosticMatch = /^(.*):[0-9]+:([0-9]+)$/.exec(diagnostic);\n const file = diagnosticMatch?.at(1);\n const code = diagnosticMatch?.at(2);\n return file !== undefined &&\n code !== undefined &&\n seedFiles.has(resolve(options.repo ?? process.cwd(), file))\n ? [Number(code)]\n : [];\n },\n ),\n );\n const active =\n expected.length > 0 &&\n (match === \"any\"\n ? expected.some((code) => seededCodes.has(code))\n : expected.every((code) => seededCodes.has(code)));\n const validExits =\n baseline.status !== null &&\n candidate.status !== null &&\n (result.tscCodes.length === 0\n ? baseline.status === 0\n : baseline.status !== 0) &&\n (result.bunCodes.length === 0\n ? candidate.status === 0\n : candidate.status !== 0);\n return {\n ...result,\n active,\n configurationDiagnostics: configDiagnostics,\n identityMissing: identityParity.missing,\n identityExtra: identityParity.extra,\n passed:\n configDiagnostics.length === 0 &&\n identityParity.passed &&\n validExits &&\n baseline.status === candidate.status &&\n result.missing.length === 0 &&\n result.extra.length === 0,\n };\n};\n\nexport const fixtureRunPassed = (\n results: { active: boolean; passed: boolean }[],\n) =>\n results.some(({ active }) => active) && results.every(({ passed }) => passed);\n\nconst diagnosticLocation = (file: string, repo: string) => {\n const normalized = file.replaceAll(\"\\\\\", \"/\");\n const bundled = /^bundled:\\/\\/\\/libs\\/(lib\\.[^/]+\\.d\\.ts)$/.exec(normalized);\n const installed =\n /(?:^|\\/)node_modules\\/(?:typescript|@typescript\\/(?:native|typescript-[^/]+))\\/(?:.*\\/)?(lib\\.[^/]+\\.d\\.ts)$/.exec(\n normalized,\n );\n const library = bundled?.at(1) ?? installed?.at(1);\n return library === undefined\n ? relative(repo, resolve(repo, file)).replaceAll(\"\\\\\", \"/\")\n : `<lib>/${library}`;\n};\nconst globalDiagnosticKey = (code: string, message: string) =>\n `<config>:0:${code}:${message.trim().replaceAll(/\\s+/g, \" \")}`;\n\nexport const diagnosticSet = (output: string, repo: string) => {\n const clean = stripVTControlCharacters(output);\n const diagnostics = new Set<string>();\n for (const block of clean.matchAll(/<error\\b([^>]*)>([\\s\\S]*?)<\\/error>/g)) {\n const attributes = new Map(\n [...(block.at(1) ?? \"\").matchAll(/(\\w+)=\"([^\"]*)\"/g)].map((match) => [\n match.at(1),\n match.at(2),\n ]),\n );\n const file = attributes.get(\"file\");\n const row = attributes.get(\"line\");\n const code = attributes.get(\"code\");\n if (code === undefined || !/^TS\\d+$/.test(code)) continue;\n if (file !== undefined && row !== undefined && row !== \"0\")\n diagnostics.add(\n `${diagnosticLocation(file, repo)}:${row}:${code.slice(2)}`,\n );\n else {\n const message =\n (block.at(2) ?? \"\").split(/<(?:source|related)\\b/).at(0) ?? \"\";\n diagnostics.add(globalDiagnosticKey(code.slice(2), message));\n }\n }\n for (const rawLine of clean.split(\"\\n\")) {\n const line = rawLine.replace(\n /^(?!(?:error|warning) TS\\d+:)(?:@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]* [a-zA-Z0-9_.:-]+: /,\n \"\",\n );\n if (line.startsWith(\"<error \")) continue;\n const match =\n /^(.*?)\\((\\d+),\\d+\\):\\s*(?:error|warning) TS(\\d+)/.exec(line) ??\n /^(.*?):(\\d+):\\d+:\\s*(?:error|warning) (?:TS)?(\\d+)/.exec(line);\n if (match) {\n const [, file = \"\", row = \"\", code = \"\"] = match;\n diagnostics.add(`${diagnosticLocation(file, repo)}:${row}:${code}`);\n } else {\n const global = /^(?:error|warning) TS(\\d+):\\s*(.*)/.exec(line);\n if (global)\n diagnostics.add(\n globalDiagnosticKey(global.at(1) ?? \"\", global.at(2) ?? \"\"),\n );\n }\n }\n return [...diagnostics].sort();\n};\n\ntype DiagnosticSetResult = { status: number | null; diagnostics: string[] };\nexport const compareDiagnosticSets = (\n baseline: DiagnosticSetResult,\n candidate: DiagnosticSetResult,\n) => {\n const missing = baseline.diagnostics.filter(\n (item) => !candidate.diagnostics.includes(item),\n );\n const extra = candidate.diagnostics.filter(\n (item) => !baseline.diagnostics.includes(item),\n );\n const valid = (result: DiagnosticSetResult) =>\n result.status !== null &&\n (result.diagnostics.length === 0\n ? result.status === 0\n : result.status !== 0);\n return {\n missing,\n extra,\n passed:\n valid(baseline) &&\n valid(candidate) &&\n baseline.status === candidate.status &&\n missing.length === 0 &&\n extra.length === 0,\n };\n};\n\nexport const assertUnshadowedCheck = async (repo: string) => {\n const manifest: unknown = JSON.parse(\n await readFile(join(repo, \"package.json\"), \"utf8\"),\n );\n if (typeof manifest !== \"object\" || manifest === null)\n throw new Error(\"Invalid repository package.json\");\n if (\n \"scripts\" in manifest &&\n typeof manifest.scripts === \"object\" &&\n manifest.scripts !== null &&\n \"check\" in manifest.scripts\n )\n throw new Error(\n 'Repository package.json must not define a \"check\" script: it shadows Bun typechecking; rename that script before running parity',\n );\n};\n\nexport const resolveCompiler = async (repo: string, policy: unknown) => {\n if (\n typeof policy !== \"object\" ||\n policy === null ||\n !(\"typescriptInstallLayouts\" in policy) ||\n !Array.isArray(policy.typescriptInstallLayouts)\n )\n throw new Error(\"toolchain.json must define typescriptInstallLayouts\");\n const manifest: unknown = JSON.parse(\n await readFile(join(repo, \"package.json\"), \"utf8\"),\n );\n if (typeof manifest !== \"object\" || manifest === null)\n throw new Error(\"Invalid repository package.json\");\n const dependencies = new Map<string, unknown>();\n for (const key of [\"dependencies\", \"devDependencies\"]) {\n if (!(key in manifest)) continue;\n const section = Reflect.get(manifest, key);\n if (typeof section === \"object\" && section !== null)\n for (const [name, specifier] of Object.entries(section))\n dependencies.set(name, specifier);\n }\n const require = createRequire(join(repo, \"package.json\"));\n // Prefer the explicit split compiler over its compatibility installation.\n for (const layout of [...policy.typescriptInstallLayouts].reverse()) {\n if (\n typeof layout !== \"object\" ||\n layout === null ||\n !(\"compilerPackage\" in layout) ||\n typeof layout.compilerPackage !== \"string\"\n )\n throw new Error(\"Invalid TypeScript install layout\");\n if (!dependencies.has(layout.compilerPackage)) continue;\n const packagePath = require.resolve(\n `${layout.compilerPackage}/package.json`,\n );\n const installed: unknown = JSON.parse(await readFile(packagePath, \"utf8\"));\n if (\n typeof installed !== \"object\" ||\n installed === null ||\n !(\"bin\" in installed) ||\n typeof installed.bin !== \"object\" ||\n installed.bin === null ||\n !(\"tsc\" in installed.bin) ||\n typeof installed.bin.tsc !== \"string\"\n )\n throw new Error(`${layout.compilerPackage} must expose a tsc binary`);\n if (\n !(\"compilerSpecifier\" in layout) ||\n typeof layout.compilerSpecifier !== \"string\"\n )\n throw new Error(\n \"TypeScript install layout must define compilerSpecifier\",\n );\n const expectedVersion = layout.compilerSpecifier.replace(\n /^npm:typescript@/,\n \"\",\n );\n if (!(\"version\" in installed) || installed.version !== expectedVersion)\n throw new Error(\n `${layout.compilerPackage} must install TypeScript ${expectedVersion}`,\n );\n return resolve(packagePath, \"..\", installed.bin.tsc);\n }\n throw new Error(\n \"Repository must declare a compiler from typescriptInstallLayouts\",\n );\n};\n\nexport const assertBunVersion = (bun: string, policy: unknown) => {\n if (\n typeof policy !== \"object\" ||\n policy === null ||\n !(\"bun\" in policy) ||\n typeof policy.bun !== \"string\"\n )\n throw new Error(\"toolchain.json must define bun\");\n const result = spawnSync(bun, [\"--version\"], { encoding: \"utf8\" });\n if (result.error) throw result.error;\n const installed = result.stdout.trim();\n if (result.status !== 0 || installed !== policy.bun)\n throw new Error(\n `Bun must be ${policy.bun}; selected runtime reports ${installed || \"no version\"}`,\n );\n};\n\nexport const bunCheckArgs = (project?: string, build = false) => [\n \"check\",\n \"--no-pretty\",\n \"--all\",\n ...(build ? [\"--build\"] : []),\n ...(project === undefined ? [] : [`--project=${project}`]),\n];\n\nconst canonicalOptions = (value: unknown): string => {\n if (Array.isArray(value)) return `[${value.map(canonicalOptions).join(\",\")}]`;\n if (typeof value === \"object\" && value !== null)\n return `{${Object.keys(value)\n .sort()\n .map(\n (key) =>\n `${JSON.stringify(key)}:${canonicalOptions(Reflect.get(value, key))}`,\n )\n .join(\",\")}}`;\n if (\n value !== null &&\n typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"\n )\n throw new Error(\"Invalid effective compiler option\");\n return JSON.stringify(value);\n};\n\n// Emit and build settings do not belong in diagnostic-only fixture projects.\nconst EMIT_ONLY_OPTIONS = new Set([\n \"composite\",\n \"declaration\",\n \"declarationDir\",\n \"declarationMap\",\n \"emitDeclarationOnly\",\n \"outDir\",\n \"outFile\",\n \"rootDir\",\n \"sourceMap\",\n \"inlineSourceMap\",\n \"inlineSources\",\n \"incremental\",\n \"tsBuildInfoFile\",\n \"noEmitOnError\",\n \"importHelpers\",\n \"noEmitHelpers\",\n \"emitBOM\",\n \"mapRoot\",\n \"sourceRoot\",\n \"newLine\",\n \"preserveConstEnums\",\n \"removeComments\",\n \"stripInternal\",\n \"downlevelIteration\",\n \"isolatedDeclarations\",\n \"noEmit\",\n]);\n\ntype FixtureCompilerOptionsArgs = {\n compilerOptions: unknown;\n configPath: string;\n};\nconst resolvedCompilerOptions = ({\n compilerOptions,\n configPath,\n}: FixtureCompilerOptionsArgs) => {\n if (\n typeof compilerOptions !== \"object\" ||\n compilerOptions === null ||\n Array.isArray(compilerOptions)\n )\n throw new Error(`Invalid compiler options: ${configPath}`);\n const options: Record<string, unknown> = Object.fromEntries(\n Object.entries(compilerOptions),\n );\n const directory = dirname(configPath);\n const rootDir = options[\"rootDir\"];\n if (rootDir !== undefined && typeof rootDir !== \"string\")\n throw new Error(`Invalid rootDir: ${configPath}`);\n if (typeof rootDir === \"string\")\n options[\"rootDir\"] = resolve(directory, rootDir);\n let resolutionDirectory = directory;\n const absolutePaths = (value: unknown) => {\n if (\n !Array.isArray(value) ||\n !value.every((entry: unknown) => typeof entry === \"string\")\n )\n throw new Error(`Invalid compiler path option: ${configPath}`);\n return value.map((entry) => resolve(resolutionDirectory, entry));\n };\n for (const name of [\"rootDirs\", \"typeRoots\"])\n if (name in options) options[name] = absolutePaths(options[name]);\n if (\"baseUrl\" in options) {\n const baseUrl = options[\"baseUrl\"];\n if (typeof baseUrl !== \"string\")\n throw new Error(`Invalid baseUrl: ${configPath}`);\n resolutionDirectory = resolve(directory, baseUrl);\n options[\"baseUrl\"] = resolutionDirectory;\n }\n if (\"paths\" in options) {\n const paths = options[\"paths\"];\n if (typeof paths !== \"object\" || paths === null || Array.isArray(paths))\n throw new Error(`Invalid paths: ${configPath}`);\n options[\"paths\"] = Object.fromEntries(\n Object.entries(paths).map(([key, value]) => [key, absolutePaths(value)]),\n );\n }\n return options;\n};\n\nexport const fixtureCompilerOptions = (args: FixtureCompilerOptionsArgs) => {\n const options = Object.fromEntries(\n Object.entries(resolvedCompilerOptions(args)).filter(\n ([name]) => !EMIT_ONLY_OPTIONS.has(name),\n ),\n );\n options[\"noEmit\"] = true;\n return options;\n};\n\ntype FixtureInputOptions = {\n files: readonly string[];\n compilerOptions: Record<string, unknown>;\n};\nexport const fixtureInputs = ({\n files,\n compilerOptions,\n}: FixtureInputOptions) => {\n const inputs = files.filter((file) => /\\.(?:[cm]?[jt]sx?|json)$/.test(file));\n for (const input of inputs) {\n if (/\\.[cm]?jsx?$/.test(input) && compilerOptions[\"allowJs\"] !== true)\n return {\n status: \"inapplicable\",\n reason: `${input} requires allowJs`,\n } as const;\n if (\n input.endsWith(\".json\") &&\n compilerOptions[\"resolveJsonModule\"] !== true\n )\n return {\n status: \"inapplicable\",\n reason: `${input} requires resolveJsonModule`,\n } as const;\n }\n return { status: \"applicable\", files: inputs } as const;\n};\n\nexport const fixturePackageContext = (configPath: string) => {\n for (let folder = dirname(configPath); ; folder = dirname(folder)) {\n try {\n const manifest: unknown = JSON.parse(\n readFileSync(join(folder, \"package.json\"), \"utf8\"),\n );\n if (typeof manifest !== \"object\" || manifest === null)\n throw new Error(`Invalid package.json: ${folder}`);\n if (!(\"type\" in manifest)) return {};\n if (manifest.type !== \"module\" && manifest.type !== \"commonjs\")\n throw new Error(`Invalid package type: ${folder}`);\n return { type: manifest.type };\n } catch (error) {\n if (\n !(error instanceof Error) ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n )\n throw error;\n }\n if (dirname(folder) === folder) return {};\n }\n};\n\ntype CompilerConfig = {\n path: string;\n compilerOptions: unknown;\n packageContext?: unknown;\n};\nexport const groupCompilerConfigs = (configs: CompilerConfig[]) => {\n const groups = new Map<\n string,\n {\n path: string;\n projects: string[];\n compilerOptions: unknown;\n packageContext?: unknown;\n }\n >();\n for (const config of configs) {\n const compilerOptions = fixtureCompilerOptions({\n compilerOptions: config.compilerOptions,\n configPath: config.path,\n });\n const key = canonicalOptions({\n compilerOptions,\n resolutionContext:\n \"typeRoots\" in compilerOptions ? null : dirname(config.path),\n packageContext: config.packageContext ?? {},\n });\n const existing = groups.get(key);\n if (existing) existing.projects.push(config.path);\n else\n groups.set(key, {\n path: config.path,\n projects: [config.path],\n compilerOptions: config.compilerOptions,\n ...(config.packageContext === undefined\n ? {}\n : { packageContext: config.packageContext }),\n });\n }\n return [...groups.values()];\n};\n\ntype DiscoverConfigGroupsOptions = {\n repo: string;\n compiler: string;\n project?: string;\n};\nexport const discoverConfigGroups = ({\n repo,\n compiler,\n project,\n}: DiscoverConfigGroupsOptions) => {\n const configs: CompilerConfig[] = [];\n const visited = new Set<string>();\n const projects: {\n path: string;\n compilerOptions: unknown;\n files: string[];\n references: string[];\n resolvedReferences: Record<string, unknown>[];\n }[] = [];\n let build = false;\n const visit = (inputPath: string) => {\n const path = realpathSync(\n statSync(inputPath).isDirectory()\n ? join(inputPath, \"tsconfig.json\")\n : inputPath,\n );\n readFileSync(path, \"utf8\");\n if (visited.has(path)) return;\n visited.add(path);\n const result = spawnSync(\n process.execPath,\n [compiler, \"--showConfig\", \"--project\", path],\n { cwd: repo, encoding: \"utf8\", maxBuffer: 64 * 1024 * 1024 },\n );\n if (result.error) throw result.error;\n if (result.status !== 0) throw new Error(result.stdout + result.stderr);\n const config: unknown = JSON.parse(result.stdout);\n if (typeof config !== \"object\" || config === null)\n throw new Error(`Invalid resolved config: ${path}`);\n const references: unknown[] =\n \"references\" in config && Array.isArray(config.references)\n ? config.references\n : [];\n build ||= project === undefined && references.length > 0;\n const compilerOptions =\n \"compilerOptions\" in config ? config.compilerOptions : {};\n if (\n typeof compilerOptions !== \"object\" ||\n compilerOptions === null ||\n Array.isArray(compilerOptions)\n )\n throw new Error(`Invalid compiler options: ${path}`);\n const rawFiles: unknown = \"files\" in config ? config.files : [];\n if (!Array.isArray(rawFiles))\n throw new Error(`Invalid project files: ${path}`);\n const files = rawFiles.map((file: unknown) => {\n if (typeof file !== \"string\")\n throw new Error(`Invalid project file: ${path}`);\n return resolve(dirname(path), file);\n });\n if (\n files.length === 0 &&\n (project !== undefined || references.length === 0)\n )\n throw new Error(`Project resolves to zero input files: ${path}`);\n const referencePaths: string[] = [];\n const resolvedReferences: Record<string, unknown>[] = [];\n projects.push({\n path,\n compilerOptions,\n files,\n references: referencePaths,\n resolvedReferences,\n });\n if (files.length > 0 || references.length === 0)\n configs.push({\n path,\n compilerOptions,\n packageContext: fixturePackageContext(path),\n });\n for (const reference of references) {\n if (\n typeof reference !== \"object\" ||\n reference === null ||\n !(\"path\" in reference) ||\n typeof reference.path !== \"string\"\n )\n throw new Error(`Invalid project reference: ${path}`);\n const referencedProject = resolve(dirname(path), reference.path);\n const referencePath = realpathSync(\n statSync(referencedProject).isDirectory()\n ? join(referencedProject, \"tsconfig.json\")\n : referencedProject,\n );\n referencePaths.push(referencePath);\n resolvedReferences.push({ ...reference, path: referencePath });\n if (project === undefined) visit(referencePath);\n }\n };\n const selected = resolve(repo, project ?? \"tsconfig.json\");\n const root = realpathSync(\n statSync(selected).isDirectory()\n ? join(selected, \"tsconfig.json\")\n : selected,\n );\n visit(root);\n const groups = groupCompilerConfigs(configs);\n if (groups.length === 0)\n throw new Error(\"No consumer compiler configurations to compare\");\n return { build, groups, projects, root };\n};\n\ntype DiscoverProjectGraphsOptions = {\n repo: string;\n compiler: string;\n projects?: readonly string[] | undefined;\n};\nexport const discoverProjectGraphs = ({\n repo,\n compiler,\n projects,\n}: DiscoverProjectGraphsOptions) => {\n if (projects === undefined) return [discoverConfigGroups({ repo, compiler })];\n if (projects.length === 0) throw new Error(\"Select at least one project\");\n const graphs = new Map<string, ReturnType<typeof discoverConfigGroups>>();\n for (const project of projects) {\n const graph = discoverConfigGroups({ repo, compiler, project });\n if (!graphs.has(graph.root)) graphs.set(graph.root, graph);\n }\n return [...graphs.values()];\n};\n\ntype TimedCommandOptions = { command: string; args: string[]; repo: string };\nconst timedCommand = ({ command, args, repo }: TimedCommandOptions) => {\n const started = performance.now();\n const timerFlag = process.platform === \"darwin\" ? \"-l\" : \"-v\";\n const result = spawnSync(\"/usr/bin/time\", [timerFlag, command, ...args], {\n cwd: repo,\n encoding: \"utf8\",\n maxBuffer: 64 * 1024 * 1024,\n });\n if (result.error) throw result.error;\n const rss =\n process.platform === \"darwin\"\n ? /([0-9]+)\\s+maximum resident set size/.exec(result.stderr)\n : /Maximum resident set size \\(kbytes\\):\\s*([0-9]+)/.exec(result.stderr);\n if (!rss) throw new Error(\"Cannot measure maximum RSS with /usr/bin/time\");\n return {\n status: result.status,\n output: result.stdout + result.stderr,\n wall: (performance.now() - started) / 1000,\n maxRssKiB: Number(rss[1]) / (process.platform === \"darwin\" ? 1024 : 1),\n };\n};\n\nconst NO_WORK_MAX_RSS_KIB = 16 * 1024;\nconst NO_WORK_MAX_WALL_SECONDS = 0.25;\n\ntype SourceDiagnosticSetOptions = {\n output: string;\n repo: string;\n scratch: string;\n configPaths: readonly string[];\n};\nexport const sourceDiagnosticSet = ({\n output,\n repo,\n scratch,\n configPaths,\n}: SourceDiagnosticSetOptions) => {\n const configs = new Set(configPaths.map((path) => resolve(path)));\n const invalid = new Set(configurationDiagnostics(output, repo));\n return diagnosticSet(output, repo).filter((diagnostic) => {\n if (invalid.has(diagnostic)) return false;\n if (diagnostic.startsWith(\"<config>:\")) return true;\n const file = /^(.*):[0-9]+:[0-9]+$/.exec(diagnostic)?.at(1);\n if (file === undefined) return false;\n const path = resolve(repo, file);\n return (\n !configs.has(path) && path !== scratch && !path.startsWith(scratch + \"/\")\n );\n });\n};\n\ntype DiagnosticExitStatusOptions = {\n status: number | null;\n output: string;\n repo: string;\n};\nexport const diagnosticExitStatus = ({\n status,\n output,\n repo,\n}: DiagnosticExitStatusOptions) =>\n status === 2 &&\n configurationDiagnostics(output, repo).length === 0 &&\n diagnosticSet(output, repo).some(\n (diagnostic) => !diagnostic.startsWith(\"<config>:\"),\n )\n ? 1\n : status;\n\ntype CompareRepositoryArgs = {\n repo: string;\n compiler: string;\n bun: string;\n graph: ReturnType<typeof discoverConfigGroups>;\n};\n\ntype RepositoryDiagnosticComparisonOptions = {\n baseline: { status: number | null; output: string };\n candidate: { status: number | null; output: string };\n repo: string;\n scratch: string;\n configPaths: readonly string[];\n};\nexport const repositoryDiagnosticComparison = ({\n baseline,\n candidate,\n repo,\n scratch,\n configPaths,\n}: RepositoryDiagnosticComparisonOptions) => {\n const configs = new Set(configPaths.map((path) => resolve(path)));\n const configurationErrors = (output: string) => [\n ...new Set([\n ...configurationDiagnostics(output, repo),\n ...diagnosticSet(output, repo).filter((diagnostic) => {\n const file = /^(.*):[0-9]+:[0-9]+$/.exec(diagnostic)?.at(1);\n return file !== undefined && configs.has(resolve(repo, file));\n }),\n ]),\n ];\n const configurationErrorsFound = [\n ...configurationErrors(baseline.output).map(\n (diagnostic) => `TypeScript: ${diagnostic}`,\n ),\n ...configurationErrors(candidate.output).map(\n (diagnostic) => `Bun: ${diagnostic}`,\n ),\n ];\n const diagnostics = (output: string) =>\n sourceDiagnosticSet({ output, repo, scratch, configPaths });\n const comparison = compareDiagnosticSets(\n { status: baseline.status, diagnostics: diagnostics(baseline.output) },\n { status: candidate.status, diagnostics: diagnostics(candidate.output) },\n );\n return {\n ...comparison,\n passed: configurationErrorsFound.length === 0 && comparison.passed,\n configurationDiagnostics: configurationErrorsFound,\n };\n};\n\ntype TemporaryProjectTreeOptions = {\n scratch: string;\n projects: readonly string[];\n};\nconst temporaryProjectTree = async ({\n scratch,\n projects,\n}: TemporaryProjectTreeOptions) => {\n const contexts = new Map<\n string,\n { path: string; folder: string; outputFolder: string }\n >();\n const linkedFolders = new Set<string>();\n for (const project of projects) {\n const path = join(scratch, \"projects\", relative(resolve(\"/\"), project));\n const folder = dirname(path);\n await mkdir(folder, { recursive: true });\n for (let original = dirname(project); ; original = dirname(original)) {\n if (!linkedFolders.has(original)) {\n linkedFolders.add(original);\n const modules = join(original, \"node_modules\");\n try {\n if (statSync(modules).isDirectory()) {\n const destination = join(\n scratch,\n \"projects\",\n relative(resolve(\"/\"), original),\n );\n await mkdir(destination, { recursive: true });\n await symlink(modules, join(destination, \"node_modules\"), \"dir\");\n }\n } catch (error) {\n if (\n !(error instanceof Error) ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n )\n throw error;\n }\n }\n if (dirname(original) === original) break;\n }\n contexts.set(project, {\n path,\n folder,\n outputFolder: join(folder, `${basename(path)}.parity-output`),\n });\n }\n return contexts;\n};\n\nexport const compareRepository = async ({\n repo,\n compiler,\n bun,\n graph,\n}: CompareRepositoryArgs) => {\n const scratch = await mkdtemp(join(tmpdir(), \"parity-repository-\"));\n try {\n const contexts = await temporaryProjectTree({\n scratch,\n projects: graph.projects.map(({ path }) => path),\n });\n const configPaths = new Map(\n [...contexts].map(([original, context]) => [original, context.path]),\n );\n const requiredOutputs = new Set(\n graph.projects.flatMap(({ references }) => references),\n );\n for (const project of graph.projects) {\n const context = contexts.get(project.path);\n if (context === undefined)\n throw new Error(`Missing temporary project: ${project.path}`);\n const { path: configPath, outputFolder } = context;\n const options = resolvedCompilerOptions({\n configPath: project.path,\n compilerOptions: project.compilerOptions,\n });\n const declarationsRequired =\n graph.build &&\n requiredOutputs.has(project.path) &&\n options[\"composite\"] === true;\n options[\"noEmit\"] =\n !graph.build || (options[\"noEmit\"] === true && !declarationsRequired);\n const relocatesOutput =\n options[\"noEmit\"] !== true ||\n \"outDir\" in options ||\n \"declarationDir\" in options;\n // Explicit source/output directories enforce containment in noEmit checks.\n if (!(\"rootDir\" in options) && relocatesOutput)\n options[\"rootDir\"] = dirname(project.path);\n if (relocatesOutput) options[\"outDir\"] = join(outputFolder, \"output\");\n const emitsDeclarations =\n options[\"declaration\"] === true ||\n (options[\"composite\"] === true && options[\"declaration\"] !== false);\n if ((graph.build && emitsDeclarations) || \"declarationDir\" in options)\n options[\"declarationDir\"] = join(outputFolder, \"declarations\");\n if (\n graph.build ||\n options[\"incremental\"] === true ||\n options[\"composite\"] === true\n )\n options[\"tsBuildInfoFile\"] = join(outputFolder, \"project.tsbuildinfo\");\n if (graph.build) {\n options[\"declarationMap\"] = false;\n if (emitsDeclarations) options[\"emitDeclarationOnly\"] = true;\n options[\"noEmitOnError\"] = false;\n }\n if (\"outFile\" in options)\n options[\"outFile\"] = join(outputFolder, \"bundle.js\");\n await writeFile(\n configPath,\n JSON.stringify({\n compilerOptions: options,\n files: project.files,\n include: [],\n references: graph.build\n ? project.references.map((path) => {\n const temporary = configPaths.get(path);\n if (temporary === undefined)\n throw new Error(\n `Missing referenced temporary project: ${path}`,\n );\n return { path: temporary };\n })\n : project.resolvedReferences,\n }),\n );\n }\n const root = configPaths.get(graph.root);\n if (root === undefined) throw new Error(\"Missing temporary root config\");\n const baselineRaw = timedCommand({\n command: process.execPath,\n args: [\n compiler,\n ...(graph.build\n ? [\"--build\", \"--force\", root]\n : [\"--noEmit\", \"--project\", root]),\n \"--pretty\",\n \"false\",\n ],\n repo,\n });\n const candidate = timedCommand({\n command: bun,\n args: bunCheckArgs(root, graph.build),\n repo,\n });\n const sourceDiagnostics = (output: string) =>\n sourceDiagnosticSet({\n output,\n repo,\n scratch,\n configPaths: graph.projects.map(({ path }) => path),\n });\n const baselineDiagnostics = sourceDiagnostics(baselineRaw.output);\n // TypeScript can report source diagnostics as 2 even for declaration-only noEmit inputs.\n const baseline = {\n ...baselineRaw,\n rawStatus: baselineRaw.status,\n status: diagnosticExitStatus({\n status: baselineRaw.status,\n output: baselineRaw.output,\n repo,\n }),\n diagnostics: baselineDiagnostics,\n };\n const repository = repositoryDiagnosticComparison({\n baseline,\n candidate,\n repo,\n scratch,\n configPaths: [\n ...graph.projects.map(({ path }) => path),\n ...configPaths.values(),\n ],\n });\n return {\n baseline,\n candidate: {\n ...candidate,\n rawStatus: candidate.status,\n diagnostics: sourceDiagnostics(candidate.output),\n },\n repository,\n };\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n};\n\ntype RunTypecheckParityOptions = {\n repo: string;\n policy: unknown;\n bun?: string;\n projects?: readonly string[];\n};\nexport const runTypecheckParity = async ({\n repo,\n policy,\n bun = process.versions.bun ? process.execPath : \"bun\",\n projects,\n}: RunTypecheckParityOptions) => {\n await assertUnshadowedCheck(repo);\n assertBunVersion(bun, policy);\n const compiler = await resolveCompiler(repo, policy);\n const graphs = discoverProjectGraphs({ repo, compiler, projects });\n const results = [];\n for (const graph of graphs)\n results.push(await runConfigParity({ repo, compiler, bun, graph }));\n return results.every((passed) => passed);\n};\n\nconst runConfigParity = async ({\n repo,\n compiler,\n bun,\n graph,\n}: CompareRepositoryArgs) => {\n const { groups } = graph;\n const { baseline, candidate, repository } = await compareRepository({\n repo,\n compiler,\n bun,\n graph,\n });\n console.log(\"Class | TypeScript diagnostics | Bun diagnostics | Result\");\n console.log(\n `repository | ${baseline.diagnostics.join(\",\")} | ${candidate.diagnostics.join(\",\")} | ${repository.passed ? \"PASS\" : \"FAIL\"}`,\n );\n console.log(\n `repository tsc: wall=${baseline.wall.toFixed(3)}s maxRSS=${baseline.maxRssKiB}KiB exit=${baseline.rawStatus}`,\n );\n console.log(\n `repository bun: wall=${candidate.wall.toFixed(3)}s maxRSS=${candidate.maxRssKiB}KiB exit=${candidate.rawStatus}`,\n );\n for (const diagnostic of repository.configurationDiagnostics)\n console.error(`FAIL: invalid repository configuration: ${diagnostic}`);\n const scratch = await mkdtemp(join(tmpdir(), \"typecheck-parity-\"));\n const groupResults = [];\n try {\n for (const [index, group] of groups.entries()) {\n console.log(\n `Config group ${index + 1}: ${relative(repo, group.path)} (${group.projects.length} projects)`,\n );\n const results = [];\n let tscWall = 0;\n let bunWall = 0;\n let tscRss = 0;\n let bunRss = 0;\n const contexts = await temporaryProjectTree({\n scratch: join(scratch, `config-${index + 1}`),\n projects: [group.path],\n });\n const context = contexts.get(group.path);\n if (context === undefined)\n throw new Error(`Missing temporary fixture context: ${group.path}`);\n const groupFolder = context.folder;\n const compilerOptions = fixtureCompilerOptions({\n compilerOptions: group.compilerOptions,\n configPath: group.path,\n });\n await writeFile(\n join(groupFolder, \"package.json\"),\n JSON.stringify(\n group.packageContext ?? fixturePackageContext(group.path),\n ),\n );\n for (const fixture of fixtures) {\n const inputs = fixtureInputs({\n files: Object.keys(fixture.files),\n compilerOptions,\n });\n if (inputs.status === \"inapplicable\") {\n console.log(\n `${fixture.name} (inactive under this config: ${inputs.reason}) | | | INACTIVE`,\n );\n continue;\n }\n const folder = join(groupFolder, fixture.name);\n await mkdir(folder);\n await writeFile(\n join(folder, \"tsconfig.json\"),\n JSON.stringify({\n compilerOptions,\n files: inputs.files,\n include: [],\n exclude: [],\n }),\n );\n for (const [name, content] of Object.entries(fixture.files))\n await writeFile(join(folder, name), content);\n const tsc = timedCommand({\n command: process.execPath,\n args: [compiler, \"--noEmit\", \"--pretty\", \"false\", \"-p\", folder],\n repo: folder,\n });\n const checked = timedCommand({\n command: bun,\n args: [...bunCheckArgs(folder), \"--threads=1\"],\n repo: folder,\n });\n const result = fixtureParity({\n seedFiles: inputs.files,\n expected: fixture.codes,\n match: fixture.anyCode ? \"any\" : \"all\",\n repo: folder,\n baseline: {\n ...tsc,\n status: diagnosticExitStatus({\n status: tsc.status,\n output: tsc.output,\n repo: folder,\n }),\n },\n candidate: checked,\n });\n results.push(result);\n tscWall += tsc.wall;\n bunWall += checked.wall;\n tscRss = Math.max(tscRss, tsc.maxRssKiB);\n bunRss = Math.max(bunRss, checked.maxRssKiB);\n if (result.configurationDiagnostics.length > 0) {\n console.error(\n `FAIL: invalid fixture configuration for ${fixture.name}: ${result.configurationDiagnostics.join(\"; \")}`,\n );\n console.log(\n `${fixture.name} | configuration error | configuration error | FAIL`,\n );\n continue;\n }\n let outcome = \"INACTIVE\";\n if (result.active) outcome = result.passed ? \"PASS\" : \"FAIL\";\n console.log(\n `${fixture.name}${result.active ? \"\" : \" (inactive under this config)\"} | ${result.tscCodes.join(\",\")} | ${result.bunCodes.join(\",\")} | ${outcome}`,\n );\n if (!result.active && !result.passed)\n console.error(\n `FAIL: diagnostic comparison differs for inactive class ${fixture.name}: TypeScript exit=${tsc.status}, Bun exit=${checked.status}; missing=${result.identityMissing.join(\",\")}; extra=${result.identityExtra.join(\",\")}`,\n );\n if (result.active && result.bunCodes.length === 0) {\n console.error(\n `FAIL: Bun returned zero diagnostics for active class ${fixture.name} (exit ${checked.status})`,\n );\n if (\n checked.maxRssKiB <= NO_WORK_MAX_RSS_KIB &&\n checked.wall <= NO_WORK_MAX_WALL_SECONDS\n )\n console.error(\n `Bun measured little checker work: wall=${checked.wall.toFixed(3)}s maxRSS=${checked.maxRssKiB}KiB; verify the checker invocation`,\n );\n }\n }\n console.log(\n `fixtures tsc: wall=${tscWall.toFixed(3)}s maxRSS=${tscRss}KiB`,\n );\n console.log(\n `fixtures bun: wall=${bunWall.toFixed(3)}s maxRSS=${bunRss}KiB`,\n );\n if (!results.some(({ active }) => active))\n console.error(\n `FAIL: zero seeded fixture classes active under config group ${index + 1}`,\n );\n groupResults.push(fixtureRunPassed(results));\n }\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n return repository.passed && groupResults.every((passed) => passed);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typecheck-parity.cjs","names":["resolve","relative","stripVTControlCharacters","readFile","join","require","createRequire","spawnSync","dirname","readFileSync","realpathSync","statSync","performance","mkdir","symlink","basename","mkdtemp","tmpdir","writeFile","rm"],"sources":["../src/typecheck-parity.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { readFileSync, realpathSync, statSync } from \"node:fs\";\nimport {\n mkdir,\n mkdtemp,\n readFile,\n rm,\n symlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { basename, dirname, join, relative, resolve } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { stripVTControlCharacters } from \"node:util\";\n\nexport const fixtures = [\n {\n name: \"module-detection\",\n flags: [\"noUnusedLocals\"],\n files: { \"input.ts\": \"const unused = 1;\" },\n codes: [6133],\n },\n {\n name: \"skip-declaration-check\",\n flags: [\"skipLibCheck\"],\n files: { \"input.d.ts\": \"export declare const value: MissingType;\" },\n codes: [],\n },\n {\n name: \"json-import\",\n flags: [\"resolveJsonModule\"],\n files: {\n \"data.json\": '{ \"name\": \"value\" }',\n \"input.ts\":\n 'import data from \"./data.json\"; export const value: string = data.name;',\n },\n codes: [],\n },\n {\n name: \"interop-import\",\n flags: [\"esModuleInterop\"],\n files: {\n \"types.d.cts\": \"declare const value: string; export = value;\",\n \"input.ts\":\n 'import value from \"./types.cjs\"; export const result: string = value;',\n },\n codes: [],\n },\n {\n name: \"valid-control\",\n flags: [],\n files: { \"input.ts\": 'export const value: string = \"correct\";' },\n codes: [],\n },\n {\n name: \"type-mismatch\",\n flags: [],\n files: { \"input.ts\": 'export const value: number = \"wrong\";' },\n codes: [2322],\n },\n {\n name: \"missing-property\",\n flags: [],\n files: { \"input.ts\": \"export const value: { name: string } = {};\" },\n codes: [2741],\n },\n {\n name: \"strict-null\",\n flags: [\"strictNullChecks\"],\n files: { \"input.ts\": \"export const value: string = null;\" },\n codes: [2322],\n },\n {\n name: \"unchecked-index\",\n flags: [\"noUncheckedIndexedAccess\"],\n files: { \"input.ts\": 'export const value: string = [\"value\"][1];' },\n codes: [2322],\n },\n {\n name: \"unused-local\",\n flags: [\"noUnusedLocals\"],\n files: { \"input.ts\": \"const unused = 1; export {};\" },\n codes: [6133],\n },\n {\n name: \"unused-parameter\",\n flags: [\"noUnusedParameters\"],\n files: { \"input.ts\": \"export const value = (unused: string) => 1;\" },\n codes: [6133],\n },\n {\n name: \"implicit-any\",\n flags: [\"noImplicitAny\"],\n files: { \"input.ts\": \"export const value = (input) => input;\" },\n codes: [7006],\n },\n {\n name: \"missing-import\",\n flags: [],\n files: {\n \"input.ts\": 'import { value } from \"./missing.js\"; export { value };',\n },\n codes: [2307],\n },\n {\n name: \"side-effect-import\",\n flags: [\"noUncheckedSideEffectImports\"],\n files: { \"input.ts\": 'import \"./missing.js\";' },\n codes: [2882],\n },\n {\n name: \"generic-constraint\",\n flags: [],\n files: {\n \"input.ts\":\n \"type Box<T extends string> = { value: T }; export type Value = Box<number>;\",\n },\n codes: [2344],\n },\n {\n name: \"exact-optional\",\n flags: [\"exactOptionalPropertyTypes\"],\n files: {\n \"input.ts\":\n \"export const value: { optional?: string } = { optional: undefined };\",\n },\n codes: [2375],\n },\n {\n name: \"fallthrough\",\n flags: [\"noFallthroughCasesInSwitch\"],\n files: {\n \"input.ts\":\n \"export const run = (value: number) => { switch (value) { case 0: value++; case 1: return value; default: return 0; } };\",\n },\n codes: [7029],\n },\n {\n name: \"implicit-override\",\n flags: [\"noImplicitOverride\"],\n files: {\n \"input.ts\":\n \"class Base { value = 1; } export class Child extends Base { value = 2; }\",\n },\n codes: [4114],\n },\n {\n name: \"implicit-return\",\n flags: [\"noImplicitReturns\"],\n files: {\n \"input.ts\":\n \"export const run = (value: boolean) => { if (value) return 1; };\",\n },\n codes: [7030],\n },\n {\n name: \"unknown-catch\",\n flags: [\"useUnknownInCatchVariables\"],\n files: {\n \"input.ts\":\n \"export const run = () => { try { return 1; } catch (error) { return error.message; } };\",\n },\n codes: [18046],\n },\n {\n name: \"index-property\",\n flags: [\"noPropertyAccessFromIndexSignature\"],\n files: {\n \"input.ts\":\n \"export const run = (value: Record<string, string>) => value.name;\",\n },\n codes: [4111],\n },\n {\n name: \"erasable-syntax\",\n flags: [\"erasableSyntaxOnly\"],\n files: { \"input.ts\": \"export enum Value { First }\" },\n codes: [1294],\n },\n {\n name: \"type-only-import\",\n flags: [\"verbatimModuleSyntax\"],\n files: {\n \"types.ts\": \"export type Value = string;\",\n \"input.ts\":\n 'import { Value } from \"./types.js\"; export const value: Value = \"value\";',\n },\n codes: [1484],\n },\n {\n name: \"checked-javascript\",\n flags: [\"allowJs\", \"checkJs\"],\n files: {\n \"input.js\": '/** @type {number} */\\nexport const value = \"wrong\";',\n },\n codes: [2322],\n },\n {\n name: \"strict-function\",\n flags: [\"strictFunctionTypes\"],\n files: {\n \"input.ts\":\n \"export const value: (input: string | number) => void = (input: string) => { input.toUpperCase(); };\",\n },\n codes: [2322],\n },\n {\n name: \"strict-initialization\",\n flags: [\"strictPropertyInitialization\"],\n files: { \"input.ts\": \"export class Value { name: string; }\" },\n codes: [2564],\n },\n {\n name: \"strict-bind\",\n flags: [\"strictBindCallApply\"],\n files: {\n \"input.ts\":\n \"const value = (input: string) => input; export const result = value.call(undefined, 1);\",\n },\n codes: [2345],\n },\n {\n name: \"implicit-this\",\n flags: [\"noImplicitThis\"],\n files: { \"input.ts\": \"export function value() { return this.name; }\" },\n codes: [2683],\n },\n {\n name: \"strict-iterator\",\n flags: [\"strictBuiltinIteratorReturn\"],\n files: {\n \"input.ts\":\n 'export const value: string = [\"value\"].values().next().value;',\n },\n codes: [2322],\n },\n {\n name: \"always-strict\",\n flags: [\"alwaysStrict\"],\n files: { \"input.ts\": \"export const value = (eval: string) => eval;\" },\n codes: [1215],\n },\n {\n name: \"file-casing\",\n flags: [\"forceConsistentCasingInFileNames\"],\n files: {\n \"named.ts\": 'export const name = \"value\";',\n \"Named.ts\": 'export const name = \"value\";',\n \"input.ts\":\n 'import { name } from \"./named.js\"; import { name as other } from \"./Named.js\"; export const value = name + other;',\n },\n codes: [1149, 1261],\n anyCode: true,\n },\n];\nexport const diagnosticCodes = (text: string) =>\n [\n ...new Set(\n [\n ...text.matchAll(\n /(?:\\b(?:error|warning)\\s+(?:TS)?|<error\\b[^>]*\\bcode=\"TS)(\\d{4,5})(?=:|\")/g,\n ),\n ].map((match) => Number(match.at(1))),\n ),\n ].sort((a, b) => a - b);\n\ntype DiagnosticCheckResult = { status: number | null; output: string };\ntype DiagnosticParityOptions = {\n expected: readonly number[];\n match: \"all\" | \"any\";\n baseline: DiagnosticCheckResult;\n candidate: DiagnosticCheckResult;\n repo?: string;\n};\nexport const diagnosticParity = ({\n expected,\n match,\n baseline,\n candidate,\n}: DiagnosticParityOptions) => {\n const tscCodes = diagnosticCodes(baseline.output);\n const bunCodes = diagnosticCodes(candidate.output);\n const seeded =\n match === \"any\"\n ? expected.some((code) => tscCodes.includes(code))\n : expected.every((code) => tscCodes.includes(code));\n const missing = tscCodes.filter((code) => !bunCodes.includes(code));\n const extra = bunCodes.filter((code) => !tscCodes.includes(code));\n const exitsMatch =\n expected.length === 0\n ? baseline.status === 0 &&\n candidate.status === 0 &&\n tscCodes.length === 0 &&\n bunCodes.length === 0\n : baseline.status !== null &&\n baseline.status !== 0 &&\n candidate.status !== null &&\n candidate.status !== 0;\n return {\n tscCodes,\n bunCodes,\n missing,\n extra,\n passed:\n seeded &&\n exitsMatch &&\n baseline.status === candidate.status &&\n missing.length === 0 &&\n extra.length === 0,\n };\n};\n\nconst configurationDiagnostics = (output: string, repo: string) =>\n diagnosticSet(output, repo).filter(\n (diagnostic) =>\n /^(?:<config>:0:|.*\\.json:[0-9]+:)(?:[56][0-9]{3}|1800[23]|2688)(?::|$)/.test(\n diagnostic,\n ) || /:1800[23](?::|$)/.test(diagnostic),\n );\n\ntype FixtureParityOptions = DiagnosticParityOptions & {\n seedFiles: readonly string[];\n};\nexport const fixtureParity = (options: FixtureParityOptions) => {\n const result = diagnosticParity(options);\n const { baseline, candidate, expected, match } = options;\n const identityParity = compareDiagnosticSets(\n {\n status: baseline.status,\n diagnostics: diagnosticSet(\n baseline.output,\n options.repo ?? process.cwd(),\n ),\n },\n {\n status: candidate.status,\n diagnostics: diagnosticSet(\n candidate.output,\n options.repo ?? process.cwd(),\n ),\n },\n );\n const configDiagnostics = [\n ...configurationDiagnostics(\n baseline.output,\n options.repo ?? process.cwd(),\n ).map((diagnostic) => `TypeScript: ${diagnostic}`),\n ...configurationDiagnostics(\n candidate.output,\n options.repo ?? process.cwd(),\n ).map((diagnostic) => `Bun: ${diagnostic}`),\n ];\n const seedFiles = new Set(\n options.seedFiles.map((file) =>\n resolve(options.repo ?? process.cwd(), file),\n ),\n );\n const seededCodes = new Set(\n diagnosticSet(baseline.output, options.repo ?? process.cwd()).flatMap(\n (diagnostic) => {\n const diagnosticMatch = /^(.*):[0-9]+:([0-9]+)$/.exec(diagnostic);\n const file = diagnosticMatch?.at(1);\n const code = diagnosticMatch?.at(2);\n return file !== undefined &&\n code !== undefined &&\n seedFiles.has(resolve(options.repo ?? process.cwd(), file))\n ? [Number(code)]\n : [];\n },\n ),\n );\n const active =\n expected.length > 0 &&\n (match === \"any\"\n ? expected.some((code) => seededCodes.has(code))\n : expected.every((code) => seededCodes.has(code)));\n const validExits =\n baseline.status !== null &&\n candidate.status !== null &&\n (result.tscCodes.length === 0\n ? baseline.status === 0\n : baseline.status !== 0) &&\n (result.bunCodes.length === 0\n ? candidate.status === 0\n : candidate.status !== 0);\n return {\n ...result,\n active,\n configurationDiagnostics: configDiagnostics,\n identityMissing: identityParity.missing,\n identityExtra: identityParity.extra,\n passed:\n configDiagnostics.length === 0 &&\n identityParity.passed &&\n validExits &&\n baseline.status === candidate.status &&\n result.missing.length === 0 &&\n result.extra.length === 0,\n };\n};\n\nexport const fixtureRunPassed = (\n results: { active: boolean; passed: boolean }[],\n) =>\n results.some(({ active }) => active) && results.every(({ passed }) => passed);\n\nconst diagnosticLocation = (file: string, repo: string) => {\n const normalized = file.replaceAll(\"\\\\\", \"/\");\n const bundled = /^bundled:\\/\\/\\/libs\\/(lib\\.[^/]+\\.d\\.ts)$/.exec(normalized);\n const installed =\n /(?:^|\\/)node_modules\\/(?:typescript|@typescript\\/(?:native|typescript-[^/]+))\\/(?:.*\\/)?(lib\\.[^/]+\\.d\\.ts)$/.exec(\n normalized,\n );\n const library = bundled?.at(1) ?? installed?.at(1);\n return library === undefined\n ? relative(repo, resolve(repo, file)).replaceAll(\"\\\\\", \"/\")\n : `<lib>/${library}`;\n};\nconst globalDiagnosticKey = (code: string, message: string) =>\n `<config>:0:${code}:${message.trim().replaceAll(/\\s+/g, \" \")}`;\n\nexport const diagnosticSet = (output: string, repo: string) => {\n const clean = stripVTControlCharacters(output);\n const diagnostics = new Set<string>();\n for (const block of clean.matchAll(/<error\\b([^>]*)>([\\s\\S]*?)<\\/error>/g)) {\n const attributes = new Map(\n [...(block.at(1) ?? \"\").matchAll(/(\\w+)=\"([^\"]*)\"/g)].map((match) => [\n match.at(1),\n match.at(2),\n ]),\n );\n const file = attributes.get(\"file\");\n const row = attributes.get(\"line\");\n const code = attributes.get(\"code\");\n if (code === undefined || !/^TS\\d+$/.test(code)) continue;\n if (file !== undefined && row !== undefined && row !== \"0\")\n diagnostics.add(\n `${diagnosticLocation(file, repo)}:${row}:${code.slice(2)}`,\n );\n else {\n const message =\n (block.at(2) ?? \"\").split(/<(?:source|related)\\b/).at(0) ?? \"\";\n diagnostics.add(globalDiagnosticKey(code.slice(2), message));\n }\n }\n for (const rawLine of clean.split(\"\\n\")) {\n const line = rawLine.replace(\n /^(?!(?:error|warning) TS\\d+:)(?:@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]* [a-zA-Z0-9_.:-]+: /,\n \"\",\n );\n if (line.startsWith(\"<error \")) continue;\n const match =\n /^(.*?)\\((\\d+),\\d+\\):\\s*(?:error|warning) TS(\\d+)/.exec(line) ??\n /^(.*?):(\\d+):\\d+:\\s*(?:error|warning) (?:TS)?(\\d+)/.exec(line);\n if (match) {\n const [, file = \"\", row = \"\", code = \"\"] = match;\n diagnostics.add(`${diagnosticLocation(file, repo)}:${row}:${code}`);\n } else {\n const global = /^(?:error|warning) TS(\\d+):\\s*(.*)/.exec(line);\n if (global)\n diagnostics.add(\n globalDiagnosticKey(global.at(1) ?? \"\", global.at(2) ?? \"\"),\n );\n }\n }\n return [...diagnostics].sort();\n};\n\ntype DiagnosticSetResult = { status: number | null; diagnostics: string[] };\nexport const compareDiagnosticSets = (\n baseline: DiagnosticSetResult,\n candidate: DiagnosticSetResult,\n) => {\n const missing = baseline.diagnostics.filter(\n (item) => !candidate.diagnostics.includes(item),\n );\n const extra = candidate.diagnostics.filter(\n (item) => !baseline.diagnostics.includes(item),\n );\n const valid = (result: DiagnosticSetResult) =>\n result.status !== null &&\n (result.diagnostics.length === 0\n ? result.status === 0\n : result.status !== 0);\n return {\n missing,\n extra,\n passed:\n valid(baseline) &&\n valid(candidate) &&\n baseline.status === candidate.status &&\n missing.length === 0 &&\n extra.length === 0,\n };\n};\n\nexport const assertUnshadowedCheck = async (repo: string) => {\n const manifest: unknown = JSON.parse(\n await readFile(join(repo, \"package.json\"), \"utf8\"),\n );\n if (typeof manifest !== \"object\" || manifest === null)\n throw new Error(\"Invalid repository package.json\");\n if (\n \"scripts\" in manifest &&\n typeof manifest.scripts === \"object\" &&\n manifest.scripts !== null &&\n \"check\" in manifest.scripts\n )\n throw new Error(\n 'Repository package.json must not define a \"check\" script: it shadows Bun typechecking; rename that script before running parity',\n );\n};\n\nexport const resolveCompiler = async (repo: string, policy: unknown) => {\n if (\n typeof policy !== \"object\" ||\n policy === null ||\n !(\"typescriptInstallLayouts\" in policy) ||\n !Array.isArray(policy.typescriptInstallLayouts)\n )\n throw new Error(\"toolchain.json must define typescriptInstallLayouts\");\n const manifest: unknown = JSON.parse(\n await readFile(join(repo, \"package.json\"), \"utf8\"),\n );\n if (typeof manifest !== \"object\" || manifest === null)\n throw new Error(\"Invalid repository package.json\");\n const dependencies = new Map<string, unknown>();\n for (const key of [\"dependencies\", \"devDependencies\"]) {\n if (!(key in manifest)) continue;\n const section = Reflect.get(manifest, key);\n if (typeof section === \"object\" && section !== null)\n for (const [name, specifier] of Object.entries(section))\n dependencies.set(name, specifier);\n }\n const require = createRequire(join(repo, \"package.json\"));\n // Prefer the explicit split compiler over its compatibility installation.\n for (const layout of [...policy.typescriptInstallLayouts].reverse()) {\n if (\n typeof layout !== \"object\" ||\n layout === null ||\n !(\"compilerPackage\" in layout) ||\n typeof layout.compilerPackage !== \"string\"\n )\n throw new Error(\"Invalid TypeScript install layout\");\n if (!dependencies.has(layout.compilerPackage)) continue;\n const packagePath = require.resolve(\n `${layout.compilerPackage}/package.json`,\n );\n const installed: unknown = JSON.parse(await readFile(packagePath, \"utf8\"));\n if (\n typeof installed !== \"object\" ||\n installed === null ||\n !(\"bin\" in installed) ||\n typeof installed.bin !== \"object\" ||\n installed.bin === null ||\n !(\"tsc\" in installed.bin) ||\n typeof installed.bin.tsc !== \"string\"\n )\n throw new Error(`${layout.compilerPackage} must expose a tsc binary`);\n if (\n !(\"compilerSpecifier\" in layout) ||\n typeof layout.compilerSpecifier !== \"string\"\n )\n throw new Error(\n \"TypeScript install layout must define compilerSpecifier\",\n );\n const expectedVersion = layout.compilerSpecifier.replace(\n /^npm:typescript@/,\n \"\",\n );\n if (!(\"version\" in installed) || installed.version !== expectedVersion)\n throw new Error(\n `${layout.compilerPackage} must install TypeScript ${expectedVersion}`,\n );\n return resolve(packagePath, \"..\", installed.bin.tsc);\n }\n throw new Error(\n \"Repository must declare a compiler from typescriptInstallLayouts\",\n );\n};\n\nexport const assertBunVersion = (bun: string, policy: unknown) => {\n if (\n typeof policy !== \"object\" ||\n policy === null ||\n !(\"bun\" in policy) ||\n typeof policy.bun !== \"string\"\n )\n throw new Error(\"toolchain.json must define bun\");\n const result = spawnSync(bun, [\"--version\"], { encoding: \"utf8\" });\n if (result.error) throw result.error;\n const installed = result.stdout.trim();\n if (result.status !== 0 || installed !== policy.bun)\n throw new Error(\n `Bun must be ${policy.bun}; selected runtime reports ${installed || \"no version\"}`,\n );\n};\n\nexport const bunCheckArgs = (project?: string, build = false) => [\n \"check\",\n \"--no-pretty\",\n \"--all\",\n ...(build ? [\"--build\"] : []),\n ...(project === undefined ? [] : [`--project=${project}`]),\n];\n\nconst canonicalOptions = (value: unknown): string => {\n if (Array.isArray(value)) return `[${value.map(canonicalOptions).join(\",\")}]`;\n if (typeof value === \"object\" && value !== null)\n return `{${Object.keys(value)\n .sort()\n .map(\n (key) =>\n `${JSON.stringify(key)}:${canonicalOptions(Reflect.get(value, key))}`,\n )\n .join(\",\")}}`;\n if (\n value !== null &&\n typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"\n )\n throw new Error(\"Invalid effective compiler option\");\n return JSON.stringify(value);\n};\n\n// Emit and build settings do not belong in diagnostic-only fixture projects.\nconst EMIT_ONLY_OPTIONS = new Set([\n \"composite\",\n \"declaration\",\n \"declarationDir\",\n \"declarationMap\",\n \"emitDeclarationOnly\",\n \"outDir\",\n \"outFile\",\n \"rootDir\",\n \"sourceMap\",\n \"inlineSourceMap\",\n \"inlineSources\",\n \"incremental\",\n \"tsBuildInfoFile\",\n \"noEmitOnError\",\n \"importHelpers\",\n \"noEmitHelpers\",\n \"emitBOM\",\n \"mapRoot\",\n \"sourceRoot\",\n \"newLine\",\n \"preserveConstEnums\",\n \"removeComments\",\n \"stripInternal\",\n \"downlevelIteration\",\n \"isolatedDeclarations\",\n \"noEmit\",\n]);\n\ntype FixtureCompilerOptionsArgs = {\n compilerOptions: unknown;\n configPath: string;\n};\nconst resolvedCompilerOptions = ({\n compilerOptions,\n configPath,\n}: FixtureCompilerOptionsArgs) => {\n if (\n typeof compilerOptions !== \"object\" ||\n compilerOptions === null ||\n Array.isArray(compilerOptions)\n )\n throw new Error(`Invalid compiler options: ${configPath}`);\n const options: Record<string, unknown> = Object.fromEntries(\n Object.entries(compilerOptions),\n );\n const directory = dirname(configPath);\n const rootDir = options[\"rootDir\"];\n if (rootDir !== undefined && typeof rootDir !== \"string\")\n throw new Error(`Invalid rootDir: ${configPath}`);\n if (typeof rootDir === \"string\")\n options[\"rootDir\"] = resolve(directory, rootDir);\n let resolutionDirectory = directory;\n const absolutePaths = (value: unknown) => {\n if (\n !Array.isArray(value) ||\n !value.every((entry: unknown) => typeof entry === \"string\")\n )\n throw new Error(`Invalid compiler path option: ${configPath}`);\n return value.map((entry) => resolve(resolutionDirectory, entry));\n };\n for (const name of [\"rootDirs\", \"typeRoots\"])\n if (name in options) options[name] = absolutePaths(options[name]);\n if (\"baseUrl\" in options) {\n const baseUrl = options[\"baseUrl\"];\n if (typeof baseUrl !== \"string\")\n throw new Error(`Invalid baseUrl: ${configPath}`);\n resolutionDirectory = resolve(directory, baseUrl);\n options[\"baseUrl\"] = resolutionDirectory;\n }\n if (\"paths\" in options) {\n const paths = options[\"paths\"];\n if (typeof paths !== \"object\" || paths === null || Array.isArray(paths))\n throw new Error(`Invalid paths: ${configPath}`);\n options[\"paths\"] = Object.fromEntries(\n Object.entries(paths).map(([key, value]) => [key, absolutePaths(value)]),\n );\n }\n return options;\n};\n\nexport const fixtureCompilerOptions = (args: FixtureCompilerOptionsArgs) => {\n const options = Object.fromEntries(\n Object.entries(resolvedCompilerOptions(args)).filter(\n ([name]) => !EMIT_ONLY_OPTIONS.has(name),\n ),\n );\n options[\"noEmit\"] = true;\n return options;\n};\n\ntype FixtureInputOptions = {\n files: readonly string[];\n compilerOptions: Record<string, unknown>;\n};\nexport const fixtureInputs = ({\n files,\n compilerOptions,\n}: FixtureInputOptions) => {\n const inputs = files.filter((file) => /\\.(?:[cm]?[jt]sx?|json)$/.test(file));\n for (const input of inputs) {\n if (/\\.[cm]?jsx?$/.test(input) && compilerOptions[\"allowJs\"] !== true)\n return {\n status: \"inapplicable\",\n reason: `${input} requires allowJs`,\n } as const;\n if (\n input.endsWith(\".json\") &&\n compilerOptions[\"resolveJsonModule\"] !== true\n )\n return {\n status: \"inapplicable\",\n reason: `${input} requires resolveJsonModule`,\n } as const;\n }\n return { status: \"applicable\", files: inputs } as const;\n};\n\nexport const fixturePackageContext = (configPath: string) => {\n for (let folder = dirname(configPath); ; folder = dirname(folder)) {\n try {\n const manifest: unknown = JSON.parse(\n readFileSync(join(folder, \"package.json\"), \"utf8\"),\n );\n if (typeof manifest !== \"object\" || manifest === null)\n throw new Error(`Invalid package.json: ${folder}`);\n if (!(\"type\" in manifest)) return {};\n if (manifest.type !== \"module\" && manifest.type !== \"commonjs\")\n throw new Error(`Invalid package type: ${folder}`);\n return { type: manifest.type };\n } catch (error) {\n if (\n !(error instanceof Error) ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n )\n throw error;\n }\n if (dirname(folder) === folder) return {};\n }\n};\n\ntype CompilerConfig = {\n path: string;\n compilerOptions: unknown;\n packageContext?: unknown;\n};\nexport const groupCompilerConfigs = (configs: CompilerConfig[]) => {\n const groups = new Map<\n string,\n {\n path: string;\n projects: string[];\n compilerOptions: unknown;\n packageContext?: unknown;\n }\n >();\n for (const config of configs) {\n const compilerOptions = fixtureCompilerOptions({\n compilerOptions: config.compilerOptions,\n configPath: config.path,\n });\n const key = canonicalOptions({\n compilerOptions,\n resolutionContext:\n \"typeRoots\" in compilerOptions ? null : dirname(config.path),\n packageContext: config.packageContext ?? {},\n });\n const existing = groups.get(key);\n if (existing) existing.projects.push(config.path);\n else\n groups.set(key, {\n path: config.path,\n projects: [config.path],\n compilerOptions: config.compilerOptions,\n ...(config.packageContext === undefined\n ? {}\n : { packageContext: config.packageContext }),\n });\n }\n return [...groups.values()];\n};\n\ntype DiscoverConfigGroupsOptions = {\n repo: string;\n compiler: string;\n project?: string;\n};\nexport const discoverConfigGroups = ({\n repo,\n compiler,\n project,\n}: DiscoverConfigGroupsOptions) => {\n const configs: CompilerConfig[] = [];\n const visited = new Set<string>();\n const projects: {\n path: string;\n compilerOptions: unknown;\n files: string[];\n references: string[];\n resolvedReferences: Record<string, unknown>[];\n }[] = [];\n let build = false;\n const visit = (inputPath: string) => {\n const path = realpathSync(\n statSync(inputPath).isDirectory()\n ? join(inputPath, \"tsconfig.json\")\n : inputPath,\n );\n readFileSync(path, \"utf8\");\n if (visited.has(path)) return;\n visited.add(path);\n const result = spawnSync(\n process.execPath,\n [compiler, \"--showConfig\", \"--project\", path],\n { cwd: repo, encoding: \"utf8\", maxBuffer: 64 * 1024 * 1024 },\n );\n if (result.error) throw result.error;\n if (result.status !== 0) throw new Error(result.stdout + result.stderr);\n const config: unknown = JSON.parse(result.stdout);\n if (typeof config !== \"object\" || config === null)\n throw new Error(`Invalid resolved config: ${path}`);\n const references: unknown[] =\n \"references\" in config && Array.isArray(config.references)\n ? config.references\n : [];\n build ||= project === undefined && references.length > 0;\n const compilerOptions =\n \"compilerOptions\" in config ? config.compilerOptions : {};\n if (\n typeof compilerOptions !== \"object\" ||\n compilerOptions === null ||\n Array.isArray(compilerOptions)\n )\n throw new Error(`Invalid compiler options: ${path}`);\n const rawFiles: unknown = \"files\" in config ? config.files : [];\n if (!Array.isArray(rawFiles))\n throw new Error(`Invalid project files: ${path}`);\n const files = rawFiles.map((file: unknown) => {\n if (typeof file !== \"string\")\n throw new Error(`Invalid project file: ${path}`);\n return resolve(dirname(path), file);\n });\n if (\n files.length === 0 &&\n (project !== undefined || references.length === 0)\n )\n throw new Error(`Project resolves to zero input files: ${path}`);\n const referencePaths: string[] = [];\n const resolvedReferences: Record<string, unknown>[] = [];\n projects.push({\n path,\n compilerOptions,\n files,\n references: referencePaths,\n resolvedReferences,\n });\n if (files.length > 0 || references.length === 0)\n configs.push({\n path,\n compilerOptions,\n packageContext: fixturePackageContext(path),\n });\n for (const reference of references) {\n if (\n typeof reference !== \"object\" ||\n reference === null ||\n !(\"path\" in reference) ||\n typeof reference.path !== \"string\"\n )\n throw new Error(`Invalid project reference: ${path}`);\n const referencedProject = resolve(dirname(path), reference.path);\n const referencePath = realpathSync(\n statSync(referencedProject).isDirectory()\n ? join(referencedProject, \"tsconfig.json\")\n : referencedProject,\n );\n referencePaths.push(referencePath);\n resolvedReferences.push({ ...reference, path: referencePath });\n if (project === undefined) visit(referencePath);\n }\n };\n const selected = resolve(repo, project ?? \"tsconfig.json\");\n const root = realpathSync(\n statSync(selected).isDirectory()\n ? join(selected, \"tsconfig.json\")\n : selected,\n );\n visit(root);\n const groups = groupCompilerConfigs(configs);\n if (groups.length === 0)\n throw new Error(\"No consumer compiler configurations to compare\");\n return { build, groups, projects, root };\n};\n\ntype DiscoverProjectGraphsOptions = {\n repo: string;\n compiler: string;\n projects?: readonly string[] | undefined;\n};\nexport const discoverProjectGraphs = ({\n repo,\n compiler,\n projects,\n}: DiscoverProjectGraphsOptions) => {\n if (projects === undefined) return [discoverConfigGroups({ repo, compiler })];\n if (projects.length === 0) throw new Error(\"Select at least one project\");\n const graphs = new Map<string, ReturnType<typeof discoverConfigGroups>>();\n for (const project of projects) {\n const graph = discoverConfigGroups({ repo, compiler, project });\n if (!graphs.has(graph.root)) graphs.set(graph.root, graph);\n }\n return [...graphs.values()];\n};\n\ntype TimedCommandOptions = { command: string; args: string[]; repo: string };\nconst timedCommand = ({ command, args, repo }: TimedCommandOptions) => {\n const started = performance.now();\n const timerFlag = process.platform === \"darwin\" ? \"-l\" : \"-v\";\n const result = spawnSync(\"/usr/bin/time\", [timerFlag, command, ...args], {\n cwd: repo,\n encoding: \"utf8\",\n maxBuffer: 64 * 1024 * 1024,\n });\n if (result.error) throw result.error;\n const rss =\n process.platform === \"darwin\"\n ? /([0-9]+)\\s+maximum resident set size/.exec(result.stderr)\n : /Maximum resident set size \\(kbytes\\):\\s*([0-9]+)/.exec(result.stderr);\n if (!rss) throw new Error(\"Cannot measure maximum RSS with /usr/bin/time\");\n return {\n status: result.status,\n output: result.stdout + result.stderr,\n wall: (performance.now() - started) / 1000,\n maxRssKiB: Number(rss[1]) / (process.platform === \"darwin\" ? 1024 : 1),\n };\n};\n\nconst NO_WORK_MAX_RSS_KIB = 16 * 1024;\nconst NO_WORK_MAX_WALL_SECONDS = 0.25;\n\ntype SourceDiagnosticSetOptions = {\n output: string;\n repo: string;\n scratch: string;\n configPaths: readonly string[];\n};\nexport const sourceDiagnosticSet = ({\n output,\n repo,\n scratch,\n configPaths,\n}: SourceDiagnosticSetOptions) => {\n const configs = new Set(configPaths.map((path) => resolve(path)));\n const invalid = new Set(configurationDiagnostics(output, repo));\n return diagnosticSet(output, repo).filter((diagnostic) => {\n if (invalid.has(diagnostic)) return false;\n if (diagnostic.startsWith(\"<config>:\")) return true;\n const file = /^(.*):[0-9]+:[0-9]+$/.exec(diagnostic)?.at(1);\n if (file === undefined) return false;\n const path = resolve(repo, file);\n return (\n !configs.has(path) && path !== scratch && !path.startsWith(scratch + \"/\")\n );\n });\n};\n\ntype DiagnosticExitStatusOptions = {\n status: number | null;\n output: string;\n repo: string;\n};\nexport const diagnosticExitStatus = ({\n status,\n output,\n repo,\n}: DiagnosticExitStatusOptions) =>\n status === 2 &&\n configurationDiagnostics(output, repo).length === 0 &&\n diagnosticSet(output, repo).some(\n (diagnostic) => !diagnostic.startsWith(\"<config>:\"),\n )\n ? 1\n : status;\n\ntype CompareRepositoryArgs = {\n repo: string;\n compiler: string;\n bun: string;\n graph: ReturnType<typeof discoverConfigGroups>;\n};\n\ntype RepositoryDiagnosticComparisonOptions = {\n baseline: { status: number | null; output: string };\n candidate: { status: number | null; output: string };\n repo: string;\n scratch: string;\n configPaths: readonly string[];\n};\nexport const repositoryDiagnosticComparison = ({\n baseline,\n candidate,\n repo,\n scratch,\n configPaths,\n}: RepositoryDiagnosticComparisonOptions) => {\n const configs = new Set(configPaths.map((path) => resolve(path)));\n const configurationErrors = (output: string) => [\n ...new Set([\n ...configurationDiagnostics(output, repo),\n ...diagnosticSet(output, repo).filter((diagnostic) => {\n const file = /^(.*):[0-9]+:[0-9]+$/.exec(diagnostic)?.at(1);\n return file !== undefined && configs.has(resolve(repo, file));\n }),\n ]),\n ];\n const configurationErrorsFound = [\n ...configurationErrors(baseline.output).map(\n (diagnostic) => `TypeScript: ${diagnostic}`,\n ),\n ...configurationErrors(candidate.output).map(\n (diagnostic) => `Bun: ${diagnostic}`,\n ),\n ];\n const diagnostics = (output: string) =>\n sourceDiagnosticSet({ output, repo, scratch, configPaths });\n const comparison = compareDiagnosticSets(\n { status: baseline.status, diagnostics: diagnostics(baseline.output) },\n { status: candidate.status, diagnostics: diagnostics(candidate.output) },\n );\n return {\n ...comparison,\n passed: configurationErrorsFound.length === 0 && comparison.passed,\n configurationDiagnostics: configurationErrorsFound,\n };\n};\n\ntype TemporaryProjectTreeOptions = {\n scratch: string;\n projects: readonly string[];\n};\nconst temporaryProjectTree = async ({\n scratch,\n projects,\n}: TemporaryProjectTreeOptions) => {\n const contexts = new Map<\n string,\n { path: string; folder: string; outputFolder: string }\n >();\n const linkedFolders = new Set<string>();\n for (const project of projects) {\n const path = join(scratch, \"projects\", relative(resolve(\"/\"), project));\n const folder = dirname(path);\n await mkdir(folder, { recursive: true });\n for (let original = dirname(project); ; original = dirname(original)) {\n if (!linkedFolders.has(original)) {\n linkedFolders.add(original);\n const modules = join(original, \"node_modules\");\n try {\n if (statSync(modules).isDirectory()) {\n const destination = join(\n scratch,\n \"projects\",\n relative(resolve(\"/\"), original),\n );\n await mkdir(destination, { recursive: true });\n await symlink(modules, join(destination, \"node_modules\"), \"dir\");\n }\n } catch (error) {\n if (\n !(error instanceof Error) ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n )\n throw error;\n }\n }\n if (dirname(original) === original) break;\n }\n contexts.set(project, {\n path,\n folder,\n outputFolder: join(folder, `${basename(path)}.parity-output`),\n });\n }\n return contexts;\n};\n\nexport const compareRepository = async ({\n repo,\n compiler,\n bun,\n graph,\n}: CompareRepositoryArgs) => {\n const scratch = await mkdtemp(join(tmpdir(), \"parity-repository-\"));\n try {\n const contexts = await temporaryProjectTree({\n scratch,\n projects: graph.projects.map(({ path }) => path),\n });\n const configPaths = new Map(\n [...contexts].map(([original, context]) => [original, context.path]),\n );\n const requiredOutputs = new Set(\n graph.projects.flatMap(({ references }) => references),\n );\n for (const project of graph.projects) {\n const context = contexts.get(project.path);\n if (context === undefined)\n throw new Error(`Missing temporary project: ${project.path}`);\n const { path: configPath, outputFolder } = context;\n const options = resolvedCompilerOptions({\n configPath: project.path,\n compilerOptions: project.compilerOptions,\n });\n const declarationsRequired =\n graph.build &&\n requiredOutputs.has(project.path) &&\n options[\"composite\"] === true;\n options[\"noEmit\"] =\n !graph.build || (options[\"noEmit\"] === true && !declarationsRequired);\n const relocatesOutput =\n options[\"noEmit\"] !== true ||\n \"outDir\" in options ||\n \"declarationDir\" in options;\n // Explicit source/output directories enforce containment in noEmit checks.\n if (!(\"rootDir\" in options) && relocatesOutput)\n options[\"rootDir\"] = dirname(project.path);\n if (relocatesOutput) options[\"outDir\"] = join(outputFolder, \"output\");\n const emitsDeclarations =\n options[\"declaration\"] === true ||\n (options[\"composite\"] === true && options[\"declaration\"] !== false);\n if ((graph.build && emitsDeclarations) || \"declarationDir\" in options)\n options[\"declarationDir\"] = join(outputFolder, \"declarations\");\n if (\n graph.build ||\n options[\"incremental\"] === true ||\n options[\"composite\"] === true\n )\n options[\"tsBuildInfoFile\"] = join(outputFolder, \"project.tsbuildinfo\");\n if (graph.build) {\n options[\"declarationMap\"] = false;\n if (emitsDeclarations) options[\"emitDeclarationOnly\"] = true;\n options[\"noEmitOnError\"] = false;\n }\n if (\"outFile\" in options)\n options[\"outFile\"] = join(outputFolder, \"bundle.js\");\n await writeFile(\n configPath,\n JSON.stringify({\n compilerOptions: options,\n files: project.files,\n include: [],\n references: graph.build\n ? project.references.map((path) => {\n const temporary = configPaths.get(path);\n if (temporary === undefined)\n throw new Error(\n `Missing referenced temporary project: ${path}`,\n );\n return { path: temporary };\n })\n : project.resolvedReferences,\n }),\n );\n }\n const root = configPaths.get(graph.root);\n if (root === undefined) throw new Error(\"Missing temporary root config\");\n const baselineRaw = timedCommand({\n command: process.execPath,\n args: [\n compiler,\n ...(graph.build\n ? [\"--build\", \"--force\", root]\n : [\"--noEmit\", \"--project\", root]),\n \"--pretty\",\n \"false\",\n ],\n repo,\n });\n const candidate = timedCommand({\n command: bun,\n args: bunCheckArgs(root, graph.build),\n repo,\n });\n const sourceDiagnostics = (output: string) =>\n sourceDiagnosticSet({\n output,\n repo,\n scratch,\n configPaths: graph.projects.map(({ path }) => path),\n });\n const baselineDiagnostics = sourceDiagnostics(baselineRaw.output);\n // TypeScript can report source diagnostics as 2 even for declaration-only noEmit inputs.\n const baseline = {\n ...baselineRaw,\n rawStatus: baselineRaw.status,\n status: diagnosticExitStatus({\n status: baselineRaw.status,\n output: baselineRaw.output,\n repo,\n }),\n diagnostics: baselineDiagnostics,\n };\n const repository = repositoryDiagnosticComparison({\n baseline,\n candidate,\n repo,\n scratch,\n configPaths: [\n ...graph.projects.map(({ path }) => path),\n ...configPaths.values(),\n ],\n });\n return {\n baseline,\n candidate: {\n ...candidate,\n rawStatus: candidate.status,\n diagnostics: sourceDiagnostics(candidate.output),\n },\n repository,\n };\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n};\n\ntype RunTypecheckParityOptions = {\n repo: string;\n policy: unknown;\n bun?: string;\n projects?: readonly string[];\n};\nexport const runTypecheckParity = async ({\n repo,\n policy,\n bun = process.versions.bun ? process.execPath : \"bun\",\n projects,\n}: RunTypecheckParityOptions) => {\n await assertUnshadowedCheck(repo);\n assertBunVersion(bun, policy);\n const compiler = await resolveCompiler(repo, policy);\n const graphs = discoverProjectGraphs({ repo, compiler, projects });\n const results = [];\n for (const graph of graphs)\n results.push(await runConfigParity({ repo, compiler, bun, graph }));\n return results.every((passed) => passed);\n};\n\nconst runConfigParity = async ({\n repo,\n compiler,\n bun,\n graph,\n}: CompareRepositoryArgs) => {\n const { groups } = graph;\n const { baseline, candidate, repository } = await compareRepository({\n repo,\n compiler,\n bun,\n graph,\n });\n console.log(\"Class | TypeScript diagnostics | Bun diagnostics | Result\");\n console.log(\n `repository | ${baseline.diagnostics.join(\",\")} | ${candidate.diagnostics.join(\",\")} | ${repository.passed ? \"PASS\" : \"FAIL\"}`,\n );\n console.log(\n `repository tsc: wall=${baseline.wall.toFixed(3)}s maxRSS=${baseline.maxRssKiB}KiB exit=${baseline.rawStatus}`,\n );\n console.log(\n `repository bun: wall=${candidate.wall.toFixed(3)}s maxRSS=${candidate.maxRssKiB}KiB exit=${candidate.rawStatus}`,\n );\n for (const diagnostic of repository.configurationDiagnostics)\n console.error(`FAIL: invalid repository configuration: ${diagnostic}`);\n const scratch = await mkdtemp(join(tmpdir(), \"typecheck-parity-\"));\n const groupResults = [];\n try {\n for (const [index, group] of groups.entries()) {\n console.log(\n `Config group ${index + 1}: ${relative(repo, group.path)} (${group.projects.length} projects)`,\n );\n const results = [];\n let tscWall = 0;\n let bunWall = 0;\n let tscRss = 0;\n let bunRss = 0;\n const contexts = await temporaryProjectTree({\n scratch: join(scratch, `config-${index + 1}`),\n projects: [group.path],\n });\n const context = contexts.get(group.path);\n if (context === undefined)\n throw new Error(`Missing temporary fixture context: ${group.path}`);\n const groupFolder = context.folder;\n const compilerOptions = fixtureCompilerOptions({\n compilerOptions: group.compilerOptions,\n configPath: group.path,\n });\n await writeFile(\n join(groupFolder, \"package.json\"),\n JSON.stringify(\n group.packageContext ?? fixturePackageContext(group.path),\n ),\n );\n for (const fixture of fixtures) {\n const inputs = fixtureInputs({\n files: Object.keys(fixture.files),\n compilerOptions,\n });\n if (inputs.status === \"inapplicable\") {\n console.log(\n `${fixture.name} (inactive under this config: ${inputs.reason}) | | | INACTIVE`,\n );\n continue;\n }\n const folder = join(groupFolder, fixture.name);\n await mkdir(folder);\n await writeFile(\n join(folder, \"tsconfig.json\"),\n JSON.stringify({\n compilerOptions,\n files: inputs.files,\n include: [],\n exclude: [],\n }),\n );\n for (const [name, content] of Object.entries(fixture.files))\n await writeFile(join(folder, name), content);\n const tsc = timedCommand({\n command: process.execPath,\n args: [compiler, \"--noEmit\", \"--pretty\", \"false\", \"-p\", folder],\n repo: folder,\n });\n const checked = timedCommand({\n command: bun,\n args: [...bunCheckArgs(folder), \"--threads=1\"],\n repo: folder,\n });\n const result = fixtureParity({\n seedFiles: inputs.files,\n expected: fixture.codes,\n match: fixture.anyCode ? \"any\" : \"all\",\n repo: folder,\n baseline: {\n ...tsc,\n status: diagnosticExitStatus({\n status: tsc.status,\n output: tsc.output,\n repo: folder,\n }),\n },\n candidate: checked,\n });\n results.push(result);\n tscWall += tsc.wall;\n bunWall += checked.wall;\n tscRss = Math.max(tscRss, tsc.maxRssKiB);\n bunRss = Math.max(bunRss, checked.maxRssKiB);\n if (result.configurationDiagnostics.length > 0) {\n console.error(\n `FAIL: invalid fixture configuration for ${fixture.name}: ${result.configurationDiagnostics.join(\"; \")}`,\n );\n console.log(\n `${fixture.name} | configuration error | configuration error | FAIL`,\n );\n continue;\n }\n let outcome = \"INACTIVE\";\n if (result.active) outcome = result.passed ? \"PASS\" : \"FAIL\";\n console.log(\n `${fixture.name}${result.active ? \"\" : \" (inactive under this config)\"} | ${result.tscCodes.join(\",\")} | ${result.bunCodes.join(\",\")} | ${outcome}`,\n );\n if (!result.active && !result.passed)\n console.error(\n `FAIL: diagnostic comparison differs for inactive class ${fixture.name}: TypeScript exit=${tsc.status}, Bun exit=${checked.status}; missing=${result.identityMissing.join(\",\")}; extra=${result.identityExtra.join(\",\")}`,\n );\n if (result.active && result.bunCodes.length === 0) {\n console.error(\n `FAIL: Bun returned zero diagnostics for active class ${fixture.name} (exit ${checked.status})`,\n );\n if (\n checked.maxRssKiB <= NO_WORK_MAX_RSS_KIB &&\n checked.wall <= NO_WORK_MAX_WALL_SECONDS\n )\n console.error(\n `Bun measured little checker work: wall=${checked.wall.toFixed(3)}s maxRSS=${checked.maxRssKiB}KiB; verify the checker invocation`,\n );\n }\n }\n console.log(\n `fixtures tsc: wall=${tscWall.toFixed(3)}s maxRSS=${tscRss}KiB`,\n );\n console.log(\n `fixtures bun: wall=${bunWall.toFixed(3)}s maxRSS=${bunRss}KiB`,\n );\n if (!results.some(({ active }) => active))\n console.error(\n `FAIL: zero seeded fixture classes active under config group ${index + 1}`,\n );\n groupResults.push(fixtureRunPassed(results));\n }\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n return repository.passed && groupResults.every((passed) => passed);\n};\n"],"mappings":"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"}
|