@stll/oxlint-config 1.0.2 → 1.1.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 +85 -4
- package/dist/cloud-setup-cli.cjs +62 -21
- package/dist/cloud-setup-cli.cjs.map +1 -1
- package/dist/cloud-setup-cli.mjs +63 -22
- package/dist/cloud-setup-cli.mjs.map +1 -1
- package/dist/consumer-compat-cli.cjs +7 -6
- package/dist/consumer-compat-cli.cjs.map +1 -1
- package/dist/consumer-compat-cli.mjs +7 -6
- package/dist/consumer-compat-cli.mjs.map +1 -1
- package/dist/git-tracked-output.cjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/publish-build-target-vite-dts-helper.mjs +1 -2
- package/dist/publish-build-target-vite-dts-helper2.cjs +5 -5
- package/dist/publish-build-target-vite-dts-helper2.cjs.map +1 -1
- package/dist/publish-contract-cli.cjs +17 -16
- package/dist/publish-contract-cli.cjs.map +1 -1
- package/dist/publish-contract-cli.mjs +6 -5
- package/dist/publish-contract-cli.mjs.map +1 -1
- package/dist/publish-contract.cjs +1 -1
- package/dist/publish-contract.cjs.map +1 -1
- package/dist/publish-contract.mjs +1 -1
- package/dist/rolldown-runtime.cjs +1 -1
- package/dist/toolchain-changed.cjs +19 -14
- package/dist/toolchain-changed.cjs.map +1 -1
- package/dist/toolchain-changed.mjs +21 -16
- package/dist/toolchain-changed.mjs.map +1 -1
- package/dist/toolchain-check-cli.cjs.map +1 -1
- package/dist/toolchain-check-cli.mjs.map +1 -1
- package/dist/toolchain-guard.cjs +66 -50
- package/dist/toolchain-guard.cjs.map +1 -1
- package/dist/toolchain-guard.mjs +73 -57
- package/dist/toolchain-guard.mjs.map +1 -1
- package/dist/toolchain-inputs.cjs +670 -32
- package/dist/toolchain-inputs.cjs.map +1 -1
- package/dist/toolchain-inputs.mjs +647 -33
- package/dist/toolchain-inputs.mjs.map +1 -1
- package/dist/toolchain-schema.cjs +1 -1
- package/dist/toolchain-schema.cjs.map +1 -1
- package/dist/toolchain-schema.mjs +2 -2
- package/dist/typecheck-parity-cli.cjs.map +1 -1
- package/dist/typecheck-parity-cli.mjs.map +1 -1
- package/dist/typecheck-parity.cjs +8 -7
- package/dist/typecheck-parity.cjs.map +1 -1
- package/dist/typecheck-parity.mjs +6 -5
- package/dist/typecheck-parity.mjs.map +1 -1
- package/dist/typecheck-probe-cli.cjs +1 -1
- package/dist/typecheck-probe-cli.cjs.map +1 -1
- package/dist/typecheck-probe-cli.mjs +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-contract.cjs","names":["record","githubAutomationFileKind","consumerNodeSupportMatches"],"sources":["../src/consumer-release-pack.ts","../src/publish-contract.ts"],"sourcesContent":["import { parseDocument } from \"yaml\";\n\nimport { githubAutomationFileKind } from \"./toolchain-inputs\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst exactVersion = /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/;\nconst outputDirectory = \"<consumer-release-pack-output>\";\nconst packerSetupExpression =\n /^npm\\s+install\\s+((?:(?:--global|-g|--ignore-scripts)\\s+)+)(npm|pnpm)@([^\\s]+)$/;\nconst defaultRunShell = (defaults: unknown) => {\n if (!record(defaults) || !record(defaults[\"run\"])) return undefined;\n return defaults[\"run\"][\"shell\"];\n};\n\nexport type ConsumerReleasePack = {\n manager: \"npm\" | \"pnpm\";\n version: string;\n arguments: string[];\n};\n\nconst packArguments = (line: string) => {\n const command = /^(npm|pnpm)\\s+pack(?:\\s+(.*))?$/.exec(line);\n const manager = command?.[1];\n if (manager !== \"npm\" && manager !== \"pnpm\")\n throw new Error(\"Unsupported release pack command\");\n const raw = command?.[2] ?? \"\";\n const tokens = raw.match(/\"[^\"\\n]*\"|'[^'\\n]*'|[^\\s]+/g) ?? [];\n const args: string[] = [];\n let destination = false;\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens.at(index);\n if (token === \"--pack-destination\") {\n if (destination) throw new Error(\"Repeated release pack destination\");\n const value = tokens.at(++index);\n if (\n value === undefined ||\n !/^(?:\"\\$GITHUB_WORKSPACE\\/[A-Za-z0-9_/-]+\"|[A-Za-z0-9_/-]+)$/.test(\n value,\n ) ||\n value.split(\"/\").includes(\"..\")\n )\n throw new Error(\"Unsupported release pack destination\");\n destination = true;\n args.push(token, outputDirectory);\n continue;\n }\n if (\n token !== \"--ignore-scripts\" &&\n !(manager === \"pnpm\" && token === \"--config.ignore-scripts=true\") &&\n token !== \"--json\" &&\n token !== \"--silent\"\n )\n throw new Error(\"Unsupported release pack arguments\");\n if (args.includes(token)) throw new Error(\"Repeated release pack flag\");\n args.push(token);\n }\n if (\n !destination ||\n (!args.includes(\"--ignore-scripts\") &&\n !args.includes(\"--config.ignore-scripts=true\"))\n )\n throw new Error(\n \"Release pack requires scripts disabled and --pack-destination\",\n );\n return { manager, arguments: args } satisfies Pick<\n ConsumerReleasePack,\n \"manager\" | \"arguments\"\n >;\n};\n\ntype ReleaseShellContextOptions = {\n step: Record<string, unknown>;\n kind: \"setup\" | \"pack\";\n location: string;\n inheritedShell: unknown;\n};\n\n/** Both setup provenance and packing require unconditional shell commands. */\nconst assertReleaseShellContext = ({\n step,\n kind,\n location,\n inheritedShell,\n}: ReleaseShellContextOptions) => {\n const run = step[\"run\"];\n if (typeof run !== \"string\")\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n const shell = step[\"shell\"] === undefined ? inheritedShell : step[\"shell\"];\n if (shell !== undefined && shell !== \"bash\" && shell !== \"sh\")\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n let quote: \"single\" | \"double\" | undefined;\n let code = \"\";\n for (let index = 0; index < run.length; index += 1) {\n const char = run[index];\n if (char === \"\\n\") {\n if (quote !== undefined)\n throw new Error(\n `Unsupported release ${kind} shell context: ${location}`,\n );\n code += \"\\n\";\n continue;\n }\n if (quote !== \"single\" && char === \"\\\\\") {\n if (\n run[index + 1] === \"\\n\" ||\n (run[index + 1] === \"\\r\" && run[index + 2] === \"\\n\")\n )\n throw new Error(\n `Unsupported release ${kind} shell context: ${location}`,\n );\n index += 1;\n code += \" \";\n continue;\n }\n if (\n quote !== \"single\" &&\n (char === \"`\" || (char === \"$\" && run[index + 1] === \"(\"))\n )\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n if (quote === \"single\") {\n if (char === \"'\") quote = undefined;\n code += \" \";\n continue;\n }\n if (quote === \"double\") {\n if (char === '\"') quote = undefined;\n code += \" \";\n continue;\n }\n if (char === \"'\") {\n quote = \"single\";\n code += \" \";\n continue;\n }\n if (char === '\"') {\n quote = \"double\";\n code += \" \";\n continue;\n }\n if (char === \"#\" && (index === 0 || /\\s/.test(run[index - 1] ?? \"\"))) {\n while (index + 1 < run.length && run[index + 1] !== \"\\n\") index += 1;\n continue;\n }\n code += char;\n }\n if (\n quote !== undefined ||\n /[;&|<>]/.test(code) ||\n code\n .split(\"\\n\")\n .some((line) =>\n /^\\s*(?:if|then|elif|else|fi|for|do|done|while|until|case|esac|function|select|exit|return|exec|break|continue|trap|eval|source|hash|alias|unalias)\\b/.test(\n line,\n ),\n ) ||\n /(?:^|\\n)\\s*\\.(?:\\s|$)/.test(code) ||\n /(?:^|\\n)\\s*[A-Za-z_]\\w*\\s*\\(\\s*\\)\\s*[{(]/.test(code) ||\n (kind === \"setup\" && /[(){}]/.test(code))\n )\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n if (kind !== \"setup\") return;\n for (const line of run.split(\"\\n\")) {\n const command = line.trim();\n if (command === \"\" || command.startsWith(\"#\")) continue;\n if (\n packerSetupExpression.test(command) ||\n /^(?:npm|pnpm)\\s+pack(?:\\s|$)/.test(command) ||\n [\"set -e\", \"set -eu\", \"set -euo pipefail\"].includes(command)\n )\n continue;\n throw new Error(`Unsupported release setup command context: ${location}`);\n }\n};\n\n/** Resolve the repository's release packer without substituting another manager. */\nexport const resolveConsumerReleasePack = (\n files: Record<string, string>,\n): ConsumerReleasePack => {\n const candidates: ConsumerReleasePack[] = [];\n for (const [file, text] of Object.entries(files)) {\n if (githubAutomationFileKind(file) !== \"workflow\") continue;\n const document = parseDocument(text, { uniqueKeys: true, merge: true });\n if (document.errors.length > 0)\n throw new Error(`Invalid release workflow YAML: ${file}`);\n const source: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(source) || !record(source[\"jobs\"])) continue;\n for (const [jobName, job] of Object.entries(source[\"jobs\"])) {\n if (!record(job) || !Array.isArray(job[\"steps\"])) continue;\n const packsRelease = job[\"steps\"].some(\n (step: unknown) =>\n record(step) &&\n typeof step[\"run\"] === \"string\" &&\n step[\"run\"]\n .split(\"\\n\")\n .some(\n (line) =>\n !line.trimStart().startsWith(\"#\") &&\n /\\b(?:npm|pnpm)\\s+pack\\b/.test(line),\n ),\n );\n if (!packsRelease) continue;\n const jobShell = defaultRunShell(job[\"defaults\"]);\n const inheritedShell =\n jobShell === undefined ? defaultRunShell(source[\"defaults\"]) : jobShell;\n const versions = new Map<string, string[]>();\n let packed: ConsumerReleasePack | undefined;\n for (const step of job[\"steps\"]) {\n if (!record(step)) continue;\n if (\n typeof step[\"uses\"] === \"string\" &&\n step[\"uses\"].startsWith(\"pnpm/action-setup@\")\n ) {\n if (\n step[\"if\"] !== undefined ||\n step[\"continue-on-error\"] !== undefined\n )\n throw new Error(\n `Conditional release packer setup: ${file}:${jobName}`,\n );\n const inputs = step[\"with\"];\n const version = record(inputs) ? inputs[\"version\"] : undefined;\n if (typeof version !== \"string\" || !exactVersion.test(version))\n throw new Error(\n `Release pnpm setup requires an exact version: ${file}:${jobName}`,\n );\n const values = versions.get(\"pnpm\") ?? [];\n values.push(version);\n versions.set(\"pnpm\", values);\n }\n if (typeof step[\"run\"] !== \"string\") continue;\n for (const rawLine of step[\"run\"].split(\"\\n\")) {\n const line = rawLine.trim();\n if (line.startsWith(\"#\")) continue;\n const setupCommand =\n /\\bnpm\\s+(?:install|i)\\b[^\\n]*\\b(?:npm|pnpm)@/.test(line);\n if (setupCommand)\n assertReleaseShellContext({\n step,\n kind: \"setup\",\n location: `${file}:${jobName}`,\n inheritedShell,\n });\n const setup = packerSetupExpression.exec(line);\n if (setupCommand && setup === null)\n throw new Error(\n `Unsupported release packer setup command: ${file}:${jobName}`,\n );\n if (\n setup !== null &&\n /(?:^|\\s)(?:--global|-g)(?:\\s|$)/.test(setup[1] ?? \"\")\n ) {\n if (\n step[\"if\"] !== undefined ||\n step[\"continue-on-error\"] !== undefined\n )\n throw new Error(\n `Conditional release packer setup: ${file}:${jobName}`,\n );\n const manager = setup[2];\n const version = setup[3];\n if (\n manager === undefined ||\n version === undefined ||\n !exactVersion.test(version)\n )\n throw new Error(\n `Release packer setup requires an exact version: ${file}:${jobName}`,\n );\n const values = versions.get(manager) ?? [];\n values.push(version);\n versions.set(manager, values);\n }\n if (!/\\b(?:npm|pnpm)\\s+pack\\b/.test(line)) continue;\n if (\n job[\"if\"] !== undefined ||\n step[\"if\"] !== undefined ||\n step[\"continue-on-error\"] !== undefined ||\n packed !== undefined\n )\n throw new Error(\n `Ambiguous release pack command: ${file}:${jobName}`,\n );\n assertReleaseShellContext({\n step,\n kind: \"pack\",\n location: `${file}:${jobName}`,\n inheritedShell,\n });\n const command = packArguments(line);\n const selected = versions.get(command.manager);\n const version = selected?.at(0);\n if (selected?.length !== 1 || version === undefined)\n throw new Error(\n `Missing or ambiguous exact release packer version: ${file}:${jobName}`,\n );\n packed = {\n manager: command.manager,\n version,\n arguments: command.arguments,\n };\n }\n }\n if (packed !== undefined) candidates.push(packed);\n }\n }\n const selected = candidates.at(0);\n if (candidates.length !== 1 || selected === undefined)\n throw new Error(\"Require exactly one identifiable release pack job\");\n return selected;\n};\n\ntype ConsumerReleasePackArgumentsOptions = {\n packer: ConsumerReleasePack;\n directory: string;\n};\nexport const consumerReleasePackArguments = ({\n packer,\n directory,\n}: ConsumerReleasePackArgumentsOptions) => {\n if (directory.length === 0)\n throw new Error(\"Release pack output directory is required\");\n return [\n \"pack\",\n ...packer.arguments.map((argument) =>\n argument === outputDirectory ? directory : argument,\n ),\n ];\n};\n","import { isDeepStrictEqual } from \"node:util\";\nimport { lte, parse, satisfies } from \"semver\";\n\nimport { consumerNodeSupportMatches } from \"./consumer-node-support\";\n\nexport type PublishTarget =\n | { type: \"javascript\"; targets: readonly string[] }\n | { type: \"types-only\" };\n\ntype ExportTarget =\n | string\n | null\n | ExportTarget[]\n | { [condition: string]: ExportTarget };\n\ntype EntryPoints = {\n type?: \"module\" | \"commonjs\";\n exports?: ExportTarget;\n main?: string;\n module?: string;\n types?: string;\n typings?: string;\n bin?: string | Record<string, string>;\n typesVersions?: Record<string, Record<string, string[]>>;\n};\n\nexport type PublishContract = {\n engines: Record<string, string>;\n peerDependencies: Record<string, string>;\n target: PublishTarget;\n entryPoints: EntryPoints;\n};\n\nexport type ConsumerPolicy = { node: string; typescript: string };\nexport type PublishContractDiagnostic = { field: string; message: string };\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst object = (value: unknown, field: string) => {\n if (!record(value)) throw new Error(`${field} must be an object`);\n return value;\n};\n\nconst closedKeys = (\n value: Record<string, unknown>,\n allowed: readonly string[],\n field: string,\n) => {\n for (const key of Object.keys(value))\n if (!allowed.includes(key))\n throw new Error(`${field}.${key} is unsupported`);\n};\n\nconst text = (value: unknown, field: string) => {\n if (typeof value !== \"string\" || value.trim() === \"\")\n throw new Error(`${field} must be a nonempty string`);\n return value;\n};\n\nconst stringMap = (value: unknown, field: string) => {\n const result = new Map<string, string>();\n for (const [key, entry] of Object.entries(object(value, field)))\n result.set(text(key, field), text(entry, `${field}.${key}`));\n return Object.fromEntries(result);\n};\n\nconst exportTarget = (value: unknown, field: string): ExportTarget => {\n if (value === null) return null;\n if (typeof value === \"string\") return text(value, field);\n if (Array.isArray(value))\n return value.map((entry: unknown, index) =>\n exportTarget(entry, `${field}[${index}]`),\n );\n const result = new Map<string, ExportTarget>();\n for (const [key, entry] of Object.entries(object(value, field)))\n result.set(text(key, field), exportTarget(entry, `${field}.${key}`));\n return Object.fromEntries(result);\n};\n\nconst typesVersions = (value: unknown) => {\n const result = new Map<string, Record<string, string[]>>();\n for (const [range, paths] of Object.entries(object(value, \"typesVersions\"))) {\n const mappings = new Map<string, string[]>();\n for (const [pattern, entries] of Object.entries(\n object(paths, `typesVersions.${range}`),\n )) {\n if (!Array.isArray(entries))\n throw new Error(`typesVersions.${range}.${pattern} must be an array`);\n mappings.set(\n text(pattern, \"typesVersions pattern\"),\n entries.map((entry: unknown) => text(entry, \"typesVersions path\")),\n );\n }\n result.set(\n text(range, \"typesVersions range\"),\n Object.fromEntries(mappings),\n );\n }\n return Object.fromEntries(result);\n};\n\nconst entryPointKeys = [\n \"type\",\n \"exports\",\n \"main\",\n \"module\",\n \"types\",\n \"typings\",\n \"bin\",\n \"typesVersions\",\n] as const;\n\nexport const publishConfigOverrideKeys = entryPointKeys.filter(\n (key) => key !== \"type\",\n);\n\nconst entryPoints = (value: unknown): EntryPoints => {\n const source = object(value, \"entryPoints\");\n closedKeys(source, entryPointKeys, \"entryPoints\");\n const result: EntryPoints = {};\n if (\"type\" in source) {\n if (source[\"type\"] !== \"module\" && source[\"type\"] !== \"commonjs\")\n throw new Error(\"entryPoints.type must be module or commonjs\");\n result.type = source[\"type\"];\n }\n if (\"exports\" in source)\n result.exports = exportTarget(source[\"exports\"], \"entryPoints.exports\");\n for (const key of [\"main\", \"module\", \"types\", \"typings\"] as const)\n if (key in source) result[key] = text(source[key], `entryPoints.${key}`);\n if (\"bin\" in source)\n result.bin =\n typeof source[\"bin\"] === \"string\"\n ? text(source[\"bin\"], \"entryPoints.bin\")\n : stringMap(source[\"bin\"], \"entryPoints.bin\");\n if (\"typesVersions\" in source)\n result.typesVersions = typesVersions(source[\"typesVersions\"]);\n return result;\n};\n\nconst publishTarget = (value: unknown): PublishTarget => {\n const source = object(value, \"target\");\n if (source[\"type\"] === \"types-only\") {\n closedKeys(source, [\"type\"], \"target\");\n return { type: \"types-only\" };\n }\n if (source[\"type\"] !== \"javascript\")\n throw new Error(\"target.type must be javascript or types-only\");\n closedKeys(source, [\"type\", \"targets\"], \"target\");\n if (!Array.isArray(source[\"targets\"]) || source[\"targets\"].length === 0)\n throw new Error(\"target.targets must be a nonempty array\");\n const targets = Array.from(source[\"targets\"]).map((entry: unknown) => {\n const target = text(entry, \"target.targets\");\n if (\n /[\\s,]/.test(target) ||\n Array.from(target).some(\n (character) =>\n character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n )\n )\n throw new Error(\n \"target.targets must contain resolved target identifiers\",\n );\n return target;\n });\n return { type: \"javascript\", targets: [...new Set(targets)].sort() };\n};\n\nexport const parsePublishContract = (value: unknown): PublishContract => {\n const source = object(value, \"publish contract\");\n closedKeys(\n source,\n [\"engines\", \"peerDependencies\", \"target\", \"entryPoints\"],\n \"publish contract\",\n );\n return {\n engines: stringMap(source[\"engines\"], \"engines\"),\n peerDependencies: stringMap(source[\"peerDependencies\"], \"peerDependencies\"),\n target: publishTarget(source[\"target\"]),\n entryPoints: entryPoints(source[\"entryPoints\"]),\n };\n};\n\nconst publishPackers = [\"npm\", \"pnpm\"] as const;\nexport type PublishPacker = (typeof publishPackers)[number];\n\ntype ResolveManifestContractOptions = {\n packer: PublishPacker;\n manifest: unknown;\n target: PublishTarget;\n};\n\nexport const resolveManifestContract = ({\n packer,\n manifest,\n target,\n}: ResolveManifestContractOptions): PublishContract => {\n if (!publishPackers.includes(packer))\n throw new Error(\"publish packer must be npm or pnpm\");\n const source = object(manifest, \"package manifest\");\n const config =\n \"publishConfig\" in source\n ? object(source[\"publishConfig\"], \"publishConfig\")\n : {};\n closedKeys(\n config,\n [...publishConfigOverrideKeys, \"access\", \"registry\"],\n \"publishConfig\",\n );\n if (packer === \"npm\")\n for (const key of publishConfigOverrideKeys)\n if (\n Object.hasOwn(config, key) &&\n !(key === \"exports\" || key === \"typesVersions\"\n ? JSON.stringify(config[key]) === JSON.stringify(source[key])\n : isDeepStrictEqual(config[key], source[key]))\n )\n throw new Error(\n `npm pack does not apply differing publishConfig.${key}; move the published entry to package.json or use pnpm`,\n );\n for (const field of [\"browser\", \"esnext\", \"es2015\", \"unpkg\", \"umd:main\"])\n if (Object.hasOwn(source, field) || Object.hasOwn(config, field))\n throw new Error(`published entry field ${field} is unsupported`);\n const published: Record<string, unknown> = {};\n for (const key of entryPointKeys) {\n if (packer === \"pnpm\" && key !== \"type\" && key in config)\n published[key] = config[key];\n else if (key in source) published[key] = source[key];\n }\n if (typeof published[\"bin\"] === \"string\") {\n const name = text(source[\"name\"], \"package name for bin\");\n const command = name.split(\"/\").at(-1);\n if (command === undefined || command === \"\")\n throw new Error(\"package name must determine its bin command\");\n published[\"bin\"] = { [command]: published[\"bin\"] };\n }\n let engines: unknown = {};\n if (Object.hasOwn(source, \"engines\")) engines = source[\"engines\"];\n return parsePublishContract({\n engines,\n peerDependencies: Object.hasOwn(source, \"peerDependencies\")\n ? source[\"peerDependencies\"]\n : {},\n target,\n entryPoints: published,\n });\n};\n\nconst consumerPolicy = (policy: ConsumerPolicy) => {\n closedKeys(\n object(policy, \"consumer policy\"),\n [\"node\", \"typescript\"],\n \"consumer policy\",\n );\n for (const [field, major] of [\n [\"node\", 22],\n [\"typescript\", 6],\n ] as const) {\n const version = parse(policy[field]);\n if (\n version === null ||\n version.version !== policy[field] ||\n version.major !== major ||\n version.prerelease.length !== 0\n )\n throw new Error(\n `consumer policy ${field} must pin an exact stable ${major}.x release`,\n );\n }\n};\n\ntype CheckPublishContractOptions = ResolveManifestContractOptions & {\n contract: unknown;\n policy: ConsumerPolicy;\n};\n\n/** Share the accepted Node target grammar between static and packed checks. */\nexport const publishedNodeTargetSupportsConsumer = ({\n target,\n node,\n}: {\n target: string;\n node: string;\n}) => {\n const match = /^node([1-9]\\d*)(?:\\.(0|[1-9]\\d*))?(?:\\.(0|[1-9]\\d*))?$/i.exec(\n target,\n );\n const version =\n match === null\n ? null\n : parse(`${match[1]}.${match[2] ?? \"0\"}.${match[3] ?? \"0\"}`);\n return version !== null && lte(version, node);\n};\n\nexport const checkPublishContract = ({\n packer,\n manifest,\n target,\n contract,\n policy,\n}: CheckPublishContractOptions) => {\n consumerPolicy(policy);\n const current = resolveManifestContract({ packer, manifest, target });\n const committed = parsePublishContract(contract);\n const diagnostics: PublishContractDiagnostic[] = [];\n const add = (field: string, message: string) =>\n diagnostics.push({ field, message });\n const compare = (field: string, expected: unknown, actual: unknown) => {\n if (\n field !== \"entryPoints.exports\" &&\n field !== \"entryPoints.typesVersions\" &&\n record(expected) &&\n record(actual)\n ) {\n for (const key of new Set([\n ...Object.keys(expected),\n ...Object.keys(actual),\n ]))\n compare(\n `${field}.${key}`,\n Object.hasOwn(expected, key) ? expected[key] : undefined,\n Object.hasOwn(actual, key) ? actual[key] : undefined,\n );\n return;\n }\n if (JSON.stringify(expected) !== JSON.stringify(actual))\n add(field, `published ${field} differs from the committed contract`);\n };\n for (const field of [\n \"engines\",\n \"peerDependencies\",\n \"target\",\n \"entryPoints\",\n ] as const)\n compare(field, committed[field], current[field]);\n const support = (\n field: string,\n range: string | undefined,\n version: string,\n ) => {\n if (range !== undefined && !satisfies(version, range))\n add(field, `${field} must support consumer version ${version}`);\n };\n if (\n !consumerNodeSupportMatches({\n range: current.engines[\"node\"],\n node: policy.node,\n })\n )\n add(\n \"engines.node\",\n `engines.node must support consumer version ${policy.node}`,\n );\n support(\n \"engines.typescript\",\n current.engines[\"typescript\"],\n policy.typescript,\n );\n support(\n \"peerDependencies.typescript\",\n current.peerDependencies[\"typescript\"],\n policy.typescript,\n );\n if (\"bun\" in current.engines)\n add(\"engines.bun\", \"published packages must not require Bun\");\n for (const peer of [\"bun\", \"bun-types\", \"@types/bun\", \"@typescript/native\"])\n if (Object.hasOwn(current.peerDependencies, peer))\n add(\n `peerDependencies.${peer}`,\n \"published packages must not require development runtime or compiler packages\",\n );\n if (current.target.type === \"javascript\")\n for (const selected of current.target.targets) {\n if (/^bun(?:$|[0-9])/i.test(selected)) {\n add(\"target\", \"published JavaScript must not require Bun\");\n continue;\n }\n if (!/^node/i.test(selected)) continue;\n if (\n !publishedNodeTargetSupportsConsumer({\n target: selected,\n node: policy.node,\n })\n )\n add(\n \"target\",\n `JavaScript target ${selected} must support consumer Node ${policy.node}`,\n );\n }\n return diagnostics;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"publish-contract.cjs","names":["record","githubAutomationFileKind","parseDocument","isDeepStrictEqual","parse","lte","satisfies","consumerNodeSupportMatches"],"sources":["../src/consumer-release-pack.ts","../src/publish-contract.ts"],"sourcesContent":["import { parseDocument } from \"yaml\";\n\nimport { githubAutomationFileKind } from \"./toolchain-inputs\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst exactVersion = /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/;\nconst outputDirectory = \"<consumer-release-pack-output>\";\nconst packerSetupExpression =\n /^npm\\s+install\\s+((?:(?:--global|-g|--ignore-scripts)\\s+)+)(npm|pnpm)@([^\\s]+)$/;\nconst defaultRunShell = (defaults: unknown) => {\n if (!record(defaults) || !record(defaults[\"run\"])) return undefined;\n return defaults[\"run\"][\"shell\"];\n};\n\nexport type ConsumerReleasePack = {\n manager: \"npm\" | \"pnpm\";\n version: string;\n arguments: string[];\n};\n\nconst packArguments = (line: string) => {\n const command = /^(npm|pnpm)\\s+pack(?:\\s+(.*))?$/.exec(line);\n const manager = command?.[1];\n if (manager !== \"npm\" && manager !== \"pnpm\")\n throw new Error(\"Unsupported release pack command\");\n const raw = command?.[2] ?? \"\";\n const tokens = raw.match(/\"[^\"\\n]*\"|'[^'\\n]*'|[^\\s]+/g) ?? [];\n const args: string[] = [];\n let destination = false;\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens.at(index);\n if (token === \"--pack-destination\") {\n if (destination) throw new Error(\"Repeated release pack destination\");\n const value = tokens.at(++index);\n if (\n value === undefined ||\n !/^(?:\"\\$GITHUB_WORKSPACE\\/[A-Za-z0-9_/-]+\"|[A-Za-z0-9_/-]+)$/.test(\n value,\n ) ||\n value.split(\"/\").includes(\"..\")\n )\n throw new Error(\"Unsupported release pack destination\");\n destination = true;\n args.push(token, outputDirectory);\n continue;\n }\n if (\n token !== \"--ignore-scripts\" &&\n !(manager === \"pnpm\" && token === \"--config.ignore-scripts=true\") &&\n token !== \"--json\" &&\n token !== \"--silent\"\n )\n throw new Error(\"Unsupported release pack arguments\");\n if (args.includes(token)) throw new Error(\"Repeated release pack flag\");\n args.push(token);\n }\n if (\n !destination ||\n (!args.includes(\"--ignore-scripts\") &&\n !args.includes(\"--config.ignore-scripts=true\"))\n )\n throw new Error(\n \"Release pack requires scripts disabled and --pack-destination\",\n );\n return { manager, arguments: args } satisfies Pick<\n ConsumerReleasePack,\n \"manager\" | \"arguments\"\n >;\n};\n\ntype ReleaseShellContextOptions = {\n step: Record<string, unknown>;\n kind: \"setup\" | \"pack\";\n location: string;\n inheritedShell: unknown;\n};\n\n/** Both setup provenance and packing require unconditional shell commands. */\nconst assertReleaseShellContext = ({\n step,\n kind,\n location,\n inheritedShell,\n}: ReleaseShellContextOptions) => {\n const run = step[\"run\"];\n if (typeof run !== \"string\")\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n const shell = step[\"shell\"] === undefined ? inheritedShell : step[\"shell\"];\n if (shell !== undefined && shell !== \"bash\" && shell !== \"sh\")\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n let quote: \"single\" | \"double\" | undefined;\n let code = \"\";\n for (let index = 0; index < run.length; index += 1) {\n const char = run[index];\n if (char === \"\\n\") {\n if (quote !== undefined)\n throw new Error(\n `Unsupported release ${kind} shell context: ${location}`,\n );\n code += \"\\n\";\n continue;\n }\n if (quote !== \"single\" && char === \"\\\\\") {\n if (\n run[index + 1] === \"\\n\" ||\n (run[index + 1] === \"\\r\" && run[index + 2] === \"\\n\")\n )\n throw new Error(\n `Unsupported release ${kind} shell context: ${location}`,\n );\n index += 1;\n code += \" \";\n continue;\n }\n if (\n quote !== \"single\" &&\n (char === \"`\" || (char === \"$\" && run[index + 1] === \"(\"))\n )\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n if (quote === \"single\") {\n if (char === \"'\") quote = undefined;\n code += \" \";\n continue;\n }\n if (quote === \"double\") {\n if (char === '\"') quote = undefined;\n code += \" \";\n continue;\n }\n if (char === \"'\") {\n quote = \"single\";\n code += \" \";\n continue;\n }\n if (char === '\"') {\n quote = \"double\";\n code += \" \";\n continue;\n }\n if (char === \"#\" && (index === 0 || /\\s/.test(run[index - 1] ?? \"\"))) {\n while (index + 1 < run.length && run[index + 1] !== \"\\n\") index += 1;\n continue;\n }\n code += char;\n }\n if (\n quote !== undefined ||\n /[;&|<>]/.test(code) ||\n code\n .split(\"\\n\")\n .some((line) =>\n /^\\s*(?:if|then|elif|else|fi|for|do|done|while|until|case|esac|function|select|exit|return|exec|break|continue|trap|eval|source|hash|alias|unalias)\\b/.test(\n line,\n ),\n ) ||\n /(?:^|\\n)\\s*\\.(?:\\s|$)/.test(code) ||\n /(?:^|\\n)\\s*[A-Za-z_]\\w*\\s*\\(\\s*\\)\\s*[{(]/.test(code) ||\n (kind === \"setup\" && /[(){}]/.test(code))\n )\n throw new Error(`Unsupported release ${kind} shell context: ${location}`);\n if (kind !== \"setup\") return;\n for (const line of run.split(\"\\n\")) {\n const command = line.trim();\n if (command === \"\" || command.startsWith(\"#\")) continue;\n if (\n packerSetupExpression.test(command) ||\n /^(?:npm|pnpm)\\s+pack(?:\\s|$)/.test(command) ||\n [\"set -e\", \"set -eu\", \"set -euo pipefail\"].includes(command)\n )\n continue;\n throw new Error(`Unsupported release setup command context: ${location}`);\n }\n};\n\n/** Resolve the repository's release packer without substituting another manager. */\nexport const resolveConsumerReleasePack = (\n files: Record<string, string>,\n): ConsumerReleasePack => {\n const candidates: ConsumerReleasePack[] = [];\n for (const [file, text] of Object.entries(files)) {\n if (githubAutomationFileKind(file) !== \"workflow\") continue;\n const document = parseDocument(text, { uniqueKeys: true, merge: true });\n if (document.errors.length > 0)\n throw new Error(`Invalid release workflow YAML: ${file}`);\n const source: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(source) || !record(source[\"jobs\"])) continue;\n for (const [jobName, job] of Object.entries(source[\"jobs\"])) {\n if (!record(job) || !Array.isArray(job[\"steps\"])) continue;\n const packsRelease = job[\"steps\"].some(\n (step: unknown) =>\n record(step) &&\n typeof step[\"run\"] === \"string\" &&\n step[\"run\"]\n .split(\"\\n\")\n .some(\n (line) =>\n !line.trimStart().startsWith(\"#\") &&\n /\\b(?:npm|pnpm)\\s+pack\\b/.test(line),\n ),\n );\n if (!packsRelease) continue;\n const jobShell = defaultRunShell(job[\"defaults\"]);\n const inheritedShell =\n jobShell === undefined ? defaultRunShell(source[\"defaults\"]) : jobShell;\n const versions = new Map<string, string[]>();\n let packed: ConsumerReleasePack | undefined;\n for (const step of job[\"steps\"]) {\n if (!record(step)) continue;\n if (\n typeof step[\"uses\"] === \"string\" &&\n step[\"uses\"].startsWith(\"pnpm/action-setup@\")\n ) {\n if (\n step[\"if\"] !== undefined ||\n step[\"continue-on-error\"] !== undefined\n )\n throw new Error(\n `Conditional release packer setup: ${file}:${jobName}`,\n );\n const inputs = step[\"with\"];\n const version = record(inputs) ? inputs[\"version\"] : undefined;\n if (typeof version !== \"string\" || !exactVersion.test(version))\n throw new Error(\n `Release pnpm setup requires an exact version: ${file}:${jobName}`,\n );\n const values = versions.get(\"pnpm\") ?? [];\n values.push(version);\n versions.set(\"pnpm\", values);\n }\n if (typeof step[\"run\"] !== \"string\") continue;\n for (const rawLine of step[\"run\"].split(\"\\n\")) {\n const line = rawLine.trim();\n if (line.startsWith(\"#\")) continue;\n const setupCommand =\n /\\bnpm\\s+(?:install|i)\\b[^\\n]*\\b(?:npm|pnpm)@/.test(line);\n if (setupCommand)\n assertReleaseShellContext({\n step,\n kind: \"setup\",\n location: `${file}:${jobName}`,\n inheritedShell,\n });\n const setup = packerSetupExpression.exec(line);\n if (setupCommand && setup === null)\n throw new Error(\n `Unsupported release packer setup command: ${file}:${jobName}`,\n );\n if (\n setup !== null &&\n /(?:^|\\s)(?:--global|-g)(?:\\s|$)/.test(setup[1] ?? \"\")\n ) {\n if (\n step[\"if\"] !== undefined ||\n step[\"continue-on-error\"] !== undefined\n )\n throw new Error(\n `Conditional release packer setup: ${file}:${jobName}`,\n );\n const manager = setup[2];\n const version = setup[3];\n if (\n manager === undefined ||\n version === undefined ||\n !exactVersion.test(version)\n )\n throw new Error(\n `Release packer setup requires an exact version: ${file}:${jobName}`,\n );\n const values = versions.get(manager) ?? [];\n values.push(version);\n versions.set(manager, values);\n }\n if (!/\\b(?:npm|pnpm)\\s+pack\\b/.test(line)) continue;\n if (\n job[\"if\"] !== undefined ||\n step[\"if\"] !== undefined ||\n step[\"continue-on-error\"] !== undefined ||\n packed !== undefined\n )\n throw new Error(\n `Ambiguous release pack command: ${file}:${jobName}`,\n );\n assertReleaseShellContext({\n step,\n kind: \"pack\",\n location: `${file}:${jobName}`,\n inheritedShell,\n });\n const command = packArguments(line);\n const selected = versions.get(command.manager);\n const version = selected?.at(0);\n if (selected?.length !== 1 || version === undefined)\n throw new Error(\n `Missing or ambiguous exact release packer version: ${file}:${jobName}`,\n );\n packed = {\n manager: command.manager,\n version,\n arguments: command.arguments,\n };\n }\n }\n if (packed !== undefined) candidates.push(packed);\n }\n }\n const selected = candidates.at(0);\n if (candidates.length !== 1 || selected === undefined)\n throw new Error(\"Require exactly one identifiable release pack job\");\n return selected;\n};\n\ntype ConsumerReleasePackArgumentsOptions = {\n packer: ConsumerReleasePack;\n directory: string;\n};\nexport const consumerReleasePackArguments = ({\n packer,\n directory,\n}: ConsumerReleasePackArgumentsOptions) => {\n if (directory.length === 0)\n throw new Error(\"Release pack output directory is required\");\n return [\n \"pack\",\n ...packer.arguments.map((argument) =>\n argument === outputDirectory ? directory : argument,\n ),\n ];\n};\n","import { isDeepStrictEqual } from \"node:util\";\nimport { lte, parse, satisfies } from \"semver\";\n\nimport { consumerNodeSupportMatches } from \"./consumer-node-support\";\n\nexport type PublishTarget =\n | { type: \"javascript\"; targets: readonly string[] }\n | { type: \"types-only\" };\n\ntype ExportTarget =\n | string\n | null\n | ExportTarget[]\n | { [condition: string]: ExportTarget };\n\ntype EntryPoints = {\n type?: \"module\" | \"commonjs\";\n exports?: ExportTarget;\n main?: string;\n module?: string;\n types?: string;\n typings?: string;\n bin?: string | Record<string, string>;\n typesVersions?: Record<string, Record<string, string[]>>;\n};\n\nexport type PublishContract = {\n engines: Record<string, string>;\n peerDependencies: Record<string, string>;\n target: PublishTarget;\n entryPoints: EntryPoints;\n};\n\nexport type ConsumerPolicy = { node: string; typescript: string };\nexport type PublishContractDiagnostic = { field: string; message: string };\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst object = (value: unknown, field: string) => {\n if (!record(value)) throw new Error(`${field} must be an object`);\n return value;\n};\n\nconst closedKeys = (\n value: Record<string, unknown>,\n allowed: readonly string[],\n field: string,\n) => {\n for (const key of Object.keys(value))\n if (!allowed.includes(key))\n throw new Error(`${field}.${key} is unsupported`);\n};\n\nconst text = (value: unknown, field: string) => {\n if (typeof value !== \"string\" || value.trim() === \"\")\n throw new Error(`${field} must be a nonempty string`);\n return value;\n};\n\nconst stringMap = (value: unknown, field: string) => {\n const result = new Map<string, string>();\n for (const [key, entry] of Object.entries(object(value, field)))\n result.set(text(key, field), text(entry, `${field}.${key}`));\n return Object.fromEntries(result);\n};\n\nconst exportTarget = (value: unknown, field: string): ExportTarget => {\n if (value === null) return null;\n if (typeof value === \"string\") return text(value, field);\n if (Array.isArray(value))\n return value.map((entry: unknown, index) =>\n exportTarget(entry, `${field}[${index}]`),\n );\n const result = new Map<string, ExportTarget>();\n for (const [key, entry] of Object.entries(object(value, field)))\n result.set(text(key, field), exportTarget(entry, `${field}.${key}`));\n return Object.fromEntries(result);\n};\n\nconst typesVersions = (value: unknown) => {\n const result = new Map<string, Record<string, string[]>>();\n for (const [range, paths] of Object.entries(object(value, \"typesVersions\"))) {\n const mappings = new Map<string, string[]>();\n for (const [pattern, entries] of Object.entries(\n object(paths, `typesVersions.${range}`),\n )) {\n if (!Array.isArray(entries))\n throw new Error(`typesVersions.${range}.${pattern} must be an array`);\n mappings.set(\n text(pattern, \"typesVersions pattern\"),\n entries.map((entry: unknown) => text(entry, \"typesVersions path\")),\n );\n }\n result.set(\n text(range, \"typesVersions range\"),\n Object.fromEntries(mappings),\n );\n }\n return Object.fromEntries(result);\n};\n\nconst entryPointKeys = [\n \"type\",\n \"exports\",\n \"main\",\n \"module\",\n \"types\",\n \"typings\",\n \"bin\",\n \"typesVersions\",\n] as const;\n\nexport const publishConfigOverrideKeys = entryPointKeys.filter(\n (key) => key !== \"type\",\n);\n\nconst entryPoints = (value: unknown): EntryPoints => {\n const source = object(value, \"entryPoints\");\n closedKeys(source, entryPointKeys, \"entryPoints\");\n const result: EntryPoints = {};\n if (\"type\" in source) {\n if (source[\"type\"] !== \"module\" && source[\"type\"] !== \"commonjs\")\n throw new Error(\"entryPoints.type must be module or commonjs\");\n result.type = source[\"type\"];\n }\n if (\"exports\" in source)\n result.exports = exportTarget(source[\"exports\"], \"entryPoints.exports\");\n for (const key of [\"main\", \"module\", \"types\", \"typings\"] as const)\n if (key in source) result[key] = text(source[key], `entryPoints.${key}`);\n if (\"bin\" in source)\n result.bin =\n typeof source[\"bin\"] === \"string\"\n ? text(source[\"bin\"], \"entryPoints.bin\")\n : stringMap(source[\"bin\"], \"entryPoints.bin\");\n if (\"typesVersions\" in source)\n result.typesVersions = typesVersions(source[\"typesVersions\"]);\n return result;\n};\n\nconst publishTarget = (value: unknown): PublishTarget => {\n const source = object(value, \"target\");\n if (source[\"type\"] === \"types-only\") {\n closedKeys(source, [\"type\"], \"target\");\n return { type: \"types-only\" };\n }\n if (source[\"type\"] !== \"javascript\")\n throw new Error(\"target.type must be javascript or types-only\");\n closedKeys(source, [\"type\", \"targets\"], \"target\");\n if (!Array.isArray(source[\"targets\"]) || source[\"targets\"].length === 0)\n throw new Error(\"target.targets must be a nonempty array\");\n const targets = Array.from(source[\"targets\"]).map((entry: unknown) => {\n const target = text(entry, \"target.targets\");\n if (\n /[\\s,]/.test(target) ||\n Array.from(target).some(\n (character) =>\n character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n )\n )\n throw new Error(\n \"target.targets must contain resolved target identifiers\",\n );\n return target;\n });\n return { type: \"javascript\", targets: [...new Set(targets)].sort() };\n};\n\nexport const parsePublishContract = (value: unknown): PublishContract => {\n const source = object(value, \"publish contract\");\n closedKeys(\n source,\n [\"engines\", \"peerDependencies\", \"target\", \"entryPoints\"],\n \"publish contract\",\n );\n return {\n engines: stringMap(source[\"engines\"], \"engines\"),\n peerDependencies: stringMap(source[\"peerDependencies\"], \"peerDependencies\"),\n target: publishTarget(source[\"target\"]),\n entryPoints: entryPoints(source[\"entryPoints\"]),\n };\n};\n\nconst publishPackers = [\"npm\", \"pnpm\"] as const;\nexport type PublishPacker = (typeof publishPackers)[number];\n\ntype ResolveManifestContractOptions = {\n packer: PublishPacker;\n manifest: unknown;\n target: PublishTarget;\n};\n\nexport const resolveManifestContract = ({\n packer,\n manifest,\n target,\n}: ResolveManifestContractOptions): PublishContract => {\n if (!publishPackers.includes(packer))\n throw new Error(\"publish packer must be npm or pnpm\");\n const source = object(manifest, \"package manifest\");\n const config =\n \"publishConfig\" in source\n ? object(source[\"publishConfig\"], \"publishConfig\")\n : {};\n closedKeys(\n config,\n [...publishConfigOverrideKeys, \"access\", \"registry\"],\n \"publishConfig\",\n );\n if (packer === \"npm\")\n for (const key of publishConfigOverrideKeys)\n if (\n Object.hasOwn(config, key) &&\n !(key === \"exports\" || key === \"typesVersions\"\n ? JSON.stringify(config[key]) === JSON.stringify(source[key])\n : isDeepStrictEqual(config[key], source[key]))\n )\n throw new Error(\n `npm pack does not apply differing publishConfig.${key}; move the published entry to package.json or use pnpm`,\n );\n for (const field of [\"browser\", \"esnext\", \"es2015\", \"unpkg\", \"umd:main\"])\n if (Object.hasOwn(source, field) || Object.hasOwn(config, field))\n throw new Error(`published entry field ${field} is unsupported`);\n const published: Record<string, unknown> = {};\n for (const key of entryPointKeys) {\n if (packer === \"pnpm\" && key !== \"type\" && key in config)\n published[key] = config[key];\n else if (key in source) published[key] = source[key];\n }\n if (typeof published[\"bin\"] === \"string\") {\n const name = text(source[\"name\"], \"package name for bin\");\n const command = name.split(\"/\").at(-1);\n if (command === undefined || command === \"\")\n throw new Error(\"package name must determine its bin command\");\n published[\"bin\"] = { [command]: published[\"bin\"] };\n }\n let engines: unknown = {};\n if (Object.hasOwn(source, \"engines\")) engines = source[\"engines\"];\n return parsePublishContract({\n engines,\n peerDependencies: Object.hasOwn(source, \"peerDependencies\")\n ? source[\"peerDependencies\"]\n : {},\n target,\n entryPoints: published,\n });\n};\n\nconst consumerPolicy = (policy: ConsumerPolicy) => {\n closedKeys(\n object(policy, \"consumer policy\"),\n [\"node\", \"typescript\"],\n \"consumer policy\",\n );\n for (const [field, major] of [\n [\"node\", 22],\n [\"typescript\", 6],\n ] as const) {\n const version = parse(policy[field]);\n if (\n version === null ||\n version.version !== policy[field] ||\n version.major !== major ||\n version.prerelease.length !== 0\n )\n throw new Error(\n `consumer policy ${field} must pin an exact stable ${major}.x release`,\n );\n }\n};\n\ntype CheckPublishContractOptions = ResolveManifestContractOptions & {\n contract: unknown;\n policy: ConsumerPolicy;\n};\n\n/** Share the accepted Node target grammar between static and packed checks. */\nexport const publishedNodeTargetSupportsConsumer = ({\n target,\n node,\n}: {\n target: string;\n node: string;\n}) => {\n const match = /^node([1-9]\\d*)(?:\\.(0|[1-9]\\d*))?(?:\\.(0|[1-9]\\d*))?$/i.exec(\n target,\n );\n const version =\n match === null\n ? null\n : parse(`${match[1]}.${match[2] ?? \"0\"}.${match[3] ?? \"0\"}`);\n return version !== null && lte(version, node);\n};\n\nexport const checkPublishContract = ({\n packer,\n manifest,\n target,\n contract,\n policy,\n}: CheckPublishContractOptions) => {\n consumerPolicy(policy);\n const current = resolveManifestContract({ packer, manifest, target });\n const committed = parsePublishContract(contract);\n const diagnostics: PublishContractDiagnostic[] = [];\n const add = (field: string, message: string) =>\n diagnostics.push({ field, message });\n const compare = (field: string, expected: unknown, actual: unknown) => {\n if (\n field !== \"entryPoints.exports\" &&\n field !== \"entryPoints.typesVersions\" &&\n record(expected) &&\n record(actual)\n ) {\n for (const key of new Set([\n ...Object.keys(expected),\n ...Object.keys(actual),\n ]))\n compare(\n `${field}.${key}`,\n Object.hasOwn(expected, key) ? expected[key] : undefined,\n Object.hasOwn(actual, key) ? actual[key] : undefined,\n );\n return;\n }\n if (JSON.stringify(expected) !== JSON.stringify(actual))\n add(field, `published ${field} differs from the committed contract`);\n };\n for (const field of [\n \"engines\",\n \"peerDependencies\",\n \"target\",\n \"entryPoints\",\n ] as const)\n compare(field, committed[field], current[field]);\n const support = (\n field: string,\n range: string | undefined,\n version: string,\n ) => {\n if (range !== undefined && !satisfies(version, range))\n add(field, `${field} must support consumer version ${version}`);\n };\n if (\n !consumerNodeSupportMatches({\n range: current.engines[\"node\"],\n node: policy.node,\n })\n )\n add(\n \"engines.node\",\n `engines.node must support consumer version ${policy.node}`,\n );\n support(\n \"engines.typescript\",\n current.engines[\"typescript\"],\n policy.typescript,\n );\n support(\n \"peerDependencies.typescript\",\n current.peerDependencies[\"typescript\"],\n policy.typescript,\n );\n if (\"bun\" in current.engines)\n add(\"engines.bun\", \"published packages must not require Bun\");\n for (const peer of [\"bun\", \"bun-types\", \"@types/bun\", \"@typescript/native\"])\n if (Object.hasOwn(current.peerDependencies, peer))\n add(\n `peerDependencies.${peer}`,\n \"published packages must not require development runtime or compiler packages\",\n );\n if (current.target.type === \"javascript\")\n for (const selected of current.target.targets) {\n if (/^bun(?:$|[0-9])/i.test(selected)) {\n add(\"target\", \"published JavaScript must not require Bun\");\n continue;\n }\n if (!/^node/i.test(selected)) continue;\n if (\n !publishedNodeTargetSupportsConsumer({\n target: selected,\n node: policy.node,\n })\n )\n add(\n \"target\",\n `JavaScript target ${selected} must support consumer Node ${policy.node}`,\n );\n }\n return diagnostics;\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as githubAutomationFileKind } from "./toolchain-inputs.mjs";
|
|
2
2
|
import { r as consumerNodeSupportMatches } from "./toolchain-schema.mjs";
|
|
3
3
|
import { lte, parse, satisfies } from "semver";
|
|
4
|
-
import { parseDocument } from "yaml";
|
|
5
4
|
import { isDeepStrictEqual } from "node:util";
|
|
5
|
+
import { parseDocument } from "yaml";
|
|
6
6
|
//#region src/consumer-release-pack.ts
|
|
7
7
|
const record$1 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
8
|
const exactVersion = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/;
|
|
@@ -15,7 +15,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
15
|
}
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
|
|
19
19
|
value: mod,
|
|
20
20
|
enumerable: true
|
|
21
21
|
}) : target, mod));
|
|
@@ -5,9 +5,9 @@ let node_child_process = require("node:child_process");
|
|
|
5
5
|
let node_path = require("node:path");
|
|
6
6
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
7
7
|
let semver = require("semver");
|
|
8
|
-
let yaml = require("yaml");
|
|
9
|
-
let node_util = require("node:util");
|
|
10
8
|
let smol_toml = require("smol-toml");
|
|
9
|
+
let node_util = require("node:util");
|
|
10
|
+
let yaml = require("yaml");
|
|
11
11
|
//#region src/toolchain-changed-locks.ts
|
|
12
12
|
const toolchainChangedTools = [
|
|
13
13
|
"bun",
|
|
@@ -204,11 +204,13 @@ const lockSourceProof = (raw) => {
|
|
|
204
204
|
source(raw[0]);
|
|
205
205
|
source(raw[1]);
|
|
206
206
|
digest("integrity", raw[3]);
|
|
207
|
-
} else if (changedRecord(raw))
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
207
|
+
} else if (changedRecord(raw)) {
|
|
208
|
+
if (changedRecord(raw["metadata"])) {
|
|
209
|
+
metadata(raw["metadata"]);
|
|
210
|
+
const descriptor = raw["descriptor"];
|
|
211
|
+
source(typeof descriptor === "string" ? descriptor.replace(/^\//, "") : descriptor);
|
|
212
|
+
} else metadata(raw);
|
|
213
|
+
}
|
|
212
214
|
if (sources.some((value) => {
|
|
213
215
|
if (/(?:^|@)(?:link:|portal:|workspace:)/i.test(value)) return true;
|
|
214
216
|
const local = /(?:^|@)file:(.*)$/i.exec(value)?.[1];
|
|
@@ -503,7 +505,7 @@ const readTree = async ({ repo, ref }) => {
|
|
|
503
505
|
], {
|
|
504
506
|
cwd: repo,
|
|
505
507
|
encoding: "utf8",
|
|
506
|
-
maxBuffer:
|
|
508
|
+
maxBuffer: 33554432
|
|
507
509
|
});
|
|
508
510
|
const entries = /* @__PURE__ */ new Map();
|
|
509
511
|
for (const entry of stdout.split("\0")) {
|
|
@@ -536,7 +538,7 @@ const readBlobs = async ({ repo, oids }) => {
|
|
|
536
538
|
let size = 0;
|
|
537
539
|
child.stdout.on("data", (chunk) => {
|
|
538
540
|
size += chunk.length;
|
|
539
|
-
if (size >
|
|
541
|
+
if (size > 134217728) {
|
|
540
542
|
child.kill();
|
|
541
543
|
reject(/* @__PURE__ */ new Error("Toolchain Git snapshot exceeds the read limit"));
|
|
542
544
|
return;
|
|
@@ -1095,10 +1097,11 @@ const parseSnapshot = (snapshot) => {
|
|
|
1095
1097
|
const visit = (entry, at) => {
|
|
1096
1098
|
if (!changedRecord(entry)) return;
|
|
1097
1099
|
for (const [name, specifier] of Object.entries(entry)) {
|
|
1098
|
-
|
|
1100
|
+
const target = typeof specifier === "string" ? packageTarget({
|
|
1099
1101
|
name,
|
|
1100
1102
|
specifier
|
|
1101
|
-
}) : name
|
|
1103
|
+
}) : name;
|
|
1104
|
+
if (changedPackageTool(target) === "typescript") tools.typescript.add(`${file}:${at}:${name}:${stableJson(specifier)}`);
|
|
1102
1105
|
visit(specifier, `${at}:${name}`);
|
|
1103
1106
|
}
|
|
1104
1107
|
};
|
|
@@ -1205,7 +1208,8 @@ const parseSnapshot = (snapshot) => {
|
|
|
1205
1208
|
if (require_toolchain_inputs.isComposeDefinitionPath(file) || /(?:^|\n)\s*(?:apiVersion|kind)\s*:/.test(text)) throw new Error(`Unreadable container declaration: ${file}`);
|
|
1206
1209
|
continue;
|
|
1207
1210
|
}
|
|
1208
|
-
const
|
|
1211
|
+
const value = document.toJS({ maxAliasCount: 100 });
|
|
1212
|
+
const container = require_toolchain_inputs.containerDocumentImages(value, file);
|
|
1209
1213
|
if (container === void 0) {
|
|
1210
1214
|
if (require_toolchain_inputs.isComposeDefinitionPath(file)) throw new Error(`Unclassifiable Compose declaration: ${file}`);
|
|
1211
1215
|
continue;
|
|
@@ -1306,10 +1310,11 @@ const parseSnapshot = (snapshot) => {
|
|
|
1306
1310
|
if (!changedRecord(dependencies)) throw new Error(`Invalid manifest dependency table: ${file}`);
|
|
1307
1311
|
for (const [dependency, specifier] of Object.entries(dependencies)) {
|
|
1308
1312
|
if (typeof specifier !== "string") throw new Error(`Invalid dependency specifier: ${file}`);
|
|
1309
|
-
|
|
1313
|
+
const declaredTarget = packageTarget({
|
|
1310
1314
|
name: dependency,
|
|
1311
1315
|
specifier
|
|
1312
|
-
})
|
|
1316
|
+
});
|
|
1317
|
+
if (changedPackageTool(declaredTarget) === void 0 && changedPackageTool(dependency) === void 0 && !compilerNames.has(dependency)) continue;
|
|
1313
1318
|
const effectiveSpecifier = effectiveCatalogSpecifier({
|
|
1314
1319
|
snapshot,
|
|
1315
1320
|
file,
|