@stll/oxlint-config 1.0.2 → 1.2.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 +97 -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 +25 -15
- package/dist/toolchain-changed.cjs.map +1 -1
- package/dist/toolchain-changed.mjs +27 -17
- 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 +72 -48
- package/dist/toolchain-guard.cjs.map +1 -1
- package/dist/toolchain-guard.mjs +79 -55
- package/dist/toolchain-guard.mjs.map +1 -1
- package/dist/toolchain-inputs.cjs +803 -40
- package/dist/toolchain-inputs.cjs.map +1 -1
- package/dist/toolchain-inputs.mjs +768 -41
- 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":"consumer-compat-cli.mjs","names":["record","parse","parse"],"sources":["../src/consumer-build-approvals.ts","../src/consumer-installed-bins.ts","../src/consumer-react.ts","../src/publish-artifact-syntax.ts","../src/consumer-compat.ts","../src/consumer-compat-arguments.ts","../src/consumer-compat-cli.ts"],"sourcesContent":["import { lstat, readFile, realpath } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { valid } from \"semver\";\n\nimport { consumerRecord } from \"./consumer-compat-config\";\n\n// Direct fixture declarations select installed identities; aliases never grant\n// approval to the dependency key or to undeclared transitive packages.\nexport const consumerBuildApprovals = async ({\n manifest,\n lock,\n manager,\n directory,\n}: {\n manifest: Record<string, unknown>;\n lock: unknown;\n manager: \"npm\" | \"pnpm\";\n directory: string;\n}) => {\n if (!consumerRecord(lock))\n throw new Error(\"invalid consumer dependency lock\");\n const approvals: Record<string, true> = {};\n const rebuildTargets = new Set<string>();\n for (const field of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ]) {\n const entries = manifest[field];\n if (entries === undefined) continue;\n if (!consumerRecord(entries)) throw new Error(`invalid fixture ${field}`);\n for (const key of Object.keys(entries)) {\n const packages = lock[\"packages\"];\n const importers = lock[\"importers\"];\n const importer = consumerRecord(importers) ? importers[\".\"] : undefined;\n const dependencies = consumerRecord(importer)\n ? importer[field]\n : undefined;\n const dependencyTable = manager === \"npm\" ? packages : dependencies;\n const installedKey = manager === \"npm\" ? `node_modules/${key}` : key;\n const dependency = consumerRecord(dependencyTable)\n ? dependencyTable[installedKey]\n : undefined;\n if (!consumerRecord(dependency)) {\n if (field === \"optionalDependencies\") continue;\n throw new Error(`missing resolved fixture dependency identity: ${key}`);\n }\n const installedDirectory = path.join(directory, \"node_modules\", key);\n if (field === \"optionalDependencies\") {\n try {\n await lstat(installedDirectory);\n } catch (error) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n )\n continue;\n throw error;\n }\n }\n const installed: unknown = JSON.parse(\n await readFile(path.join(installedDirectory, \"package.json\"), \"utf8\"),\n );\n if (\n !consumerRecord(installed) ||\n typeof installed[\"name\"] !== \"string\" ||\n installed[\"name\"] === \"\" ||\n typeof installed[\"version\"] !== \"string\" ||\n valid(installed[\"version\"]) === null\n )\n throw new Error(\n `invalid installed fixture dependency identity: ${key}`,\n );\n const identity = `${installed[\"name\"]}@${installed[\"version\"]}`;\n // npm name selectors use the alias key; exact directories select only this installed node.\n rebuildTargets.add(await realpath(installedDirectory));\n const resolved = dependency[\"resolved\"];\n if (\n manager === \"npm\" &&\n typeof resolved === \"string\" &&\n !resolved.startsWith(\"https://registry.npmjs.org/\")\n )\n approvals[\n resolved.startsWith(\"file:\") ? resolved : `file:${resolved}`\n ] = true;\n else {\n const version = dependency[\"version\"];\n // pnpm matches local artifact builds by resolved source, using the installed real name.\n const source =\n manager === \"pnpm\" &&\n typeof version === \"string\" &&\n version.startsWith(\"file:\")\n ? version.replace(/\\([^)]*\\)/g, \"\")\n : undefined;\n approvals[\n source === undefined ? identity : `${installed[\"name\"]}@${source}`\n ] = true;\n }\n }\n }\n return { approvals, rebuildTargets: [...rebuildTargets] };\n};\n","import { lstat, readdir, realpath } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport const consumerReservedToolBins = [\"node\", \"npm\", \"npx\", \"pnpm\"] as const;\n\nconst missing = (error: unknown) =>\n error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n\n/** Dependency lifecycle PATHs include nested and virtual-store node_modules bins. */\nexport const assertConsumerInstalledToolBins = async (directory: string) => {\n const root = await realpath(directory);\n const visited = new Set<string>();\n const assertContained = (canonical: string) => {\n const relative = path.relative(root, canonical);\n if (\n relative === \"..\" ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n )\n throw new Error(\n \"installed consumer dependency path must stay within the fixture\",\n );\n };\n const visit = async (location: string) => {\n const canonical = await realpath(location);\n assertContained(canonical);\n if (\n path.basename(location) === \".bin\" &&\n path.basename(path.dirname(location)) === \"node_modules\"\n ) {\n for (const name of consumerReservedToolBins) {\n try {\n await lstat(path.join(location, name));\n } catch (error) {\n if (missing(error)) continue;\n throw error;\n }\n throw new Error(\n `installed consumer binary ${name} conflicts with the pinned tool before lifecycle scripts`,\n );\n }\n }\n if (visited.has(canonical)) return;\n visited.add(canonical);\n for (const entry of await readdir(canonical, { withFileTypes: true })) {\n if (entry.isDirectory()) await visit(path.join(canonical, entry.name));\n else if (entry.isSymbolicLink()) {\n const target = await realpath(path.join(canonical, entry.name));\n assertContained(target);\n if ((await lstat(target)).isDirectory())\n await visit(path.join(canonical, entry.name));\n }\n }\n };\n const modules = path.join(root, \"node_modules\");\n try {\n await lstat(modules);\n } catch (error) {\n if (missing(error)) return;\n throw error;\n }\n await visit(modules);\n};\n","import { compare, satisfies, valid, validRange } from \"semver\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\ntype PublishedVersionsOptions = {\n versions: Record<string, unknown>;\n range: string;\n};\nconst publishedVersions = ({ versions, range }: PublishedVersionsOptions) => {\n if (!validRange(range))\n throw new Error(`invalid consumer peer range: ${range}`);\n const candidates = Object.keys(versions)\n .filter((version) => valid(version) !== null && satisfies(version, range))\n .sort(compare);\n if (candidates.length === 0)\n throw new Error(`no published consumer version satisfies ${range}`);\n return candidates;\n};\n\ntype ConsumerReactVersionsOptions = {\n reactRange: string;\n reactVersions: Record<string, unknown>;\n dom?:\n | {\n range?: string | undefined;\n versions: Record<string, unknown>;\n }\n | undefined;\n};\n\n/** Select the oldest published React with a compatible allowed renderer when required. */\nexport const selectConsumerReactVersions = ({\n reactRange,\n reactVersions,\n dom,\n}: ConsumerReactVersionsOptions) => {\n const reactCandidates = publishedVersions({\n versions: reactVersions,\n range: reactRange,\n });\n if (dom === undefined) {\n const react = reactCandidates.at(0);\n if (react === undefined) throw new Error(\"Missing React version candidate\");\n return { react };\n }\n const domRange = dom.range ?? \"*\";\n const domCandidates = publishedVersions({\n versions: dom.versions,\n range: domRange,\n });\n for (const react of reactCandidates) {\n const renderer = domCandidates.find((version) => {\n const metadata = dom.versions[version];\n if (!record(metadata) || !record(metadata[\"peerDependencies\"]))\n return false;\n const range = metadata[\"peerDependencies\"][\"react\"];\n return (\n typeof range === \"string\" &&\n validRange(range) !== null &&\n satisfies(react, range)\n );\n });\n if (renderer !== undefined) return { react, \"react-dom\": renderer };\n }\n throw new Error(\n `no published React/ReactDOM pair satisfies React ${reactRange} and ReactDOM ${domRange}`,\n );\n};\n","import { parse, type Options } from \"acorn\";\nimport { execFile } from \"node:child_process\";\nimport { mkdtemp, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { wrap } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\n\nimport {\n publishedNodeTargetSupportsConsumer,\n type PublishTarget,\n} from \"./publish-contract\";\n\nconst command = promisify(execFile);\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst javascript = /\\.(?:js|mjs|cjs)$/i;\n\nconst syntaxYears = new Map(\n Object.entries({\n es5: 5,\n es2015: 2015,\n es2016: 2016,\n es2017: 2017,\n es2018: 2018,\n es2019: 2019,\n es2020: 2020,\n es2021: 2021,\n es2022: 2022,\n es2023: 2023,\n es2024: 2024,\n es2025: 2025,\n } as const satisfies Record<string, Options[\"ecmaVersion\"]>),\n);\n\n/** Explicit ECMAScript targets bound syntax; unbounded targets use native Node. */\nexport const artifactEcmaVersion = ({\n target,\n node,\n}: {\n target: PublishTarget;\n node: string;\n}): Options[\"ecmaVersion\"] => {\n if (target.type === \"types-only\") return \"latest\";\n if (target.targets.length === 0)\n throw new Error(\"Packed JavaScript requires a declared target\");\n let version: Options[\"ecmaVersion\"] = \"latest\";\n for (const identifier of target.targets) {\n if (identifier === \"esnext\") continue;\n const year = syntaxYears.get(identifier);\n if (year !== undefined) {\n if (version === \"latest\" || year < version) version = year;\n continue;\n }\n if (publishedNodeTargetSupportsConsumer({ target: identifier, node }))\n continue;\n throw new Error(\n `Unsupported packed JavaScript syntax target ${identifier}; use an explicit ECMAScript year or a supported Node target`,\n );\n }\n return version;\n};\n\nconst packedBinFiles = (files: Map<string, string>) => {\n const result = new Set<string>();\n for (const [file, source] of files) {\n if (path.posix.basename(file) !== \"package.json\") continue;\n const manifest: unknown = JSON.parse(source);\n if (!record(manifest)) throw new Error(`Invalid packed manifest: ${file}`);\n const bin = manifest[\"bin\"];\n if (bin === undefined) continue;\n let entries: unknown[] | undefined;\n if (typeof bin === \"string\") entries = [bin];\n else if (record(bin)) entries = Object.values(bin);\n if (entries === undefined)\n throw new Error(`Unsupported packed bin declaration: ${file}`);\n for (const entry of entries) {\n if (\n typeof entry !== \"string\" ||\n entry === \"\" ||\n path.posix.isAbsolute(entry) ||\n entry.includes(\"\\\\\") ||\n entry.split(\"/\").includes(\"..\")\n )\n throw new Error(`Unsafe packed bin declaration: ${file}`);\n result.add(path.posix.join(path.posix.dirname(file), entry));\n }\n }\n return result;\n};\nconst syntaxFiles = (files: Map<string, string>) => {\n const bins = packedBinFiles(files);\n for (const file of bins) {\n const source = files.get(file);\n if (source === undefined)\n throw new Error(`Missing packed executable: ${file}`);\n if (\n !javascript.test(file) &&\n !/^#!(?:[^\\n]*\\/node|\\/usr\\/bin\\/env(?: -S)? node)(?:[ \\r\\n]|$)/.test(\n source,\n )\n )\n throw new Error(`Unsupported packed executable language: ${file}`);\n }\n return [\n ...new Set(\n [...files.keys()]\n .filter((file) => javascript.test(file))\n .concat([...bins]),\n ),\n ];\n};\n\nconst packageMode = (\n files: Map<string, string>,\n file: string,\n): \"module\" | \"script\" | \"detect\" => {\n let directory = path.posix.dirname(file);\n while (directory !== \".\") {\n const source = files.get(`${directory}/package.json`);\n if (source !== undefined) {\n const manifest: unknown = JSON.parse(source);\n if (!record(manifest))\n throw new Error(`Invalid packed manifest: ${directory}`);\n if (manifest[\"type\"] === \"module\") return \"module\";\n if (manifest[\"type\"] === \"commonjs\") return \"script\";\n if (manifest[\"type\"] !== undefined)\n throw new Error(`Invalid packed package type: ${directory}`);\n return \"detect\";\n }\n directory = path.posix.dirname(directory);\n }\n return \"detect\";\n};\n\ntype ArtifactSyntaxOptions = {\n files: Map<string, string>;\n target: PublishTarget;\n node: string;\n};\n\nconst parseArtifactSource = (source: string, options: Options) => {\n const script = options.sourceType === \"script\";\n const content = script\n ? source.replace(/^\\uFEFF/, \"\").replace(/^#![^\\r\\n]*/, \"\")\n : source;\n try {\n return parse(script ? wrap(content) : content, options);\n } catch (error) {\n if (\n !script ||\n !(error instanceof SyntaxError) ||\n !record(error) ||\n typeof error[\"pos\"] !== \"number\"\n )\n throw error;\n const prefixLength = wrap(\"\\u0000\").indexOf(\"\\u0000\");\n const position = Math.max(\n 0,\n Math.min(\n source.length,\n error[\"pos\"] - prefixLength + source.length - content.length,\n ),\n );\n const lines = source.slice(0, position).split(/\\r\\n|[\\n\\r\\u2028\\u2029]/);\n const location = `(${lines.length}:${lines.at(-1)?.length ?? 0})`;\n throw new SyntaxError(error.message.replace(/\\(\\d+:\\d+\\)$/, location));\n }\n};\n\n/** Enumerate all chunks and bins, including JavaScript outside declared exports. */\nexport const assertPackedArtifactSyntax = ({\n files,\n target,\n node,\n}: ArtifactSyntaxOptions) => {\n const ecmaVersion = artifactEcmaVersion({ target, node });\n const selected = syntaxFiles(files);\n if (target.type === \"types-only\" && selected.length > 0)\n throw new Error(`Types-only artifact contains JavaScript: ${selected[0]}`);\n for (const file of selected) {\n const source = files.get(file);\n if (source === undefined)\n throw new Error(`Missing packed JavaScript: ${file}`);\n let mode = packageMode(files, file);\n if (/\\.mjs$/i.test(file)) mode = \"module\";\n if (/\\.cjs$/i.test(file)) mode = \"script\";\n const parseMode = (sourceType: \"script\" | \"module\") => {\n const tree = parseArtifactSource(source, {\n ecmaVersion,\n sourceType,\n allowHashBang: true,\n allowReturnOutsideFunction: sourceType === \"script\",\n });\n // Acorn permits module declarations independently of ecmaVersion.\n if (\n ecmaVersion === 5 &&\n tree.body.some((item) => /^(?:Import|Export)/.test(item.type))\n )\n throw new Error(\"Module declarations exceed ES5\");\n };\n try {\n if (mode === \"detect\") {\n try {\n parseMode(\"script\");\n } catch {\n parseMode(\"module\");\n }\n } else parseMode(mode);\n } catch (error) {\n throw new Error(\n `Packed JavaScript ${file} exceeds its declared syntax target: ${String(error)}`,\n );\n }\n }\n};\n\nconst archiveMembers = (members: readonly string[]) => {\n const seen = new Set<string>();\n for (const file of members) {\n const parts = file.split(\"/\");\n if (\n !file.startsWith(\"package/\") ||\n file.includes(\"\\\\\") ||\n file\n .split(\"\")\n .some(\n (character) =>\n character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n ) ||\n parts.some((part) => part === \"..\" || part === \".\") ||\n parts.slice(0, -1).some((part) => part === \"\") ||\n seen.has(file)\n )\n throw new Error(`Unsupported packed artifact member: ${file}`);\n seen.add(file);\n }\n return members;\n};\n\ntype CheckPackedArtifactOptions = ArtifactSyntaxOptions & {\n executable: string;\n};\nexport const checkPackedJavaScriptWithNode = async ({\n files,\n target,\n node,\n executable,\n}: CheckPackedArtifactOptions) => {\n assertPackedArtifactSyntax({ files, target, node });\n archiveMembers([...files.keys()]);\n const scratch = await mkdtemp(path.join(tmpdir(), \"stll-artifact-syntax-\"));\n try {\n for (const [file, source] of files) {\n const destination = path.join(scratch, file);\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, source);\n }\n for (const file of syntaxFiles(files)) {\n try {\n await command(executable, [\"--check\", path.join(scratch, file)], {\n cwd: scratch,\n env: { PATH: \"/usr/bin:/bin\", HOME: scratch },\n });\n } catch (error) {\n throw new Error(\n `Packed JavaScript ${file} is incompatible with consumer Node ${node}: ${String(error)}`,\n );\n }\n }\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n};\n\n/** Read bytes without extracting archive-controlled paths or links. */\nexport const readPackedSyntaxFiles = async (archive: string) => {\n const { stdout: listing } = await command(\"tar\", [\"-tzf\", archive], {\n maxBuffer: 16 * 1024 * 1024,\n });\n const files = new Map<string, string>();\n const members = archiveMembers(\n listing.split(\"\\n\").filter((entry) => entry !== \"\"),\n );\n const read = async (file: string) => {\n if (!members.includes(file))\n throw new Error(`Missing packed syntax input: ${file}`);\n const { stdout: metadata } = await command(\"tar\", [\"-tvzf\", archive, file]);\n if (\n !metadata.startsWith(\"-\") ||\n metadata.trimEnd().split(\"\\n\").length !== 1\n )\n throw new Error(`Packed syntax input must be a regular file: ${file}`);\n const { stdout } = await command(\"tar\", [\"-xOf\", archive, file], {\n maxBuffer: 16 * 1024 * 1024,\n });\n files.set(file, stdout);\n };\n for (const file of members)\n if (javascript.test(file) || path.posix.basename(file) === \"package.json\")\n await read(file);\n for (const file of packedBinFiles(files))\n if (!files.has(file)) await read(file);\n return files;\n};\n","import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport {\n cp,\n lstat,\n mkdir,\n mkdtemp,\n readFile,\n readdir,\n realpath,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { parse, stringify } from \"yaml\";\n\nimport { consumerBuildApprovals } from \"./consumer-build-approvals\";\nimport {\n bunCatalogState,\n catalogState,\n pnpmWorkspaceState,\n} from \"./consumer-catalogs\";\nimport {\n consumerPackageClosure,\n consumerStagingPaths,\n consumerPackRootManifest,\n assertConsumerFixtureManifest,\n assertConsumerFixtureKind,\n assertConsumerFixtureSelection,\n bindConsumerManifest,\n consumerDependencyConfigFiles,\n consumerRecord,\n consumerRelativePath,\n discoverConsumerManifests,\n discoverConsumerPackages,\n parseConsumerFixtures,\n type ConsumerFixture,\n type ConsumerPackage,\n} from \"./consumer-compat-config\";\nimport { assertConsumerInstalledToolBins } from \"./consumer-installed-bins\";\nimport { assertConsumerNodeSupport } from \"./consumer-node-support\";\nimport { selectConsumerReactVersions } from \"./consumer-react\";\nimport {\n resolveConsumerReleasePack,\n consumerReleasePackArguments,\n type ConsumerReleasePack,\n} from \"./consumer-release-pack\";\nimport {\n checkPackedJavaScriptWithNode,\n readPackedSyntaxFiles,\n} from \"./publish-artifact-syntax\";\nimport { checkPublishContract, parsePublishContract } from \"./publish-contract\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\ntype CommandOptions = { cwd: string; env?: NodeJS.ProcessEnv };\nconst execute = (\n executable: string,\n args: readonly string[],\n { cwd, env = process.env }: CommandOptions,\n) =>\n new Promise<string>((resolve, reject) => {\n const child = spawn(executable, args, {\n cwd,\n env,\n stdio: [\"ignore\", \"pipe\", \"inherit\"],\n });\n const chunks: Buffer[] = [];\n child.stdout.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n child.on(\"error\", reject);\n child.on(\"close\", (code, signal) => {\n const output = Buffer.concat(chunks).toString(\"utf8\");\n if (code !== 0)\n reject(\n new Error(\n `${executable} failed (${signal ?? String(code)}): ${output.trim()}`,\n ),\n );\n else resolve(output);\n });\n });\n\nconst jsonFile = async (file: string) => {\n const value: unknown = JSON.parse(await readFile(file, \"utf8\"));\n if (!consumerRecord(value)) throw new Error(`expected JSON object: ${file}`);\n return value;\n};\n\nconst containedDirectory = async (root: string, relative: string) => {\n const location = await realpath(path.resolve(root, relative));\n const difference = path.relative(root, location);\n if (\n difference.startsWith(`..${path.sep}`) ||\n difference === \"..\" ||\n path.isAbsolute(difference)\n )\n throw new Error(`path leaves repository: ${relative}`);\n if (!(await lstat(location)).isDirectory())\n throw new Error(`not a directory: ${relative}`);\n return location;\n};\n\nconst fetchBytes = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok)\n throw new Error(`download failed (${response.status}): ${url}`);\n if (new URL(response.url).hostname !== new URL(url).hostname)\n throw new Error(`download redirected to another host: ${url}`);\n return Buffer.from(await response.arrayBuffer());\n};\n\nexport const verifyConsumerNodeArchive = ({\n filename,\n checksums,\n archive,\n}: {\n filename: string;\n checksums: string;\n archive: Uint8Array;\n}) => {\n const hashes = checksums.split(/\\r?\\n/).flatMap((line) => {\n const match = /^([a-f0-9]{64})\\s+\\*?(\\S+)$/.exec(line);\n return match?.[2] === filename && match[1] ? [match[1]] : [];\n });\n if (\n hashes.length !== 1 ||\n hashes[0] !== createHash(\"sha256\").update(archive).digest(\"hex\")\n )\n throw new Error(`Node archive checksum mismatch: ${filename}`);\n};\n\ntype ResolveInstalledManagerBinOptions = {\n directory: string;\n name: \"npm\" | \"pnpm\";\n};\nexport const resolveInstalledManagerBin = async ({\n directory,\n name,\n}: ResolveInstalledManagerBinOptions) => {\n const manifest = await jsonFile(path.join(directory, \"package.json\"));\n const bin = manifest[\"bin\"];\n const selector = consumerRecord(bin) ? bin[name] : bin;\n if (typeof selector !== \"string\" || selector.length === 0)\n throw new Error(`Installed ${name} package must declare its ${name} bin`);\n const root = await realpath(directory);\n const resolved = path.resolve(root, selector);\n const relative = path.relative(root, resolved);\n if (\n relative === \"..\" ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n )\n throw new Error(`Installed ${name} bin leaves its package`);\n const cli = await realpath(resolved);\n const actualRelative = path.relative(root, cli);\n if (\n actualRelative === \"..\" ||\n actualRelative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(actualRelative)\n )\n throw new Error(`Installed ${name} bin leaves its package`);\n if (!(await lstat(cli)).isFile())\n throw new Error(`Installed ${name} bin must be a file`);\n return cli;\n};\n\ntype ConsumerTools = { node: string; npm: string; pnpm: string; bin: string };\ntype WriteConsumerToolWrappersOptions = {\n node: string;\n npm: string;\n pnpm: string;\n directory: string;\n};\nexport const writeConsumerToolWrappers = async ({\n node,\n npm,\n pnpm,\n directory,\n}: WriteConsumerToolWrappersOptions) => {\n // Explicit wrappers keep fixture scripts and nested package-manager invocations on the consumer runtime.\n const wrappers = directory;\n await mkdir(wrappers);\n const quote = (value: string) => `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n await writeFile(\n path.join(wrappers, \"node\"),\n `#!/bin/sh\\nexec ${quote(node)} \"$@\"\\n`,\n { mode: 0o755 },\n );\n for (const [name, cli] of [\n [\"npm\", npm],\n [\"npx\", path.join(path.dirname(npm), \"npx-cli.js\")],\n [\"pnpm\", pnpm],\n ]) {\n if (!name || !cli) throw new Error(\"missing package manager binding\");\n await writeFile(\n path.join(wrappers, name),\n `#!/bin/sh\\nexec ${quote(node)} ${quote(cli)} \"$@\"\\n`,\n { mode: 0o755 },\n );\n }\n return {\n node,\n npm,\n pnpm,\n bin: wrappers,\n };\n};\n\nexport const provisionConsumerTools = async (\n scratch: string,\n policy: ReturnType<typeof parseToolchainPolicy>,\n): Promise<ConsumerTools> => {\n if (\n process.platform !== \"linux\" ||\n (process.arch !== \"x64\" && process.arch !== \"arm64\")\n )\n throw new Error(\"consumer compatibility requires Linux x64 or arm64\");\n const filename = `node-v${policy.consumerNode}-linux-${process.arch}.tar.xz`;\n const base = `https://nodejs.org/dist/v${policy.consumerNode}/`;\n const [archive, checksums] = await Promise.all([\n fetchBytes(`${base}${filename}`),\n fetchBytes(`${base}SHASUMS256.txt`),\n ]);\n verifyConsumerNodeArchive({\n filename,\n archive,\n checksums: checksums.toString(\"utf8\"),\n });\n const archivePath = path.join(scratch, filename);\n await writeFile(archivePath, archive);\n await execute(\n \"tar\",\n [\"-xJf\", archivePath, \"-C\", scratch, \"--no-same-owner\"],\n { cwd: scratch },\n );\n const installation = path.join(scratch, filename.slice(0, -7));\n const bin = path.join(installation, \"bin\");\n const node = path.join(bin, \"node\");\n const home = path.join(scratch, \"tools-home\");\n await mkdir(home);\n await writeFile(path.join(home, \"npmrc\"), \"\");\n const env = consumerCommandEnvironment({\n tools: { bin },\n directory: scratch,\n home,\n });\n const actual = (\n await execute(node, [\"--version\"], { cwd: scratch, env })\n ).trim();\n if (actual !== `v${policy.consumerNode}`)\n throw new Error(`consumer Node version mismatch: ${actual}`);\n const prefix = path.join(scratch, \"tools\");\n const npmBootstrap = path.join(\n installation,\n \"lib/node_modules/npm/bin/npm-cli.js\",\n );\n await execute(\n node,\n [\n npmBootstrap,\n \"install\",\n \"--prefix\",\n prefix,\n \"--ignore-scripts\",\n \"--no-audit\",\n \"--no-fund\",\n \"--package-lock=false\",\n `npm@${policy.consumerNpm}`,\n `pnpm@${policy.consumerPnpm}`,\n ],\n { cwd: scratch, env },\n );\n const npm = await resolveInstalledManagerBin({\n directory: path.join(prefix, \"node_modules/npm\"),\n name: \"npm\",\n });\n const pnpm = await resolveInstalledManagerBin({\n directory: path.join(prefix, \"node_modules/pnpm\"),\n name: \"pnpm\",\n });\n for (const [cli, expected] of [\n [npm, policy.consumerNpm],\n [pnpm, policy.consumerPnpm],\n ]) {\n if (\n !cli ||\n !expected ||\n (\n await execute(node, [cli, \"--version\"], { cwd: scratch, env })\n ).trim() !== expected\n )\n throw new Error(\"consumer package manager version mismatch\");\n }\n return writeConsumerToolWrappers({\n node,\n npm,\n pnpm,\n directory: path.join(scratch, \"consumer-bin\"),\n });\n};\n\nconst trackedManifests = async (root: string) => {\n const listed = await execute(\n \"git\",\n [\n \"ls-files\",\n \"-z\",\n \"--\",\n \"package.json\",\n \"**/package.json\",\n \"pnpm-workspace.yaml\",\n \"**/pnpm-workspace.yaml\",\n \"publish-contract.json\",\n \"**/publish-contract.json\",\n \".github/workflows/*.yml\",\n \".github/workflows/*.yaml\",\n ],\n { cwd: root },\n );\n const files: Record<string, string> = {};\n for (const file of listed.split(\"\\0\").filter(Boolean)) {\n if (\n file\n .split(\"/\")\n .some((part) => part === \"node_modules\" || part === \"vendor\")\n )\n continue;\n const location = await realpath(path.join(root, file));\n const relative = path.relative(root, location);\n if (\n relative.startsWith(`..${path.sep}`) ||\n relative === \"..\" ||\n path.isAbsolute(relative)\n )\n throw new Error(`tracked manifest leaves repository: ${file}`);\n files[file] = await readFile(location, \"utf8\");\n }\n return files;\n};\n\nconst packFilename = async (directory: string) => {\n const files = (await readdir(directory)).filter((file) =>\n file.endsWith(\".tgz\"),\n );\n if (files.length !== 1)\n throw new Error(`expected exactly one package tarball: ${directory}`);\n const filename = files.at(0);\n if (!filename) throw new Error(\"missing package tarball\");\n return path.join(directory, filename);\n};\n\nconst copyWithoutDependencies = async (source: string, destination: string) => {\n await cp(source, destination, {\n recursive: true,\n filter: async (file) => {\n if (\n [\"node_modules\", \".git\", \"pnpm-workspace.yaml\"].includes(\n path.basename(file),\n )\n )\n return false;\n if ((await lstat(file)).isSymbolicLink())\n throw new Error(`consumer staging does not accept symlinks: ${file}`);\n return true;\n },\n });\n};\n\ntype StageConsumerWorkspaceOptions = {\n files: Record<string, string>;\n root: string;\n staging: string;\n packages: Map<string, ConsumerPackage>;\n};\nexport const stageConsumerWorkspace = async ({\n files,\n root,\n staging,\n packages,\n}: StageConsumerWorkspaceOptions) => {\n const directories = new Map<string, string>();\n const paths = consumerStagingPaths(packages);\n const ordered = [...packages.values()].sort(\n (left, right) => left.directory.length - right.directory.length,\n );\n for (const pkg of ordered) {\n const relative = paths.get(pkg.name);\n if (!relative) throw new Error(`missing staging path: ${pkg.name}`);\n const destination = path.join(staging, relative);\n if (pkg.directory !== \".\" || pkg.manifest[\"private\"] !== true)\n await copyWithoutDependencies(\n await containedDirectory(root, pkg.directory),\n destination,\n );\n directories.set(pkg.name, destination);\n }\n const rootManifest = consumerPackRootManifest(packages, files);\n await writeFile(\n path.join(staging, \"package.json\"),\n JSON.stringify(rootManifest),\n );\n const rootSource = files[\"pnpm-workspace.yaml\"];\n const rootCatalogs =\n rootSource === undefined\n ? bunCatalogState(rootManifest)\n : catalogState(\n pnpmWorkspaceState(rootSource, \"pnpm-workspace.yaml\"),\n \"pnpm-workspace.yaml\",\n );\n await writeFile(\n path.join(staging, \"pnpm-workspace.yaml\"),\n stringify({\n packages: [...directories.values()].map(\n (directory) =>\n path.relative(staging, directory).split(path.sep).join(\"/\") || \".\",\n ),\n ...rootCatalogs,\n }),\n );\n for (const [directory, manifest] of discoverConsumerManifests(files)) {\n if (directory === \".\") continue;\n const file = `${directory}/pnpm-workspace.yaml`;\n const source = files[file];\n let workspace: Record<string, unknown>;\n if (source !== undefined) workspace = pnpmWorkspaceState(source, file);\n else {\n const catalogs = bunCatalogState(manifest);\n if (Object.keys(catalogs).length === 0) continue;\n const declaration = manifest[\"workspaces\"];\n const patterns = consumerRecord(declaration)\n ? declaration[\"packages\"]\n : declaration;\n if (\n !Array.isArray(patterns) ||\n !patterns.every((entry: unknown) => typeof entry === \"string\")\n )\n throw new Error(\n `catalog owner requires declared workspace packages: ${directory}`,\n );\n workspace = { packages: patterns, ...catalogs };\n }\n const destination = path.join(staging, directory);\n await mkdir(destination, { recursive: true });\n await writeFile(\n path.join(destination, \"package.json\"),\n JSON.stringify(manifest),\n );\n await writeFile(\n path.join(destination, \"pnpm-workspace.yaml\"),\n stringify(workspace),\n );\n }\n return directories;\n};\n\nexport {\n assertConsumerInstalledToolBins,\n consumerReservedToolBins,\n} from \"./consumer-installed-bins\";\n\nexport const assertConsumerFixtureFiles = async (directory: string) => {\n const visit = async (location: string) => {\n for (const entry of await readdir(location, { withFileTypes: true })) {\n if (consumerDependencyConfigFiles.some((name) => name === entry.name))\n throw new Error(\n `consumer fixture must not supply dependency-manager configuration: ${entry.name}`,\n );\n if (\n entry.isDirectory() &&\n entry.name !== \"node_modules\" &&\n entry.name !== \".git\"\n )\n await visit(path.join(location, entry.name));\n }\n };\n await visit(directory);\n assertConsumerFixtureManifest(\n await jsonFile(path.join(directory, \"package.json\")),\n );\n};\n\ntype ProvisionConsumerReleasePackerOptions = {\n tools: ConsumerTools;\n scratch: string;\n release: ConsumerReleasePack;\n};\nconst provisionConsumerReleasePacker = async ({\n tools,\n scratch,\n release,\n}: ProvisionConsumerReleasePackerOptions) => {\n const prefix = path.join(scratch, \"release-packer\");\n const home = path.join(scratch, \"release-packer-home\");\n await mkdir(home);\n await writeFile(path.join(home, \"npmrc\"), \"\");\n const env = consumerCommandEnvironment({ tools, directory: scratch, home });\n await execute(\n tools.node,\n [\n tools.npm,\n \"install\",\n \"--prefix\",\n prefix,\n \"--ignore-scripts\",\n \"--no-audit\",\n \"--no-fund\",\n \"--package-lock=false\",\n `${release.manager}@${release.version}`,\n ],\n { cwd: scratch, env },\n );\n const cli = await resolveInstalledManagerBin({\n directory: path.join(prefix, \"node_modules\", release.manager),\n name: release.manager,\n });\n const actual = (\n await execute(tools.node, [cli, \"--version\"], { cwd: scratch, env })\n ).trim();\n if (actual !== release.version)\n throw new Error(\n `release packer version mismatch: expected ${release.version}, got ${actual}`,\n );\n return cli;\n};\n\ntype PackOptions = {\n files: Record<string, string>;\n root: string;\n scratch: string;\n tools: ConsumerTools;\n packages: Map<string, ConsumerPackage>;\n workspacePackages: Map<string, ConsumerPackage>;\n};\nexport const packConsumerArtifacts = async ({\n files,\n root,\n scratch,\n tools,\n packages,\n workspacePackages,\n}: PackOptions) => {\n const release = resolveConsumerReleasePack(files);\n const releaseCli = await provisionConsumerReleasePacker({\n tools,\n scratch,\n release,\n });\n const artifacts = new Map<string, string>();\n const staging = path.join(scratch, \"pack-workspace\");\n await mkdir(staging);\n const stagedDirectories = await stageConsumerWorkspace({\n files,\n root,\n staging,\n packages: workspacePackages,\n });\n const packHome = path.join(scratch, \"pack-home\");\n await mkdir(packHome);\n await writeFile(path.join(packHome, \"npmrc\"), \"\");\n for (const [index, pkg] of [...packages.values()].entries()) {\n const packed = path.join(scratch, `packed-${index}`);\n await mkdir(packed);\n const directory = stagedDirectories.get(pkg.name);\n if (!directory)\n throw new Error(`missing pack workspace member: ${pkg.name}`);\n await execute(\n tools.node,\n [\n releaseCli,\n ...consumerReleasePackArguments({ packer: release, directory: packed }),\n ],\n {\n cwd: directory,\n env: consumerCommandEnvironment({ tools, directory, home: packHome }),\n },\n );\n const artifact = await packFilename(packed);\n artifacts.set(pkg.name, artifact);\n }\n return artifacts;\n};\n\nconst registryMetadata = async (name: string) => {\n const value: unknown = JSON.parse(\n (\n await fetchBytes(`https://registry.npmjs.org/${encodeURIComponent(name)}`)\n ).toString(\"utf8\"),\n );\n if (!consumerRecord(value) || !consumerRecord(value[\"versions\"]))\n throw new Error(`invalid registry response: ${name}`);\n return value[\"versions\"];\n};\n\nexport const consumerCommandEnvironment = ({\n tools,\n directory,\n home,\n environment = process.env,\n}: {\n tools: Pick<ConsumerTools, \"bin\">;\n directory: string;\n home: string;\n environment?: NodeJS.ProcessEnv;\n}) => {\n const env = Object.fromEntries(\n Object.entries(environment).filter(\n ([key]) =>\n !/^(?:npm_config_|pnpm_|yarn_|corepack_)/i.test(key) &&\n key !== \"NODE_PATH\" &&\n key !== \"NODE_OPTIONS\",\n ),\n );\n Object.assign(env, {\n PATH: `${tools.bin}${path.delimiter}${path.join(directory, \"node_modules/.bin\")}${path.delimiter}/usr/bin${path.delimiter}/bin`,\n HOME: home,\n npm_config_cache: path.join(home, \"npm-cache\"),\n npm_config_userconfig: path.join(home, \"npmrc\"),\n npm_config_registry: \"https://registry.npmjs.org/\",\n // Project packageManager fields cannot replace the verified consumer/release tools.\n pnpm_config_pm_on_fail: \"ignore\",\n // Pre-11 release packers use this setting instead of pmOnFail.\n npm_config_manage_package_manager_versions: \"false\",\n COREPACK_ENABLE_PROJECT_SPEC: \"0\",\n COREPACK_ENABLE_STRICT: \"0\",\n COREPACK_ENABLE_AUTO_PIN: \"0\",\n COREPACK_ENABLE_NETWORK: \"0\",\n COREPACK_ENV_FILE: \"0\",\n CI: \"true\",\n NODE_ENV: \"development\",\n XDG_CONFIG_HOME: path.join(home, \"config\"),\n XDG_CACHE_HOME: path.join(home, \"cache\"),\n XDG_DATA_HOME: path.join(home, \"data\"),\n });\n return env;\n};\n\nconst fixtureCommand = (argv: string[], tools: ConsumerTools) => {\n const executable = argv.at(0);\n if (\n argv\n .slice(1)\n .some(\n (argument) =>\n path.posix.isAbsolute(argument) ||\n /(?:^|\\/)\\.\\.(?:\\/|$)/.test(argument),\n )\n )\n throw new Error(\n \"consumer fixture command arguments must stay within the fixture\",\n );\n if (executable === \"node\") return [tools.node, ...argv.slice(1)];\n if (argv[1] === \"run\" && executable === \"npm\")\n return [tools.node, tools.npm, ...argv.slice(1)];\n if (argv[1] === \"run\" && executable === \"pnpm\")\n return [tools.node, tools.pnpm, ...argv.slice(1)];\n throw new Error(\n \"consumer fixture commands must use node or a declared npm/pnpm run script\",\n );\n};\n\ntype ConsumerFixtureCommandOptions = {\n manager: \"npm\" | \"pnpm\";\n tools: ConsumerTools;\n directory: string;\n home: string;\n fixture: ConsumerFixture;\n};\nexport const consumerFixtureCommands = ({\n manager,\n tools,\n directory,\n home,\n fixture,\n}: ConsumerFixtureCommandOptions) => {\n const install =\n manager === \"npm\"\n ? [\n tools.node,\n tools.npm,\n \"install\",\n \"--ignore-scripts\",\n \"--no-audit\",\n \"--no-fund\",\n ]\n : [\n tools.node,\n tools.pnpm,\n \"pm\",\n \"install\",\n \"--ignore-scripts\",\n \"--no-frozen-lockfile\",\n \"--store-dir\",\n path.join(home, \"pnpm-store\"),\n ];\n return [\n install,\n manager === \"pnpm\"\n ? [tools.node, tools.pnpm, \"pm\", \"rebuild\", \"--pending\"]\n : [tools.node, tools.npm, \"rebuild\"],\n [\n tools.node,\n path.join(directory, \"node_modules/typescript/bin/tsc\"),\n \"--noEmit\",\n ],\n fixtureCommand(fixture.build, tools),\n fixtureCommand(fixture.smoke, tools),\n ];\n};\n\nexport const installConsumerFixtureDependencies = async (\n options: ConsumerFixtureCommandOptions,\n) => {\n const env = consumerCommandEnvironment(options);\n const commands = consumerFixtureCommands(options);\n for (const [index, argv] of commands.slice(0, 2).entries()) {\n const executable = argv.at(0);\n if (!executable) throw new Error(\"missing consumer dependency command\");\n process.stdout.write(\n await execute(executable, argv.slice(1), { cwd: options.directory, env }),\n );\n // Installation cannot execute scripts; validate bins before any lifecycle execution.\n await assertConsumerInstalledToolBins(options.directory);\n if (index !== 0) continue;\n const manifestFile = path.join(options.directory, \"package.json\");\n const manifest: unknown = JSON.parse(await readFile(manifestFile, \"utf8\"));\n if (!consumerRecord(manifest))\n throw new Error(\"invalid consumer fixture manifest\");\n const lockSource = await readFile(\n path.join(\n options.directory,\n options.manager === \"npm\" ? \"package-lock.json\" : \"pnpm-lock.yaml\",\n ),\n \"utf8\",\n );\n const lock: unknown =\n options.manager === \"npm\" ? JSON.parse(lockSource) : parse(lockSource);\n const { approvals, rebuildTargets } = await consumerBuildApprovals({\n manifest,\n lock,\n manager: options.manager,\n directory: options.directory,\n });\n if (options.manager === \"npm\") {\n // Explicit identities also prevent older manager defaults from rebuilding\n // unapproved transitive packages or the root fixture lifecycle.\n const rebuild = commands.at(1);\n if (!rebuild) throw new Error(\"missing consumer rebuild command\");\n rebuild.push(...rebuildTargets);\n if (Object.keys(approvals).length === 0) break;\n await writeFile(\n manifestFile,\n `${JSON.stringify({ ...manifest, allowScripts: approvals }, null, 2)}\\n`,\n );\n } else {\n const workspaceFile = path.join(options.directory, \"pnpm-workspace.yaml\");\n const workspace: unknown = parse(await readFile(workspaceFile, \"utf8\"));\n if (!consumerRecord(workspace))\n throw new Error(\"invalid generated consumer workspace\");\n await writeFile(\n workspaceFile,\n stringify({ ...workspace, allowBuilds: approvals }),\n );\n }\n }\n};\n\ntype FixtureOptions = {\n fixtureRoot: string;\n fixture: ConsumerFixture;\n pkg: ConsumerPackage;\n closure: Map<string, ConsumerPackage>;\n artifacts: Map<string, string>;\n scratch: string;\n tools: ConsumerTools;\n policy: ReturnType<typeof parseToolchainPolicy>;\n manager: \"npm\" | \"pnpm\";\n};\nconst runFixture = async ({\n fixtureRoot,\n fixture,\n pkg,\n closure,\n artifacts,\n scratch,\n tools,\n policy,\n manager,\n}: FixtureOptions) => {\n const selectedArtifact = artifacts.get(pkg.name);\n if (!selectedArtifact)\n throw new Error(`missing consumer artifact: ${pkg.name}`);\n const published: unknown = JSON.parse(\n await execute(\"tar\", [\"-xOf\", selectedArtifact, \"package/package.json\"], {\n cwd: scratch,\n }),\n );\n if (!consumerRecord(published))\n throw new Error(`invalid packed package manifest: ${pkg.name}`);\n assertConsumerFixtureKind({\n fixture,\n pkg: { directory: pkg.directory, name: pkg.name, manifest: published },\n });\n const source = await containedDirectory(fixtureRoot, fixture.fixture);\n const directory = path.join(\n scratch,\n `fixture-${manager}-${createHash(\"sha256\").update(pkg.name).digest(\"hex\").slice(0, 16)}`,\n );\n await assertConsumerFixtureFiles(source);\n await copyWithoutDependencies(source, directory);\n const manifest = await jsonFile(path.join(directory, \"package.json\"));\n const needsReactDom = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ].some((field) => {\n const entries = manifest[field];\n return consumerRecord(entries) && typeof entries[\"react-dom\"] === \"string\";\n });\n const reactBindings: Record<string, string> = {};\n if (fixture.kind === \"react\") {\n const peers = published[\"peerDependencies\"];\n if (!consumerRecord(peers) || typeof peers[\"react\"] !== \"string\")\n throw new Error(`React fixture requires a React peer: ${pkg.name}`);\n const needsDom = typeof peers[\"react-dom\"] === \"string\" || needsReactDom;\n const bindings = selectConsumerReactVersions({\n reactRange: peers[\"react\"],\n reactVersions: await registryMetadata(\"react\"),\n dom: needsDom\n ? {\n range:\n typeof peers[\"react-dom\"] === \"string\"\n ? peers[\"react-dom\"]\n : undefined,\n versions: await registryMetadata(\"react-dom\"),\n }\n : undefined,\n });\n Object.assign(reactBindings, bindings);\n process.stdout.write(\n `${pkg.name}: ${manager} React ${bindings.react}${bindings[\"react-dom\"] === undefined ? \"\" : ` / ReactDOM ${bindings[\"react-dom\"]}`}\\n`,\n );\n }\n const closureArtifacts = new Map<string, string>();\n for (const name of closure.keys()) {\n const artifact = artifacts.get(name);\n if (!artifact) throw new Error(`missing consumer artifact: ${name}`);\n closureArtifacts.set(name, artifact);\n }\n const boundManifest = bindConsumerManifest({\n manifest,\n artifacts: closureArtifacts,\n typescript: policy.consumerTypescript,\n react: reactBindings,\n manager,\n });\n await writeFile(\n path.join(directory, \"package.json\"),\n `${JSON.stringify(boundManifest.manifest, null, 2)}\\n`,\n );\n if (boundManifest.manager === \"pnpm\")\n await writeFile(\n path.join(directory, \"pnpm-workspace.yaml\"),\n stringify(boundManifest.workspace),\n );\n for (const lockfile of [\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"pnpm-lock.yaml\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n ])\n await rm(path.join(directory, lockfile), { force: true });\n const home = path.join(directory, \".consumer-home\");\n await mkdir(home);\n await writeFile(path.join(home, \"npmrc\"), \"\");\n const options = { manager, tools, directory, home, fixture };\n await installConsumerFixtureDependencies(options);\n const installed = await jsonFile(\n path.join(directory, \"node_modules/typescript/package.json\"),\n );\n if (installed[\"version\"] !== policy.consumerTypescript)\n throw new Error(\"installed consumer TypeScript does not match policy\");\n const env = consumerCommandEnvironment(options);\n for (const argv of consumerFixtureCommands(options).slice(2)) {\n await assertConsumerInstalledToolBins(directory);\n const executable = argv.at(0);\n if (!executable) throw new Error(\"missing consumer command\");\n process.stdout.write(\n await execute(executable, argv.slice(1), { cwd: directory, env }),\n );\n }\n process.stdout.write(\n `${pkg.name}: ${manager} consumer build/types/smoke passed\\n`,\n );\n};\n\ntype AssertConsumerPackedNodeSupportOptions = {\n artifacts: Map<string, string>;\n node: string;\n directory: string;\n};\nexport const assertConsumerPackedNodeSupport = async ({\n artifacts,\n node,\n directory,\n}: AssertConsumerPackedNodeSupportOptions) => {\n for (const [name, artifact] of artifacts) {\n const manifest: unknown = JSON.parse(\n await execute(\"tar\", [\"-xOf\", artifact, \"package/package.json\"], {\n cwd: directory,\n }),\n );\n if (!consumerRecord(manifest))\n throw new Error(`invalid packed package manifest: ${name}`);\n assertConsumerNodeSupport({ manifest, node, label: `packed ${name}` });\n }\n};\n\ntype ConsumerPackedSyntaxOptions = {\n artifacts: Map<string, string>;\n packages: Map<string, ConsumerPackage>;\n files: Record<string, string>;\n node: string;\n typescript: string;\n executable: string;\n};\nexport const assertConsumerPackedSyntax = async ({\n artifacts,\n packages,\n files,\n node,\n typescript,\n executable,\n}: ConsumerPackedSyntaxOptions) => {\n const packer = resolveConsumerReleasePack(files).manager;\n for (const [name, archive] of artifacts) {\n const pkg = packages.get(name);\n if (pkg === undefined) throw new Error(`Missing packed package: ${name}`);\n const declaration = path.posix.join(pkg.directory, \"publish-contract.json\");\n const source = files[declaration];\n if (source === undefined)\n throw new Error(`Missing tracked publish contract: ${declaration}`);\n const contract = parsePublishContract(JSON.parse(source));\n const packed = await readPackedSyntaxFiles(archive);\n const manifest = packed.get(\"package/package.json\");\n if (manifest === undefined)\n throw new Error(`Missing packed manifest: ${name}`);\n const diagnostics = checkPublishContract({\n manifest: JSON.parse(manifest),\n target: contract.target,\n contract,\n packer,\n policy: { node, typescript },\n });\n if (diagnostics.length > 0)\n throw new Error(\n `Packed publish contract differs for ${name}: ${diagnostics.map((entry) => entry.message).join(\"; \")}`,\n );\n await checkPackedJavaScriptWithNode({\n files: packed,\n target: contract.target,\n node,\n executable,\n });\n }\n};\n\nexport type ConsumerCompatOptions = {\n root: string;\n packages: string[];\n consumerNode: string;\n fixturePath: string;\n policy: unknown;\n};\nexport const runConsumerCompat = async ({\n root: inputRoot,\n packages: selected,\n consumerNode,\n fixturePath,\n policy: inputPolicy,\n}: ConsumerCompatOptions) => {\n const policy = parseToolchainPolicy(inputPolicy);\n if (consumerNode !== policy.consumerNode)\n throw new Error(\"consumer Node must match the published toolchain policy\");\n if (selected.length === 0)\n throw new Error(\"consumer compatibility requires at least one package\");\n const root = await realpath(inputRoot);\n const fixtureRoot = await containedDirectory(\n root,\n consumerRelativePath(fixturePath, \"fixture-path\"),\n );\n const fixtures = parseConsumerFixtures(\n await jsonFile(path.join(fixtureRoot, \"consumer-compat.json\")),\n );\n assertConsumerFixtureSelection({ selected, fixtures });\n const files = await trackedManifests(root);\n const packages = discoverConsumerPackages(files);\n const selections: {\n pkg: ConsumerPackage;\n fixture: ConsumerFixture;\n closure: Map<string, ConsumerPackage>;\n }[] = [];\n const all = new Map<string, ConsumerPackage>();\n const seen = new Set<string>();\n for (const input of selected) {\n const directory = consumerRelativePath(input, \"selected package\");\n if (seen.has(directory))\n throw new Error(`duplicate selected package: ${directory}`);\n seen.add(directory);\n const pkg = [...packages.values()].find(\n (candidate) => candidate.directory === directory,\n );\n if (!pkg || pkg.manifest[\"private\"] === true)\n throw new Error(\n `selected package is not a public root or declared workspace package: ${directory}`,\n );\n const fixture = fixtures.find(\n (candidate) => candidate.package === directory,\n );\n if (!fixture)\n throw new Error(`missing declared consumer fixture: ${directory}`);\n assertConsumerFixtureKind({ fixture, pkg });\n await assertConsumerFixtureFiles(\n await containedDirectory(fixtureRoot, fixture.fixture),\n );\n fixtureCommand(fixture.build, {\n node: \"node\",\n npm: \"npm\",\n pnpm: \"pnpm\",\n bin: \"\",\n });\n fixtureCommand(fixture.smoke, {\n node: \"node\",\n npm: \"npm\",\n pnpm: \"pnpm\",\n bin: \"\",\n });\n const closure = consumerPackageClosure({ selected: pkg, packages, files });\n for (const [name, member] of closure) {\n assertConsumerNodeSupport({\n manifest: member.manifest,\n node: policy.consumerNode,\n label: path.posix.join(member.directory, \"package.json\"),\n });\n all.set(name, member);\n }\n selections.push({ pkg, fixture, closure });\n }\n resolveConsumerReleasePack(files);\n const scratch = await mkdtemp(path.join(tmpdir(), \"stll-consumer-compat-\"));\n try {\n const tools = await provisionConsumerTools(scratch, policy);\n const artifacts = await packConsumerArtifacts({\n files,\n root,\n scratch,\n tools,\n packages: all,\n workspacePackages: packages,\n });\n await assertConsumerPackedNodeSupport({\n artifacts,\n node: policy.consumerNode,\n directory: scratch,\n });\n await assertConsumerPackedSyntax({\n artifacts,\n packages: all,\n files,\n node: policy.consumerNode,\n typescript: policy.consumerTypescript,\n executable: tools.node,\n });\n for (const selection of selections)\n for (const manager of [\"npm\", \"pnpm\"] as const)\n await runFixture({\n fixtureRoot,\n ...selection,\n artifacts,\n scratch,\n tools,\n policy,\n manager,\n });\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n};\n","import { consumerRelativePath } from \"./consumer-compat-config\";\n\nexport const consumerCompatUsage =\n \"Usage: stll-consumer-compat --packages '[\\\"packages/example\\\"]' --consumer-node <exact-patch> --fixture-path <directory>\";\n\nexport const parseConsumerCompatArguments = (args: string[]) => {\n if (args.length === 1 && (args[0] === \"--help\" || args[0] === \"-h\"))\n return { mode: \"help\" } as const;\n const options = new Map<string, string>();\n for (let index = 0; index < args.length; index += 2) {\n const flag = args[index];\n const value = args[index + 1];\n if (\n !flag ||\n ![\"--packages\", \"--consumer-node\", \"--fixture-path\"].includes(flag) ||\n !value ||\n options.has(flag)\n )\n throw new Error(consumerCompatUsage);\n options.set(flag, value);\n }\n const encoded = options.get(\"--packages\");\n const consumerNode = options.get(\"--consumer-node\");\n const fixturePath = options.get(\"--fixture-path\");\n if (!encoded || !consumerNode || !fixturePath)\n throw new Error(consumerCompatUsage);\n const packages: unknown = JSON.parse(encoded);\n if (!Array.isArray(packages) || packages.length === 0)\n throw new Error(\"--packages must be a nonempty JSON array\");\n return {\n mode: \"run\",\n packages: packages.map((entry: unknown) =>\n consumerRelativePath(entry, \"--packages\"),\n ),\n consumerNode,\n fixturePath: consumerRelativePath(fixturePath, \"--fixture-path\"),\n } as const;\n};\n","#!/usr/bin/env node\nimport { readFile } from \"node:fs/promises\";\n\nimport { runConsumerCompat } from \"./consumer-compat\";\nimport {\n consumerCompatUsage,\n parseConsumerCompatArguments,\n} from \"./consumer-compat-arguments\";\n\nconst main = async () => {\n const argumentsResult = parseConsumerCompatArguments(process.argv.slice(2));\n if (argumentsResult.mode === \"help\") {\n process.stdout.write(`${consumerCompatUsage}\\n`);\n return;\n }\n const policy: unknown = JSON.parse(\n await readFile(new URL(\"../toolchain.json\", import.meta.url), \"utf8\"),\n );\n await runConsumerCompat({\n root: process.cwd(),\n packages: argumentsResult.packages,\n consumerNode: argumentsResult.consumerNode,\n fixturePath: argumentsResult.fixturePath,\n policy,\n });\n};\n\nmain().catch((error: unknown) => {\n process.stderr.write(\n `consumer-compat: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exitCode = 1;\n});\n"],"mappings":";;;;;;;;;;;;;;AAQA,MAAa,yBAAyB,OAAO,EAC3C,UACA,MACA,SACA,gBAMI;CACJ,IAAI,CAAC,eAAe,IAAI,GACtB,MAAM,IAAI,MAAM,kCAAkC;CACpD,MAAM,YAAkC,CAAC;CACzC,MAAM,iCAAiB,IAAI,IAAY;CACvC,KAAK,MAAM,SAAS;EAClB;EACA;EACA;CACF,GAAG;EACD,MAAM,UAAU,SAAS;EACzB,IAAI,YAAY,KAAA,GAAW;EAC3B,IAAI,CAAC,eAAe,OAAO,GAAG,MAAM,IAAI,MAAM,mBAAmB,OAAO;EACxE,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,GAAG;GACtC,MAAM,WAAW,KAAK;GACtB,MAAM,YAAY,KAAK;GACvB,MAAM,WAAW,eAAe,SAAS,IAAI,UAAU,OAAO,KAAA;GAC9D,MAAM,eAAe,eAAe,QAAQ,IACxC,SAAS,SACT,KAAA;GACJ,MAAM,kBAAkB,YAAY,QAAQ,WAAW;GACvD,MAAM,eAAe,YAAY,QAAQ,gBAAgB,QAAQ;GACjE,MAAM,aAAa,eAAe,eAAe,IAC7C,gBAAgB,gBAChB,KAAA;GACJ,IAAI,CAAC,eAAe,UAAU,GAAG;IAC/B,IAAI,UAAU,wBAAwB;IACtC,MAAM,IAAI,MAAM,iDAAiD,KAAK;GACxE;GACA,MAAM,qBAAqB,KAAK,KAAK,WAAW,gBAAgB,GAAG;GACnE,IAAI,UAAU,wBACZ,IAAI;IACF,MAAM,MAAM,kBAAkB;GAChC,SAAS,OAAO;IACd,IACE,iBAAiB,SACjB,UAAU,SACV,MAAM,SAAS,UAEf;IACF,MAAM;GACR;GAEF,MAAM,YAAqB,KAAK,MAC9B,MAAM,SAAS,KAAK,KAAK,oBAAoB,cAAc,GAAG,MAAM,CACtE;GACA,IACE,CAAC,eAAe,SAAS,KACzB,OAAO,UAAU,YAAY,YAC7B,UAAU,YAAY,MACtB,OAAO,UAAU,eAAe,YAChC,MAAM,UAAU,UAAU,MAAM,MAEhC,MAAM,IAAI,MACR,kDAAkD,KACpD;GACF,MAAM,WAAW,GAAG,UAAU,QAAQ,GAAG,UAAU;GAEnD,eAAe,IAAI,MAAM,SAAS,kBAAkB,CAAC;GACrD,MAAM,WAAW,WAAW;GAC5B,IACE,YAAY,SACZ,OAAO,aAAa,YACpB,CAAC,SAAS,WAAW,6BAA6B,GAElD,UACE,SAAS,WAAW,OAAO,IAAI,WAAW,QAAQ,cAChD;QACD;IACH,MAAM,UAAU,WAAW;IAE3B,MAAM,SACJ,YAAY,UACZ,OAAO,YAAY,YACnB,QAAQ,WAAW,OAAO,IACtB,QAAQ,QAAQ,cAAc,EAAE,IAChC,KAAA;IACN,UACE,WAAW,KAAA,IAAY,WAAW,GAAG,UAAU,QAAQ,GAAG,YACxD;GACN;EACF;CACF;CACA,OAAO;EAAE;EAAW,gBAAgB,CAAC,GAAG,cAAc;CAAE;AAC1D;;;ACnGA,MAAa,2BAA2B;CAAC;CAAQ;CAAO;CAAO;AAAM;AAErE,MAAM,WAAW,UACf,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS;;AAG9D,MAAa,kCAAkC,OAAO,cAAsB;CAC1E,MAAM,OAAO,MAAM,SAAS,SAAS;CACrC,MAAM,0BAAU,IAAI,IAAY;CAChC,MAAM,mBAAmB,cAAsB;EAC7C,MAAM,WAAW,KAAK,SAAS,MAAM,SAAS;EAC9C,IACE,aAAa,QACb,SAAS,WAAW,KAAK,KAAK,KAAK,KACnC,KAAK,WAAW,QAAQ,GAExB,MAAM,IAAI,MACR,iEACF;CACJ;CACA,MAAM,QAAQ,OAAO,aAAqB;EACxC,MAAM,YAAY,MAAM,SAAS,QAAQ;EACzC,gBAAgB,SAAS;EACzB,IACE,KAAK,SAAS,QAAQ,MAAM,UAC5B,KAAK,SAAS,KAAK,QAAQ,QAAQ,CAAC,MAAM,gBAE1C,KAAK,MAAM,QAAQ,0BAA0B;GAC3C,IAAI;IACF,MAAM,MAAM,KAAK,KAAK,UAAU,IAAI,CAAC;GACvC,SAAS,OAAO;IACd,IAAI,QAAQ,KAAK,GAAG;IACpB,MAAM;GACR;GACA,MAAM,IAAI,MACR,6BAA6B,KAAK,yDACpC;EACF;EAEF,IAAI,QAAQ,IAAI,SAAS,GAAG;EAC5B,QAAQ,IAAI,SAAS;EACrB,KAAK,MAAM,SAAS,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC,GAClE,IAAI,MAAM,YAAY,GAAG,MAAM,MAAM,KAAK,KAAK,WAAW,MAAM,IAAI,CAAC;OAChE,IAAI,MAAM,eAAe,GAAG;GAC/B,MAAM,SAAS,MAAM,SAAS,KAAK,KAAK,WAAW,MAAM,IAAI,CAAC;GAC9D,gBAAgB,MAAM;GACtB,KAAK,MAAM,MAAM,MAAM,EAAA,CAAG,YAAY,GACpC,MAAM,MAAM,KAAK,KAAK,WAAW,MAAM,IAAI,CAAC;EAChD;CAEJ;CACA,MAAM,UAAU,KAAK,KAAK,MAAM,cAAc;CAC9C,IAAI;EACF,MAAM,MAAM,OAAO;CACrB,SAAS,OAAO;EACd,IAAI,QAAQ,KAAK,GAAG;EACpB,MAAM;CACR;CACA,MAAM,MAAM,OAAO;AACrB;;;AC5DA,MAAMA,YAAU,UACd,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAMrE,MAAM,qBAAqB,EAAE,UAAU,YAAsC;CAC3E,IAAI,CAAC,WAAW,KAAK,GACnB,MAAM,IAAI,MAAM,gCAAgC,OAAO;CACzD,MAAM,aAAa,OAAO,KAAK,QAAQ,CAAC,CACrC,QAAQ,YAAY,MAAM,OAAO,MAAM,QAAQ,UAAU,SAAS,KAAK,CAAC,CAAC,CACzE,KAAK,OAAO;CACf,IAAI,WAAW,WAAW,GACxB,MAAM,IAAI,MAAM,2CAA2C,OAAO;CACpE,OAAO;AACT;;AAcA,MAAa,+BAA+B,EAC1C,YACA,eACA,UACkC;CAClC,MAAM,kBAAkB,kBAAkB;EACxC,UAAU;EACV,OAAO;CACT,CAAC;CACD,IAAI,QAAQ,KAAA,GAAW;EACrB,MAAM,QAAQ,gBAAgB,GAAG,CAAC;EAClC,IAAI,UAAU,KAAA,GAAW,MAAM,IAAI,MAAM,iCAAiC;EAC1E,OAAO,EAAE,MAAM;CACjB;CACA,MAAM,WAAW,IAAI,SAAS;CAC9B,MAAM,gBAAgB,kBAAkB;EACtC,UAAU,IAAI;EACd,OAAO;CACT,CAAC;CACD,KAAK,MAAM,SAAS,iBAAiB;EACnC,MAAM,WAAW,cAAc,MAAM,YAAY;GAC/C,MAAM,WAAW,IAAI,SAAS;GAC9B,IAAI,CAACA,SAAO,QAAQ,KAAK,CAACA,SAAO,SAAS,mBAAmB,GAC3D,OAAO;GACT,MAAM,QAAQ,SAAS,mBAAmB,CAAC;GAC3C,OACE,OAAO,UAAU,YACjB,WAAW,KAAK,MAAM,QACtB,UAAU,OAAO,KAAK;EAE1B,CAAC;EACD,IAAI,aAAa,KAAA,GAAW,OAAO;GAAE;GAAO,aAAa;EAAS;CACpE;CACA,MAAM,IAAI,MACR,oDAAoD,WAAW,gBAAgB,UACjF;AACF;;;ACvDA,MAAM,UAAU,UAAU,QAAQ;AAClC,MAAM,UAAU,UACd,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AACrE,MAAM,aAAa;AAEnB,MAAM,cAAc,IAAI,IACtB,OAAO,QAAQ;CACb,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;AACV,CAA2D,CAC7D;;AAGA,MAAa,uBAAuB,EAClC,QACA,WAI4B;CAC5B,IAAI,OAAO,SAAS,cAAc,OAAO;CACzC,IAAI,OAAO,QAAQ,WAAW,GAC5B,MAAM,IAAI,MAAM,8CAA8C;CAChE,IAAI,UAAkC;CACtC,KAAK,MAAM,cAAc,OAAO,SAAS;EACvC,IAAI,eAAe,UAAU;EAC7B,MAAM,OAAO,YAAY,IAAI,UAAU;EACvC,IAAI,SAAS,KAAA,GAAW;GACtB,IAAI,YAAY,YAAY,OAAO,SAAS,UAAU;GACtD;EACF;EACA,IAAI,oCAAoC;GAAE,QAAQ;GAAY;EAAK,CAAC,GAClE;EACF,MAAM,IAAI,MACR,+CAA+C,WAAW,6DAC5D;CACF;CACA,OAAO;AACT;AAEA,MAAM,kBAAkB,UAA+B;CACrD,MAAM,yBAAS,IAAI,IAAY;CAC/B,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO;EAClC,IAAI,KAAK,MAAM,SAAS,IAAI,MAAM,gBAAgB;EAClD,MAAM,WAAoB,KAAK,MAAM,MAAM;EAC3C,IAAI,CAAC,OAAO,QAAQ,GAAG,MAAM,IAAI,MAAM,4BAA4B,MAAM;EACzE,MAAM,MAAM,SAAS;EACrB,IAAI,QAAQ,KAAA,GAAW;EACvB,IAAI;EACJ,IAAI,OAAO,QAAQ,UAAU,UAAU,CAAC,GAAG;OACtC,IAAI,OAAO,GAAG,GAAG,UAAU,OAAO,OAAO,GAAG;EACjD,IAAI,YAAY,KAAA,GACd,MAAM,IAAI,MAAM,uCAAuC,MAAM;EAC/D,KAAK,MAAM,SAAS,SAAS;GAC3B,IACE,OAAO,UAAU,YACjB,UAAU,MACV,KAAK,MAAM,WAAW,KAAK,KAC3B,MAAM,SAAS,IAAI,KACnB,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,IAAI,GAE9B,MAAM,IAAI,MAAM,kCAAkC,MAAM;GAC1D,OAAO,IAAI,KAAK,MAAM,KAAK,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC;EAC7D;CACF;CACA,OAAO;AACT;AACA,MAAM,eAAe,UAA+B;CAClD,MAAM,OAAO,eAAe,KAAK;CACjC,KAAK,MAAM,QAAQ,MAAM;EACvB,MAAM,SAAS,MAAM,IAAI,IAAI;EAC7B,IAAI,WAAW,KAAA,GACb,MAAM,IAAI,MAAM,8BAA8B,MAAM;EACtD,IACE,CAAC,WAAW,KAAK,IAAI,KACrB,CAAC,gEAAgE,KAC/D,MACF,GAEA,MAAM,IAAI,MAAM,2CAA2C,MAAM;CACrE;CACA,OAAO,CACL,GAAG,IAAI,IACL,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC,CACd,QAAQ,SAAS,WAAW,KAAK,IAAI,CAAC,CAAC,CACvC,OAAO,CAAC,GAAG,IAAI,CAAC,CACrB,CACF;AACF;AAEA,MAAM,eACJ,OACA,SACmC;CACnC,IAAI,YAAY,KAAK,MAAM,QAAQ,IAAI;CACvC,OAAO,cAAc,KAAK;EACxB,MAAM,SAAS,MAAM,IAAI,GAAG,UAAU,cAAc;EACpD,IAAI,WAAW,KAAA,GAAW;GACxB,MAAM,WAAoB,KAAK,MAAM,MAAM;GAC3C,IAAI,CAAC,OAAO,QAAQ,GAClB,MAAM,IAAI,MAAM,4BAA4B,WAAW;GACzD,IAAI,SAAS,YAAY,UAAU,OAAO;GAC1C,IAAI,SAAS,YAAY,YAAY,OAAO;GAC5C,IAAI,SAAS,YAAY,KAAA,GACvB,MAAM,IAAI,MAAM,gCAAgC,WAAW;GAC7D,OAAO;EACT;EACA,YAAY,KAAK,MAAM,QAAQ,SAAS;CAC1C;CACA,OAAO;AACT;AAQA,MAAM,uBAAuB,QAAgB,YAAqB;CAChE,MAAM,SAAS,QAAQ,eAAe;CACtC,MAAM,UAAU,SACZ,OAAO,QAAQ,WAAW,EAAE,CAAC,CAAC,QAAQ,eAAe,EAAE,IACvD;CACJ,IAAI;EACF,OAAOC,QAAM,SAAS,KAAK,OAAO,IAAI,SAAS,OAAO;CACxD,SAAS,OAAO;EACd,IACE,CAAC,UACD,EAAE,iBAAiB,gBACnB,CAAC,OAAO,KAAK,KACb,OAAO,MAAM,WAAW,UAExB,MAAM;EACR,MAAM,eAAe,KAAK,IAAQ,CAAC,CAAC,QAAQ,IAAQ;EACpD,MAAM,WAAW,KAAK,IACpB,GACA,KAAK,IACH,OAAO,QACP,MAAM,SAAS,eAAe,OAAO,SAAS,QAAQ,MACxD,CACF;EACA,MAAM,QAAQ,OAAO,MAAM,GAAG,QAAQ,CAAC,CAAC,MAAM,yBAAyB;EACvE,MAAM,WAAW,IAAI,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE;EAC/D,MAAM,IAAI,YAAY,MAAM,QAAQ,QAAQ,gBAAgB,QAAQ,CAAC;CACvE;AACF;;AAGA,MAAa,8BAA8B,EACzC,OACA,QACA,WAC2B;CAC3B,MAAM,cAAc,oBAAoB;EAAE;EAAQ;CAAK,CAAC;CACxD,MAAM,WAAW,YAAY,KAAK;CAClC,IAAI,OAAO,SAAS,gBAAgB,SAAS,SAAS,GACpD,MAAM,IAAI,MAAM,4CAA4C,SAAS,IAAI;CAC3E,KAAK,MAAM,QAAQ,UAAU;EAC3B,MAAM,SAAS,MAAM,IAAI,IAAI;EAC7B,IAAI,WAAW,KAAA,GACb,MAAM,IAAI,MAAM,8BAA8B,MAAM;EACtD,IAAI,OAAO,YAAY,OAAO,IAAI;EAClC,IAAI,UAAU,KAAK,IAAI,GAAG,OAAO;EACjC,IAAI,UAAU,KAAK,IAAI,GAAG,OAAO;EACjC,MAAM,aAAa,eAAoC;GACrD,MAAM,OAAO,oBAAoB,QAAQ;IACvC;IACA;IACA,eAAe;IACf,4BAA4B,eAAe;GAC7C,CAAC;GAED,IACE,gBAAgB,KAChB,KAAK,KAAK,MAAM,SAAS,qBAAqB,KAAK,KAAK,IAAI,CAAC,GAE7D,MAAM,IAAI,MAAM,gCAAgC;EACpD;EACA,IAAI;GACF,IAAI,SAAS,UACX,IAAI;IACF,UAAU,QAAQ;GACpB,QAAQ;IACN,UAAU,QAAQ;GACpB;QACK,UAAU,IAAI;EACvB,SAAS,OAAO;GACd,MAAM,IAAI,MACR,qBAAqB,KAAK,uCAAuC,OAAO,KAAK,GAC/E;EACF;CACF;AACF;AAEA,MAAM,kBAAkB,YAA+B;CACrD,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,QAAQ,SAAS;EAC1B,MAAM,QAAQ,KAAK,MAAM,GAAG;EAC5B,IACE,CAAC,KAAK,WAAW,UAAU,KAC3B,KAAK,SAAS,IAAI,KAClB,KACG,MAAM,EAAE,CAAC,CACT,MACE,cACC,UAAU,WAAW,CAAC,IAAI,MAAM,UAAU,WAAW,CAAC,MAAM,GAChE,KACF,MAAM,MAAM,SAAS,SAAS,QAAQ,SAAS,GAAG,KAClD,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM,SAAS,SAAS,EAAE,KAC7C,KAAK,IAAI,IAAI,GAEb,MAAM,IAAI,MAAM,uCAAuC,MAAM;EAC/D,KAAK,IAAI,IAAI;CACf;CACA,OAAO;AACT;AAKA,MAAa,gCAAgC,OAAO,EAClD,OACA,QACA,MACA,iBACgC;CAChC,2BAA2B;EAAE;EAAO;EAAQ;CAAK,CAAC;CAClD,eAAe,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;CAChC,MAAM,UAAU,MAAM,QAAQ,KAAK,KAAK,OAAO,GAAG,uBAAuB,CAAC;CAC1E,IAAI;EACF,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO;GAClC,MAAM,cAAc,KAAK,KAAK,SAAS,IAAI;GAC3C,MAAM,MAAM,KAAK,QAAQ,WAAW,GAAG,EAAE,WAAW,KAAK,CAAC;GAC1D,MAAM,UAAU,aAAa,MAAM;EACrC;EACA,KAAK,MAAM,QAAQ,YAAY,KAAK,GAClC,IAAI;GACF,MAAM,QAAQ,YAAY,CAAC,WAAW,KAAK,KAAK,SAAS,IAAI,CAAC,GAAG;IAC/D,KAAK;IACL,KAAK;KAAE,MAAM;KAAiB,MAAM;IAAQ;GAC9C,CAAC;EACH,SAAS,OAAO;GACd,MAAM,IAAI,MACR,qBAAqB,KAAK,sCAAsC,KAAK,IAAI,OAAO,KAAK,GACvF;EACF;CAEJ,UAAU;EACR,MAAM,GAAG,SAAS;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;CACpD;AACF;;AAGA,MAAa,wBAAwB,OAAO,YAAoB;CAC9D,MAAM,EAAE,QAAQ,YAAY,MAAM,QAAQ,OAAO,CAAC,QAAQ,OAAO,GAAG,EAClE,WAAW,KAAK,OAAO,KACzB,CAAC;CACD,MAAM,wBAAQ,IAAI,IAAoB;CACtC,MAAM,UAAU,eACd,QAAQ,MAAM,IAAI,CAAC,CAAC,QAAQ,UAAU,UAAU,EAAE,CACpD;CACA,MAAM,OAAO,OAAO,SAAiB;EACnC,IAAI,CAAC,QAAQ,SAAS,IAAI,GACxB,MAAM,IAAI,MAAM,gCAAgC,MAAM;EACxD,MAAM,EAAE,QAAQ,aAAa,MAAM,QAAQ,OAAO;GAAC;GAAS;GAAS;EAAI,CAAC;EAC1E,IACE,CAAC,SAAS,WAAW,GAAG,KACxB,SAAS,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,GAE1C,MAAM,IAAI,MAAM,+CAA+C,MAAM;EACvE,MAAM,EAAE,WAAW,MAAM,QAAQ,OAAO;GAAC;GAAQ;GAAS;EAAI,GAAG,EAC/D,WAAW,KAAK,OAAO,KACzB,CAAC;EACD,MAAM,IAAI,MAAM,MAAM;CACxB;CACA,KAAK,MAAM,QAAQ,SACjB,IAAI,WAAW,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,IAAI,MAAM,gBACzD,MAAM,KAAK,IAAI;CACnB,KAAK,MAAM,QAAQ,eAAe,KAAK,GACrC,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,MAAM,KAAK,IAAI;CACvC,OAAO;AACT;;;ACxPA,MAAM,WACJ,YACA,MACA,EAAE,KAAK,MAAM,QAAQ,UAErB,IAAI,SAAiB,SAAS,WAAW;CACvC,MAAM,QAAQ,MAAM,YAAY,MAAM;EACpC;EACA;EACA,OAAO;GAAC;GAAU;GAAQ;EAAS;CACrC,CAAC;CACD,MAAM,SAAmB,CAAC;CAC1B,MAAM,OAAO,GAAG,SAAS,UAAkB,OAAO,KAAK,KAAK,CAAC;CAC7D,MAAM,GAAG,SAAS,MAAM;CACxB,MAAM,GAAG,UAAU,MAAM,WAAW;EAClC,MAAM,SAAS,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM;EACpD,IAAI,SAAS,GACX,uBACE,IAAI,MACF,GAAG,WAAW,WAAW,UAAU,OAAO,IAAI,EAAE,KAAK,OAAO,KAAK,GACnE,CACF;OACG,QAAQ,MAAM;CACrB,CAAC;AACH,CAAC;AAEH,MAAM,WAAW,OAAO,SAAiB;CACvC,MAAM,QAAiB,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC;CAC9D,IAAI,CAAC,eAAe,KAAK,GAAG,MAAM,IAAI,MAAM,yBAAyB,MAAM;CAC3E,OAAO;AACT;AAEA,MAAM,qBAAqB,OAAO,MAAc,aAAqB;CACnE,MAAM,WAAW,MAAM,SAAS,KAAK,QAAQ,MAAM,QAAQ,CAAC;CAC5D,MAAM,aAAa,KAAK,SAAS,MAAM,QAAQ;CAC/C,IACE,WAAW,WAAW,KAAK,KAAK,KAAK,KACrC,eAAe,QACf,KAAK,WAAW,UAAU,GAE1B,MAAM,IAAI,MAAM,2BAA2B,UAAU;CACvD,IAAI,EAAE,MAAM,MAAM,QAAQ,EAAA,CAAG,YAAY,GACvC,MAAM,IAAI,MAAM,oBAAoB,UAAU;CAChD,OAAO;AACT;AAEA,MAAM,aAAa,OAAO,QAAgB;CACxC,MAAM,WAAW,MAAM,MAAM,GAAG;CAChC,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,MAAM,oBAAoB,SAAS,OAAO,KAAK,KAAK;CAChE,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI,GAAG,CAAC,CAAC,UAClD,MAAM,IAAI,MAAM,wCAAwC,KAAK;CAC/D,OAAO,OAAO,KAAK,MAAM,SAAS,YAAY,CAAC;AACjD;AAEA,MAAa,6BAA6B,EACxC,UACA,WACA,cAKI;CACJ,MAAM,SAAS,UAAU,MAAM,OAAO,CAAC,CAAC,SAAS,SAAS;EACxD,MAAM,QAAQ,8BAA8B,KAAK,IAAI;EACrD,OAAO,QAAQ,OAAO,YAAY,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;CAC7D,CAAC;CACD,IACE,OAAO,WAAW,KAClB,OAAO,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,OAAO,KAAK,GAE/D,MAAM,IAAI,MAAM,mCAAmC,UAAU;AACjE;AAMA,MAAa,6BAA6B,OAAO,EAC/C,WACA,WACuC;CAEvC,MAAM,OAAM,MADW,SAAS,KAAK,KAAK,WAAW,cAAc,CAAC,EAAA,CAC/C;CACrB,MAAM,WAAW,eAAe,GAAG,IAAI,IAAI,QAAQ;CACnD,IAAI,OAAO,aAAa,YAAY,SAAS,WAAW,GACtD,MAAM,IAAI,MAAM,aAAa,KAAK,4BAA4B,KAAK,KAAK;CAC1E,MAAM,OAAO,MAAM,SAAS,SAAS;CACrC,MAAM,WAAW,KAAK,QAAQ,MAAM,QAAQ;CAC5C,MAAM,WAAW,KAAK,SAAS,MAAM,QAAQ;CAC7C,IACE,aAAa,QACb,SAAS,WAAW,KAAK,KAAK,KAAK,KACnC,KAAK,WAAW,QAAQ,GAExB,MAAM,IAAI,MAAM,aAAa,KAAK,wBAAwB;CAC5D,MAAM,MAAM,MAAM,SAAS,QAAQ;CACnC,MAAM,iBAAiB,KAAK,SAAS,MAAM,GAAG;CAC9C,IACE,mBAAmB,QACnB,eAAe,WAAW,KAAK,KAAK,KAAK,KACzC,KAAK,WAAW,cAAc,GAE9B,MAAM,IAAI,MAAM,aAAa,KAAK,wBAAwB;CAC5D,IAAI,EAAE,MAAM,MAAM,GAAG,EAAA,CAAG,OAAO,GAC7B,MAAM,IAAI,MAAM,aAAa,KAAK,oBAAoB;CACxD,OAAO;AACT;AASA,MAAa,4BAA4B,OAAO,EAC9C,MACA,KACA,MACA,gBACsC;CAEtC,MAAM,WAAW;CACjB,MAAM,MAAM,QAAQ;CACpB,MAAM,SAAS,UAAkB,IAAI,MAAM,WAAW,KAAK,OAAO,EAAE;CACpE,MAAM,UACJ,KAAK,KAAK,UAAU,MAAM,GAC1B,mBAAmB,MAAM,IAAI,EAAE,UAC/B,EAAE,MAAM,IAAM,CAChB;CACA,KAAK,MAAM,CAAC,MAAM,QAAQ;EACxB,CAAC,OAAO,GAAG;EACX,CAAC,OAAO,KAAK,KAAK,KAAK,QAAQ,GAAG,GAAG,YAAY,CAAC;EAClD,CAAC,QAAQ,IAAI;CACf,GAAG;EACD,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,MAAM,iCAAiC;EACpE,MAAM,UACJ,KAAK,KAAK,UAAU,IAAI,GACxB,mBAAmB,MAAM,IAAI,EAAE,GAAG,MAAM,GAAG,EAAE,UAC7C,EAAE,MAAM,IAAM,CAChB;CACF;CACA,OAAO;EACL;EACA;EACA;EACA,KAAK;CACP;AACF;AAEA,MAAa,yBAAyB,OACpC,SACA,WAC2B;CAC3B,IACE,QAAQ,aAAa,WACpB,QAAQ,SAAS,SAAS,QAAQ,SAAS,SAE5C,MAAM,IAAI,MAAM,oDAAoD;CACtE,MAAM,WAAW,SAAS,OAAO,aAAa,SAAS,QAAQ,KAAK;CACpE,MAAM,OAAO,4BAA4B,OAAO,aAAa;CAC7D,MAAM,CAAC,SAAS,aAAa,MAAM,QAAQ,IAAI,CAC7C,WAAW,GAAG,OAAO,UAAU,GAC/B,WAAW,GAAG,KAAK,eAAe,CACpC,CAAC;CACD,0BAA0B;EACxB;EACA;EACA,WAAW,UAAU,SAAS,MAAM;CACtC,CAAC;CACD,MAAM,cAAc,KAAK,KAAK,SAAS,QAAQ;CAC/C,MAAM,UAAU,aAAa,OAAO;CACpC,MAAM,QACJ,OACA;EAAC;EAAQ;EAAa;EAAM;EAAS;CAAiB,GACtD,EAAE,KAAK,QAAQ,CACjB;CACA,MAAM,eAAe,KAAK,KAAK,SAAS,SAAS,MAAM,GAAG,EAAE,CAAC;CAC7D,MAAM,MAAM,KAAK,KAAK,cAAc,KAAK;CACzC,MAAM,OAAO,KAAK,KAAK,KAAK,MAAM;CAClC,MAAM,OAAO,KAAK,KAAK,SAAS,YAAY;CAC5C,MAAM,MAAM,IAAI;CAChB,MAAM,UAAU,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE;CAC5C,MAAM,MAAM,2BAA2B;EACrC,OAAO,EAAE,IAAI;EACb,WAAW;EACX;CACF,CAAC;CACD,MAAM,UACJ,MAAM,QAAQ,MAAM,CAAC,WAAW,GAAG;EAAE,KAAK;EAAS;CAAI,CAAC,EAAA,CACxD,KAAK;CACP,IAAI,WAAW,IAAI,OAAO,gBACxB,MAAM,IAAI,MAAM,mCAAmC,QAAQ;CAC7D,MAAM,SAAS,KAAK,KAAK,SAAS,OAAO;CACzC,MAAM,eAAe,KAAK,KACxB,cACA,qCACF;CACA,MAAM,QACJ,MACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,OAAO;EACd,QAAQ,OAAO;CACjB,GACA;EAAE,KAAK;EAAS;CAAI,CACtB;CACA,MAAM,MAAM,MAAM,2BAA2B;EAC3C,WAAW,KAAK,KAAK,QAAQ,kBAAkB;EAC/C,MAAM;CACR,CAAC;CACD,MAAM,OAAO,MAAM,2BAA2B;EAC5C,WAAW,KAAK,KAAK,QAAQ,mBAAmB;EAChD,MAAM;CACR,CAAC;CACD,KAAK,MAAM,CAAC,KAAK,aAAa,CAC5B,CAAC,KAAK,OAAO,WAAW,GACxB,CAAC,MAAM,OAAO,YAAY,CAC5B,GACE,IACE,CAAC,OACD,CAAC,aAEC,MAAM,QAAQ,MAAM,CAAC,KAAK,WAAW,GAAG;EAAE,KAAK;EAAS;CAAI,CAAC,EAAA,CAC7D,KAAK,MAAM,UAEb,MAAM,IAAI,MAAM,2CAA2C;CAE/D,OAAO,0BAA0B;EAC/B;EACA;EACA;EACA,WAAW,KAAK,KAAK,SAAS,cAAc;CAC9C,CAAC;AACH;AAEA,MAAM,mBAAmB,OAAO,SAAiB;CAC/C,MAAM,SAAS,MAAM,QACnB,OACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,GACA,EAAE,KAAK,KAAK,CACd;CACA,MAAM,QAAgC,CAAC;CACvC,KAAK,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,CAAC,OAAO,OAAO,GAAG;EACrD,IACE,KACG,MAAM,GAAG,CAAC,CACV,MAAM,SAAS,SAAS,kBAAkB,SAAS,QAAQ,GAE9D;EACF,MAAM,WAAW,MAAM,SAAS,KAAK,KAAK,MAAM,IAAI,CAAC;EACrD,MAAM,WAAW,KAAK,SAAS,MAAM,QAAQ;EAC7C,IACE,SAAS,WAAW,KAAK,KAAK,KAAK,KACnC,aAAa,QACb,KAAK,WAAW,QAAQ,GAExB,MAAM,IAAI,MAAM,uCAAuC,MAAM;EAC/D,MAAM,QAAQ,MAAM,SAAS,UAAU,MAAM;CAC/C;CACA,OAAO;AACT;AAEA,MAAM,eAAe,OAAO,cAAsB;CAChD,MAAM,SAAS,MAAM,QAAQ,SAAS,EAAA,CAAG,QAAQ,SAC/C,KAAK,SAAS,MAAM,CACtB;CACA,IAAI,MAAM,WAAW,GACnB,MAAM,IAAI,MAAM,yCAAyC,WAAW;CACtE,MAAM,WAAW,MAAM,GAAG,CAAC;CAC3B,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,yBAAyB;CACxD,OAAO,KAAK,KAAK,WAAW,QAAQ;AACtC;AAEA,MAAM,0BAA0B,OAAO,QAAgB,gBAAwB;CAC7E,MAAM,GAAG,QAAQ,aAAa;EAC5B,WAAW;EACX,QAAQ,OAAO,SAAS;GACtB,IACE;IAAC;IAAgB;IAAQ;GAAqB,CAAC,CAAC,SAC9C,KAAK,SAAS,IAAI,CACpB,GAEA,OAAO;GACT,KAAK,MAAM,MAAM,IAAI,EAAA,CAAG,eAAe,GACrC,MAAM,IAAI,MAAM,8CAA8C,MAAM;GACtE,OAAO;EACT;CACF,CAAC;AACH;AAQA,MAAa,yBAAyB,OAAO,EAC3C,OACA,MACA,SACA,eACmC;CACnC,MAAM,8BAAc,IAAI,IAAoB;CAC5C,MAAM,QAAQ,qBAAqB,QAAQ;CAC3C,MAAM,UAAU,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,CAAC,MACpC,MAAM,UAAU,KAAK,UAAU,SAAS,MAAM,UAAU,MAC3D;CACA,KAAK,MAAM,OAAO,SAAS;EACzB,MAAM,WAAW,MAAM,IAAI,IAAI,IAAI;EACnC,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,yBAAyB,IAAI,MAAM;EAClE,MAAM,cAAc,KAAK,KAAK,SAAS,QAAQ;EAC/C,IAAI,IAAI,cAAc,OAAO,IAAI,SAAS,eAAe,MACvD,MAAM,wBACJ,MAAM,mBAAmB,MAAM,IAAI,SAAS,GAC5C,WACF;EACF,YAAY,IAAI,IAAI,MAAM,WAAW;CACvC;CACA,MAAM,eAAe,yBAAyB,UAAU,KAAK;CAC7D,MAAM,UACJ,KAAK,KAAK,SAAS,cAAc,GACjC,KAAK,UAAU,YAAY,CAC7B;CACA,MAAM,aAAa,MAAM;CACzB,MAAM,eACJ,eAAe,KAAA,IACX,gBAAgB,YAAY,IAC5B,aACE,mBAAmB,YAAY,qBAAqB,GACpD,qBACF;CACN,MAAM,UACJ,KAAK,KAAK,SAAS,qBAAqB,GACxC,UAAU;EACR,UAAU,CAAC,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC,KACjC,cACC,KAAK,SAAS,SAAS,SAAS,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GACnE;EACA,GAAG;CACL,CAAC,CACH;CACA,KAAK,MAAM,CAAC,WAAW,aAAa,0BAA0B,KAAK,GAAG;EACpE,IAAI,cAAc,KAAK;EACvB,MAAM,OAAO,GAAG,UAAU;EAC1B,MAAM,SAAS,MAAM;EACrB,IAAI;EACJ,IAAI,WAAW,KAAA,GAAW,YAAY,mBAAmB,QAAQ,IAAI;OAChE;GACH,MAAM,WAAW,gBAAgB,QAAQ;GACzC,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,WAAW,GAAG;GACxC,MAAM,cAAc,SAAS;GAC7B,MAAM,WAAW,eAAe,WAAW,IACvC,YAAY,cACZ;GACJ,IACE,CAAC,MAAM,QAAQ,QAAQ,KACvB,CAAC,SAAS,OAAO,UAAmB,OAAO,UAAU,QAAQ,GAE7D,MAAM,IAAI,MACR,uDAAuD,WACzD;GACF,YAAY;IAAE,UAAU;IAAU,GAAG;GAAS;EAChD;EACA,MAAM,cAAc,KAAK,KAAK,SAAS,SAAS;EAChD,MAAM,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;EAC5C,MAAM,UACJ,KAAK,KAAK,aAAa,cAAc,GACrC,KAAK,UAAU,QAAQ,CACzB;EACA,MAAM,UACJ,KAAK,KAAK,aAAa,qBAAqB,GAC5C,UAAU,SAAS,CACrB;CACF;CACA,OAAO;AACT;AAOA,MAAa,6BAA6B,OAAO,cAAsB;CACrE,MAAM,QAAQ,OAAO,aAAqB;EACxC,KAAK,MAAM,SAAS,MAAM,QAAQ,UAAU,EAAE,eAAe,KAAK,CAAC,GAAG;GACpE,IAAI,8BAA8B,MAAM,SAAS,SAAS,MAAM,IAAI,GAClE,MAAM,IAAI,MACR,sEAAsE,MAAM,MAC9E;GACF,IACE,MAAM,YAAY,KAClB,MAAM,SAAS,kBACf,MAAM,SAAS,QAEf,MAAM,MAAM,KAAK,KAAK,UAAU,MAAM,IAAI,CAAC;EAC/C;CACF;CACA,MAAM,MAAM,SAAS;CACrB,8BACE,MAAM,SAAS,KAAK,KAAK,WAAW,cAAc,CAAC,CACrD;AACF;AAOA,MAAM,iCAAiC,OAAO,EAC5C,OACA,SACA,cAC2C;CAC3C,MAAM,SAAS,KAAK,KAAK,SAAS,gBAAgB;CAClD,MAAM,OAAO,KAAK,KAAK,SAAS,qBAAqB;CACrD,MAAM,MAAM,IAAI;CAChB,MAAM,UAAU,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE;CAC5C,MAAM,MAAM,2BAA2B;EAAE;EAAO,WAAW;EAAS;CAAK,CAAC;CAC1E,MAAM,QACJ,MAAM,MACN;EACE,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAG,QAAQ,QAAQ,GAAG,QAAQ;CAChC,GACA;EAAE,KAAK;EAAS;CAAI,CACtB;CACA,MAAM,MAAM,MAAM,2BAA2B;EAC3C,WAAW,KAAK,KAAK,QAAQ,gBAAgB,QAAQ,OAAO;EAC5D,MAAM,QAAQ;CAChB,CAAC;CACD,MAAM,UACJ,MAAM,QAAQ,MAAM,MAAM,CAAC,KAAK,WAAW,GAAG;EAAE,KAAK;EAAS;CAAI,CAAC,EAAA,CACnE,KAAK;CACP,IAAI,WAAW,QAAQ,SACrB,MAAM,IAAI,MACR,6CAA6C,QAAQ,QAAQ,QAAQ,QACvE;CACF,OAAO;AACT;AAUA,MAAa,wBAAwB,OAAO,EAC1C,OACA,MACA,SACA,OACA,UACA,wBACiB;CACjB,MAAM,UAAU,2BAA2B,KAAK;CAChD,MAAM,aAAa,MAAM,+BAA+B;EACtD;EACA;EACA;CACF,CAAC;CACD,MAAM,4BAAY,IAAI,IAAoB;CAC1C,MAAM,UAAU,KAAK,KAAK,SAAS,gBAAgB;CACnD,MAAM,MAAM,OAAO;CACnB,MAAM,oBAAoB,MAAM,uBAAuB;EACrD;EACA;EACA;EACA,UAAU;CACZ,CAAC;CACD,MAAM,WAAW,KAAK,KAAK,SAAS,WAAW;CAC/C,MAAM,MAAM,QAAQ;CACpB,MAAM,UAAU,KAAK,KAAK,UAAU,OAAO,GAAG,EAAE;CAChD,KAAK,MAAM,CAAC,OAAO,QAAQ,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG;EAC3D,MAAM,SAAS,KAAK,KAAK,SAAS,UAAU,OAAO;EACnD,MAAM,MAAM,MAAM;EAClB,MAAM,YAAY,kBAAkB,IAAI,IAAI,IAAI;EAChD,IAAI,CAAC,WACH,MAAM,IAAI,MAAM,kCAAkC,IAAI,MAAM;EAC9D,MAAM,QACJ,MAAM,MACN,CACE,YACA,GAAG,6BAA6B;GAAE,QAAQ;GAAS,WAAW;EAAO,CAAC,CACxE,GACA;GACE,KAAK;GACL,KAAK,2BAA2B;IAAE;IAAO;IAAW,MAAM;GAAS,CAAC;EACtE,CACF;EACA,MAAM,WAAW,MAAM,aAAa,MAAM;EAC1C,UAAU,IAAI,IAAI,MAAM,QAAQ;CAClC;CACA,OAAO;AACT;AAEA,MAAM,mBAAmB,OAAO,SAAiB;CAC/C,MAAM,QAAiB,KAAK,OAExB,MAAM,WAAW,8BAA8B,mBAAmB,IAAI,GAAG,EAAA,CACzE,SAAS,MAAM,CACnB;CACA,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,MAAM,WAAW,GAC7D,MAAM,IAAI,MAAM,8BAA8B,MAAM;CACtD,OAAO,MAAM;AACf;AAEA,MAAa,8BAA8B,EACzC,OACA,WACA,MACA,cAAc,QAAQ,UAMlB;CACJ,MAAM,MAAM,OAAO,YACjB,OAAO,QAAQ,WAAW,CAAC,CAAC,QACzB,CAAC,SACA,CAAC,0CAA0C,KAAK,GAAG,KACnD,QAAQ,eACR,QAAQ,cACZ,CACF;CACA,OAAO,OAAO,KAAK;EACjB,MAAM,GAAG,MAAM,MAAM,KAAK,YAAY,KAAK,KAAK,WAAW,mBAAmB,IAAI,KAAK,UAAU,UAAU,KAAK,UAAU;EAC1H,MAAM;EACN,kBAAkB,KAAK,KAAK,MAAM,WAAW;EAC7C,uBAAuB,KAAK,KAAK,MAAM,OAAO;EAC9C,qBAAqB;EAErB,wBAAwB;EAExB,4CAA4C;EAC5C,8BAA8B;EAC9B,wBAAwB;EACxB,0BAA0B;EAC1B,yBAAyB;EACzB,mBAAmB;EACnB,IAAI;EACJ,UAAU;EACV,iBAAiB,KAAK,KAAK,MAAM,QAAQ;EACzC,gBAAgB,KAAK,KAAK,MAAM,OAAO;EACvC,eAAe,KAAK,KAAK,MAAM,MAAM;CACvC,CAAC;CACD,OAAO;AACT;AAEA,MAAM,kBAAkB,MAAgB,UAAyB;CAC/D,MAAM,aAAa,KAAK,GAAG,CAAC;CAC5B,IACE,KACG,MAAM,CAAC,CAAC,CACR,MACE,aACC,KAAK,MAAM,WAAW,QAAQ,KAC9B,uBAAuB,KAAK,QAAQ,CACxC,GAEF,MAAM,IAAI,MACR,iEACF;CACF,IAAI,eAAe,QAAQ,OAAO,CAAC,MAAM,MAAM,GAAG,KAAK,MAAM,CAAC,CAAC;CAC/D,IAAI,KAAK,OAAO,SAAS,eAAe,OACtC,OAAO;EAAC,MAAM;EAAM,MAAM;EAAK,GAAG,KAAK,MAAM,CAAC;CAAC;CACjD,IAAI,KAAK,OAAO,SAAS,eAAe,QACtC,OAAO;EAAC,MAAM;EAAM,MAAM;EAAM,GAAG,KAAK,MAAM,CAAC;CAAC;CAClD,MAAM,IAAI,MACR,2EACF;AACF;AASA,MAAa,2BAA2B,EACtC,SACA,OACA,WACA,MACA,cACmC;CAqBnC,OAAO;EAnBL,YAAY,QACR;GACE,MAAM;GACN,MAAM;GACN;GACA;GACA;GACA;EACF,IACA;GACE,MAAM;GACN,MAAM;GACN;GACA;GACA;GACA;GACA;GACA,KAAK,KAAK,MAAM,YAAY;EAC9B;EAGJ,YAAY,SACR;GAAC,MAAM;GAAM,MAAM;GAAM;GAAM;GAAW;EAAW,IACrD;GAAC,MAAM;GAAM,MAAM;GAAK;EAAS;EACrC;GACE,MAAM;GACN,KAAK,KAAK,WAAW,iCAAiC;GACtD;EACF;EACA,eAAe,QAAQ,OAAO,KAAK;EACnC,eAAe,QAAQ,OAAO,KAAK;CACrC;AACF;AAEA,MAAa,qCAAqC,OAChD,YACG;CACH,MAAM,MAAM,2BAA2B,OAAO;CAC9C,MAAM,WAAW,wBAAwB,OAAO;CAChD,KAAK,MAAM,CAAC,OAAO,SAAS,SAAS,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG;EAC1D,MAAM,aAAa,KAAK,GAAG,CAAC;EAC5B,IAAI,CAAC,YAAY,MAAM,IAAI,MAAM,qCAAqC;EACtE,QAAQ,OAAO,MACb,MAAM,QAAQ,YAAY,KAAK,MAAM,CAAC,GAAG;GAAE,KAAK,QAAQ;GAAW;EAAI,CAAC,CAC1E;EAEA,MAAM,gCAAgC,QAAQ,SAAS;EACvD,IAAI,UAAU,GAAG;EACjB,MAAM,eAAe,KAAK,KAAK,QAAQ,WAAW,cAAc;EAChE,MAAM,WAAoB,KAAK,MAAM,MAAM,SAAS,cAAc,MAAM,CAAC;EACzE,IAAI,CAAC,eAAe,QAAQ,GAC1B,MAAM,IAAI,MAAM,mCAAmC;EACrD,MAAM,aAAa,MAAM,SACvB,KAAK,KACH,QAAQ,WACR,QAAQ,YAAY,QAAQ,sBAAsB,gBACpD,GACA,MACF;EAGA,MAAM,EAAE,WAAW,mBAAmB,MAAM,uBAAuB;GACjE;GACA,MAHA,QAAQ,YAAY,QAAQ,KAAK,MAAM,UAAU,IAAIC,QAAM,UAAU;GAIrE,SAAS,QAAQ;GACjB,WAAW,QAAQ;EACrB,CAAC;EACD,IAAI,QAAQ,YAAY,OAAO;GAG7B,MAAM,UAAU,SAAS,GAAG,CAAC;GAC7B,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,kCAAkC;GAChE,QAAQ,KAAK,GAAG,cAAc;GAC9B,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW,GAAG;GACzC,MAAM,UACJ,cACA,GAAG,KAAK,UAAU;IAAE,GAAG;IAAU,cAAc;GAAU,GAAG,MAAM,CAAC,EAAE,GACvE;EACF,OAAO;GACL,MAAM,gBAAgB,KAAK,KAAK,QAAQ,WAAW,qBAAqB;GACxE,MAAM,YAAqBA,QAAM,MAAM,SAAS,eAAe,MAAM,CAAC;GACtE,IAAI,CAAC,eAAe,SAAS,GAC3B,MAAM,IAAI,MAAM,sCAAsC;GACxD,MAAM,UACJ,eACA,UAAU;IAAE,GAAG;IAAW,aAAa;GAAU,CAAC,CACpD;EACF;CACF;AACF;AAaA,MAAM,aAAa,OAAO,EACxB,aACA,SACA,KACA,SACA,WACA,SACA,OACA,QACA,cACoB;CACpB,MAAM,mBAAmB,UAAU,IAAI,IAAI,IAAI;CAC/C,IAAI,CAAC,kBACH,MAAM,IAAI,MAAM,8BAA8B,IAAI,MAAM;CAC1D,MAAM,YAAqB,KAAK,MAC9B,MAAM,QAAQ,OAAO;EAAC;EAAQ;EAAkB;CAAsB,GAAG,EACvE,KAAK,QACP,CAAC,CACH;CACA,IAAI,CAAC,eAAe,SAAS,GAC3B,MAAM,IAAI,MAAM,oCAAoC,IAAI,MAAM;CAChE,0BAA0B;EACxB;EACA,KAAK;GAAE,WAAW,IAAI;GAAW,MAAM,IAAI;GAAM,UAAU;EAAU;CACvE,CAAC;CACD,MAAM,SAAS,MAAM,mBAAmB,aAAa,QAAQ,OAAO;CACpE,MAAM,YAAY,KAAK,KACrB,SACA,WAAW,QAAQ,GAAG,WAAW,QAAQ,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE,GACvF;CACA,MAAM,2BAA2B,MAAM;CACvC,MAAM,wBAAwB,QAAQ,SAAS;CAC/C,MAAM,WAAW,MAAM,SAAS,KAAK,KAAK,WAAW,cAAc,CAAC;CACpE,MAAM,gBAAgB;EACpB;EACA;EACA;CACF,CAAC,CAAC,MAAM,UAAU;EAChB,MAAM,UAAU,SAAS;EACzB,OAAO,eAAe,OAAO,KAAK,OAAO,QAAQ,iBAAiB;CACpE,CAAC;CACD,MAAM,gBAAwC,CAAC;CAC/C,IAAI,QAAQ,SAAS,SAAS;EAC5B,MAAM,QAAQ,UAAU;EACxB,IAAI,CAAC,eAAe,KAAK,KAAK,OAAO,MAAM,aAAa,UACtD,MAAM,IAAI,MAAM,wCAAwC,IAAI,MAAM;EACpE,MAAM,WAAW,OAAO,MAAM,iBAAiB,YAAY;EAC3D,MAAM,WAAW,4BAA4B;GAC3C,YAAY,MAAM;GAClB,eAAe,MAAM,iBAAiB,OAAO;GAC7C,KAAK,WACD;IACE,OACE,OAAO,MAAM,iBAAiB,WAC1B,MAAM,eACN,KAAA;IACN,UAAU,MAAM,iBAAiB,WAAW;GAC9C,IACA,KAAA;EACN,CAAC;EACD,OAAO,OAAO,eAAe,QAAQ;EACrC,QAAQ,OAAO,MACb,GAAG,IAAI,KAAK,IAAI,QAAQ,SAAS,SAAS,QAAQ,SAAS,iBAAiB,KAAA,IAAY,KAAK,eAAe,SAAS,eAAe,GACtI;CACF;CACA,MAAM,mCAAmB,IAAI,IAAoB;CACjD,KAAK,MAAM,QAAQ,QAAQ,KAAK,GAAG;EACjC,MAAM,WAAW,UAAU,IAAI,IAAI;EACnC,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,8BAA8B,MAAM;EACnE,iBAAiB,IAAI,MAAM,QAAQ;CACrC;CACA,MAAM,gBAAgB,qBAAqB;EACzC;EACA,WAAW;EACX,YAAY,OAAO;EACnB,OAAO;EACP;CACF,CAAC;CACD,MAAM,UACJ,KAAK,KAAK,WAAW,cAAc,GACnC,GAAG,KAAK,UAAU,cAAc,UAAU,MAAM,CAAC,EAAE,GACrD;CACA,IAAI,cAAc,YAAY,QAC5B,MAAM,UACJ,KAAK,KAAK,WAAW,qBAAqB,GAC1C,UAAU,cAAc,SAAS,CACnC;CACF,KAAK,MAAM,YAAY;EACrB;EACA;EACA;EACA;EACA;EACA;CACF,GACE,MAAM,GAAG,KAAK,KAAK,WAAW,QAAQ,GAAG,EAAE,OAAO,KAAK,CAAC;CAC1D,MAAM,OAAO,KAAK,KAAK,WAAW,gBAAgB;CAClD,MAAM,MAAM,IAAI;CAChB,MAAM,UAAU,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE;CAC5C,MAAM,UAAU;EAAE;EAAS;EAAO;EAAW;EAAM;CAAQ;CAC3D,MAAM,mCAAmC,OAAO;CAIhD,KAAI,MAHoB,SACtB,KAAK,KAAK,WAAW,sCAAsC,CAC7D,EAAA,CACc,eAAe,OAAO,oBAClC,MAAM,IAAI,MAAM,qDAAqD;CACvE,MAAM,MAAM,2BAA2B,OAAO;CAC9C,KAAK,MAAM,QAAQ,wBAAwB,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG;EAC5D,MAAM,gCAAgC,SAAS;EAC/C,MAAM,aAAa,KAAK,GAAG,CAAC;EAC5B,IAAI,CAAC,YAAY,MAAM,IAAI,MAAM,0BAA0B;EAC3D,QAAQ,OAAO,MACb,MAAM,QAAQ,YAAY,KAAK,MAAM,CAAC,GAAG;GAAE,KAAK;GAAW;EAAI,CAAC,CAClE;CACF;CACA,QAAQ,OAAO,MACb,GAAG,IAAI,KAAK,IAAI,QAAQ,qCAC1B;AACF;AAOA,MAAa,kCAAkC,OAAO,EACpD,WACA,MACA,gBAC4C;CAC5C,KAAK,MAAM,CAAC,MAAM,aAAa,WAAW;EACxC,MAAM,WAAoB,KAAK,MAC7B,MAAM,QAAQ,OAAO;GAAC;GAAQ;GAAU;EAAsB,GAAG,EAC/D,KAAK,UACP,CAAC,CACH;EACA,IAAI,CAAC,eAAe,QAAQ,GAC1B,MAAM,IAAI,MAAM,oCAAoC,MAAM;EAC5D,0BAA0B;GAAE;GAAU;GAAM,OAAO,UAAU;EAAO,CAAC;CACvE;AACF;AAUA,MAAa,6BAA6B,OAAO,EAC/C,WACA,UACA,OACA,MACA,YACA,iBACiC;CACjC,MAAM,SAAS,2BAA2B,KAAK,CAAC,CAAC;CACjD,KAAK,MAAM,CAAC,MAAM,YAAY,WAAW;EACvC,MAAM,MAAM,SAAS,IAAI,IAAI;EAC7B,IAAI,QAAQ,KAAA,GAAW,MAAM,IAAI,MAAM,2BAA2B,MAAM;EACxE,MAAM,cAAc,KAAK,MAAM,KAAK,IAAI,WAAW,uBAAuB;EAC1E,MAAM,SAAS,MAAM;EACrB,IAAI,WAAW,KAAA,GACb,MAAM,IAAI,MAAM,qCAAqC,aAAa;EACpE,MAAM,WAAW,qBAAqB,KAAK,MAAM,MAAM,CAAC;EACxD,MAAM,SAAS,MAAM,sBAAsB,OAAO;EAClD,MAAM,WAAW,OAAO,IAAI,sBAAsB;EAClD,IAAI,aAAa,KAAA,GACf,MAAM,IAAI,MAAM,4BAA4B,MAAM;EACpD,MAAM,cAAc,qBAAqB;GACvC,UAAU,KAAK,MAAM,QAAQ;GAC7B,QAAQ,SAAS;GACjB;GACA;GACA,QAAQ;IAAE;IAAM;GAAW;EAC7B,CAAC;EACD,IAAI,YAAY,SAAS,GACvB,MAAM,IAAI,MACR,uCAAuC,KAAK,IAAI,YAAY,KAAK,UAAU,MAAM,OAAO,CAAC,CAAC,KAAK,IAAI,GACrG;EACF,MAAM,8BAA8B;GAClC,OAAO;GACP,QAAQ,SAAS;GACjB;GACA;EACF,CAAC;CACH;AACF;AASA,MAAa,oBAAoB,OAAO,EACtC,MAAM,WACN,UAAU,UACV,cACA,aACA,QAAQ,kBACmB;CAC3B,MAAM,SAAS,qBAAqB,WAAW;CAC/C,IAAI,iBAAiB,OAAO,cAC1B,MAAM,IAAI,MAAM,yDAAyD;CAC3E,IAAI,SAAS,WAAW,GACtB,MAAM,IAAI,MAAM,sDAAsD;CACxE,MAAM,OAAO,MAAM,SAAS,SAAS;CACrC,MAAM,cAAc,MAAM,mBACxB,MACA,qBAAqB,aAAa,cAAc,CAClD;CACA,MAAM,WAAW,sBACf,MAAM,SAAS,KAAK,KAAK,aAAa,sBAAsB,CAAC,CAC/D;CACA,+BAA+B;EAAE;EAAU;CAAS,CAAC;CACrD,MAAM,QAAQ,MAAM,iBAAiB,IAAI;CACzC,MAAM,WAAW,yBAAyB,KAAK;CAC/C,MAAM,aAIA,CAAC;CACP,MAAM,sBAAM,IAAI,IAA6B;CAC7C,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,SAAS,UAAU;EAC5B,MAAM,YAAY,qBAAqB,OAAO,kBAAkB;EAChE,IAAI,KAAK,IAAI,SAAS,GACpB,MAAM,IAAI,MAAM,+BAA+B,WAAW;EAC5D,KAAK,IAAI,SAAS;EAClB,MAAM,MAAM,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,CAAC,MAChC,cAAc,UAAU,cAAc,SACzC;EACA,IAAI,CAAC,OAAO,IAAI,SAAS,eAAe,MACtC,MAAM,IAAI,MACR,wEAAwE,WAC1E;EACF,MAAM,UAAU,SAAS,MACtB,cAAc,UAAU,YAAY,SACvC;EACA,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,sCAAsC,WAAW;EACnE,0BAA0B;GAAE;GAAS;EAAI,CAAC;EAC1C,MAAM,2BACJ,MAAM,mBAAmB,aAAa,QAAQ,OAAO,CACvD;EACA,eAAe,QAAQ,OAAO;GAC5B,MAAM;GACN,KAAK;GACL,MAAM;GACN,KAAK;EACP,CAAC;EACD,eAAe,QAAQ,OAAO;GAC5B,MAAM;GACN,KAAK;GACL,MAAM;GACN,KAAK;EACP,CAAC;EACD,MAAM,UAAU,uBAAuB;GAAE,UAAU;GAAK;GAAU;EAAM,CAAC;EACzE,KAAK,MAAM,CAAC,MAAM,WAAW,SAAS;GACpC,0BAA0B;IACxB,UAAU,OAAO;IACjB,MAAM,OAAO;IACb,OAAO,KAAK,MAAM,KAAK,OAAO,WAAW,cAAc;GACzD,CAAC;GACD,IAAI,IAAI,MAAM,MAAM;EACtB;EACA,WAAW,KAAK;GAAE;GAAK;GAAS;EAAQ,CAAC;CAC3C;CACA,2BAA2B,KAAK;CAChC,MAAM,UAAU,MAAM,QAAQ,KAAK,KAAK,OAAO,GAAG,uBAAuB,CAAC;CAC1E,IAAI;EACF,MAAM,QAAQ,MAAM,uBAAuB,SAAS,MAAM;EAC1D,MAAM,YAAY,MAAM,sBAAsB;GAC5C;GACA;GACA;GACA;GACA,UAAU;GACV,mBAAmB;EACrB,CAAC;EACD,MAAM,gCAAgC;GACpC;GACA,MAAM,OAAO;GACb,WAAW;EACb,CAAC;EACD,MAAM,2BAA2B;GAC/B;GACA,UAAU;GACV;GACA,MAAM,OAAO;GACb,YAAY,OAAO;GACnB,YAAY,MAAM;EACpB,CAAC;EACD,KAAK,MAAM,aAAa,YACtB,KAAK,MAAM,WAAW,CAAC,OAAO,MAAM,GAClC,MAAM,WAAW;GACf;GACA,GAAG;GACH;GACA;GACA;GACA;GACA;EACF,CAAC;CACP,UAAU;EACR,MAAM,GAAG,SAAS;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;CACpD;AACF;;;AC9jCA,MAAa,sBACX;AAEF,MAAa,gCAAgC,SAAmB;CAC9D,IAAI,KAAK,WAAW,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,OAC5D,OAAO,EAAE,MAAM,OAAO;CACxB,MAAM,0BAAU,IAAI,IAAoB;CACxC,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,OAAO,KAAK;EAClB,MAAM,QAAQ,KAAK,QAAQ;EAC3B,IACE,CAAC,QACD,CAAC;GAAC;GAAc;GAAmB;EAAgB,CAAC,CAAC,SAAS,IAAI,KAClE,CAAC,SACD,QAAQ,IAAI,IAAI,GAEhB,MAAM,IAAI,MAAM,mBAAmB;EACrC,QAAQ,IAAI,MAAM,KAAK;CACzB;CACA,MAAM,UAAU,QAAQ,IAAI,YAAY;CACxC,MAAM,eAAe,QAAQ,IAAI,iBAAiB;CAClD,MAAM,cAAc,QAAQ,IAAI,gBAAgB;CAChD,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAChC,MAAM,IAAI,MAAM,mBAAmB;CACrC,MAAM,WAAoB,KAAK,MAAM,OAAO;CAC5C,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAClD,MAAM,IAAI,MAAM,0CAA0C;CAC5D,OAAO;EACL,MAAM;EACN,UAAU,SAAS,KAAK,UACtB,qBAAqB,OAAO,YAAY,CAC1C;EACA;EACA,aAAa,qBAAqB,aAAa,gBAAgB;CACjE;AACF;;;AC5BA,MAAM,OAAO,YAAY;CACvB,MAAM,kBAAkB,6BAA6B,QAAQ,KAAK,MAAM,CAAC,CAAC;CAC1E,IAAI,gBAAgB,SAAS,QAAQ;EACnC,QAAQ,OAAO,MAAM,GAAG,oBAAoB,GAAG;EAC/C;CACF;CACA,MAAM,SAAkB,KAAK,MAC3B,MAAM,SAAS,IAAI,IAAI,qBAAqB,OAAO,KAAK,GAAG,GAAG,MAAM,CACtE;CACA,MAAM,kBAAkB;EACtB,MAAM,QAAQ,IAAI;EAClB,UAAU,gBAAgB;EAC1B,cAAc,gBAAgB;EAC9B,aAAa,gBAAgB;EAC7B;CACF,CAAC;AACH;AAEA,KAAK,CAAC,CAAC,OAAO,UAAmB;CAC/B,QAAQ,OAAO,MACb,oBAAoB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAC7E;CACA,QAAQ,WAAW;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"consumer-compat-cli.mjs","names":["record","parse","parse"],"sources":["../src/consumer-build-approvals.ts","../src/consumer-installed-bins.ts","../src/consumer-react.ts","../src/publish-artifact-syntax.ts","../src/consumer-compat.ts","../src/consumer-compat-arguments.ts","../src/consumer-compat-cli.ts"],"sourcesContent":["import { lstat, readFile, realpath } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { valid } from \"semver\";\n\nimport { consumerRecord } from \"./consumer-compat-config\";\n\n// Direct fixture declarations select installed identities; aliases never grant\n// approval to the dependency key or to undeclared transitive packages.\nexport const consumerBuildApprovals = async ({\n manifest,\n lock,\n manager,\n directory,\n}: {\n manifest: Record<string, unknown>;\n lock: unknown;\n manager: \"npm\" | \"pnpm\";\n directory: string;\n}) => {\n if (!consumerRecord(lock))\n throw new Error(\"invalid consumer dependency lock\");\n const approvals: Record<string, true> = {};\n const rebuildTargets = new Set<string>();\n for (const field of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ]) {\n const entries = manifest[field];\n if (entries === undefined) continue;\n if (!consumerRecord(entries)) throw new Error(`invalid fixture ${field}`);\n for (const key of Object.keys(entries)) {\n const packages = lock[\"packages\"];\n const importers = lock[\"importers\"];\n const importer = consumerRecord(importers) ? importers[\".\"] : undefined;\n const dependencies = consumerRecord(importer)\n ? importer[field]\n : undefined;\n const dependencyTable = manager === \"npm\" ? packages : dependencies;\n const installedKey = manager === \"npm\" ? `node_modules/${key}` : key;\n const dependency = consumerRecord(dependencyTable)\n ? dependencyTable[installedKey]\n : undefined;\n if (!consumerRecord(dependency)) {\n if (field === \"optionalDependencies\") continue;\n throw new Error(`missing resolved fixture dependency identity: ${key}`);\n }\n const installedDirectory = path.join(directory, \"node_modules\", key);\n if (field === \"optionalDependencies\") {\n try {\n await lstat(installedDirectory);\n } catch (error) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n )\n continue;\n throw error;\n }\n }\n const installed: unknown = JSON.parse(\n await readFile(path.join(installedDirectory, \"package.json\"), \"utf8\"),\n );\n if (\n !consumerRecord(installed) ||\n typeof installed[\"name\"] !== \"string\" ||\n installed[\"name\"] === \"\" ||\n typeof installed[\"version\"] !== \"string\" ||\n valid(installed[\"version\"]) === null\n )\n throw new Error(\n `invalid installed fixture dependency identity: ${key}`,\n );\n const identity = `${installed[\"name\"]}@${installed[\"version\"]}`;\n // npm name selectors use the alias key; exact directories select only this installed node.\n rebuildTargets.add(await realpath(installedDirectory));\n const resolved = dependency[\"resolved\"];\n if (\n manager === \"npm\" &&\n typeof resolved === \"string\" &&\n !resolved.startsWith(\"https://registry.npmjs.org/\")\n )\n approvals[\n resolved.startsWith(\"file:\") ? resolved : `file:${resolved}`\n ] = true;\n else {\n const version = dependency[\"version\"];\n // pnpm matches local artifact builds by resolved source, using the installed real name.\n const source =\n manager === \"pnpm\" &&\n typeof version === \"string\" &&\n version.startsWith(\"file:\")\n ? version.replace(/\\([^)]*\\)/g, \"\")\n : undefined;\n approvals[\n source === undefined ? identity : `${installed[\"name\"]}@${source}`\n ] = true;\n }\n }\n }\n return { approvals, rebuildTargets: [...rebuildTargets] };\n};\n","import { lstat, readdir, realpath } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport const consumerReservedToolBins = [\"node\", \"npm\", \"npx\", \"pnpm\"] as const;\n\nconst missing = (error: unknown) =>\n error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n\n/** Dependency lifecycle PATHs include nested and virtual-store node_modules bins. */\nexport const assertConsumerInstalledToolBins = async (directory: string) => {\n const root = await realpath(directory);\n const visited = new Set<string>();\n const assertContained = (canonical: string) => {\n const relative = path.relative(root, canonical);\n if (\n relative === \"..\" ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n )\n throw new Error(\n \"installed consumer dependency path must stay within the fixture\",\n );\n };\n const visit = async (location: string) => {\n const canonical = await realpath(location);\n assertContained(canonical);\n if (\n path.basename(location) === \".bin\" &&\n path.basename(path.dirname(location)) === \"node_modules\"\n ) {\n for (const name of consumerReservedToolBins) {\n try {\n await lstat(path.join(location, name));\n } catch (error) {\n if (missing(error)) continue;\n throw error;\n }\n throw new Error(\n `installed consumer binary ${name} conflicts with the pinned tool before lifecycle scripts`,\n );\n }\n }\n if (visited.has(canonical)) return;\n visited.add(canonical);\n for (const entry of await readdir(canonical, { withFileTypes: true })) {\n if (entry.isDirectory()) await visit(path.join(canonical, entry.name));\n else if (entry.isSymbolicLink()) {\n const target = await realpath(path.join(canonical, entry.name));\n assertContained(target);\n if ((await lstat(target)).isDirectory())\n await visit(path.join(canonical, entry.name));\n }\n }\n };\n const modules = path.join(root, \"node_modules\");\n try {\n await lstat(modules);\n } catch (error) {\n if (missing(error)) return;\n throw error;\n }\n await visit(modules);\n};\n","import { compare, satisfies, valid, validRange } from \"semver\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\ntype PublishedVersionsOptions = {\n versions: Record<string, unknown>;\n range: string;\n};\nconst publishedVersions = ({ versions, range }: PublishedVersionsOptions) => {\n if (!validRange(range))\n throw new Error(`invalid consumer peer range: ${range}`);\n const candidates = Object.keys(versions)\n .filter((version) => valid(version) !== null && satisfies(version, range))\n .sort(compare);\n if (candidates.length === 0)\n throw new Error(`no published consumer version satisfies ${range}`);\n return candidates;\n};\n\ntype ConsumerReactVersionsOptions = {\n reactRange: string;\n reactVersions: Record<string, unknown>;\n dom?:\n | {\n range?: string | undefined;\n versions: Record<string, unknown>;\n }\n | undefined;\n};\n\n/** Select the oldest published React with a compatible allowed renderer when required. */\nexport const selectConsumerReactVersions = ({\n reactRange,\n reactVersions,\n dom,\n}: ConsumerReactVersionsOptions) => {\n const reactCandidates = publishedVersions({\n versions: reactVersions,\n range: reactRange,\n });\n if (dom === undefined) {\n const react = reactCandidates.at(0);\n if (react === undefined) throw new Error(\"Missing React version candidate\");\n return { react };\n }\n const domRange = dom.range ?? \"*\";\n const domCandidates = publishedVersions({\n versions: dom.versions,\n range: domRange,\n });\n for (const react of reactCandidates) {\n const renderer = domCandidates.find((version) => {\n const metadata = dom.versions[version];\n if (!record(metadata) || !record(metadata[\"peerDependencies\"]))\n return false;\n const range = metadata[\"peerDependencies\"][\"react\"];\n return (\n typeof range === \"string\" &&\n validRange(range) !== null &&\n satisfies(react, range)\n );\n });\n if (renderer !== undefined) return { react, \"react-dom\": renderer };\n }\n throw new Error(\n `no published React/ReactDOM pair satisfies React ${reactRange} and ReactDOM ${domRange}`,\n );\n};\n","import { parse, type Options } from \"acorn\";\nimport { execFile } from \"node:child_process\";\nimport { mkdtemp, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { wrap } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\n\nimport {\n publishedNodeTargetSupportsConsumer,\n type PublishTarget,\n} from \"./publish-contract\";\n\nconst command = promisify(execFile);\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst javascript = /\\.(?:js|mjs|cjs)$/i;\n\nconst syntaxYears = new Map(\n Object.entries({\n es5: 5,\n es2015: 2015,\n es2016: 2016,\n es2017: 2017,\n es2018: 2018,\n es2019: 2019,\n es2020: 2020,\n es2021: 2021,\n es2022: 2022,\n es2023: 2023,\n es2024: 2024,\n es2025: 2025,\n } as const satisfies Record<string, Options[\"ecmaVersion\"]>),\n);\n\n/** Explicit ECMAScript targets bound syntax; unbounded targets use native Node. */\nexport const artifactEcmaVersion = ({\n target,\n node,\n}: {\n target: PublishTarget;\n node: string;\n}): Options[\"ecmaVersion\"] => {\n if (target.type === \"types-only\") return \"latest\";\n if (target.targets.length === 0)\n throw new Error(\"Packed JavaScript requires a declared target\");\n let version: Options[\"ecmaVersion\"] = \"latest\";\n for (const identifier of target.targets) {\n if (identifier === \"esnext\") continue;\n const year = syntaxYears.get(identifier);\n if (year !== undefined) {\n if (version === \"latest\" || year < version) version = year;\n continue;\n }\n if (publishedNodeTargetSupportsConsumer({ target: identifier, node }))\n continue;\n throw new Error(\n `Unsupported packed JavaScript syntax target ${identifier}; use an explicit ECMAScript year or a supported Node target`,\n );\n }\n return version;\n};\n\nconst packedBinFiles = (files: Map<string, string>) => {\n const result = new Set<string>();\n for (const [file, source] of files) {\n if (path.posix.basename(file) !== \"package.json\") continue;\n const manifest: unknown = JSON.parse(source);\n if (!record(manifest)) throw new Error(`Invalid packed manifest: ${file}`);\n const bin = manifest[\"bin\"];\n if (bin === undefined) continue;\n let entries: unknown[] | undefined;\n if (typeof bin === \"string\") entries = [bin];\n else if (record(bin)) entries = Object.values(bin);\n if (entries === undefined)\n throw new Error(`Unsupported packed bin declaration: ${file}`);\n for (const entry of entries) {\n if (\n typeof entry !== \"string\" ||\n entry === \"\" ||\n path.posix.isAbsolute(entry) ||\n entry.includes(\"\\\\\") ||\n entry.split(\"/\").includes(\"..\")\n )\n throw new Error(`Unsafe packed bin declaration: ${file}`);\n result.add(path.posix.join(path.posix.dirname(file), entry));\n }\n }\n return result;\n};\nconst syntaxFiles = (files: Map<string, string>) => {\n const bins = packedBinFiles(files);\n for (const file of bins) {\n const source = files.get(file);\n if (source === undefined)\n throw new Error(`Missing packed executable: ${file}`);\n if (\n !javascript.test(file) &&\n !/^#!(?:[^\\n]*\\/node|\\/usr\\/bin\\/env(?: -S)? node)(?:[ \\r\\n]|$)/.test(\n source,\n )\n )\n throw new Error(`Unsupported packed executable language: ${file}`);\n }\n return [\n ...new Set(\n [...files.keys()]\n .filter((file) => javascript.test(file))\n .concat([...bins]),\n ),\n ];\n};\n\nconst packageMode = (\n files: Map<string, string>,\n file: string,\n): \"module\" | \"script\" | \"detect\" => {\n let directory = path.posix.dirname(file);\n while (directory !== \".\") {\n const source = files.get(`${directory}/package.json`);\n if (source !== undefined) {\n const manifest: unknown = JSON.parse(source);\n if (!record(manifest))\n throw new Error(`Invalid packed manifest: ${directory}`);\n if (manifest[\"type\"] === \"module\") return \"module\";\n if (manifest[\"type\"] === \"commonjs\") return \"script\";\n if (manifest[\"type\"] !== undefined)\n throw new Error(`Invalid packed package type: ${directory}`);\n return \"detect\";\n }\n directory = path.posix.dirname(directory);\n }\n return \"detect\";\n};\n\ntype ArtifactSyntaxOptions = {\n files: Map<string, string>;\n target: PublishTarget;\n node: string;\n};\n\nconst parseArtifactSource = (source: string, options: Options) => {\n const script = options.sourceType === \"script\";\n const content = script\n ? source.replace(/^\\uFEFF/, \"\").replace(/^#![^\\r\\n]*/, \"\")\n : source;\n try {\n return parse(script ? wrap(content) : content, options);\n } catch (error) {\n if (\n !script ||\n !(error instanceof SyntaxError) ||\n !record(error) ||\n typeof error[\"pos\"] !== \"number\"\n )\n throw error;\n const prefixLength = wrap(\"\\u0000\").indexOf(\"\\u0000\");\n const position = Math.max(\n 0,\n Math.min(\n source.length,\n error[\"pos\"] - prefixLength + source.length - content.length,\n ),\n );\n const lines = source.slice(0, position).split(/\\r\\n|[\\n\\r\\u2028\\u2029]/);\n const location = `(${lines.length}:${lines.at(-1)?.length ?? 0})`;\n throw new SyntaxError(error.message.replace(/\\(\\d+:\\d+\\)$/, location));\n }\n};\n\n/** Enumerate all chunks and bins, including JavaScript outside declared exports. */\nexport const assertPackedArtifactSyntax = ({\n files,\n target,\n node,\n}: ArtifactSyntaxOptions) => {\n const ecmaVersion = artifactEcmaVersion({ target, node });\n const selected = syntaxFiles(files);\n if (target.type === \"types-only\" && selected.length > 0)\n throw new Error(`Types-only artifact contains JavaScript: ${selected[0]}`);\n for (const file of selected) {\n const source = files.get(file);\n if (source === undefined)\n throw new Error(`Missing packed JavaScript: ${file}`);\n let mode = packageMode(files, file);\n if (/\\.mjs$/i.test(file)) mode = \"module\";\n if (/\\.cjs$/i.test(file)) mode = \"script\";\n const parseMode = (sourceType: \"script\" | \"module\") => {\n const tree = parseArtifactSource(source, {\n ecmaVersion,\n sourceType,\n allowHashBang: true,\n allowReturnOutsideFunction: sourceType === \"script\",\n });\n // Acorn permits module declarations independently of ecmaVersion.\n if (\n ecmaVersion === 5 &&\n tree.body.some((item) => /^(?:Import|Export)/.test(item.type))\n )\n throw new Error(\"Module declarations exceed ES5\");\n };\n try {\n if (mode === \"detect\") {\n try {\n parseMode(\"script\");\n } catch {\n parseMode(\"module\");\n }\n } else parseMode(mode);\n } catch (error) {\n throw new Error(\n `Packed JavaScript ${file} exceeds its declared syntax target: ${String(error)}`,\n );\n }\n }\n};\n\nconst archiveMembers = (members: readonly string[]) => {\n const seen = new Set<string>();\n for (const file of members) {\n const parts = file.split(\"/\");\n if (\n !file.startsWith(\"package/\") ||\n file.includes(\"\\\\\") ||\n file\n .split(\"\")\n .some(\n (character) =>\n character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n ) ||\n parts.some((part) => part === \"..\" || part === \".\") ||\n parts.slice(0, -1).some((part) => part === \"\") ||\n seen.has(file)\n )\n throw new Error(`Unsupported packed artifact member: ${file}`);\n seen.add(file);\n }\n return members;\n};\n\ntype CheckPackedArtifactOptions = ArtifactSyntaxOptions & {\n executable: string;\n};\nexport const checkPackedJavaScriptWithNode = async ({\n files,\n target,\n node,\n executable,\n}: CheckPackedArtifactOptions) => {\n assertPackedArtifactSyntax({ files, target, node });\n archiveMembers([...files.keys()]);\n const scratch = await mkdtemp(path.join(tmpdir(), \"stll-artifact-syntax-\"));\n try {\n for (const [file, source] of files) {\n const destination = path.join(scratch, file);\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, source);\n }\n for (const file of syntaxFiles(files)) {\n try {\n await command(executable, [\"--check\", path.join(scratch, file)], {\n cwd: scratch,\n env: { PATH: \"/usr/bin:/bin\", HOME: scratch },\n });\n } catch (error) {\n throw new Error(\n `Packed JavaScript ${file} is incompatible with consumer Node ${node}: ${String(error)}`,\n );\n }\n }\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n};\n\n/** Read bytes without extracting archive-controlled paths or links. */\nexport const readPackedSyntaxFiles = async (archive: string) => {\n const { stdout: listing } = await command(\"tar\", [\"-tzf\", archive], {\n maxBuffer: 16 * 1024 * 1024,\n });\n const files = new Map<string, string>();\n const members = archiveMembers(\n listing.split(\"\\n\").filter((entry) => entry !== \"\"),\n );\n const read = async (file: string) => {\n if (!members.includes(file))\n throw new Error(`Missing packed syntax input: ${file}`);\n const { stdout: metadata } = await command(\"tar\", [\"-tvzf\", archive, file]);\n if (\n !metadata.startsWith(\"-\") ||\n metadata.trimEnd().split(\"\\n\").length !== 1\n )\n throw new Error(`Packed syntax input must be a regular file: ${file}`);\n const { stdout } = await command(\"tar\", [\"-xOf\", archive, file], {\n maxBuffer: 16 * 1024 * 1024,\n });\n files.set(file, stdout);\n };\n for (const file of members)\n if (javascript.test(file) || path.posix.basename(file) === \"package.json\")\n await read(file);\n for (const file of packedBinFiles(files))\n if (!files.has(file)) await read(file);\n return files;\n};\n","import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport {\n cp,\n lstat,\n mkdir,\n mkdtemp,\n readFile,\n readdir,\n realpath,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { parse, stringify } from \"yaml\";\n\nimport { consumerBuildApprovals } from \"./consumer-build-approvals\";\nimport {\n bunCatalogState,\n catalogState,\n pnpmWorkspaceState,\n} from \"./consumer-catalogs\";\nimport {\n consumerPackageClosure,\n consumerStagingPaths,\n consumerPackRootManifest,\n assertConsumerFixtureManifest,\n assertConsumerFixtureKind,\n assertConsumerFixtureSelection,\n bindConsumerManifest,\n consumerDependencyConfigFiles,\n consumerRecord,\n consumerRelativePath,\n discoverConsumerManifests,\n discoverConsumerPackages,\n parseConsumerFixtures,\n type ConsumerFixture,\n type ConsumerPackage,\n} from \"./consumer-compat-config\";\nimport { assertConsumerInstalledToolBins } from \"./consumer-installed-bins\";\nimport { assertConsumerNodeSupport } from \"./consumer-node-support\";\nimport { selectConsumerReactVersions } from \"./consumer-react\";\nimport {\n resolveConsumerReleasePack,\n consumerReleasePackArguments,\n type ConsumerReleasePack,\n} from \"./consumer-release-pack\";\nimport {\n checkPackedJavaScriptWithNode,\n readPackedSyntaxFiles,\n} from \"./publish-artifact-syntax\";\nimport { checkPublishContract, parsePublishContract } from \"./publish-contract\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\ntype CommandOptions = { cwd: string; env?: NodeJS.ProcessEnv };\nconst execute = (\n executable: string,\n args: readonly string[],\n { cwd, env = process.env }: CommandOptions,\n) =>\n new Promise<string>((resolve, reject) => {\n const child = spawn(executable, args, {\n cwd,\n env,\n stdio: [\"ignore\", \"pipe\", \"inherit\"],\n });\n const chunks: Buffer[] = [];\n child.stdout.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n child.on(\"error\", reject);\n child.on(\"close\", (code, signal) => {\n const output = Buffer.concat(chunks).toString(\"utf8\");\n if (code !== 0)\n reject(\n new Error(\n `${executable} failed (${signal ?? String(code)}): ${output.trim()}`,\n ),\n );\n else resolve(output);\n });\n });\n\nconst jsonFile = async (file: string) => {\n const value: unknown = JSON.parse(await readFile(file, \"utf8\"));\n if (!consumerRecord(value)) throw new Error(`expected JSON object: ${file}`);\n return value;\n};\n\nconst containedDirectory = async (root: string, relative: string) => {\n const location = await realpath(path.resolve(root, relative));\n const difference = path.relative(root, location);\n if (\n difference.startsWith(`..${path.sep}`) ||\n difference === \"..\" ||\n path.isAbsolute(difference)\n )\n throw new Error(`path leaves repository: ${relative}`);\n if (!(await lstat(location)).isDirectory())\n throw new Error(`not a directory: ${relative}`);\n return location;\n};\n\nconst fetchBytes = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok)\n throw new Error(`download failed (${response.status}): ${url}`);\n if (new URL(response.url).hostname !== new URL(url).hostname)\n throw new Error(`download redirected to another host: ${url}`);\n return Buffer.from(await response.arrayBuffer());\n};\n\nexport const verifyConsumerNodeArchive = ({\n filename,\n checksums,\n archive,\n}: {\n filename: string;\n checksums: string;\n archive: Uint8Array;\n}) => {\n const hashes = checksums.split(/\\r?\\n/).flatMap((line) => {\n const match = /^([a-f0-9]{64})\\s+\\*?(\\S+)$/.exec(line);\n return match?.[2] === filename && match[1] ? [match[1]] : [];\n });\n if (\n hashes.length !== 1 ||\n hashes[0] !== createHash(\"sha256\").update(archive).digest(\"hex\")\n )\n throw new Error(`Node archive checksum mismatch: ${filename}`);\n};\n\ntype ResolveInstalledManagerBinOptions = {\n directory: string;\n name: \"npm\" | \"pnpm\";\n};\nexport const resolveInstalledManagerBin = async ({\n directory,\n name,\n}: ResolveInstalledManagerBinOptions) => {\n const manifest = await jsonFile(path.join(directory, \"package.json\"));\n const bin = manifest[\"bin\"];\n const selector = consumerRecord(bin) ? bin[name] : bin;\n if (typeof selector !== \"string\" || selector.length === 0)\n throw new Error(`Installed ${name} package must declare its ${name} bin`);\n const root = await realpath(directory);\n const resolved = path.resolve(root, selector);\n const relative = path.relative(root, resolved);\n if (\n relative === \"..\" ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n )\n throw new Error(`Installed ${name} bin leaves its package`);\n const cli = await realpath(resolved);\n const actualRelative = path.relative(root, cli);\n if (\n actualRelative === \"..\" ||\n actualRelative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(actualRelative)\n )\n throw new Error(`Installed ${name} bin leaves its package`);\n if (!(await lstat(cli)).isFile())\n throw new Error(`Installed ${name} bin must be a file`);\n return cli;\n};\n\ntype ConsumerTools = { node: string; npm: string; pnpm: string; bin: string };\ntype WriteConsumerToolWrappersOptions = {\n node: string;\n npm: string;\n pnpm: string;\n directory: string;\n};\nexport const writeConsumerToolWrappers = async ({\n node,\n npm,\n pnpm,\n directory,\n}: WriteConsumerToolWrappersOptions) => {\n // Explicit wrappers keep fixture scripts and nested package-manager invocations on the consumer runtime.\n const wrappers = directory;\n await mkdir(wrappers);\n const quote = (value: string) => `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n await writeFile(\n path.join(wrappers, \"node\"),\n `#!/bin/sh\\nexec ${quote(node)} \"$@\"\\n`,\n { mode: 0o755 },\n );\n for (const [name, cli] of [\n [\"npm\", npm],\n [\"npx\", path.join(path.dirname(npm), \"npx-cli.js\")],\n [\"pnpm\", pnpm],\n ]) {\n if (!name || !cli) throw new Error(\"missing package manager binding\");\n await writeFile(\n path.join(wrappers, name),\n `#!/bin/sh\\nexec ${quote(node)} ${quote(cli)} \"$@\"\\n`,\n { mode: 0o755 },\n );\n }\n return {\n node,\n npm,\n pnpm,\n bin: wrappers,\n };\n};\n\nexport const provisionConsumerTools = async (\n scratch: string,\n policy: ReturnType<typeof parseToolchainPolicy>,\n): Promise<ConsumerTools> => {\n if (\n process.platform !== \"linux\" ||\n (process.arch !== \"x64\" && process.arch !== \"arm64\")\n )\n throw new Error(\"consumer compatibility requires Linux x64 or arm64\");\n const filename = `node-v${policy.consumerNode}-linux-${process.arch}.tar.xz`;\n const base = `https://nodejs.org/dist/v${policy.consumerNode}/`;\n const [archive, checksums] = await Promise.all([\n fetchBytes(`${base}${filename}`),\n fetchBytes(`${base}SHASUMS256.txt`),\n ]);\n verifyConsumerNodeArchive({\n filename,\n archive,\n checksums: checksums.toString(\"utf8\"),\n });\n const archivePath = path.join(scratch, filename);\n await writeFile(archivePath, archive);\n await execute(\n \"tar\",\n [\"-xJf\", archivePath, \"-C\", scratch, \"--no-same-owner\"],\n { cwd: scratch },\n );\n const installation = path.join(scratch, filename.slice(0, -7));\n const bin = path.join(installation, \"bin\");\n const node = path.join(bin, \"node\");\n const home = path.join(scratch, \"tools-home\");\n await mkdir(home);\n await writeFile(path.join(home, \"npmrc\"), \"\");\n const env = consumerCommandEnvironment({\n tools: { bin },\n directory: scratch,\n home,\n });\n const actual = (\n await execute(node, [\"--version\"], { cwd: scratch, env })\n ).trim();\n if (actual !== `v${policy.consumerNode}`)\n throw new Error(`consumer Node version mismatch: ${actual}`);\n const prefix = path.join(scratch, \"tools\");\n const npmBootstrap = path.join(\n installation,\n \"lib/node_modules/npm/bin/npm-cli.js\",\n );\n await execute(\n node,\n [\n npmBootstrap,\n \"install\",\n \"--prefix\",\n prefix,\n \"--ignore-scripts\",\n \"--no-audit\",\n \"--no-fund\",\n \"--package-lock=false\",\n `npm@${policy.consumerNpm}`,\n `pnpm@${policy.consumerPnpm}`,\n ],\n { cwd: scratch, env },\n );\n const npm = await resolveInstalledManagerBin({\n directory: path.join(prefix, \"node_modules/npm\"),\n name: \"npm\",\n });\n const pnpm = await resolveInstalledManagerBin({\n directory: path.join(prefix, \"node_modules/pnpm\"),\n name: \"pnpm\",\n });\n for (const [cli, expected] of [\n [npm, policy.consumerNpm],\n [pnpm, policy.consumerPnpm],\n ]) {\n if (\n !cli ||\n !expected ||\n (\n await execute(node, [cli, \"--version\"], { cwd: scratch, env })\n ).trim() !== expected\n )\n throw new Error(\"consumer package manager version mismatch\");\n }\n return writeConsumerToolWrappers({\n node,\n npm,\n pnpm,\n directory: path.join(scratch, \"consumer-bin\"),\n });\n};\n\nconst trackedManifests = async (root: string) => {\n const listed = await execute(\n \"git\",\n [\n \"ls-files\",\n \"-z\",\n \"--\",\n \"package.json\",\n \"**/package.json\",\n \"pnpm-workspace.yaml\",\n \"**/pnpm-workspace.yaml\",\n \"publish-contract.json\",\n \"**/publish-contract.json\",\n \".github/workflows/*.yml\",\n \".github/workflows/*.yaml\",\n ],\n { cwd: root },\n );\n const files: Record<string, string> = {};\n for (const file of listed.split(\"\\0\").filter(Boolean)) {\n if (\n file\n .split(\"/\")\n .some((part) => part === \"node_modules\" || part === \"vendor\")\n )\n continue;\n const location = await realpath(path.join(root, file));\n const relative = path.relative(root, location);\n if (\n relative.startsWith(`..${path.sep}`) ||\n relative === \"..\" ||\n path.isAbsolute(relative)\n )\n throw new Error(`tracked manifest leaves repository: ${file}`);\n files[file] = await readFile(location, \"utf8\");\n }\n return files;\n};\n\nconst packFilename = async (directory: string) => {\n const files = (await readdir(directory)).filter((file) =>\n file.endsWith(\".tgz\"),\n );\n if (files.length !== 1)\n throw new Error(`expected exactly one package tarball: ${directory}`);\n const filename = files.at(0);\n if (!filename) throw new Error(\"missing package tarball\");\n return path.join(directory, filename);\n};\n\nconst copyWithoutDependencies = async (source: string, destination: string) => {\n await cp(source, destination, {\n recursive: true,\n filter: async (file) => {\n if (\n [\"node_modules\", \".git\", \"pnpm-workspace.yaml\"].includes(\n path.basename(file),\n )\n )\n return false;\n if ((await lstat(file)).isSymbolicLink())\n throw new Error(`consumer staging does not accept symlinks: ${file}`);\n return true;\n },\n });\n};\n\ntype StageConsumerWorkspaceOptions = {\n files: Record<string, string>;\n root: string;\n staging: string;\n packages: Map<string, ConsumerPackage>;\n};\nexport const stageConsumerWorkspace = async ({\n files,\n root,\n staging,\n packages,\n}: StageConsumerWorkspaceOptions) => {\n const directories = new Map<string, string>();\n const paths = consumerStagingPaths(packages);\n const ordered = [...packages.values()].sort(\n (left, right) => left.directory.length - right.directory.length,\n );\n for (const pkg of ordered) {\n const relative = paths.get(pkg.name);\n if (!relative) throw new Error(`missing staging path: ${pkg.name}`);\n const destination = path.join(staging, relative);\n if (pkg.directory !== \".\" || pkg.manifest[\"private\"] !== true)\n await copyWithoutDependencies(\n await containedDirectory(root, pkg.directory),\n destination,\n );\n directories.set(pkg.name, destination);\n }\n const rootManifest = consumerPackRootManifest(packages, files);\n await writeFile(\n path.join(staging, \"package.json\"),\n JSON.stringify(rootManifest),\n );\n const rootSource = files[\"pnpm-workspace.yaml\"];\n const rootCatalogs =\n rootSource === undefined\n ? bunCatalogState(rootManifest)\n : catalogState(\n pnpmWorkspaceState(rootSource, \"pnpm-workspace.yaml\"),\n \"pnpm-workspace.yaml\",\n );\n await writeFile(\n path.join(staging, \"pnpm-workspace.yaml\"),\n stringify({\n packages: [...directories.values()].map(\n (directory) =>\n path.relative(staging, directory).split(path.sep).join(\"/\") || \".\",\n ),\n ...rootCatalogs,\n }),\n );\n for (const [directory, manifest] of discoverConsumerManifests(files)) {\n if (directory === \".\") continue;\n const file = `${directory}/pnpm-workspace.yaml`;\n const source = files[file];\n let workspace: Record<string, unknown>;\n if (source !== undefined) workspace = pnpmWorkspaceState(source, file);\n else {\n const catalogs = bunCatalogState(manifest);\n if (Object.keys(catalogs).length === 0) continue;\n const declaration = manifest[\"workspaces\"];\n const patterns = consumerRecord(declaration)\n ? declaration[\"packages\"]\n : declaration;\n if (\n !Array.isArray(patterns) ||\n !patterns.every((entry: unknown) => typeof entry === \"string\")\n )\n throw new Error(\n `catalog owner requires declared workspace packages: ${directory}`,\n );\n workspace = { packages: patterns, ...catalogs };\n }\n const destination = path.join(staging, directory);\n await mkdir(destination, { recursive: true });\n await writeFile(\n path.join(destination, \"package.json\"),\n JSON.stringify(manifest),\n );\n await writeFile(\n path.join(destination, \"pnpm-workspace.yaml\"),\n stringify(workspace),\n );\n }\n return directories;\n};\n\nexport {\n assertConsumerInstalledToolBins,\n consumerReservedToolBins,\n} from \"./consumer-installed-bins\";\n\nexport const assertConsumerFixtureFiles = async (directory: string) => {\n const visit = async (location: string) => {\n for (const entry of await readdir(location, { withFileTypes: true })) {\n if (consumerDependencyConfigFiles.some((name) => name === entry.name))\n throw new Error(\n `consumer fixture must not supply dependency-manager configuration: ${entry.name}`,\n );\n if (\n entry.isDirectory() &&\n entry.name !== \"node_modules\" &&\n entry.name !== \".git\"\n )\n await visit(path.join(location, entry.name));\n }\n };\n await visit(directory);\n assertConsumerFixtureManifest(\n await jsonFile(path.join(directory, \"package.json\")),\n );\n};\n\ntype ProvisionConsumerReleasePackerOptions = {\n tools: ConsumerTools;\n scratch: string;\n release: ConsumerReleasePack;\n};\nconst provisionConsumerReleasePacker = async ({\n tools,\n scratch,\n release,\n}: ProvisionConsumerReleasePackerOptions) => {\n const prefix = path.join(scratch, \"release-packer\");\n const home = path.join(scratch, \"release-packer-home\");\n await mkdir(home);\n await writeFile(path.join(home, \"npmrc\"), \"\");\n const env = consumerCommandEnvironment({ tools, directory: scratch, home });\n await execute(\n tools.node,\n [\n tools.npm,\n \"install\",\n \"--prefix\",\n prefix,\n \"--ignore-scripts\",\n \"--no-audit\",\n \"--no-fund\",\n \"--package-lock=false\",\n `${release.manager}@${release.version}`,\n ],\n { cwd: scratch, env },\n );\n const cli = await resolveInstalledManagerBin({\n directory: path.join(prefix, \"node_modules\", release.manager),\n name: release.manager,\n });\n const actual = (\n await execute(tools.node, [cli, \"--version\"], { cwd: scratch, env })\n ).trim();\n if (actual !== release.version)\n throw new Error(\n `release packer version mismatch: expected ${release.version}, got ${actual}`,\n );\n return cli;\n};\n\ntype PackOptions = {\n files: Record<string, string>;\n root: string;\n scratch: string;\n tools: ConsumerTools;\n packages: Map<string, ConsumerPackage>;\n workspacePackages: Map<string, ConsumerPackage>;\n};\nexport const packConsumerArtifacts = async ({\n files,\n root,\n scratch,\n tools,\n packages,\n workspacePackages,\n}: PackOptions) => {\n const release = resolveConsumerReleasePack(files);\n const releaseCli = await provisionConsumerReleasePacker({\n tools,\n scratch,\n release,\n });\n const artifacts = new Map<string, string>();\n const staging = path.join(scratch, \"pack-workspace\");\n await mkdir(staging);\n const stagedDirectories = await stageConsumerWorkspace({\n files,\n root,\n staging,\n packages: workspacePackages,\n });\n const packHome = path.join(scratch, \"pack-home\");\n await mkdir(packHome);\n await writeFile(path.join(packHome, \"npmrc\"), \"\");\n for (const [index, pkg] of [...packages.values()].entries()) {\n const packed = path.join(scratch, `packed-${index}`);\n await mkdir(packed);\n const directory = stagedDirectories.get(pkg.name);\n if (!directory)\n throw new Error(`missing pack workspace member: ${pkg.name}`);\n await execute(\n tools.node,\n [\n releaseCli,\n ...consumerReleasePackArguments({ packer: release, directory: packed }),\n ],\n {\n cwd: directory,\n env: consumerCommandEnvironment({ tools, directory, home: packHome }),\n },\n );\n const artifact = await packFilename(packed);\n artifacts.set(pkg.name, artifact);\n }\n return artifacts;\n};\n\nconst registryMetadata = async (name: string) => {\n const value: unknown = JSON.parse(\n (\n await fetchBytes(`https://registry.npmjs.org/${encodeURIComponent(name)}`)\n ).toString(\"utf8\"),\n );\n if (!consumerRecord(value) || !consumerRecord(value[\"versions\"]))\n throw new Error(`invalid registry response: ${name}`);\n return value[\"versions\"];\n};\n\nexport const consumerCommandEnvironment = ({\n tools,\n directory,\n home,\n environment = process.env,\n}: {\n tools: Pick<ConsumerTools, \"bin\">;\n directory: string;\n home: string;\n environment?: NodeJS.ProcessEnv;\n}) => {\n const env = Object.fromEntries(\n Object.entries(environment).filter(\n ([key]) =>\n !/^(?:npm_config_|pnpm_|yarn_|corepack_)/i.test(key) &&\n key !== \"NODE_PATH\" &&\n key !== \"NODE_OPTIONS\",\n ),\n );\n Object.assign(env, {\n PATH: `${tools.bin}${path.delimiter}${path.join(directory, \"node_modules/.bin\")}${path.delimiter}/usr/bin${path.delimiter}/bin`,\n HOME: home,\n npm_config_cache: path.join(home, \"npm-cache\"),\n npm_config_userconfig: path.join(home, \"npmrc\"),\n npm_config_registry: \"https://registry.npmjs.org/\",\n // Project packageManager fields cannot replace the verified consumer/release tools.\n pnpm_config_pm_on_fail: \"ignore\",\n // Pre-11 release packers use this setting instead of pmOnFail.\n npm_config_manage_package_manager_versions: \"false\",\n COREPACK_ENABLE_PROJECT_SPEC: \"0\",\n COREPACK_ENABLE_STRICT: \"0\",\n COREPACK_ENABLE_AUTO_PIN: \"0\",\n COREPACK_ENABLE_NETWORK: \"0\",\n COREPACK_ENV_FILE: \"0\",\n CI: \"true\",\n NODE_ENV: \"development\",\n XDG_CONFIG_HOME: path.join(home, \"config\"),\n XDG_CACHE_HOME: path.join(home, \"cache\"),\n XDG_DATA_HOME: path.join(home, \"data\"),\n });\n return env;\n};\n\nconst fixtureCommand = (argv: string[], tools: ConsumerTools) => {\n const executable = argv.at(0);\n if (\n argv\n .slice(1)\n .some(\n (argument) =>\n path.posix.isAbsolute(argument) ||\n /(?:^|\\/)\\.\\.(?:\\/|$)/.test(argument),\n )\n )\n throw new Error(\n \"consumer fixture command arguments must stay within the fixture\",\n );\n if (executable === \"node\") return [tools.node, ...argv.slice(1)];\n if (argv[1] === \"run\" && executable === \"npm\")\n return [tools.node, tools.npm, ...argv.slice(1)];\n if (argv[1] === \"run\" && executable === \"pnpm\")\n return [tools.node, tools.pnpm, ...argv.slice(1)];\n throw new Error(\n \"consumer fixture commands must use node or a declared npm/pnpm run script\",\n );\n};\n\ntype ConsumerFixtureCommandOptions = {\n manager: \"npm\" | \"pnpm\";\n tools: ConsumerTools;\n directory: string;\n home: string;\n fixture: ConsumerFixture;\n};\nexport const consumerFixtureCommands = ({\n manager,\n tools,\n directory,\n home,\n fixture,\n}: ConsumerFixtureCommandOptions) => {\n const install =\n manager === \"npm\"\n ? [\n tools.node,\n tools.npm,\n \"install\",\n \"--ignore-scripts\",\n \"--no-audit\",\n \"--no-fund\",\n ]\n : [\n tools.node,\n tools.pnpm,\n \"pm\",\n \"install\",\n \"--ignore-scripts\",\n \"--no-frozen-lockfile\",\n \"--store-dir\",\n path.join(home, \"pnpm-store\"),\n ];\n return [\n install,\n manager === \"pnpm\"\n ? [tools.node, tools.pnpm, \"pm\", \"rebuild\", \"--pending\"]\n : [tools.node, tools.npm, \"rebuild\"],\n [\n tools.node,\n path.join(directory, \"node_modules/typescript/bin/tsc\"),\n \"--noEmit\",\n ],\n fixtureCommand(fixture.build, tools),\n fixtureCommand(fixture.smoke, tools),\n ];\n};\n\nexport const installConsumerFixtureDependencies = async (\n options: ConsumerFixtureCommandOptions,\n) => {\n const env = consumerCommandEnvironment(options);\n const commands = consumerFixtureCommands(options);\n for (const [index, argv] of commands.slice(0, 2).entries()) {\n const executable = argv.at(0);\n if (!executable) throw new Error(\"missing consumer dependency command\");\n process.stdout.write(\n await execute(executable, argv.slice(1), { cwd: options.directory, env }),\n );\n // Installation cannot execute scripts; validate bins before any lifecycle execution.\n await assertConsumerInstalledToolBins(options.directory);\n if (index !== 0) continue;\n const manifestFile = path.join(options.directory, \"package.json\");\n const manifest: unknown = JSON.parse(await readFile(manifestFile, \"utf8\"));\n if (!consumerRecord(manifest))\n throw new Error(\"invalid consumer fixture manifest\");\n const lockSource = await readFile(\n path.join(\n options.directory,\n options.manager === \"npm\" ? \"package-lock.json\" : \"pnpm-lock.yaml\",\n ),\n \"utf8\",\n );\n const lock: unknown =\n options.manager === \"npm\" ? JSON.parse(lockSource) : parse(lockSource);\n const { approvals, rebuildTargets } = await consumerBuildApprovals({\n manifest,\n lock,\n manager: options.manager,\n directory: options.directory,\n });\n if (options.manager === \"npm\") {\n // Explicit identities also prevent older manager defaults from rebuilding\n // unapproved transitive packages or the root fixture lifecycle.\n const rebuild = commands.at(1);\n if (!rebuild) throw new Error(\"missing consumer rebuild command\");\n rebuild.push(...rebuildTargets);\n if (Object.keys(approvals).length === 0) break;\n await writeFile(\n manifestFile,\n `${JSON.stringify({ ...manifest, allowScripts: approvals }, null, 2)}\\n`,\n );\n } else {\n const workspaceFile = path.join(options.directory, \"pnpm-workspace.yaml\");\n const workspace: unknown = parse(await readFile(workspaceFile, \"utf8\"));\n if (!consumerRecord(workspace))\n throw new Error(\"invalid generated consumer workspace\");\n await writeFile(\n workspaceFile,\n stringify({ ...workspace, allowBuilds: approvals }),\n );\n }\n }\n};\n\ntype FixtureOptions = {\n fixtureRoot: string;\n fixture: ConsumerFixture;\n pkg: ConsumerPackage;\n closure: Map<string, ConsumerPackage>;\n artifacts: Map<string, string>;\n scratch: string;\n tools: ConsumerTools;\n policy: ReturnType<typeof parseToolchainPolicy>;\n manager: \"npm\" | \"pnpm\";\n};\nconst runFixture = async ({\n fixtureRoot,\n fixture,\n pkg,\n closure,\n artifacts,\n scratch,\n tools,\n policy,\n manager,\n}: FixtureOptions) => {\n const selectedArtifact = artifacts.get(pkg.name);\n if (!selectedArtifact)\n throw new Error(`missing consumer artifact: ${pkg.name}`);\n const published: unknown = JSON.parse(\n await execute(\"tar\", [\"-xOf\", selectedArtifact, \"package/package.json\"], {\n cwd: scratch,\n }),\n );\n if (!consumerRecord(published))\n throw new Error(`invalid packed package manifest: ${pkg.name}`);\n assertConsumerFixtureKind({\n fixture,\n pkg: { directory: pkg.directory, name: pkg.name, manifest: published },\n });\n const source = await containedDirectory(fixtureRoot, fixture.fixture);\n const directory = path.join(\n scratch,\n `fixture-${manager}-${createHash(\"sha256\").update(pkg.name).digest(\"hex\").slice(0, 16)}`,\n );\n await assertConsumerFixtureFiles(source);\n await copyWithoutDependencies(source, directory);\n const manifest = await jsonFile(path.join(directory, \"package.json\"));\n const needsReactDom = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ].some((field) => {\n const entries = manifest[field];\n return consumerRecord(entries) && typeof entries[\"react-dom\"] === \"string\";\n });\n const reactBindings: Record<string, string> = {};\n if (fixture.kind === \"react\") {\n const peers = published[\"peerDependencies\"];\n if (!consumerRecord(peers) || typeof peers[\"react\"] !== \"string\")\n throw new Error(`React fixture requires a React peer: ${pkg.name}`);\n const needsDom = typeof peers[\"react-dom\"] === \"string\" || needsReactDom;\n const bindings = selectConsumerReactVersions({\n reactRange: peers[\"react\"],\n reactVersions: await registryMetadata(\"react\"),\n dom: needsDom\n ? {\n range:\n typeof peers[\"react-dom\"] === \"string\"\n ? peers[\"react-dom\"]\n : undefined,\n versions: await registryMetadata(\"react-dom\"),\n }\n : undefined,\n });\n Object.assign(reactBindings, bindings);\n process.stdout.write(\n `${pkg.name}: ${manager} React ${bindings.react}${bindings[\"react-dom\"] === undefined ? \"\" : ` / ReactDOM ${bindings[\"react-dom\"]}`}\\n`,\n );\n }\n const closureArtifacts = new Map<string, string>();\n for (const name of closure.keys()) {\n const artifact = artifacts.get(name);\n if (!artifact) throw new Error(`missing consumer artifact: ${name}`);\n closureArtifacts.set(name, artifact);\n }\n const boundManifest = bindConsumerManifest({\n manifest,\n artifacts: closureArtifacts,\n typescript: policy.consumerTypescript,\n react: reactBindings,\n manager,\n });\n await writeFile(\n path.join(directory, \"package.json\"),\n `${JSON.stringify(boundManifest.manifest, null, 2)}\\n`,\n );\n if (boundManifest.manager === \"pnpm\")\n await writeFile(\n path.join(directory, \"pnpm-workspace.yaml\"),\n stringify(boundManifest.workspace),\n );\n for (const lockfile of [\n \"package-lock.json\",\n \"npm-shrinkwrap.json\",\n \"pnpm-lock.yaml\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n ])\n await rm(path.join(directory, lockfile), { force: true });\n const home = path.join(directory, \".consumer-home\");\n await mkdir(home);\n await writeFile(path.join(home, \"npmrc\"), \"\");\n const options = { manager, tools, directory, home, fixture };\n await installConsumerFixtureDependencies(options);\n const installed = await jsonFile(\n path.join(directory, \"node_modules/typescript/package.json\"),\n );\n if (installed[\"version\"] !== policy.consumerTypescript)\n throw new Error(\"installed consumer TypeScript does not match policy\");\n const env = consumerCommandEnvironment(options);\n for (const argv of consumerFixtureCommands(options).slice(2)) {\n await assertConsumerInstalledToolBins(directory);\n const executable = argv.at(0);\n if (!executable) throw new Error(\"missing consumer command\");\n process.stdout.write(\n await execute(executable, argv.slice(1), { cwd: directory, env }),\n );\n }\n process.stdout.write(\n `${pkg.name}: ${manager} consumer build/types/smoke passed\\n`,\n );\n};\n\ntype AssertConsumerPackedNodeSupportOptions = {\n artifacts: Map<string, string>;\n node: string;\n directory: string;\n};\nexport const assertConsumerPackedNodeSupport = async ({\n artifacts,\n node,\n directory,\n}: AssertConsumerPackedNodeSupportOptions) => {\n for (const [name, artifact] of artifacts) {\n const manifest: unknown = JSON.parse(\n await execute(\"tar\", [\"-xOf\", artifact, \"package/package.json\"], {\n cwd: directory,\n }),\n );\n if (!consumerRecord(manifest))\n throw new Error(`invalid packed package manifest: ${name}`);\n assertConsumerNodeSupport({ manifest, node, label: `packed ${name}` });\n }\n};\n\ntype ConsumerPackedSyntaxOptions = {\n artifacts: Map<string, string>;\n packages: Map<string, ConsumerPackage>;\n files: Record<string, string>;\n node: string;\n typescript: string;\n executable: string;\n};\nexport const assertConsumerPackedSyntax = async ({\n artifacts,\n packages,\n files,\n node,\n typescript,\n executable,\n}: ConsumerPackedSyntaxOptions) => {\n const packer = resolveConsumerReleasePack(files).manager;\n for (const [name, archive] of artifacts) {\n const pkg = packages.get(name);\n if (pkg === undefined) throw new Error(`Missing packed package: ${name}`);\n const declaration = path.posix.join(pkg.directory, \"publish-contract.json\");\n const source = files[declaration];\n if (source === undefined)\n throw new Error(`Missing tracked publish contract: ${declaration}`);\n const contract = parsePublishContract(JSON.parse(source));\n const packed = await readPackedSyntaxFiles(archive);\n const manifest = packed.get(\"package/package.json\");\n if (manifest === undefined)\n throw new Error(`Missing packed manifest: ${name}`);\n const diagnostics = checkPublishContract({\n manifest: JSON.parse(manifest),\n target: contract.target,\n contract,\n packer,\n policy: { node, typescript },\n });\n if (diagnostics.length > 0)\n throw new Error(\n `Packed publish contract differs for ${name}: ${diagnostics.map((entry) => entry.message).join(\"; \")}`,\n );\n await checkPackedJavaScriptWithNode({\n files: packed,\n target: contract.target,\n node,\n executable,\n });\n }\n};\n\nexport type ConsumerCompatOptions = {\n root: string;\n packages: string[];\n consumerNode: string;\n fixturePath: string;\n policy: unknown;\n};\nexport const runConsumerCompat = async ({\n root: inputRoot,\n packages: selected,\n consumerNode,\n fixturePath,\n policy: inputPolicy,\n}: ConsumerCompatOptions) => {\n const policy = parseToolchainPolicy(inputPolicy);\n if (consumerNode !== policy.consumerNode)\n throw new Error(\"consumer Node must match the published toolchain policy\");\n if (selected.length === 0)\n throw new Error(\"consumer compatibility requires at least one package\");\n const root = await realpath(inputRoot);\n const fixtureRoot = await containedDirectory(\n root,\n consumerRelativePath(fixturePath, \"fixture-path\"),\n );\n const fixtures = parseConsumerFixtures(\n await jsonFile(path.join(fixtureRoot, \"consumer-compat.json\")),\n );\n assertConsumerFixtureSelection({ selected, fixtures });\n const files = await trackedManifests(root);\n const packages = discoverConsumerPackages(files);\n const selections: {\n pkg: ConsumerPackage;\n fixture: ConsumerFixture;\n closure: Map<string, ConsumerPackage>;\n }[] = [];\n const all = new Map<string, ConsumerPackage>();\n const seen = new Set<string>();\n for (const input of selected) {\n const directory = consumerRelativePath(input, \"selected package\");\n if (seen.has(directory))\n throw new Error(`duplicate selected package: ${directory}`);\n seen.add(directory);\n const pkg = [...packages.values()].find(\n (candidate) => candidate.directory === directory,\n );\n if (!pkg || pkg.manifest[\"private\"] === true)\n throw new Error(\n `selected package is not a public root or declared workspace package: ${directory}`,\n );\n const fixture = fixtures.find(\n (candidate) => candidate.package === directory,\n );\n if (!fixture)\n throw new Error(`missing declared consumer fixture: ${directory}`);\n assertConsumerFixtureKind({ fixture, pkg });\n await assertConsumerFixtureFiles(\n await containedDirectory(fixtureRoot, fixture.fixture),\n );\n fixtureCommand(fixture.build, {\n node: \"node\",\n npm: \"npm\",\n pnpm: \"pnpm\",\n bin: \"\",\n });\n fixtureCommand(fixture.smoke, {\n node: \"node\",\n npm: \"npm\",\n pnpm: \"pnpm\",\n bin: \"\",\n });\n const closure = consumerPackageClosure({ selected: pkg, packages, files });\n for (const [name, member] of closure) {\n assertConsumerNodeSupport({\n manifest: member.manifest,\n node: policy.consumerNode,\n label: path.posix.join(member.directory, \"package.json\"),\n });\n all.set(name, member);\n }\n selections.push({ pkg, fixture, closure });\n }\n resolveConsumerReleasePack(files);\n const scratch = await mkdtemp(path.join(tmpdir(), \"stll-consumer-compat-\"));\n try {\n const tools = await provisionConsumerTools(scratch, policy);\n const artifacts = await packConsumerArtifacts({\n files,\n root,\n scratch,\n tools,\n packages: all,\n workspacePackages: packages,\n });\n await assertConsumerPackedNodeSupport({\n artifacts,\n node: policy.consumerNode,\n directory: scratch,\n });\n await assertConsumerPackedSyntax({\n artifacts,\n packages: all,\n files,\n node: policy.consumerNode,\n typescript: policy.consumerTypescript,\n executable: tools.node,\n });\n for (const selection of selections)\n for (const manager of [\"npm\", \"pnpm\"] as const)\n await runFixture({\n fixtureRoot,\n ...selection,\n artifacts,\n scratch,\n tools,\n policy,\n manager,\n });\n } finally {\n await rm(scratch, { recursive: true, force: true });\n }\n};\n","import { consumerRelativePath } from \"./consumer-compat-config\";\n\nexport const consumerCompatUsage =\n \"Usage: stll-consumer-compat --packages '[\\\"packages/example\\\"]' --consumer-node <exact-patch> --fixture-path <directory>\";\n\nexport const parseConsumerCompatArguments = (args: string[]) => {\n if (args.length === 1 && (args[0] === \"--help\" || args[0] === \"-h\"))\n return { mode: \"help\" } as const;\n const options = new Map<string, string>();\n for (let index = 0; index < args.length; index += 2) {\n const flag = args[index];\n const value = args[index + 1];\n if (\n !flag ||\n ![\"--packages\", \"--consumer-node\", \"--fixture-path\"].includes(flag) ||\n !value ||\n options.has(flag)\n )\n throw new Error(consumerCompatUsage);\n options.set(flag, value);\n }\n const encoded = options.get(\"--packages\");\n const consumerNode = options.get(\"--consumer-node\");\n const fixturePath = options.get(\"--fixture-path\");\n if (!encoded || !consumerNode || !fixturePath)\n throw new Error(consumerCompatUsage);\n const packages: unknown = JSON.parse(encoded);\n if (!Array.isArray(packages) || packages.length === 0)\n throw new Error(\"--packages must be a nonempty JSON array\");\n return {\n mode: \"run\",\n packages: packages.map((entry: unknown) =>\n consumerRelativePath(entry, \"--packages\"),\n ),\n consumerNode,\n fixturePath: consumerRelativePath(fixturePath, \"--fixture-path\"),\n } as const;\n};\n","#!/usr/bin/env node\nimport { readFile } from \"node:fs/promises\";\n\nimport { runConsumerCompat } from \"./consumer-compat\";\nimport {\n consumerCompatUsage,\n parseConsumerCompatArguments,\n} from \"./consumer-compat-arguments\";\n\nconst main = async () => {\n const argumentsResult = parseConsumerCompatArguments(process.argv.slice(2));\n if (argumentsResult.mode === \"help\") {\n process.stdout.write(`${consumerCompatUsage}\\n`);\n return;\n }\n const policy: unknown = JSON.parse(\n await readFile(new URL(\"../toolchain.json\", import.meta.url), \"utf8\"),\n );\n await runConsumerCompat({\n root: process.cwd(),\n packages: argumentsResult.packages,\n consumerNode: argumentsResult.consumerNode,\n fixturePath: argumentsResult.fixturePath,\n policy,\n });\n};\n\nmain().catch((error: unknown) => {\n process.stderr.write(\n `consumer-compat: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exitCode = 1;\n});\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-tracked-output.cjs","names":["path"],"sources":["../src/git-tracked-output.ts"],"sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport {\n closeSync,\n mkdtempSync,\n openSync,\n readFileSync,\n rmSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\n\n/** Stream Git's file list to disk so consumer size cannot exhaust maxBuffer. */\nexport const readGitTrackedOutput = (root: string, mode: \"paths\" | \"staged\") => {\n const scratch = mkdtempSync(path.join(tmpdir(), \"stll-git-tracked-\"));\n try {\n const output = path.join(scratch, \"tracked\");\n const descriptor = openSync(output, \"w\", 0o600);\n try {\n execFileSync(\n \"git\",\n [\n \"ls-files\",\n \"-z\",\n ...(mode === \"staged\" ? [\"--cached\", \"--stage\"] : []),\n ],\n { cwd: root, stdio: [\"ignore\", descriptor, \"inherit\"] },\n );\n } finally {\n closeSync(descriptor);\n }\n return readFileSync(output, \"utf8\");\n } finally {\n rmSync(scratch, { recursive: true, force: true });\n }\n};\n"],"mappings":";;;;;;;;AAYA,MAAa,wBAAwB,MAAc,SAA6B;CAC9E,MAAM,WAAA,
|
|
1
|
+
{"version":3,"file":"git-tracked-output.cjs","names":["mkdtempSync","path","tmpdir","openSync","readFileSync"],"sources":["../src/git-tracked-output.ts"],"sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport {\n closeSync,\n mkdtempSync,\n openSync,\n readFileSync,\n rmSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\n\n/** Stream Git's file list to disk so consumer size cannot exhaust maxBuffer. */\nexport const readGitTrackedOutput = (root: string, mode: \"paths\" | \"staged\") => {\n const scratch = mkdtempSync(path.join(tmpdir(), \"stll-git-tracked-\"));\n try {\n const output = path.join(scratch, \"tracked\");\n const descriptor = openSync(output, \"w\", 0o600);\n try {\n execFileSync(\n \"git\",\n [\n \"ls-files\",\n \"-z\",\n ...(mode === \"staged\" ? [\"--cached\", \"--stage\"] : []),\n ],\n { cwd: root, stdio: [\"ignore\", descriptor, \"inherit\"] },\n );\n } finally {\n closeSync(descriptor);\n }\n return readFileSync(output, \"utf8\");\n } finally {\n rmSync(scratch, { recursive: true, force: true });\n }\n};\n"],"mappings":";;;;;;;;AAYA,MAAa,wBAAwB,MAAc,SAA6B;CAC9E,MAAM,WAAA,GAAUA,QAAAA,YAAAA,CAAYC,UAAAA,QAAK,MAAA,GAAKC,QAAAA,OAAAA,CAAO,GAAG,mBAAmB,CAAC;CACpE,IAAI;EACF,MAAM,SAASD,UAAAA,QAAK,KAAK,SAAS,SAAS;EAC3C,MAAM,cAAA,GAAaE,QAAAA,SAAAA,CAAS,QAAQ,KAAK,GAAK;EAC9C,IAAI;GACF,CAAA,GAAA,mBAAA,aAAA,CACE,OACA;IACE;IACA;IACA,GAAI,SAAS,WAAW,CAAC,YAAY,SAAS,IAAI,CAAC;GACrD,GACA;IAAE,KAAK;IAAM,OAAO;KAAC;KAAU;KAAY;IAAS;GAAE,CACxD;EACF,UAAU;GACR,CAAA,GAAA,QAAA,UAAA,CAAU,UAAU;EACtB;EACA,QAAA,GAAOC,QAAAA,aAAAA,CAAa,QAAQ,MAAM;CACpC,UAAU;EACR,CAAA,GAAA,QAAA,OAAA,CAAO,SAAS;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;CAClD;AACF"}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineConfig, type OxlintConfig, type OxlintOverride } from \"oxlint\";\n\ntype Rules = NonNullable<OxlintConfig[\"rules\"]>;\ntype JsPlugins = NonNullable<OxlintConfig[\"jsPlugins\"]>;\ntype Options = NonNullable<OxlintConfig[\"options\"]>;\ntype Plugins = NonNullable<OxlintConfig[\"plugins\"]>;\n\nexport type LibraryOptions = {\n jsPlugins?: JsPlugins;\n ignorePatterns?: string[];\n options?: Options;\n overrides?: OxlintOverride[];\n plugins?: Plugins;\n rules?: Rules;\n react?: { files: [string, ...string[]] };\n};\n\nexport const stellaLowercasePluginSpecifier = \"@stll/oxlint-config/plugin\";\nexport const noRawColorsPluginSpecifier = \"@stll/oxlint-config/no-raw-colors\";\n\nexport const libraryIgnorePatterns = [\"node_modules/\", \"dist/\", \"coverage/\"];\n\n// Setting oxlint's `plugins` config replaces its built-in default list rather\n// than appending to it. This must stay in sync with every plugin-prefixed\n// rule below: `import/*` and `promise/*` rules are configured further down,\n// but oxlint disables both plugins unless they are listed here, which left\n// `import/no-cycle` and every `promise/*` rule silently unenforced.\nexport const libraryPlugins = [\n \"eslint\",\n \"typescript\",\n \"unicorn\",\n \"oxc\",\n \"import\",\n \"promise\",\n] satisfies Plugins;\n\n// Oxlint 1.80 replaced react/react-compiler with category-specific rules.\n// Keep the actionable compiler diagnostics strict while excluding internal\n// invariant and unfinished-feature reports that do not identify source bugs.\nexport const reactCompilerRules = {\n \"react/capitalized-calls\": \"error\",\n \"react/error-boundaries\": \"error\",\n \"react/exhaustive-effect-dependencies\": \"error\",\n \"react/globals\": \"error\",\n \"react/hooks\": \"error\",\n \"react/immutability\": \"error\",\n \"react/incompatible-library\": \"error\",\n \"react/invariant\": \"off\",\n \"react/memo-dependencies\": \"error\",\n \"react/no-deriving-state-in-effects\": \"error\",\n \"react/preserve-manual-memoization\": \"error\",\n \"react/purity\": \"error\",\n \"react/refs\": \"error\",\n \"react/rule-suppression\": \"error\",\n \"react/set-state-in-effect\": \"error\",\n \"react/set-state-in-render\": \"error\",\n \"react/static-components\": \"error\",\n \"react/syntax\": \"error\",\n \"react/todo\": \"off\",\n \"react/unsupported-syntax\": \"error\",\n \"react/use-memo\": \"error\",\n \"react/void-use-memo\": \"error\",\n} satisfies Rules;\n\nexport const libraryRules = {\n \"no-console\": \"off\",\n \"no-shadow\": \"error\",\n \"require-await\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-non-null-assertion\": \"error\",\n \"no-useless-assignment\": \"error\",\n \"no-loop-func\": \"error\",\n \"no-nested-ternary\": \"error\",\n \"no-void\": [\"error\", { allowAsStatement: true }],\n // Callback expressions should stay lexically scoped; avoids accidental `this` rebinding.\n \"prefer-arrow-callback\": \"error\",\n \"stella-lowercase/stella-lowercase\": \"error\",\n \"no-raw-colors/no-raw-colors\": \"error\",\n\n // Spreading into an accumulator on every loop iteration is O(n^2); push/concat instead.\n \"oxc/no-accumulating-spread\": \"error\",\n // Spreading inside `.map()` allocates a new array per callback invocation; push instead.\n \"oxc/no-map-spread\": \"error\",\n // Flags `if`/`switch` branches with identical bodies: likely dead logic or a missed merge.\n \"oxc/branches-sharing-code\": \"error\",\n\n \"typescript/no-explicit-any\": \"error\",\n \"typescript/no-dynamic-delete\": \"error\",\n \"typescript/no-misused-promises\": [\n \"error\",\n { checksVoidReturn: { attributes: false } },\n ],\n \"typescript/consistent-type-definitions\": [\"error\", \"type\"],\n \"typescript/consistent-return\": \"error\",\n \"typescript/dot-notation\": \"error\",\n \"typescript/no-inferrable-types\": \"off\",\n \"typescript/no-unnecessary-type-conversion\": \"error\",\n \"typescript/no-unnecessary-condition\": [\n \"error\",\n { allowConstantLoopConditions: \"only-allowed-literals\" },\n ],\n \"typescript/no-unnecessary-type-arguments\": \"error\",\n \"typescript/switch-exhaustiveness-check\": [\n \"error\",\n { considerDefaultExhaustiveForUnions: true },\n ],\n \"typescript/strict-boolean-expressions\": [\n \"error\",\n { allowNullableString: true, allowNullableBoolean: true },\n ],\n \"typescript/no-confusing-void-expression\": [\n \"error\",\n { ignoreArrowShorthand: true, ignoreVoidReturningFunctions: true },\n ],\n \"typescript/prefer-nullish-coalescing\": [\n \"error\",\n { ignorePrimitives: { string: true, boolean: true } },\n ],\n \"typescript/only-throw-error\": \"error\",\n \"typescript/return-await\": [\"error\", \"error-handling-correctness-only\"],\n\n \"unicorn/no-useless-undefined\": \"off\",\n \"unicorn/prefer-array-find\": \"error\",\n \"unicorn/prefer-at\": \"error\",\n \"unicorn/prefer-set-has\": \"error\",\n \"unicorn/filename-case\": \"off\",\n \"unicorn/consistent-function-scoping\": \"off\",\n \"unicorn/prefer-ternary\": \"off\",\n \"unicorn/no-array-reduce\": \"error\",\n \"unicorn/no-nested-ternary\": \"off\",\n // `Array.from({ length }).fill(obj)` shares one reference across every slot.\n \"unicorn/no-array-fill-with-reference-type\": \"error\",\n\n \"import/no-cycle\": \"error\",\n \"import/consistent-type-specifier-style\": \"off\",\n // Keep a blank line after the import block so it stays visually separate from module body.\n \"import/newline-after-import\": \"error\",\n\n \"promise/always-return\": \"error\",\n \"promise/no-return-in-finally\": \"error\",\n \"promise/prefer-await-to-then\": \"off\",\n \"promise/prefer-await-to-callbacks\": \"off\",\n \"promise/avoid-new\": \"off\",\n\n \"sort-keys\": \"off\",\n \"no-plusplus\": \"off\",\n \"no-inline-comments\": \"off\",\n \"max-statements\": \"off\",\n \"prefer-destructuring\": \"off\",\n \"no-negated-condition\": \"off\",\n \"no-use-before-define\": \"off\",\n \"no-useless-return\": \"off\",\n \"no-warning-comments\": \"off\",\n \"no-unexpected-multiline\": \"off\",\n \"max-classes-per-file\": \"off\",\n \"class-methods-use-this\": \"off\",\n \"no-unmodified-loop-condition\": \"off\",\n complexity: \"off\",\n \"func-style\": \"off\",\n \"func-names\": \"off\",\n \"default-case\": \"off\",\n} satisfies Rules;\n\n// Applied only to the consumer-selected React files.\nexport const reactRules = {\n // Enabling the `react` plugin turns on its whole correctness-category\n // rule set at \"warn\" by default, not just the React Compiler categories.\n // Only the compiler categories are deliberate additions here, so the rest\n // are turned off to keep this package's blast radius scoped; lift any of\n // these independently if a future change wants them.\n \"react/exhaustive-deps\": \"off\",\n \"react/forward-ref-uses-ref\": \"off\",\n \"react/jsx-key\": \"off\",\n \"react/jsx-no-duplicate-props\": \"off\",\n \"react/jsx-no-undef\": \"off\",\n \"react/jsx-props-no-spread-multi\": \"off\",\n \"react/no-children-prop\": \"off\",\n \"react/no-danger-with-children\": \"off\",\n \"react/no-did-mount-set-state\": \"off\",\n \"react/no-did-update-set-state\": \"off\",\n \"react/no-direct-mutation-state\": \"off\",\n \"react/no-find-dom-node\": \"off\",\n \"react/no-is-mounted\": \"off\",\n \"react/no-render-return-value\": \"off\",\n \"react/no-string-refs\": \"off\",\n \"react/no-this-in-sfc\": \"off\",\n \"react/no-unsafe\": \"off\",\n \"react/no-will-update-set-state\": \"off\",\n \"react/void-dom-elements-no-children\": \"off\",\n ...reactCompilerRules,\n} satisfies Rules;\n\nexport const libraryOverrides = [\n {\n files: [\"**/*.{test,spec}.{ts,tsx,js,jsx}\", \"__test__/**\", \"__tests__/**\"],\n rules: {\n \"no-console\": \"off\",\n \"require-await\": \"off\",\n \"no-non-null-assertion\": \"off\",\n },\n },\n] satisfies OxlintOverride[];\n\nexport const library = (options: LibraryOptions = {}): OxlintConfig => {\n const plugins = new Set([...libraryPlugins, ...(options.plugins ?? [])]);\n const presetOverrides = [\n ...libraryOverrides,\n ...(options.react === undefined\n ? []\n : [\n {\n files: options.react.files,\n plugins: [...plugins, \"react\"],\n rules: reactRules,\n } satisfies OxlintOverride,\n ]),\n ];\n return defineConfig({\n options: {\n denyWarnings: true,\n reportUnusedDisableDirectives: \"error\",\n typeAware: true,\n ...options.options,\n },\n plugins: Array.from(plugins),\n jsPlugins: [\n stellaLowercasePluginSpecifier,\n noRawColorsPluginSpecifier,\n ...(options.jsPlugins ?? []),\n ],\n ignorePatterns: [\n ...libraryIgnorePatterns,\n ...(options.ignorePatterns ?? []),\n ],\n rules: {\n ...libraryRules,\n ...options.rules,\n },\n overrides: [\n // Consumer rules take precedence over every preset, including scoped ones.\n ...presetOverrides.map((override) =>\n Object.assign({}, override, {\n rules: Object.assign({}, override.rules, options.rules),\n }),\n ),\n ...(options.overrides ?? []),\n ],\n });\n};\n\nexport default library();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["defineConfig"],"sources":["../src/index.ts"],"sourcesContent":["import { defineConfig, type OxlintConfig, type OxlintOverride } from \"oxlint\";\n\ntype Rules = NonNullable<OxlintConfig[\"rules\"]>;\ntype JsPlugins = NonNullable<OxlintConfig[\"jsPlugins\"]>;\ntype Options = NonNullable<OxlintConfig[\"options\"]>;\ntype Plugins = NonNullable<OxlintConfig[\"plugins\"]>;\n\nexport type LibraryOptions = {\n jsPlugins?: JsPlugins;\n ignorePatterns?: string[];\n options?: Options;\n overrides?: OxlintOverride[];\n plugins?: Plugins;\n rules?: Rules;\n react?: { files: [string, ...string[]] };\n};\n\nexport const stellaLowercasePluginSpecifier = \"@stll/oxlint-config/plugin\";\nexport const noRawColorsPluginSpecifier = \"@stll/oxlint-config/no-raw-colors\";\n\nexport const libraryIgnorePatterns = [\"node_modules/\", \"dist/\", \"coverage/\"];\n\n// Setting oxlint's `plugins` config replaces its built-in default list rather\n// than appending to it. This must stay in sync with every plugin-prefixed\n// rule below: `import/*` and `promise/*` rules are configured further down,\n// but oxlint disables both plugins unless they are listed here, which left\n// `import/no-cycle` and every `promise/*` rule silently unenforced.\nexport const libraryPlugins = [\n \"eslint\",\n \"typescript\",\n \"unicorn\",\n \"oxc\",\n \"import\",\n \"promise\",\n] satisfies Plugins;\n\n// Oxlint 1.80 replaced react/react-compiler with category-specific rules.\n// Keep the actionable compiler diagnostics strict while excluding internal\n// invariant and unfinished-feature reports that do not identify source bugs.\nexport const reactCompilerRules = {\n \"react/capitalized-calls\": \"error\",\n \"react/error-boundaries\": \"error\",\n \"react/exhaustive-effect-dependencies\": \"error\",\n \"react/globals\": \"error\",\n \"react/hooks\": \"error\",\n \"react/immutability\": \"error\",\n \"react/incompatible-library\": \"error\",\n \"react/invariant\": \"off\",\n \"react/memo-dependencies\": \"error\",\n \"react/no-deriving-state-in-effects\": \"error\",\n \"react/preserve-manual-memoization\": \"error\",\n \"react/purity\": \"error\",\n \"react/refs\": \"error\",\n \"react/rule-suppression\": \"error\",\n \"react/set-state-in-effect\": \"error\",\n \"react/set-state-in-render\": \"error\",\n \"react/static-components\": \"error\",\n \"react/syntax\": \"error\",\n \"react/todo\": \"off\",\n \"react/unsupported-syntax\": \"error\",\n \"react/use-memo\": \"error\",\n \"react/void-use-memo\": \"error\",\n} satisfies Rules;\n\nexport const libraryRules = {\n \"no-console\": \"off\",\n \"no-shadow\": \"error\",\n \"require-await\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-non-null-assertion\": \"error\",\n \"no-useless-assignment\": \"error\",\n \"no-loop-func\": \"error\",\n \"no-nested-ternary\": \"error\",\n \"no-void\": [\"error\", { allowAsStatement: true }],\n // Callback expressions should stay lexically scoped; avoids accidental `this` rebinding.\n \"prefer-arrow-callback\": \"error\",\n \"stella-lowercase/stella-lowercase\": \"error\",\n \"no-raw-colors/no-raw-colors\": \"error\",\n\n // Spreading into an accumulator on every loop iteration is O(n^2); push/concat instead.\n \"oxc/no-accumulating-spread\": \"error\",\n // Spreading inside `.map()` allocates a new array per callback invocation; push instead.\n \"oxc/no-map-spread\": \"error\",\n // Flags `if`/`switch` branches with identical bodies: likely dead logic or a missed merge.\n \"oxc/branches-sharing-code\": \"error\",\n\n \"typescript/no-explicit-any\": \"error\",\n \"typescript/no-dynamic-delete\": \"error\",\n \"typescript/no-misused-promises\": [\n \"error\",\n { checksVoidReturn: { attributes: false } },\n ],\n \"typescript/consistent-type-definitions\": [\"error\", \"type\"],\n \"typescript/consistent-return\": \"error\",\n \"typescript/dot-notation\": \"error\",\n \"typescript/no-inferrable-types\": \"off\",\n \"typescript/no-unnecessary-type-conversion\": \"error\",\n \"typescript/no-unnecessary-condition\": [\n \"error\",\n { allowConstantLoopConditions: \"only-allowed-literals\" },\n ],\n \"typescript/no-unnecessary-type-arguments\": \"error\",\n \"typescript/switch-exhaustiveness-check\": [\n \"error\",\n { considerDefaultExhaustiveForUnions: true },\n ],\n \"typescript/strict-boolean-expressions\": [\n \"error\",\n { allowNullableString: true, allowNullableBoolean: true },\n ],\n \"typescript/no-confusing-void-expression\": [\n \"error\",\n { ignoreArrowShorthand: true, ignoreVoidReturningFunctions: true },\n ],\n \"typescript/prefer-nullish-coalescing\": [\n \"error\",\n { ignorePrimitives: { string: true, boolean: true } },\n ],\n \"typescript/only-throw-error\": \"error\",\n \"typescript/return-await\": [\"error\", \"error-handling-correctness-only\"],\n\n \"unicorn/no-useless-undefined\": \"off\",\n \"unicorn/prefer-array-find\": \"error\",\n \"unicorn/prefer-at\": \"error\",\n \"unicorn/prefer-set-has\": \"error\",\n \"unicorn/filename-case\": \"off\",\n \"unicorn/consistent-function-scoping\": \"off\",\n \"unicorn/prefer-ternary\": \"off\",\n \"unicorn/no-array-reduce\": \"error\",\n \"unicorn/no-nested-ternary\": \"off\",\n // `Array.from({ length }).fill(obj)` shares one reference across every slot.\n \"unicorn/no-array-fill-with-reference-type\": \"error\",\n\n \"import/no-cycle\": \"error\",\n \"import/consistent-type-specifier-style\": \"off\",\n // Keep a blank line after the import block so it stays visually separate from module body.\n \"import/newline-after-import\": \"error\",\n\n \"promise/always-return\": \"error\",\n \"promise/no-return-in-finally\": \"error\",\n \"promise/prefer-await-to-then\": \"off\",\n \"promise/prefer-await-to-callbacks\": \"off\",\n \"promise/avoid-new\": \"off\",\n\n \"sort-keys\": \"off\",\n \"no-plusplus\": \"off\",\n \"no-inline-comments\": \"off\",\n \"max-statements\": \"off\",\n \"prefer-destructuring\": \"off\",\n \"no-negated-condition\": \"off\",\n \"no-use-before-define\": \"off\",\n \"no-useless-return\": \"off\",\n \"no-warning-comments\": \"off\",\n \"no-unexpected-multiline\": \"off\",\n \"max-classes-per-file\": \"off\",\n \"class-methods-use-this\": \"off\",\n \"no-unmodified-loop-condition\": \"off\",\n complexity: \"off\",\n \"func-style\": \"off\",\n \"func-names\": \"off\",\n \"default-case\": \"off\",\n} satisfies Rules;\n\n// Applied only to the consumer-selected React files.\nexport const reactRules = {\n // Enabling the `react` plugin turns on its whole correctness-category\n // rule set at \"warn\" by default, not just the React Compiler categories.\n // Only the compiler categories are deliberate additions here, so the rest\n // are turned off to keep this package's blast radius scoped; lift any of\n // these independently if a future change wants them.\n \"react/exhaustive-deps\": \"off\",\n \"react/forward-ref-uses-ref\": \"off\",\n \"react/jsx-key\": \"off\",\n \"react/jsx-no-duplicate-props\": \"off\",\n \"react/jsx-no-undef\": \"off\",\n \"react/jsx-props-no-spread-multi\": \"off\",\n \"react/no-children-prop\": \"off\",\n \"react/no-danger-with-children\": \"off\",\n \"react/no-did-mount-set-state\": \"off\",\n \"react/no-did-update-set-state\": \"off\",\n \"react/no-direct-mutation-state\": \"off\",\n \"react/no-find-dom-node\": \"off\",\n \"react/no-is-mounted\": \"off\",\n \"react/no-render-return-value\": \"off\",\n \"react/no-string-refs\": \"off\",\n \"react/no-this-in-sfc\": \"off\",\n \"react/no-unsafe\": \"off\",\n \"react/no-will-update-set-state\": \"off\",\n \"react/void-dom-elements-no-children\": \"off\",\n ...reactCompilerRules,\n} satisfies Rules;\n\nexport const libraryOverrides = [\n {\n files: [\"**/*.{test,spec}.{ts,tsx,js,jsx}\", \"__test__/**\", \"__tests__/**\"],\n rules: {\n \"no-console\": \"off\",\n \"require-await\": \"off\",\n \"no-non-null-assertion\": \"off\",\n },\n },\n] satisfies OxlintOverride[];\n\nexport const library = (options: LibraryOptions = {}): OxlintConfig => {\n const plugins = new Set([...libraryPlugins, ...(options.plugins ?? [])]);\n const presetOverrides = [\n ...libraryOverrides,\n ...(options.react === undefined\n ? []\n : [\n {\n files: options.react.files,\n plugins: [...plugins, \"react\"],\n rules: reactRules,\n } satisfies OxlintOverride,\n ]),\n ];\n return defineConfig({\n options: {\n denyWarnings: true,\n reportUnusedDisableDirectives: \"error\",\n typeAware: true,\n ...options.options,\n },\n plugins: Array.from(plugins),\n jsPlugins: [\n stellaLowercasePluginSpecifier,\n noRawColorsPluginSpecifier,\n ...(options.jsPlugins ?? []),\n ],\n ignorePatterns: [\n ...libraryIgnorePatterns,\n ...(options.ignorePatterns ?? []),\n ],\n rules: {\n ...libraryRules,\n ...options.rules,\n },\n overrides: [\n // Consumer rules take precedence over every preset, including scoped ones.\n ...presetOverrides.map((override) =>\n Object.assign({}, override, {\n rules: Object.assign({}, override.rules, options.rules),\n }),\n ),\n ...(options.overrides ?? []),\n ],\n });\n};\n\nexport default library();\n"],"mappings":";;;;;;AAiBA,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAE1C,MAAa,wBAAwB;CAAC;CAAiB;CAAS;AAAW;AAO3E,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;AACF;AAKA,MAAa,qBAAqB;CAChC,2BAA2B;CAC3B,0BAA0B;CAC1B,wCAAwC;CACxC,iBAAiB;CACjB,eAAe;CACf,sBAAsB;CACtB,8BAA8B;CAC9B,mBAAmB;CACnB,2BAA2B;CAC3B,sCAAsC;CACtC,qCAAqC;CACrC,gBAAgB;CAChB,cAAc;CACd,0BAA0B;CAC1B,6BAA6B;CAC7B,6BAA6B;CAC7B,2BAA2B;CAC3B,gBAAgB;CAChB,cAAc;CACd,4BAA4B;CAC5B,kBAAkB;CAClB,uBAAuB;AACzB;AAEA,MAAa,eAAe;CAC1B,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,yBAAyB;CACzB,yBAAyB;CACzB,gBAAgB;CAChB,qBAAqB;CACrB,WAAW,CAAC,SAAS,EAAE,kBAAkB,KAAK,CAAC;CAE/C,yBAAyB;CACzB,qCAAqC;CACrC,+BAA+B;CAG/B,8BAA8B;CAE9B,qBAAqB;CAErB,6BAA6B;CAE7B,8BAA8B;CAC9B,gCAAgC;CAChC,kCAAkC,CAChC,SACA,EAAE,kBAAkB,EAAE,YAAY,MAAM,EAAE,CAC5C;CACA,0CAA0C,CAAC,SAAS,MAAM;CAC1D,gCAAgC;CAChC,2BAA2B;CAC3B,kCAAkC;CAClC,6CAA6C;CAC7C,uCAAuC,CACrC,SACA,EAAE,6BAA6B,wBAAwB,CACzD;CACA,4CAA4C;CAC5C,0CAA0C,CACxC,SACA,EAAE,oCAAoC,KAAK,CAC7C;CACA,yCAAyC,CACvC,SACA;EAAE,qBAAqB;EAAM,sBAAsB;CAAK,CAC1D;CACA,2CAA2C,CACzC,SACA;EAAE,sBAAsB;EAAM,8BAA8B;CAAK,CACnE;CACA,wCAAwC,CACtC,SACA,EAAE,kBAAkB;EAAE,QAAQ;EAAM,SAAS;CAAK,EAAE,CACtD;CACA,+BAA+B;CAC/B,2BAA2B,CAAC,SAAS,iCAAiC;CAEtE,gCAAgC;CAChC,6BAA6B;CAC7B,qBAAqB;CACrB,0BAA0B;CAC1B,yBAAyB;CACzB,uCAAuC;CACvC,0BAA0B;CAC1B,2BAA2B;CAC3B,6BAA6B;CAE7B,6CAA6C;CAE7C,mBAAmB;CACnB,0CAA0C;CAE1C,+BAA+B;CAE/B,yBAAyB;CACzB,gCAAgC;CAChC,gCAAgC;CAChC,qCAAqC;CACrC,qBAAqB;CAErB,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;CAClB,wBAAwB;CACxB,wBAAwB;CACxB,wBAAwB;CACxB,qBAAqB;CACrB,uBAAuB;CACvB,2BAA2B;CAC3B,wBAAwB;CACxB,0BAA0B;CAC1B,gCAAgC;CAChC,YAAY;CACZ,cAAc;CACd,cAAc;CACd,gBAAgB;AAClB;AAGA,MAAa,aAAa;CAMxB,yBAAyB;CACzB,8BAA8B;CAC9B,iBAAiB;CACjB,gCAAgC;CAChC,sBAAsB;CACtB,mCAAmC;CACnC,0BAA0B;CAC1B,iCAAiC;CACjC,gCAAgC;CAChC,iCAAiC;CACjC,kCAAkC;CAClC,0BAA0B;CAC1B,uBAAuB;CACvB,gCAAgC;CAChC,wBAAwB;CACxB,wBAAwB;CACxB,mBAAmB;CACnB,kCAAkC;CAClC,uCAAuC;CACvC,GAAG;AACL;AAEA,MAAa,mBAAmB,CAC9B;CACE,OAAO;EAAC;EAAoC;EAAe;CAAc;CACzE,OAAO;EACL,cAAc;EACd,iBAAiB;EACjB,yBAAyB;CAC3B;AACF,CACF;AAEA,MAAa,WAAW,UAA0B,CAAC,MAAoB;CACrE,MAAM,0BAAU,IAAI,IAAI,CAAC,GAAG,gBAAgB,GAAI,QAAQ,WAAW,CAAC,CAAE,CAAC;CACvE,MAAM,kBAAkB,CACtB,GAAG,kBACH,GAAI,QAAQ,UAAU,KAAA,IAClB,CAAC,IACD,CACE;EACE,OAAO,QAAQ,MAAM;EACrB,SAAS,CAAC,GAAG,SAAS,OAAO;EAC7B,OAAO;CACT,CACF,CACN;CACA,QAAA,GAAOA,OAAAA,aAAAA,CAAa;EAClB,SAAS;GACP,cAAc;GACd,+BAA+B;GAC/B,WAAW;GACX,GAAG,QAAQ;EACb;EACA,SAAS,MAAM,KAAK,OAAO;EAC3B,WAAW;GACT;GACA;GACA,GAAI,QAAQ,aAAa,CAAC;EAC5B;EACA,gBAAgB,CACd,GAAG,uBACH,GAAI,QAAQ,kBAAkB,CAAC,CACjC;EACA,OAAO;GACL,GAAG;GACH,GAAG,QAAQ;EACb;EACA,WAAW,CAET,GAAG,gBAAgB,KAAK,aACtB,OAAO,OAAO,CAAC,GAAG,UAAU,EAC1B,OAAO,OAAO,OAAO,CAAC,GAAG,SAAS,OAAO,QAAQ,KAAK,EACxD,CAAC,CACH,GACA,GAAI,QAAQ,aAAa,CAAC,CAC5B;CACF,CAAC;AACH;AAEA,IAAA,cAAe,QAAQ"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { declarationOnlyDts };
|
|
1
|
+
export { t as declarationOnlyDts } from "./publish-build-target-vite-dts-helper2.mjs";
|
|
@@ -3,8 +3,8 @@ const require_compiler_packages = require("./compiler-packages.cjs");
|
|
|
3
3
|
let node_fs = require("node:fs");
|
|
4
4
|
let node_path = require("node:path");
|
|
5
5
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
6
|
-
let node_module = require("node:module");
|
|
7
6
|
let node_crypto = require("node:crypto");
|
|
7
|
+
let node_module = require("node:module");
|
|
8
8
|
//#region src/publish-build-target-vite-dts.ts
|
|
9
9
|
const reviewedViteDtsVersions = {
|
|
10
10
|
"vite-plugin-dts": "5.0.3",
|
|
@@ -256,10 +256,10 @@ const record = (value) => typeof value === "object" && value !== null && !Array.
|
|
|
256
256
|
/** The actual build uses this closed factory and its guarded declaration hooks. */
|
|
257
257
|
const declarationOnlyDts = ({ directory, ...options }) => {
|
|
258
258
|
const root = (0, node_fs.realpathSync)(directory);
|
|
259
|
-
const require = (0, node_module.createRequire)(node_path.default.join(root, "package.json"));
|
|
260
|
-
const pluginRequire = (0, node_module.createRequire)(require.resolve("vite-plugin-dts"));
|
|
259
|
+
const require$1 = (0, node_module.createRequire)(node_path.default.join(root, "package.json"));
|
|
260
|
+
const pluginRequire = (0, node_module.createRequire)(require$1.resolve("vite-plugin-dts"));
|
|
261
261
|
for (const [name, version] of Object.entries(reviewedViteDtsVersions)) {
|
|
262
|
-
const metadata = JSON.parse((0, node_fs.readFileSync)((name === "unplugin-dts" ? pluginRequire : require).resolve(`${name}/package.json`), "utf8"));
|
|
262
|
+
const metadata = JSON.parse((0, node_fs.readFileSync)((name === "unplugin-dts" ? pluginRequire : require$1).resolve(`${name}/package.json`), "utf8"));
|
|
263
263
|
if (!record(metadata) || metadata["version"] !== version) throw new Error(`Declaration-only adapter requires ${name} ${version}`);
|
|
264
264
|
}
|
|
265
265
|
const compilerRequire = (0, node_module.createRequire)(pluginRequire.resolve("unplugin-dts"));
|
|
@@ -274,7 +274,7 @@ const declarationOnlyDts = ({ directory, ...options }) => {
|
|
|
274
274
|
};
|
|
275
275
|
const primaryCompiler = compilerVersion(require_compiler_packages.compilerPackages.typescript);
|
|
276
276
|
if (!(primaryCompiler === "6.0.3" || primaryCompiler?.startsWith("7.") === true && compilerVersion(require_compiler_packages.compilerPackages.typescriptCompatibility) === "6.0.3")) throw new Error("Declaration-only adapter requires TypeScript 6.0.3 as typescript or the TypeScript 7 @typescript/typescript6 fallback in the declaration plugin's dependency scope");
|
|
277
|
-
const loaded = require("vite-plugin-dts");
|
|
277
|
+
const loaded = require$1("vite-plugin-dts");
|
|
278
278
|
const factory = record(loaded) ? loaded["default"] : loaded;
|
|
279
279
|
if (typeof factory !== "function") throw new Error("Installed declaration plugin does not expose its factory");
|
|
280
280
|
const plugin = Reflect.apply(factory, void 0, [reviewedViteDtsOptions(options)]);
|