openapi-typesafe-migrate 1.0.0-rc.7 → 1.0.0-rc.8
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/CHANGELOG.md +63 -0
- package/README.md +45 -24
- package/dist/cli/main.mjs +527 -151
- package/dist/cli/main.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cli/main.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.mjs","sources":["../../src/adapters/git-file-list/git-locations.ts","../../src/adapters/git-file-list/git-process.ts","../../src/adapters/git-file-list/git-file-list.ts","../../src/adapters/json-lines-logger/json-lines-logger.ts","../../src/adapters/json-text/json-text.ts","../../src/adapters/node-project-files/paths-in-root.ts","../../src/adapters/node-project-files/node-project-files.ts","../../src/adapters/pipe-safe-writer/pipe-safe-writer.ts","../../src/domain/migration-findings.ts","../../src/domain/text-edits.ts","../../src/adapters/typescript-parser/file-bindings.ts","../../src/adapters/typescript-parser/generator-calls.ts","../../src/adapters/typescript-parser/options-type.ts","../../src/adapters/typescript-parser/script-regions.ts","../../src/adapters/typescript-parser/transform-callback.ts","../../src/adapters/typescript-parser/factory-type-text.ts","../../src/adapters/typescript-parser/transform-returns.ts","../../src/adapters/typescript-parser/unused-declarations.ts","../../src/adapters/typescript-parser/rewriter.ts","../../src/adapters/typescript-parser/source-strings.ts","../../src/adapters/yaml-text/yaml-text.ts","../../src/domain/package-names.ts","../../src/domain/config-documents.ts","../../src/domain/relative-references.ts","../../src/domain/api-descriptions.ts","../../src/domain/command-launchers.ts","../../src/domain/shell-word-parts.ts","../../src/domain/shell-assignments.ts","../../src/domain/command-roles.ts","../../src/domain/old-package-words.ts","../../src/domain/file-variables.ts","../../src/domain/parameter-expansions.ts","../../src/domain/here-documents.ts","../../src/domain/shell-words.ts","../../src/domain/assert-never.ts","../../src/domain/variable-programs.ts","../../src/domain/shell-variables.ts","../../src/domain/command-migration.ts","../../src/domain/command-paths.ts","../../src/domain/command-strings.ts","../../src/domain/version-spec.ts","../../src/domain/declared-packages.ts","../../src/domain/dockerfile-migration.ts","../../src/domain/catalog-plan.ts","../../src/domain/npm-alias.ts","../../src/domain/url-credentials.ts","../../src/domain/dependency-map.ts","../../src/domain/tree-entries.ts","../../src/domain/import-map-migration.ts","../../src/domain/import-map-reference.ts","../../src/domain/source-migration.ts","../../src/domain/jest-config.ts","../../src/domain/json-command-migration.ts","../../src/domain/just-expressions.ts","../../src/domain/just-recipe-parameters.ts","../../src/domain/justfile-migration.ts","../../src/domain/makefile-migration.ts","../../src/domain/override-targets.ts","../../src/domain/catalogs.ts","../../src/domain/successor-aliases.ts","../../src/domain/settings-sections.ts","../../src/domain/specifier-maps.ts","../../src/domain/manifest-migration.ts","../../src/domain/patch-files.ts","../../src/domain/step-shells.ts","../../src/domain/yaml-command-keys.ts","../../src/domain/yaml-migration.ts","../../src/domain/pre-commit-migration.ts","../../src/domain/tsconfig-migration.ts","../../src/domain/workspace-catalog-migration.ts","../../src/application/config-steps.ts","../../src/application/project-file-names.ts","../../src/application/named-import-maps.ts","../../src/application/file-migrations.ts","../../src/application/api-description-parts.ts","../../src/application/plan-sources.ts","../../src/application/project-target.ts","../../src/application/migrate-project.ts","../../src/domain/terminal-text.ts","../../src/application/command-step-messages.ts","../../src/application/source-step-messages.ts","../../src/application/manual-step-messages.ts","../../src/application/messages.ts","../../src/application/report.ts","../../src/cli/cli-arguments.ts","../../src/cli/cli-text.ts","../../src/cli/run-cli.ts","../../src/cli/main.ts"],"sourcesContent":["import { constants } from \"node:fs\";\nimport { access, lstat, realpath, stat } from \"node:fs/promises\";\nimport { posix, win32 } from \"node:path\";\nimport type { GitEnvironment } from \"./git-process.js\";\n\n/** What the git adapter reads from the file system to find git and the repository of a folder. */\nexport interface GitFileSystem {\n /** Whether `path` is a file that this process may execute. */\n isExecutableFile(path: string): Promise<boolean>;\n /** Whether anything (a file, a folder, a link) is at `path`. */\n hasEntry(path: string): Promise<boolean>;\n /** The path with every link resolved, or undefined when nothing usable is at `path`. */\n realPath(path: string): Promise<string | undefined>;\n}\n\n/** Where git is looked for: the process environment, its platform and its file system. */\nexport interface GitHost {\n readonly environment: GitEnvironment;\n readonly platform: NodeJS.Platform;\n readonly fileSystem: GitFileSystem;\n /** The folder the tool migrates. It is not trusted, so no git in it or under it runs. */\n readonly projectRoot: string;\n}\n\nconst WINDOWS = \"win32\";\nconst PATH_VARIABLE = \"PATH\";\nconst GIT_NAME = \"git\";\n/**\n * Git for Windows puts `git.exe` on PATH. A `.cmd` or `.bat` file runs only through a shell, and\n * the tool never starts one, so executables are the only candidates.\n */\nconst WINDOWS_EXECUTABLE_EXTENSION = \".exe\";\nconst GIT_FOLDER = \".git\";\nconst PARENT_FOLDER = \"..\";\n/**\n * The folder where package managers install packages and link their bins. npx puts the\n * `node_modules/.bin` of the project and of every folder above it on PATH, so a workspace root\n * above the migrated package, or any package of it, could plant a `git` there.\n */\nconst PACKAGES_FOLDER = \"node_modules\";\n/**\n * Errors that mean \"nothing usable is there\": a missing path, a parent that is not a folder, or\n * no permission. Any other error is a fault of the file system and is passed on.\n */\nconst ABSENT_CODES: ReadonlySet<string> = new Set([\"ENOENT\", \"ENOTDIR\", \"EACCES\", \"EPERM\"]);\n\nfunction isAbsent(error: unknown): boolean {\n return ABSENT_CODES.has((error as NodeJS.ErrnoException | undefined)?.code ?? \"\");\n}\n\n/** What `check` gives, or `absent` when it fails because nothing usable is at the path. */\nasync function unlessAbsent<T>(check: () => Promise<T>, absent: T): Promise<T> {\n try {\n return await check();\n } catch (error) {\n if (isAbsent(error)) {\n return absent;\n }\n throw error;\n }\n}\n\nconst pathsOf = (platform: NodeJS.Platform) => (platform === WINDOWS ? win32 : posix);\n\n/** The PATH variable; Windows spells its name in any case (`Path`). */\nfunction pathVariable({ environment, platform }: GitHost): string {\n const name =\n platform === WINDOWS\n ? Object.keys(environment).find((key) => key.toUpperCase() === PATH_VARIABLE)\n : PATH_VARIABLE;\n return name === undefined ? \"\" : (environment[name] ?? \"\");\n}\n\n/** Whether the real path `target` is the real folder `folder` or lies under it. */\nfunction isAtOrUnder(paths: typeof posix, folder: string, target: string): boolean {\n const path = paths.relative(folder, target);\n return (\n !(path === PARENT_FOLDER || path.startsWith(`${PARENT_FOLDER}${paths.sep}`)) &&\n !paths.isAbsolute(path)\n );\n}\n\n/**\n * Whether `path` has a `node_modules` segment, in any case. The file systems of macOS and Windows\n * ignore case, so a `NODE_MODULES` folder is the `node_modules` that npx puts on PATH, and a real\n * path keeps the case the folder was created with. Where case matters, this passes over more.\n */\nfunction isInPackagesFolder(host: GitHost, path: string): boolean {\n const separator = host.platform === WINDOWS ? /[\\\\/]/ : posix.sep;\n return path.split(separator).some((segment) => segment.toLowerCase() === PACKAGES_FOLDER);\n}\n\n/**\n * Whether a PATH entry is a folder git may run from. An empty or relative entry names a folder\n * relative to the working directory, a folder in the project is the project's, and a folder in a\n * `node_modules` holds the bins of packages, which npx puts on PATH for the project and every\n * folder above it; each can hold a planted git, so each is passed over. The entry is checked as\n * written and as its real path: a `node_modules` can be a link to a folder with another name.\n */\nasync function isTrustedFolder(host: GitHost, project: string, folder: string): Promise<boolean> {\n const paths = pathsOf(host.platform);\n if (!paths.isAbsolute(folder) || isInPackagesFolder(host, folder)) {\n return false;\n }\n const real = await host.fileSystem.realPath(folder);\n return (\n real !== undefined && !isAtOrUnder(paths, project, real) && !isInPackagesFolder(host, real)\n );\n}\n\n/**\n * The absolute path of the first git on PATH outside the project and outside every `node_modules`,\n * or undefined when there is none. The absolute path also keeps Windows from looking in the\n * working directory first, as it does for a bare program name: a `git.exe` planted at the project\n * root never runs.\n */\nexport async function findGitExecutable(host: GitHost): Promise<string | undefined> {\n const paths = pathsOf(host.platform);\n const name = host.platform === WINDOWS ? `${GIT_NAME}${WINDOWS_EXECUTABLE_EXTENSION}` : GIT_NAME;\n const root = paths.resolve(host.projectRoot);\n const project = (await host.fileSystem.realPath(root)) ?? root;\n for (const folder of pathVariable(host).split(paths.delimiter)) {\n const candidate = paths.join(folder, name);\n const isTrusted = await isTrustedFolder(host, project, folder);\n if (isTrusted && (await host.fileSystem.isExecutableFile(candidate))) {\n return candidate;\n }\n }\n return undefined;\n}\n\n/**\n * Whether git takes `folder` as the root of a repository when it looks no higher than `ceiling`\n * (the parent of `folder`, or `folder` itself at the root of the file system).\n */\nexport type RepositoryCheck = (folder: string, ceiling: string) => Promise<boolean>;\n\n/**\n * The nearest folder at or above `directory` whose `.git` entry (a folder, or the file of a\n * submodule or a linked work tree) git takes as a repository, or undefined. Git takes that folder\n * as the work tree unless `core.worktree` names another one; a planted `core.worktree` made git\n * list another folder, and the project looked empty, so the tool gives git this folder as the\n * work tree. Git passes over a `.git` that is no repository (an empty folder) and finds the one\n * above it, so `isRepository` asks git about each folder that has a `.git` entry.\n */\nexport async function findWorkTree(\n directory: string,\n { platform, fileSystem }: GitHost,\n isRepository: RepositoryCheck,\n): Promise<string | undefined> {\n const paths = pathsOf(platform);\n let folder = paths.resolve(directory);\n for (;;) {\n const parent = paths.dirname(folder);\n const hasGit = await fileSystem.hasEntry(paths.join(folder, GIT_FOLDER));\n if (hasGit && (await isRepository(folder, parent))) {\n return folder;\n }\n if (parent === folder) {\n return undefined;\n }\n folder = parent;\n }\n}\n\n/** The git file system on `node:fs`. */\nexport function createNodeGitFileSystem(): GitFileSystem {\n return {\n isExecutableFile: (path) =>\n unlessAbsent(async () => {\n const isFile = (await stat(path)).isFile();\n await access(path, constants.X_OK);\n return isFile;\n }, false),\n hasEntry: (path) =>\n unlessAbsent(async () => {\n await lstat(path);\n return true;\n }, false),\n realPath: (path) => unlessAbsent<string | undefined>(() => realpath(path), undefined),\n };\n}\n","import { spawn } from \"node:child_process\";\n\n/** The environment variables git inherits, as `process.env` holds them. */\nexport type GitEnvironment = Readonly<Record<string, string | undefined>>;\n\n/** One git command: the git program by its absolute path, where it runs, and with what. */\nexport interface GitInvocation {\n readonly executable: string;\n readonly directory: string;\n readonly gitArguments: readonly string[];\n readonly environment: GitEnvironment;\n}\n\n/** How a git command ended: its exit code and output, or why it did not start. */\nexport type GitRun =\n | {\n readonly kind: \"exited\";\n readonly exitCode: number | null;\n readonly output: string;\n readonly errors: string;\n }\n | { readonly kind: \"failed\"; readonly reason: string };\n\n/** Runs one git command exactly as given; the hardening is part of the invocation. */\nexport type GitProcess = (invocation: GitInvocation) => Promise<GitRun>;\n\n/** A git process in a child process, with the invocation's environment and nothing else. */\nexport const spawnGitProcess: GitProcess = ({ executable, directory, gitArguments, environment }) =>\n new Promise((resolve) => {\n // spawn, not execFile: the output of a large repository has no buffer limit this way.\n const child = spawn(executable, [...gitArguments], { cwd: directory, env: environment });\n const output: Buffer[] = [];\n const errors: Buffer[] = [];\n child.stdout.on(\"data\", (chunk: Buffer) => output.push(chunk));\n child.stderr.on(\"data\", (chunk: Buffer) => errors.push(chunk));\n // Git is gone since it was found, or the directory does not exist.\n child.on(\"error\", (error) => resolve({ kind: \"failed\", reason: error.message }));\n child.on(\"close\", (exitCode) => {\n resolve({\n kind: \"exited\",\n exitCode,\n output: Buffer.concat(output).toString(\"utf8\"),\n errors: Buffer.concat(errors).toString(\"utf8\").trim(),\n });\n });\n });\n\n/**\n * Settings that win over every config file, because the tool runs git in folders it did not\n * create: a nested repository unpacked from an archive, or a bare repository committed inside a\n * cloned one. Their config is not trusted.\n *\n * - `core.fsmonitor=false`: the fsmonitor hook is a command from config that `ls-files` and\n * `check-ignore` run on every call.\n * - `protocol.allow=never`: refuses every transport that no `protocol.<name>.allow` key allows.\n * A repository's own config can still allow one by name, so the environment below refuses\n * them all for real.\n * - `safe.bareRepository=explicit`: a bare repository found by walking up from the folder is\n * refused, so its config is not read at all; the folder is then walked as a tree.\n *\n * These two commands write no index, so no hook runs, and they start no filter or pager.\n */\nconst HARDENED_CONFIG = [\n \"-c\",\n \"core.fsmonitor=false\",\n \"-c\",\n \"protocol.allow=never\",\n \"-c\",\n \"safe.bareRepository=explicit\",\n] as const;\n\n/**\n * A partial clone fetches a missing object from its promisor remote while it reads the index (a\n * sparse directory entry, for example), and a fetch runs commands from config (`core.sshCommand`,\n * `remote.<name>.uploadpack`, `ext::` URLs, credential helpers).\n *\n * - `GIT_ALLOW_PROTOCOL` set to an empty list: git then allows only the transports in the list,\n * whatever any `protocol.*` key says (git 2.12 and newer), so no fetch starts. It is the\n * guarantee on every git the tool supports; git reports the missing object on stderr and\n * lists the files it can read.\n * - `GIT_NO_LAZY_FETCH=1`: git 2.45 and newer do not even try a fetch. Older git ignores it.\n * - `GIT_TERMINAL_PROMPT=0`: git never waits on a password prompt.\n */\nconst HARDENED_ENVIRONMENT = {\n GIT_ALLOW_PROTOCOL: \"\",\n GIT_NO_LAZY_FETCH: \"1\",\n GIT_TERMINAL_PROMPT: \"0\",\n} as const;\n\n/**\n * Variables that name a repository or a part of it. A git hook sets `GIT_DIR` and\n * `GIT_INDEX_FILE` for the commands it runs, so a run from a hook would list that repository\n * for every folder. The tool lists each folder by the repository the folder is in.\n */\nconst REPOSITORY_VARIABLES: readonly string[] = [\n \"GIT_DIR\",\n \"GIT_WORK_TREE\",\n \"GIT_COMMON_DIR\",\n \"GIT_INDEX_FILE\",\n \"GIT_OBJECT_DIRECTORY\",\n \"GIT_ALTERNATE_OBJECT_DIRECTORIES\",\n];\n/** Makes git use this folder as the work tree, whatever `core.worktree` says. */\nconst WORK_TREE_VARIABLE = \"GIT_WORK_TREE\";\n/** Keeps git from looking for a repository above this folder. */\nconst CEILING_VARIABLE = \"GIT_CEILING_DIRECTORIES\";\n\n/** The environment of a hardened git command, from the environment the process has. */\nfunction hardenedEnvironment(command: HardenedGitCommand): GitEnvironment {\n const kept = Object.entries(command.environment).filter(\n ([name]) => !REPOSITORY_VARIABLES.includes(name.toUpperCase()),\n );\n const { workTree, ceiling } = command;\n const forced = {\n ...(workTree === undefined ? {} : { [WORK_TREE_VARIABLE]: workTree }),\n ...(ceiling === undefined ? {} : { [CEILING_VARIABLE]: ceiling }),\n };\n return { ...Object.fromEntries(kept), ...forced, ...HARDENED_ENVIRONMENT };\n}\n\n/** What a hardened git command needs besides its arguments. */\nexport interface HardenedGitCommand {\n readonly executable: string;\n readonly directory: string;\n readonly environment: GitEnvironment;\n /** The folder that holds the `.git` of the repository, or undefined when there is none. */\n readonly workTree: string | undefined;\n /** The folder above which git looks for no repository; git's own rule when undefined. */\n readonly ceiling?: string;\n}\n\n/** The invocation of `gitArguments` with the hardening above. */\nexport function hardenedInvocation(\n command: HardenedGitCommand,\n gitArguments: readonly string[],\n): GitInvocation {\n return {\n executable: command.executable,\n directory: command.directory,\n gitArguments: [...HARDENED_CONFIG, ...gitArguments],\n environment: hardenedEnvironment(command),\n };\n}\n","import {\n findGitExecutable,\n findWorkTree,\n type GitFileSystem,\n type GitHost,\n type RepositoryCheck,\n} from \"./git-locations.js\";\nimport {\n type GitEnvironment,\n type GitProcess,\n type GitRun,\n type HardenedGitCommand,\n hardenedInvocation,\n spawnGitProcess,\n} from \"./git-process.js\";\n\nexport type { GitEnvironment } from \"./git-process.js\";\n\n/** The paths git lists for a directory, or why it could not list them. */\nexport type GitListing =\n | { readonly kind: \"listed\"; readonly paths: readonly string[] }\n | { readonly kind: \"unavailable\"; readonly reason: string };\n\n/**\n * Lists a directory the way git sees it: tracked files, and untracked files that are not ignored.\n * A submodule or a nested repository is one path: the directory, without a trailing slash.\n */\nexport interface GitFileList {\n list(directory: string): Promise<GitListing>;\n}\n\n/**\n * Tracked files, and untracked files that `.gitignore`, `.git/info/exclude` and the global\n * excludes file do not ignore, under the working directory, relative to it, NUL-separated. A file\n * in a merge conflict is in the index once per side; `--deduplicate` (git 2.31) lists it once.\n */\nconst LS_FILES_ARGUMENTS = [\n \"ls-files\",\n \"--cached\",\n \"--others\",\n \"--exclude-standard\",\n \"--deduplicate\",\n \"-z\",\n] as const;\n/**\n * Exit code 0 when the working directory is ignored by the repository it is in, 1 when not. Git\n * lists nothing in an ignored directory, so its listing would look like an empty project.\n */\nconst CHECK_IGNORE_ARGUMENTS = [\"check-ignore\", \"--quiet\", \".\"] as const;\n/** Exit code 0 when git finds a repository in the working directory. */\nconst REPOSITORY_CHECK_ARGUMENTS = [\"rev-parse\", \"--git-dir\"] as const;\nconst IGNORED_EXIT_CODE = 0;\nconst NOT_IGNORED_EXIT_CODE = 1;\nconst IGNORED_REASON = \"the git repository around the folder ignores it\";\nconst NO_GIT_REASON = \"no git executable in an absolute folder of PATH\";\n/** An untracked nested repository is listed with a slash, and the directory itself as `./`. */\nconst TRAILING_SLASH_RE = /\\/$/;\nconst SELF_PATHS: ReadonlySet<string> = new Set([\"\", \".\"]);\n\nfunction failureReason(run: GitRun): string {\n if (run.kind === \"failed\") {\n return run.reason;\n }\n return run.errors || `exit code ${run.exitCode}`;\n}\n\nfunction listedPaths(output: string): string[] {\n return output\n .split(\"\\0\")\n .map((path) => path.replace(TRAILING_SLASH_RE, \"\"))\n .filter((path) => !SELF_PATHS.has(path));\n}\n\nasync function listWith(command: HardenedGitCommand, run: GitProcess): Promise<GitListing> {\n const ignored = await run(hardenedInvocation(command, CHECK_IGNORE_ARGUMENTS));\n if (ignored.kind === \"exited\" && ignored.exitCode === IGNORED_EXIT_CODE) {\n return { kind: \"unavailable\", reason: IGNORED_REASON };\n }\n if (ignored.kind === \"failed\" || ignored.exitCode !== NOT_IGNORED_EXIT_CODE) {\n return { kind: \"unavailable\", reason: failureReason(ignored) };\n }\n const listed = await run(hardenedInvocation(command, LS_FILES_ARGUMENTS));\n if (listed.kind === \"failed\" || listed.exitCode !== 0) {\n return { kind: \"unavailable\", reason: failureReason(listed) };\n }\n return { kind: \"listed\", paths: listedPaths(listed.output) };\n}\n\n/** What the git file list runs git with. */\nexport interface GitFileListOptions {\n /** The process environment: `PATH`, `HOME` and git's own variables. */\n readonly environment: GitEnvironment;\n readonly platform: NodeJS.Platform;\n readonly fileSystem: GitFileSystem;\n /** The folder the tool migrates; no git in it or under it runs. */\n readonly projectRoot: string;\n /** Runs one git command; a child process unless a test wraps it. */\n readonly process?: GitProcess;\n}\n\nclass HardenedGitFileList implements GitFileList {\n readonly #host: GitHost;\n readonly #process: GitProcess;\n /** PATH is searched once, on the first listing. */\n #executable: Promise<string | undefined> | undefined;\n\n constructor(options: GitFileListOptions) {\n this.#host = options;\n this.#process = options.process ?? spawnGitProcess;\n }\n\n async list(directory: string): Promise<GitListing> {\n this.#executable ??= findGitExecutable(this.#host);\n const executable = await this.#executable;\n if (executable === undefined) {\n return { kind: \"unavailable\", reason: NO_GIT_REASON };\n }\n const { environment } = this.#host;\n const isRepository: RepositoryCheck = async (folder, ceiling) => {\n const command = { executable, directory: folder, environment, workTree: undefined, ceiling };\n const run = await this.#process(hardenedInvocation(command, REPOSITORY_CHECK_ARGUMENTS));\n return run.kind === \"exited\" && run.exitCode === 0;\n };\n const workTree = await findWorkTree(directory, this.#host, isRepository);\n return listWith({ executable, directory, environment, workTree }, this.#process);\n }\n}\n\n/**\n * A git file list that runs `git check-ignore` and `git ls-files` (git-process.ts has the\n * hardening): git by its absolute path from a PATH folder outside the project, with the folder\n * whose `.git` git takes as the repository of the listed directory as the work tree.\n */\nexport function createGitFileList(options: GitFileListOptions): GitFileList {\n return new HardenedGitFileList(options);\n}\n","import { appendFileSync, closeSync, fstatSync, mkdirSync, mkdtempSync, openSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type { Logger } from \"../../application/ports.js\";\n\n/** The log file, the clock of the timestamps, and whether the file must be new. */\nexport interface JsonLinesLoggerOptions {\n readonly path: string;\n readonly now: () => Date;\n /**\n * The file must not exist yet: it is created with `O_CREAT | O_EXCL`, which also refuses a\n * link at the path instead of following it. Used for the default log in the temporary folder.\n * Without it, an existing file (the user's `--log`) gets the new lines appended.\n * Either way the file is opened when the logger is created, so a path that cannot be a log\n * file (a folder, a read-only place) fails before the migration starts.\n */\n readonly isExclusive: boolean;\n}\n\ntype Level = \"info\" | \"warn\";\n\n/** The log can name files and changes of a private project, so only its owner can read it. */\nconst LOG_FILE_MODE = 0o600;\nconst TEMPORARY_FOLDER_PREFIX = \"openapi-typesafe-migrate-\";\nconst LOG_EXTENSION = \".jsonl\";\nconst TIME_SEPARATOR = \":\";\n/** `:` is not allowed in Windows file names. */\nconst FILE_NAME_TIME_SEPARATOR = \"-\";\n\n/** The path names a folder, so lines cannot be appended to it. */\nexport class LogPathIsFolderError extends Error {\n override readonly name = \"LogPathIsFolderError\";\n\n constructor(path: string) {\n super(`${path} is a folder; --log takes a file path`);\n }\n}\n\nconst EXCLUSIVE_CREATE_FLAG = \"wx\";\nconst APPEND_FLAG = \"a\";\nconst IS_A_DIRECTORY_CODE = \"EISDIR\";\n\n/**\n * Create or open the log file once, to fail early. POSIX refuses to open a folder for writing\n * (EISDIR), but Windows opens it and accepts empty writes, so the opened file is also checked.\n */\nfunction openLogFile(path: string, isExclusive: boolean): void {\n let descriptor: number;\n try {\n descriptor = openSync(path, isExclusive ? EXCLUSIVE_CREATE_FLAG : APPEND_FLAG, LOG_FILE_MODE);\n } catch (error) {\n throw isDirectoryError(error) ? new LogPathIsFolderError(path) : error;\n }\n try {\n if (fstatSync(descriptor).isDirectory()) {\n throw new LogPathIsFolderError(path);\n }\n } finally {\n closeSync(descriptor);\n }\n}\n\nconst isDirectoryError = (error: unknown): boolean =>\n error instanceof Error && \"code\" in error && error.code === IS_A_DIRECTORY_CODE;\n\n/**\n * The Logger port as a JSON Lines file: one object per event with a UTC timestamp, the level and\n * the event's fields. Lines are appended synchronously, so the log is complete when the command\n * fails half way.\n */\nclass JsonLinesLogger implements Logger {\n readonly #options: JsonLinesLoggerOptions;\n\n constructor(options: JsonLinesLoggerOptions) {\n this.#options = options;\n if (!options.isExclusive) {\n mkdirSync(dirname(options.path), { recursive: true });\n }\n openLogFile(options.path, options.isExclusive);\n }\n\n info(event: string, fields: Readonly<Record<string, unknown>> = {}): void {\n this.#append(\"info\", event, fields);\n }\n\n warn(event: string, fields: Readonly<Record<string, unknown>> = {}): void {\n this.#append(\"warn\", event, fields);\n }\n\n #append(level: Level, event: string, fields: Readonly<Record<string, unknown>>): void {\n const time = this.#options.now().toISOString();\n const line = `${JSON.stringify({ time, level, event, ...fields })}\\n`;\n appendFileSync(this.#options.path, line, { mode: LOG_FILE_MODE });\n }\n}\n\n/** A logger that appends to the JSON Lines file at `options.path`, creating its directory. */\nexport function createJsonLinesLogger(options: JsonLinesLoggerOptions): Logger {\n return new JsonLinesLogger(options);\n}\n\n/**\n * The path of a run's log in a new folder under `parent` (the system temporary folder), named by\n * the run's UTC start time. `mkdtemp` gives the folder a name no other user can guess and mode\n * 0700, so on a shared host nobody else can plant a file or a link in it.\n */\nexport function createTemporaryLogPath(parent: string, startTime: Date): string {\n const folder = mkdtempSync(join(parent, TEMPORARY_FOLDER_PREFIX));\n const name = startTime.toISOString().replaceAll(TIME_SEPARATOR, FILE_NAME_TIME_SEPARATOR);\n return join(folder, `${name}${LOG_EXTENSION}`);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { JsonDocumentReader } from \"../../application/ports.js\";\nimport type { DocumentRead, TreeEntry, TreeNode } from \"../../domain/config-documents.js\";\n\n/**\n * The JsonDocumentReader port on the TypeScript 6 JSON parser (ADR-015), the one tsc reads\n * `tsconfig.json` with: it accepts comments and trailing commas, as `deno.jsonc` and Nx\n * `project.json` do, and gives every node its offsets in the text. A byte order mark is allowed\n * before the value.\n */\n\n/** The parser names the file in its diagnostics only. */\nconst FILE_NAME = \"document.json\";\n/** The length of the quote on each side of a JSON string. */\nconst QUOTE_LENGTH = 1;\nconst JSON_ESCAPE = \"\\\\\";\n\nconst encode = (value: string): string => JSON.stringify(value);\n\nfunction spanOf(node: ts.Node, file: ts.SourceFile): { start: number; end: number } {\n return { start: node.getStart(file), end: node.end };\n}\n\nfunction convertString(node: ts.StringLiteral, file: ts.SourceFile): TreeNode {\n const span = spanOf(node, file);\n const content = { start: span.start + QUOTE_LENGTH, end: span.end - QUOTE_LENGTH };\n const isEscaped = file.text.slice(content.start, content.end).includes(JSON_ESCAPE);\n return { kind: \"scalar\", value: node.text, content, isFolded: false, isEscaped, encode, ...span };\n}\n\nfunction convertObject(node: ts.ObjectLiteralExpression, file: ts.SourceFile): TreeNode {\n // A valid document has only quoted keys (see firstError); the check narrows the node type.\n const entries = node.properties.filter(ts.isPropertyAssignment).map(\n (property): TreeEntry => ({\n key: ts.isStringLiteral(property.name)\n ? convertString(property.name, file)\n : { kind: \"other\", ...spanOf(property.name, file) },\n value: convert(property.initializer, file),\n }),\n );\n return { kind: \"map\", entries, ...spanOf(node, file) };\n}\n\nfunction convert(node: ts.Expression, file: ts.SourceFile): TreeNode {\n if (ts.isObjectLiteralExpression(node)) {\n return convertObject(node, file);\n }\n if (ts.isArrayLiteralExpression(node)) {\n const items = node.elements.map((item) => convert(item, file));\n return { kind: \"list\", items, ...spanOf(node, file) };\n }\n if (ts.isStringLiteral(node)) {\n return convertString(node, file);\n }\n return { kind: \"other\", ...spanOf(node, file) };\n}\n\n/**\n * `parseJsonText` keeps its syntax errors internal. This public reader of the same grammar\n * reports the first of them, and rejects what JSON forbids and the parser allows: unquoted or\n * single-quoted keys, and a root value that is not an object.\n */\nfunction firstError(text: string): number | undefined {\n const { error } = ts.parseConfigFileTextToJson(FILE_NAME, text);\n return error === undefined ? undefined : (error.start ?? 0);\n}\n\nfunction readTree(text: string): DocumentRead {\n const errorAt = firstError(text);\n if (errorAt !== undefined) {\n return { kind: \"unreadable\", offset: errorAt };\n }\n const file = ts.parseJsonText(FILE_NAME, text);\n const documents = file.statements.map((statement) => convert(statement.expression, file));\n return { kind: \"read\", documents };\n}\n\nfunction read(text: string): DocumentRead {\n try {\n return readTree(text);\n } catch (error) {\n // The parser and the conversion recurse per level of nesting: a crafted file (about a\n // thousand levels) exhausts the stack, and the error gives no place.\n if (error instanceof RangeError) {\n return { kind: \"unreadable\", offset: undefined };\n }\n throw error;\n }\n}\n\nexport function createJsonTextReader(): JsonDocumentReader {\n return { read };\n}\n","import { lstat, realpath } from \"node:fs/promises\";\nimport { isAbsolute, join, relative, sep } from \"node:path\";\n\nconst PARENT_DIRECTORY = \"..\";\n/**\n * Errors of a listed path that leads to no file: a tracked file deleted from the working tree\n * (ENOENT), a path through a file (ENOTDIR), and a link that is dangling or loops (ELOOP).\n */\nconst UNRESOLVED_PATH_CODES: ReadonlySet<string> = new Set([\"ENOENT\", \"ENOTDIR\", \"ELOOP\"]);\n\n/** What a path that git lists is on disk. */\nexport type ListedEntry = \"file\" | \"directory\" | \"other\" | \"outside\";\n\n/**\n * Whether `path` stays under the folder it is relative to, by its text. Git checks a path when it\n * adds it to the index, but it prints an index that it did not write (one in a planted `.git`) as\n * it is, with `../` or a leading `/`. Links are checked by the real path.\n */\nexport function isRelativeDownward(path: string): boolean {\n return !isAbsolute(path) && !path.split(\"/\").includes(PARENT_DIRECTORY);\n}\n\n/** Whether the real path `target` is in the real folder `folder`, not the folder itself. */\nexport function isInFolder(folder: string, target: string): boolean {\n const path = relative(folder, target);\n return (\n path !== \"\" &&\n path !== PARENT_DIRECTORY &&\n !path.startsWith(`${PARENT_DIRECTORY}${sep}`) &&\n !isAbsolute(path)\n );\n}\n\n/**\n * Git also lists links and tracked files deleted from the working tree; only regular files that\n * exist are the project's files. A directory is a submodule or a nested repository. A path whose\n * real path is outside the root (by `..`, a linked parent folder, or a link itself) is \"outside\",\n * so the report names it. A link inside the root is \"other\": links are not followed, and what it\n * points at is listed on its own. A path that leads to no file, a broken link included, is \"other\".\n */\nexport async function entryAt(root: string, realRoot: string, path: string): Promise<ListedEntry> {\n if (!isRelativeDownward(path)) {\n return \"outside\";\n }\n try {\n const stats = await lstat(join(root, path));\n const isListable = stats.isFile() || stats.isDirectory();\n if (!isListable && !stats.isSymbolicLink()) {\n return \"other\";\n }\n // A link to the root itself (`self -> .`) is in the project, like a link to a folder in it.\n const realPath = await realpath(join(root, path));\n if (realPath !== realRoot && !isInFolder(realRoot, realPath)) {\n return \"outside\";\n }\n if (!isListable) {\n return \"other\";\n }\n return stats.isFile() ? \"file\" : \"directory\";\n } catch (error) {\n if (UNRESOLVED_PATH_CODES.has((error as NodeJS.ErrnoException).code ?? \"\")) {\n return \"other\";\n }\n throw error;\n }\n}\n","import type { Dirent } from \"node:fs\";\nimport {\n chmod,\n lstat,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport type {\n FileProblem,\n FileRead,\n FileWrite,\n Logger,\n ProjectFileList,\n ProjectFiles,\n ProjectRootState,\n SkippedFile,\n} from \"../../application/ports.js\";\nimport type { GitFileList } from \"../git-file-list/git-file-list.js\";\nimport { entryAt, isInFolder, isRelativeDownward, type ListedEntry } from \"./paths-in-root.js\";\n\n/**\n * Installed packages, git metadata, build output and the output folders of frameworks and test\n * tools are not the project's own files: rewriting them only adds noise to the dry run and the\n * diff. They are skipped even when git tracks them.\n * `build` and `out` stay in, because some projects keep sources there. Links are not followed, so a\n * linked workspace package is migrated in its own project, not twice.\n */\nconst SKIPPED_DIRECTORIES: ReadonlySet<string> = new Set([\n \"node_modules\",\n \".git\",\n \"dist\",\n \".next\",\n \".nuxt\",\n \".output\",\n \".svelte-kit\",\n \".turbo\",\n \"coverage\",\n]);\n\nconst CURRENT_DIRECTORY = \".\";\n/** The new text is written next to the file under this suffix, then renamed over it. */\nconst TEMPORARY_SUFFIX = \".openapi-typesafe-migrate.tmp\";\nconst PERMISSION_BITS = 0o7777;\n/** Only the owner can read the new text until it has the mode of the file it replaces. */\nconst TEMPORARY_MODE = 0o600;\nconst OUTSIDE_ROOT: FileProblem = { kind: \"outside-root\" };\nconst NOT_UTF_8: FileProblem = { kind: \"not-utf-8\" };\nconst UTF_8 = \"utf-8\";\n\n/**\n * The text of a file's bytes, or \"not-utf-8\". Decoding replaces invalid bytes with U+FFFD by\n * default, and writing that text back would destroy them (a Latin-1 `é` became `�`). A fatal\n * decoder refuses them instead. The byte order mark stays in the text, so it is written back.\n */\nfunction decodeUtf8(bytes: Uint8Array): FileRead {\n try {\n const text = new TextDecoder(UTF_8, { fatal: true, ignoreBOM: true }).decode(bytes);\n return { kind: \"read\", text };\n } catch (error) {\n // The fatal decoder reports invalid bytes as a TypeError; anything else is a bug.\n if (error instanceof TypeError) {\n return { kind: \"skipped\", reason: NOT_UTF_8 };\n }\n throw error;\n }\n}\n\n/** The problem of a failed file system call; an error without an error code is passed on. */\nfunction ioProblem(error: unknown): FileProblem {\n const code = (error as NodeJS.ErrnoException | undefined)?.code;\n if (typeof code !== \"string\") {\n throw error;\n }\n return { kind: \"io-error\", code };\n}\n\n/** What the project files read besides the file system. */\nexport interface NodeProjectFilesOptions {\n readonly git: GitFileList;\n readonly logger: Logger;\n}\n\nfunction isInSkippedDirectory(path: string): boolean {\n return path\n .split(\"/\")\n .slice(0, -1)\n .some((directory) => SKIPPED_DIRECTORIES.has(directory));\n}\n\nasync function listTree(root: string, relative: string): Promise<string[]> {\n const entries: Dirent[] = await readdir(join(root, relative), { withFileTypes: true });\n const nested = await Promise.all(\n entries.map((entry) => {\n const path = relative === \"\" ? entry.name : `${relative}/${entry.name}`;\n if (entry.isDirectory()) {\n return SKIPPED_DIRECTORIES.has(entry.name) ? [] : listTree(root, path);\n }\n return entry.isFile() ? [path] : [];\n }),\n );\n return nested.flat();\n}\n\ninterface ListedPaths {\n readonly files: readonly string[];\n readonly directories: readonly string[];\n readonly skipped: readonly SkippedFile[];\n}\n\n/** The files, the nested repositories and the paths outside the root of a git listing. */\nasync function listedPaths(\n root: string,\n realRoot: string,\n paths: readonly string[],\n): Promise<ListedPaths> {\n const candidates = paths.filter((path) => !isInSkippedDirectory(path));\n const entries = await Promise.all(candidates.map((path) => entryAt(root, realRoot, path)));\n const withEntry = (entry: ListedEntry) =>\n candidates.filter((_path, index) => entries[index] === entry);\n return {\n files: withEntry(\"file\"),\n directories: withEntry(\"directory\").filter((path) => !SKIPPED_DIRECTORIES.has(baseName(path))),\n skipped: withEntry(\"outside\").map((path): SkippedFile => ({ path, reason: OUTSIDE_ROOT })),\n };\n}\n\nfunction baseName(path: string): string {\n return path.slice(path.lastIndexOf(\"/\") + 1);\n}\n\nfunction joinRelative(directory: string, path: string): string {\n return directory === \"\" ? path : `${directory}/${path}`;\n}\n\nconst NO_FILES: ProjectFileList = { files: [], skipped: [] };\n\nfunction joinLists(lists: readonly ProjectFileList[]): ProjectFileList {\n return lists.reduce(\n (joined, list) => ({\n files: [...joined.files, ...list.files],\n skipped: [...joined.skipped, ...list.skipped],\n }),\n NO_FILES,\n );\n}\n\nclass NodeProjectFiles implements ProjectFiles {\n readonly #root: string;\n readonly #options: NodeProjectFilesOptions;\n\n constructor(root: string, options: NodeProjectFilesOptions) {\n this.#root = root;\n this.#options = options;\n }\n\n /** Git's view of the project when it is in a git repository, so ignored files stay out. */\n async listFiles(): Promise<ProjectFileList> {\n return this.#listDirectory(await realpath(this.#root), \"\");\n }\n\n /**\n * One directory, by the git repository it is in. Git lists a submodule or a nested repository\n * as one entry, so each of those is listed the same way, by its own repository and ignore rules.\n */\n async #listDirectory(realRoot: string, directory: string): Promise<ProjectFileList> {\n const { git, logger } = this.#options;\n const listing = await git.list(join(this.#root, directory));\n const logged = { directory: directory === \"\" ? CURRENT_DIRECTORY : directory };\n if (listing.kind === \"unavailable\") {\n // Not a git repository, no git, or ignored by the repository around it: walk the tree; only\n // the skipped folders stay out.\n const files = await listTree(this.#root, directory);\n logger.info(\"files_listed\", {\n ...logged,\n source: \"tree\",\n fileCount: files.length,\n reason: listing.reason,\n });\n return { files, skipped: [] };\n }\n const paths = listing.paths.map((path) => joinRelative(directory, path));\n const { files, directories, skipped } = await listedPaths(this.#root, realRoot, paths);\n logger.info(\"files_listed\", { ...logged, source: \"git\", fileCount: files.length });\n for (const file of skipped) {\n logger.warn(\"file_skipped\", { ...file });\n }\n const nested = await Promise.all(\n directories.map((path) => this.#listDirectory(realRoot, path)),\n );\n return joinLists([{ files, skipped }, ...nested]);\n }\n\n async read(path: string): Promise<FileRead> {\n try {\n const target = await this.#pathInRoot(path);\n return target === undefined\n ? { kind: \"skipped\", reason: OUTSIDE_ROOT }\n : decodeUtf8(await readFile(target));\n } catch (error) {\n return { kind: \"skipped\", reason: ioProblem(error) };\n }\n }\n\n async write(path: string, text: string): Promise<FileWrite> {\n try {\n const target = await this.#pathInRoot(path);\n if (target === undefined) {\n return { kind: \"failed\", reason: OUTSIDE_ROOT };\n }\n await this.#replace(target, text, path);\n return { kind: \"written\" };\n } catch (error) {\n return { kind: \"failed\", reason: ioProblem(error) };\n }\n }\n\n /**\n * Writes a new file and renames it over the old one, so the write never goes through a link: a\n * hard link to a file outside the root keeps its old text, and is reported in the log. The new\n * file keeps the mode of the old one.\n */\n async #replace(target: string, text: string, path: string): Promise<void> {\n const { mode, nlink } = await lstat(target);\n // `wx`: a leftover of a failed run is not overwritten; the error names it.\n const temporary = join(dirname(target), `.${basename(target)}${TEMPORARY_SUFFIX}`);\n await writeFile(temporary, text, { encoding: \"utf8\", flag: \"wx\", mode: TEMPORARY_MODE });\n try {\n // The mode is set after the write, because `writeFile`'s mode is reduced by the umask.\n await chmod(temporary, mode & PERMISSION_BITS);\n await rename(temporary, target);\n } catch (error) {\n await rm(temporary, { force: true });\n throw error;\n }\n if (nlink > 1) {\n this.#options.logger.warn(\"hard_link_separated\", { path, linkCount: nlink });\n }\n }\n\n /** The real path of a project file, or undefined for one that resolves outside the root. */\n async #pathInRoot(path: string): Promise<string | undefined> {\n const realPath = isRelativeDownward(path) ? await realpath(join(this.#root, path)) : undefined;\n if (realPath === undefined || !isInFolder(await realpath(this.#root), realPath)) {\n return undefined;\n }\n return realPath;\n }\n}\n\n/** The files of the project in the directory `root`, by `/`-separated relative paths. */\nexport function createNodeProjectFiles(\n root: string,\n options: NodeProjectFilesOptions,\n): ProjectFiles {\n return new NodeProjectFiles(root, options);\n}\n\nconst MISSING_PATH_CODES: ReadonlySet<string> = new Set([\"ENOENT\", \"ENOTDIR\"]);\n\n/**\n * Whether `root` is a folder the migration can list, by its real path (a link to a folder is\n * one). Asked before anything is listed, so `--root` naming a file or nothing fails with a clear\n * message instead of git's or the file system's.\n */\nexport async function inspectProjectRoot(root: string): Promise<ProjectRootState> {\n try {\n return (await stat(root)).isDirectory() ? \"directory\" : \"not-a-directory\";\n } catch (error) {\n if (MISSING_PATH_CODES.has((error as NodeJS.ErrnoException).code ?? \"\")) {\n return \"missing\";\n }\n throw error;\n }\n}\n","import type { Writable } from \"node:stream\";\n\n/**\n * A writer for the CLI's stdout and stderr that stops when the reader closes the pipe (`| head`):\n * the write fails with `EPIPE`, which Node raises as an unhandled `error` event and a crash with\n * exit code 1. The reader has all it wanted, so the rest is dropped and the run ends as it would\n * have: the files are written before the report. Every other write error is thrown again. The\n * generator CLI has the same writer; the tool does not depend on the generator package.\n */\n\nconst BROKEN_PIPE = \"EPIPE\";\n\nfunction isBrokenPipe(error: Error): boolean {\n return (error as NodeJS.ErrnoException).code === BROKEN_PIPE;\n}\n\n/**\n * The text writer of the stream. After `EPIPE` the stream is destroyed, so later writes are\n * dropped by the stream itself and raise no second error.\n */\nexport function createPipeSafeWriter(stream: Writable): (text: string) => void {\n stream.on(\"error\", (error: Error) => {\n if (!isBrokenPipe(error)) {\n throw error;\n }\n });\n return (text) => {\n stream.write(text);\n };\n}\n","/**\n * What a migration found in one file: changes it made, and steps it leaves to the user. Both are\n * closed sets of facts, not text; the report turns them into messages (application/report.ts).\n * They go to the report and the log, so a version spec in them has its URL credentials hidden\n * (domain/url-credentials.ts).\n */\n\n/** A place in a text, 1-based. */\nexport interface TextPosition {\n readonly line: number;\n readonly column: number;\n}\n\nexport type Change =\n | {\n readonly kind: \"dependency-renamed\";\n readonly field: string;\n readonly from: string;\n readonly to: string;\n readonly spec: string;\n }\n | {\n readonly kind: \"catalog-entry-renamed\";\n readonly catalog: string;\n readonly from: string;\n readonly to: string;\n readonly spec: string;\n }\n | {\n readonly kind: \"import-renamed\";\n readonly field: string;\n readonly from: string;\n readonly to: string;\n readonly target: string;\n }\n | {\n readonly kind: \"alias-renamed\";\n readonly field: string;\n readonly name: string;\n readonly spec: string;\n }\n | { readonly kind: \"command-renamed\"; readonly location: string }\n | {\n readonly kind: \"package-name-renamed\";\n readonly location: string;\n readonly from: string;\n readonly to: string;\n }\n | {\n readonly kind: \"flag-renamed\";\n readonly location: string;\n readonly from: string;\n readonly to: string;\n }\n | {\n readonly kind: \"specifier-renamed\";\n readonly line: number;\n readonly from: string;\n readonly to: string;\n }\n | { readonly kind: \"transform-rewritten\"; readonly line: number }\n | { readonly kind: \"declaration-removed\"; readonly line: number; readonly name: string };\n\nexport type ManualStep =\n | { readonly kind: \"entry-not-edited\"; readonly field: string; readonly name: string }\n | {\n readonly kind: \"name-collision\";\n readonly field: string;\n readonly from: string;\n readonly to: string;\n }\n | {\n readonly kind: \"catalog-reference-kept\";\n readonly field: string;\n readonly name: string;\n readonly catalog: string;\n }\n | {\n readonly kind: \"catalog-entry-outside\";\n readonly field: string;\n readonly name: string;\n readonly catalog: string;\n }\n /** A dependency on a catalog entry that no catalog of the workspace has. */\n | {\n readonly kind: \"catalog-entry-missing\";\n readonly field: string;\n readonly name: string;\n readonly catalog: string;\n }\n | { readonly kind: \"catalog-entry-in-use\"; readonly catalog: string; readonly name: string }\n | { readonly kind: \"peer-dependency-renamed\"; readonly name: string }\n | { readonly kind: \"spec-kept\"; readonly name: string; readonly spec: string }\n /** A dependency under an original name whose spec points at a local package. */\n | {\n readonly kind: \"local-package\";\n readonly field: string;\n readonly name: string;\n readonly spec: string;\n }\n | { readonly kind: \"override-names-package\"; readonly field: string; readonly name: string }\n /** A pattern of a config (Jest's `moduleNameMapper`) that names an old package. */\n | {\n readonly kind: \"pattern-names-package\";\n readonly location: string;\n readonly value: string;\n readonly name: string;\n readonly to: string;\n }\n /** A package manager setting (not an override) that names an old package. */\n | { readonly kind: \"setting-names-package\"; readonly field: string; readonly name: string }\n | { readonly kind: \"versioned-command\"; readonly location: string }\n | {\n readonly kind: \"flags-in-variable\";\n readonly location: string;\n readonly variable: string;\n /** The old flags in the variable's value. */\n readonly flags: readonly string[];\n }\n | {\n readonly kind: \"variable-not-only-generator\";\n readonly location: string;\n readonly variable: string;\n /** The old flags of the generator after the variable, or in a variable's value there. */\n readonly flags: readonly string[];\n }\n | { readonly kind: \"pinned-package\"; readonly location: string; readonly name: string }\n | { readonly kind: \"old-package-file\"; readonly location: string; readonly path: string }\n | { readonly kind: \"old-name-in-command\"; readonly location: string; readonly word: string }\n /** A CI step whose `shell` is a program the tool does not read (`shell: python`). */\n | { readonly kind: \"script-not-shell\"; readonly location: string; readonly shell: string }\n | { readonly kind: \"command-string\"; readonly line: number; readonly to: string }\n | { readonly kind: \"config-unreadable\"; readonly position: TextPosition | undefined }\n | { readonly kind: \"manifest-not-read\" }\n /** A patch file (patch-package, pnpm, Yarn) of an old package's code. */\n | { readonly kind: \"old-package-patch\"; readonly name: string; readonly to: string }\n /** A Deno config names an import map by a URL or a path outside the project. */\n | { readonly kind: \"import-map-not-editable\"; readonly reference: string }\n | { readonly kind: \"options-not-inspected\"; readonly line: number }\n | { readonly kind: \"deep-import\"; readonly line: number; readonly specifier: string }\n /** A module specifier that is a path into the installed files of an old package. */\n | {\n readonly kind: \"old-package-import\";\n readonly line: number;\n readonly specifier: string;\n readonly name: string;\n readonly to: string;\n }\n /** A specifier of a config (`imports`, `browser`) that reaches into a renamed package. */\n | { readonly kind: \"deep-target\"; readonly location: string; readonly specifier: string }\n /** A config path into the installed files of an old package, which the new one does not have. */\n | {\n readonly kind: \"old-package-path\";\n readonly location: string;\n readonly path: string;\n readonly to: string;\n }\n | {\n readonly kind: \"dynamic-specifier\";\n readonly line: number;\n readonly value: string;\n /** The new name of the package the specifier starts with. */\n readonly to: string;\n }\n | {\n readonly kind: \"string-names-package\";\n readonly line: number;\n readonly value: string;\n readonly to: string;\n }\n | {\n readonly kind: \"old-peer-needed\";\n readonly dependent: string;\n readonly peer: string;\n readonly range: string;\n }\n | {\n readonly kind: \"transform-not-rewritten\";\n readonly line: number;\n readonly reason: TransformKeepReason;\n }\n | { readonly kind: \"legacy-callback\"; readonly line: number; readonly callback: string }\n | {\n readonly kind: \"package-not-declared\";\n readonly line: number;\n readonly name: string;\n /** The original packages that installed it as their own dependency. */\n readonly installers: readonly string[];\n };\n\n/** Why a `transform` callback was left as it is. */\nexport type TransformKeepReason =\n | \"other-callbacks\"\n | \"not-a-function\"\n | \"shared-function\"\n | \"shared-options\"\n | \"unknown-return\"\n | \"typed-options\"\n | \"spread-options\";\n\n/** A file's new text and what was found in it. Unchanged text means nothing to write. */\nexport interface FileMigration {\n readonly text: string;\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** The result for a file that the migration does not touch. */\nexport function unchanged(text: string): FileMigration {\n return { text, changes: [], manualSteps: [] };\n}\n\n/** Line number (1-based) of a character offset. */\nexport function lineAt(text: string, offset: number): number {\n let line = 1;\n for (let index = text.indexOf(\"\\n\"); index !== -1 && index < offset; ) {\n line++;\n index = text.indexOf(\"\\n\", index + 1);\n }\n return line;\n}\n\n/**\n * Line numbers (1-based) of character offsets in `text`, for a migration that names many places\n * of one text. The line starts are found once and searched by halves, so naming every command of\n * a large file stays linear in its size (`lineAt` for each one was quadratic: 57 s on 4 MB).\n */\nexport function lineLocator(text: string): (offset: number) => number {\n const lineStarts = [0];\n for (let index = text.indexOf(\"\\n\"); index !== -1; index = text.indexOf(\"\\n\", index + 1)) {\n lineStarts.push(index + 1);\n }\n return (offset) => {\n // The last line start at or before `offset`; a break at `offset` itself ends that line.\n let low = 0;\n let high = lineStarts.length - 1;\n while (low < high) {\n const middle = Math.ceil((low + high) / 2);\n if ((lineStarts[middle] as number) <= offset) {\n low = middle;\n } else {\n high = middle - 1;\n }\n }\n return low + 1;\n };\n}\n\n/** Column number (1-based) of a character offset. */\nexport function columnAt(text: string, offset: number): number {\n return offset - text.lastIndexOf(\"\\n\", offset - 1);\n}\n","/**\n * Edits by offset into the original text. A migration changes only the names, specs and command\n * words it renames, so everything else stays byte for byte: formatting, comments, key order,\n * number spellings, escapes and duplicate keys.\n */\nexport interface TextEdit {\n readonly start: number;\n readonly end: number;\n readonly text: string;\n}\n\n/**\n * The text with the edits applied. Edits that overlap cannot both apply: that is a bug of the\n * migration that made them, and applying them would corrupt the file.\n */\nexport function applyTextEdits(text: string, edits: readonly TextEdit[]): string {\n const sorted = [...edits].sort((left, right) => left.start - right.start);\n let edited = \"\";\n let copiedUpTo = 0;\n for (const edit of sorted) {\n if (edit.start < copiedUpTo) {\n throw new Error(\n `Edits overlap at offset ${edit.start}; the file was not changed (a migration bug).`,\n );\n }\n edited += `${text.slice(copiedUpTo, edit.start)}${edit.text}`;\n copiedUpTo = edit.end;\n }\n return edited + text.slice(copiedUpTo);\n}\n","import ts from \"@typescript/typescript6\";\n\n/**\n * The module-level names of a file that the rewriter follows: the TypeScript module and its named\n * imports, the generator and its helpers, module-level `const`s and functions. Identifiers are\n * resolved by scope with the TypeScript checker, so a local `const DATE` inside a callback is not\n * the module's `DATE`, however it is spelled.\n */\n\nexport type Binding =\n /** `ts` in `import ts from \"typescript\"` or `import * as ts from \"typescript\"`. */\n | { readonly kind: \"typescript-module\" }\n /** `factory` in `import { factory } from \"typescript\"`, by its imported name. */\n | { readonly kind: \"typescript-import\"; readonly name: string }\n /** A named import from the generator (`tsUnion`, `NULL`), by its imported name. */\n | { readonly kind: \"helper-import\"; readonly name: string }\n /** The generator function: the default import of the generator module. */\n | { readonly kind: \"generator-function\" }\n /** A namespace import of the generator module; `ns.default` is the generator function. */\n | { readonly kind: \"generator-module\" }\n /** A module-level `const` with an initializer. */\n | { readonly kind: \"constant\"; readonly initializer: ts.Expression }\n /** A module-level function declaration. */\n | { readonly kind: \"function\"; readonly declaration: ts.FunctionDeclaration }\n /** A module-level type: an alias, an interface or a JSDoc `@typedef`. */\n | { readonly kind: \"local-type\"; readonly declaration: LocalTypeDeclaration };\n\nexport type LocalTypeDeclaration =\n | ts.TypeAliasDeclaration\n | ts.InterfaceDeclaration\n | ts.JSDocTypedefTag;\n\nexport interface FileBindings {\n /** Every binding of the file, by its declaration node. */\n readonly declarations: ReadonlyMap<ts.Node, Binding>;\n /** The declaration node an identifier refers to, if it is a binding of this file. */\n declarationOf(identifier: ts.Identifier): ts.Node | undefined;\n bindingOf(identifier: ts.Identifier): Binding | undefined;\n /** The identifiers that refer to a declaration, without the name it declares. */\n usesOf(declaration: ts.Node): readonly ts.Identifier[];\n /** True when the file imports the generator, so it may call it. */\n readonly hasGenerator: boolean;\n}\n\n/** True for a declaration with an `export` modifier (`export const`, `export function`). */\nexport const hasExportModifier = (declaration: ts.Node): boolean =>\n (ts.getCombinedModifierFlags(declaration as ts.Declaration) & ts.ModifierFlags.Export) !== 0;\n\n/** The generator after the specifier rename, and before it, for files the rename skipped. */\nexport const GENERATOR_MODULES: ReadonlySet<string> = new Set([\n \"openapi-typesafe\",\n \"openapi-typescript\",\n]);\nconst TYPESCRIPT_MODULES: ReadonlySet<string> = new Set([\"typescript\", \"@typescript/typescript6\"]);\nconst DEFAULT_EXPORT = \"default\";\n\ntype BindingMap = Map<ts.Node, Binding>;\n\nfunction addNamedImports(clause: ts.ImportClause, isGenerator: boolean, into: BindingMap): void {\n const bindings = clause.namedBindings;\n if (bindings === undefined || !ts.isNamedImports(bindings)) {\n return;\n }\n for (const element of bindings.elements) {\n const name = (element.propertyName ?? element.name).text;\n const binding: Binding = isGenerator\n ? name === DEFAULT_EXPORT\n ? { kind: \"generator-function\" }\n : { kind: \"helper-import\", name }\n : { kind: \"typescript-import\", name };\n into.set(element, binding);\n }\n}\n\n/** An `import` statement, or a JSDoc `@import` tag of a JavaScript file, which has its parts. */\ntype ImportForm = Pick<ts.ImportDeclaration, \"importClause\" | \"moduleSpecifier\">;\n\nfunction addImport(statement: ImportForm, into: BindingMap): void {\n const clause = statement.importClause;\n const specifier = ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : \"\";\n const isGenerator = GENERATOR_MODULES.has(specifier);\n if (clause === undefined || (!isGenerator && !TYPESCRIPT_MODULES.has(specifier))) {\n return;\n }\n if (clause.name !== undefined) {\n into.set(clause, isGenerator ? { kind: \"generator-function\" } : { kind: \"typescript-module\" });\n }\n const namespace = clause.namedBindings;\n if (namespace !== undefined && ts.isNamespaceImport(namespace)) {\n const kind = isGenerator ? \"generator-module\" : \"typescript-module\";\n into.set(namespace, { kind });\n }\n addNamedImports(clause, isGenerator, into);\n}\n\nfunction addConstants(statement: ts.VariableStatement, into: BindingMap): void {\n if ((statement.declarationList.flags & ts.NodeFlags.Const) === 0) {\n return;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.initializer !== undefined) {\n into.set(declaration, { kind: \"constant\", initializer: declaration.initializer });\n }\n }\n}\n\nfunction addStatement(statement: ts.Statement, into: BindingMap): void {\n if (ts.isImportDeclaration(statement)) {\n addImport(statement, into);\n } else if (ts.isVariableStatement(statement)) {\n addConstants(statement, into);\n } else if (ts.isFunctionDeclaration(statement) && statement.name !== undefined) {\n into.set(statement, { kind: \"function\", declaration: statement });\n } else if (ts.isTypeAliasDeclaration(statement) || ts.isInterfaceDeclaration(statement)) {\n into.set(statement, { kind: \"local-type\", declaration: statement });\n }\n}\n\nfunction collectBindings(file: ts.SourceFile): BindingMap {\n const bindings: BindingMap = new Map();\n for (const statement of file.statements) {\n addStatement(statement, bindings);\n }\n return bindings;\n}\n\n/** A compiler host that knows only the parsed file, so the file system is never read. */\nexport function singleFileHost(file: ts.SourceFile): ts.CompilerHost {\n return {\n getSourceFile: (name) => (name === file.fileName ? file : undefined),\n getDefaultLibFileName: () => \"lib.d.ts\",\n writeFile: () => undefined,\n getCurrentDirectory: () => \"\",\n getCanonicalFileName: (name) => name,\n useCaseSensitiveFileNames: () => true,\n getNewLine: () => \"\\n\",\n fileExists: (name) => name === file.fileName,\n readFile: () => undefined,\n };\n}\n\n/**\n * A checker for this one file: no default library and no module resolution, which binding names\n * by scope does not need.\n */\nfunction createChecker(file: ts.SourceFile): ts.TypeChecker {\n const options: ts.CompilerOptions = { noLib: true, noResolve: true, allowJs: true, types: [] };\n const host = singleFileHost(file);\n return ts.createProgram({ rootNames: [file.fileName], options, host }).getTypeChecker();\n}\n\n/**\n * The symbol of an identifier; `{ DATE }` refers to the variable, not to the new property, and\n * `export { DATE }` to the variable, not to the export alias, so an export counts as a use.\n */\nfunction symbolOf(checker: ts.TypeChecker, identifier: ts.Identifier): ts.Symbol | undefined {\n const parent = identifier.parent;\n if (ts.isShorthandPropertyAssignment(parent) && parent.name === identifier) {\n return checker.getShorthandAssignmentValueSymbol(parent);\n }\n if (ts.isExportSpecifier(parent)) {\n return checker.getExportSpecifierLocalTargetSymbol(parent);\n }\n return checker.getSymbolAtLocation(identifier);\n}\n\n/** True for the name that a declaration of this file declares, and for names in imports. */\nfunction isDeclaredName(identifier: ts.Identifier, declaration: ts.Node): boolean {\n const declaredName = (declaration as ts.NamedDeclaration).name;\n return (\n declaredName === identifier || ts.findAncestor(identifier, ts.isImportDeclaration) !== undefined\n );\n}\n\n/**\n * The binding of a JSDoc declaration of a JavaScript file: a `@typedef`, or a name of an\n * `@import`. The checker finds them in any JSDoc comment, so they are bound when a name refers to\n * one; TypeScript's API lists only the last JSDoc comment of a node.\n */\nfunction addJSDocBinding(declaration: ts.Node, into: BindingMap): void {\n if (ts.isJSDocTypedefTag(declaration)) {\n into.set(declaration, { kind: \"local-type\", declaration });\n return;\n }\n const importTag = ts.findAncestor(declaration, ts.isJSDocImportTag);\n if (importTag !== undefined) {\n addImport(importTag, into);\n }\n}\n\n/**\n * The uses of each binding, JSDoc included: `@param {ts.TypeNode}` types a JavaScript file, and\n * `{@link ts.factory}` refers to the import. `getChildren` lists the JSDoc blocks of a node,\n * which `forEachChild` skips.\n */\nfunction indexUses(file: ts.SourceFile, bindings: FileBindings): Map<ts.Node, ts.Identifier[]> {\n const uses = new Map<ts.Node, ts.Identifier[]>();\n const visit = (node: ts.Node): void => {\n const declaration = ts.isIdentifier(node) ? bindings.declarationOf(node) : undefined;\n if (declaration !== undefined && !isDeclaredName(node as ts.Identifier, declaration)) {\n uses.set(declaration, [...(uses.get(declaration) ?? []), node as ts.Identifier]);\n }\n for (const child of node.getChildren(file)) {\n visit(child);\n }\n };\n visit(file);\n return uses;\n}\n\nclass CheckedFileBindings implements FileBindings {\n readonly hasGenerator: boolean;\n readonly #file: ts.SourceFile;\n readonly #bindings: BindingMap;\n readonly declarations: ReadonlyMap<ts.Node, Binding>;\n #checker: ts.TypeChecker | undefined;\n #uses: Map<ts.Node, ts.Identifier[]> | undefined;\n\n constructor(file: ts.SourceFile) {\n this.#file = file;\n this.#bindings = collectBindings(file);\n this.declarations = this.#bindings;\n this.hasGenerator = [...this.#bindings.values()].some(\n (binding) => binding.kind === \"generator-function\" || binding.kind === \"generator-module\",\n );\n }\n\n declarationOf(identifier: ts.Identifier): ts.Node | undefined {\n // The checker is built on first use: most files never call the generator.\n this.#checker ??= createChecker(this.#file);\n const declaration = symbolOf(this.#checker, identifier)?.declarations?.[0];\n if (declaration !== undefined && !this.#bindings.has(declaration)) {\n addJSDocBinding(declaration, this.#bindings);\n }\n return declaration !== undefined && this.#bindings.has(declaration) ? declaration : undefined;\n }\n\n bindingOf(identifier: ts.Identifier): Binding | undefined {\n const declaration = this.declarationOf(identifier);\n return declaration === undefined ? undefined : this.#bindings.get(declaration);\n }\n\n usesOf(declaration: ts.Node): readonly ts.Identifier[] {\n this.#uses ??= indexUses(this.#file, this);\n return this.#uses.get(declaration) ?? [];\n }\n}\n\n/** The bindings of a parsed file (parsed with parent pointers). */\nexport function createFileBindings(file: ts.SourceFile): FileBindings {\n return new CheckedFileBindings(file);\n}\n","import ts from \"@typescript/typescript6\";\nimport { type FileBindings, hasExportModifier } from \"./file-bindings.js\";\n\n/**\n * The `openapiTS(source, options)` calls of a file, and where their options object is: written in\n * the call, in a module-level `const` (`openapiTS(source, options)`), or somewhere the rewriter\n * cannot see. The generator is the default import of the generator module, by any local name,\n * or `ns.default` of a namespace import (`import * as ns from \"openapi-typescript\"`).\n */\n\nexport type GeneratorOptions =\n /**\n * An object literal that only this call uses: it may be rewritten. `annotations` are the types\n * it is declared with: the type of its `const`, and `satisfies` or `as` around it, also as a\n * JSDoc `@type` or `@satisfies` of a JavaScript file. `isContextuallyTyped` is false for an\n * object in a `const` with none of these: its `true` values widen to `boolean`.\n */\n | {\n readonly kind: \"own\";\n readonly options: ts.ObjectLiteralExpression;\n readonly annotations: readonly ts.TypeNode[];\n readonly isContextuallyTyped: boolean;\n }\n /** An object literal in a `const` that other code uses too: it is only reported. */\n | { readonly kind: \"shared\"; readonly options: ts.ObjectLiteralExpression }\n /** An expression that is not an object literal of this file. */\n | { readonly kind: \"unknown\"; readonly expression: ts.Expression };\n\nexport interface GeneratorCall {\n readonly call: ts.CallExpression;\n /** Undefined when the call passes no options. */\n readonly options: GeneratorOptions | undefined;\n}\n\nconst DEFAULT_EXPORT = \"default\";\n\nfunction isGenerator(callee: ts.Expression, bindings: FileBindings): boolean {\n if (ts.isIdentifier(callee)) {\n return bindings.bindingOf(callee)?.kind === \"generator-function\";\n }\n return (\n ts.isPropertyAccessExpression(callee) &&\n callee.name.text === DEFAULT_EXPORT &&\n ts.isIdentifier(callee.expression) &&\n bindings.bindingOf(callee.expression)?.kind === \"generator-module\"\n );\n}\n\n/**\n * The types of the JSDoc `@type` and `@satisfies` tags of a node of a JavaScript file, which\n * TypeScript checks it with as with an annotation: `@type {T}` on `(value)` is `value as T`. In a\n * TypeScript file such a tag checks nothing.\n */\nfunction jsDocTypes(node: ts.Node): ts.TypeNode[] {\n if ((node.flags & ts.NodeFlags.JavaScriptFile) === 0) {\n return [];\n }\n return ts\n .getJSDocTags(node)\n .filter((tag) => ts.isJSDocTypeTag(tag) || ts.isJSDocSatisfiesTag(tag))\n .map((tag) => (tag as ts.JSDocTypeTag | ts.JSDocSatisfiesTag).typeExpression.type);\n}\n\n/**\n * The expression without parentheses, `as` and `satisfies`, which do not change the value, and\n * the types of the `as` and `satisfies` around it.\n */\nfunction unwrapped(\n expression: ts.Expression,\n types: ts.TypeNode[] = [],\n): { value: ts.Expression; types: ts.TypeNode[] } {\n if (ts.isParenthesizedExpression(expression)) {\n return unwrapped(expression.expression, [...types, ...jsDocTypes(expression)]);\n }\n if (ts.isAsExpression(expression) || ts.isSatisfiesExpression(expression)) {\n return unwrapped(expression.expression, [...types, expression.type]);\n }\n return { value: expression, types };\n}\n\n/** The options object a `const` holds, owned by this call when the call is its only use. */\nfunction constantOptions(\n name: ts.Identifier,\n bindings: FileBindings,\n outerTypes: readonly ts.TypeNode[],\n): GeneratorOptions {\n const binding = bindings.bindingOf(name);\n const declaration = bindings.declarationOf(name) as ts.Node;\n const found = binding?.kind === \"constant\" ? unwrapped(binding.initializer) : undefined;\n if (found === undefined || !ts.isObjectLiteralExpression(found.value)) {\n return { kind: \"unknown\", expression: name };\n }\n const isOwn = bindings.usesOf(declaration).length === 1 && !hasExportModifier(declaration);\n if (!isOwn) {\n return { kind: \"shared\", options: found.value };\n }\n const declared = (declaration as ts.VariableDeclaration).type;\n // A type around the name in the call (`options as T`) does not type the object.\n const ownTypes = [\n ...found.types,\n ...(declared === undefined ? [] : [declared]),\n ...jsDocTypes(declaration),\n ];\n const annotations = [...outerTypes, ...ownTypes];\n return {\n kind: \"own\",\n options: found.value,\n annotations,\n isContextuallyTyped: ownTypes.length > 0,\n };\n}\n\nfunction optionsOf(argument: ts.Expression, bindings: FileBindings): GeneratorOptions {\n const { value, types } = unwrapped(argument);\n if (ts.isObjectLiteralExpression(value)) {\n return { kind: \"own\", options: value, annotations: types, isContextuallyTyped: true };\n }\n return ts.isIdentifier(value)\n ? constantOptions(value, bindings, types)\n : { kind: \"unknown\", expression: argument };\n}\n\n/** Every generator call of the file, in source order. */\nexport function generatorCalls(file: ts.SourceFile, bindings: FileBindings): GeneratorCall[] {\n const calls: GeneratorCall[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node) && isGenerator(node.expression, bindings)) {\n const argument = node.arguments[1];\n const options = argument === undefined ? undefined : optionsOf(argument, bindings);\n calls.push({ call: node, options });\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n return calls;\n}\n","import ts from \"@typescript/typescript6\";\nimport type { TextEdit } from \"../../domain/text-edits.js\";\nimport { type FileBindings, GENERATOR_MODULES } from \"./file-bindings.js\";\n\n/**\n * The options type of a rewritten `transform`. `OpenAPITSOptions` types the TypeScript-node\n * callbacks, so options declared with it (`const options: OpenAPITSOptions`, `satisfies\n * OpenAPITSOptions`) stopped compiling once `irCallbacks: true` and type text were in them. The\n * annotations of rewritten options name `OpenAPITSIrOptions`, the type of the IR callbacks.\n */\n\nconst TS_NODE_OPTIONS = \"OpenAPITSOptions\";\nconst IR_OPTIONS = \"OpenAPITSIrOptions\";\nconst TYPE_MODIFIER = \"type \";\n\n/** `import(\"openapi-typescript\").OpenAPITSOptions`: its `OpenAPITSOptions`, or undefined. */\nfunction importTypeName(node: ts.ImportTypeNode): ts.Identifier | undefined {\n const { argument, qualifier } = node;\n const isGeneratorModule =\n ts.isLiteralTypeNode(argument) &&\n ts.isStringLiteral(argument.literal) &&\n GENERATOR_MODULES.has(argument.literal.text);\n const isOptions =\n !node.isTypeOf &&\n qualifier !== undefined &&\n ts.isIdentifier(qualifier) &&\n qualifier.text === TS_NODE_OPTIONS;\n return isGeneratorModule && isOptions ? qualifier : undefined;\n}\n\n/** The name a type reference or an `extends` names (`A`, `ns.A`), or undefined. */\nfunction referencedName(node: ts.Node): ts.Node | undefined {\n if (ts.isTypeReferenceNode(node)) {\n return node.typeName;\n }\n return ts.isExpressionWithTypeArguments(node) ? node.expression : undefined;\n}\n\n/** The two parts of `ns.A`: a qualified type name, or the expression of an `extends`. */\nfunction qualifiedParts(name: ts.Node): { left: ts.Node; right: ts.Node } | undefined {\n if (ts.isQualifiedName(name)) {\n return { left: name.left, right: name.right };\n }\n return ts.isPropertyAccessExpression(name)\n ? { left: name.expression, right: name.name }\n : undefined;\n}\n\n/**\n * The identifier of `OpenAPITSOptions` that a type reference or an `extends` names, by any local\n * name of its import, as `ns.OpenAPITSOptions` of a namespace import or as an import type, or\n * undefined.\n */\nfunction optionsTypeName(node: ts.Node, bindings: FileBindings): ts.Identifier | undefined {\n if (ts.isImportTypeNode(node)) {\n return importTypeName(node);\n }\n const name = referencedName(node);\n if (name !== undefined && ts.isIdentifier(name)) {\n const binding = bindings.bindingOf(name);\n return binding?.kind === \"helper-import\" && binding.name === TS_NODE_OPTIONS ? name : undefined;\n }\n const parts = name === undefined ? undefined : qualifiedParts(name);\n if (parts === undefined || !ts.isIdentifier(parts.left) || !ts.isIdentifier(parts.right)) {\n return undefined;\n }\n const isGeneratorModule = bindings.bindingOf(parts.left)?.kind === \"generator-module\";\n return isGeneratorModule && parts.right.text === TS_NODE_OPTIONS ? parts.right : undefined;\n}\n\n/**\n * The declaration of a type of this file that a type reference or an `extends` names: an alias,\n * an interface or a JSDoc `@typedef`, or undefined.\n */\nfunction localTypeOf(node: ts.Node, bindings: FileBindings): ts.Node | undefined {\n const name = referencedName(node);\n const binding =\n name !== undefined && ts.isIdentifier(name) ? bindings.bindingOf(name) : undefined;\n return binding?.kind === \"local-type\" ? binding.declaration : undefined;\n}\n\n/**\n * Whether a type names `OpenAPITSOptions` anywhere in it (`Partial<OpenAPITSOptions>`), also\n * through a type of this file (`type Opts = OpenAPITSOptions`), which the rewrite does not change.\n */\nfunction mentionsOptionsType(\n node: ts.Node,\n bindings: FileBindings,\n seen: Set<ts.Node> = new Set(),\n): boolean {\n const local = localTypeOf(node, bindings);\n const isNewLocal = local !== undefined && !seen.has(local);\n if (isNewLocal) {\n seen.add(local);\n }\n const mentions = (child: ts.Node) => mentionsOptionsType(child, bindings, seen) || undefined;\n return (\n (isNewLocal && mentionsOptionsType(local, bindings, seen)) ||\n optionsTypeName(node, bindings) !== undefined ||\n (ts.forEachChild(node, mentions) ?? false)\n );\n}\n\n/**\n * The `OpenAPITSOptions` names to retarget in the annotations of rewritten options: an annotation\n * that is the type (`OpenAPITSOptions`) or a member of it (`OpenAPITSOptions[\"transform\"]`).\n * Undefined when one names it otherwise (`Partial<OpenAPITSOptions>`): the tool cannot tell the IR\n * type of that, so the `transform` is not rewritten.\n */\nexport function optionsTypeReferences(\n annotations: readonly ts.TypeNode[],\n bindings: FileBindings,\n): ts.Identifier[] | undefined {\n const references: ts.Identifier[] = [];\n for (const annotation of annotations) {\n const target = ts.isIndexedAccessTypeNode(annotation) ? annotation.objectType : annotation;\n const reference = optionsTypeName(target, bindings);\n if (reference !== undefined) {\n references.push(reference);\n } else if (mentionsOptionsType(annotation, bindings)) {\n return undefined;\n }\n }\n return references;\n}\n\nconst renamed = (identifier: ts.Identifier, text: string): TextEdit => ({\n start: identifier.getStart(),\n end: identifier.getEnd(),\n text,\n});\n\n/** The local name of an import of `OpenAPITSIrOptions` that the file has, or undefined. */\nfunction importedIrOptions(bindings: FileBindings): string | undefined {\n for (const [declaration, binding] of bindings.declarations) {\n if (binding.kind === \"helper-import\" && binding.name === IR_OPTIONS) {\n return (declaration as ts.ImportSpecifier).name.text;\n }\n }\n return undefined;\n}\n\n/**\n * The edits for the references of one import of `OpenAPITSOptions`. When the rewritten options\n * are its only uses, the import names `OpenAPITSIrOptions` instead; else it is imported too. A\n * JavaScript file imports it with a JSDoc `@import` and names it in JSDoc comments, whose uses\n * TypeScript's API does not all list, so there it is always imported too.\n */\nfunction importEdits(\n specifier: ts.ImportSpecifier,\n references: readonly ts.Identifier[],\n bindings: FileBindings,\n): TextEdit[] {\n const isJavaScript = (specifier.flags & ts.NodeFlags.JavaScriptFile) !== 0;\n const isOnlyUse =\n !isJavaScript && bindings.usesOf(specifier).every((use) => references.includes(use));\n if (isOnlyUse && specifier.propertyName !== undefined) {\n return [renamed(specifier.propertyName as ts.Identifier, IR_OPTIONS)];\n }\n const uses = references.map((reference) => renamed(reference, IR_OPTIONS));\n if (isOnlyUse) {\n return [renamed(specifier.name, IR_OPTIONS), ...uses];\n }\n const isTypeImport = specifier.parent.parent.isTypeOnly;\n const added = `, ${isTypeImport ? \"\" : TYPE_MODIFIER}${IR_OPTIONS}`;\n return [{ start: specifier.getEnd(), end: specifier.getEnd(), text: added }, ...uses];\n}\n\n/** The edits that make the references name `OpenAPITSIrOptions`, with its import. */\nexport function optionsTypeEdits(\n references: readonly ts.Identifier[],\n bindings: FileBindings,\n): TextEdit[] {\n const edits: TextEdit[] = [];\n const byImport = new Map<ts.ImportSpecifier, ts.Identifier[]>();\n const existing = importedIrOptions(bindings);\n for (const reference of new Set(references)) {\n const specifier = bindings.declarationOf(reference);\n if (specifier === undefined || !ts.isImportSpecifier(specifier)) {\n edits.push(renamed(reference, IR_OPTIONS));\n } else if (existing !== undefined) {\n edits.push(renamed(reference, existing));\n } else {\n byImport.set(specifier, [...(byImport.get(specifier) ?? []), reference]);\n }\n }\n for (const [specifier, found] of byImport) {\n edits.push(...importEdits(specifier, found, bindings));\n }\n return edits;\n}\n","import ts from \"@typescript/typescript6\";\n\n/** A part of a file that is a script, and where it starts in the file. */\nexport interface ScriptRegion {\n readonly offset: number;\n readonly text: string;\n readonly kind: ts.ScriptKind;\n}\n\nconst SCRIPT_KINDS: ReadonlyMap<string, ts.ScriptKind> = new Map([\n [\".ts\", ts.ScriptKind.TS],\n [\".mts\", ts.ScriptKind.TS],\n [\".cts\", ts.ScriptKind.TS],\n [\".tsx\", ts.ScriptKind.TSX],\n [\".js\", ts.ScriptKind.JS],\n [\".mjs\", ts.ScriptKind.JS],\n [\".cjs\", ts.ScriptKind.JS],\n [\".jsx\", ts.ScriptKind.JSX],\n]);\n\nconst ASTRO_EXTENSION = \".astro\";\nconst MDX_EXTENSION = \".mdx\";\n/** An MDX ESM block starts with `import` or `export` at the start of a line. */\nconst MDX_ESM_START_RE = /^(?:import|export)\\b/;\n/** A Markdown code fence: three or more backticks or tildes, indented by at most 3 spaces. */\nconst CODE_FENCE_RE = /^ {0,3}(`{3,}|~{3,})/;\nconst MDX_KIND = ts.ScriptKind.JSX;\nconst SCRIPT_OPEN_TAG = \"<script\";\nconst TAG_END = \">\";\n/** Astro's component script: the fenced block at the top of the file. */\nconst ASTRO_FRONTMATTER_RE = /^(\\s*---\\r?\\n)([\\s\\S]*?)\\r?\\n---/;\nconst LANG_RE = /\\blang\\s*=\\s*[\"']?([a-z]+)/i;\nconst LANG_KINDS: ReadonlyMap<string, ts.ScriptKind> = new Map([\n [\"ts\", ts.ScriptKind.TS],\n [\"typescript\", ts.ScriptKind.TS],\n [\"tsx\", ts.ScriptKind.TSX],\n [\"jsx\", ts.ScriptKind.JSX],\n]);\n\nfunction extensionOf(path: string): string {\n return path.slice(path.lastIndexOf(\".\"));\n}\n\n/** The script kind of a plain script file, or undefined for anything else. */\nexport function plainScriptKind(path: string): ts.ScriptKind | undefined {\n return SCRIPT_KINDS.get(extensionOf(path));\n}\n\n/** Astro scripts are TypeScript; Vue and Svelte scripts are JavaScript unless `lang` says not. */\nfunction blockKind(attributes: string, isAstro: boolean): ts.ScriptKind {\n const lang = LANG_RE.exec(attributes)?.[1]?.toLowerCase();\n const fallback = isAstro ? ts.ScriptKind.TS : ts.ScriptKind.JS;\n return (lang === undefined ? undefined : LANG_KINDS.get(lang)) ?? fallback;\n}\n\n/** Astro's frontmatter, and where the markup after it starts; the markup is the whole text else. */\nfunction astroFrontmatter(text: string): { region?: ScriptRegion; markupStart: number } {\n const frontmatter = ASTRO_FRONTMATTER_RE.exec(text);\n if (frontmatter === null) {\n return { markupStart: 0 };\n }\n const [whole, fence, content] = frontmatter as unknown as [string, string, string];\n const region = { offset: fence.length, text: content, kind: ts.ScriptKind.TS };\n return { region, markupStart: whole.length };\n}\n\n/** A `<script>` block of component markup: its attributes, and its content and where it starts. */\ninterface ScriptBlock {\n readonly attributes: string;\n readonly contentStart: number;\n readonly content: string;\n}\n\n/**\n * The `<script>` blocks of a Vue, Svelte or Astro component, each up to the first closing tag\n * after it. Searches from left to right that never go back, not one regular expression with a\n * lazy body: that one scanned the rest of the file again from every unclosed tag, which took\n * seconds on a crafted file. When a tag or a block is not closed, no later one is either.\n */\nfunction scriptBlocks(markup: string): ScriptBlock[] {\n const openTag = /<script\\b/gi;\n const closeTag = /<\\/script\\s*>/gi;\n const blocks: ScriptBlock[] = [];\n for (let opening = openTag.exec(markup); opening !== null; opening = openTag.exec(markup)) {\n const tagEnd = markup.indexOf(TAG_END, opening.index);\n closeTag.lastIndex = tagEnd + 1;\n const closing = tagEnd === -1 ? null : closeTag.exec(markup);\n if (closing === null) {\n break;\n }\n const attributes = markup.slice(opening.index + SCRIPT_OPEN_TAG.length, tagEnd);\n blocks.push({\n attributes,\n contentStart: tagEnd + 1,\n content: markup.slice(tagEnd + 1, closing.index),\n });\n openTag.lastIndex = closeTag.lastIndex;\n }\n return blocks;\n}\n\nfunction componentRegions(text: string, isAstro: boolean): ScriptRegion[] {\n const { region, markupStart } = isAstro ? astroFrontmatter(text) : { markupStart: 0 };\n const regions: ScriptRegion[] = region === undefined ? [] : [region];\n // Script blocks are read in the markup only: a \"<script>\" string in the frontmatter is code, and\n // a block found there would overlap the frontmatter, so its strings would be edited twice.\n for (const block of scriptBlocks(text.slice(markupStart))) {\n const offset = markupStart + block.contentStart;\n regions.push({ offset, text: block.content, kind: blockKind(block.attributes, isAstro) });\n }\n return regions;\n}\n\n/** Whether a line closes the code fence `fence` opened: the same mark, at least as long. */\nfunction closesFence(line: string, fence: string): boolean {\n const mark = CODE_FENCE_RE.exec(line)?.[1];\n return mark !== undefined && mark[0] === fence[0] && mark.length >= fence.length;\n}\n\n/**\n * The ESM blocks of an MDX file: from a line that starts with `import` or `export`, outside a\n * code fence, up to the next blank line (MDX reads them as JavaScript, JSX allowed).\n */\nfunction mdxRegions(text: string): ScriptRegion[] {\n const regions: ScriptRegion[] = [];\n let fence: string | undefined;\n let block: { start: number; end: number } | undefined;\n let offset = 0;\n for (const line of text.split(\"\\n\")) {\n const end = offset + line.length;\n if (block !== undefined && line.trim() === \"\") {\n regions.push({\n offset: block.start,\n text: text.slice(block.start, block.end),\n kind: MDX_KIND,\n });\n block = undefined;\n } else if (block !== undefined) {\n block.end = end;\n } else if (fence !== undefined) {\n fence = closesFence(line, fence) ? undefined : fence;\n } else if (MDX_ESM_START_RE.test(line)) {\n block = { start: offset, end };\n } else {\n fence = CODE_FENCE_RE.exec(line)?.[1];\n }\n offset = end + 1;\n }\n if (block !== undefined) {\n regions.push({ offset: block.start, text: text.slice(block.start, block.end), kind: MDX_KIND });\n }\n return regions;\n}\n\n/**\n * The scripts of a file: the whole file for a plain script, the `<script>` blocks (and Astro's\n * frontmatter) for a single-file component, the ESM blocks of MDX. Markup is not a script and is\n * left out.\n */\nexport function scriptRegions(text: string, path: string): ScriptRegion[] {\n const kind = plainScriptKind(path);\n if (kind !== undefined) {\n return [{ offset: 0, text, kind }];\n }\n const extension = extensionOf(path);\n if (extension === MDX_EXTENSION) {\n return mdxRegions(text);\n }\n return componentRegions(text, extension === ASTRO_EXTENSION);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { FactoryNames } from \"./factory-type-text.js\";\nimport { hasExportModifier } from \"./file-bindings.js\";\n\n/**\n * The function a `transform` option holds, and what else knows that function: other uses of a\n * module-level function, and the type its `const` is declared with.\n */\n\n/** The function a `const` or a function declaration of this file holds. */\nfunction namedFunction(\n name: ts.Identifier,\n names: FactoryNames,\n): ts.FunctionLikeDeclaration | undefined {\n const binding = names.bindings.bindingOf(name);\n if (binding?.kind === \"function\") {\n return binding.declaration;\n }\n const value = binding?.kind === \"constant\" ? binding.initializer : undefined;\n return value !== undefined && (ts.isArrowFunction(value) || ts.isFunctionExpression(value))\n ? value\n : undefined;\n}\n\n/** The name a `transform` property gives its value: `transform: name`, or `{ transform }`. */\nfunction namedValue(property: ts.ObjectLiteralElementLike): ts.Identifier | undefined {\n if (ts.isShorthandPropertyAssignment(property)) {\n return property.name;\n }\n return ts.isPropertyAssignment(property) && ts.isIdentifier(property.initializer)\n ? property.initializer\n : undefined;\n}\n\n/**\n * The function a `transform` property holds: a method, an arrow function or a function, inline or\n * by the name of a module-level function.\n */\nexport function callbackFunction(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n): ts.FunctionLikeDeclaration | undefined {\n if (ts.isMethodDeclaration(property)) {\n return property;\n }\n const name = namedValue(property);\n if (name !== undefined) {\n return namedFunction(name, names);\n }\n const value = ts.isPropertyAssignment(property) ? property.initializer : undefined;\n return value !== undefined && (ts.isArrowFunction(value) || ts.isFunctionExpression(value))\n ? value\n : undefined;\n}\n\n/** The type a `const` that `transform` names is declared with (`OpenAPITSOptions[\"transform\"]`). */\nexport function callbackAnnotations(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n): ts.TypeNode[] {\n const name = namedValue(property);\n const declaration = name === undefined ? undefined : names.bindings.declarationOf(name);\n const type =\n declaration !== undefined && ts.isVariableDeclaration(declaration)\n ? declaration.type\n : undefined;\n return type === undefined ? [] : [type];\n}\n\n/**\n * A function named by `transform` is rewritten only when this is its only use and it is not\n * exported: other callers, in this file or in the modules that import it, would get type text\n * where they expect nodes.\n */\nexport function isSharedFunction(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n): boolean {\n const name = namedValue(property);\n const declaration = name === undefined ? undefined : names.bindings.declarationOf(name);\n return (\n declaration !== undefined &&\n (names.bindings.usesOf(declaration).length > 1 || hasExportModifier(declaration))\n );\n}\n","import ts from \"@typescript/typescript6\";\n\nimport type { FileBindings } from \"./file-bindings.js\";\n\n/**\n * TypeScript type text for the `ts.factory` expressions of the classic `transform` recipe\n * (`createTypeReferenceNode`, keywords, `null` and literal types, unions, intersections, arrays),\n * and for the openapi-typesafe helper constants and `tsUnion` / `tsIntersection`. Anything else\n * returns undefined, so the callback is left as it is. A name such as `DATE` is followed to the\n * module-level `const` it refers to by scope, never by spelling.\n */\n\n/** How to read names: the file's bindings, and the constants being followed (to stop cycles). */\nexport interface FactoryNames {\n readonly bindings: FileBindings;\n readonly following: ReadonlySet<ts.Node>;\n}\n\nconst KEYWORDS: ReadonlyMap<string, string> = new Map([\n [\"AnyKeyword\", \"any\"],\n [\"BigIntKeyword\", \"bigint\"],\n [\"BooleanKeyword\", \"boolean\"],\n [\"NeverKeyword\", \"never\"],\n [\"NumberKeyword\", \"number\"],\n [\"ObjectKeyword\", \"object\"],\n [\"StringKeyword\", \"string\"],\n [\"SymbolKeyword\", \"symbol\"],\n [\"UndefinedKeyword\", \"undefined\"],\n [\"UnknownKeyword\", \"unknown\"],\n [\"VoidKeyword\", \"void\"],\n]);\n\nconst HELPER_CONSTANTS: ReadonlyMap<string, string> = new Map([\n [\"BOOLEAN\", \"boolean\"],\n [\"FALSE\", \"false\"],\n [\"NEVER\", \"never\"],\n [\"NULL\", \"null\"],\n [\"NUMBER\", \"number\"],\n [\"STRING\", \"string\"],\n [\"TRUE\", \"true\"],\n [\"UNDEFINED\", \"undefined\"],\n [\"UNKNOWN\", \"unknown\"],\n]);\n\n/** A type name the type text can hold as written: `Date`, `Foo.Bar`. */\nconst TYPE_NAME_RE = /^[A-Za-z_$][\\w$]*(\\.[A-Za-z_$][\\w$]*)*$/;\n\n/** A type with a `|` or `&` at the top needs parentheses inside `[]`, and a union inside `&`. */\ninterface TypeText {\n readonly text: string;\n readonly operator: \"|\" | \"&\" | null;\n}\n\nconst plain = (text: string): TypeText => ({ text, operator: null });\n\n/**\n * True when `target` is the TypeScript export `member`: `factory` imported by name, or\n * `ts.factory` on the TypeScript module.\n */\nfunction isTypescriptMember(target: ts.Expression, member: string, names: FactoryNames): boolean {\n if (ts.isIdentifier(target)) {\n const binding = names.bindings.bindingOf(target);\n return binding?.kind === \"typescript-import\" && binding.name === member;\n }\n return (\n ts.isPropertyAccessExpression(target) &&\n target.name.text === member &&\n ts.isIdentifier(target.expression) &&\n names.bindings.bindingOf(target.expression)?.kind === \"typescript-module\"\n );\n}\n\n/** `ts.factory.createX` or `factory.createX`: the factory method name, if that is the callee. */\nfunction factoryMethod(callee: ts.Expression, names: FactoryNames): string | undefined {\n return ts.isPropertyAccessExpression(callee) &&\n isTypescriptMember(callee.expression, \"factory\", names)\n ? callee.name.text\n : undefined;\n}\n\n/** `ts.SyntaxKind.StringKeyword` or `SyntaxKind.StringKeyword`: the member name. */\nfunction syntaxKindMember(expression: ts.Expression, names: FactoryNames): string | undefined {\n return ts.isPropertyAccessExpression(expression) &&\n isTypescriptMember(expression.expression, \"SyntaxKind\", names)\n ? expression.name.text\n : undefined;\n}\n\nfunction typeName(argument: ts.Expression | undefined, names: FactoryNames): string | undefined {\n if (argument === undefined) {\n return undefined;\n }\n if (ts.isStringLiteralLike(argument)) {\n return TYPE_NAME_RE.test(argument.text) ? argument.text : undefined;\n }\n if (\n ts.isCallExpression(argument) &&\n factoryMethod(argument.expression, names) === \"createIdentifier\"\n ) {\n return typeName(argument.arguments[0], names);\n }\n return undefined;\n}\n\n/** Digits with optional `_` separators between them, as in `1_000`. */\nconst digits = (digit: string): string => `${digit}(?:_?${digit})*`;\nconst DECIMAL_LITERAL =\n `(?:(?:0|[1-9](?:_?\\\\d)*)(?:\\\\.(?:${digits(\"\\\\d\")})?)?|\\\\.${digits(\"\\\\d\")})` +\n `(?:[eE][+-]?${digits(\"\\\\d\")})?`;\n/** A numeric literal as TypeScript writes it: decimal, hex, octal or binary. */\nconst NUMERIC_LITERAL_RE = new RegExp(\n `^(?:0[xX]${digits(\"[\\\\da-fA-F]\")}|0[oO]${digits(\"[0-7]\")}|0[bB]${digits(\"[01]\")}|` +\n `${DECIMAL_LITERAL})$`,\n);\n\n/**\n * The text that `createNumericLiteral(value)` prints. A string prints as given, so it is kept as\n * written (`1_000`, `1e999`) when it is a numeric literal. A number prints as JavaScript writes\n * it, and one beyond the range of a number prints `Infinity`, which is no type: that is left.\n */\nfunction numericLiteralText(value: ts.Expression): string | undefined {\n if (ts.isNumericLiteral(value)) {\n const number = Number(value.text);\n return Number.isFinite(number) ? String(number) : undefined;\n }\n return ts.isStringLiteralLike(value) && NUMERIC_LITERAL_RE.test(value.text)\n ? value.text\n : undefined;\n}\n\nfunction literalText(argument: ts.Expression | undefined, names: FactoryNames): string | undefined {\n if (argument === undefined || !ts.isCallExpression(argument)) {\n return undefined;\n }\n const method = factoryMethod(argument.expression, names);\n const [value] = argument.arguments;\n switch (method) {\n case \"createNull\":\n return \"null\";\n case \"createTrue\":\n return \"true\";\n case \"createFalse\":\n return \"false\";\n case \"createStringLiteral\":\n return value !== undefined && ts.isStringLiteralLike(value)\n ? JSON.stringify(value.text)\n : undefined;\n case \"createNumericLiteral\":\n return value === undefined ? undefined : numericLiteralText(value);\n default:\n return undefined;\n }\n}\n\nfunction joined(\n elements: ts.Expression | undefined,\n operator: \"|\" | \"&\",\n names: FactoryNames,\n): TypeText | undefined {\n if (\n elements === undefined ||\n !ts.isArrayLiteralExpression(elements) ||\n elements.elements.length === 0\n ) {\n return undefined;\n }\n const parts = elements.elements.map((element) => typeTextOf(element, names));\n if (parts.some((part) => part === undefined)) {\n return undefined;\n }\n const texts = (parts as TypeText[]).map((part) =>\n operator === \"&\" && part.operator === \"|\" ? `(${part.text})` : part.text,\n );\n return { text: texts.join(` ${operator} `), operator: texts.length > 1 ? operator : null };\n}\n\nfunction factoryCallText(\n call: ts.CallExpression,\n method: string,\n names: FactoryNames,\n): TypeText | undefined {\n const [first, second] = call.arguments;\n switch (method) {\n case \"createTypeReferenceNode\": {\n const name = second === undefined ? typeName(first, names) : undefined;\n return name === undefined ? undefined : plain(name);\n }\n case \"createKeywordTypeNode\": {\n const keyword =\n first === undefined ? undefined : KEYWORDS.get(syntaxKindMember(first, names) ?? \"\");\n return keyword === undefined ? undefined : plain(keyword);\n }\n case \"createLiteralTypeNode\": {\n const literal = literalText(first, names);\n return literal === undefined ? undefined : plain(literal);\n }\n case \"createUnionTypeNode\":\n return joined(first, \"|\", names);\n case \"createIntersectionTypeNode\":\n return joined(first, \"&\", names);\n case \"createArrayTypeNode\": {\n const element = first === undefined ? undefined : typeTextOf(first, names);\n return element === undefined\n ? undefined\n : plain(element.operator ? `(${element.text})[]` : `${element.text}[]`);\n }\n default:\n return undefined;\n }\n}\n\nfunction helperCallText(call: ts.CallExpression, names: FactoryNames): TypeText | undefined {\n if (!ts.isIdentifier(call.expression)) {\n return undefined;\n }\n const binding = names.bindings.bindingOf(call.expression);\n const helper = binding?.kind === \"helper-import\" ? binding.name : undefined;\n if (helper === \"tsUnion\") {\n return joined(call.arguments[0], \"|\", names);\n }\n return helper === \"tsIntersection\" ? joined(call.arguments[0], \"&\", names) : undefined;\n}\n\nfunction identifierText(identifier: ts.Identifier, names: FactoryNames): TypeText | undefined {\n const declaration = names.bindings.declarationOf(identifier);\n const binding = names.bindings.bindingOf(identifier);\n if (binding?.kind === \"helper-import\") {\n const constant = HELPER_CONSTANTS.get(binding.name);\n return constant === undefined ? undefined : plain(constant);\n }\n if (binding?.kind !== \"constant\" || names.following.has(declaration as ts.Node)) {\n return undefined;\n }\n const following = new Set([...names.following, declaration as ts.Node]);\n return typeTextOf(binding.initializer, { ...names, following });\n}\n\n/** The type text of an expression that builds a type, or undefined. */\nexport function typeTextOf(expression: ts.Expression, names: FactoryNames): TypeText | undefined {\n if (ts.isParenthesizedExpression(expression)) {\n return typeTextOf(expression.expression, names);\n }\n if (ts.isIdentifier(expression)) {\n return identifierText(expression, names);\n }\n if (!ts.isCallExpression(expression)) {\n return undefined;\n }\n const method = factoryMethod(expression.expression, names);\n return method === undefined\n ? helperCallText(expression, names)\n : factoryCallText(expression, method, names);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { TextEdit } from \"../../domain/text-edits.js\";\nimport { type FactoryNames, typeTextOf } from \"./factory-type-text.js\";\n\n/** The returned expressions of a function, without those of functions nested in it. */\nexport function returnedExpressions(body: ts.ConciseBody): (ts.Expression | undefined)[] {\n if (!ts.isBlock(body)) {\n return [body];\n }\n const returned: (ts.Expression | undefined)[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isFunctionLike(node) || ts.isClassLike(node)) {\n return;\n }\n if (ts.isReturnStatement(node)) {\n returned.push(node.expression);\n }\n ts.forEachChild(node, visit);\n };\n ts.forEachChild(body, visit);\n return returned;\n}\n\nconst isUndefined = (expression: ts.Expression): boolean =>\n (ts.isIdentifier(expression) && expression.text === \"undefined\") ||\n ts.isVoidExpression(expression);\n\nfunction typeTextEdit(expression: ts.Expression, names: FactoryNames): TextEdit[] | undefined {\n const typeText = typeTextOf(expression, names);\n if (typeText === undefined) {\n return undefined;\n }\n const start = expression.getStart();\n return [{ start, end: expression.getEnd(), text: JSON.stringify(typeText.text) }];\n}\n\n/** `{ schema: <type>, questionToken: … }`: only the `schema` value changes. */\nfunction resultObjectEdits(\n object: ts.ObjectLiteralExpression,\n names: FactoryNames,\n): TextEdit[] | undefined {\n const schema = object.properties.find(\n (property) =>\n property.name !== undefined &&\n ts.isIdentifier(property.name) &&\n property.name.text === \"schema\",\n );\n const isPlain = object.properties.every(ts.isPropertyAssignment);\n if (schema === undefined || !isPlain || !ts.isPropertyAssignment(schema)) {\n return undefined;\n }\n return typeTextEdit(schema.initializer, names);\n}\n\n/**\n * The edits that turn one returned expression into type text, or undefined when it is not one of\n * the known type-building forms. `undefined` (keep the generated type) needs no edit.\n */\nexport function returnEdits(\n expression: ts.Expression | undefined,\n names: FactoryNames,\n): TextEdit[] | undefined {\n if (expression === undefined || isUndefined(expression)) {\n return [];\n }\n if (ts.isParenthesizedExpression(expression)) {\n return returnEdits(expression.expression, names);\n }\n if (ts.isConditionalExpression(expression)) {\n const whenTrue = returnEdits(expression.whenTrue, names);\n const whenFalse = returnEdits(expression.whenFalse, names);\n return whenTrue === undefined || whenFalse === undefined\n ? undefined\n : [...whenTrue, ...whenFalse];\n }\n if (ts.isObjectLiteralExpression(expression)) {\n return resultObjectEdits(expression, names);\n }\n return typeTextEdit(expression, names);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { TextEdit } from \"../../domain/text-edits.js\";\nimport { type FactoryNames, typeTextOf } from \"./factory-type-text.js\";\nimport { type Binding, hasExportModifier } from \"./file-bindings.js\";\n\n/**\n * After the `transform` returns become type text, the module-level constants that built the old\n * nodes (`const DATE = ts.factory…`), and the TypeScript and helper imports that only they used,\n * are no longer read. Left in place they fail `noUnusedLocals` (TS6133), so they are removed.\n * Only declarations that the rewrite made unused go: each had uses, and all of them were in\n * replaced text or in other removed declarations. A constant goes only when its initializer is a\n * type-building expression, so no side effect is lost; an exported one always stays.\n */\n\n/** A removed declaration, for the report. */\nexport interface RemovedDeclaration {\n readonly node: ts.Node;\n readonly name: string;\n}\n\ninterface Range {\n readonly start: number;\n readonly end: number;\n}\n\nfunction isRemovable(node: ts.Node, binding: Binding, names: FactoryNames): boolean {\n switch (binding.kind) {\n case \"typescript-module\":\n case \"typescript-import\":\n case \"helper-import\":\n return true;\n case \"constant\":\n return !hasExportModifier(node) && typeTextOf(binding.initializer, names) !== undefined;\n default:\n return false;\n }\n}\n\nconst isInside = (node: ts.Node, ranges: readonly Range[]): boolean =>\n ranges.some((range) => node.getStart() >= range.start && node.getEnd() <= range.end);\n\n/** The declarations that the replaced ranges leave without a use, until nothing changes. */\nexport function unusedDeclarations(\n names: FactoryNames,\n replaced: readonly TextEdit[],\n): RemovedDeclaration[] {\n const ranges: Range[] = replaced.filter((edit) => edit.end > edit.start);\n const removed: RemovedDeclaration[] = [];\n for (let isChanged = true; isChanged; ) {\n isChanged = false;\n for (const [node, binding] of names.bindings.declarations) {\n const uses = names.bindings.usesOf(node);\n const isUnused = uses.length > 0 && uses.every((use) => isInside(use, ranges));\n const isNew = removed.every((found) => found.node !== node);\n if (isNew && isUnused && isRemovable(node, binding, names)) {\n const name = (node as ts.NamedDeclaration).name?.getText() ?? \"\";\n removed.push({ node, name });\n ranges.push({ start: node.getStart(), end: node.getEnd() });\n isChanged = true;\n }\n }\n }\n return removed;\n}\n\n/** The edit that removes a whole statement, with its line when nothing else is on it. */\nfunction statementRemoval(statement: ts.Statement, text: string): TextEdit {\n const start = statement.getStart(undefined, true);\n const end = statement.getEnd();\n const lineStart = text.lastIndexOf(\"\\n\", start - 1) + 1;\n const lineBreak = text.indexOf(\"\\n\", end);\n const lineEnd = lineBreak === -1 ? text.length : lineBreak + 1;\n const isAlone =\n text.slice(lineStart, start).trim() === \"\" && text.slice(end, lineEnd).trim() === \"\";\n return isAlone ? { start: lineStart, end: lineEnd, text: \"\" } : { start, end, text: \"\" };\n}\n\n/**\n * The edits that remove some elements of a comma-separated list. An element before the last kept\n * one goes with the comma after it; the elements after the last kept one go with the comma before\n * them, in one edit.\n */\nfunction listRemovals(\n elements: readonly ts.Node[],\n isRemoved: (node: ts.Node) => boolean,\n): TextEdit[] {\n const lastKept = elements.findLastIndex((element) => !isRemoved(element));\n const edits: TextEdit[] = [];\n elements.forEach((element, index) => {\n const next = elements[index + 1];\n if (index < lastKept && isRemoved(element) && next !== undefined) {\n edits.push({ start: element.getStart(), end: next.getStart(), text: \"\" });\n }\n });\n const last = elements.at(-1);\n if (lastKept !== -1 && last !== undefined && lastKept < elements.length - 1) {\n edits.push({ start: (elements[lastKept] as ts.Node).getEnd(), end: last.getEnd(), text: \"\" });\n }\n return edits;\n}\n\ntype IsRemoved = (node: ts.Node) => boolean;\n\n/** The edits for an import some of whose bindings were removed. */\nfunction importEdits(\n statement: ts.ImportDeclaration,\n isRemoved: IsRemoved,\n text: string,\n): TextEdit[] {\n const clause = statement.importClause as ts.ImportClause;\n const bindings = clause.namedBindings;\n const named = bindings !== undefined && ts.isNamedImports(bindings) ? bindings : undefined;\n const namespace = bindings !== undefined && ts.isNamespaceImport(bindings) ? bindings : undefined;\n const parts: ts.Node[] = [\n ...(clause.name === undefined ? [] : [clause]),\n ...(namespace === undefined ? [] : [namespace]),\n ...(named?.elements ?? []),\n ];\n if (parts.every(isRemoved)) {\n return [statementRemoval(statement, text)];\n }\n // Not every part is removed, so a removed default import has a named or namespace one after it.\n const defaultEnd = clause.name?.getEnd() ?? 0;\n const edits: TextEdit[] = [];\n if (clause.name !== undefined && isRemoved(clause)) {\n edits.push({ start: clause.name.getStart(), end: (bindings as ts.Node).getStart(), text: \"\" });\n }\n if (namespace !== undefined && isRemoved(namespace)) {\n edits.push({ start: defaultEnd, end: namespace.getEnd(), text: \"\" });\n }\n if (named !== undefined && named.elements.length > 0 && named.elements.every(isRemoved)) {\n edits.push({ start: defaultEnd, end: named.getEnd(), text: \"\" });\n } else if (named !== undefined) {\n edits.push(...listRemovals(named.elements, isRemoved));\n }\n return edits;\n}\n\nfunction statementEdits(statement: ts.Statement, isRemoved: IsRemoved, text: string): TextEdit[] {\n if (ts.isImportDeclaration(statement)) {\n return importEdits(statement, isRemoved, text);\n }\n const declarations = (statement as ts.VariableStatement).declarationList.declarations;\n return declarations.every(isRemoved)\n ? [statementRemoval(statement, text)]\n : listRemovals(declarations, isRemoved);\n}\n\n/** The edits that remove the declarations, grouped by the statement each belongs to. */\nexport function removalEdits(removed: readonly RemovedDeclaration[], text: string): TextEdit[] {\n const nodes = new Set(removed.map((found) => found.node));\n const isRemoved: IsRemoved = (node) => nodes.has(node);\n const statements = new Set(\n removed.map(\n (found) =>\n ts.findAncestor(\n found.node,\n (node) => ts.isVariableStatement(node) || ts.isImportDeclaration(node),\n ) as ts.Statement,\n ),\n );\n return [...statements].flatMap((statement) => statementEdits(statement, isRemoved, text));\n}\n","import ts from \"@typescript/typescript6\";\nimport type { CallbackRewriter } from \"../../application/ports.js\";\nimport {\n type Change,\n type FileMigration,\n lineAt,\n type ManualStep,\n type TransformKeepReason,\n unchanged,\n} from \"../../domain/migration-findings.js\";\nimport { applyTextEdits, type TextEdit } from \"../../domain/text-edits.js\";\nimport type { FactoryNames } from \"./factory-type-text.js\";\nimport { createFileBindings } from \"./file-bindings.js\";\nimport { type GeneratorCall, type GeneratorOptions, generatorCalls } from \"./generator-calls.js\";\nimport { optionsTypeEdits, optionsTypeReferences } from \"./options-type.js\";\nimport { plainScriptKind } from \"./script-regions.js\";\nimport { callbackAnnotations, callbackFunction, isSharedFunction } from \"./transform-callback.js\";\nimport { returnEdits, returnedExpressions } from \"./transform-returns.js\";\nimport { removalEdits, unusedDeclarations } from \"./unused-declarations.js\";\n\n/**\n * The CallbackRewriter port on the TypeScript 6 parser (ADR-015). In each `openapiTS(source, {…})`\n * call where `transform` is the only callback and every value it returns builds a type with\n * `ts.factory` or the helpers, the returns become TypeScript type text and `irCallbacks: true` is\n * added; the module-level constants and imports that only the old returns used are removed. Every\n * other legacy callback is reported, not changed: it still works, with a warning.\n */\n\nconst TRANSFORM = \"transform\";\nconst LEGACY_ONLY_CALLBACKS = [\"postTransform\", \"transformProperty\"] as const;\nconst IR_CALLBACKS_OPTION = \"irCallbacks\";\n/** The value of `irCallbacks` in an object that the call types: the literal `true` stays `true`. */\nconst IR_CALLBACKS_TRUE = \"true\";\n/** In an untyped `const`, `true` widens to `boolean`, which no signature of `openapiTS` takes. */\nconst IR_CALLBACKS_TRUE_CONST = \"true as const\";\n/** The same assertion in a JavaScript file, where `as const` is not syntax. */\nconst IR_CALLBACKS_TRUE_CONST_JS = \"/** @type {const} */ (true)\";\n\ninterface CallFindings {\n readonly edits: TextEdit[];\n readonly changes: Change[];\n readonly manualSteps: ManualStep[];\n /** The `OpenAPITSOptions` names of rewritten options, retargeted once per file. */\n readonly typeReferences: ts.Identifier[];\n}\n\ntype OwnOptions = Extract<GeneratorOptions, { kind: \"own\" }>;\n\nconst noFindings = (): CallFindings => ({\n edits: [],\n changes: [],\n manualSteps: [],\n typeReferences: [],\n});\n\nfunction propertyNamed(\n options: ts.ObjectLiteralExpression,\n name: string,\n): ts.ObjectLiteralElementLike | undefined {\n return options.properties.find((property) => {\n const key = property.name;\n return (\n key !== undefined && (ts.isIdentifier(key) || ts.isStringLiteral(key)) && key.text === name\n );\n });\n}\n\n/**\n * A declared return type names TypeScript nodes (`ts.TypeNode`), which type text does not match,\n * so it is removed and the type is inferred from the new returns.\n */\nfunction returnTypeEdits(callback: ts.FunctionLikeDeclaration, text: string): TextEdit[] {\n const type = callback.type;\n if (type === undefined) {\n return [];\n }\n const colon = text.lastIndexOf(\":\", type.getStart());\n return [{ start: colon, end: type.getEnd(), text: \"\" }];\n}\n\n/** The edits for the returns of `transform`, or the reason to keep it. */\nfunction transformEdits(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n text: string,\n): TextEdit[] | TransformKeepReason {\n const callback = callbackFunction(property, names);\n if (callback?.body === undefined) {\n return \"not-a-function\";\n }\n if (isSharedFunction(property, names)) {\n return \"shared-function\";\n }\n const edits = returnTypeEdits(callback, text);\n for (const returned of returnedExpressions(callback.body)) {\n const returnEditList = returnEdits(returned, names);\n if (returnEditList === undefined) {\n return \"unknown-return\";\n }\n edits.push(...returnEditList);\n }\n return edits;\n}\n\n/** The value of the added `irCallbacks`, which must keep the type `true` (TS2769 otherwise). */\nfunction irCallbacksValue(options: OwnOptions): string {\n if (options.isContextuallyTyped) {\n return IR_CALLBACKS_TRUE;\n }\n const isJavaScript = (options.options.flags & ts.NodeFlags.JavaScriptFile) !== 0;\n return isJavaScript ? IR_CALLBACKS_TRUE_CONST_JS : IR_CALLBACKS_TRUE_CONST;\n}\n\n/**\n * The `irCallbacks` option, placed before `transform`: on its own line with the same\n * indentation when `transform` starts a line, else on the same line.\n */\nfunction irCallbacksOption(text: string, transformStart: number, value: string): string {\n const lineStart = text.lastIndexOf(\"\\n\", transformStart - 1) + 1;\n const before = text.slice(lineStart, transformStart);\n const option = `${IR_CALLBACKS_OPTION}: ${value},`;\n return /^\\s*$/.test(before) ? `${option}\\n${before}` : `${option} `;\n}\n\n/**\n * Why the options keep their `transform`, or undefined. A spread (`...base`) may bring callbacks\n * that need TypeScript nodes, `irCallbacks`, or a type of `OpenAPITSOptions` that the IR return\n * does not fit, and the tool cannot see them.\n */\nfunction keepReason(options: ts.ObjectLiteralExpression): TransformKeepReason | undefined {\n const hasOther = LEGACY_ONLY_CALLBACKS.some((name) => propertyNamed(options, name) !== undefined);\n if (hasOther) {\n return \"other-callbacks\";\n }\n return options.properties.some(ts.isSpreadAssignment) ? \"spread-options\" : undefined;\n}\n\nfunction legacyCallbackSteps(options: ts.ObjectLiteralExpression, text: string): ManualStep[] {\n return LEGACY_ONLY_CALLBACKS.flatMap((callback) => {\n const property = propertyNamed(options, callback);\n return property === undefined\n ? []\n : [{ kind: \"legacy-callback\" as const, line: lineAt(text, property.getStart()), callback }];\n });\n}\n\n/** The rewrite of `transform` with the options types to retarget, or the reason to keep it. */\nfunction transformRewrite(\n transform: ts.ObjectLiteralElementLike,\n options: OwnOptions,\n names: FactoryNames,\n text: string,\n) {\n const edits = keepReason(options.options) ?? transformEdits(transform, names, text);\n if (typeof edits === \"string\") {\n return edits;\n }\n const annotations = [...options.annotations, ...callbackAnnotations(transform, names)];\n const typeReferences = optionsTypeReferences(annotations, names.bindings);\n return typeReferences === undefined ? \"typed-options\" : { edits, typeReferences };\n}\n\n/** The findings of one `openapiTS(source, options)` call with an options object literal. */\nfunction migrateOptions(options: OwnOptions, text: string, names: FactoryNames): CallFindings {\n // With irCallbacks set, the callbacks already use the IR form: nothing to migrate.\n if (propertyNamed(options.options, IR_CALLBACKS_OPTION) !== undefined) {\n return noFindings();\n }\n const findings = noFindings();\n findings.manualSteps.push(...legacyCallbackSteps(options.options, text));\n const transform = propertyNamed(options.options, TRANSFORM);\n if (transform === undefined) {\n return findings;\n }\n const start = transform.getStart();\n const line = lineAt(text, start);\n const result = transformRewrite(transform, options, names, text);\n if (typeof result === \"string\") {\n findings.manualSteps.push({ kind: \"transform-not-rewritten\", line, reason: result });\n return findings;\n }\n // Before the JSDoc of `transform`, which documents (and in JavaScript types) `transform`.\n const at = transform.getStart(undefined, true);\n const option = irCallbacksOption(text, at, irCallbacksValue(options));\n findings.edits.push({ start: at, end: at, text: option }, ...result.edits);\n findings.typeReferences.push(...result.typeReferences);\n findings.changes.push({ kind: \"transform-rewritten\", line });\n return findings;\n}\n\n/** Options that other code uses too: the callbacks are reported, never changed. */\nfunction sharedOptionsFindings(options: ts.ObjectLiteralExpression, text: string): CallFindings {\n const findings = noFindings();\n if (propertyNamed(options, IR_CALLBACKS_OPTION) !== undefined) {\n return findings;\n }\n findings.manualSteps.push(...legacyCallbackSteps(options, text));\n const transform = propertyNamed(options, TRANSFORM);\n if (transform !== undefined) {\n const line = lineAt(text, transform.getStart());\n findings.manualSteps.push({ kind: \"transform-not-rewritten\", line, reason: \"shared-options\" });\n }\n return findings;\n}\n\nfunction callFindings(found: GeneratorCall, text: string, names: FactoryNames): CallFindings {\n const options = found.options;\n switch (options?.kind) {\n case undefined:\n return noFindings();\n case \"own\":\n return migrateOptions(options, text, names);\n case \"shared\":\n return sharedOptionsFindings(options.options, text);\n case \"unknown\": {\n const line = lineAt(text, options.expression.getStart());\n return { ...noFindings(), manualSteps: [{ kind: \"options-not-inspected\", line }] };\n }\n }\n}\n\n/** The findings of every generator call; options that several calls share are read once. */\nfunction findCallFindings(file: ts.SourceFile, text: string, names: FactoryNames): CallFindings {\n const all = noFindings();\n const seen = new Set<ts.Node>();\n for (const found of generatorCalls(file, names.bindings)) {\n const options = found.options?.kind === \"unknown\" ? undefined : found.options?.options;\n if (options !== undefined && seen.has(options)) {\n continue;\n }\n if (options !== undefined) {\n seen.add(options);\n }\n const findings = callFindings(found, text, names);\n all.edits.push(...findings.edits);\n all.changes.push(...findings.changes);\n all.manualSteps.push(...findings.manualSteps);\n all.typeReferences.push(...findings.typeReferences);\n }\n return all;\n}\n\n/** The rewrite of a file that calls the generator, with the declarations it leaves unused. */\nfunction rewriteFile(file: ts.SourceFile, names: FactoryNames): FileMigration {\n const text = file.text;\n const { edits, changes, manualSteps, typeReferences } = findCallFindings(file, text, names);\n // The options type edits rename uses of an import, which leaves it in use, not unused.\n const removed = unusedDeclarations(names, edits);\n for (const found of removed) {\n changes.push({\n kind: \"declaration-removed\",\n line: lineAt(text, found.node.getStart()),\n name: found.name,\n });\n }\n const typeEdits = optionsTypeEdits(typeReferences, names.bindings);\n const allEdits = [...edits, ...typeEdits, ...removalEdits(removed, text)];\n return { text: applyTextEdits(text, allEdits), changes, manualSteps };\n}\n\nclass TypescriptCallbackRewriter implements CallbackRewriter {\n rewrite(text: string, path: string): FileMigration {\n // Single-file components (`.vue`, `.svelte`, `.astro`) are not plain scripts; they are left.\n const scriptKind = plainScriptKind(path);\n if (scriptKind === undefined) {\n return unchanged(text);\n }\n const file = ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, scriptKind);\n const bindings = createFileBindings(file);\n if (!bindings.hasGenerator) {\n return unchanged(text);\n }\n return rewriteFile(file, { bindings, following: new Set() });\n }\n}\n\n/** A callback rewriter that parses each file with the TypeScript 6 parser. */\nexport function createTypescriptCallbackRewriter(): CallbackRewriter {\n return new TypescriptCallbackRewriter();\n}\n","import ts from \"@typescript/typescript6\";\nimport type { SourceStringScanner } from \"../../application/ports.js\";\nimport type { SourceString } from \"../../domain/source-migration.js\";\nimport { type ScriptRegion, scriptRegions } from \"./script-regions.js\";\n\n/**\n * The SourceStringScanner port on the TypeScript 6 parser (ADR-015). It finds every string\n * literal of a file's scripts, JSDoc types included, and the `/// <reference types>` directives,\n * and tells module specifiers from other strings by the syntax around them.\n */\n\nconst REQUIRE = \"require\";\nconst RESOLVE = \"resolve\";\n/** Methods of vitest's `vi` whose first argument is a module. */\nconst VITEST_METHODS: ReadonlySet<string> = new Set([\n \"mock\",\n \"doMock\",\n \"unmock\",\n \"doUnmock\",\n \"importActual\",\n \"importMock\",\n]);\n/** Methods of `jest` whose first argument is a module, older names included. */\nconst JEST_METHODS: ReadonlySet<string> = new Set([\n \"mock\",\n \"doMock\",\n \"unmock\",\n \"dontMock\",\n \"deepUnmock\",\n \"setMock\",\n \"requireActual\",\n \"requireMock\",\n \"createMockFromModule\",\n \"genMockFromModule\",\n \"unstable_mockModule\",\n \"unstable_unmockModule\",\n]);\n/** `vi.mock`, `jest.setMock`, bun's `mock.module` and `require.resolve`, by object. */\nconst MODULE_METHODS: ReadonlyMap<string, ReadonlySet<string>> = new Map([\n [\"vi\", VITEST_METHODS],\n [\"jest\", JEST_METHODS],\n [\"mock\", new Set([\"module\"])],\n [REQUIRE, new Set([RESOLVE])],\n]);\n\nfunction isIdentifierNamed(node: ts.Node, name: string): boolean {\n return ts.isIdentifier(node) && node.text === name;\n}\n\n/** The module methods, and `import.meta.resolve`. */\nfunction isModuleMethod(callee: ts.PropertyAccessExpression): boolean {\n const object = callee.expression;\n const method = callee.name.text;\n if (ts.isIdentifier(object)) {\n return MODULE_METHODS.get(object.text)?.has(method) ?? false;\n }\n return method === RESOLVE && ts.isMetaProperty(object);\n}\n\n/** Calls whose first argument is a module: `import()`, `require()` and the module methods. */\nfunction isModuleCall(call: ts.CallExpression): boolean {\n const callee = call.expression;\n if (callee.kind === ts.SyntaxKind.ImportKeyword || isIdentifierNamed(callee, REQUIRE)) {\n return true;\n }\n return ts.isPropertyAccessExpression(callee) && isModuleMethod(callee);\n}\n\nfunction isModuleSpecifier(literal: ts.StringLiteralLike | ts.TemplateExpression): boolean {\n const parent = literal.parent;\n if (\n ts.isImportDeclaration(parent) ||\n ts.isExportDeclaration(parent) ||\n ts.isJSDocImportTag(parent)\n ) {\n return parent.moduleSpecifier === literal;\n }\n if (ts.isCallExpression(parent)) {\n return parent.arguments[0] === literal && isModuleCall(parent);\n }\n if (ts.isModuleDeclaration(parent)) {\n return parent.name === literal;\n }\n // `import(\"openapi-fetch\").Client` in a type, also in a JSDoc type of a JavaScript file.\n if (ts.isLiteralTypeNode(parent)) {\n return ts.isImportTypeNode(parent.parent);\n }\n return ts.isExternalModuleReference(parent);\n}\n\ntype FoundStrings = Map<number, SourceString>;\n\n/** The value of a string literal; the text between the backticks of a template with `${…}`. */\nfunction stringValue(node: ts.StringLiteralLike | ts.TemplateExpression, file: ts.SourceFile) {\n return ts.isTemplateExpression(node)\n ? file.text.slice(node.getStart(file) + 1, node.getEnd() - 1)\n : node.text;\n}\n\n/** Adds the string literals under `root` to `found`; `file` starts at `offset` in the file. */\nfunction collectStrings(\n root: ts.Node,\n file: ts.SourceFile,\n offset: number,\n found: FoundStrings,\n): void {\n const visit = (node: ts.Node): void => {\n // A template with substitutions (`npx openapi-typescript ${spec}`) gives its text as written,\n // `${…}` included: the specifier rename then keeps the substitutions, and a command in it is\n // reported with them.\n if (ts.isStringLiteralLike(node) || ts.isTemplateExpression(node)) {\n // The value starts after the opening quote and ends before the closing one.\n const start = offset + node.getStart(file) + 1;\n const end = offset + node.getEnd() - 1;\n found.set(start, {\n start,\n end,\n value: stringValue(node, file),\n isModuleSpecifier: isModuleSpecifier(node),\n });\n }\n ts.forEachChild(node, visit);\n };\n visit(root);\n}\n\n/**\n * Every comment of a parsed file. Comments are the trivia in front of tokens, so the ranges in\n * front of each token cover them all, also where no node owns a JSDoc block. A trailing range\n * ends at the first line break and a leading one starts after it, so a token needs both. JSX text\n * is not trivia, and the JSDoc nodes are read from their comments, so neither is walked.\n */\nfunction commentRanges(file: ts.SourceFile): ts.CommentRange[] {\n const ranges = new Map<number, ts.CommentRange>();\n const add = (found: ts.CommentRange[] | undefined): void => {\n for (const range of found ?? []) {\n ranges.set(range.pos, range);\n }\n };\n const visit = (node: ts.Node): void => {\n if (node.kind === ts.SyntaxKind.JsxText) {\n return;\n }\n const children = node.getChildren(file).filter((child) => !ts.isJSDoc(child));\n if (children.length === 0) {\n add(ts.getTrailingCommentRanges(file.text, node.pos));\n add(ts.getLeadingCommentRanges(file.text, node.pos));\n }\n children.forEach(visit);\n };\n visit(file);\n return [...ranges.values()];\n}\n\nconst JSDOC_START = \"/**\";\nconst EMPTY_BLOCK_COMMENT = \"/**/\";\n/** A statement for an isolated JSDoc block to belong to, so that the parser reads the block. */\nconst JSDOC_HOST = \"\\nvar host;\";\nconst JSDOC_FILE_NAME = \"jsdoc.js\";\n\n/**\n * Adds the strings of one JSDoc block. The parser reads only the last block before a node it\n * keeps JSDoc for, so each block is parsed on its own, in front of a statement of its own.\n */\nfunction collectJsDocStrings(comment: string, offset: number, found: FoundStrings): void {\n const text = `${comment}${JSDOC_HOST}`;\n const file = ts.createSourceFile(JSDOC_FILE_NAME, text, ts.ScriptTarget.Latest, true);\n const host = file.statements[0] as ts.Statement;\n for (const doc of ts.getJSDocCommentsAndTags(host)) {\n collectStrings(doc, file, offset, found);\n }\n}\n\nfunction literalStrings(file: ts.SourceFile, offset: number): FoundStrings {\n const found: FoundStrings = new Map();\n collectStrings(file, file, offset, found);\n for (const range of commentRanges(file)) {\n const comment = file.text.slice(range.pos, range.end);\n if (comment.startsWith(JSDOC_START) && comment !== EMPTY_BLOCK_COMMENT) {\n collectJsDocStrings(comment, offset + range.pos, found);\n }\n }\n return found;\n}\n\nfunction regionStrings(region: ScriptRegion, path: string): SourceString[] {\n const file = ts.createSourceFile(path, region.text, ts.ScriptTarget.Latest, true, region.kind);\n const found = literalStrings(file, region.offset);\n for (const reference of file.typeReferenceDirectives) {\n const start = region.offset + reference.pos;\n const end = region.offset + reference.end;\n found.set(start, { start, end, value: reference.fileName, isModuleSpecifier: true });\n }\n return [...found.values()];\n}\n\nclass TypescriptSourceStringScanner implements SourceStringScanner {\n scan(text: string, path: string): SourceString[] {\n return scriptRegions(text, path)\n .flatMap((region) => regionStrings(region, path))\n .sort((left, right) => left.start - right.start);\n }\n}\n\n/** A source string scanner that parses each script with the TypeScript 6 parser. */\nexport function createTypescriptStringScanner(): SourceStringScanner {\n return new TypescriptSourceStringScanner();\n}\n","import { CST, isMap, isNode, isScalar, isSeq, parseAllDocuments, Scalar } from \"yaml\";\nimport type { YamlDocumentReader } from \"../../application/ports.js\";\nimport type { DocumentRead, TreeNode } from \"../../domain/config-documents.js\";\n\n/**\n * The YamlDocumentReader port on the `yaml` package (ADR-015). It keeps the source tokens, so\n * each scalar has the offsets of its text as written, in block and flow style alike, and reads\n * every document of a stream.\n */\n\ninterface Conversion {\n /** Inside a flow collection (`{ … }`, `[ … ]`), where `,` and brackets end a plain scalar. */\n readonly isFlow: boolean;\n}\n\ninterface TextRange {\n readonly start: number;\n readonly end: number;\n}\n\ntype Quoting = (value: string) => string;\n\nconst plain: Quoting = (value) => value;\nconst singleQuoted: Quoting = (value) => `'${value.replaceAll(\"'\", \"''\")}'`;\n// JSON is YAML: a JSON string is a valid double-quoted scalar for every value.\nconst doubleQuoted: Quoting = (value) => JSON.stringify(value);\n\n/** The quotings a new value may take, the old scalar's first; block scalars take none. */\nconst QUOTINGS: Readonly<Record<string, readonly Quoting[]>> = {\n [Scalar.PLAIN]: [plain, singleQuoted, doubleQuoted],\n [Scalar.QUOTE_SINGLE]: [singleQuoted, doubleQuoted],\n [Scalar.QUOTE_DOUBLE]: [doubleQuoted],\n};\n\n/** Whether `written`, at a place like the old scalar's, reads back as the string `value`. */\nfunction readsBack(written: string, value: string, isFlow: boolean): boolean {\n const [document] = parseAllDocuments(isFlow ? `[${written}]` : `- ${written}`);\n const list = document?.contents;\n const item = isSeq(list) && list.items.length === 1 ? list.items[0] : undefined;\n return document?.errors.length === 0 && isScalar(item) && item.value === value;\n}\n\n/**\n * The old scalar's quoting, or the next one that can hold the new value: a value that plain text\n * would read as another type or cut short (`true`, `a: b`, `x #y`) is quoted.\n */\nfunction encoderFor(quotings: readonly Quoting[], isFlow: boolean): (value: string) => string {\n return (value) =>\n quotings.map((quoting) => quoting(value)).find((text) => readsBack(text, value, isFlow)) ??\n doubleQuoted(value);\n}\n\n/** The content lines of a block scalar follow its header line, which its props make up. */\nfunction blockContent(token: CST.BlockScalar): TextRange {\n const headerLength = token.props.reduce((length, prop) => length + CST.stringify(prop).length, 0);\n const start = token.offset + headerLength;\n return { start, end: start + token.source.trimEnd().length };\n}\n\n/** The text of a scalar as written: without quotes, and without the header of a block scalar. */\nfunction contentRange(token: CST.Token | undefined, node: TextRange): TextRange {\n switch (token?.type) {\n case \"scalar\":\n return { start: token.offset, end: token.offset + token.source.length };\n case \"single-quoted-scalar\":\n case \"double-quoted-scalar\":\n return { start: token.offset + 1, end: token.offset + token.source.length - 1 };\n case \"block-scalar\":\n return blockContent(token);\n default:\n return node;\n }\n}\n\nfunction spanOf(node: { range?: [number, number, number] | null }): TextRange {\n const [start, end] = node.range ?? [0, 0];\n return { start, end };\n}\n\n/** A plain scalar that YAML reads as a number or boolean keeps its text as written. */\nfunction scalarText(node: Scalar): string | undefined {\n if (typeof node.value === \"string\") {\n return node.value;\n }\n const isWritten = node.type === Scalar.PLAIN && node.value !== null;\n return isWritten ? node.source : undefined;\n}\n\n/** The text that starts an escape in a quoted scalar, by the type of its token. */\nconst ESCAPES: Readonly<Partial<Record<string, string>>> = {\n \"single-quoted-scalar\": \"''\",\n \"double-quoted-scalar\": \"\\\\\",\n};\n\n/** Whether a quoted scalar has an escape in its text as written. */\nfunction isEscaped(token: CST.Token | undefined): boolean {\n const escapeStart = token === undefined ? undefined : ESCAPES[token.type];\n return escapeStart !== undefined && token !== undefined && \"source\" in token\n ? token.source.includes(escapeStart)\n : false;\n}\n\nfunction convertScalar(node: Scalar, isFlow: boolean): TreeNode {\n const span = spanOf(node);\n const value = scalarText(node);\n if (value === undefined) {\n return { kind: \"other\", ...span };\n }\n const quotings = node.type === undefined ? undefined : QUOTINGS[node.type];\n const isReplaceable =\n quotings !== undefined && node.anchor === undefined && node.tag === undefined;\n return {\n kind: \"scalar\",\n value,\n content: contentRange(node.srcToken, span),\n isFolded: node.type !== Scalar.BLOCK_LITERAL,\n isEscaped: isEscaped(node.srcToken),\n encode: isReplaceable ? encoderFor(quotings, isFlow) : undefined,\n ...span,\n };\n}\n\nconst flowOf = (conversion: Conversion, node: { flow?: boolean }): Conversion => ({\n isFlow: conversion.isFlow || node.flow === true,\n});\n\nfunction convert(node: unknown, conversion: Conversion): TreeNode {\n if (isScalar(node)) {\n return convertScalar(node, conversion.isFlow);\n }\n if (isSeq(node)) {\n const inner = flowOf(conversion, node);\n return { kind: \"list\", items: node.items.map((item) => convert(item, inner)), ...spanOf(node) };\n }\n if (isMap(node)) {\n const inner = flowOf(conversion, node);\n const entries = node.items.map((pair) => ({\n key: convert(pair.key, inner),\n value: convert(pair.value, inner),\n }));\n return { kind: \"map\", entries, ...spanOf(node) };\n }\n // An alias, or no value at all (`key:` with nothing after it).\n return { kind: \"other\", ...spanOf(isNode(node) ? node : {}) };\n}\n\n/**\n * The offset of the first key that repeats an earlier scalar key of the same map, under `node`.\n * YAML forbids such a key. The `yaml` package checks it by comparing each key with every key\n * before it, which took 25 s on a 6 MB OpenAPI document; this check is linear and finds the same\n * keys: scalar keys with the same value.\n */\nfunction duplicateKeyOffset(node: unknown): number | undefined {\n if (isSeq(node)) {\n return firstOffset(node.items);\n }\n if (!isMap(node)) {\n return undefined;\n }\n const keys = new Set<unknown>();\n for (const pair of node.items) {\n if (isScalar(pair.key) && keys.has(pair.key.value)) {\n return spanOf(pair.key).start;\n }\n keys.add(isScalar(pair.key) ? pair.key.value : pair.key);\n }\n return firstOffset(node.items.flatMap((pair) => [pair.key, pair.value]));\n}\n\nfunction firstOffset(nodes: readonly unknown[]): number | undefined {\n for (const node of nodes) {\n const offset = duplicateKeyOffset(node);\n if (offset !== undefined) {\n return offset;\n }\n }\n return undefined;\n}\n\n/**\n * How the `yaml` package parses a config. Its own duplicate key check compares each key with every\n * key before it, so it is turned off (`uniqueKeys: false`) for the linear one above; the source\n * tokens give the offsets of the strings the migrations edit.\n */\nexport const YAML_PARSE_OPTIONS = { keepSourceTokens: true, uniqueKeys: false } as const;\n\n/**\n * The `yaml` package stops at nesting deeper than the stack allows and reports it as an error, so\n * a tree it gives is shallow enough for the migrations to walk.\n */\nfunction read(text: string): DocumentRead {\n const documents = parseAllDocuments(text, YAML_PARSE_OPTIONS);\n const error = documents.flatMap((document) => document.errors)[0];\n if (error !== undefined) {\n return { kind: \"unreadable\", offset: error.pos[0] };\n }\n const duplicate = firstOffset(documents.map((document) => document.contents));\n if (duplicate !== undefined) {\n return { kind: \"unreadable\", offset: duplicate };\n }\n const roots = documents.flatMap((document) =>\n document.contents === null ? [] : [convert(document.contents, { isFlow: false })],\n );\n return { kind: \"read\", documents: roots };\n}\n\nexport function createYamlTextReader(): YamlDocumentReader {\n return { read };\n}\n","/**\n * What the migration renames (ENGINEERING_PLAN 10.1). openapi-typesafe is a drop-in successor, so\n * moving a project is a matter of names: packages, the CLI command and a few renamed CLI flags.\n */\n\n/** Original package name → openapi-typesafe package name. */\nexport const PACKAGE_RENAMES: ReadonlyMap<string, string> = new Map([\n [\"openapi-typescript\", \"openapi-typesafe\"],\n [\"openapi-fetch\", \"openapi-typesafe-fetch\"],\n [\"openapi-react-query\", \"openapi-typesafe-react-query\"],\n [\"openapi-typescript-helpers\", \"openapi-typesafe-helpers\"],\n]);\n\n/**\n * Whether `text` names an original package as written. Every rename and every report starts at\n * such a name, so a text without one has nothing to migrate. The generator command is one of the\n * names. A name written with escapes (`\"openapi\\x2dfetch\"` in YAML) is not found, so a file that\n * names a package only that way is left as it is.\n */\nexport function namesOriginalPackage(text: string): boolean {\n return [...PACKAGE_RENAMES.keys()].some((name) => text.includes(name));\n}\n\n/** The generator's command, as package.json scripts and shell lines run it. */\nexport const GENERATOR_COMMAND = \"openapi-typescript\";\nexport const MIGRATED_GENERATOR_COMMAND = \"openapi-typesafe\";\n\n/**\n * Flags that openapi-typescript 6 and 7 renamed; the openapi-typesafe CLI rejects the old spelling\n * with CLI_FLAG_REMOVED, so the migration writes the new one.\n */\nexport const FLAG_RENAMES: ReadonlyMap<string, string> = new Map([\n [\"--immutable-types\", \"--immutable\"],\n [\"-it\", \"--immutable\"],\n [\"--support-array-length\", \"--array-length\"],\n [\"--redoc\", \"--redocly\"],\n [\"-ap\", \"--additional-properties\"],\n]);\n\n/** The dependency fields of package.json that install packages, in the order npm documents them. */\nexport const DEPENDENCY_FIELDS = [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n] as const;\n\nexport type DependencyField = (typeof DEPENDENCY_FIELDS)[number];\n\n/**\n * Fields keyed by the name of a dependency: `peerDependenciesMeta` (npm, its `optional` flag),\n * `dependenciesMeta` (pnpm and Yarn). A key left with the old name loses its meaning: an optional\n * peer becomes required (finding M3).\n */\nexport const NAME_KEYED_FIELDS = [\"peerDependenciesMeta\", \"dependenciesMeta\"] as const;\n\n/** Fields that list the names of dependencies to bundle (npm reads both spellings). */\nexport const NAME_LIST_FIELDS = [\"bundleDependencies\", \"bundledDependencies\"] as const;\n\n/**\n * Catalogs in package.json: bun reads `catalog` and `catalogs` at the top level and under\n * `workspaces`. Their names are what `catalog:` dependencies point at.\n */\nexport const CATALOG_FIELD = \"catalog\";\nexport const NAMED_CATALOGS_FIELD = \"catalogs\";\nexport const WORKSPACES_FIELD = \"workspaces\";\n\n/** Fields that can name a package without installing it; they are reported, not rewritten. */\nexport const OVERRIDE_FIELDS = [\"overrides\", \"resolutions\"] as const;\n\n/** The pnpm settings of package.json; `pnpm.overrides` is one of them. */\nexport const PNPM_SETTINGS_FIELD = \"pnpm\";\n\n/** An original package that another package still needs as a peer dependency. */\nexport interface OldPeer {\n readonly peer: string;\n readonly range: string;\n}\n\n/**\n * Packages that keep a peer dependency on an original package after the migration. swr-openapi 5\n * takes its client type from openapi-fetch (`peerDependencies: { \"openapi-fetch\": \">=0.15\" }`).\n * TypeScript infers the paths of that generic type only from the same declaration, so the\n * project must alias openapi-fetch to openapi-typesafe-fetch (ADR-030).\n */\nexport const OLD_PEER_DEPENDENTS: ReadonlyMap<string, OldPeer> = new Map([\n [\"swr-openapi\", { peer: \"openapi-fetch\", range: \">=0.15\" }],\n]);\n\nconst PATH_SEPARATOR = \"/\";\n/** Bundlers read a query after a specifier (`?url`, `?raw`) as how to load the module. */\nconst QUERY_START = \"?\";\n\n/** A module specifier with the package renamed, and whether it reaches into the package. */\nexport interface RenamedSpecifier {\n readonly to: string;\n readonly isDeep: boolean;\n}\n\n/**\n * The new name of a whole package name, or of a name and a subpath (`openapi-fetch/x`, and the\n * `openapi-fetch/` prefix of an import map), with any query of a bundler kept as written\n * (`openapi-fetch?url`, `openapi-fetch/x.js?raw`); undefined for other specifiers.\n */\nexport function renamedSpecifier(value: string): RenamedSpecifier | undefined {\n const ends = [value.indexOf(PATH_SEPARATOR), value.indexOf(QUERY_START)].filter(\n (at) => at !== -1,\n );\n const name = value.slice(0, ends.length === 0 ? value.length : Math.min(...ends));\n const renamed = PACKAGE_RENAMES.get(name);\n if (renamed === undefined) {\n return undefined;\n }\n const rest = value.slice(name.length);\n const subpath = rest.split(QUERY_START, 1)[0] ?? rest;\n return { to: `${renamed}${rest}`, isDeep: subpath !== \"\" && subpath !== PATH_SEPARATOR };\n}\n\nconst NODE_MODULES_FOLDER = \"node_modules/\";\n\n/**\n * The old package whose installed files a path points into (`../node_modules/openapi-fetch/x.js`,\n * `node_modules/openapi-typescript/bin/cli.js`), or undefined.\n */\nexport function oldPackageInNodeModules(path: string): string | undefined {\n return [...PACKAGE_RENAMES.keys()].find((name) =>\n path.includes(`${NODE_MODULES_FOLDER}${name}${PATH_SEPARATOR}`),\n );\n}\n","import { columnAt, type FileMigration, lineAt, unchanged } from \"./migration-findings.js\";\nimport { namesOriginalPackage } from \"./package-names.js\";\n\n/**\n * A JSON, JSONC or YAML config as a parser adapter reads it: a tree per document with the offsets\n * of its nodes in the text, so a migration replaces one key, value or word and keeps the rest of\n * the file byte for byte (comments, formatting, number literals, key order, duplicate keys).\n * Migrations that look for values by key path read the string values of the tree.\n */\n\ninterface Span {\n readonly start: number;\n readonly end: number;\n}\n\n/**\n * A text value: a JSON string, a YAML scalar. `start` and `end` cover the node with its quotes;\n * `content` covers its text as written: inside the quotes, and the content lines of a block\n * scalar without its `|` or `>` line. A YAML plain scalar that YAML reads as a number or a\n * boolean has its text as written as `value` (`1.10`, not 1.1).\n */\nexport interface TreeScalar extends Span {\n readonly kind: \"scalar\";\n readonly value: string;\n readonly content: Span;\n /** Line breaks fold to spaces in every YAML scalar but a literal block scalar (`|`). */\n readonly isFolded: boolean;\n /**\n * Whether the value differs from its text as written by more than folding: a JSON string or a\n * double-quoted YAML scalar with an escape (`\\\"`, `\\n`), a single-quoted one with `''`.\n */\n readonly isEscaped: boolean;\n /**\n * Writes a new value as the format needs it at this place, in the quoting of the old one when\n * that quoting can hold it. Undefined where a whole new value could change other places or the\n * type: a YAML block scalar, an anchored or a tagged scalar.\n */\n readonly encode: ((value: string) => string) | undefined;\n}\n\nexport interface TreeEntry {\n readonly key: TreeNode;\n readonly value: TreeNode;\n}\n\n/** A JSON object or YAML mapping, every entry as written, duplicate keys included, in order. */\nexport interface TreeMap extends Span {\n readonly kind: \"map\";\n readonly entries: readonly TreeEntry[];\n}\n\nexport interface TreeList extends Span {\n readonly kind: \"list\";\n readonly items: readonly TreeNode[];\n}\n\n/** A number, boolean or null in JSON, a YAML alias, an empty value. */\nexport interface TreeOther extends Span {\n readonly kind: \"other\";\n}\n\nexport type TreeNode = TreeMap | TreeList | TreeScalar | TreeOther;\n\n/**\n * The documents of a config (a YAML stream can hold several), or where the text stops being\n * valid. `offset` is undefined when the parser gives no place (it gave up on nesting deeper than\n * it can follow).\n */\nexport type DocumentRead =\n | { readonly kind: \"read\"; readonly documents: readonly TreeNode[] }\n | { readonly kind: \"unreadable\"; readonly offset: number | undefined };\n\n/** A key path: mapping keys and list indexes, from the root of the document. */\nexport type DocumentPath = readonly (string | number)[];\n\n/** A string value of a document with its key path. */\nexport interface DocumentString extends TreeScalar {\n readonly path: DocumentPath;\n}\n\nexport const isMap = (node: TreeNode | undefined): node is TreeMap => node?.kind === \"map\";\n\nexport const isScalar = (node: TreeNode): node is TreeScalar => node.kind === \"scalar\";\n\n/** The entries of `map` with a text key, as key and value. */\nexport function textEntries(map: TreeMap): { key: TreeScalar; value: TreeNode }[] {\n return map.entries.flatMap(({ key, value }) => (isScalar(key) ? [{ key, value }] : []));\n}\n\n/** The values of the entries of `map` whose key is `key`, in order. */\nexport function valuesAt(map: TreeMap, key: string): TreeNode[] {\n return textEntries(map)\n .filter((entry) => entry.key.value === key)\n .map((entry) => entry.value);\n}\n\n/** The maps at `key` of `map`, all of them if the key is there more than once. */\nexport function mapsAt(map: TreeMap, key: string): TreeMap[] {\n return valuesAt(map, key).filter(isMap);\n}\n\n/** The string values below `node` in document order; none below a key that is not text. */\nfunction stringsBelow(node: TreeNode, path: DocumentPath): DocumentString[] {\n switch (node.kind) {\n case \"scalar\":\n return [{ ...node, path }];\n case \"list\":\n return node.items.flatMap((item, index) => stringsBelow(item, [...path, index]));\n case \"map\":\n return textEntries(node).flatMap(({ key, value }) =>\n stringsBelow(value, [...path, key.value]),\n );\n default:\n return [];\n }\n}\n\n/** Every string value of the documents (not the keys), with its key path, in document order. */\nexport function documentStrings(documents: readonly TreeNode[]): DocumentString[] {\n return documents.flatMap((document) => stringsBelow(document, []));\n}\n\n/**\n * The key a value belongs to: the last key of its path, past list indexes, so the items of a list\n * (also of a nested list) belong to the key that holds the list.\n */\nexport function ownerKey(path: DocumentPath): string | undefined {\n return path.findLast((part): part is string => typeof part === \"string\");\n}\n\n/**\n * The migration of a config that the parser could not read. A broken config that names no\n * original package is not this migration's concern; one that does is left to the user, with the\n * place where it stops being valid.\n */\nexport function unreadableConfig(text: string, offset: number | undefined): FileMigration {\n if (!namesOriginalPackage(text)) {\n return unchanged(text);\n }\n const position =\n offset === undefined\n ? undefined\n : { line: lineAt(text, offset), column: columnAt(text, offset) };\n return { ...unchanged(text), manualSteps: [{ kind: \"config-unreadable\", position }] };\n}\n","/**\n * A file of the project that names another one by a relative reference (`./deps.json`,\n * `../schemas/Job.yaml`), which its tool resolves against the folder of the file.\n */\n\nconst SEPARATOR = \"/\";\nconst CURRENT_FOLDER = \".\";\nconst PARENT_FOLDER = \"..\";\n// A URL scheme (`https:`, `file:`): the tool fetches or reads such a file from where it says.\nconst URL_SCHEME = /^[a-z][a-z\\d+.-]*:/i;\n\n/** The project-relative path of `reference` from the folder of `fromPath`, or undefined. */\nfunction resolvedPath(fromPath: string, reference: string): string | undefined {\n const parts = fromPath.split(SEPARATOR).slice(0, -1);\n for (const part of reference.split(SEPARATOR)) {\n if (part === PARENT_FOLDER) {\n if (parts.pop() === undefined) {\n return undefined;\n }\n } else if (part !== CURRENT_FOLDER && part !== \"\") {\n parts.push(part);\n }\n }\n return parts.join(SEPARATOR);\n}\n\n/**\n * The project-relative path that `reference` in the file at `fromPath` names, or undefined for a\n * URL, an absolute path, a path outside the project, or the project folder itself.\n */\nexport function referencedProjectPath(fromPath: string, reference: string): string | undefined {\n const isOutside = URL_SCHEME.test(reference) || reference.startsWith(SEPARATOR);\n const path = isOutside ? undefined : resolvedPath(fromPath, reference);\n return path === \"\" ? undefined : path;\n}\n","import { documentStrings, isMap, type TreeNode, textEntries } from \"./config-documents.js\";\nimport { referencedProjectPath } from \"./relative-references.js\";\n\n/**\n * API descriptions are data: an example `command`, a `default`, a `script` in them is not a\n * command that anything runs, and a change to it reaches the generated JSDoc. They are not\n * migrated: the documents with a top-level key of their format, and the files that such a\n * document reaches by `$ref` (a split layout keeps a schema in `components/schemas/Job.yaml`,\n * which has no such key).\n */\n\n/**\n * The top-level keys of an API description: OpenAPI 3, Swagger 2, AsyncAPI, and the OpenAPI\n * Overlay and Arazzo documents that are written next to them.\n */\nconst API_DESCRIPTION_KEYS: readonly string[] = [\n \"openapi\",\n \"swagger\",\n \"asyncapi\",\n \"overlay\",\n \"arazzo\",\n];\nconst API_DESCRIPTION_KEY_SET: ReadonlySet<string> = new Set(API_DESCRIPTION_KEYS);\n\n/**\n * A line that can start such a key, in YAML (`openapi: 3.1.0`) or JSON (`\"openapi\": \"3.1.0\"`).\n * It only tells which texts to parse: the parsed keys decide.\n */\nconst DESCRIPTION_KEY_LINE_RE = new RegExp(\n `^[ \\\\t{]*[\"']?(?:${API_DESCRIPTION_KEYS.join(\"|\")})[\"']?[ \\\\t]*:`,\n \"m\",\n);\n\n/** Whether a text may be an API description, so it is worth parsing to tell. */\nexport const mayBeApiDescription = (text: string): boolean => DESCRIPTION_KEY_LINE_RE.test(text);\n\n/** True when a document of the stream has a top-level key of an API description. */\nexport const isApiDescription = (documents: readonly TreeNode[]): boolean =>\n documents.some(\n (root) =>\n isMap(root) && textEntries(root).some(({ key }) => API_DESCRIPTION_KEY_SET.has(key.value)),\n );\n\nconst REF_KEY = \"$ref\";\nconst FRAGMENT_START = \"#\";\n\n/**\n * The project files that the `$ref` values of the document at `path` name, without their\n * fragment (`./schemas/Job.yaml#/Job`). A reference inside the document (`#/components/…`), a URL\n * and a path outside the project name no file of it.\n */\nexport function referencedFiles(path: string, documents: readonly TreeNode[]): string[] {\n return documentStrings(documents)\n .filter((string) => string.path.at(-1) === REF_KEY)\n .flatMap(({ value }) => {\n // `#/components/…` leaves no file part, which names the folder of the document: no file.\n const file = value.split(FRAGMENT_START)[0] ?? \"\";\n const referenced = referencedProjectPath(path, file);\n return referenced === undefined ? [] : [referenced];\n });\n}\n","/**\n * The programs that run another program or install packages, so the migration can tell the\n * generator command and package names from the words of other commands. `docker run -it` keeps\n * its flag, `npm run openapi-typescript` names a script, and `npm i openapi-fetch` a package.\n */\n\n/** A program that runs the program named by its first argument that is not an option. */\nexport interface Launcher {\n /** The words that start it: `npx`, or `pnpm dlx`. */\n readonly words: readonly string[];\n /** Options whose value is the next word, so that word is not the program. */\n readonly valueOptions: ReadonlySet<string>;\n /** Options whose value is a package to install first (`npx -p <package>`). */\n readonly packageOptions: ReadonlySet<string>;\n /** Arguments before the program that are not options: the image of `docker run <image>`. */\n readonly operands: number;\n}\n\nconst NONE: ReadonlySet<string> = new Set();\n/** `npx -p`, `pnpm dlx --package`, `yarn dlx -p`, `bunx -p`. */\nconst PACKAGE_OPTIONS: ReadonlySet<string> = new Set([\"-p\", \"--package\"]);\n/** Options of npm, pnpm and yarn that take a value and may come before the subcommand. */\nconst PACKAGE_MANAGER_OPTIONS: ReadonlySet<string> = new Set([\n \"--filter\",\n \"-F\",\n \"--dir\",\n \"-C\",\n \"--prefix\",\n \"--cwd\",\n \"--workspace\",\n]);\n\nconst launcher = (\n words: readonly string[],\n packageOptions: ReadonlySet<string> = NONE,\n valueOptions: ReadonlySet<string> = NONE,\n): Launcher => {\n const allValueOptions = new Set([...valueOptions, ...packageOptions]);\n return { words, packageOptions, valueOptions: allValueOptions, operands: 0 };\n};\n\n/** Options of `docker run` and `docker exec` that take a value. */\nconst CONTAINER_OPTIONS: ReadonlySet<string> = new Set([\n \"-e\",\n \"--env\",\n \"--env-file\",\n \"-v\",\n \"--volume\",\n \"--mount\",\n \"-p\",\n \"--publish\",\n \"-w\",\n \"--workdir\",\n \"-u\",\n \"--user\",\n \"--name\",\n \"--network\",\n \"--entrypoint\",\n \"--platform\",\n \"-l\",\n \"--label\",\n \"-h\",\n \"--hostname\",\n \"--add-host\",\n]);\n\n/** `docker run <image> <command>`: the image comes first, then the command run in it. */\nconst container = (words: readonly string[]): Launcher => ({\n ...launcher(words, NONE, CONTAINER_OPTIONS),\n operands: 1,\n});\n\n/** A launcher with arguments before the program: the duration of `timeout 60 <command>`. */\nconst withOperands = (\n words: readonly string[],\n operands: number,\n valueOptions: ReadonlySet<string> = NONE,\n): Launcher => ({ ...launcher(words, NONE, valueOptions), operands });\n\n/** Options of `xargs` that take a value (GNU and BSD). */\nconst XARGS_OPTIONS: ReadonlySet<string> = new Set([\n \"-I\",\n \"-J\",\n \"-L\",\n \"-n\",\n \"-P\",\n \"-R\",\n \"-S\",\n \"-s\",\n \"-d\",\n \"-E\",\n \"-a\",\n \"--max-args\",\n \"--max-procs\",\n \"--max-lines\",\n \"--delimiter\",\n \"--arg-file\",\n]);\n\n/** Options of `node`, which `tsx` and `ts-node` take too, that are followed by a value. */\nconst NODE_OPTIONS: ReadonlySet<string> = new Set([\n \"-r\",\n \"--require\",\n \"--import\",\n \"--loader\",\n \"--env-file\",\n]);\n\n/**\n * The launchers, longest first, so `pnpm dlx` wins over `pnpm`. A bare `pnpm <name>`, `yarn\n * <name>` or `bun <name>` runs the binary `<name>` when no script has that name; `run` names a\n * script first, so `npm run`, `yarn run` and `bun run` are no launchers: a word after them that\n * names an old package is reported (command-migration.ts).\n */\nexport const LAUNCHERS: readonly Launcher[] = [\n launcher([\"npm\", \"exec\"], PACKAGE_OPTIONS),\n launcher([\"npm\", \"x\"], PACKAGE_OPTIONS),\n launcher([\"pnpm\", \"exec\"], NONE, PACKAGE_MANAGER_OPTIONS),\n launcher([\"pnpm\", \"dlx\"], new Set([\"--package\"])),\n launcher([\"yarn\", \"dlx\"], PACKAGE_OPTIONS),\n launcher([\"yarn\", \"exec\"]),\n launcher([\"bun\", \"x\"], PACKAGE_OPTIONS),\n withOperands([\"yarn\", \"workspace\"], 1),\n launcher([\"dotenvx\", \"run\"], NONE, new Set([\"-f\", \"--env-file\", \"-e\", \"--env\", \"--convention\"])),\n launcher(\n [\"doppler\", \"run\"],\n NONE,\n new Set([\"-p\", \"--project\", \"-c\", \"--config\", \"--token\", \"--mount\", \"--scope\"]),\n ),\n launcher([\"nx\", \"exec\"], NONE, new Set([\"--projects\", \"-p\", \"--exclude\"])),\n launcher([\"deno\", \"run\"], NONE, new Set([\"--config\", \"-c\", \"--import-map\", \"--location\"])),\n launcher([\"deno\", \"x\"]),\n launcher([\"npx\"], PACKAGE_OPTIONS, new Set([\"-c\", \"--call\"])),\n launcher([\"pnpx\"], PACKAGE_OPTIONS),\n launcher([\"bunx\"], PACKAGE_OPTIONS),\n // Like a bare `pnpm <name>`, a bare `bun <name>` runs the binary when no script has the name.\n launcher([\"bun\"], NONE, new Set([\"--cwd\", \"--filter\", \"-F\"])),\n launcher([\"corepack\"]),\n launcher([\"pnpm\"], NONE, PACKAGE_MANAGER_OPTIONS),\n launcher([\"yarn\"], NONE, PACKAGE_MANAGER_OPTIONS),\n launcher([\"node\"], NONE, NODE_OPTIONS),\n launcher([\"tsx\"], NONE, NODE_OPTIONS),\n launcher([\"ts-node\"], NONE, new Set([...NODE_OPTIONS, \"-P\", \"--project\", \"-O\", \"--compiler\"])),\n launcher([\"cross-env\"]),\n launcher([\"dotenv\"], NONE, new Set([\"-e\", \"-c\", \"-v\"])),\n launcher([\"env\"], NONE, new Set([\"-u\", \"--unset\", \"-C\", \"--chdir\"])),\n launcher([\"exec\"], NONE, new Set([\"-a\"])),\n launcher([\"command\"]),\n launcher([\"time\"]),\n launcher([\"nice\"], NONE, new Set([\"-n\", \"--adjustment\"])),\n withOperands([\"timeout\"], 1, new Set([\"-s\", \"--signal\", \"-k\", \"--kill-after\"])),\n launcher([\"xargs\"], NONE, XARGS_OPTIONS),\n launcher([\"nohup\"]),\n launcher([\"sudo\"], NONE, new Set([\"-u\", \"-g\"])),\n // The shell form of Dockerfile instructions runs the rest of the line in a shell.\n launcher([\"RUN\"], NONE, new Set([\"--mount\", \"--network\", \"--security\"])),\n launcher([\"CMD\"]),\n launcher([\"ENTRYPOINT\"]),\n container([\"docker\", \"run\"]),\n container([\"docker\", \"exec\"]),\n container([\"docker\", \"compose\", \"run\"]),\n container([\"docker\", \"compose\", \"exec\"]),\n container([\"podman\", \"run\"]),\n container([\"podman\", \"exec\"]),\n];\n\n/** A subcommand that installs, updates or removes the packages named by its other arguments. */\nexport interface Installer {\n readonly words: readonly string[];\n}\n\nconst installers = (manager: string, subcommands: readonly string[]): Installer[] =>\n subcommands.map((subcommand) => ({ words: [manager, subcommand] }));\n\nconst NPM_INSTALL = [\"install\", \"i\", \"add\", \"update\", \"up\", \"uninstall\", \"remove\", \"rm\", \"un\"];\n\nexport const INSTALLERS: readonly Installer[] = [\n ...installers(\"npm\", NPM_INSTALL),\n ...installers(\"pnpm\", [\"add\", \"update\", \"up\", \"remove\", \"rm\", \"uninstall\", \"un\"]),\n ...installers(\"yarn\", [\"add\", \"upgrade\", \"up\", \"remove\"]),\n // Yarn 1 installs global packages with `yarn global add`.\n { words: [\"yarn\", \"global\", \"add\"] },\n { words: [\"yarn\", \"global\", \"remove\"] },\n ...installers(\"bun\", [\"add\", \"a\", \"update\", \"remove\", \"rm\", \"install\", \"i\"]),\n ...installers(\"deno\", [\"add\", \"install\", \"i\", \"remove\", \"uninstall\"]),\n];\n\n/** `npm:` names a package in Deno commands (`deno run npm:openapi-typescript`). */\nexport const NPM_SPECIFIER_PREFIX = \"npm:\";\n","/**\n * The words of shell text: where a word ends, and its value after quote removal (POSIX 2.2, 2.3).\n * shell-words.ts splits a text into commands of these words.\n */\n\n/** One word of a command. `start` and `end` are offsets of the word as written, quotes included. */\nexport interface ShellWord {\n readonly start: number;\n readonly end: number;\n /** The word after quote removal: `\"a b\"` is `a b`. */\n readonly value: string;\n /** The word as written: `\"a b\"` is `\"a b\"`. */\n readonly raw: string;\n}\n\n/** A simple command: the words between two control operators. */\nexport type ShellCommand = readonly ShellWord[];\n\n/** Characters that end a command: `;`, `&`, `|`, subshells and command substitution. */\nexport const COMMAND_SEPARATORS: ReadonlySet<string> = new Set([\n \";\",\n \"&\",\n \"|\",\n \"(\",\n \")\",\n \"`\",\n \"\\n\",\n]);\n/** Characters that end a word without ending the command: blanks and redirections. */\nexport const WORD_BREAKS: ReadonlySet<string> = new Set([\" \", \"\\t\", \"\\r\", \"<\", \">\"]);\nconst BACKSLASH = \"\\\\\";\n/** Inside double quotes a backslash escapes only these characters (POSIX 2.2.3). */\nconst DOUBLE_QUOTE_ESCAPES: ReadonlySet<string> = new Set([\"$\", \"`\", '\"', BACKSLASH, \"\\n\"]);\n\n/** A quoted part of a word: where it ends (after the closing quote) and its value. */\ninterface QuotedPart {\n readonly end: number;\n readonly value: string;\n}\n\n/** A single-quoted part starting at `start`: everything up to the next `'` is literal. */\nfunction singleQuoted(text: string, start: number): QuotedPart {\n const close = text.indexOf(\"'\", start + 1);\n const end = close === -1 ? text.length : close + 1;\n return { end, value: text.slice(start + 1, close === -1 ? text.length : close) };\n}\n\n/** A double-quoted part starting at `start`, with its backslash escapes resolved. */\nfunction doubleQuoted(text: string, start: number): QuotedPart {\n let value = \"\";\n let index = start + 1;\n while (index < text.length && text[index] !== '\"') {\n const next = text[index + 1] ?? \"\";\n const isEscape = text[index] === BACKSLASH && DOUBLE_QUOTE_ESCAPES.has(next);\n value += isEscape ? (next === \"\\n\" ? \"\" : next) : text[index];\n index += isEscape ? 2 : 1;\n }\n return { end: Math.min(index + 1, text.length), value };\n}\n\nexport const isLineContinuation = (text: string, index: number): boolean =>\n text[index] === BACKSLASH && (text[index + 1] === \"\\n\" || text.startsWith(\"\\r\\n\", index + 1));\n\n/** `$((…))`: an arithmetic expansion (POSIX 2.6.4), whose `<<` is a shift, not a here-document. */\nconst ARITHMETIC_OPEN = \"$((\";\nconst NESTING_OPEN = \"(\";\nconst NESTING_CLOSE = \")\";\n/** The parentheses that `$((` opens and `))` closes. */\nconst ARITHMETIC_DEPTH = 2;\n\n/**\n * The arithmetic expansion at `start`, up to the `))` that closes it, as written: it holds an\n * expression, not commands, so its parentheses do not end the command. Undefined when it is not\n * closed, a syntax error that the shell reports.\n */\nfunction arithmeticExpansion(text: string, start: number): QuotedPart | undefined {\n let depth = ARITHMETIC_DEPTH;\n for (let index = start + ARITHMETIC_OPEN.length; index < text.length; index++) {\n depth += text[index] === NESTING_OPEN ? 1 : text[index] === NESTING_CLOSE ? -1 : 0;\n if (depth === 0) {\n return { end: index + 1, value: text.slice(start, index + 1) };\n }\n }\n return undefined;\n}\n\n/** `${…}`: a parameter expansion (POSIX 2.6.2), one part of a word up to its closing brace. */\nexport const PARAMETER_OPEN = \"${\";\nconst PARAMETER_CLOSE = \"}\";\n\n/**\n * The end of the parameter expansion at `start`, after the `}` that closes it, or undefined when\n * none does. A blank inside it does not end the word (`${GEN:-npx openapi-typescript}`), and a\n * quoted string, an escape or a nested expansion inside it is skipped whole.\n */\nexport function parameterExpansionEnd(text: string, start: number): number | undefined {\n let depth = 1;\n for (let index = start + PARAMETER_OPEN.length; index < text.length; ) {\n if (text.startsWith(PARAMETER_OPEN, index)) {\n depth += 1;\n index += PARAMETER_OPEN.length;\n } else if (text[index] === PARAMETER_CLOSE) {\n depth -= 1;\n index += 1;\n if (depth === 0) {\n return index;\n }\n } else {\n index = quotedOrEscapedEnd(text, index) ?? index + 1;\n }\n }\n return undefined;\n}\n\n/** The end of a quoted string or an escape at `index`, or undefined for another character. */\nfunction quotedOrEscapedEnd(text: string, index: number): number | undefined {\n const char = text[index];\n if (char === \"'\") {\n return singleQuoted(text, index).end;\n }\n if (char === '\"') {\n return doubleQuoted(text, index).end;\n }\n return char === BACKSLASH ? index + 2 : undefined;\n}\n\n/** The expansion parts of a word that are read whole: `$((…))` and `${…}`, as written. */\nfunction expansionPart(text: string, index: number): QuotedPart | undefined {\n if (text.startsWith(ARITHMETIC_OPEN, index)) {\n return arithmeticExpansion(text, index);\n }\n const end = text.startsWith(PARAMETER_OPEN, index)\n ? parameterExpansionEnd(text, index)\n : undefined;\n return end === undefined ? undefined : { end, value: text.slice(index, end) };\n}\n\n/**\n * The part of a word that starts at `index`: a quoted string, an escape, an arithmetic or a\n * parameter expansion, or one character.\n */\nexport function wordPart(text: string, index: number): QuotedPart {\n const char = text[index] as string;\n const expansion = expansionPart(text, index);\n if (expansion !== undefined) {\n return expansion;\n }\n if (char === \"'\") {\n return singleQuoted(text, index);\n }\n if (char === '\"') {\n return doubleQuoted(text, index);\n }\n if (char === BACKSLASH && index + 1 < text.length) {\n return { end: index + 2, value: text[index + 1] as string };\n }\n return { end: index + 1, value: char };\n}\n\n/** The head of a bash array assignment, `NAME=` or `NAME+=` right before its `(`. */\nconst ARRAY_HEAD_RE = /^[A-Za-z_][A-Za-z0-9_]*\\+?=$/;\n\n/**\n * The end of the list of a bash array assignment (`GEN=(npx openapi-typescript)`) at `index`,\n * after its `)`: bash reads it as part of the assignment word, not as a subshell. Quotes and\n * escapes in it are skipped whole. Undefined when no `)` closes it.\n */\nfunction arrayListEnd(text: string, index: number): number | undefined {\n let depth = 0;\n for (let at = index; at < text.length; ) {\n depth += text[at] === NESTING_OPEN ? 1 : text[at] === NESTING_CLOSE ? -1 : 0;\n if (depth === 0) {\n return at + 1;\n }\n at = quotedOrEscapedEnd(text, at) ?? at + 1;\n }\n return undefined;\n}\n\nconst endsWord = (text: string, index: number): boolean => {\n const char = text[index] as string;\n return WORD_BREAKS.has(char) || COMMAND_SEPARATORS.has(char) || isLineContinuation(text, index);\n};\n\n/** The word that starts at `start` (not a blank, separator or comment). */\nexport function readWord(text: string, start: number): ShellWord {\n let value = \"\";\n let index = start;\n while (index < text.length) {\n const isArrayList =\n text[index] === NESTING_OPEN && ARRAY_HEAD_RE.test(text.slice(start, index));\n const list = isArrayList ? arrayListEnd(text, index) : undefined;\n if (list === undefined && endsWord(text, index)) {\n break;\n }\n const part =\n list === undefined ? wordPart(text, index) : { end: list, value: text.slice(index, list) };\n value += part.value;\n index = part.end;\n }\n return { start, end: index, value, raw: text.slice(start, index) };\n}\n","import { type ShellCommand, type ShellWord, wordPart } from \"./shell-word-parts.js\";\n\n/**\n * The variables a shell text sets itself: `GEN=\"npx openapi-typescript\"` alone or before a\n * command, and the arguments of `export`, `readonly`, `local`, `declare` and `typeset`. A later\n * `$GEN a.yaml -it` runs what the value holds, so the value is read as a command line where it is\n * set, and the commands that expand the variable know which program it runs.\n */\n\n/** A word that assigns a variable (POSIX 2.9.1): a name, `=`, then the value. */\nexport const ASSIGNMENT_RE = /^([A-Za-z_][A-Za-z0-9_]*)=/;\n\n/** Builtins whose `NAME=value` arguments set variables of the shell. */\nconst DECLARATION_BUILTINS: ReadonlySet<string> = new Set([\n \"export\",\n \"readonly\",\n \"local\",\n \"declare\",\n \"typeset\",\n]);\n\nconst QUOTES: ReadonlySet<string> = new Set([\"'\", '\"']);\n/**\n * Characters that make an unquoted value more than a plain command line: quotes and escapes (its\n * offsets would not map onto the value), and expansions, whose result only the shell knows.\n */\nconst UNPLAIN_RE = /['\"\\\\$`]/;\n\n/** One assignment: the variable, its value after quote removal, and its word. */\nexport interface ShellAssignment {\n readonly name: string;\n readonly value: string;\n readonly word: ShellWord;\n}\n\n/** How many words at the start of a command are assignments. */\nfunction leadingAssignments(command: ShellCommand): number {\n const index = command.findIndex((word) => !ASSIGNMENT_RE.test(word.raw));\n return index === -1 ? command.length : index;\n}\n\n/** The assignments of one command, in order. */\nexport function shellAssignments(command: ShellCommand): ShellAssignment[] {\n const count = leadingAssignments(command);\n const isDeclaration = DECLARATION_BUILTINS.has(command[count]?.value ?? \"\");\n const words = [...command.slice(0, count), ...(isDeclaration ? command.slice(count + 1) : [])];\n return words.flatMap((word) => {\n const match = ASSIGNMENT_RE.exec(word.raw);\n const name = match?.[1];\n return name === undefined ? [] : [{ name, value: word.value.slice(name.length + 1), word }];\n });\n}\n\nconst ARRAY_OPEN = \"(\";\nconst ARRAY_CLOSE = \")\";\n\n/**\n * Whether an assignment sets a bash array (`GEN=(npx openapi-typescript)`). Its items are read\n * as a command line where they are written, but what an expansion of it runs (`$GEN` is the first\n * item, `\"${GEN[@]}\"` all of them) is not read: the commands after it are reported.\n */\nexport const isArrayAssignment = (assignment: ShellAssignment): boolean =>\n assignment.word.raw.startsWith(ARRAY_OPEN, assignment.name.length + 1);\n\n/**\n * The value of an assignment as written and its offset in the text, when its offsets map one to\n * one onto the text: a plain value, one quoted string (read as written, as a quoted command line\n * is), or the items of an array. Undefined for a value built of several parts.\n */\nexport function assignmentValueText(\n assignment: ShellAssignment,\n): { readonly text: string; readonly start: number } | undefined {\n const at = assignment.name.length + 1;\n const raw = assignment.word.raw.slice(at);\n const start = assignment.word.start + at;\n const quote = raw[0] ?? \"\";\n if (isArrayAssignment(assignment)) {\n return raw.endsWith(ARRAY_CLOSE) ? { text: raw.slice(1, -1), start: start + 1 } : undefined;\n }\n if (QUOTES.has(quote)) {\n const isOneString =\n raw.length > 1 && raw.endsWith(quote) && wordPart(raw, 0).end === raw.length;\n return isOneString ? { text: raw.slice(1, -1), start: start + 1 } : undefined;\n }\n return UNPLAIN_RE.test(raw) ? undefined : { text: raw, start };\n}\n","import { INSTALLERS, LAUNCHERS, type Launcher } from \"./command-launchers.js\";\nimport { ASSIGNMENT_RE } from \"./shell-assignments.js\";\nimport type { ShellCommand, ShellWord } from \"./shell-words.js\";\n\n/**\n * What the words of one shell command are: which word is the program it runs, after launchers\n * such as `npx`, `pnpm exec`, `cross-env` or `node`, and which words name packages to install.\n * The other words are arguments of whichever program owns them, and are never renamed for it.\n */\n\n/** A word that names a package, and the package part of it (`--package=x` names `x`). */\nexport interface PackageWord {\n readonly word: ShellWord;\n readonly value: string;\n}\n\nexport interface CommandRoles {\n /** The index of the program's word, or undefined for an install or an empty command. */\n readonly program: number | undefined;\n readonly packages: readonly PackageWord[];\n}\n\nconst END_OF_OPTIONS = \"--\";\n\nconst isOption = (word: ShellWord): boolean => word.value.startsWith(\"-\") && word.value.length > 1;\n\n/** The first word after the `NAME=value` assignments that may start a command. */\nfunction skipAssignments(words: ShellCommand, start: number): number {\n let index = start;\n while (index < words.length && ASSIGNMENT_RE.test((words[index] as ShellWord).raw)) {\n index++;\n }\n return index;\n}\n\n/** The first entry whose words start the command at `index`. */\nfunction matchingPrefix<T extends { readonly words: readonly string[] }>(\n entries: readonly T[],\n words: ShellCommand,\n index: number,\n): T | undefined {\n return entries.find((entry) =>\n entry.words.every((name, offset) => words[index + offset]?.value === name),\n );\n}\n\n/** An option with its value in the same word (`--package=x`): the package it names, if any. */\nfunction inlineOptionPackage(word: ShellWord, launcher: Launcher): PackageWord | undefined {\n const equals = word.value.indexOf(\"=\");\n const name = word.value.slice(0, equals);\n return launcher.packageOptions.has(name)\n ? { word, value: word.value.slice(equals + 1) }\n : undefined;\n}\n\n/**\n * The index of the program a launcher runs: the first word after its options. Options that take\n * a value skip it, and the values of package options are collected into `packages`.\n */\nfunction launchedProgram(\n words: ShellCommand,\n start: number,\n launcher: Launcher,\n packages: PackageWord[],\n): number {\n let index = start;\n while (index < words.length && isOption(words[index] as ShellWord)) {\n const option = words[index++] as ShellWord;\n if (option.value === END_OF_OPTIONS) {\n break;\n }\n const inline = option.value.includes(\"=\") ? inlineOptionPackage(option, launcher) : undefined;\n if (inline !== undefined) {\n packages.push(inline);\n }\n const value = words[index];\n if (!option.value.includes(\"=\") && launcher.valueOptions.has(option.value) && value) {\n if (launcher.packageOptions.has(option.value)) {\n packages.push({ word: value, value: value.value });\n }\n index++;\n }\n }\n return index;\n}\n\n/** The package arguments of an install command: every word that is not an option. */\nconst installArguments = (words: ShellCommand, start: number): PackageWord[] =>\n words\n .slice(start)\n .filter((word) => !isOption(word))\n .map((word) => ({ word, value: word.value }));\n\n/** The roles of the words of one simple command. */\nexport function commandRoles(words: ShellCommand): CommandRoles {\n const packages: PackageWord[] = [];\n let index = skipAssignments(words, 0);\n while (index < words.length) {\n const installer = matchingPrefix(INSTALLERS, words, index);\n if (installer !== undefined) {\n packages.push(...installArguments(words, index + installer.words.length));\n return { program: undefined, packages };\n }\n const launcher = matchingPrefix(LAUNCHERS, words, index);\n if (launcher === undefined) {\n return { program: index, packages };\n }\n const start = index + launcher.words.length;\n const afterOptions = launchedProgram(words, start, launcher, packages);\n index = skipAssignments(words, afterOptions + launcher.operands);\n }\n return { program: undefined, packages };\n}\n","import { NPM_SPECIFIER_PREFIX } from \"./command-launchers.js\";\nimport type { ManualStep } from \"./migration-findings.js\";\nimport { GENERATOR_COMMAND, oldPackageInNodeModules, PACKAGE_RENAMES } from \"./package-names.js\";\nimport type { ShellCommand } from \"./shell-words.js\";\n\n/** The words of a command that name the original packages, apart from the roles they have. */\n\n/** A package name with an optional `npm:` prefix and `@version`. */\nexport function packageReference(value: string): { name: string; isPinned: boolean } {\n const bare = value.startsWith(NPM_SPECIFIER_PREFIX)\n ? value.slice(NPM_SPECIFIER_PREFIX.length)\n : value;\n const at = bare.indexOf(\"@\", 1);\n return { name: at === -1 ? bare : bare.slice(0, at), isPinned: at !== -1 };\n}\n\n/**\n * Whether a word names an original package: its name (`openapi-fetch`, `npm:x@1`), a file of it\n * in `node_modules`, or a path to the generator's binary (`$(npm bin)/openapi-typescript`).\n */\nfunction namesOldPackage(value: string): boolean {\n return (\n PACKAGE_RENAMES.has(packageReference(value).name) ||\n oldPackageInNodeModules(value) !== undefined ||\n value.endsWith(`/${GENERATOR_COMMAND}`)\n );\n}\n\n/** A manual step at an offset of the text. */\nexport interface WordStep {\n readonly offset: number;\n readonly manualStep: ManualStep;\n}\n\n/**\n * The words that name an original package at offsets no finding renamed or reported: an argument\n * of a program the tool does not know (`chronic openapi-typescript`), or a script name of\n * `npm run`. The tool cannot tell what runs them, so each is a manual step, never silence.\n */\nexport function unmigratedWordFindings(\n words: ShellCommand,\n handledOffsets: ReadonlySet<number>,\n locate: (offset: number) => string,\n): WordStep[] {\n return words\n .filter((word) => !handledOffsets.has(word.start) && namesOldPackage(word.value))\n .map((word) => ({\n offset: word.start,\n manualStep: { kind: \"old-name-in-command\", location: locate(word.start), word: word.value },\n }));\n}\n","import { commandRoles } from \"./command-roles.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { GENERATOR_COMMAND } from \"./package-names.js\";\nimport type { ShellCommand, ShellWord } from \"./shell-words.js\";\nimport type { VariableProgram } from \"./variable-programs.js\";\n\n/**\n * What the commands of a file know about its variables, and which commands run the generator.\n * The command migration reads them; each file kind (a Makefile, a Dockerfile, a YAML `env`, the\n * assignments of a shell text) answers them from its own definitions (shell-variables.ts).\n */\n\nconst RECIPE_PREFIX_RE = /^[@+-]+(?=.)/;\n\n/**\n * The command with the recipe prefix taken off the value of its first word, so `@npx …` runs\n * `npx`. A shell command never starts with an option, so this changes nothing else.\n */\nexport function withoutRecipePrefix(words: ShellCommand): ShellCommand {\n const [first, ...rest] = words;\n if (first === undefined || !RECIPE_PREFIX_RE.test(first.value)) {\n return words;\n }\n return [{ ...first, value: first.value.replace(RECIPE_PREFIX_RE, \"\") }, ...rest];\n}\n\n/** A program word that expands one variable the file sets: as written, and what it runs. */\nexport interface VariableProgramUse {\n readonly written: string;\n readonly program: VariableProgram;\n}\n\n/** A whole word that expands one variable the file sets: as written, and the value it gets. */\nexport interface VariableReference {\n readonly written: string;\n readonly value: string;\n}\n\n/**\n * The variables of a file as its commands use them. A program word can run the generator through\n * a variable (`$(OAT)` in a Makefile with `OAT := openapi-typescript`): the variable's value is\n * migrated where it is set, the flags after it where it is used. An argument can expand a\n * variable that holds flags (`$(FLAGS)` with `FLAGS := -it`); the variable may serve other\n * commands too, so its old flags are reported, not changed.\n */\nexport interface FileVariables {\n /** What a program word runs through a variable, or undefined when it expands none. */\n programAt(program: ShellWord): VariableProgramUse | undefined;\n referenceAt(word: ShellWord): VariableReference | undefined;\n}\n\nexport const NO_VARIABLES: FileVariables = {\n programAt: () => undefined,\n referenceAt: () => undefined,\n};\n\n/**\n * Whether a command runs the generator by its old name, so a variable set to it holds the\n * generator command.\n */\nexport function runsGenerator(command: ShellCommand): boolean {\n const words = withoutRecipePrefix(command);\n const { program } = commandRoles(words);\n const word = program === undefined ? undefined : words[program];\n return word !== undefined && packageReference(word.value).name === GENERATOR_COMMAND;\n}\n","import { PARAMETER_OPEN, parameterExpansionEnd } from \"./shell-word-parts.js\";\n\n/**\n * The parameter expansions of a word that give a word of their own when the variable is unset or\n * empty (POSIX 2.6.2): `${GEN:-npx openapi-typescript}`, `${GEN:=…}`, and when it is set:\n * `${GEN:+…}`. That word is command text as written, the common \"overridable command\" idiom, so\n * it is read as a command line where it is written. The value is the variable's or that word,\n * which only the shell knows.\n */\n\n/** How an expansion uses its word: instead of an unset variable, as its value too, or if set. */\nexport type ExpansionUse = \"default\" | \"assign\" | \"alternative\";\n\n/** An expansion with a word: the variable, how it uses the word, the word and where it is. */\nexport interface WordExpansion {\n readonly name: string;\n readonly use: ExpansionUse;\n /** The word as written, between the operator and the closing brace. */\n readonly text: string;\n /** The offset of `text` in the text that was scanned. */\n readonly start: number;\n /** The offsets of the whole expansion, `${` to `}`. */\n readonly expansionStart: number;\n readonly expansionEnd: number;\n}\n\n/** `${NAME`, then an operator with a word: `-`, `=`, `+`, each also with `:` before it. */\nconst EXPANSION_HEAD_RE = /^\\$\\{([A-Za-z_][A-Za-z0-9_]*):?([-=+])/;\nconst USES: Readonly<Record<string, ExpansionUse>> = {\n \"-\": \"default\",\n \"=\": \"assign\",\n \"+\": \"alternative\",\n};\nconst SINGLE_QUOTE = \"'\";\nconst BACKSLASH = \"\\\\\";\n\n/** The expansion with a word at `start` of `text`, or undefined for any other expansion. */\nfunction expansionAt(text: string, start: number): WordExpansion | undefined {\n const head = EXPANSION_HEAD_RE.exec(text.slice(start));\n const end = head === null ? undefined : parameterExpansionEnd(text, start);\n if (head === null || end === undefined) {\n return undefined;\n }\n const wordStart = start + head[0].length;\n return {\n name: head[1] as string,\n use: USES[head[2] as string] as ExpansionUse,\n text: text.slice(wordStart, end - 1),\n start: wordStart,\n expansionStart: start,\n expansionEnd: end,\n };\n}\n\n/**\n * The expansions with a word in a word as written, outside single quotes (where `$` is a\n * character), in double quotes too. Nested ones are found when their word is read as commands.\n */\nexport function wordExpansions(raw: string): WordExpansion[] {\n const found: WordExpansion[] = [];\n for (let index = 0; index < raw.length; ) {\n const char = raw[index];\n if (char === SINGLE_QUOTE) {\n const close = raw.indexOf(SINGLE_QUOTE, index + 1);\n index = close === -1 ? raw.length : close + 1;\n } else if (char === BACKSLASH) {\n index += 2;\n } else if (raw.startsWith(PARAMETER_OPEN, index)) {\n const expansion = expansionAt(raw, index);\n found.push(...(expansion === undefined ? [] : [expansion]));\n index = expansion?.expansionEnd ?? index + PARAMETER_OPEN.length;\n } else {\n index += 1;\n }\n }\n return found;\n}\n\nconst DOUBLE_QUOTE = '\"';\n\n/** The expansion that is a whole word, also in double quotes: `${GEN:-…}`, `\"${GEN:-…}\"`. */\nexport function wholeWordExpansion(raw: string): WordExpansion | undefined {\n const isQuoted = raw.length > 1 && raw.startsWith(DOUBLE_QUOTE) && raw.endsWith(DOUBLE_QUOTE);\n const inner = isQuoted ? 1 : 0;\n const [expansion] = wordExpansions(raw);\n const isWhole =\n expansion?.expansionStart === inner && expansion.expansionEnd === raw.length - inner;\n return isWhole ? expansion : undefined;\n}\n","import { readWord } from \"./shell-word-parts.js\";\n\n/**\n * Here-documents (POSIX 2.7.4): the lines after a command line that are the input of a command.\n * Their body is data, so its quotes do not open a word (shell-words.ts reads the commands).\n */\n\n/** `<<WORD`, `<<'WORD'`, `<<-WORD`: a here-document (POSIX 2.7.4); `<<<` is a here-string. */\nconst HEREDOC_OPERATOR = \"<<\";\nconst HERE_STRING_OPERATOR = \"<<<\";\nconst STRIP_TABS = \"-\";\nconst LINE_BREAK = \"\\n\";\nconst LEADING_TABS_RE = /^\\t+/;\nconst CARRIAGE_RETURN_RE = /\\r$/;\n\n/** A here-document waiting for its body: the lines after the line of its operator. */\nexport interface PendingHeredoc {\n readonly delimiter: string;\n readonly isTabStripped: boolean;\n /** The index of the command whose input the body is. */\n readonly command: number;\n /** Spaces at the start of each line that the shell does not see (shellCommands). */\n readonly indent: number;\n}\n\n/** The body of a here-document, and the command whose input it is. */\nexport interface HeredocBody {\n readonly command: number;\n readonly start: number;\n readonly text: string;\n}\n\n/**\n * The here-document operator at `index` and where its delimiter word ends, or undefined. A\n * here-string operator gives no here-document, and ends where its `<<<` ends.\n */\nexport function heredocAt(\n text: string,\n index: number,\n where: { readonly command: number; readonly indent: number },\n): { pending?: PendingHeredoc; end: number } | undefined {\n if (text.startsWith(HERE_STRING_OPERATOR, index)) {\n return { end: index + HERE_STRING_OPERATOR.length };\n }\n if (!text.startsWith(HEREDOC_OPERATOR, index)) {\n return undefined;\n }\n let start = index + HEREDOC_OPERATOR.length;\n const isTabStripped = text[start] === STRIP_TABS;\n start += isTabStripped ? 1 : 0;\n while (text[start] === \" \" || text[start] === \"\\t\") {\n start++;\n }\n const word = readWord(text, start);\n // The quotes of the delimiter only turn off expansion in the body; its value ends the body.\n const pending: PendingHeredoc = { delimiter: word.value, isTabStripped, ...where };\n return word.value === \"\" ? undefined : { pending, end: word.end };\n}\n\n/** Whether the line from `lineStart` to `end` is the delimiter line of a here-document. */\nfunction isDelimiterLine(text: string, lineStart: number, end: number, heredoc: PendingHeredoc) {\n let first = lineStart;\n while (first < lineStart + heredoc.indent && text[first] === \" \") {\n first++;\n }\n const line = text.slice(first, end).replace(CARRIAGE_RETURN_RE, \"\");\n const compared = heredoc.isTabStripped ? line.replace(LEADING_TABS_RE, \"\") : line;\n return compared === heredoc.delimiter;\n}\n\n/** The body of one here-document from `start`, and where its delimiter line ends. */\nfunction readBody(text: string, start: number, heredoc: PendingHeredoc) {\n let lineStart = start;\n while (lineStart < text.length) {\n const lineEnd = text.indexOf(LINE_BREAK, lineStart);\n const end = lineEnd === -1 ? text.length : lineEnd;\n if (isDelimiterLine(text, lineStart, end, heredoc)) {\n const body = { command: heredoc.command, start, text: text.slice(start, lineStart) };\n return { body, end: Math.min(end + 1, text.length) };\n }\n lineStart = end + 1;\n }\n // No delimiter line: the body runs to the end of the text, as the shell reads it.\n return { body: { command: heredoc.command, start, text: text.slice(start) }, end: text.length };\n}\n\n/** The bodies of the pending here-documents from `start`, one after another, and their end. */\nexport function readBodies(text: string, start: number, pending: readonly PendingHeredoc[]) {\n const bodies: HeredocBody[] = [];\n let end = start;\n for (const heredoc of pending) {\n const read = readBody(text, end, heredoc);\n bodies.push(read.body);\n end = read.end;\n }\n return { bodies, end };\n}\n","import { type HeredocBody, heredocAt, type PendingHeredoc, readBodies } from \"./here-documents.js\";\nimport { wordExpansions } from \"./parameter-expansions.js\";\nimport { assignmentValueText, shellAssignments } from \"./shell-assignments.js\";\nimport {\n COMMAND_SEPARATORS,\n isLineContinuation,\n readWord,\n type ShellCommand,\n type ShellWord,\n WORD_BREAKS,\n wordPart,\n} from \"./shell-word-parts.js\";\n\nexport type { ShellCommand, ShellWord } from \"./shell-word-parts.js\";\n\nconst COMMENT = \"#\";\nconst LINE_BREAK = \"\\n\";\n\n/**\n * Splits shell text (a package.json script, a line of a shell script, Makefile or CI step) into\n * simple commands, each a list of words with their offsets. It follows the POSIX shell rules that\n * decide where a word and a command end: quotes, backslash escapes, line continuations, comments\n * and the control operators. It does not expand anything, so it never runs or guesses a value.\n */\n\n/** Where the blank, continuation or comment at `index` ends, or `index` if there is none. */\nfunction skipTrivia(text: string, index: number): number {\n const char = text[index] as string;\n if (WORD_BREAKS.has(char)) {\n return index + 1;\n }\n if (isLineContinuation(text, index)) {\n return text.indexOf(\"\\n\", index) + 1;\n }\n if (char === COMMENT) {\n const lineEnd = text.indexOf(\"\\n\", index);\n return lineEnd === -1 ? text.length : lineEnd;\n }\n return index;\n}\n\n/**\n * The commands of a text without nested ones, the bodies of its here-documents, and the commands\n * whose output a pipe gives to the next one (`cat <<EOF | sh`).\n */\ninterface TopLevel {\n readonly commands: ShellWord[][];\n readonly heredocs: HeredocBody[];\n readonly pipes: ReadonlySet<number>;\n}\n\n/**\n * A pipe; the two `|` of `||` give an empty command between the two around them, which is no\n * command that a pipe gives a here-document.\n */\nconst PIPE = \"|\";\n\n/**\n * The commands of `text`, in order, without nested ones. The body of a here-document is input\n * data, not commands: a `'` in it (`Don't edit`) opened a quote to the end of the text, and\n * every command after it was lost.\n */\nfunction topLevelCommands(text: string, indent: number): TopLevel {\n const commands: ShellWord[][] = [[]];\n const heredocs: HeredocBody[] = [];\n const pipes = new Set<number>();\n let pending: PendingHeredoc[] = [];\n let index = 0;\n while (index < text.length) {\n const afterTrivia = skipTrivia(text, index);\n const heredoc = heredocAt(text, index, { command: commands.length - 1, indent });\n if (heredoc !== undefined) {\n pending.push(...(heredoc.pending === undefined ? [] : [heredoc.pending]));\n index = heredoc.end;\n } else if (afterTrivia !== index) {\n index = afterTrivia;\n } else if (text[index] === LINE_BREAK && pending.length > 0) {\n const read = readBodies(text, index + 1, pending);\n heredocs.push(...read.bodies);\n pending = [];\n commands.push([]);\n index = read.end;\n } else if (COMMAND_SEPARATORS.has(text[index] as string)) {\n if (text[index] === PIPE) {\n pipes.add(commands.length - 1);\n }\n commands.push([]);\n index++;\n } else {\n const word = readWord(text, index);\n commands.at(-1)?.push(word);\n index = word.end;\n }\n }\n return { commands, heredocs, pipes };\n}\n\n/**\n * Reserved words (POSIX 2.4, and bash's `[[`) that open or close a compound command and are\n * followed by a command: `if a; then b; fi`, `while a; do b; done`, `! a`, `{ a; }`. They are\n * reserved only where a command name can stand, and only unquoted, so `echo then` and `\"if\"` stay\n * words. `time` is a launcher (domain/command-launchers.ts), as it takes options.\n */\nconst COMMAND_PREFIX_WORDS: ReadonlySet<string> = new Set([\n \"if\",\n \"then\",\n \"elif\",\n \"else\",\n \"fi\",\n \"while\",\n \"until\",\n \"do\",\n \"done\",\n \"!\",\n \"{\",\n \"}\",\n \"esac\",\n]);\n/**\n * Reserved words whose words up to the next separator are not a command: `for NAME in WORDS`,\n * `select NAME in WORDS`, `case WORD in`, and a `[[ … ]]` test.\n */\nconst CLAUSE_WORDS: ReadonlySet<string> = new Set([\"for\", \"select\", \"case\", \"[[\"]);\n/** `function NAME` (bash, ksh): the function's body, a compound command, follows the name. */\nconst FUNCTION_WORD = \"function\";\nconst FUNCTION_HEADER_LENGTH = 2;\n\nconst isReserved = (word: ShellWord | undefined, words: ReadonlySet<string>): boolean =>\n word !== undefined && word.raw === word.value && words.has(word.value);\n\n/** How many words at `index` are a reserved word or a function header, before a command. */\nfunction prefixLength(words: readonly ShellWord[], index: number): number {\n if (isReserved(words[index], COMMAND_PREFIX_WORDS)) {\n return 1;\n }\n const word = words[index];\n return word?.raw === FUNCTION_WORD ? FUNCTION_HEADER_LENGTH : 0;\n}\n\n/**\n * The simple command that a list of words between two separators holds, without the reserved\n * words in front of it: `then a b` is the command `a b`, and `for x in a b` is none.\n */\nfunction simpleCommand(words: readonly ShellWord[]): ShellWord[] {\n let first = 0;\n for (let length = prefixLength(words, 0); length > 0; length = prefixLength(words, first)) {\n first += length;\n }\n return isReserved(words[first], CLAUSE_WORDS) ? [] : words.slice(first);\n}\n\nconst QUOTES: ReadonlySet<string> = new Set([\"'\", '\"']);\n/** A quoted word with more than one word in it may be a command (`sh -c \"…\"`, `concurrently`). */\nconst NESTED_COMMAND_RE = /[\\s;&|()`]/;\n\n/**\n * The text inside the quotes of a word that is one quoted string holding a command line. The\n * inner text is read as written, so its offsets map one to one onto the outer text.\n */\nfunction nestedCommandText(word: ShellWord): string | undefined {\n const quote = word.raw[0] as string;\n const isOneQuotedString =\n QUOTES.has(quote) &&\n word.raw.length > 1 &&\n word.raw.endsWith(quote) &&\n wordPart(word.raw, 0).end === word.raw.length;\n return isOneQuotedString && NESTED_COMMAND_RE.test(word.value)\n ? word.raw.slice(1, -1)\n : undefined;\n}\n\n/** Shells that run the script a here-document or a pipe gives them. */\nconst SHELLS: ReadonlySet<string> = new Set([\"sh\", \"bash\", \"dash\", \"ash\", \"zsh\", \"ksh\"]);\n/** Docker's `RUN <<EOF` runs the here-document, or gives it to the command after its options. */\nconst DOCKER_RUN = \"RUN\";\n/** A command that writes the here-document it reads as it is, so a pipe gives it on. */\nconst PASS_THROUGH = \"cat\";\nconst PATH_SEPARATOR = \"/\";\nconst OPTION_PREFIX = \"-\";\n\nconst programName = (command: ShellCommand): string =>\n command[0]?.value.split(PATH_SEPARATOR).at(-1) ?? \"\";\n\nconst isOption = (word: ShellWord): boolean => word.value.startsWith(OPTION_PREFIX);\n\n/** Whether a command is a shell with options only, which runs its input as a script. */\nconst isScriptShell = (command: ShellCommand): boolean =>\n SHELLS.has(programName(command)) && command.slice(1).every(isOption);\n\n/**\n * Whether a command runs the here-document it reads as a script: a shell with options only\n * (`bash -e <<EOF`), or `RUN` with options only or with such a shell after them (`RUN <<EOT\n * bash`). Any other command reads it as data (`cat`, `bash gen.sh`).\n */\nfunction readsScript(command: ShellCommand): boolean {\n if (programName(command) !== DOCKER_RUN) {\n return isScriptShell(command);\n }\n const after = command.slice(1);\n const shell = after.slice(after.findIndex((word) => !isOption(word)));\n return after.every(isOption) || isScriptShell(shell);\n}\n\n/** Whether a command writes its here-document unchanged, so the next command of a pipe reads it. */\nconst passesThrough = (command: ShellCommand): boolean =>\n programName(command) === PASS_THROUGH && command.slice(1).every(isOption);\n\n/**\n * The here-documents that the command at `index` runs as scripts: its own, when it reads them as\n * a script, and those of a `cat` whose output a pipe gives it, when it is a shell. Each is read\n * after the command that runs it, so the commands stay in the order of the text.\n */\nfunction scriptsRunBy(top: TopLevel, index: number, command: ShellCommand): HeredocBody[] {\n const previous = index - 1;\n const isPipedScript =\n top.pipes.has(previous) &&\n isScriptShell(command) &&\n passesThrough(simpleCommand(top.commands[previous] ?? []));\n return top.heredocs.filter(\n (body) =>\n (body.command === index && readsScript(command)) ||\n (body.command === previous && isPipedScript),\n );\n}\n\n/** Moves the offsets of words found in a part of a text to offsets in the whole text. */\nconst shifted = (words: readonly ShellWord[], offset: number): ShellWord[] =>\n words.map((word) => ({ ...word, start: word.start + offset, end: word.end + offset }));\n\n/** The commands of `text`, which starts at `offset` of a larger text, by offsets in that one. */\nexport function shellCommandsAt(text: string, offset: number, indent = 0): ShellCommand[] {\n return shellCommands(text, indent).map((words) => shifted(words, offset));\n}\n\n/** The words of the parameter expansions of a word (`${GEN:-npx …}`), read as command lines. */\nconst expansionCommands = (word: ShellWord): ShellCommand[] =>\n wordExpansions(word.raw).flatMap((expansion) =>\n shellCommandsAt(expansion.text, word.start + expansion.start),\n );\n\n/**\n * The command lines inside the words of a command: a quoted word that holds one, the value of an\n * assignment (`GEN=\"npx openapi-typescript\"`), which runs where the variable is expanded, and\n * the word of a parameter expansion (`${GEN:-npx openapi-typescript}`). A text read as commands\n * is read once: its own expansions are found in it.\n */\nfunction innerCommands(command: ShellCommand): ShellCommand[] {\n const assignments = new Map(shellAssignments(command).map((found) => [found.word, found]));\n return command.flatMap((word) => {\n const inner = nestedCommandText(word);\n if (inner !== undefined) {\n return shellCommandsAt(inner, word.start + 1);\n }\n const assignment = assignments.get(word);\n const value = assignment === undefined ? undefined : assignmentValueText(assignment);\n return value === undefined ? expansionCommands(word) : shellCommandsAt(value.text, value.start);\n });\n}\n\n/**\n * The commands of `text`, in order of their first word. A quoted word that holds a command line\n * is read as commands too, so `sh -c \"openapi-typescript a.yaml\"` and `concurrently \"…\"` count.\n * `indent` is the number of spaces at the start of each line that the shell does not see, such as\n * the indentation of a YAML block scalar: a here-document delimiter line may have them.\n */\nexport function shellCommands(text: string, indent = 0): ShellCommand[] {\n const top = topLevelCommands(text, indent);\n const commands: ShellCommand[] = [];\n for (const [index, words] of top.commands.entries()) {\n const command = simpleCommand(words);\n if (command.length > 0) {\n commands.push(command);\n }\n commands.push(...innerCommands(command));\n const scripts = scriptsRunBy(top, index, command);\n commands.push(...scripts.flatMap((body) => shellCommandsAt(body.text, body.start, indent)));\n }\n return commands;\n}\n","/** Compile-time proof that a switch over a closed union handled every variant. */\nexport function assertNever(value: never): never {\n throw new Error(`Unexpected variant: ${JSON.stringify(value)}`);\n}\n","/**\n * Which program a variable runs where a command starts with it (`$GEN …`, `$(GEN) …`). A file can\n * set one name in several places: two Dockerfile stages, a workflow and one of its steps, a\n * Makefile line and a later one that make reads before it runs any recipe. The tool does not\n * follow which definition reaches which command, so it changes the flags after a variable only\n * when every definition of the name runs the generator.\n */\n\nimport { assertNever } from \"./assert-never.js\";\n\n/**\n * `generator`: every definition runs the generator. `generator-or-other`: some definitions run it\n * and some run another program, so the flags after the variable are left to the user. `other`: no\n * definition runs it.\n */\nexport type VariableProgram = \"generator\" | \"generator-or-other\" | \"other\";\n\n/**\n * What one definition of a variable sets it to: a command (that runs the generator or not), a\n * reference to one variable (`GEN := $(OAT)`, `ENV GEN=$GEN`), or text that make appends to the\n * value it already has (`GEN += --flag`), which keeps the program.\n */\nexport type ProgramDefinition =\n | { readonly name: string; readonly kind: \"command\"; readonly runsGenerator: boolean }\n | { readonly name: string; readonly kind: \"reference\"; readonly target: string }\n | { readonly name: string; readonly kind: \"append\" };\n\n/** Whether a definition can run the generator, given the names found to run it so far. */\nfunction canRunGenerator(definition: ProgramDefinition, generators: ReadonlySet<string>): boolean {\n switch (definition.kind) {\n case \"command\":\n return definition.runsGenerator;\n case \"reference\":\n return generators.has(definition.target);\n case \"append\":\n return false;\n default:\n return assertNever(definition);\n }\n}\n\n/**\n * Whether a definition can run another program. A reference to a variable the file never sets\n * gets its value from elsewhere (the environment, a base image), so it can run anything.\n */\nfunction canRunOther(\n definition: ProgramDefinition,\n others: ReadonlySet<string>,\n defined: ReadonlySet<string>,\n): boolean {\n switch (definition.kind) {\n case \"command\":\n return !definition.runsGenerator;\n case \"reference\":\n return others.has(definition.target) || !defined.has(definition.target);\n case \"append\":\n return false;\n default:\n return assertNever(definition);\n }\n}\n\n/**\n * The program each defined variable runs. References are followed however long the chain, so\n * `GEN := $(OAT)` runs what `OAT` runs; a cycle adds nothing.\n */\nexport function variablePrograms(\n definitions: readonly ProgramDefinition[],\n): ReadonlyMap<string, VariableProgram> {\n const defined = new Set(definitions.map((definition) => definition.name));\n const generators = new Set<string>();\n const others = new Set<string>();\n for (let size = -1; size !== generators.size + others.size; ) {\n size = generators.size + others.size;\n for (const definition of definitions) {\n if (canRunGenerator(definition, generators)) {\n generators.add(definition.name);\n }\n if (canRunOther(definition, others, defined)) {\n others.add(definition.name);\n }\n }\n }\n const programOf = (name: string): VariableProgram => {\n if (!generators.has(name)) {\n return \"other\";\n }\n return others.has(name) ? \"generator-or-other\" : \"generator\";\n };\n return new Map([...defined].map((name) => [name, programOf(name)]));\n}\n","import { type FileVariables, runsGenerator, type VariableProgramUse } from \"./file-variables.js\";\nimport { type WordExpansion, wholeWordExpansion, wordExpansions } from \"./parameter-expansions.js\";\nimport { isArrayAssignment, shellAssignments } from \"./shell-assignments.js\";\nimport { type ShellCommand, type ShellWord, shellCommands } from \"./shell-words.js\";\nimport {\n type ProgramDefinition,\n type VariableProgram,\n variablePrograms,\n} from \"./variable-programs.js\";\n\n/** A shell variable as a file sets it: its name and its value, read as shell text. */\nexport interface VariableDefinition {\n readonly name: string;\n readonly value: string;\n}\n\n/** A whole word that expands one shell variable: `$NAME`, `${NAME}`, also in double quotes. */\nconst SHELL_VARIABLE_RE = /^\"?\\$(?:([A-Za-z_][A-Za-z0-9_]*)|\\{([A-Za-z_][A-Za-z0-9_]*)\\})\"?$/;\n\n/** The variable that `text` expands as a whole, or undefined. */\nfunction expandedName(text: string): string | undefined {\n const match = SHELL_VARIABLE_RE.exec(text);\n return match === null ? undefined : (match[1] ?? match[2]);\n}\n\n/** Whether text, read as a command line, runs the generator. */\nconst textRunsGenerator = (text: string): boolean => shellCommands(text).some(runsGenerator);\n\n/** What a text sets a variable to: a reference to one variable, or a command. */\nfunction textDefinition(name: string, text: string): ProgramDefinition {\n const target = expandedName(text.trim());\n return target === undefined\n ? { name, kind: \"command\", runsGenerator: textRunsGenerator(text) }\n : { name, kind: \"reference\", target };\n}\n\n/**\n * What a value that is one expansion with a word (`GEN=\"${GEN:-npx openapi-typescript}\"`) can\n * set: the word, or the variable's own value. The variable's value before the assignment, and\n * the value of an alternative's unset variable, come from outside the text: another program.\n */\nfunction expansionDefinitions(name: string, expansion: WordExpansion): ProgramDefinition[] {\n const word = textDefinition(name, expansion.text);\n const isOutside = expansion.use === \"alternative\" || expansion.name === name;\n const variable: ProgramDefinition = isOutside\n ? { name, kind: \"command\", runsGenerator: false }\n : { name, kind: \"reference\", target: expansion.name };\n return [word, variable];\n}\n\n/** A definition as the programs it can set: references to variables, or commands. */\nfunction programDefinitions({ name, value }: VariableDefinition): ProgramDefinition[] {\n const expansion = wholeWordExpansion(value.trim());\n return expansion === undefined\n ? [textDefinition(name, value)]\n : expansionDefinitions(name, expansion);\n}\n\n/**\n * The variables that a file's shell commands expand: `$GEN` runs the generator when every\n * definition of `GEN` in the file sets it to the generator (see variable-programs.ts). The\n * values of one name are read as one (a workflow, a job and a step `env`), since any of them can\n * reach a command.\n */\nexport function shellVariables(definitions: readonly VariableDefinition[]): FileVariables {\n const values = new Map<string, string>();\n for (const { name, value } of definitions) {\n values.set(name, [values.get(name), value].filter((part) => part !== undefined).join(\" \"));\n }\n const programs = variablePrograms(definitions.flatMap(programDefinitions));\n // A word that expands no variable has no name, so no definition (not even of \"\") matches it.\n const nameAt = (word: ShellWord): string | undefined => expandedName(word.raw);\n return {\n programAt: (program) => {\n const name = nameAt(program);\n const found = name === undefined ? undefined : programs.get(name);\n return found === undefined ? undefined : { written: program.raw, program: found };\n },\n referenceAt: (word) => {\n const name = nameAt(word);\n const value = name === undefined ? undefined : values.get(name);\n return value === undefined ? undefined : { written: word.raw, value };\n },\n };\n}\n\n/** What two answers for one program word say together: one program, or not only the generator. */\nfunction combinedUse(\n left: VariableProgramUse | undefined,\n right: VariableProgramUse | undefined,\n): VariableProgramUse | undefined {\n if (left === undefined || right === undefined) {\n return left ?? right;\n }\n return left.program === right.program ? left : { ...left, program: \"generator-or-other\" };\n}\n\n/**\n * The variables that `${NAME:=word}` and `${NAME=word}` set: the word when the variable is unset,\n * else the value it had, which comes from outside the text.\n */\nfunction assignedByExpansions(commands: readonly ShellCommand[]): VariableDefinition[] {\n return commands\n .flat()\n .flatMap((word) => wordExpansions(word.raw))\n .filter((expansion) => expansion.use === \"assign\")\n .flatMap(({ name, text }) => [\n { name, value: text },\n { name, value: \"\" },\n ]);\n}\n\n/**\n * The variables of a file (a workflow `env`, a Makefile) and those that its shell commands set\n * themselves (`GEN=\"npx openapi-typescript\"; $GEN a.yaml -it`), read as one: a name both set\n * runs the generator only when both say so, as for the definitions of one file.\n */\nexport function withShellAssignments(\n commands: readonly ShellCommand[],\n file: FileVariables,\n): FileVariables {\n const assigned = commands.flatMap(shellAssignments).filter((found) => !isArrayAssignment(found));\n const definitions = [...assigned, ...assignedByExpansions(commands)];\n if (definitions.length === 0) {\n return file;\n }\n const own = shellVariables(definitions);\n return {\n programAt: (program) => combinedUse(own.programAt(program), file.programAt(program)),\n referenceAt: (word) => own.referenceAt(word) ?? file.referenceAt(word),\n };\n}\n\n/** Two programs as one: the same, or not only the generator when they differ. */\nconst joinedProgram = (left: VariableProgram, right: VariableProgram): VariableProgram =>\n left === right ? left : \"generator-or-other\";\n\n/**\n * What a program word that is one expansion with a word runs (`npx ${GEN:-openapi-typescript}`,\n * `\"${GEN:-npx openapi-typescript}\" a.yaml`): its word, or the variable's value, which the\n * variables of the text know or which comes from outside it.\n */\nfunction expansionUse(word: ShellWord, variables: FileVariables): VariableProgramUse | undefined {\n const expansion = wholeWordExpansion(word.raw);\n if (expansion === undefined) {\n return undefined;\n }\n const programOf = (name: string | undefined): VariableProgram =>\n (name === undefined ? undefined : variables.programAt({ ...word, raw: `$${name}` })?.program) ??\n \"other\";\n const target = expandedName(expansion.text.trim());\n const textProgram = textRunsGenerator(expansion.text) ? \"generator\" : \"other\";\n const own = target === undefined ? textProgram : programOf(target);\n const variable = programOf(expansion.use === \"alternative\" ? undefined : expansion.name);\n return { written: word.raw, program: joinedProgram(own, variable) };\n}\n\n/** The variables with the program words that are expansions with a word. */\nexport function withWordExpansions(variables: FileVariables): FileVariables {\n return {\n programAt: (program) => variables.programAt(program) ?? expansionUse(program, variables),\n referenceAt: (word) => variables.referenceAt(word),\n };\n}\n\n/**\n * A program word that expands one shell variable as a whole: `$GEN`, `${GEN}`, a bash array\n * `\"${GEN[@]}\"`, and in a Makefile recipe `$$GEN`.\n */\nconst VARIABLE_NAME = \"[A-Za-z_][A-Za-z0-9_]*\";\nconst VARIABLE_WORD_RE = new RegExp(\n `^\"?\\\\$\\\\$?(?:${VARIABLE_NAME}|\\\\{${VARIABLE_NAME}(?:\\\\[[^\\\\]]*\\\\])?\\\\})\"?$`,\n);\n\n/**\n * The variables with the program words that expand a variable no definition the tool reads sets:\n * one set by another `script` item, through `$GITHUB_ENV`, by a recipe line, as an array or\n * outside the file. It may run the generator, so the old flags after it are reported, not kept\n * without a word.\n */\nexport function withUnreadVariables(variables: FileVariables): FileVariables {\n return {\n programAt: (program) =>\n variables.programAt(program) ??\n (VARIABLE_WORD_RE.test(program.raw)\n ? { written: program.raw, program: \"generator-or-other\" }\n : undefined),\n referenceAt: (word) => variables.referenceAt(word),\n };\n}\n","import { commandRoles, type PackageWord } from \"./command-roles.js\";\nimport { type FileVariables, NO_VARIABLES, withoutRecipePrefix } from \"./file-variables.js\";\nimport { type Change, lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { packageReference, unmigratedWordFindings } from \"./old-package-words.js\";\nimport {\n FLAG_RENAMES,\n GENERATOR_COMMAND,\n MIGRATED_GENERATOR_COMMAND,\n PACKAGE_RENAMES,\n} from \"./package-names.js\";\nimport {\n withShellAssignments,\n withUnreadVariables,\n withWordExpansions,\n} from \"./shell-variables.js\";\nimport { type ShellCommand, type ShellWord, shellCommands } from \"./shell-words.js\";\nimport { applyTextEdits, type TextEdit } from \"./text-edits.js\";\n\n/** One command line or script after the migration. */\nexport interface CommandMigration {\n readonly text: string;\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** Names the place of an offset for the report: a script name, or `file:line`. */\nexport type Locate = (offset: number) => string;\n\n/** What the migration found at one offset of the text. */\ninterface Finding {\n readonly offset: number;\n readonly edit?: TextEdit;\n readonly change?: Change;\n readonly manualStep?: ManualStep;\n}\n\nconst QUOTES: ReadonlySet<string> = new Set([\"'\", '\"']);\nconst PATH_SEPARATOR = \"/\";\nconst BIN_FOLDER = \"/.bin/\";\nconst OLD_PACKAGE_FOLDER = `node_modules/${GENERATOR_COMMAND}/`;\n\n/**\n * The edit that renames `name` at the end of a word (`x`, `\"x\"`, `npm:x`, `.bin/x`), or undefined\n * when the word is quoted in a way that does not keep `name` in one piece.\n */\nfunction renameAtEnd(word: ShellWord, name: string, to: string): TextEdit | undefined {\n const at = word.raw.lastIndexOf(name);\n const tail = word.raw.slice(at + name.length);\n if (at === -1 || (tail !== \"\" && !QUOTES.has(tail))) {\n return undefined;\n }\n return { start: word.start + at, end: word.start + at + name.length, text: to };\n}\n\n/** A word of an install command or a `--package` option that names an original package. */\nfunction packageFindings(found: PackageWord, locate: Locate): Finding[] {\n const { name, isPinned } = packageReference(found.value);\n const to = PACKAGE_RENAMES.get(name);\n const offset = found.word.start;\n if (to === undefined) {\n return [];\n }\n const location = locate(offset);\n if (isPinned) {\n return [{ offset, manualStep: { kind: \"pinned-package\", location, name } }];\n }\n const edit = renameAtEnd(found.word, name, to);\n const change: Change = { kind: \"package-name-renamed\", location, from: name, to };\n return edit === undefined ? [] : [{ offset, edit, change }];\n}\n\n/** The program given by a path: `node_modules/.bin/openapi-typescript` or a file of the package. */\nfunction programPathFindings(word: ShellWord, location: string): Finding[] {\n const offset = word.start;\n if (word.value.includes(OLD_PACKAGE_FOLDER)) {\n return [{ offset, manualStep: { kind: \"old-package-file\", location, path: word.value } }];\n }\n const isBin = word.value.endsWith(`${BIN_FOLDER}${GENERATOR_COMMAND}`);\n const edit = isBin ? renameAtEnd(word, GENERATOR_COMMAND, MIGRATED_GENERATOR_COMMAND) : undefined;\n return edit === undefined\n ? []\n : [{ offset, edit, change: { kind: \"command-renamed\", location } }];\n}\n\n/** The findings for the program word of a command; renamed tells whether flags follow. */\nfunction programFindings(word: ShellWord, location: string): Finding[] {\n if (word.value.includes(PATH_SEPARATOR)) {\n return programPathFindings(word, location);\n }\n const { name, isPinned } = packageReference(word.value);\n if (name !== GENERATOR_COMMAND) {\n return [];\n }\n if (isPinned) {\n return [{ offset: word.start, manualStep: { kind: \"versioned-command\", location } }];\n }\n const edit = renameAtEnd(word, GENERATOR_COMMAND, MIGRATED_GENERATOR_COMMAND);\n const change: Change = { kind: \"command-renamed\", location };\n return edit === undefined ? [] : [{ offset: word.start, edit, change }];\n}\n\n/** A renamed flag of the generator, alone (`-it`) or with its value (`--redoc=r.yaml`). */\nfunction flagFindings(word: ShellWord, locate: Locate): Finding[] {\n const flag = word.raw.split(\"=\", 1)[0] as string;\n const to = FLAG_RENAMES.get(flag);\n if (to === undefined) {\n return [];\n }\n const offset = word.start;\n const edit: TextEdit = { start: offset, end: offset + flag.length, text: to };\n return [\n { offset, edit, change: { kind: \"flag-renamed\", location: locate(offset), from: flag, to } },\n ];\n}\n\n/** `@`, `-` and `+` before a Makefile or justfile recipe: silent, ignore errors, always run. */\n/** The flags of a variable's value that the generator renamed, each once. */\nfunction renamedFlags(value: string): string[] {\n const flags = shellCommands(value)\n .flat()\n .map((word) => word.raw.split(\"=\", 1)[0] as string);\n return [...new Set(flags.filter((flag) => FLAG_RENAMES.has(flag)))];\n}\n\n/** The findings of one argument of the generator: a renamed flag, or a variable that holds one. */\nfunction argumentFindings(word: ShellWord, locate: Locate, variables: FileVariables): Finding[] {\n const reference = variables.referenceAt(word);\n if (reference === undefined) {\n return flagFindings(word, locate);\n }\n const flags = renamedFlags(reference.value);\n if (flags.length === 0) {\n return [];\n }\n const manualStep: ManualStep = {\n kind: \"flags-in-variable\",\n location: locate(word.start),\n variable: reference.written,\n flags,\n };\n return [{ offset: word.start, manualStep }];\n}\n\n/** The old flags that findings rename, or report in a variable's value. */\nconst oldFlagsOf = (findings: readonly Finding[]): string[] =>\n findings.flatMap(({ change, manualStep }) => {\n if (change?.kind === \"flag-renamed\") {\n return [change.from];\n }\n return manualStep?.kind === \"flags-in-variable\" ? [...manualStep.flags] : [];\n });\n\n/**\n * The findings after a variable that may run the generator or another program (some of its\n * definitions, a default, a value set where the tool does not read): one step that names the old\n * flags, since the tool cannot tell which program runs there.\n */\nfunction uncertainFlagSteps(\n program: ShellWord,\n variable: string,\n found: readonly Finding[],\n locate: Locate,\n) {\n const flags = [...new Set(oldFlagsOf(found))];\n if (flags.length === 0) {\n return [];\n }\n const manualStep: ManualStep = {\n kind: \"variable-not-only-generator\",\n location: locate(program.start),\n variable,\n flags,\n };\n return [{ offset: program.start, manualStep }];\n}\n\nfunction commandFindings(\n command: ShellCommand,\n locate: Locate,\n variables: FileVariables,\n): Finding[] {\n const words = withoutRecipePrefix(command);\n const found = knownFindings(words, locate, variables);\n const handled = new Set(found.map((finding) => finding.offset));\n return [...found, ...unmigratedWordFindings(words, handled, locate)];\n}\n\n/** The findings of the packages, the program and its flags in the roles the tool knows. */\nfunction knownFindings(words: ShellCommand, locate: Locate, variables: FileVariables): Finding[] {\n const roles = commandRoles(words);\n const findings = roles.packages.flatMap((found) => packageFindings(found, locate));\n const program = roles.program === undefined ? undefined : (words[roles.program] as ShellWord);\n if (program === undefined) {\n return findings;\n }\n const found = programFindings(program, locate(program.start));\n findings.push(...found);\n // Only a renamed command is ours to change; a pinned one still runs the old package.\n const isRenamed = found.some((finding) => finding.change?.kind === \"command-renamed\");\n const variable = variables.programAt(program);\n if (!isRenamed && (variable === undefined || variable.program === \"other\")) {\n return findings;\n }\n const flags = words.slice((roles.program as number) + 1);\n const flagFound = flags.flatMap((word) => argumentFindings(word, locate, variables));\n const isUncertain = variable?.program === \"generator-or-other\";\n findings.push(\n ...(isUncertain ? uncertainFlagSteps(program, variable.written, flagFound, locate) : flagFound),\n );\n return findings;\n}\n\n/** The findings of a shell text as edits, without applying them. */\nexport interface ShellTextFindings {\n readonly edits: readonly TextEdit[];\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** Find what to migrate in every command of a shell text; `locate` names each place. */\nexport function shellTextFindings(text: string, locate: Locate): ShellTextFindings {\n return commandWordFindings(shellCommands(text), locate);\n}\n\n/** Find what to migrate in commands already split into words, as an exec-form list is. */\nexport function commandWordFindings(\n commands: readonly ShellCommand[],\n locate: Locate,\n variables: FileVariables = NO_VARIABLES,\n): ShellTextFindings {\n const known = withUnreadVariables(withWordExpansions(withShellAssignments(commands, variables)));\n const findings = commands\n .flatMap((words) => commandFindings(words, locate, known))\n .sort((left, right) => left.offset - right.offset);\n return {\n edits: findings.flatMap((finding) => (finding.edit === undefined ? [] : [finding.edit])),\n changes: findings.flatMap((finding) => (finding.change === undefined ? [] : [finding.change])),\n manualSteps: findings.flatMap((finding) =>\n finding.manualStep === undefined ? [] : [finding.manualStep],\n ),\n };\n}\n\nfunction migrateShellText(text: string, locate: Locate): CommandMigration {\n const { edits, changes, manualSteps } = shellTextFindings(text, locate);\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n\n/**\n * Rename the generator command in one script, the renamed flags of that command only, and the\n * original packages that an install command or `npx -p` names. `location` names the script.\n */\nexport function migrateCommand(text: string, location: string): CommandMigration {\n return migrateShellText(text, () => location);\n}\n\n/**\n * Every command of a shell script, Makefile or Dockerfile, through `migrateCommand`. A command\n * continued with `\\` onto the next lines is one command. Each finding names its `file:line`.\n */\nexport function migrateCommandLines(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n return migrateShellText(text, (offset) => `${file}:${lineOf(offset)}`);\n}\n","import type { DocumentPath } from \"./config-documents.js\";\n\n/**\n * Where configs keep commands, as key path patterns: package.json scripts and the hook tools it\n * configures, Nx targets, Deno tasks and lint-staged. Only the strings at these paths are read as\n * commands, so the other values of a config stay as written.\n */\n\n/** A key path pattern; `*` matches any key or index. */\nexport type CommandPathPattern = readonly string[];\n\nconst ANY = \"*\";\n\n/** The `command` and `commands` of `nx:run-commands` options under `prefix`. */\nconst nxOptionPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, \"command\"],\n [...prefix, \"commands\", ANY],\n [...prefix, \"commands\", ANY, \"command\"],\n];\n\n/**\n * `nx:run-commands` targets under `prefix`: `command`, the commands of `options`, and those of\n * each of its `configurations`, which replace the options they name (`nx run app:gen:ci`).\n */\nconst nxTargetPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, ANY, \"command\"],\n ...nxOptionPaths([...prefix, ANY, \"options\"]),\n ...nxOptionPaths([...prefix, ANY, \"configurations\", ANY]),\n];\n\n/** lint-staged: each glob runs a command or a list of them. */\nconst lintStagedPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, ANY],\n [...prefix, ANY, ANY],\n];\n\n/** simple-git-hooks: each git hook runs one command. */\nconst simpleGitHooksPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, ANY],\n];\n\n/** Nx `project.json` targets. */\nexport const NX_PROJECT_COMMAND_PATHS: readonly CommandPathPattern[] = nxTargetPaths([\"targets\"]);\n\n/** `nx.json`: the defaults of the targets, by target name or executor. */\nexport const NX_WORKSPACE_COMMAND_PATHS: readonly CommandPathPattern[] = nxTargetPaths([\n \"targetDefaults\",\n]);\n\n/**\n * A manifest (package.json, package.yaml): the scripts, the configs of simple-git-hooks and\n * lint-staged, the `command` of each wireit script (the script itself is just `wireit`), and the\n * Nx targets of the project. Each finding names its place (`scripts.gen`).\n */\nexport const MANIFEST_COMMAND_PATHS: readonly CommandPathPattern[] = [\n [\"scripts\", ANY],\n [\"wireit\", ANY, \"command\"],\n ...simpleGitHooksPaths([\"simple-git-hooks\"]),\n ...lintStagedPaths([\"lint-staged\"]),\n ...nxTargetPaths([\"nx\", \"targets\"]),\n];\n\n/** A lint-staged config file (`.lintstagedrc`, `.lintstagedrc.json`, …). */\nexport const LINT_STAGED_COMMAND_PATHS: readonly CommandPathPattern[] = lintStagedPaths([]);\n\n/** A simple-git-hooks config file (`.simple-git-hooks.json`, …). */\nexport const SIMPLE_GIT_HOOKS_COMMAND_PATHS: readonly CommandPathPattern[] = simpleGitHooksPaths(\n [],\n);\n\n/** Deno tasks: a command string, or an object with a `command`. */\nexport const DENO_TASK_PATHS: readonly CommandPathPattern[] = [\n [\"tasks\", ANY],\n [\"tasks\", ANY, \"command\"],\n];\n\nconst matches = (path: DocumentPath, pattern: CommandPathPattern): boolean =>\n path.length === pattern.length &&\n pattern.every((part, index) => part === ANY || part === String(path[index]));\n\n/** Whether a value at `path` is a command by one of `patterns`. */\nexport const isCommandPath = (\n path: DocumentPath,\n patterns: readonly CommandPathPattern[],\n): boolean => patterns.some((pattern) => matches(path, pattern));\n","import { migrateCommand } from \"./command-migration.js\";\nimport { lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport type { SourceString } from \"./source-migration.js\";\n\n/** No location: the step names the line of the string instead. */\nconst NO_LOCATION = \"\";\n\n/**\n * Strings of a source file that run the generator, such as `execSync(\"npx openapi-typescript …\")`\n * or the command of `spawn` with `shell: true`. They are reported with the migrated command, not\n * changed: a string is data, and only the author knows that it reaches a shell.\n */\nexport function commandStringSteps(text: string, strings: readonly SourceString[]): ManualStep[] {\n const lineOf = lineLocator(text);\n return strings.flatMap((found) => {\n // A string that is just a package name is reported by the specifier migration.\n if (found.isModuleSpecifier || PACKAGE_RENAMES.has(found.value)) {\n return [];\n }\n const migrated = migrateCommand(found.value, NO_LOCATION).text;\n return migrated === found.value\n ? []\n : [{ kind: \"command-string\" as const, line: lineOf(found.start), to: migrated }];\n });\n}\n","/**\n * The version spec a renamed dependency gets. A semver range keeps its style and gets the\n * openapi-typesafe version: `^` and `>=` give `^`, `~` gives `~`, an exact version stays exact,\n * and a partial version keeps what it fixes (`7` and `7.x` fix the major: `^`; `0.13` and\n * `0.13.x` fix the minor: `~`). A range of several comparators takes the style of its first one.\n * `catalog:` and `workspace:` stay, because they point elsewhere (a dependency on a local package\n * keeps its old name too, domain/dependency-map.ts); anything else (a tag, `*`, an\n * upper bound only, a URL, a file or an npm alias) is kept and reported.\n */\n\nconst KEPT_PROTOCOLS = [\"catalog:\", \"workspace:\"] as const;\n/**\n * The protocols of specs that point at a package on disk (pnpm, Yarn, npm, bun), not at the npm\n * registry: such a dependency is a local package that only shares an original package's name.\n */\nconst LOCAL_PROTOCOLS = [\"workspace:\", \"link:\", \"file:\", \"portal:\"] as const;\nconst RANGE_SEPARATOR = \"||\";\nconst HYPHEN = \"-\";\nconst WHITE_SPACE_RE = /\\s+/;\n/** node-semver allows white space between an operator and its version: `>= 1.2.3`. */\nconst SPACED_OPERATOR_RE = /(<=|>=|<|>|=|~>|~|\\^)\\s+/g;\nconst OPERATOR = String.raw`(<=|>=|<|>|=|~>|~|\\^)?`;\nconst VERSION_PART = String.raw`(\\d+|[xX*])`;\nconst LABELS = String.raw`(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?`;\n/** A comparator: an operator, then a version whose parts can be `x` or `*` or left out. */\nconst COMPARATOR_RE = new RegExp(\n String.raw`^${OPERATOR}v?${VERSION_PART}(?:\\.${VERSION_PART})?(?:\\.${VERSION_PART})?${LABELS}$`,\n);\nconst NUMBER_RE = /^\\d+$/;\n\n/** The style a replaced spec keeps: `^`, `~` or exact (no operator). */\ntype RangeStyle = \"^\" | \"~\" | \"\";\n\nconst OPERATOR_STYLES: Readonly<Record<string, RangeStyle | undefined>> = {\n \"^\": \"^\",\n // `>=` means \"this or newer\"; with a new package line, a caret range says the same safely.\n \">=\": \"^\",\n \">\": \"^\",\n \"~\": \"~\",\n \"~>\": \"~\",\n};\n\nexport type SpecDecision =\n | { readonly kind: \"replaced\"; readonly spec: string }\n | { readonly kind: \"kept\"; readonly spec: string; readonly isReported: boolean };\n\nconst isNumber = (part: string | undefined): boolean => part !== undefined && NUMBER_RE.test(part);\n\n/** The style of a comparator without an operator (or `=`), by the parts it fixes. */\nfunction versionStyle(\n major: string | undefined,\n minor: string | undefined,\n patch: string | undefined,\n): RangeStyle | undefined {\n if (!isNumber(major)) {\n return undefined;\n }\n if (isNumber(minor) && isNumber(patch)) {\n return \"\";\n }\n return isNumber(minor) ? \"~\" : \"^\";\n}\n\n/** The style of the first comparator of a range, or undefined when the spec is not a range. */\nfunction rangeStyle(spec: string): RangeStyle | undefined {\n const sets = spec.replace(SPACED_OPERATOR_RE, \"$1\").split(RANGE_SEPARATOR);\n const tokens = sets.map((set) => set.trim().split(WHITE_SPACE_RE));\n const comparators = tokens.flat().filter((token) => token !== HYPHEN);\n const matches = comparators.map((comparator) => COMPARATOR_RE.exec(comparator));\n const first = matches[0];\n if (first === undefined || first === null || matches.includes(null)) {\n return undefined;\n }\n const operator = first[1];\n // `1.2.3 - 2.0.0` is `>=1.2.3 <=2.0.0`: a lower bound, as `>=` is.\n const isHyphenRange = tokens[0]?.[1] === HYPHEN;\n if (operator !== undefined && operator !== \"=\") {\n return OPERATOR_STYLES[operator];\n }\n return isHyphenRange ? \"^\" : versionStyle(first[2], first[3], first[4]);\n}\n\n/** True for a spec that points at a package on disk: `workspace:*`, `link:../fork`, `file:…`. */\nexport const isLocalPackageSpec = (spec: string): boolean =>\n LOCAL_PROTOCOLS.some((protocol) => spec.startsWith(protocol));\n\n/** The new spec for a renamed dependency whose old spec was `spec`. */\nexport function migrateVersionSpec(spec: string, version: string): SpecDecision {\n if (KEPT_PROTOCOLS.some((protocol) => spec.startsWith(protocol))) {\n return { kind: \"kept\", spec, isReported: false };\n }\n const style = rangeStyle(spec);\n if (style === undefined) {\n return { kind: \"kept\", spec, isReported: true };\n }\n return { kind: \"replaced\", spec: `${style}${version}` };\n}\n","import { isScalar, mapsAt, type TreeMap, textEntries } from \"./config-documents.js\";\nimport type { ManualStep } from \"./migration-findings.js\";\nimport { DEPENDENCY_FIELDS, PACKAGE_RENAMES } from \"./package-names.js\";\nimport { isLocalPackageSpec } from \"./version-spec.js\";\n\n/**\n * What the manifests of a project declare, to tell whether a source file may import a package\n * without relying on another package to install it.\n */\n\n/**\n * One manifest of the project: its path in the listing and the names its dependency fields hold;\n * `names` is undefined when the manifest could not be read, and it then counts as declaring all.\n */\nexport interface ManifestDeclarations {\n readonly path: string;\n readonly names: ReadonlySet<string> | undefined;\n /** The original names it declares with a spec that points at a local package. */\n readonly localPackages?: ReadonlySet<string>;\n}\n\n/**\n * A package that an original package installed as its own dependency and its successor does not.\n * openapi-fetch and openapi-react-query depend on openapi-typescript-helpers, so code could import\n * it without a dependency of its own. openapi-typesafe-fetch declares the helper types itself and\n * the hooks name them through it, so nothing installs openapi-typesafe-helpers for such code.\n */\nexport const NO_LONGER_INSTALLED: ReadonlyMap<string, readonly string[]> = new Map([\n [\"openapi-typesafe-helpers\", [\"openapi-fetch\", \"openapi-react-query\"]],\n]);\n\n/** The original name of each successor package. */\nconst ORIGINAL_NAMES: ReadonlyMap<string, string> = new Map(\n [...PACKAGE_RENAMES].map(([original, successor]) => [successor, original]),\n);\n\nconst PATH_SEPARATOR = \"/\";\n\n/** Whether a manifest text can declare a package of NO_LONGER_INSTALLED, so it must be read. */\nexport function namesUninstalledPackage(text: string): boolean {\n return [...NO_LONGER_INSTALLED.keys()].some(\n (name) => text.includes(name) || text.includes(ORIGINAL_NAMES.get(name) ?? name),\n );\n}\n\nconst directoryOf = (path: string): string => path.slice(0, path.lastIndexOf(PATH_SEPARATOR) + 1);\n\n/** Whether the file at `path` is in the folder of `filePath` or in a folder above it. */\nexport const isAtOrAbove = (path: string, filePath: string): boolean =>\n filePath.startsWith(directoryOf(path));\n\n/** The names that the dependency fields of a parsed manifest hold. */\nexport function declaredNames(manifest: TreeMap): string[] {\n return DEPENDENCY_FIELDS.flatMap((field) => mapsAt(manifest, field))\n .flatMap(textEntries)\n .map(({ key }) => key.value);\n}\n\n/**\n * The names that a parsed manifest's dependency fields point at a local package\n * (`\"openapi-fetch\": \"workspace:*\"`): such a dependency keeps its name, so its imports do too.\n */\nexport function localPackageNames(manifest: TreeMap): string[] {\n return DEPENDENCY_FIELDS.flatMap((field) => mapsAt(manifest, field))\n .flatMap(textEntries)\n .flatMap(({ key, value }) =>\n isScalar(value) && isLocalPackageSpec(value.value) ? [key.value] : [],\n );\n}\n\n/**\n * The original packages that the imports of the file at `filePath` resolve to a local package.\n * Node looks in the `node_modules` folder of the file's folder first, then in each folder above,\n * so the nearest manifest that declares a name decides: a local package of a workspace root does\n * not count for a package that declares the npm package itself. A manifest that could not be\n * read tells nothing and is passed over.\n */\nexport function localPackagesFor(\n manifests: readonly ManifestDeclarations[],\n filePath: string,\n): ReadonlySet<string> {\n const nearestFirst = manifests\n .filter(({ path }) => isAtOrAbove(path, filePath))\n .sort((left, right) => directoryOf(right.path).length - directoryOf(left.path).length);\n const candidates = new Set(\n nearestFirst.flatMap(({ localPackages }) => [...(localPackages ?? [])]),\n );\n const isLocal = (name: string): boolean =>\n nearestFirst.find(({ names }) => names?.has(name) === true)?.localPackages?.has(name) === true;\n return new Set([...candidates].filter(isLocal));\n}\n\n/**\n * Whether a manifest at or above `filePath` declares `name`, under its old or its new name. Node\n * looks for a package in the `node_modules` folders of every directory above the file, so a\n * dependency of a workspace root counts for its packages. A file that no manifest contains is not\n * judged: it is not part of a package (a Deno module, a loose script).\n */\nfunction isDeclaredFor(\n manifests: readonly ManifestDeclarations[],\n filePath: string,\n name: string,\n): boolean {\n const original = ORIGINAL_NAMES.get(name);\n const containing = manifests.filter(({ path }) => isAtOrAbove(path, filePath));\n const declares = ({ names }: ManifestDeclarations): boolean =>\n names === undefined || names.has(name) || (original !== undefined && names.has(original));\n return containing.length === 0 || containing.some(declares);\n}\n\n/** The package that a module specifier names: `pkg` of `pkg/subpath`. */\nexport const packageOfSpecifier = (specifier: string): string => {\n const slash = specifier.indexOf(PATH_SEPARATOR);\n return slash === -1 ? specifier : specifier.slice(0, slash);\n};\n\n/** A module specifier of a source file, as the migration leaves it, and its line. */\nexport interface ImportedSpecifier {\n readonly specifier: string;\n readonly line: number;\n}\n\n/**\n * The imports of a source file, as the migration leaves them, of a package that no manifest or\n * import map at or above the file declares and that the original packages no longer install. An\n * import already renamed by an earlier run counts too, so a second run still reports it. A Deno\n * `npm:` specifier installs its package itself and is not a package name, so it is never reported.\n */\nexport function undeclaredImportSteps(\n imports: readonly ImportedSpecifier[],\n filePath: string,\n manifests: readonly ManifestDeclarations[],\n): ManualStep[] {\n return imports.flatMap(({ specifier, line }) => {\n const name = packageOfSpecifier(specifier);\n const installers = NO_LONGER_INSTALLED.get(name);\n return installers === undefined || isDeclaredFor(manifests, filePath, name)\n ? []\n : [{ kind: \"package-not-declared\", line, name, installers } as const];\n });\n}\n","import { type CommandMigration, commandWordFindings, migrateCommand } from \"./command-migration.js\";\nimport { lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { shellVariables, type VariableDefinition } from \"./shell-variables.js\";\nimport {\n type ShellCommand,\n type ShellWord,\n shellCommands,\n shellCommandsAt,\n} from \"./shell-words.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\n\n/**\n * Dockerfiles and Containerfiles. `RUN`, `CMD` and `ENTRYPOINT` take a command in shell form (a\n * line the shell splits) or in exec form: a JSON array of strings, each one word, which no shell\n * splits. Docker reads an instruction whose argument is not a valid JSON array as shell form, and\n * so does the migration.\n */\n\n/**\n * An instruction that takes a command, at the start of a line, before its `[`, after the flags of\n * `RUN` (`--mount=type=cache,target=/root/.npm`, `--network=none`). In capitals, as Dockerfiles\n * write them and as the launcher table reads the shell form (command-launchers.ts).\n */\nconst EXEC_FORM_START_RE = /^[ \\t]*(?:RUN|CMD|ENTRYPOINT)(?:[ \\t]+--\\S+)*[ \\t]+\\[/gm;\n/** Shells whose `-c` option takes a command line, as `SHELL` and the shell form use them. */\nconst SHELLS: ReadonlySet<string> = new Set([\"sh\", \"bash\", \"dash\", \"ash\", \"zsh\"]);\nconst OPTION_PREFIX = \"-\";\nconst LONG_OPTION_PREFIX = \"--\";\nconst COMMAND_OPTION = \"c\";\nconst SET_OPTION = \"-o\";\nconst PATH_SEPARATOR = \"/\";\n/** Blanks between the items of the array; a `\\` at the end of a line continues the instruction. */\nconst ARRAY_BLANK_RE = /(?:[ \\t\\r\\n]|\\\\\\r?\\n)*/y;\n/** A double-quoted string on one line; `JSON.parse` decides whether it is a JSON string. */\nconst QUOTED_RE = /\"(?:[^\"\\\\\\n]|\\\\.)*\"/y;\nconst ITEM_SEPARATOR = \",\";\nconst NOT_LINE_BREAK_RE = /[^\\n]/g;\nconst ARRAY_END = \"]\";\n/** Instructions that set variables which later shell-form commands expand (`$GEN`). */\nconst VARIABLE_INSTRUCTIONS: ReadonlySet<string> = new Set([\"ARG\", \"ENV\"]);\nconst LEGACY_ENV_INSTRUCTION = \"ENV\";\nconst ASSIGNMENT = \"=\";\nconst QUOTES: ReadonlySet<string> = new Set(['\"', \"'\"]);\n\n/** Where a pattern with the sticky flag matches at `index`, or undefined. */\nfunction matchAt(pattern: RegExp, text: string, index: number): string | undefined {\n pattern.lastIndex = index;\n return pattern.exec(text)?.[0];\n}\n\n/** The value of a JSON string, or undefined when `raw` is not one (a bad escape, a raw tab). */\nfunction jsonString(raw: string): string | undefined {\n try {\n return JSON.parse(raw) as string;\n } catch (error) {\n // Docker reads an argument that is not valid JSON as shell form; so does the migration.\n if (error instanceof SyntaxError) {\n return undefined;\n }\n throw error;\n }\n}\n\n/** One exec-form array: where it starts (at the `[`) and ends (after the `]`), and its words. */\ninterface ExecForm {\n readonly start: number;\n readonly end: number;\n readonly words: readonly ShellWord[];\n}\n\n/** The exec-form array whose `[` is at `start`, or undefined when it is not one. */\nfunction execFormAt(text: string, start: number): ExecForm | undefined {\n const words: ShellWord[] = [];\n let index = start + 1;\n for (;;) {\n index += matchAt(ARRAY_BLANK_RE, text, index)?.length ?? 0;\n const raw = matchAt(QUOTED_RE, text, index);\n if (raw === undefined) {\n const isEmpty = text[index] === ARRAY_END && words.length === 0;\n return isEmpty ? { start, end: index + 1, words } : undefined;\n }\n const value = jsonString(raw);\n if (value === undefined) {\n return undefined;\n }\n // A word is the text inside the quotes, as an exec-form item of a YAML file is.\n words.push({ start: index + 1, end: index + raw.length - 1, value, raw: raw.slice(1, -1) });\n index += raw.length;\n index += matchAt(ARRAY_BLANK_RE, text, index)?.length ?? 0;\n if (text[index] === ARRAY_END) {\n return { start, end: index + 1, words };\n }\n if (text[index] !== ITEM_SEPARATOR) {\n return undefined;\n }\n index++;\n }\n}\n\n/** The exec-form arrays of a Dockerfile, in order. */\nfunction execForms(text: string): ExecForm[] {\n return [...text.matchAll(EXEC_FORM_START_RE)].flatMap((match) => {\n const form = execFormAt(text, match.index + match[0].length - 1);\n return form === undefined ? [] : [form];\n });\n}\n\n/**\n * The command line of `[\"sh\", \"-c\", \"…\"]` (also `/bin/bash -o pipefail -ec`): the word after the\n * first short option that holds `c`, before any word that is not an option.\n */\nfunction shellScript(words: readonly ShellWord[]): ShellWord | undefined {\n const program = words[0]?.value.split(PATH_SEPARATOR).at(-1) ?? \"\";\n if (!SHELLS.has(program)) {\n return undefined;\n }\n let index = 1;\n for (let option = words[index]?.value; option !== undefined; option = words[index]?.value) {\n if (!option.startsWith(OPTION_PREFIX)) {\n return undefined;\n }\n if (!option.startsWith(LONG_OPTION_PREFIX) && option.includes(COMMAND_OPTION)) {\n return words[index + 1];\n }\n // `-o pipefail` names a shell option in the next word.\n index += option === SET_OPTION ? 2 : 1;\n }\n return undefined;\n}\n\n/** What the exec-form arrays run: the arrays, and the command lines of the shells they start. */\ninterface ExecCommands {\n readonly commands: readonly ShellCommand[];\n /** Command lines with JSON escapes, whose offsets do not map onto the file: reported only. */\n readonly escaped: readonly ShellWord[];\n}\n\nfunction execCommands(forms: readonly ExecForm[]): ExecCommands {\n const commands: ShellCommand[] = [];\n const escaped: ShellWord[] = [];\n for (const { words } of forms) {\n commands.push(words);\n const script = shellScript(words);\n if (script !== undefined && script.raw === script.value) {\n commands.push(...shellCommandsAt(script.value, script.start));\n } else if (script !== undefined) {\n escaped.push(script);\n }\n }\n return { commands, escaped };\n}\n\n/** The text with the arrays blanked out, line breaks kept, so the shell reads the rest. */\nfunction withoutExecForms(text: string, forms: readonly ExecForm[]): string {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (const { start, end } of forms) {\n parts.push(\n text.slice(copiedUpTo, start),\n text.slice(start, end).replace(NOT_LINE_BREAK_RE, \" \"),\n );\n copiedUpTo = end;\n }\n parts.push(text.slice(copiedUpTo));\n return parts.join(\"\");\n}\n\n/** A command line that the migration would change but cannot edit in place, as a manual step. */\nfunction escapedScriptSteps(scripts: readonly ShellWord[], lineOf: (offset: number) => number) {\n return scripts.flatMap((script): ManualStep[] => {\n const migrated = migrateCommand(script.value, \"\").text;\n return migrated === script.value\n ? []\n : [{ kind: \"command-string\", line: lineOf(script.start), to: migrated }];\n });\n}\n\n/** A variable that `ARG` or `ENV` sets: its name, and its value as commands at their offsets. */\ninterface DockerVariable {\n readonly name: string;\n readonly commands: readonly ShellCommand[];\n}\n\n/** The variable of one `NAME=value` word, its quotes taken off, or undefined. */\nfunction assignedVariable(word: ShellWord): DockerVariable | undefined {\n const at = word.raw.indexOf(ASSIGNMENT);\n if (at <= 0) {\n return undefined;\n }\n const raw = word.raw.slice(at + 1);\n const isQuoted = raw.length >= 2 && QUOTES.has(raw[0] as string) && raw.at(-1) === raw[0];\n const value = isQuoted ? raw.slice(1, -1) : raw;\n const start = word.start + at + 1 + (isQuoted ? 1 : 0);\n return { name: word.raw.slice(0, at), commands: shellCommandsAt(value, start) };\n}\n\n/**\n * The variables that `ARG NAME=value` and `ENV NAME=value …` set, and `ENV NAME value`, the\n * legacy form that sets one variable to the rest of the line.\n */\nfunction dockerVariables(commands: readonly ShellCommand[]): DockerVariable[] {\n return commands.flatMap(([instruction, first, ...rest]) => {\n if (instruction === undefined || first === undefined) {\n return [];\n }\n if (!VARIABLE_INSTRUCTIONS.has(instruction.value)) {\n return [];\n }\n if (instruction.value === LEGACY_ENV_INSTRUCTION && !first.raw.includes(ASSIGNMENT)) {\n return [{ name: first.value, commands: [rest] }];\n }\n return [first, ...rest].flatMap((word) => assignedVariable(word) ?? []);\n });\n}\n\nconst definitionOf = ({ name, commands }: DockerVariable): VariableDefinition => ({\n name,\n value: commands.flatMap((words) => words.map((word) => word.raw)).join(\" \"),\n});\n\n/**\n * Migrate the commands of a Dockerfile: exec-form arrays word by word, everything else as shell\n * text, with the values of `ARG` and `ENV` variables as commands that `$NAME` runs. Each finding\n * names its `file:line`.\n */\nexport function migrateDockerfile(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const forms = execForms(text);\n const exec = execCommands(forms);\n const shellForm = shellCommands(withoutExecForms(text, forms));\n // A value that runs the generator is migrated where it is set, its flags where it is used.\n const definitions = dockerVariables(shellForm);\n const values = definitions.flatMap((variable) => variable.commands);\n const commands = [...shellForm, ...values, ...exec.commands];\n const variables = shellVariables(definitions.map(definitionOf));\n const { edits, changes, manualSteps } = commandWordFindings(commands, locate, variables);\n const steps = [...manualSteps, ...escapedScriptSteps(exec.escaped, lineOf)];\n return { text: applyTextEdits(text, edits), changes, manualSteps: steps };\n}\n","/**\n * What the catalogs of a project keep under the old names (domain/catalogs.ts makes the plan).\n * It is apart from the catalogs so that dependency-map.ts can read a plan without importing the\n * catalog readers, which import it.\n */\n\nconst CATALOG_PROTOCOL = \"catalog:\";\n/** The name that `catalog:` gives the default catalog. */\nexport const DEFAULT_CATALOG = \"default\";\n\n/** The catalog that a spec points at (`catalog:` is the default one), or undefined. */\nexport function catalogOfSpec(spec: string): string | undefined {\n if (!spec.startsWith(CATALOG_PROTOCOL)) {\n return undefined;\n }\n // pnpm trims the name, so `catalog: ` is the default catalog too.\n return spec.slice(CATALOG_PROTOCOL.length).trim() || DEFAULT_CATALOG;\n}\n\n/** Entries of catalogs, by catalog and package name. */\nexport class CatalogEntries {\n readonly #keys = new Set<string>();\n\n add(catalog: string, name: string): void {\n this.#keys.add(JSON.stringify([catalog, name]));\n }\n\n has(catalog: string, name: string): boolean {\n return this.#keys.has(JSON.stringify([catalog, name]));\n }\n}\n\n/** What the catalogs of a project keep under the old names. */\nexport interface CatalogPlan {\n /** Entries that a dependency keeps using under the old name: they are not renamed. */\n readonly inUse: CatalogEntries;\n /** Entries that keep the old name, with no entry for the new one: a dependency stays. */\n readonly kept: CatalogEntries;\n /**\n * The entries of the project's catalogs. A dependency on an entry that is not among them points\n * at a catalog outside the root (`--root packages/api` of a pnpm workspace): that entry cannot\n * be renamed, so the dependency keeps its name.\n */\n readonly defined: CatalogEntries;\n /**\n * Whether the root is a workspace root: it holds the workspace's catalogs, so there is no\n * catalog above it, and an entry missing from the project is missing from the workspace.\n */\n readonly isWorkspaceRoot: boolean;\n}\n\n/** The plan for files with no dependencies on catalogs (import maps): nothing is kept. */\nexport const NO_CATALOG_PLAN: CatalogPlan = {\n inUse: new CatalogEntries(),\n kept: new CatalogEntries(),\n defined: new CatalogEntries(),\n isWorkspaceRoot: false,\n};\n","import { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { migrateVersionSpec } from \"./version-spec.js\";\n\n/**\n * `npm:` specs name a package from the registry under another name: an alias in package.json\n * (`\"my-fetch\": \"npm:openapi-fetch@^0.13\"`), and the npm specifiers of Deno (in `deno.json`\n * imports and in sources: `npm:openapi-fetch@0.13/path`, `npm:/openapi-fetch@0.13/`). The package\n * in them is renamed like any other, and the range gets the openapi-typesafe version.\n */\n\nconst NPM_PROTOCOL = \"npm:\";\nconst SCOPE_PREFIX = \"@\";\nconst PATH_SEPARATOR = \"/\";\nconst VERSION_SEPARATOR = \"@\";\n\n/** The parts of `npm:[/]<name>[@<range>][/<path>]`; `rest` is the `/<path>` after the range. */\ninterface NpmSpec {\n readonly lead: string;\n readonly name: string;\n readonly range: string | undefined;\n readonly rest: string;\n}\n\n/** The end of the package name in `text`: a scoped name has one `/` inside. */\nfunction nameEnd(text: string): number {\n const searchFrom = text.startsWith(SCOPE_PREFIX) ? text.indexOf(PATH_SEPARATOR) + 1 : 0;\n const ends = [VERSION_SEPARATOR, PATH_SEPARATOR]\n .map((separator) => text.indexOf(separator, Math.max(searchFrom, 1)))\n .filter((index) => index !== -1);\n return ends.length === 0 ? text.length : Math.min(...ends);\n}\n\nfunction parseNpmSpec(spec: string): NpmSpec | undefined {\n if (!spec.startsWith(NPM_PROTOCOL)) {\n return undefined;\n }\n const body = spec.slice(NPM_PROTOCOL.length);\n const lead = body.startsWith(PATH_SEPARATOR) ? PATH_SEPARATOR : \"\";\n const text = body.slice(lead.length);\n const end = nameEnd(text);\n const name = text.slice(0, end);\n if (!text.startsWith(VERSION_SEPARATOR, end)) {\n return { lead, name, range: undefined, rest: text.slice(end) };\n }\n const rangeEnd = text.indexOf(PATH_SEPARATOR, end);\n const restStart = rangeEnd === -1 ? text.length : rangeEnd;\n return { lead, name, range: text.slice(end + 1, restStart), rest: text.slice(restStart) };\n}\n\n/**\n * An `npm:` spec of an original package, renamed. `isReported` when its range was kept;\n * `isDeep` when it reaches into the package (`npm:openapi-fetch@0.13/dist/index.js`).\n */\nexport interface MigratedNpmSpec {\n readonly spec: string;\n readonly isReported: boolean;\n readonly isDeep: boolean;\n}\n\n/** Whether `spec` is an `npm:` specifier of an original package (`npm:openapi-fetch@^0.13`). */\nexport function isOldPackageNpmSpec(spec: string): boolean {\n const parsed = parseNpmSpec(spec);\n return parsed !== undefined && PACKAGE_RENAMES.has(parsed.name);\n}\n\n/**\n * The `npm:` spec with the openapi-typesafe package and version, or undefined when `spec` is not\n * an `npm:` spec of an original package. A spec without a range keeps none; a range that is not\n * a semver range (a tag) is kept and reported.\n */\nexport function migrateNpmSpec(spec: string, version: string): MigratedNpmSpec | undefined {\n const parsed = parseNpmSpec(spec);\n const renamed = parsed === undefined ? undefined : PACKAGE_RENAMES.get(parsed.name);\n if (parsed === undefined || renamed === undefined) {\n return undefined;\n }\n const head = `${NPM_PROTOCOL}${parsed.lead}${renamed}`;\n const isDeep = parsed.rest !== \"\" && parsed.rest !== PATH_SEPARATOR;\n if (parsed.range === undefined) {\n return { spec: `${head}${parsed.rest}`, isReported: false, isDeep };\n }\n const decision = migrateVersionSpec(parsed.range, version);\n const isReported = decision.kind === \"kept\" && decision.isReported;\n const migrated = `${head}${VERSION_SEPARATOR}${decision.spec}${parsed.rest}`;\n return { spec: migrated, isReported, isDeep };\n}\n","/**\n * Credentials in URLs (`https://user:password@host`, `git+https://token@host`) that the findings\n * would copy into the report and the log. The project files keep them; only the findings hide\n * them, because a CI log or a temporary log file is a new place for a secret.\n */\n\nconst SCHEME_SEPARATOR = \"://\";\nconst HIDDEN_USERINFO = \"***\";\nconst USERINFO_END = \"@\";\n/** The authority of a URL ends at a path, a query, a fragment, a quote or white space. */\nconst AUTHORITY_END_RE = /[/?#\"'`\\s]/;\n\n/** The index where the authority that starts at `start` ends, and its last `@` (or -1). */\nfunction scanAuthority(text: string, start: number): { end: number; userinfoEnd: number } {\n let userinfoEnd = -1;\n let end = start;\n for (; end < text.length && !AUTHORITY_END_RE.test(text.charAt(end)); end++) {\n if (text.charAt(end) === USERINFO_END) {\n userinfoEnd = end;\n }\n }\n return { end, userinfoEnd };\n}\n\n/** `text` with the userinfo of every URL in it replaced by `***`. Linear in the text length. */\nexport function hideUrlCredentials(text: string): string {\n let hidden = \"\";\n let copiedUpTo = 0;\n for (let found = text.indexOf(SCHEME_SEPARATOR); found !== -1; ) {\n const start = found + SCHEME_SEPARATOR.length;\n const { end, userinfoEnd } = scanAuthority(text, start);\n if (userinfoEnd !== -1) {\n hidden += `${text.slice(copiedUpTo, start)}${HIDDEN_USERINFO}`;\n copiedUpTo = userinfoEnd;\n }\n found = text.indexOf(SCHEME_SEPARATOR, end);\n }\n return `${hidden}${text.slice(copiedUpTo)}`;\n}\n","import { assertNever } from \"./assert-never.js\";\nimport { type CatalogPlan, catalogOfSpec } from \"./catalog-plan.js\";\nimport type { Change, ManualStep } from \"./migration-findings.js\";\nimport { migrateNpmSpec } from \"./npm-alias.js\";\nimport { PACKAGE_RENAMES, renamedSpecifier } from \"./package-names.js\";\nimport type { TextEdit } from \"./text-edits.js\";\nimport { hideUrlCredentials } from \"./url-credentials.js\";\nimport { isLocalPackageSpec, migrateVersionSpec } from \"./version-spec.js\";\n\n/**\n * Maps of package names: dependency fields and catalogs (`name: spec`), and lists or keys that\n * only name a package (`peerDependenciesMeta`, `bundleDependencies`). The file formats (JSON and\n * YAML) give their entries with edits that keep the format's quoting; the decisions are here, so\n * every format renames the same way.\n */\n\n/** The string value of an entry, and the edit that replaces it. */\nexport interface SpecValue {\n readonly value: string;\n readonly replace: (spec: string) => TextEdit;\n}\n\n/** One `name: spec` entry. `spec` is undefined when the value is not a string. */\nexport interface SpecEntry {\n readonly name: string;\n readonly spec: SpecValue | undefined;\n readonly renameKey: (name: string) => TextEdit;\n}\n\n/** One place that only names a package: a key of a meta field, an item of a list. */\nexport interface NameEntry {\n readonly name: string;\n readonly rename: (name: string) => TextEdit;\n}\n\n/** The edits a file gets, and what the migration found while making them. */\nexport interface Findings {\n readonly edits: TextEdit[];\n readonly changes: Change[];\n readonly manualSteps: ManualStep[];\n}\n\nexport const newFindings = (): Findings => ({ edits: [], changes: [], manualSteps: [] });\n\n/**\n * A dependency field (`dependencies`, …), a catalog (`catalog`, `catalogs.legacy`, …), or an\n * import map (Deno's `imports` and `scopes`), whose keys are module specifiers: a package name, a\n * subpath of it or a prefix (`openapi-fetch/`).\n */\nexport type SpecMap =\n | { readonly kind: \"dependencies\"; readonly field: string }\n | {\n readonly kind: \"catalog\";\n /** Where the catalog is in its file (`catalogs.legacy`), for the report. */\n readonly catalog: string;\n /** The name that `catalog:<name>` gives it (`default` for `catalog:`). */\n readonly name: string;\n }\n | { readonly kind: \"imports\"; readonly field: string };\n\n/** What renamed entries get: the version of the tool, and the plan of the project's catalogs. */\nexport interface RenameTarget {\n readonly version: string;\n readonly catalogs: CatalogPlan;\n}\n\n/** Where a map is, the version renamed entries get, and where the findings go. */\nexport interface MapContext {\n readonly map: SpecMap;\n readonly version: string;\n readonly findings: Findings;\n /** What the project's catalogs keep under the old names (domain/catalogs.ts). */\n readonly catalogs: CatalogPlan;\n}\n\nconst PEER_FIELD = \"peerDependencies\";\n\nconst mapLabel = (map: SpecMap): string => (map.kind === \"catalog\" ? map.catalog : map.field);\n\n/** The new key of an entry of `map`, or undefined when it names no original package. */\nconst renamedKey = (name: string, map: SpecMap): string | undefined =>\n map.kind === \"imports\" ? renamedSpecifier(name)?.to : PACKAGE_RENAMES.get(name);\n\n/** The spec a renamed entry gets; `isReported` when it was kept because it is not a range. */\nfunction migrateSpec(spec: string, version: string): { spec: string; isReported: boolean } {\n const npm = migrateNpmSpec(spec, version);\n if (npm !== undefined) {\n return { spec: npm.spec, isReported: npm.isReported };\n }\n const decision = migrateVersionSpec(spec, version);\n return { spec: decision.spec, isReported: decision.kind === \"kept\" && decision.isReported };\n}\n\n/** A rename of one key or name, where it is, and the other names of that place. */\nexport interface Rename {\n readonly from: string;\n readonly to: string;\n readonly field: string;\n readonly names: ReadonlySet<string>;\n}\n\n/**\n * Whether the rename can be made: not when the place already has the new name too. Renaming then\n * would give a map the same key twice, and one entry would be lost without a word (finding\n * M10), so the old entry is left and reported.\n */\nexport function isFree({ from, to, field, names }: Rename, findings: Findings): boolean {\n if (names.has(to)) {\n findings.manualSteps.push({ kind: \"name-collision\", field, from, to });\n return false;\n }\n return true;\n}\n\n/** An entry under another name whose spec is an `npm:` alias of an original package. */\nfunction migrateAlias(entry: SpecEntry, { map, version, findings }: MapContext): void {\n const migrated = entry.spec === undefined ? undefined : migrateNpmSpec(entry.spec.value, version);\n if (entry.spec === undefined || migrated === undefined) {\n return;\n }\n findings.edits.push(entry.spec.replace(migrated.spec));\n const spec = hideUrlCredentials(migrated.spec);\n findings.changes.push({ kind: \"alias-renamed\", field: mapLabel(map), name: entry.name, spec });\n if (migrated.isReported) {\n findings.manualSteps.push({ kind: \"spec-kept\", name: entry.name, spec });\n }\n}\n\nfunction renamedChange(map: SpecMap, from: string, to: string, spec: string): Change {\n switch (map.kind) {\n case \"dependencies\":\n return { kind: \"dependency-renamed\", field: map.field, from, to, spec };\n case \"catalog\":\n return { kind: \"catalog-entry-renamed\", catalog: map.catalog, from, to, spec };\n case \"imports\":\n return { kind: \"import-renamed\", field: map.field, from, to, target: spec };\n default:\n return assertNever(map);\n }\n}\n\nfunction migrateEntry(\n entry: SpecEntry,\n spec: SpecValue,\n to: string,\n { map, version, findings }: MapContext,\n): void {\n const old = spec.value;\n const migrated = migrateSpec(old, version);\n findings.edits.push(entry.renameKey(to));\n if (migrated.spec !== old) {\n findings.edits.push(spec.replace(migrated.spec));\n }\n findings.changes.push(renamedChange(map, entry.name, to, hideUrlCredentials(migrated.spec)));\n if (migrated.isReported) {\n findings.manualSteps.push({ kind: \"spec-kept\", name: to, spec: hideUrlCredentials(old) });\n }\n if (map.kind === \"dependencies\" && map.field === PEER_FIELD) {\n findings.manualSteps.push({ kind: \"peer-dependency-renamed\", name: to });\n }\n}\n\n/**\n * Why an entry keeps its old name to stay in step with a catalog, or undefined. A dependency on a\n * catalog entry that stays keeps the name it points at; a catalog entry that a dependency keeps\n * using stays too, so `catalog:` never points at a name the catalog does not have. A dependency\n * on an entry outside the project keeps its name too: the tool edits no file outside the root.\n */\nfunction catalogHold(entry: SpecEntry, spec: SpecValue, { map, catalogs }: MapContext) {\n if (map.kind === \"catalog\") {\n const isInUse = catalogs.inUse.has(map.name, entry.name);\n return isInUse\n ? ({ kind: \"catalog-entry-in-use\", catalog: map.catalog, name: entry.name } as const)\n : undefined;\n }\n const catalog = map.kind === \"dependencies\" ? catalogOfSpec(spec.value) : undefined;\n if (catalog === undefined) {\n return undefined;\n }\n const reference = { field: mapLabel(map), name: entry.name, catalog };\n if (!catalogs.defined.has(catalog, entry.name)) {\n const kind = catalogs.isWorkspaceRoot ? \"catalog-entry-missing\" : \"catalog-entry-outside\";\n return { kind, ...reference } as const;\n }\n return catalogs.kept.has(catalog, entry.name)\n ? ({ kind: \"catalog-reference-kept\", ...reference } as const)\n : undefined;\n}\n\n/**\n * A dependency on a local package (`workspace:*`, `link:`, `file:`) is that package, which only\n * shares the original name: under the new name it would point at a package the project lacks.\n */\nfunction localPackageHold(entry: SpecEntry, spec: SpecValue, { map }: MapContext) {\n return map.kind === \"dependencies\" && isLocalPackageSpec(spec.value)\n ? ({ kind: \"local-package\", field: map.field, name: entry.name, spec: spec.value } as const)\n : undefined;\n}\n\n/** Why an entry keeps its old name, or undefined when it is renamed. */\nconst holdOf = (entry: SpecEntry, spec: SpecValue, context: MapContext) =>\n localPackageHold(entry, spec, context) ?? catalogHold(entry, spec, context);\n\n/**\n * Rename the original packages of a dependency field or catalog, in place, with `version` as\n * the new version, and retarget `npm:` aliases of them. An entry whose value is not a string (a\n * YAML anchor or flow value) is not one the tool understands: it is left and reported.\n */\nexport function migrateSpecMap(entries: readonly SpecEntry[], context: MapContext): void {\n const names = new Set(entries.map((entry) => entry.name));\n for (const entry of entries) {\n const to = renamedKey(entry.name, context.map);\n const field = mapLabel(context.map);\n if (to === undefined) {\n migrateAlias(entry, context);\n continue;\n }\n if (!isFree({ from: entry.name, to, field, names }, context.findings)) {\n continue;\n }\n const hold = entry.spec === undefined ? undefined : holdOf(entry, entry.spec, context);\n if (entry.spec === undefined) {\n context.findings.manualSteps.push({ kind: \"entry-not-edited\", field, name: entry.name });\n } else if (hold !== undefined) {\n context.findings.manualSteps.push(hold);\n } else {\n migrateEntry(entry, entry.spec, to, context);\n }\n }\n}\n\n/** Rename the original packages where `field` only names them. */\nexport function renameNames(\n entries: readonly NameEntry[],\n field: string,\n findings: Findings,\n): void {\n const names = new Set(entries.map((entry) => entry.name));\n for (const entry of entries) {\n const to = PACKAGE_RENAMES.get(entry.name);\n if (to !== undefined && isFree({ from: entry.name, to, field, names }, findings)) {\n findings.edits.push(entry.rename(to));\n findings.changes.push({\n kind: \"package-name-renamed\",\n location: field,\n from: entry.name,\n to,\n });\n }\n }\n}\n","import {\n type TreeList,\n type TreeMap,\n type TreeNode,\n type TreeScalar,\n textEntries,\n} from \"./config-documents.js\";\nimport type { NameEntry, SpecEntry } from \"./dependency-map.js\";\nimport type { TextEdit } from \"./text-edits.js\";\n\n/**\n * The tree side of domain/dependency-map.ts: the entries of parsed maps and lists, with the edits\n * that replace their keys and values in place (domain/config-documents.ts).\n */\n\n/** A scalar that a whole new value can replace. */\ntype EditableScalar = TreeScalar & { readonly encode: (value: string) => string };\n\nconst isEditable = (node: TreeNode): node is EditableScalar =>\n node.kind === \"scalar\" && node.encode !== undefined;\n\n/** The edit that writes `value` where `scalar` is. */\nexport const replaceScalar = (scalar: EditableScalar, value: string): TextEdit => ({\n start: scalar.start,\n end: scalar.end,\n text: scalar.encode(value),\n});\n\n/**\n * The `name: spec` entries of a dependency map, catalog or import map. A key the tool cannot\n * replace is left out; a value it cannot replace gives an entry without a spec.\n */\nexport function specEntries(map: TreeMap): SpecEntry[] {\n return textEntries(map).flatMap(({ key, value }): SpecEntry[] => {\n if (!isEditable(key)) {\n return [];\n }\n const spec = isEditable(value)\n ? { value: value.value, replace: (to: string) => replaceScalar(value, to) }\n : undefined;\n return [{ name: key.value, spec, renameKey: (name) => replaceScalar(key, name) }];\n });\n}\n\n/** The keys of `map` that the tool can replace, as names. */\nexport function keyEntries(map: TreeMap): NameEntry[] {\n return textEntries(map)\n .map(({ key }) => key)\n .filter(isEditable)\n .map((key) => ({ name: key.value, rename: (name) => replaceScalar(key, name) }));\n}\n\n/** The text items of `list` that the tool can replace, as names. */\nexport function itemEntries(list: TreeList): NameEntry[] {\n return list.items\n .filter(isEditable)\n .map((item) => ({ name: item.value, rename: (name) => replaceScalar(item, name) }));\n}\n\n/**\n * The keys of `node` and of the maps in it, at any depth, in order. Override fields name\n * packages by their keys (domain/override-targets.ts).\n */\nexport function nestedKeys(node: TreeNode): string[] {\n if (node.kind !== \"map\") {\n return [];\n }\n return textEntries(node).flatMap(({ key, value }) => [key.value, ...nestedKeys(value)]);\n}\n","// Import maps point at no catalog, so no catalog plan applies to them.\nimport { NO_CATALOG_PLAN } from \"./catalog-plan.js\";\nimport {\n type DocumentRead,\n isMap,\n mapsAt,\n type TreeMap,\n textEntries,\n unreadableConfig,\n} from \"./config-documents.js\";\nimport { type Findings, migrateSpecMap, newFindings } from \"./dependency-map.js\";\nimport type { FileMigration } from \"./migration-findings.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { specEntries } from \"./tree-entries.js\";\n\n/**\n * Deno import maps: the `imports` and `scopes` of `deno.json` / `deno.jsonc`, and of a separate\n * `import_map.json`. Sources import the keys, and the migration renames the packages in sources,\n * so a key that names an original package (`openapi-fetch`, `openapi-fetch/`) gets the new name\n * too, and an `npm:` value gets the new package and version. A value it cannot replace (a URL) is\n * kept and reported. Deno reads these files as JSONC; they are edited in place\n * (domain/config-documents.ts).\n */\n\nconst IMPORTS_FIELD = \"imports\";\nconst SCOPES_FIELD = \"scopes\";\nconst FIELD_SEPARATOR = \".\";\n\nfunction migrateImports(config: TreeMap, version: string, findings: Findings): void {\n for (const imports of mapsAt(config, IMPORTS_FIELD)) {\n const map = { kind: \"imports\", field: IMPORTS_FIELD } as const;\n migrateSpecMap(specEntries(imports), { map, version, findings, catalogs: NO_CATALOG_PLAN });\n }\n for (const scopes of mapsAt(config, SCOPES_FIELD)) {\n for (const { key, value } of textEntries(scopes)) {\n if (isMap(value)) {\n const field = [SCOPES_FIELD, key.value].join(FIELD_SEPARATOR);\n const map = { kind: \"imports\", field } as const;\n migrateSpecMap(specEntries(value), { map, version, findings, catalogs: NO_CATALOG_PLAN });\n }\n }\n }\n}\n\nconst PATH_SEPARATOR = \"/\";\nconst SCOPE_PREFIX = \"@\";\n\n/** The keys of an import map, the module specifiers it maps. */\nfunction importMapKeys(config: TreeMap): string[] {\n const scoped = mapsAt(config, SCOPES_FIELD)\n .flatMap(textEntries)\n .flatMap(({ value }) => (isMap(value) ? [value] : []));\n return [...mapsAt(config, IMPORTS_FIELD), ...scoped]\n .flatMap(textEntries)\n .map(({ key }) => key.value);\n}\n\n/**\n * The package names that an import map declares for the sources that use it: `pkg` of the keys\n * `pkg`, `pkg/` and `pkg/subpath`, and `@scope/pkg` of scoped keys. Deno resolves a bare import\n * through the map, so such a package needs no `package.json` entry.\n */\nexport function importMapNames(config: TreeMap): string[] {\n return importMapKeys(config).map((key) => {\n const parts = key.split(PATH_SEPARATOR);\n return key.startsWith(SCOPE_PREFIX)\n ? parts.slice(0, 2).join(PATH_SEPARATOR)\n : (parts[0] ?? key);\n });\n}\n\n/** Migrate the import map of a Deno config or import map file (`read` is `text` parsed). */\nexport function migrateImportMap(text: string, read: DocumentRead, version: string): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const config of read.documents.filter(isMap)) {\n migrateImports(config, version, findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import { type DocumentRead, isMap, isScalar, type TreeMap, valuesAt } from \"./config-documents.js\";\nimport type { ManualStep } from \"./migration-findings.js\";\nimport { referencedProjectPath } from \"./relative-references.js\";\n\n/**\n * A Deno config can keep its import map in another file and name it: `\"importMap\":\n * \"./deps.json\"`. Deno resolves the name against the folder of the config. A file in the project\n * is migrated as an import map; one the tool cannot edit (a URL, a path outside the project) is\n * reported, since the sources it maps get the new names.\n */\n\nconst IMPORT_MAP_FIELD = \"importMap\";\n\n/** Where the import map that a config names is, for a config at a project-relative path. */\nexport type ImportMapLocation =\n | { readonly kind: \"in-project\"; readonly path: string }\n | { readonly kind: \"not-editable\"; readonly reference: string };\n\n/** The `importMap` values of a config's roots, in order. */\nfunction importMapReferences(roots: readonly TreeMap[]): string[] {\n return roots\n .flatMap((root) => valuesAt(root, IMPORT_MAP_FIELD))\n .flatMap((value) => (isScalar(value) ? [value.value] : []));\n}\n\nexport function importMapLocation(configPath: string, reference: string): ImportMapLocation {\n const path = referencedProjectPath(configPath, reference);\n return path === undefined ? { kind: \"not-editable\", reference } : { kind: \"in-project\", path };\n}\n\n/** The import maps that the config at `configPath` names, read as `roots`. */\nexport const importMapLocations = (\n configPath: string,\n roots: readonly TreeMap[],\n): ImportMapLocation[] =>\n importMapReferences(roots).map((reference) => importMapLocation(configPath, reference));\n\n/** The manual steps for the import maps of a config that the tool cannot edit. */\nexport function importMapSteps(configPath: string, read: DocumentRead): ManualStep[] {\n const roots = read.kind === \"read\" ? read.documents.filter(isMap) : [];\n return importMapLocations(configPath, roots).flatMap((location) =>\n location.kind === \"not-editable\"\n ? [{ kind: \"import-map-not-editable\" as const, reference: location.reference }]\n : [],\n );\n}\n","import { type ImportedSpecifier, packageOfSpecifier } from \"./declared-packages.js\";\nimport {\n type Change,\n type FileMigration,\n lineLocator,\n type ManualStep,\n} from \"./migration-findings.js\";\nimport { isOldPackageNpmSpec, migrateNpmSpec } from \"./npm-alias.js\";\nimport {\n oldPackageInNodeModules,\n PACKAGE_RENAMES,\n type RenamedSpecifier,\n renamedSpecifier,\n} from \"./package-names.js\";\nimport { hideUrlCredentials } from \"./url-credentials.js\";\n\n/**\n * A string literal of a source file, as a parser finds it. `start` and `end` are the offsets of\n * its value, inside the quotes. `isModuleSpecifier` is true where the string names a module:\n * `import … from`, `export … from`, `import()`, `require()`, `import x = require()`,\n * `import(\"…\")` types and JSDoc `@import` tags, `declare module`, `/// <reference types>` and the\n * module mocks of vitest, jest and bun. Strings nest: a template with substitutions spans its\n * text as written, so the strings inside its `${…}` lie within it.\n */\nexport interface SourceString {\n readonly start: number;\n readonly end: number;\n readonly value: string;\n readonly isModuleSpecifier: boolean;\n}\n\n/** Source file extensions whose text can hold module specifiers. */\nexport const SOURCE_EXTENSIONS: ReadonlySet<string> = new Set([\n \".ts\",\n \".tsx\",\n \".mts\",\n \".cts\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".vue\",\n \".svelte\",\n \".astro\",\n \".mdx\",\n]);\n\n/** A renamed specifier; `keptSpec` is the old spec when its range could not be replaced. */\ninterface RenamedValue extends RenamedSpecifier {\n readonly keptSpec?: string;\n}\n\n/**\n * The new specifier: a package name or subpath, or a Deno `npm:` specifier\n * (`npm:openapi-fetch@^0.13`), which gets the new package and version.\n */\nfunction renamedValue(value: string, version: string): RenamedValue | undefined {\n const npm = migrateNpmSpec(value, version);\n if (npm === undefined) {\n return renamedSpecifier(value);\n }\n const renamed = { to: npm.spec, isDeep: npm.isDeep };\n return npm.isReported ? { ...renamed, keptSpec: hideUrlCredentials(value) } : renamed;\n}\n\n/**\n * Whether the migration renames a string with this value, or reports it as one that names a\n * package: an old package name or subpath, or an `npm:` specifier of one.\n */\nexport const namesRenamedModule = (value: string): boolean =>\n isOldPackageNpmSpec(value) || renamedSpecifier(value) !== undefined;\n\nconst TEMPLATE_SUBSTITUTION = \"${\";\n\n/**\n * The new name of an original package that a template specifier ends its name with, right before\n * a substitution (`openapi-fetch${suffix}`). The substitution may go on with the name or start a\n * subpath, so only the user knows what to write; undefined for any other specifier.\n */\nfunction dynamicPackage(value: string): string | undefined {\n const at = value.indexOf(TEMPLATE_SUBSTITUTION);\n return at === -1 ? undefined : PACKAGE_RENAMES.get(value.slice(0, at));\n}\n\n/** Outer strings first: a string that holds another starts no later and ends no earlier. */\nconst byStartThenOuter = (left: SourceString, right: SourceString): number =>\n left.start - right.start || right.end - left.end;\n\n/**\n * The strings in file order, outer before inner, each span once. A span found twice (two scripts\n * of a component that overlap) is one string, and a module specifier if either finding says so.\n * Spans may nest, as a template holds the strings of its substitutions; spans that cross cannot\n * both be replaced: that is a scanner bug, and editing on would corrupt the file.\n */\nfunction distinctStrings(strings: readonly SourceString[]): SourceString[] {\n const distinct: SourceString[] = [];\n const enclosing: SourceString[] = [];\n for (const found of [...strings].sort(byStartThenOuter)) {\n const previous = distinct.at(-1);\n if (previous?.start === found.start && previous.end === found.end) {\n const isModuleSpecifier = previous.isModuleSpecifier || found.isModuleSpecifier;\n distinct[distinct.length - 1] = { ...previous, isModuleSpecifier };\n continue;\n }\n let outer = enclosing.at(-1);\n while (outer !== undefined && outer.end <= found.start) {\n enclosing.pop();\n outer = enclosing.at(-1);\n }\n if (outer !== undefined && found.end > outer.end) {\n throw new Error(\n `Source strings overlap at offsets ${outer.start}-${outer.end} and ` +\n `${found.start}-${found.end}; the file was not changed.`,\n );\n }\n enclosing.push(found);\n distinct.push(found);\n }\n return distinct;\n}\n\nconst dynamicStep = (line: number, value: string, to: string): ManualStep => ({\n kind: \"dynamic-specifier\",\n line,\n value,\n to,\n});\n\n/**\n * The steps for a string that is not renamed: a module name built at run time from an old\n * package name, or a path into the installed files of an old package, which the new package\n * does not have there.\n */\nfunction unrenamedSteps(found: SourceString, line: number, dynamic: string | undefined) {\n if (dynamic !== undefined) {\n return [dynamicStep(line, found.value, dynamic)];\n }\n const name = found.isModuleSpecifier ? oldPackageInNodeModules(found.value) : undefined;\n const to = name === undefined ? undefined : PACKAGE_RENAMES.get(name);\n return name === undefined || to === undefined\n ? []\n : [{ kind: \"old-package-import\" as const, line, specifier: found.value, name, to }];\n}\n\n/**\n * Rename the original packages where a source file names them as modules. A string that equals a\n * package name anywhere else (an object key, a label, a config value) may mean the package or\n * may not, so it is reported, not changed. Comments are not strings and stay as written. The\n * `kept` packages stay: the file's manifest points them at a local package of that name.\n */\nexport function migrateModuleSpecifiers(\n text: string,\n strings: readonly SourceString[],\n version: string,\n kept: ReadonlySet<string> = new Set(),\n): FileMigration {\n const changes: Change[] = [];\n const manualSteps: ManualStep[] = [];\n let migrated = \"\";\n let copiedUpTo = 0;\n const lineOf = lineLocator(text);\n for (const found of distinctStrings(strings)) {\n const isKept = kept.has(packageOfSpecifier(found.value));\n const renamed = isKept ? undefined : renamedValue(found.value, version);\n const line = lineOf(found.start);\n const dynamic = found.isModuleSpecifier ? dynamicPackage(found.value) : undefined;\n if (renamed === undefined) {\n manualSteps.push(...unrenamedSteps(found, line, dynamic));\n continue;\n }\n // A string inside a template that was replaced is part of the replacement, which keeps it as\n // written, so it can only be reported.\n if (!found.isModuleSpecifier || found.start < copiedUpTo) {\n manualSteps.push({ kind: \"string-names-package\", line, value: found.value, to: renamed.to });\n continue;\n }\n changes.push({ kind: \"specifier-renamed\", line, from: found.value, to: renamed.to });\n // A deep import reaches into the package's files, whose layout is not part of the contract.\n if (renamed.isDeep) {\n manualSteps.push({ kind: \"deep-import\", line, specifier: renamed.to });\n }\n if (renamed.keptSpec !== undefined) {\n manualSteps.push({ kind: \"spec-kept\", name: renamed.to, spec: renamed.keptSpec });\n }\n migrated += `${text.slice(copiedUpTo, found.start)}${renamed.to}`;\n copiedUpTo = found.end;\n }\n return { text: migrated + text.slice(copiedUpTo), changes, manualSteps };\n}\n\n/**\n * The module specifiers of a source file as the migration leaves them: an original package with\n * its new name, any other specifier as written, each with its line.\n */\nexport function importedSpecifiers(\n text: string,\n strings: readonly SourceString[],\n): ImportedSpecifier[] {\n const lineOf = lineLocator(text);\n return strings\n .filter((found) => found.isModuleSpecifier)\n .map((found) => ({\n specifier: renamedSpecifier(found.value)?.to ?? found.value,\n line: lineOf(found.start),\n }));\n}\n","import {\n type DocumentPath,\n type DocumentRead,\n isMap,\n type TreeNode,\n textEntries,\n} from \"./config-documents.js\";\nimport { lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { namesRenamedModule, type SourceString } from \"./source-migration.js\";\n\n/**\n * Jest names packages inside patterns: `moduleNameMapper: { \"^openapi-fetch$\": … }`,\n * `transformIgnorePatterns: [\"node_modules/(?!(openapi-fetch)/)\"]`. A pattern is not a module\n * specifier, and whether it should match the new name is the user's call, so each one that names\n * an old package is reported, never changed: in `jest.config.*`, and in the `jest` field of\n * package.json.\n */\n\n/** The names Jest looks for its config under. */\nconst JEST_CONFIG_RE = /^jest\\.config\\.(?:[cm]?[jt]s|json)$/;\nexport const JEST_FIELD = \"jest\";\n/** A character that a package name can go on with; a name in a pattern is not followed by one. */\nconst NAME_CHARACTER_RE = /[\\w-]/;\nconst FIELD_SEPARATOR = \".\";\n\nexport const isJestConfig = (fileName: string): boolean => JEST_CONFIG_RE.test(fileName);\n\n/** Whether `name` is in `value` as a whole package name, not a part of a longer one. */\nfunction hasWholeName(value: string, name: string): boolean {\n for (let at = value.indexOf(name); at !== -1; at = value.indexOf(name, at + 1)) {\n const before = value[at - 1] ?? \"\";\n const after = value[at + name.length] ?? \"\";\n if (!NAME_CHARACTER_RE.test(before) && !NAME_CHARACTER_RE.test(after)) {\n return true;\n }\n }\n return false;\n}\n\n/** The old packages that a pattern names, in the order of PACKAGE_RENAMES. */\nexport const oldPackagesInPattern = (value: string): string[] =>\n [...PACKAGE_RENAMES.keys()].filter((name) => hasWholeName(value, name));\n\n/**\n * The steps for the old packages a pattern names. `isNameReported` is true where a string that is\n * a module name is reported already: the source migration reports such a string of a script\n * (`\"openapi-fetch\"`, `\"openapi-fetch/$1\"`) as a string that names the package. Nothing reports a\n * JSON value, so there it is a step too.\n */\nconst patternSteps = (value: string, location: string, isNameReported: boolean): ManualStep[] =>\n isNameReported && namesRenamedModule(value)\n ? []\n : oldPackagesInPattern(value).map((name) => ({\n kind: \"pattern-names-package\",\n location,\n value,\n name,\n to: PACKAGE_RENAMES.get(name) ?? name,\n }));\n\n/** The steps for the strings of a Jest config script that are not module specifiers. */\nexport function jestScriptSteps(text: string, strings: readonly SourceString[]): ManualStep[] {\n const lineOf = lineLocator(text);\n return strings\n .filter((string) => !string.isModuleSpecifier)\n .flatMap((string) => patternSteps(string.value, `line ${lineOf(string.start)}`, true));\n}\n\n/** The keys and string values of `node` with the key path they are at. */\nfunction textsAt(node: TreeNode, path: DocumentPath): { value: string; path: DocumentPath }[] {\n switch (node.kind) {\n case \"scalar\":\n return [{ value: node.value, path }];\n case \"list\":\n return node.items.flatMap((item, index) => textsAt(item, [...path, index]));\n case \"map\":\n return textEntries(node).flatMap(({ key, value }) => [\n { value: key.value, path },\n ...textsAt(value, [...path, key.value]),\n ]);\n default:\n return [];\n }\n}\n\n/** The steps for a Jest config in JSON: `node` at `path` (`[\"jest\"]` in package.json). */\nexport const jestConfigSteps = (node: TreeNode, path: DocumentPath): ManualStep[] =>\n textsAt(node, path).flatMap(({ value, path: at }) =>\n patternSteps(value, at.join(FIELD_SEPARATOR), false),\n );\n\n/** The steps for `jest.config.json`, read as `read`. */\nexport const jestJsonSteps = (read: DocumentRead): ManualStep[] =>\n read.kind === \"read\"\n ? read.documents.filter(isMap).flatMap((root) => jestConfigSteps(root, []))\n : [];\n","import { migrateCommand } from \"./command-migration.js\";\nimport { type CommandPathPattern, isCommandPath } from \"./command-paths.js\";\nimport type { DocumentString } from \"./config-documents.js\";\nimport type { Change, FileMigration, ManualStep } from \"./migration-findings.js\";\nimport { applyTextEdits, type TextEdit } from \"./text-edits.js\";\n\n/**\n * Commands in JSON configs, at the paths of domain/command-paths.ts. Only the strings at those\n * paths are migrated, and each is replaced in place, so the rest of the file keeps its formatting.\n */\n\n/** Migrate the command strings of a JSON config whose key paths match one of `patterns`. */\nexport function migrateJsonCommands(\n text: string,\n strings: readonly DocumentString[],\n patterns: readonly CommandPathPattern[],\n): FileMigration {\n const changes: Change[] = [];\n const manualSteps: ManualStep[] = [];\n const edits: TextEdit[] = [];\n for (const found of strings.filter((string) => isCommandPath(string.path, patterns))) {\n const migrated = migrateCommand(found.value, found.path.join(\".\"));\n changes.push(...migrated.changes);\n manualSteps.push(...migrated.manualSteps);\n if (migrated.text !== found.value) {\n edits.push({ start: found.start, end: found.end, text: JSON.stringify(migrated.text) });\n }\n }\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","/**\n * The literals of just expressions: in a variable's value (`gen := env_var_or_default(\"GEN\",\n * \"npx openapi-typescript\")`), in a recipe parameter's default (`types gen=\"npx …\":`) and in an\n * interpolation (`{{ \"npx …\" }}`). A string can become command text of a recipe line, and a\n * backtick is a command that just runs, so their text is read as command lines where it is\n * written. Which literal an expression evaluates to (an `if`, a function call, the environment)\n * is known only when just runs.\n */\n\n/** A string literal or a backtick, with the place of its text between the delimiters. */\nexport interface JustLiteral {\n readonly kind: \"string\" | \"backtick\";\n /** The offset of the opening delimiter. */\n readonly start: number;\n /** The offset after the closing delimiter. */\n readonly end: number;\n readonly contentStart: number;\n /** The text between the delimiters as written: an escape (`\\\"`) stays two characters. */\n readonly content: string;\n}\n\n/** The delimiters of just, the indented (tripled) forms first. */\nconst DELIMITERS: readonly string[] = ['\"\"\"', \"'''\", \"```\", '\"', \"'\", \"`\"];\nconst BACKTICK = \"`\";\n/** The one delimiter in which just reads escapes, so `\\\"` does not end the string. */\nconst ESCAPING_DELIMITER = '\"';\nconst ESCAPE = \"\\\\\";\nconst COMMENT_START = \"#\";\nconst LINE_BREAK = \"\\n\";\n\n/** The end of the text that a delimiter at `from` closes, or undefined when it is not closed. */\nfunction closingOffset(text: string, delimiter: string, from: number): number | undefined {\n if (delimiter !== ESCAPING_DELIMITER) {\n const close = text.indexOf(delimiter, from);\n return close === -1 ? undefined : close;\n }\n for (let index = from; index < text.length; index += 1) {\n const char = text[index];\n if (char === ESCAPE) {\n index += 1;\n } else if (char === ESCAPING_DELIMITER || char === LINE_BREAK) {\n return char === ESCAPING_DELIMITER ? index : undefined;\n }\n }\n return undefined;\n}\n\n/** The literal that starts at `offset`, or undefined when none does. */\nexport function literalAt(text: string, offset: number): JustLiteral | undefined {\n const delimiter = DELIMITERS.find((candidate) => text.startsWith(candidate, offset));\n if (delimiter === undefined) {\n return undefined;\n }\n const contentStart = offset + delimiter.length;\n const close = closingOffset(text, delimiter, contentStart);\n if (close === undefined) {\n return undefined;\n }\n const kind = delimiter.startsWith(BACKTICK) ? \"backtick\" : \"string\";\n const content = text.slice(contentStart, close);\n return { kind, start: offset, end: close + delimiter.length, contentStart, content };\n}\n\n/** The literals of an expression and the offset where it ends. */\nexport interface JustExpression {\n readonly literals: readonly JustLiteral[];\n readonly end: number;\n}\n\n/**\n * The expression from `start` to the end of its line, before a comment: a literal that spans\n * lines (`\"\"\"…\"\"\"`) moves the end to the line where it closes.\n */\nexport function expressionAt(text: string, start: number): JustExpression {\n const literals: JustLiteral[] = [];\n let index = start;\n while (index < text.length && text[index] !== LINE_BREAK && text[index] !== COMMENT_START) {\n const literal = literalAt(text, index);\n literals.push(...(literal === undefined ? [] : [literal]));\n index = literal?.end ?? index + 1;\n }\n return { literals, end: index };\n}\n\n/** The literals between `start` and `end`, which no literal crosses (a parameter default). */\nexport function literalsBetween(text: string, start: number, end: number): JustLiteral[] {\n const literals: JustLiteral[] = [];\n for (let index = start; index < end; ) {\n const literal = literalAt(text, index);\n literals.push(...(literal === undefined ? [] : [literal]));\n index = literal?.end ?? index + 1;\n }\n return literals;\n}\n\n/** An interpolation of a recipe line, `{{…}}`, with the literals of its expression. */\nexport interface JustInterpolation {\n readonly start: number;\n readonly end: number;\n readonly literals: readonly JustLiteral[];\n}\n\nconst INTERPOLATION_OPEN = \"{{\";\nconst INTERPOLATION_CLOSE = \"}}\";\n\n/** The interpolation that opens at `start`, or undefined when its line does not close it. */\nfunction interpolationAt(text: string, start: number): JustInterpolation | undefined {\n const literals: JustLiteral[] = [];\n for (let index = start + INTERPOLATION_OPEN.length; index < text.length; ) {\n if (text.startsWith(INTERPOLATION_CLOSE, index)) {\n return { start, end: index + INTERPOLATION_CLOSE.length, literals };\n }\n if (text[index] === LINE_BREAK) {\n return undefined;\n }\n const literal = literalAt(text, index);\n literals.push(...(literal === undefined ? [] : [literal]));\n index = literal?.end ?? index + 1;\n }\n return undefined;\n}\n\n/** The interpolations of a text in order; a `}}` inside a literal does not close one. */\nexport function interpolationsOf(text: string): JustInterpolation[] {\n const found: JustInterpolation[] = [];\n for (let open = text.indexOf(INTERPOLATION_OPEN); open !== -1; ) {\n const interpolation = interpolationAt(text, open);\n found.push(...(interpolation === undefined ? [] : [interpolation]));\n const next = interpolation?.end ?? open + INTERPOLATION_OPEN.length;\n open = text.indexOf(INTERPOLATION_OPEN, next);\n }\n return found;\n}\n","import { type JustLiteral, literalAt, literalsBetween } from \"./just-expressions.js\";\n\n/**\n * The parameters of justfile recipes: `types gen=\"npx openapi-typescript\" *args:`. A parameter is\n * a variable of its recipe's lines (`{{gen}}`), set by its default or by the command line\n * (`just types other`), so its value can always be another program.\n */\n\n/** A parameter with a default: its name, the literals of the default, the variable it names. */\nexport interface ParameterDefault {\n readonly name: string;\n readonly literals: readonly JustLiteral[];\n /** The variable that the default is (`gen=other`), or undefined for another expression. */\n readonly target: string | undefined;\n}\n\n/** A recipe's header up to its colon, which just reads and no shell does. */\nexport interface RecipeHeader {\n readonly start: number;\n readonly end: number;\n readonly defaults: readonly ParameterDefault[];\n}\n\n/** The recipe name at the start of a line, with the quiet `@` prefix. */\nconst RECIPE_NAME_RE = /^@?[A-Za-z_][A-Za-z0-9_-]*(?=[ \\t:])/gm;\n/** One parameter: its kind prefix (`+`, `*`, `$`), its name and its default. */\nconst PARAMETER_RE = /^[+*$]*([A-Za-z_][A-Za-z0-9_-]*)(?:=([\\s\\S]*))?$/;\nconst NAME_RE = /^[A-Za-z_][A-Za-z0-9_-]*$/;\nconst COLON = \":\";\nconst EQUALS = \"=\";\nconst OPEN_PAREN = \"(\";\nconst CLOSE_PAREN = \")\";\nconst COMMENT_START = \"#\";\nconst LINE_BREAK = \"\\n\";\nconst BLANK_RE = /[ \\t]/;\n\n/** How a character changes the depth of parentheses. */\nconst depthChange = (char: string | undefined): number =>\n char === OPEN_PAREN ? 1 : char === CLOSE_PAREN ? -1 : 0;\n\n/** A word of the parameter list: its place, literals and parentheses kept whole. */\ninterface ParameterWord {\n readonly start: number;\n readonly end: number;\n}\n\n/**\n * The colon that ends the header that starts at `from`, or undefined when the line is not a\n * header: `:=` (a `set` or an `alias`) or a comment comes first, or the line has no colon.\n */\nfunction headerColon(text: string, from: number): number | undefined {\n for (let index = from; index < text.length && text[index] !== LINE_BREAK; ) {\n const literal = literalAt(text, index);\n const char = text[index];\n if (literal !== undefined) {\n index = literal.end;\n continue;\n }\n if (char === COMMENT_START || (char === COLON && text[index + 1] === EQUALS)) {\n return undefined;\n }\n if (char === COLON) {\n return index;\n }\n index += 1;\n }\n return undefined;\n}\n\n/** The words between `start` and `end`, split at blanks outside literals and parentheses. */\nfunction parameterWords(text: string, start: number, end: number): ParameterWord[] {\n const words: ParameterWord[] = [];\n let wordStart: number | undefined;\n let depth = 0;\n for (let index = start; index < end; ) {\n const isBreak = depth === 0 && BLANK_RE.test(text[index] ?? \"\");\n if (isBreak && wordStart !== undefined) {\n words.push({ start: wordStart, end: index });\n }\n wordStart = isBreak ? undefined : (wordStart ?? index);\n const literal = isBreak ? undefined : literalAt(text, index);\n depth += literal === undefined ? depthChange(text[index]) : 0;\n index = literal?.end ?? index + 1;\n }\n return wordStart === undefined ? words : [...words, { start: wordStart, end }];\n}\n\nfunction parameterDefault(text: string, word: ParameterWord): ParameterDefault[] {\n const written = text.slice(word.start, word.end);\n const match = PARAMETER_RE.exec(written);\n const value = match?.[2];\n if (match === null || value === undefined) {\n return [];\n }\n const defaultStart = word.end - value.length;\n const literals = literalsBetween(text, defaultStart, word.end);\n const target = NAME_RE.test(value) ? value : undefined;\n return [{ name: match[1] as string, literals, target }];\n}\n\n/** The recipe headers of a justfile with the defaults of their parameters. */\nexport function recipeHeaders(text: string): RecipeHeader[] {\n return [...text.matchAll(RECIPE_NAME_RE)].flatMap((match) => {\n const nameEnd = match.index + match[0].length;\n const colon = headerColon(text, nameEnd);\n if (colon === undefined) {\n return [];\n }\n const words = parameterWords(text, nameEnd, colon);\n const defaults = words.flatMap((word) => parameterDefault(text, word));\n return [{ start: match.index, end: colon, defaults }];\n });\n}\n","import { type CommandMigration, commandWordFindings } from \"./command-migration.js\";\nimport { type FileVariables, runsGenerator } from \"./file-variables.js\";\nimport {\n expressionAt,\n interpolationsOf,\n type JustInterpolation,\n type JustLiteral,\n} from \"./just-expressions.js\";\nimport {\n type ParameterDefault,\n type RecipeHeader,\n recipeHeaders,\n} from \"./just-recipe-parameters.js\";\nimport { lineLocator } from \"./migration-findings.js\";\nimport {\n type ShellCommand,\n type ShellWord,\n shellCommands,\n shellCommandsAt,\n} from \"./shell-words.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport {\n type ProgramDefinition,\n type VariableProgram,\n variablePrograms,\n} from \"./variable-programs.js\";\n\n/**\n * Justfiles. just puts the value of a variable into a recipe line before the shell runs it, so a\n * variable can hold the generator command: `gen := \"npx openapi-typescript\"`, then\n * `{{gen}} a.yaml -it`. Each string literal and backtick of a just expression (a value, a\n * parameter default, an interpolation) is migrated where it is written, as a command line; the\n * flags after a variable set to the generator, or to such a variable (`run := gen`), where it is\n * used. A value that just computes (`env_var_or_default(\"GEN\", \"npx openapi-typescript\")`, an\n * `if`) and a recipe parameter may run another program, so the flags after them are reported.\n * Everything else is shell text.\n */\n\n/** An assignment at the start of a line: `gen := …`, also `export gen := …`. */\nconst ASSIGNMENT_RE = /^(?:export[ \\t]+)?([A-Za-z_][A-Za-z0-9_-]*)[ \\t]*:=[ \\t]*/gm;\n/** A value that is the name of another variable. */\nconst NAME_VALUE_RE = /^[A-Za-z_][A-Za-z0-9_-]*$/;\n/** An interpolation of one variable, after the recipe prefix (`@`, `-`) of the line. */\nconst VARIABLE_INTERPOLATION_RE = /^[@+-]*\\{\\{[ \\t]*([A-Za-z_][A-Za-z0-9_-]*)[ \\t]*\\}\\}$/;\nconst MASK = \"_\";\nconst BLANK = \" \";\n\n/** An assignment of a justfile: the variable, its value as written, and their places. */\ninterface Assignment {\n readonly name: string;\n /** The value as written, without a comment after it. */\n readonly value: string;\n readonly start: number;\n readonly end: number;\n readonly literals: readonly JustLiteral[];\n}\n\nfunction assignmentsOf(text: string): Assignment[] {\n return [...text.matchAll(ASSIGNMENT_RE)].map((match) => {\n const valueStart = match.index + match[0].length;\n const { literals, end } = expressionAt(text, valueStart);\n const value = text.slice(valueStart, end).trim();\n return { name: match[1] as string, value, start: match.index, end, literals };\n });\n}\n\n/** The literal that is the whole value, or undefined for another expression. */\nfunction onlyString({ value, literals }: Assignment): JustLiteral | undefined {\n const [literal] = literals;\n if (literals.length !== 1 || literal?.kind !== \"string\") {\n return undefined;\n }\n return value.length === literal.end - literal.start ? literal : undefined;\n}\n\nconst stringRunsGenerator = (literal: JustLiteral): boolean =>\n literal.kind === \"string\" && shellCommands(literal.content).some(runsGenerator);\n\n/**\n * The definitions of a value that just computes from `literals`, or that the command line gives:\n * it may be a string that runs the generator, and it may be anything else.\n */\nfunction computedDefinitions(name: string, literals: readonly JustLiteral[]): ProgramDefinition[] {\n const other: ProgramDefinition = { name, kind: \"command\", runsGenerator: false };\n const isMaybeGenerator = literals.some(stringRunsGenerator);\n return isMaybeGenerator ? [{ name, kind: \"command\", runsGenerator: true }, other] : [other];\n}\n\n/** Each assignment as the programs it can set: a reference, a command, or a computed value. */\nfunction assignmentDefinitions(assignment: Assignment): ProgramDefinition[] {\n const { name, value } = assignment;\n if (NAME_VALUE_RE.test(value)) {\n return [{ name, kind: \"reference\", target: value }];\n }\n const literal = onlyString(assignment);\n return literal === undefined\n ? computedDefinitions(name, assignment.literals)\n : [{ name, kind: \"command\", runsGenerator: stringRunsGenerator(literal) }];\n}\n\n/** A parameter: its default, and the command line, which can set anything. */\nfunction parameterDefinitions({ name, literals, target }: ParameterDefault): ProgramDefinition[] {\n const fromCommandLine = computedDefinitions(name, literals);\n return target === undefined\n ? fromCommandLine\n : [{ name, kind: \"reference\", target }, ...fromCommandLine];\n}\n\n/** The shell text of a justfile, and the interpolations of its recipe lines. */\ninterface ShellText {\n readonly text: string;\n readonly interpolations: readonly JustInterpolation[];\n}\n\n/**\n * The text as the shell gets it: each interpolation one word of the same length, and each\n * assignment and recipe header blanked, since just reads them and no shell does. Blanks keep\n * every offset, so the interpolations found in it are those of the file's recipe lines.\n */\nfunction shellText(text: string, spans: readonly { start: number; end: number }[]): ShellText {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (const { start, end } of [...spans].sort((left, right) => left.start - right.start)) {\n parts.push(text.slice(copiedUpTo, start), BLANK.repeat(end - start));\n copiedUpTo = end;\n }\n parts.push(text.slice(copiedUpTo));\n const blanked = parts.join(\"\");\n const interpolations = interpolationsOf(blanked);\n const masked = interpolations.reduce(\n (current, { start, end }) =>\n current.slice(0, start) + MASK.repeat(end - start) + current.slice(end),\n blanked,\n );\n return { text: masked, interpolations };\n}\n\n/** The commands of literals, read as written: an escape (`\\\"`) stays two characters. */\nconst literalCommands = (literals: readonly JustLiteral[]): ShellCommand[] =>\n literals.flatMap((literal) => shellCommandsAt(literal.content, literal.contentStart));\n\n/** The values of the variables, for an argument that expands one (`{{flags}}`). */\nfunction variableValues(assignments: readonly Assignment[]): Map<string, string> {\n const values = new Map<string, string>();\n for (const assignment of assignments) {\n const value = onlyString(assignment)?.content ?? assignment.value;\n values.set(assignment.name, [values.get(assignment.name), value].join(\" \").trim());\n }\n return values;\n}\n\n/**\n * The program of a word with interpolations that are not one variable: one whose strings may run\n * the generator (`{{ env_var_or_default(\"GEN\", \"npx openapi-typescript\") }}`) may also run another.\n */\nfunction computedProgram(written: string): VariableProgram | undefined {\n const literals = interpolationsOf(written).flatMap((interpolation) => interpolation.literals);\n return literals.some(stringRunsGenerator) ? \"generator-or-other\" : undefined;\n}\n\n/** The variables of a justfile, read from its assignments and recipe parameters. */\nfunction justfileVariables(\n text: string,\n values: ReadonlyMap<string, string>,\n programs: ReadonlyMap<string, VariableProgram>,\n): FileVariables {\n const writtenAt = (word: ShellWord): string => text.slice(word.start, word.end);\n const nameAt = (word: ShellWord) => VARIABLE_INTERPOLATION_RE.exec(writtenAt(word))?.[1];\n return {\n programAt: (word) => {\n const name = nameAt(word);\n const written = writtenAt(word);\n const found = name === undefined ? computedProgram(written) : programs.get(name);\n return found === undefined ? undefined : { written, program: found };\n },\n referenceAt: (word) => {\n const name = nameAt(word);\n const value = name === undefined ? undefined : values.get(name);\n return value === undefined ? undefined : { written: writtenAt(word), value };\n },\n };\n}\n\n/** Migrate a justfile; each finding names its `file:line`. */\nexport function migrateJustfile(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n const assignments = assignmentsOf(text);\n const headers: RecipeHeader[] = recipeHeaders(text);\n const defaults = headers.flatMap((header) => header.defaults);\n const programs = variablePrograms([\n ...assignments.flatMap(assignmentDefinitions),\n ...defaults.flatMap(parameterDefinitions),\n ]);\n const variables = justfileVariables(text, variableValues(assignments), programs);\n const shell = shellText(text, [...assignments, ...headers]);\n const commands = [\n ...shellCommands(shell.text),\n ...literalCommands(assignments.flatMap((assignment) => assignment.literals)),\n ...literalCommands(defaults.flatMap((found) => found.literals)),\n ...literalCommands(shell.interpolations.flatMap((found) => found.literals)),\n ];\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const { edits, changes, manualSteps } = commandWordFindings(commands, locate, variables);\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import { type CommandMigration, commandWordFindings } from \"./command-migration.js\";\nimport { type FileVariables, runsGenerator } from \"./file-variables.js\";\nimport { lineLocator } from \"./migration-findings.js\";\nimport { type ShellWord, shellCommands } from \"./shell-words.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport {\n type ProgramDefinition,\n type VariableProgram,\n variablePrograms,\n} from \"./variable-programs.js\";\n\n/**\n * Makefiles. Make expands its variables before a recipe line reaches the shell, so a variable can\n * hold the generator command: `OAT := openapi-typescript`, then `$(OAT) a.yaml -it`. The value of\n * an assignment is read as a command and migrated where it is set; the flags after a reference\n * to such a variable, or to one set to it (`GEN := $(OAT)`), are migrated where it is used.\n * Everything else is shell text.\n */\n\n/**\n * A variable assignment at the start of a line (not a recipe line, which starts with a tab), also\n * one for some targets only (`gen: OAT := openapi-typescript`).\n */\nconst ASSIGNMENT_RE = new RegExp(\n [\n \"^(?:[^\\\\s:#=][^:#=\\\\n]*:[ \\\\t]*)?\",\n \"(?:(?:export|override|private)[ \\\\t]+)*\",\n \"([A-Za-z_][A-Za-z0-9_.-]*)\",\n \"[ \\\\t]*(:::=|::=|:=|\\\\?=|\\\\+=|!=|=)\",\n ].join(\"\"),\n \"gm\",\n);\n/**\n * A reference to one variable, as a whole word: `$(NAME)`, `${NAME}`, or `$N` for a variable whose\n * name is one letter, as make reads a `$` before any other character.\n */\nconst VARIABLE_REFERENCE_RE =\n /^\\$(?:\\(([A-Za-z_][A-Za-z0-9_.-]*)\\)|\\{([A-Za-z_][A-Za-z0-9_.-]*)\\}|([A-Za-z_]))$/;\n/** `@`, `-` and `+` before a recipe line: silent, ignore errors, always run. */\nconst RECIPE_PREFIX_RE = /^[@+-]+/;\nconst DOLLAR = \"$\";\nconst CLOSING: Readonly<Record<string, string>> = { \"(\": \")\", \"{\": \"}\" };\nconst NOT_LINE_BREAK_RE = /[^\\n]/g;\nconst MASK = \"_\";\nconst LINE_BREAK = \"\\n\";\nconst BACKSLASH = \"\\\\\";\n\n/** Where the make expansion that starts with the `$` at `start` ends, or undefined for none. */\nfunction expansionEnd(text: string, start: number): number | undefined {\n const open = text[start + 1] ?? \"\";\n const close = CLOSING[open];\n if (close === undefined) {\n return undefined;\n }\n let depth = 0;\n for (let index = start + 1; index < text.length; index++) {\n if (text[index] === open) {\n depth++;\n } else if (text[index] === close && --depth === 0) {\n return index + 1;\n }\n }\n return undefined;\n}\n\n/**\n * The text with each `$(…)` and `${…}` expansion turned into one word of the same length, so the\n * shell reads it as make passes it on. `$$` is a `$` for the shell and stays.\n */\nfunction maskExpansions(text: string): string {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (let index = text.indexOf(DOLLAR); index !== -1; index = text.indexOf(DOLLAR, index + 1)) {\n if (text[index + 1] === DOLLAR) {\n index++;\n continue;\n }\n const end = expansionEnd(text, index);\n if (end !== undefined) {\n parts.push(text.slice(copiedUpTo, index + 1), MASK.repeat(end - index - 1));\n copiedUpTo = end;\n index = end - 1;\n }\n }\n parts.push(text.slice(copiedUpTo));\n return parts.join(\"\");\n}\n\n/** `+=` adds text to the value a variable already has, so the program it runs stays. */\nconst APPEND_OPERATOR = \"+=\";\n\n/** An assignment of a Makefile: the variable, where it starts, and where its value is. */\ninterface Assignment {\n readonly name: string;\n readonly isAppend: boolean;\n readonly start: number;\n readonly valueStart: number;\n readonly valueEnd: number;\n}\n\n/** Where the line that holds `index` ends; a `\\` before a line break continues it. */\nfunction logicalLineEnd(text: string, index: number): number {\n let end = text.indexOf(LINE_BREAK, index);\n while (end !== -1 && text[end - 1] === BACKSLASH) {\n end = text.indexOf(LINE_BREAK, end + 1);\n }\n return end === -1 ? text.length : end;\n}\n\nconst assignmentsOf = (text: string): Assignment[] =>\n [...text.matchAll(ASSIGNMENT_RE)].map((match) => {\n const valueStart = match.index + match[0].length;\n const valueEnd = logicalLineEnd(text, valueStart);\n const name = match[1] as string;\n const isAppend = match[2] === APPEND_OPERATOR;\n return { name, isAppend, start: match.index, valueStart, valueEnd };\n });\n\n/** The text with the `NAME :=` of each assignment blanked, so its value reads as a command. */\nfunction withoutAssignmentHeads(text: string, assignments: readonly Assignment[]): string {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (const { start, valueStart } of assignments) {\n parts.push(\n text.slice(copiedUpTo, start),\n text.slice(start, valueStart).replace(NOT_LINE_BREAK_RE, \" \"),\n );\n copiedUpTo = valueStart;\n }\n parts.push(text.slice(copiedUpTo));\n return parts.join(\"\");\n}\n\n/** The variable that `written` references as a whole, after the recipe prefix, or undefined. */\nfunction referencedName(written: string): string | undefined {\n const match = VARIABLE_REFERENCE_RE.exec(written.trim().replace(RECIPE_PREFIX_RE, \"\"));\n return match === null ? undefined : (match[1] ?? match[2] ?? match[3]);\n}\n\n/**\n * Each assignment as the program it sets: text appended to the value, a reference to one variable\n * (`GEN := $(OAT)`), or a command, which runs the generator when one of the commands that start in\n * its value does.\n */\nfunction programDefinitions(\n text: string,\n commands: readonly (readonly ShellWord[])[],\n assignments: readonly Assignment[],\n): ProgramDefinition[] {\n const generatorStarts = commands\n .filter(runsGenerator)\n .map((command) => (command[0] as ShellWord).start);\n return assignments.map(({ name, isAppend, valueStart, valueEnd }): ProgramDefinition => {\n if (isAppend) {\n return { name, kind: \"append\" };\n }\n const target = referencedName(text.slice(valueStart, valueEnd));\n if (target !== undefined) {\n return { name, kind: \"reference\", target };\n }\n const runs = generatorStarts.some((start) => valueStart <= start && start < valueEnd);\n return { name, kind: \"command\", runsGenerator: runs };\n });\n}\n\n/** The values each variable gets in the file, joined: any of them can reach a command. */\nfunction variableValues(text: string, assignments: readonly Assignment[]): Map<string, string> {\n const values = new Map<string, string>();\n for (const { name, valueStart, valueEnd } of assignments) {\n const value = text.slice(valueStart, valueEnd);\n values.set(name, [values.get(name), value].filter((part) => part !== undefined).join(\" \"));\n }\n return values;\n}\n\n/** The variables of a Makefile, read from its assignments. */\nfunction makefileVariables(\n text: string,\n assignments: readonly Assignment[],\n programs: ReadonlyMap<string, VariableProgram>,\n) {\n const values = variableValues(text, assignments);\n const nameAt = (word: ShellWord) => referencedName(text.slice(word.start, word.end));\n const variables: FileVariables = {\n programAt: (program) => {\n const name = nameAt(program);\n // A variable that no line of the file sets comes from an included file, the command line\n // or the environment, so it may run the generator.\n const found = name === undefined ? undefined : (programs.get(name) ?? \"generator-or-other\");\n const written = text.slice(program.start, program.end);\n return found === undefined ? undefined : { written, program: found };\n },\n referenceAt: (word) => {\n const name = nameAt(word);\n const value = name === undefined ? undefined : values.get(name);\n const written = text.slice(word.start, word.end);\n return value === undefined ? undefined : { written, value };\n },\n };\n return variables;\n}\n\n/** Migrate a Makefile; each finding names its `file:line`. */\nexport function migrateMakefile(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n const assignments = assignmentsOf(text);\n const commands = shellCommands(withoutAssignmentHeads(maskExpansions(text), assignments));\n const programs = variablePrograms(programDefinitions(text, commands, assignments));\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const variables = makefileVariables(text, assignments, programs);\n const { edits, changes, manualSteps } = commandWordFindings(commands, locate, variables);\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import { PACKAGE_RENAMES } from \"./package-names.js\";\n\n/**\n * Override, resolution and patch keys name a package with a path or a version around it:\n * `app>openapi-fetch` (pnpm), `**\\/openapi-fetch` (Yarn), `openapi-fetch@0.13` (pnpm, npm).\n * Matching the name as a substring took `openapi-typescript-helpers` for `openapi-typescript` too.\n */\n\nconst PARENT_SEPARATOR = \">\";\nconst PATH_SEPARATOR = \"/\";\nconst SCOPE_PREFIX = \"@\";\n\n/** The package a key targets: the last parent and path segment, without a version. */\nexport function overrideTarget(key: string): string {\n const child = key.split(PARENT_SEPARATOR).at(-1) ?? key;\n const segments = child.split(PATH_SEPARATOR);\n const isScoped = segments.length > 1 && segments.at(-2)?.startsWith(SCOPE_PREFIX) === true;\n const name = isScoped ? segments.slice(-2).join(PATH_SEPARATOR) : (segments.at(-1) ?? child);\n const versionAt = name.indexOf(SCOPE_PREFIX, 1);\n return versionAt === -1 ? name : name.slice(0, versionAt);\n}\n\n/** The original packages that `keys` target; each once, in key order. */\nexport function overriddenPackages(keys: readonly string[]): string[] {\n const targets = keys.map(overrideTarget);\n return [...new Set(targets.filter((target) => PACKAGE_RENAMES.has(target)))];\n}\n","import {\n CatalogEntries,\n type CatalogPlan,\n catalogOfSpec,\n DEFAULT_CATALOG,\n} from \"./catalog-plan.js\";\nimport {\n isMap,\n mapsAt,\n type TreeMap,\n type TreeNode,\n textEntries,\n valuesAt,\n} from \"./config-documents.js\";\nimport { overrideTarget } from \"./override-targets.js\";\nimport {\n CATALOG_FIELD,\n DEPENDENCY_FIELDS,\n NAMED_CATALOGS_FIELD,\n OVERRIDE_FIELDS,\n PACKAGE_RENAMES,\n PNPM_SETTINGS_FIELD,\n WORKSPACES_FIELD,\n} from \"./package-names.js\";\nimport { specEntries } from \"./tree-entries.js\";\n\n/**\n * Catalogs and the dependencies that point at them (`\"openapi-fetch\": \"catalog:\"`). A catalog\n * entry and the dependencies on it must keep the same name, or the install fails\n * (`ERR_PNPM_CATALOG_ENTRY_NOT_FOUND_FOR_SPEC`). The files are migrated one by one, so this plan\n * is made from all of them first: an entry keeps its old name while a dependency keeps using it,\n * and a dependency keeps its old name while its entry stays.\n */\n\nconst PATH_SEPARATOR = \".\";\n\n/** One catalog map: its name as `catalog:<name>` names it, and where it is in the file. */\nexport interface CatalogMap {\n readonly name: string;\n readonly label: string;\n readonly map: TreeMap;\n}\n\n/**\n * The catalogs of a file: `catalog` (the default one) and `catalogs.<name>`, as pnpm and Yarn\n * read them, and also under `workspaces` as bun reads them. `prefix` names where `root` is.\n */\nexport function catalogMaps(root: TreeMap, prefix = \"\"): CatalogMap[] {\n const maps = mapsAt(root, CATALOG_FIELD).map((map) => ({\n name: DEFAULT_CATALOG,\n label: `${prefix}${CATALOG_FIELD}`,\n map,\n }));\n for (const catalogs of mapsAt(root, NAMED_CATALOGS_FIELD)) {\n for (const { key, value } of textEntries(catalogs)) {\n if (isMap(value)) {\n const label = [prefix + NAMED_CATALOGS_FIELD, key.value].join(PATH_SEPARATOR);\n maps.push({ name: key.value, label, map: value });\n }\n }\n }\n return maps;\n}\n\n/** The catalogs of a manifest: at the top level and under `workspaces` (bun). */\nexport const manifestCatalogMaps = (manifest: TreeMap): CatalogMap[] => [\n ...catalogMaps(manifest),\n ...mapsAt(manifest, WORKSPACES_FIELD).flatMap((workspaces) =>\n catalogMaps(workspaces, `${WORKSPACES_FIELD}${PATH_SEPARATOR}`),\n ),\n];\n\n/** The documents the plan is made from: manifests, and the files that hold catalogs. */\nexport interface CatalogDocuments {\n readonly manifests: readonly TreeMap[];\n readonly catalogFiles: readonly TreeMap[];\n readonly isWorkspaceRoot: boolean;\n}\n\n/**\n * Dependencies on a catalog that keep the old name whatever the catalog does: their field has the\n * new name too, so the rename is left (domain/dependency-map.ts).\n */\nfunction entriesInUse(manifests: readonly TreeMap[]): CatalogEntries {\n const inUse = new CatalogEntries();\n const fields = manifests.flatMap((manifest) =>\n DEPENDENCY_FIELDS.flatMap((field) => mapsAt(manifest, field)),\n );\n for (const dependencies of fields) {\n const entries = specEntries(dependencies);\n const names = new Set(entries.map((entry) => entry.name));\n for (const { name, spec } of entries) {\n const catalog = spec === undefined ? undefined : catalogOfSpec(spec.value);\n const to = PACKAGE_RENAMES.get(name);\n if (catalog !== undefined && to !== undefined && names.has(to)) {\n inUse.add(catalog, name);\n }\n }\n }\n return inUse;\n}\n\n/** The `key: value` texts below `node` at every depth: npm nests overrides by parent package. */\nfunction nestedTexts(node: TreeNode): { key: string; value: string }[] {\n if (node.kind !== \"map\") {\n return [];\n }\n return textEntries(node).flatMap(({ key, value }) =>\n value.kind === \"scalar\" ? [{ key: key.value, value: value.value }] : nestedTexts(value),\n );\n}\n\n/**\n * Adds the entries that overrides point at (`\"openapi-fetch\": \"catalog:\"` in `overrides`,\n * `resolutions` or `pnpm.overrides`). The tool reports overrides and leaves them as they are, so\n * the entry they use must keep its old name, or the install fails\n * (`ERR_PNPM_CATALOG_IN_OVERRIDES`).\n */\nfunction addOverrideUses(documents: readonly TreeMap[], inUse: CatalogEntries): void {\n const sections = documents.flatMap((document) =>\n [...OVERRIDE_FIELDS, PNPM_SETTINGS_FIELD].flatMap((field) => valuesAt(document, field)),\n );\n for (const { key, value } of sections.flatMap(nestedTexts)) {\n const catalog = catalogOfSpec(value);\n const name = overrideTarget(key);\n if (catalog !== undefined && PACKAGE_RENAMES.has(name)) {\n inUse.add(catalog, name);\n }\n }\n}\n\n/**\n * The plan for the catalogs of a project, from all its manifests and catalog files. An entry with\n * an old name stays when its value is not one the tool edits (an alias, a flow map), or when a\n * dependency or an override keeps using it; then, unless the catalog has the new name too, the\n * dependencies on it keep the old name as well (dependency-map.ts makes both decisions by this\n * plan).\n */\nexport function planCatalogs({\n manifests,\n catalogFiles,\n isWorkspaceRoot,\n}: CatalogDocuments): CatalogPlan {\n const inUse = entriesInUse(manifests);\n addOverrideUses([...manifests, ...catalogFiles], inUse);\n const kept = new CatalogEntries();\n const defined = new CatalogEntries();\n const catalogs = [\n ...catalogFiles.flatMap((file) => catalogMaps(file)),\n ...manifests.flatMap(manifestCatalogMaps),\n ];\n for (const { name: catalog, map } of catalogs) {\n const entries = specEntries(map);\n const names = new Set(entries.map((entry) => entry.name));\n for (const { name, spec } of entries) {\n defined.add(catalog, name);\n const to = PACKAGE_RENAMES.get(name);\n const stays = spec === undefined || inUse.has(catalog, name);\n if (to !== undefined && !names.has(to) && stays) {\n kept.add(catalog, name);\n }\n }\n }\n return { inUse, kept, defined, isWorkspaceRoot };\n}\n","import { NPM_SPECIFIER_PREFIX } from \"./command-launchers.js\";\nimport {\n documentStrings,\n mapsAt,\n type TreeMap,\n type TreeNode,\n textEntries,\n} from \"./config-documents.js\";\nimport { isAtOrAbove } from \"./declared-packages.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { overrideTarget } from \"./override-targets.js\";\nimport { OVERRIDE_FIELDS, PACKAGE_RENAMES, PNPM_SETTINGS_FIELD } from \"./package-names.js\";\n\n/**\n * The override that aliases an original package to its successor\n * (`\"openapi-fetch\": \"npm:openapi-typesafe-fetch@^1.0.0\"`) is what the docs ask for when a library\n * such as swr-openapi takes its client type from the original package. It is the migration done,\n * so it is not reported, and a dependency that needs the original as its peer then needs nothing.\n */\n\n/** The key of pnpm's overrides in the `pnpm` field of a manifest (`pnpm.overrides`). */\nconst PNPM_OVERRIDES = \"overrides\";\n\n/** True for an override entry that points an original package at its successor. */\nfunction isSuccessorAlias(key: string, value: TreeNode): boolean {\n const successor = PACKAGE_RENAMES.get(overrideTarget(key));\n return (\n value.kind === \"scalar\" &&\n value.value.startsWith(NPM_SPECIFIER_PREFIX) &&\n packageReference(value.value).name === successor\n );\n}\n\n/**\n * The original packages that an override map names, each once, in order, without the entries\n * that alias one to its successor; nested maps (npm's `\"swr-openapi\": { … }`) are read too.\n */\nexport function overriddenOldPackages(node: TreeNode): string[] {\n const names =\n node.kind === \"map\"\n ? textEntries(node).flatMap(({ key, value }) =>\n isSuccessorAlias(key.value, value)\n ? []\n : [overrideTarget(key.value), ...overriddenOldPackages(value)],\n )\n : documentStrings([node]).map((string) => packageReference(string.value).name);\n return [...new Set(names.filter((name) => PACKAGE_RENAMES.has(name)))];\n}\n\n/** The original packages that an override map aliases to their successors, at any depth. */\nfunction aliasedIn(node: TreeNode): string[] {\n if (node.kind !== \"map\") {\n return [];\n }\n return textEntries(node).flatMap(({ key, value }) =>\n isSuccessorAlias(key.value, value) ? [overrideTarget(key.value)] : aliasedIn(value),\n );\n}\n\n/**\n * The original packages that a manifest (`overrides`, `resolutions`, `pnpm.overrides`) or a\n * `pnpm-workspace.yaml` (`overrides`) aliases to their successors.\n */\nexport function successorAliasedPackages(root: TreeMap): string[] {\n const fields = [...OVERRIDE_FIELDS].flatMap((field) => mapsAt(root, field));\n const pnpm = mapsAt(root, PNPM_SETTINGS_FIELD).flatMap((map) => mapsAt(map, PNPM_OVERRIDES));\n return [...new Set([...fields, ...pnpm].flatMap(aliasedIn))];\n}\n\n/** The successor aliases of one file of the project, by its path. */\nexport interface SuccessorAliases {\n readonly path: string;\n readonly names: ReadonlySet<string>;\n}\n\n/**\n * The original packages aliased to their successors for a manifest at `filePath`: by a file at\n * or above it, as a workspace root's overrides apply to its packages.\n */\nexport function aliasedPackagesFor(\n aliases: readonly SuccessorAliases[],\n filePath: string,\n): ReadonlySet<string> {\n const applying = aliases.filter(({ path }) => isAtOrAbove(path, filePath));\n return new Set(applying.flatMap(({ names }) => [...names]));\n}\n","import { documentStrings, type TreeMap, type TreeNode, textEntries } from \"./config-documents.js\";\nimport type { Findings } from \"./dependency-map.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { overrideTarget } from \"./override-targets.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { overriddenOldPackages } from \"./successor-aliases.js\";\nimport { nestedKeys } from \"./tree-entries.js\";\n\n/**\n * The settings of a package manager name packages in keys and values of every shape:\n * `packageExtensions: { \"openapi-fetch@*\": … }`, `allowedDeprecatedVersions`,\n * `onlyBuiltDependencies: [openapi-fetch]`, `overrides: { \"app>openapi-fetch\": … }`. A setting\n * that names an old package no longer applies once it is renamed, and what the new name needs\n * there is the user's call, so each one is reported, never changed.\n */\n\n/** How the sections of one settings map are read. */\nexport interface SettingsFile {\n /** Sections the migration renames itself (catalogs) or that hold no names (`packages`). */\n readonly migratedSections: ReadonlySet<string>;\n /** Sections that change what is installed; they are reported as overrides. */\n readonly overrideSections: ReadonlySet<string>;\n /** What comes before a section's key in the report (`pnpm.`). */\n readonly prefix: string;\n}\n\n/**\n * The old packages that `node` names, each once, in order: by its keys at any depth, with a path\n * or a version around the name (`a>openapi-fetch@0`), and by its string values, as a name with an\n * optional `npm:` and version (`openapi-fetch`, `npm:openapi-fetch@0.13`).\n */\nexport function oldPackagesNamedBy(node: TreeNode): string[] {\n const values = documentStrings([node]).map((string) => packageReference(string.value).name);\n const names = [...nestedKeys(node).map(overrideTarget), ...values];\n return [...new Set(names.filter((name) => PACKAGE_RENAMES.has(name)))];\n}\n\n/** Report each section of `settings` that names an old package, by its key. */\nexport function reportSettingSections(\n settings: TreeMap,\n file: SettingsFile,\n findings: Findings,\n): void {\n for (const { key, value } of textEntries(settings)) {\n if (file.migratedSections.has(key.value)) {\n continue;\n }\n const field = `${file.prefix}${key.value}`;\n const isOverride = file.overrideSections.has(key.value);\n const names = isOverride ? overriddenOldPackages(value) : oldPackagesNamedBy(value);\n for (const name of names) {\n findings.manualSteps.push(\n isOverride\n ? { kind: \"override-names-package\", field, name }\n : { kind: \"setting-names-package\", field, name },\n );\n }\n }\n}\n","import {\n type DocumentPath,\n documentStrings,\n isMap,\n type TreeMap,\n type TreeNode,\n textEntries,\n valuesAt,\n} from \"./config-documents.js\";\nimport { type Findings, isFree } from \"./dependency-map.js\";\nimport {\n oldPackageInNodeModules,\n PACKAGE_RENAMES,\n type RenamedSpecifier,\n renamedSpecifier,\n} from \"./package-names.js\";\nimport { replaceScalar } from \"./tree-entries.js\";\n\n/**\n * Config maps that name modules by their specifiers, as keys or as targets. The imports get the\n * new names (domain/source-migration.ts), so a key or target that names an original package, or\n * a subpath of it, would no longer match or resolve: it gets the new name too.\n */\n\nconst PATH_SEPARATOR = \".\";\n\n/**\n * Node's subpath imports: `\"imports\": { \"#client\": \"openapi-fetch\" }` maps a private name to a\n * target, a string under any nesting of conditions and fallback lists. The `#` keys are the\n * project's own names and stay.\n */\nconst IMPORTS_FIELD = \"imports\";\n\n/**\n * The `browser` field of bundlers: `\"browser\": { \"openapi-fetch\": false }` replaces a module, keyed\n * by its specifier, with another one or with nothing. A string `browser` names the package's own\n * file and stays.\n */\nconst BROWSER_FIELD = \"browser\";\n\n/** A deep specifier reaches into the package's files, whose layout is not part of the contract. */\nfunction reportDeep(renamed: RenamedSpecifier, location: string, findings: Findings): void {\n if (renamed.isDeep) {\n findings.manualSteps.push({ kind: \"deep-target\", location, specifier: renamed.to });\n }\n}\n\n/**\n * Rename the module specifiers among the strings below `nodes` (`field` locates them in the\n * report): a target that names an original package, or a subpath of it, gets the new name.\n */\nexport function renameSpecifierTargets(\n nodes: readonly TreeNode[],\n field: string,\n findings: Findings,\n): void {\n for (const target of documentStrings(nodes)) {\n const renamed = renamedSpecifier(target.value);\n if (renamed === undefined) {\n continue;\n }\n const location = [field, ...target.path].join(PATH_SEPARATOR);\n if (target.encode === undefined) {\n findings.manualSteps.push({ kind: \"entry-not-edited\", field: location, name: target.value });\n continue;\n }\n findings.edits.push(replaceScalar({ ...target, encode: target.encode }, renamed.to));\n findings.changes.push({\n kind: \"package-name-renamed\",\n location,\n from: target.value,\n to: renamed.to,\n });\n reportDeep(renamed, location, findings);\n }\n}\n\n/** A key that was renamed, by where it is, with its new name. */\ninterface RenamedKey {\n readonly location: string;\n readonly renamed: RenamedSpecifier;\n}\n\n/**\n * Rename the keys of `map` that are specifiers of an original package (`field` locates them), and\n * return them. A key whose new name the map already has is kept and reported, as dependency keys\n * are.\n */\nexport function renameSpecifierKeys(map: TreeMap, field: string, findings: Findings): RenamedKey[] {\n const keys = textEntries(map).map(({ key }) => key);\n const names = new Set(keys.map((key) => key.value));\n return keys.flatMap((key): RenamedKey[] => {\n const renamed = renamedSpecifier(key.value);\n if (renamed === undefined) {\n return [];\n }\n if (key.encode === undefined) {\n findings.manualSteps.push({ kind: \"entry-not-edited\", field, name: key.value });\n return [];\n }\n const { to } = renamed;\n if (!isFree({ from: key.value, to, field, names }, findings)) {\n return [];\n }\n findings.edits.push(replaceScalar({ ...key, encode: key.encode }, to));\n findings.changes.push({ kind: \"package-name-renamed\", location: field, from: key.value, to });\n return [{ location: `${field}${PATH_SEPARATOR}${key.value}`, renamed }];\n });\n}\n\nexport function migrateSubpathImports(manifest: TreeMap, findings: Findings): void {\n renameSpecifierTargets(valuesAt(manifest, IMPORTS_FIELD), IMPORTS_FIELD, findings);\n}\n\nexport function migrateBrowserField(manifest: TreeMap, findings: Findings): void {\n for (const browser of valuesAt(manifest, BROWSER_FIELD).filter(isMap)) {\n // A deep key replaces a file of the package, which the new package may not have there.\n for (const { location, renamed } of renameSpecifierKeys(browser, BROWSER_FIELD, findings)) {\n reportDeep(renamed, location, findings);\n }\n for (const { key, value } of textEntries(browser)) {\n renameSpecifierTargets([value], `${BROWSER_FIELD}${PATH_SEPARATOR}${key.value}`, findings);\n }\n }\n}\n\n/**\n * Report each string under `node` (at `prefix` of its file) that is a path into the installed\n * files of an old package (`node_modules/openapi-fetch/…`): the new package has its own files\n * there, so only the user can say where the path should point.\n */\nexport function reportOldPackagePaths(\n node: TreeNode,\n prefix: DocumentPath,\n findings: Findings,\n): void {\n for (const value of documentStrings([node])) {\n const name = oldPackageInNodeModules(value.value);\n const to = name === undefined ? undefined : PACKAGE_RENAMES.get(name);\n if (name !== undefined && to !== undefined) {\n const location = [...prefix, ...value.path].join(PATH_SEPARATOR);\n findings.manualSteps.push({ kind: \"old-package-path\", location, path: value.value, to });\n }\n }\n}\n","import { manifestCatalogMaps } from \"./catalogs.js\";\nimport {\n type DocumentRead,\n isMap,\n mapsAt,\n type TreeMap,\n textEntries,\n unreadableConfig,\n valuesAt,\n} from \"./config-documents.js\";\nimport { declaredNames } from \"./declared-packages.js\";\nimport {\n type Findings,\n migrateSpecMap,\n newFindings,\n type RenameTarget,\n renameNames,\n} from \"./dependency-map.js\";\nimport { JEST_FIELD, jestConfigSteps } from \"./jest-config.js\";\nimport { type FileMigration, unchanged } from \"./migration-findings.js\";\nimport { overriddenPackages } from \"./override-targets.js\";\nimport {\n DEPENDENCY_FIELDS,\n NAME_KEYED_FIELDS,\n NAME_LIST_FIELDS,\n namesOriginalPackage,\n OLD_PEER_DEPENDENTS,\n OVERRIDE_FIELDS,\n PACKAGE_RENAMES,\n PNPM_SETTINGS_FIELD,\n} from \"./package-names.js\";\nimport { reportSettingSections, type SettingsFile } from \"./settings-sections.js\";\nimport {\n migrateBrowserField,\n migrateSubpathImports,\n reportOldPackagePaths,\n} from \"./specifier-maps.js\";\nimport { overriddenOldPackages } from \"./successor-aliases.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { itemEntries, keyEntries, specEntries } from \"./tree-entries.js\";\n\n/**\n * A package manifest: package.json, or the `package.yaml` that pnpm reads in its place. It is\n * edited in place: a renamed key or a new spec replaces that one value, and everything else stays\n * as written (domain/config-documents.ts). Scripts are commands: file-migrations.ts migrates\n * them with the other command files.\n */\n\n/** TypeScript's `typesVersions`: its paths may point into the installed files of an old package. */\nconst TYPES_VERSIONS_FIELD = \"typesVersions\";\n\nfunction migrateDependencyFields(manifest: TreeMap, target: RenameTarget, findings: Findings) {\n for (const field of DEPENDENCY_FIELDS) {\n for (const dependencies of mapsAt(manifest, field)) {\n const map = { kind: \"dependencies\", field } as const;\n migrateSpecMap(specEntries(dependencies), { ...target, map, findings });\n }\n }\n}\n\n/**\n * Keys of the meta fields that name an original package are renamed. A key with a version\n * (`openapi-fetch@0.13.0`, as Yarn allows) would need a new version too, so it is reported.\n */\nfunction migrateNameKeys(manifest: TreeMap, findings: Findings): void {\n for (const field of NAME_KEYED_FIELDS) {\n for (const meta of mapsAt(manifest, field)) {\n renameNames(keyEntries(meta), field, findings);\n const versioned = textEntries(meta)\n .map(({ key }) => key.value)\n .filter((key) => !PACKAGE_RENAMES.has(key));\n for (const name of overriddenPackages(versioned)) {\n findings.manualSteps.push({ kind: \"override-names-package\", field, name });\n }\n }\n }\n}\n\nfunction migrateNameLists(manifest: TreeMap, findings: Findings): void {\n for (const field of NAME_LIST_FIELDS) {\n for (const list of valuesAt(manifest, field)) {\n if (list.kind === \"list\") {\n renameNames(itemEntries(list), field, findings);\n }\n }\n }\n}\n\n/** bun's `catalog` and `catalogs.<name>`, at the top level and under `workspaces`. */\nfunction migrateCatalogs(manifest: TreeMap, target: RenameTarget, findings: Findings): void {\n for (const { name, label, map } of manifestCatalogMaps(manifest)) {\n const context = {\n ...target,\n map: { kind: \"catalog\", catalog: label, name } as const,\n findings,\n };\n migrateSpecMap(specEntries(map), context);\n }\n}\n\n/** pnpm's settings in package.json: none of them is migrated, `overrides` among them. */\nconst PNPM_SETTINGS: SettingsFile = {\n migratedSections: new Set(),\n overrideSections: new Set([\"overrides\", \"patchedDependencies\"]),\n prefix: `${PNPM_SETTINGS_FIELD}.`,\n};\n\n/**\n * Overrides, resolutions and pnpm's settings can name the old packages; changing them needs the\n * user's intent (domain/settings-sections.ts).\n */\nfunction reportSettings(manifest: TreeMap, findings: Findings): void {\n for (const field of OVERRIDE_FIELDS) {\n for (const name of valuesAt(manifest, field).flatMap(overriddenOldPackages)) {\n findings.manualSteps.push({ kind: \"override-names-package\", field, name });\n }\n }\n for (const settings of mapsAt(manifest, PNPM_SETTINGS_FIELD)) {\n reportSettingSections(settings, PNPM_SETTINGS, findings);\n }\n}\n\n/**\n * A dependency that needs an original package as its peer keeps needing it after the rename,\n * unless an override of this manifest or of a workspace above it (`aliased`, from the project\n * plan) already points the peer at its successor.\n */\nfunction reportOldPeers(manifest: TreeMap, aliased: ReadonlySet<string>, findings: Findings) {\n const dependencies = new Set(declaredNames(manifest));\n for (const [dependent, { peer, range }] of OLD_PEER_DEPENDENTS) {\n if (dependencies.has(dependent) && !aliased.has(peer)) {\n findings.manualSteps.push({ kind: \"old-peer-needed\", dependent, peer, range });\n }\n }\n}\n\n/**\n * What a manifest is migrated with: the rename target, and the original packages that the\n * overrides of a workspace above it alias to their successors (domain/successor-aliases.ts).\n */\nexport interface ManifestTarget extends RenameTarget {\n readonly aliased?: ReadonlySet<string>;\n}\n\nfunction migrateManifestMap(manifest: TreeMap, target: ManifestTarget, findings: Findings): void {\n migrateDependencyFields(manifest, target, findings);\n migrateNameKeys(manifest, findings);\n migrateNameLists(manifest, findings);\n migrateCatalogs(manifest, target, findings);\n migrateSubpathImports(manifest, findings);\n migrateBrowserField(manifest, findings);\n for (const versions of valuesAt(manifest, TYPES_VERSIONS_FIELD)) {\n reportOldPackagePaths(versions, [TYPES_VERSIONS_FIELD], findings);\n }\n reportSettings(manifest, findings);\n for (const jest of valuesAt(manifest, JEST_FIELD)) {\n findings.manualSteps.push(...jestConfigSteps(jest, [JEST_FIELD]));\n }\n reportOldPeers(manifest, target.aliased ?? new Set(), findings);\n}\n\n/**\n * Migrate the package names of a manifest (`read` is `text` parsed): rename the original packages\n * in the dependency fields (with `version` as the new version), in the fields that name\n * dependencies, in bun's catalogs, in the targets of subpath imports and in the `browser` field,\n * and report overrides that name the original packages.\n */\nexport function migratePackageManifest(\n text: string,\n read: DocumentRead,\n target: ManifestTarget,\n): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const manifest of read.documents.filter(isMap)) {\n migrateManifestMap(manifest, target, findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n\n/**\n * A manifest in a format the tool does not read: pnpm's `package.json5`. JSON5 has its own\n * strings (single quotes, line continuations), so it is not edited; a manifest that names an\n * original package is reported for the user to migrate.\n */\nexport function unreadManifest(text: string): FileMigration {\n return namesOriginalPackage(text)\n ? { ...unchanged(text), manualSteps: [{ kind: \"manifest-not-read\" }] }\n : unchanged(text);\n}\n","import type { ManualStep } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\n\n/**\n * Patches to the code of an installed package, by the file names their tools give them:\n * patch-package `openapi-fetch+0.13.0.patch` (`parent++openapi-fetch+0.13.0.patch` for a nested\n * one), pnpm `openapi-fetch@0.13.0.patch`, Yarn `openapi-fetch-npm-0.13.0-<hash>.patch`. The new\n * package has other code, so a patch to an old one cannot be carried over: it is reported.\n */\n\nconst PATCH_EXTENSION = \".patch\";\nconst NESTED_SEPARATOR = \"++\";\n/** What follows the package name in each tool's file name. */\nconst NAME_ENDS = [\"+\", \"@\", \"-npm-\"] as const;\n\n/** The old package that a patch file patches, by its file name, or undefined. */\nexport function patchedOldPackage(fileName: string): string | undefined {\n if (!fileName.endsWith(PATCH_EXTENSION)) {\n return undefined;\n }\n const innermost = fileName.split(NESTED_SEPARATOR).at(-1) ?? fileName;\n return [...PACKAGE_RENAMES.keys()].find((name) =>\n NAME_ENDS.some((end) => innermost.startsWith(`${name}${end}`)),\n );\n}\n\n/** The manual step for a patch file of an old package. */\nexport function oldPackagePatchSteps(fileName: string): ManualStep[] {\n const name = patchedOldPackage(fileName);\n const to = name === undefined ? undefined : PACKAGE_RENAMES.get(name);\n return name === undefined || to === undefined ? [] : [{ kind: \"old-package-patch\", name, to }];\n}\n","import type { Locate, ShellTextFindings } from \"./command-migration.js\";\nimport type { DocumentPath, DocumentString } from \"./config-documents.js\";\nimport { namesOriginalPackage } from \"./package-names.js\";\n\n/**\n * A CI step can name the program that runs its script: GitHub Actions `shell: python` next to\n * `run`, or as `defaults.run.shell` of the job or the workflow; CircleCI `shell` next to\n * `command`, or of the job. A script for a program other than a shell is code of that language,\n * so the command migration leaves it as it is and reports it when it names an old package.\n */\n\n/** The key of a CI step or job that names the program its scripts go to. */\nconst STEP_SHELL_KEY = \"shell\";\n/** GitHub Actions' default shell of a job or a workflow: `defaults.run.shell`. */\nconst DEFAULT_SHELL_PATH: readonly string[] = [\"defaults\", \"run\", STEP_SHELL_KEY];\n/**\n * Shells whose scripts are command lines as the tool reads them: POSIX shells, PowerShell, cmd,\n * and the wrappers that run bash on Windows (`msys2 {0}` of setup-msys2, `wsl-bash {0}` of\n * setup-wsl).\n */\nconst COMMAND_LINE_SHELLS: ReadonlySet<string> = new Set([\n ...[\"sh\", \"bash\", \"dash\", \"ash\", \"zsh\", \"ksh\"],\n ...[\"pwsh\", \"powershell\", \"cmd\"],\n ...[\"msys2\", \"wsl-bash\"],\n]);\n/** `env` runs the program after its options and assignments (`/usr/bin/env bash -e {0}`). */\nconst ENV_PROGRAM = \"env\";\n/** The options of `env` that take the next word as their value. */\nconst ENV_OPTIONS_WITH_VALUE: ReadonlySet<string> = new Set([\"-u\", \"--unset\", \"-C\", \"--chdir\"]);\nconst OPTION_START = \"-\";\nconst ASSIGNMENT = \"=\";\nconst PATH_SEPARATOR_RE = /[/\\\\]/;\nconst WINDOWS_EXECUTABLE_RE = /\\.exe$/i;\nconst WHITESPACE_RE = /\\s+/;\n\n/** The `shell` of the step that a script belongs to, when it is not a shell. */\nexport type StepShellOf = (value: DocumentString) => string | undefined;\n\n/** The name of a program word: `bash` of `/usr/bin/bash` and of `C:\\msys64\\bin\\bash.exe`. */\nconst programName = (word: string): string =>\n (word.split(PATH_SEPARATOR_RE).at(-1) ?? \"\").replace(WINDOWS_EXECUTABLE_RE, \"\");\n\n/** The number of words after `env` before its program: options, their values, assignments. */\nfunction envPrefixLength(words: readonly string[]): number {\n let index = 0;\n while (index < words.length) {\n const word = words[index] ?? \"\";\n if (ENV_OPTIONS_WITH_VALUE.has(word)) {\n index += 2;\n } else if (word.startsWith(OPTION_START) || word.includes(ASSIGNMENT)) {\n index += 1;\n } else {\n break;\n }\n }\n return index;\n}\n\n/** The program of a `shell` value (`python`, `bash -e {0}`, `/usr/bin/env bash -e {0}`). */\nfunction shellProgram(shell: string): string {\n const words = shell.trim().split(WHITESPACE_RE);\n const first = programName(words[0] ?? \"\");\n if (first !== ENV_PROGRAM) {\n return first;\n }\n const rest = words.slice(1);\n return programName(rest[envPrefixLength(rest)] ?? \"\");\n}\n\n/** Whether a document path ends with `keys`. */\nconst endsWith = (path: DocumentPath, keys: readonly string[]): boolean =>\n keys.every((key, index) => path[path.length - keys.length + index] === key);\n\nconst isDefaultShell = (value: DocumentString): boolean => endsWith(value.path, DEFAULT_SHELL_PATH);\n\n/**\n * The map whose scripts a `shell` value is for, as a key: the step or job of a `shell` key, the\n * job or workflow of `defaults.run.shell`.\n */\nfunction scopeOf(value: DocumentString): string {\n const keys = isDefaultShell(value) ? DEFAULT_SHELL_PATH.length : 1;\n return JSON.stringify(value.path.slice(0, -keys));\n}\n\n/**\n * The shell that a command value runs with, when it is a program other than a shell\n * (`shell: python`): the nearest `shell` above the value, of its step, its job, or a default of\n * the job or the workflow. A step's own `shell` wins over a default of the same map.\n */\nexport function stepShells(strings: readonly DocumentString[]): StepShellOf {\n const shells = strings.filter((value) => value.path.at(-1) === STEP_SHELL_KEY);\n const isOwnShell = (value: DocumentString): boolean => !isDefaultShell(value);\n // Later entries win: the own `shell` of a map goes after a default of the same map.\n const ordered = [...shells.filter(isDefaultShell), ...shells.filter(isOwnShell)];\n const byScope = new Map(ordered.map((value) => [scopeOf(value), value.value]));\n return (value) => {\n for (let depth = value.path.length - 1; depth >= 0; depth -= 1) {\n const shell = byScope.get(JSON.stringify(value.path.slice(0, depth)));\n if (shell !== undefined) {\n return COMMAND_LINE_SHELLS.has(shellProgram(shell)) ? undefined : shell;\n }\n }\n return undefined;\n };\n}\n\n/** A script of a step with another program as its shell that names an old package. */\nexport function otherShellFindings(\n values: readonly DocumentString[],\n shellOf: StepShellOf,\n locate: Locate,\n): ShellTextFindings {\n const manualSteps = values.flatMap((value) => {\n const shell = shellOf(value);\n return shell === undefined || !namesOriginalPackage(value.value)\n ? []\n : [{ kind: \"script-not-shell\", location: locate(value.start), shell } as const];\n });\n return { edits: [], changes: [], manualSteps };\n}\n","/**\n * The keys whose values YAML files run as shell commands. A file kind that runs other keys\n * (Taskfile `cmds`, pre-commit `entry`) adds its own to the common ones.\n */\n\n/**\n * Keys whose value is a shell command or a list of them: GitHub Actions and lefthook `run`,\n * GitLab, Travis and Bitbucket `script` and its hooks, Azure Pipelines `script` / `bash` /\n * `pwsh`, CircleCI `command`, Drone `commands`, Docker Compose `command` and `entrypoint`.\n */\nexport const YAML_COMMAND_KEYS: ReadonlySet<string> = new Set([\n \"run\",\n \"script\",\n \"before_script\",\n \"after_script\",\n \"before_install\",\n \"install\",\n \"bash\",\n \"pwsh\",\n \"powershell\",\n \"command\",\n \"commands\",\n \"entrypoint\",\n]);\n\n/**\n * Task (Taskfile.yml): `cmds` and `cmd` run commands, `defer` runs one when the task ends, `sh`\n * computes a variable or checks a precondition with one, `preconditions` lists such checks in\n * short form, and `status` lists commands that tell whether a task is up to date. A deferred task\n * (`defer: { task: … }`) and a precondition's `msg` are under other keys.\n */\nexport const TASKFILE_COMMAND_KEYS: ReadonlySet<string> = new Set([\n ...YAML_COMMAND_KEYS,\n \"cmds\",\n \"cmd\",\n \"defer\",\n \"sh\",\n \"preconditions\",\n \"status\",\n]);\n","import {\n type CommandMigration,\n commandWordFindings,\n type Locate,\n type ShellTextFindings,\n} from \"./command-migration.js\";\nimport { type CommandPathPattern, isCommandPath } from \"./command-paths.js\";\nimport { type DocumentString, ownerKey } from \"./config-documents.js\";\nimport type { FileVariables } from \"./file-variables.js\";\nimport { type Change, lineLocator } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { shellVariables } from \"./shell-variables.js\";\nimport { type ShellCommand, type ShellWord, shellCommands } from \"./shell-words.js\";\nimport { otherShellFindings, stepShells } from \"./step-shells.js\";\nimport { applyTextEdits, type TextEdit } from \"./text-edits.js\";\nimport { YAML_COMMAND_KEYS } from \"./yaml-command-keys.js\";\n\n/**\n * YAML files are migrated only where they hold commands or package names, so the text of other\n * values (an OpenAPI `description`, a label) stays as written even when it names a package.\n */\n\n/**\n * Keys whose map holds environment variables (GitHub Actions, Drone and Woodpecker `env`). A\n * variable can hold a command that a step runs as `$GEN`, so each value is read as shell text:\n * it changes only where the generator is in command position, never in a sentence that names it.\n */\nconst ENVIRONMENT_KEYS: ReadonlySet<string> = new Set([\"env\"]);\n\nconst isEnvironmentValue = (value: DocumentString): boolean =>\n value.path.length >= 2 && ENVIRONMENT_KEYS.has(String(value.path.at(-2)));\n\n/**\n * The `env` variables of a file as its commands use them: `$GEN` runs the generator when an `env`\n * map sets `GEN` to it. The maps of a workflow, a job and a step are read as one, by name.\n */\nfunction environmentVariables(text: string, strings: readonly DocumentString[]): FileVariables {\n return shellVariables(\n strings.filter(isEnvironmentValue).map((value) => ({\n name: String(value.path.at(-1)),\n value: value.isEscaped ? value.value : shellText(text, value),\n })),\n );\n}\n\n/** Keys of a Dependabot config whose values are package names (`ignore`, `allow`, `groups`). */\nexport const DEPENDABOT_NAME_KEYS: ReadonlySet<string> = new Set([\n \"dependency-name\",\n \"patterns\",\n \"exclude-patterns\",\n]);\n\n/** A line break between two lines with text; a blank line between them stays a line break. */\nconst FOLDED_LINE_BREAK_RE = /(?<=\\S[^\\S\\n]*)\\n(?=[^\\S\\n]*\\S)/g;\n\n/**\n * The shell text of a value: where YAML folds a line break to a space, so does the shell text.\n * The replacement keeps the length, so offsets into it are offsets into the value as written.\n */\n/**\n * A GitHub Actions expression that reads one `env` variable: `${{ env.NAME }}`. The runner puts its\n * value into the command before the shell runs, as the shell expands `$NAME`.\n */\nconst ENV_EXPRESSION_RE = /\\$\\{\\{[ \\t]*env\\.([A-Za-z_][A-Za-z0-9_]*)[ \\t]*\\}\\}/g;\n\n/** `${{ env.NAME }}` read as `$NAME`, padded with blanks so that every offset stays. */\nconst asShellVariable = (expression: string, name: string): string =>\n `$${name}`.padEnd(expression.length, \" \");\n\nexport function shellText(text: string, value: DocumentString): string {\n const slice = text.slice(value.content.start, value.content.end);\n const unfolded = value.isFolded ? slice.replace(FOLDED_LINE_BREAK_RE, \" \") : slice;\n return unfolded.replace(ENV_EXPRESSION_RE, asShellVariable);\n}\n\nconst LEADING_SPACES_RE = /^ */;\n\n/**\n * The indentation of a block scalar as written: the fewest spaces at the start of its lines after\n * the first, which YAML removes from the value the shell runs. 0 for a value on one line.\n */\nfunction blockIndent(shell: string): number {\n const lines = shell\n .split(\"\\n\")\n .slice(1)\n .filter((line) => line.trim() !== \"\");\n const indents = lines.map((line) => LEADING_SPACES_RE.exec(line)?.[0].length ?? 0);\n return indents.length === 0 ? 0 : Math.min(...indents);\n}\n\n/** The values that belong to one of `keys`, also as items of a list. */\nconst valuesOf = (\n strings: readonly DocumentString[],\n keys: ReadonlySet<string>,\n): DocumentString[] => strings.filter((string) => keys.has(ownerKey(string.path) ?? \"\"));\n\n/**\n * Keys whose list value is one command in exec form, as Compose and Kubernetes read it: each item\n * is one word, and no shell splits it. A string value of these keys is still shell text.\n */\nconst EXEC_FORM_KEYS: ReadonlySet<string> = new Set([\"command\", \"entrypoint\"]);\n\nconst isExecFormItem = (value: DocumentString): boolean =>\n typeof value.path.at(-1) === \"number\" && EXEC_FORM_KEYS.has(String(value.path.at(-2)));\n\nconst listOf = (item: DocumentString): string => item.path.slice(0, -1).join(\".\");\n\n/** The next item of the same list: the documents of a stream may repeat a list's path. */\nconst isNextItem = (previous: DocumentString, item: DocumentString): boolean =>\n listOf(previous) === listOf(item) && Number(item.path.at(-1)) > Number(previous.path.at(-1));\n\n/** The commands of exec-form lists, one per list, each item a word. */\nfunction execFormCommands(text: string, items: readonly DocumentString[]): ShellCommand[] {\n const commands: ShellWord[][] = [];\n let previous: DocumentString | undefined;\n let command: ShellWord[] = [];\n for (const item of items) {\n if (previous === undefined || !isNextItem(previous, item)) {\n command = [];\n commands.push(command);\n }\n const { start, end } = item.content;\n command.push({ start, end, value: item.value, raw: text.slice(start, end) });\n previous = item;\n }\n return commands;\n}\n\n/**\n * The findings of a value with an escape (`\"echo \\\"Don't\\\" && …\"`), read as the value the shell\n * gets: its text as written would read `\\\"` as a quote and `'` as the start of a quoted word.\n * The offsets of the value are not those of the text, so a changed value replaces the whole\n * scalar, quoted as it was, and every finding names the line where the scalar starts.\n */\nfunction escapedValueFindings(\n value: DocumentString,\n encode: (value: string) => string,\n locate: Locate,\n variables?: FileVariables,\n): ShellTextFindings {\n const commands = shellCommands(value.value);\n const found = commandWordFindings(commands, () => locate(value.start), variables);\n const migrated = applyTextEdits(value.value, found.edits);\n const isChanged = migrated !== value.value;\n const edits = isChanged ? [{ start: value.start, end: value.end, text: encode(migrated) }] : [];\n return { ...found, edits };\n}\n\n/** The findings of one value read as shell text, with offsets into the whole text. */\nfunction valueFindings(\n text: string,\n value: DocumentString,\n locate: Locate,\n variables?: FileVariables,\n): ShellTextFindings {\n if (value.isEscaped && value.encode !== undefined) {\n return escapedValueFindings(value, value.encode, locate, variables);\n }\n const { start } = value.content;\n const shell = shellText(text, value);\n const commands = shellCommands(shell, blockIndent(shell));\n const found = commandWordFindings(commands, (offset) => locate(start + offset), variables);\n return { ...found, edits: shiftedEdits(found.edits, start) };\n}\n\n/** The edits of shell findings in a value, as offsets into the whole text. */\nconst shiftedEdits = (edits: readonly TextEdit[], offset: number): TextEdit[] =>\n edits.map((edit) => ({ ...edit, start: edit.start + offset, end: edit.end + offset }));\n\nexport function appliedFindings(\n text: string,\n found: readonly ShellTextFindings[],\n): CommandMigration {\n return {\n text: applyTextEdits(\n text,\n found.flatMap((findings) => findings.edits),\n ),\n changes: found.flatMap((findings) => findings.changes),\n manualSteps: found.flatMap((findings) => findings.manualSteps),\n };\n}\n\n/**\n * Migrate the commands of a YAML file (CI workflows, Compose files, hook configs). Edits replace\n * words only, never the blanks between them, so they apply to the value as written even where a\n * folded scalar was read with spaces for its line breaks.\n */\nexport function migrateYamlCommands(\n text: string,\n file: string,\n strings: readonly DocumentString[],\n keys: ReadonlySet<string> = YAML_COMMAND_KEYS,\n): CommandMigration {\n const lineOf = lineLocator(text);\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const shellOf = stepShells(strings);\n const values = valuesOf(strings, keys).filter((value) => shellOf(value) === undefined);\n const commandValues = new Set(values.filter((value) => !isExecFormItem(value)));\n const shellValues = strings.filter(\n (value) => commandValues.has(value) || isEnvironmentValue(value),\n );\n const variables = environmentVariables(text, strings);\n return appliedFindings(text, [\n ...shellValues.map((value) => valueFindings(text, value, locate, variables)),\n commandWordFindings(execFormCommands(text, values.filter(isExecFormItem)), locate),\n otherShellFindings(valuesOf(strings, keys), shellOf, locate),\n ]);\n}\n\n/**\n * Migrate the commands of a YAML config at the paths of `patterns` (domain/command-paths.ts): a\n * pnpm `package.yaml`, a lint-staged config. Each finding names its place (`scripts.gen`).\n */\nexport function migrateYamlPathCommands(\n text: string,\n strings: readonly DocumentString[],\n patterns: readonly CommandPathPattern[],\n): CommandMigration {\n const commands = strings.filter((string) => isCommandPath(string.path, patterns));\n return appliedFindings(\n text,\n commands.map((command) => valueFindings(text, command, () => command.path.join(\".\"))),\n );\n}\n\n/** Rename the original packages that a Dependabot config ignores, allows or groups. */\nexport function migrateDependabotConfig(\n text: string,\n file: string,\n strings: readonly DocumentString[],\n): CommandMigration {\n const changes: Change[] = [];\n const edits: TextEdit[] = [];\n const lineOf = lineLocator(text);\n for (const value of valuesOf(strings, DEPENDABOT_NAME_KEYS)) {\n const from = value.value;\n const to = PACKAGE_RENAMES.get(from);\n if (to !== undefined) {\n const { start, end } = value.content;\n const location = `${file}:${lineOf(start)}`;\n changes.push({ kind: \"package-name-renamed\", location, from, to });\n edits.push({ start, end, text: to });\n }\n }\n return { text: applyTextEdits(text, edits), changes, manualSteps: [] };\n}\n","import {\n type CommandMigration,\n commandWordFindings,\n type ShellTextFindings,\n} from \"./command-migration.js\";\nimport type { DocumentPath, DocumentString } from \"./config-documents.js\";\nimport { type Change, lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport type { ShellCommand, ShellWord } from \"./shell-word-parts.js\";\nimport { shellCommands } from \"./shell-words.js\";\nimport type { TextEdit } from \"./text-edits.js\";\nimport { appliedFindings, shellText } from \"./yaml-migration.js\";\n\n/**\n * pre-commit hooks (`.pre-commit-config.yaml`). A hook runs its `entry`, split into words without\n * a shell, with its `args` after them, so the two are read as one command: the flags of the\n * generator can be in either. A `language: node` hook installs its `additional_dependencies`;\n * an old package there is renamed, or reported when it is pinned to a version.\n */\n\nconst ENTRY_KEY = \"entry\";\nconst ARGS_KEY = \"args\";\nconst DEPENDENCIES_KEY = \"additional_dependencies\";\n\nconst hookOf = (path: DocumentPath): string => path.slice(0, -1).join(\".\");\n\n/** The items of the list at `key` of each hook, by hook. */\nfunction listsByHook(strings: readonly DocumentString[], key: string) {\n const lists = new Map<string, DocumentString[]>();\n for (const item of strings) {\n if (item.path.at(-2) === key) {\n const hook = item.path.slice(0, -2).join(\".\");\n lists.set(hook, [...(lists.get(hook) ?? []), item]);\n }\n }\n return lists;\n}\n\n/** The words of an entry, as offsets into the whole text. */\nfunction entryWords(text: string, entry: DocumentString): ShellWord[] {\n const { start } = entry.content;\n return shellCommands(shellText(text, entry))\n .flat()\n .map((word) => ({ ...word, start: word.start + start, end: word.end + start }));\n}\n\nconst itemWord = (text: string, item: DocumentString): ShellWord => {\n const { start, end } = item.content;\n return { start, end, value: item.value, raw: text.slice(start, end) };\n};\n\n/** The command of each hook: its entry words, then its args. */\nfunction hookCommands(text: string, strings: readonly DocumentString[]): ShellCommand[] {\n const args = listsByHook(strings, ARGS_KEY);\n return strings\n .filter((string) => string.path.at(-1) === ENTRY_KEY)\n .map((entry) => [\n ...entryWords(text, entry),\n ...(args.get(hookOf(entry.path)) ?? []).map((item) => itemWord(text, item)),\n ]);\n}\n\n/** The old packages that the hooks install, renamed, or reported when pinned. */\nfunction dependencyFindings(\n strings: readonly DocumentString[],\n locate: (offset: number) => string,\n): ShellTextFindings {\n const found = {\n edits: [] as TextEdit[],\n changes: [] as Change[],\n manualSteps: [] as ManualStep[],\n };\n for (const item of [...listsByHook(strings, DEPENDENCIES_KEY).values()].flat()) {\n const { name, isPinned } = packageReference(item.value);\n const to = PACKAGE_RENAMES.get(name);\n const location = locate(item.content.start);\n if (to !== undefined && isPinned) {\n found.manualSteps.push({ kind: \"pinned-package\", location, name });\n } else if (to !== undefined) {\n found.edits.push({ start: item.content.start, end: item.content.end, text: to });\n found.changes.push({ kind: \"package-name-renamed\", location, from: name, to });\n }\n }\n return found;\n}\n\n/** Migrate the hooks of a pre-commit config: their commands and the packages they install. */\nexport function migratePreCommitHooks(\n text: string,\n file: string,\n strings: readonly DocumentString[],\n): CommandMigration {\n const lineOf = lineLocator(text);\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n return appliedFindings(text, [\n commandWordFindings(hookCommands(text, strings), locate),\n dependencyFindings(strings, locate),\n ]);\n}\n","import {\n type DocumentRead,\n isMap,\n mapsAt,\n type TreeMap,\n unreadableConfig,\n valuesAt,\n} from \"./config-documents.js\";\nimport { type Findings, newFindings, renameNames } from \"./dependency-map.js\";\nimport type { FileMigration } from \"./migration-findings.js\";\nimport { renameSpecifierKeys, reportOldPackagePaths } from \"./specifier-maps.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { itemEntries } from \"./tree-entries.js\";\n\n/**\n * A TypeScript (or JavaScript) project config. Imports get the new names, so the options that\n * name packages get them too: the keys of `compilerOptions.paths` are module specifiers, and\n * `compilerOptions.types` lists packages by name. A path into the installed files of an old\n * package (`node_modules/openapi-fetch/…`, in `paths` or `include`) points at files the new\n * package does not have there, so it is reported.\n */\n\nconst COMPILER_OPTIONS_FIELD = \"compilerOptions\";\nconst PATHS_FIELD = \"paths\";\nconst TYPES_FIELD = \"types\";\nconst FIELD_SEPARATOR = \".\";\n\nfunction migrateCompilerOptions(options: TreeMap, findings: Findings): void {\n for (const paths of mapsAt(options, PATHS_FIELD)) {\n // A key maps the imports it matches to the project's own files, so a deep key (`x/*`) still\n // matches the renamed imports and reaches no file of the package.\n const field = [COMPILER_OPTIONS_FIELD, PATHS_FIELD].join(FIELD_SEPARATOR);\n renameSpecifierKeys(paths, field, findings);\n }\n for (const types of valuesAt(options, TYPES_FIELD)) {\n if (types.kind === \"list\") {\n const field = [COMPILER_OPTIONS_FIELD, TYPES_FIELD].join(FIELD_SEPARATOR);\n renameNames(itemEntries(types), field, findings);\n }\n }\n}\n\n/** Migrate the package names of a tsconfig or jsconfig (`read` is `text` parsed). */\nexport function migrateTsconfig(text: string, read: DocumentRead): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const config of read.documents.filter(isMap)) {\n for (const options of mapsAt(config, COMPILER_OPTIONS_FIELD)) {\n migrateCompilerOptions(options, findings);\n }\n reportOldPackagePaths(config, [], findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import { catalogMaps } from \"./catalogs.js\";\nimport { type DocumentRead, isMap, type TreeMap, unreadableConfig } from \"./config-documents.js\";\nimport { type Findings, migrateSpecMap, newFindings, type RenameTarget } from \"./dependency-map.js\";\nimport type { FileMigration } from \"./migration-findings.js\";\nimport { CATALOG_FIELD, NAMED_CATALOGS_FIELD } from \"./package-names.js\";\nimport { reportSettingSections, type SettingsFile } from \"./settings-sections.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { specEntries } from \"./tree-entries.js\";\n\n/**\n * Catalogs in YAML: `pnpm-workspace.yaml` (pnpm) and `.yarnrc.yml` (Yarn 4.10 and newer). A\n * project whose package.json says `\"openapi-fetch\": \"catalog:\"` keeps its version here, so the\n * entry and that dependency must keep one name whatever its spec is, or the install fails\n * (`ERR_PNPM_CATALOG_ENTRY_NOT_FOUND_FOR_SPEC`); the catalog plan (domain/catalogs.ts) says\n * which entries keep the old one. Only the renamed keys and values are replaced\n * in the text, so comments and formatting stay (domain/config-documents.ts). Only entries of\n * `catalog:` and `catalogs:` are renamed; the other settings that name an original package are\n * reported (domain/settings-sections.ts), like the same fields of package.json.\n */\n\nconst CATALOG_SECTIONS = [CATALOG_FIELD, NAMED_CATALOGS_FIELD];\n\nexport const PNPM_WORKSPACE_FILE: SettingsFile = {\n migratedSections: new Set([...CATALOG_SECTIONS, \"packages\"]),\n overrideSections: new Set([\"overrides\", \"patchedDependencies\"]),\n prefix: \"\",\n};\n\n/** Yarn keeps overrides in package.json (`resolutions`), not in `.yarnrc.yml`. */\nexport const YARNRC_FILE: SettingsFile = {\n migratedSections: new Set(CATALOG_SECTIONS),\n overrideSections: new Set(),\n prefix: \"\",\n};\n\nfunction migrateCatalogs(workspace: TreeMap, target: RenameTarget, findings: Findings): void {\n for (const { name, label, map } of catalogMaps(workspace)) {\n const context = {\n ...target,\n map: { kind: \"catalog\", catalog: label, name } as const,\n findings,\n };\n migrateSpecMap(specEntries(map), context);\n }\n}\n\n/**\n * Rename the original packages in the catalogs of a YAML file (`read` is `text` parsed); report\n * its other settings that name them.\n */\nexport function migrateWorkspaceCatalogs(\n text: string,\n read: DocumentRead,\n target: RenameTarget,\n file: SettingsFile,\n): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const workspace of read.documents.filter(isMap)) {\n migrateCatalogs(workspace, target, findings);\n reportSettingSections(workspace, file, findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import type { CatalogPlan } from \"../domain/catalog-plan.js\";\nimport {\n type DocumentRead,\n type DocumentString,\n documentStrings,\n unreadableConfig,\n} from \"../domain/config-documents.js\";\nimport type { ManifestDeclarations } from \"../domain/declared-packages.js\";\nimport {\n type Change,\n type FileMigration,\n type ManualStep,\n unchanged,\n} from \"../domain/migration-findings.js\";\nimport { namesOriginalPackage } from \"../domain/package-names.js\";\nimport type { SuccessorAliases } from \"../domain/successor-aliases.js\";\nimport type { ApiDescriptionParts } from \"./api-description-parts.js\";\nimport type { CallbackRewriter, DocumentReaders, SourceStringScanner } from \"./ports.js\";\n\n/**\n * The parts that file migrations are built from: the context they get, configs read once and\n * migrated in steps, and the gate that leaves a file naming no old package unread.\n */\n\n/** What a migration of one kind of file needs besides the text. */\nexport interface MigrationContext {\n readonly version: string;\n /** What the catalogs keep under the old names, from every manifest and catalog file. */\n readonly catalogs: CatalogPlan;\n /** What every manifest of the project declares, for the imports of a source file. */\n readonly manifests: readonly ManifestDeclarations[];\n /** The files whose overrides alias original packages to their successors. */\n readonly aliases: readonly SuccessorAliases[];\n /** The files that the API descriptions reach by `$ref`: data, not commands. */\n readonly apiDescriptionParts: ApiDescriptionParts;\n readonly rewriter: CallbackRewriter;\n readonly scanner: SourceStringScanner;\n readonly readers: DocumentReaders;\n}\n\n/** One kind of file the migration knows, and how to migrate it. */\nexport interface FileKind {\n readonly matches: (path: string) => boolean;\n readonly migrate: (text: string, path: string, context: MigrationContext) => FileMigration;\n}\n\n/** A migration with more manual steps appended. */\nexport const withSteps = (\n migration: FileMigration,\n steps: readonly ManualStep[],\n): FileMigration => ({\n ...migration,\n manualSteps: [...migration.manualSteps, ...steps],\n});\n\n/** Two migrations of the same text, one after the other, with their findings joined. */\nexport function chain(first: FileMigration, next: (text: string) => FileMigration): FileMigration {\n const second = next(first.text);\n const changes: Change[] = [...first.changes, ...second.changes];\n const manualSteps: ManualStep[] = [...first.manualSteps, ...second.manualSteps];\n return { text: second.text, changes, manualSteps };\n}\n\n/** One migration of a config, given its text and that text read. */\nexport type ConfigStep = (text: string, read: DocumentRead) => FileMigration;\n\n/**\n * The steps one after the other, each on the text the step before it left. A config that cannot\n * be read is reported once, and no step runs.\n */\nfunction migrateConfig(\n text: string,\n read: (text: string) => DocumentRead,\n steps: readonly ConfigStep[],\n): FileMigration {\n const first = read(text);\n if (first.kind === \"unreadable\") {\n return unreadableConfig(text, first.offset);\n }\n return steps.reduce(\n (done, step) =>\n chain(done, (current) => step(current, current === text ? first : read(current))),\n unchanged(text),\n );\n}\n\n/** A step that reads the string values of the config, with their key paths. */\nexport const stringsStep =\n (migrate: (text: string, strings: readonly DocumentString[]) => FileMigration): ConfigStep =>\n (text, read) =>\n read.kind === \"unreadable\"\n ? unreadableConfig(text, read.offset)\n : migrate(text, documentStrings(read.documents));\n\n/** A JSON config migrated by `steps`, which also get its path. */\nexport const jsonConfig =\n (\n steps: (context: MigrationContext, path: string) => readonly ConfigStep[],\n ): FileKind[\"migrate\"] =>\n (text, path, context) =>\n migrateConfig(text, (current) => context.readers.json.read(current), steps(context, path));\n\n/** A YAML config migrated by `steps`, which also get its path. */\nexport const yamlConfig =\n (\n steps: (context: MigrationContext, path: string) => readonly ConfigStep[],\n ): FileKind[\"migrate\"] =>\n (text, path, context) =>\n migrateConfig(text, (current) => context.readers.yaml.read(current), steps(context, path));\n\n/**\n * A migration that leaves a text naming no original package as it is, without reading it. For\n * the files whose findings all start at an old name: commands and Dependabot names. Any YAML file\n * matches the command kind, and an OpenAPI document of megabytes is read in seconds, for nothing.\n */\nexport const whenNamed =\n (migrate: FileKind[\"migrate\"]): FileKind[\"migrate\"] =>\n (text, path, context) =>\n namesOriginalPackage(text) ? migrate(text, path, context) : unchanged(text);\n","/** The names of the files the migration reads, as the tools that own them look for them. */\n\nexport const SHELL_EXTENSIONS: ReadonlySet<string> = new Set([\".sh\", \".bash\", \".zsh\"]);\nexport const MAKEFILE_EXTENSION = \".mk\";\nexport const YAML_EXTENSIONS: ReadonlySet<string> = new Set([\".yml\", \".yaml\"]);\n/** Makefiles, justfiles and Dockerfiles, by the names make, just and docker look for. */\nexport const MAKEFILE_NAMES: ReadonlySet<string> = new Set([\"Makefile\", \"makefile\", \"GNUmakefile\"]);\nexport const JUSTFILE_NAMES: ReadonlySet<string> = new Set([\"justfile\", \"Justfile\", \".justfile\"]);\nexport const DOCKERFILE_NAMES: ReadonlySet<string> = new Set([\"Dockerfile\", \"Containerfile\"]);\n/** Git hooks that husky runs; `.husky/_/` holds husky's own generated scripts. */\nexport const HUSKY_FOLDER = \".husky/\";\nexport const HUSKY_INTERNALS = \".husky/_/\";\nexport const NX_PROJECT_FILE = \"project.json\";\nexport const NX_WORKSPACE_FILE = \"nx.json\";\n/** Jest's config in JSON; `jest.config.js` and the other scripts are source files. */\nexport const JEST_JSON_CONFIG_FILE = \"jest.config.json\";\n/** The names Task looks for, `.dist` ones included. */\nexport const TASKFILE_NAMES: ReadonlySet<string> = new Set(\n [\"Taskfile\", \"taskfile\", \"Taskfile.dist\", \"taskfile.dist\"].flatMap((name) => [\n `${name}.yml`,\n `${name}.yaml`,\n ]),\n);\nexport const PRE_COMMIT_FILES: ReadonlySet<string> = new Set([\n \".pre-commit-config.yaml\",\n \".pre-commit-config.yml\",\n]);\n/** lint-staged reads `.lintstagedrc` as JSON or YAML; YAML reads both. */\nexport const LINT_STAGED_YAML_FILES: ReadonlySet<string> = new Set([\n \".lintstagedrc\",\n \".lintstagedrc.yaml\",\n \".lintstagedrc.yml\",\n]);\nexport const LINT_STAGED_JSON_FILE = \".lintstagedrc.json\";\nexport const SIMPLE_GIT_HOOKS_FILES: ReadonlySet<string> = new Set([\n \".simple-git-hooks.json\",\n \"simple-git-hooks.json\",\n]);\nexport const DENO_CONFIG_FILES: ReadonlySet<string> = new Set([\"deno.json\", \"deno.jsonc\"]);\n/** Deno reads its import map from its config, or from a file that the config names. */\nexport const IMPORT_MAP_FILE = \"import_map.json\";\nexport const DEPENDABOT_FILES: ReadonlySet<string> = new Set([\n \".github/dependabot.yml\",\n \".github/dependabot.yaml\",\n]);\nexport const WORKSPACE_FILE = \"pnpm-workspace.yaml\";\nexport const YARNRC_FILE_NAME = \".yarnrc.yml\";\n/** pnpm reads a manifest from `package.yaml` too. */\nexport const YAML_MANIFEST_FILES: ReadonlySet<string> = new Set([\"package.yaml\", \"package.yml\"]);\n/** pnpm also reads a manifest from `package.json5`, a format the tool reports but does not read. */\nexport const JSON5_MANIFEST_FILE = \"package.json5\";\nexport const MANIFEST_FILE = \"package.json\";\n/**\n * TypeScript's project configs by the names tsc and editors look for: `tsconfig.json`,\n * `jsconfig.json`, and the `tsconfig.build.json` kind that `--project` and `extends` name.\n */\nexport const PROJECT_CONFIG_NAME = /^[jt]sconfig(\\.[^/]+)?\\.json$/;\n/** The package manager writes these again on install; their entries are not commands. */\nexport const LOCK_FILES: ReadonlySet<string> = new Set([\"pnpm-lock.yaml\", \"yarn.lock\", \"bun.lock\"]);\n\nexport function baseName(path: string): string {\n return path.slice(path.lastIndexOf(\"/\") + 1);\n}\n\nexport function extensionOf(path: string): string {\n const name = baseName(path);\n const dot = name.lastIndexOf(\".\");\n return dot <= 0 ? \"\" : name.slice(dot);\n}\n","import { isMap } from \"../domain/config-documents.js\";\nimport type { ManifestDeclarations } from \"../domain/declared-packages.js\";\nimport { importMapLocations } from \"../domain/import-map-reference.js\";\nimport type { DocumentReaders, ProjectFiles } from \"./ports.js\";\nimport { baseName, DENO_CONFIG_FILES } from \"./project-file-names.js\";\n\n/** Each import map file that Deno configs name, with the paths of the configs that name it. */\nexport type NamedImportMaps = ReadonlyMap<string, readonly string[]>;\n\nexport const NO_NAMED_IMPORT_MAPS: NamedImportMaps = new Map();\n\n/** The import maps in the project that one Deno config names, read as JSON. */\nasync function importMapsOf(\n path: string,\n files: ProjectFiles,\n readers: DocumentReaders,\n): Promise<string[]> {\n const read = await files.read(path);\n const parsed = read.kind === \"read\" ? readers.json.read(read.text) : undefined;\n if (parsed?.kind !== \"read\") {\n return [];\n }\n return importMapLocations(path, parsed.documents.filter(isMap)).flatMap((location) =>\n location.kind === \"in-project\" ? [location.path] : [],\n );\n}\n\n/**\n * The project files that Deno configs name as their import maps (`\"importMap\": \"./deps.json\"`).\n * They are found before the plan, which reads them as import maps whatever their name. A config\n * that cannot be read names none here; its migration reports it.\n */\nexport async function namedImportMaps(\n paths: readonly string[],\n files: ProjectFiles,\n readers: DocumentReaders,\n): Promise<NamedImportMaps> {\n const named = new Map<string, string[]>();\n for (const path of paths.filter((candidate) => DENO_CONFIG_FILES.has(baseName(candidate)))) {\n for (const map of await importMapsOf(path, files, readers)) {\n named.set(map, [...(named.get(map) ?? []), path]);\n }\n }\n return named;\n}\n\n/** All of `sets` in one; undefined (every package) when one of them is. */\nfunction joinedNames(\n sets: readonly (ReadonlySet<string> | undefined)[],\n): ReadonlySet<string> | undefined {\n return sets.some((names) => names === undefined)\n ? undefined\n : new Set(sets.flatMap((names) => [...(names ?? [])]));\n}\n\n/**\n * The declarations with the names of each named import map given to the configs that name it:\n * Deno resolves the imports of the files under a config through its map, wherever the map is.\n */\nexport function withNamedImportMaps(\n declarations: readonly ManifestDeclarations[],\n importMaps: NamedImportMaps,\n): ManifestDeclarations[] {\n const mapNames = new Map(declarations.map(({ path, names }) => [path, names]));\n return declarations\n .filter(({ path }) => !importMaps.has(path))\n .map((declaration) => {\n const { path, names } = declaration;\n const maps = [...importMaps].filter(([, configs]) => configs.includes(path));\n const named = maps.flatMap(([map]) => (mapNames.has(map) ? [mapNames.get(map)] : []));\n return { ...declaration, names: joinedNames([names, ...named]) };\n });\n}\n","import { isApiDescription } from \"../domain/api-descriptions.js\";\nimport { migrateCommandLines } from \"../domain/command-migration.js\";\nimport {\n type CommandPathPattern,\n DENO_TASK_PATHS,\n LINT_STAGED_COMMAND_PATHS,\n MANIFEST_COMMAND_PATHS,\n NX_PROJECT_COMMAND_PATHS,\n NX_WORKSPACE_COMMAND_PATHS,\n SIMPLE_GIT_HOOKS_COMMAND_PATHS,\n} from \"../domain/command-paths.js\";\nimport { commandStringSteps } from \"../domain/command-strings.js\";\nimport { localPackagesFor, undeclaredImportSteps } from \"../domain/declared-packages.js\";\nimport { migrateDockerfile } from \"../domain/dockerfile-migration.js\";\nimport { migrateImportMap } from \"../domain/import-map-migration.js\";\nimport { importMapSteps } from \"../domain/import-map-reference.js\";\nimport { isJestConfig, jestJsonSteps, jestScriptSteps } from \"../domain/jest-config.js\";\nimport { migrateJsonCommands } from \"../domain/json-command-migration.js\";\nimport { migrateJustfile } from \"../domain/justfile-migration.js\";\nimport { migrateMakefile } from \"../domain/makefile-migration.js\";\nimport { migratePackageManifest, unreadManifest } from \"../domain/manifest-migration.js\";\nimport { type FileMigration, unchanged } from \"../domain/migration-findings.js\";\nimport { oldPackagePatchSteps, patchedOldPackage } from \"../domain/patch-files.js\";\nimport { migratePreCommitHooks } from \"../domain/pre-commit-migration.js\";\nimport {\n importedSpecifiers,\n migrateModuleSpecifiers,\n SOURCE_EXTENSIONS,\n} from \"../domain/source-migration.js\";\nimport { aliasedPackagesFor } from \"../domain/successor-aliases.js\";\nimport { migrateTsconfig } from \"../domain/tsconfig-migration.js\";\nimport {\n migrateWorkspaceCatalogs,\n PNPM_WORKSPACE_FILE,\n YARNRC_FILE,\n} from \"../domain/workspace-catalog-migration.js\";\nimport { TASKFILE_COMMAND_KEYS } from \"../domain/yaml-command-keys.js\";\nimport {\n migrateDependabotConfig,\n migrateYamlCommands,\n migrateYamlPathCommands,\n} from \"../domain/yaml-migration.js\";\nimport {\n type ConfigStep,\n chain,\n type FileKind,\n jsonConfig,\n type MigrationContext,\n stringsStep,\n whenNamed,\n withSteps,\n yamlConfig,\n} from \"./config-steps.js\";\nimport { type NamedImportMaps, NO_NAMED_IMPORT_MAPS } from \"./named-import-maps.js\";\nimport {\n baseName,\n DENO_CONFIG_FILES,\n DEPENDABOT_FILES,\n DOCKERFILE_NAMES,\n extensionOf,\n HUSKY_FOLDER,\n HUSKY_INTERNALS,\n IMPORT_MAP_FILE,\n JEST_JSON_CONFIG_FILE,\n JSON5_MANIFEST_FILE,\n JUSTFILE_NAMES,\n LINT_STAGED_JSON_FILE,\n LINT_STAGED_YAML_FILES,\n LOCK_FILES,\n MAKEFILE_EXTENSION,\n MAKEFILE_NAMES,\n MANIFEST_FILE,\n NX_PROJECT_FILE,\n NX_WORKSPACE_FILE,\n PRE_COMMIT_FILES,\n PROJECT_CONFIG_NAME,\n SHELL_EXTENSIONS,\n SIMPLE_GIT_HOOKS_FILES,\n TASKFILE_NAMES,\n WORKSPACE_FILE,\n YAML_EXTENSIONS,\n YAML_MANIFEST_FILES,\n YARNRC_FILE_NAME,\n} from \"./project-file-names.js\";\n\nconst isHuskyHook = (path: string): boolean =>\n (path.startsWith(HUSKY_FOLDER) || path.includes(`/${HUSKY_FOLDER}`)) &&\n !path.includes(HUSKY_INTERNALS);\n\nconst isDependabotConfig = (path: string): boolean =>\n [...DEPENDABOT_FILES].some((file) => path === file || path.endsWith(`/${file}`));\n\n/** Module specifiers and `transform` callbacks are migrated; command strings are reported. */\nfunction migrateSource(text: string, path: string, context: MigrationContext): FileMigration {\n const strings = context.scanner.scan(text, path);\n const kept = localPackagesFor(context.manifests, path);\n const migrated = chain(migrateModuleSpecifiers(text, strings, context.version, kept), (renamed) =>\n context.rewriter.rewrite(renamed, path),\n );\n const imports = importedSpecifiers(text, strings);\n const undeclared = undeclaredImportSteps(imports, path, context.manifests);\n const patterns = isJestConfig(baseName(path)) ? jestScriptSteps(text, strings) : [];\n return withSteps(migrated, [...commandStringSteps(text, strings), ...undeclared, ...patterns]);\n}\n\nconst jsonCommandsStep = (patterns: readonly CommandPathPattern[]): ConfigStep =>\n stringsStep((text, strings) => migrateJsonCommands(text, strings, patterns));\n\n/** A Deno import map, in its own file or in a config. */\nconst importMapStep =\n (version: string): ConfigStep =>\n (text, read) =>\n migrateImportMap(text, read, version);\n\nconst importMapFile = jsonConfig(({ version }) => [importMapStep(version)]);\n\n/** A YAML config whose commands are at the paths of `patterns`. */\nconst yamlPathCommands = (patterns: readonly CommandPathPattern[]): ConfigStep =>\n stringsStep((text, strings) => migrateYamlPathCommands(text, strings, patterns));\n\n/**\n * Configs that only hold commands, by file name: they come before the generic YAML kind, which\n * would read them by the common command keys only.\n */\nconst COMMAND_CONFIG_KINDS: readonly FileKind[] = [\n {\n matches: (path) => baseName(path) === NX_PROJECT_FILE,\n migrate: jsonConfig(() => [jsonCommandsStep(NX_PROJECT_COMMAND_PATHS)]),\n },\n {\n matches: (path) => baseName(path) === NX_WORKSPACE_FILE,\n migrate: jsonConfig(() => [jsonCommandsStep(NX_WORKSPACE_COMMAND_PATHS)]),\n },\n {\n matches: (path) => baseName(path) === LINT_STAGED_JSON_FILE,\n migrate: jsonConfig(() => [jsonCommandsStep(LINT_STAGED_COMMAND_PATHS)]),\n },\n {\n matches: (path) => LINT_STAGED_YAML_FILES.has(baseName(path)),\n migrate: whenNamed(yamlConfig(() => [yamlPathCommands(LINT_STAGED_COMMAND_PATHS)])),\n },\n {\n matches: (path) => SIMPLE_GIT_HOOKS_FILES.has(baseName(path)),\n migrate: jsonConfig(() => [jsonCommandsStep(SIMPLE_GIT_HOOKS_COMMAND_PATHS)]),\n },\n {\n matches: (path) => TASKFILE_NAMES.has(baseName(path)),\n migrate: whenNamed(\n yamlConfig((_context, path) => [\n stringsStep((text, strings) =>\n migrateYamlCommands(text, path, strings, TASKFILE_COMMAND_KEYS),\n ),\n ]),\n ),\n },\n {\n matches: (path) => PRE_COMMIT_FILES.has(baseName(path)),\n migrate: whenNamed(\n yamlConfig((_context, path) => [\n stringsStep((text, strings) => migratePreCommitHooks(text, path, strings)),\n ]),\n ),\n },\n];\n\n/**\n * The commands of a YAML file; an API description (an OpenAPI document) and the files it reaches\n * by `$ref` are data and stay.\n */\nconst yamlCommandsStep =\n (path: string, isPart: boolean): ConfigStep =>\n (text, read) =>\n isPart || (read.kind === \"read\" && isApiDescription(read.documents))\n ? unchanged(text)\n : stringsStep((current, strings) => migrateYamlCommands(current, path, strings))(text, read);\n\n/** What the manifest at `path` is migrated with. */\nconst manifestTarget = ({ version, catalogs, aliases }: MigrationContext, path: string) => ({\n version,\n catalogs,\n aliased: aliasedPackagesFor(aliases, path),\n});\n\n/** The kinds in order; the first that matches a path migrates it. */\nconst FILE_KINDS: readonly FileKind[] = [\n {\n matches: (path) => baseName(path) === MANIFEST_FILE,\n migrate: jsonConfig((context, path) => [\n (text, read) => migratePackageManifest(text, read, manifestTarget(context, path)),\n jsonCommandsStep(MANIFEST_COMMAND_PATHS),\n ]),\n },\n {\n matches: (path) => YAML_MANIFEST_FILES.has(baseName(path)),\n migrate: yamlConfig((context, path) => [\n (text, read) => migratePackageManifest(text, read, manifestTarget(context, path)),\n yamlPathCommands(MANIFEST_COMMAND_PATHS),\n ]),\n },\n {\n matches: (path) => baseName(path) === JSON5_MANIFEST_FILE,\n migrate: unreadManifest,\n },\n {\n matches: (path) => baseName(path) === WORKSPACE_FILE,\n migrate: yamlConfig(({ version, catalogs }) => [\n (text, read) =>\n migrateWorkspaceCatalogs(text, read, { version, catalogs }, PNPM_WORKSPACE_FILE),\n ]),\n },\n {\n matches: (path) => baseName(path) === YARNRC_FILE_NAME,\n migrate: yamlConfig(({ version, catalogs }) => [\n (text, read) => migrateWorkspaceCatalogs(text, read, { version, catalogs }, YARNRC_FILE),\n ]),\n },\n {\n matches: (path) => baseName(path) === JEST_JSON_CONFIG_FILE,\n migrate: jsonConfig(() => [(text, read) => withSteps(unchanged(text), jestJsonSteps(read))]),\n },\n {\n matches: (path) => patchedOldPackage(baseName(path)) !== undefined,\n migrate: (text, path) => withSteps(unchanged(text), oldPackagePatchSteps(baseName(path))),\n },\n {\n matches: (path) => SOURCE_EXTENSIONS.has(extensionOf(path)),\n migrate: migrateSource,\n },\n ...COMMAND_CONFIG_KINDS,\n {\n matches: (path) => DENO_CONFIG_FILES.has(baseName(path)),\n migrate: jsonConfig(({ version }, path) => [\n importMapStep(version),\n (text, read) => withSteps(unchanged(text), importMapSteps(path, read)),\n jsonCommandsStep(DENO_TASK_PATHS),\n ]),\n },\n {\n matches: (path) => baseName(path) === IMPORT_MAP_FILE,\n migrate: importMapFile,\n },\n {\n matches: (path) => PROJECT_CONFIG_NAME.test(baseName(path)),\n migrate: whenNamed(jsonConfig(() => [migrateTsconfig])),\n },\n {\n matches: isDependabotConfig,\n migrate: whenNamed(\n yamlConfig((_context, path) => [\n stringsStep((text, strings) => migrateDependabotConfig(text, path, strings)),\n ]),\n ),\n },\n {\n matches: (path) => YAML_EXTENSIONS.has(extensionOf(path)),\n migrate: whenNamed(\n yamlConfig((context, path) => [\n yamlCommandsStep(path, context.apiDescriptionParts.has(path)),\n ]),\n ),\n },\n {\n matches: (path) => DOCKERFILE_NAMES.has(baseName(path)),\n migrate: whenNamed((text, path) => migrateDockerfile(text, path)),\n },\n {\n matches: (path) =>\n MAKEFILE_NAMES.has(baseName(path)) || extensionOf(path) === MAKEFILE_EXTENSION,\n migrate: whenNamed((text, path) => migrateMakefile(text, path)),\n },\n {\n matches: (path) => JUSTFILE_NAMES.has(baseName(path)),\n migrate: whenNamed((text, path) => migrateJustfile(text, path)),\n },\n {\n matches: (path) => SHELL_EXTENSIONS.has(extensionOf(path)) || isHuskyHook(path),\n migrate: whenNamed((text, path) => migrateCommandLines(text, path)),\n },\n];\n\n/**\n * The migration for a file, or undefined when the migration does not read that kind of file.\n * `namedImportMaps` are the files that a Deno config names as its import map (`\"importMap\":\n * \"./deps.json\"`): they are import maps whatever their name.\n */\nexport function fileMigrationFor(\n path: string,\n namedImportMaps: NamedImportMaps = NO_NAMED_IMPORT_MAPS,\n): FileKind[\"migrate\"] | undefined {\n if (LOCK_FILES.has(baseName(path))) {\n return undefined;\n }\n if (namedImportMaps.has(path)) {\n return importMapFile;\n }\n return FILE_KINDS.find((kind) => kind.matches(path))?.migrate;\n}\n","import {\n isApiDescription,\n mayBeApiDescription,\n referencedFiles,\n} from \"../domain/api-descriptions.js\";\nimport type { DocumentRead, TreeNode } from \"../domain/config-documents.js\";\nimport { namesOriginalPackage } from \"../domain/package-names.js\";\nimport type { DocumentReaders, ProjectFiles } from \"./ports.js\";\nimport { extensionOf, YAML_EXTENSIONS } from \"./project-file-names.js\";\n\n/**\n * The files of a split API description: the YAML and JSON files that an API description of the\n * project reaches by `$ref`, directly or through other such files. Their values are data, so the\n * YAML command migration leaves them as it leaves the description.\n */\n\n/** The parts of the project's API descriptions; empty when none is listed. */\nexport type ApiDescriptionParts = ReadonlySet<string>;\n\nexport const NO_API_DESCRIPTION_PARTS: ApiDescriptionParts = new Set();\n\nconst JSON_EXTENSION = \".json\";\n\ninterface PartsDependencies {\n readonly files: ProjectFiles;\n readonly readers: DocumentReaders;\n}\n\nconst isYaml = (path: string): boolean => YAML_EXTENSIONS.has(extensionOf(path));\n\nconst isDescriptionFormat = (path: string): boolean =>\n isYaml(path) || extensionOf(path) === JSON_EXTENSION;\n\n/** The text of a listed file, or undefined when it cannot be read. */\nasync function textOf(path: string, files: ProjectFiles): Promise<string | undefined> {\n const read = await files.read(path);\n return read.kind === \"read\" ? read.text : undefined;\n}\n\n/** The parsed documents of a YAML or JSON text, or undefined when it does not parse. */\nfunction documentsOf(path: string, text: string, readers: DocumentReaders): TreeNode[] | undefined {\n const parsed: DocumentRead = (isYaml(path) ? readers.yaml : readers.json).read(text);\n return parsed.kind === \"read\" ? [...parsed.documents] : undefined;\n}\n\n/**\n * Whether a YAML file names an old package, so the command migration reads it: only then can a\n * part be changed. The descriptions, which can be large, are parsed only when there is one.\n */\nasync function hasNamingYaml(paths: readonly string[], files: ProjectFiles): Promise<boolean> {\n for (const path of paths.filter(isYaml)) {\n const text = await textOf(path, files);\n if (text !== undefined && namesOriginalPackage(text)) {\n return true;\n }\n }\n return false;\n}\n\n/** The API descriptions of the listing, with their parsed documents. */\nasync function descriptionRoots(\n paths: readonly string[],\n { files, readers }: PartsDependencies,\n): Promise<Map<string, TreeNode[]>> {\n const roots = new Map<string, TreeNode[]>();\n for (const path of paths.filter(isDescriptionFormat)) {\n const text = await textOf(path, files);\n const documents =\n text !== undefined && mayBeApiDescription(text)\n ? documentsOf(path, text, readers)\n : undefined;\n if (documents !== undefined && isApiDescription(documents)) {\n roots.set(path, documents);\n }\n }\n return roots;\n}\n\n/**\n * The listed files that the API descriptions of `paths` reach by `$ref`, the descriptions\n * themselves left out. A part that cannot be read or parsed is still a part; its own references\n * are not followed.\n */\nexport async function apiDescriptionParts(\n paths: readonly string[],\n dependencies: PartsDependencies,\n): Promise<ApiDescriptionParts> {\n if (!(await hasNamingYaml(paths, dependencies.files))) {\n return NO_API_DESCRIPTION_PARTS;\n }\n const listed = new Set(paths.filter(isDescriptionFormat));\n const roots = await descriptionRoots(paths, dependencies);\n const parts = new Set<string>();\n const pending = [...roots].flatMap(([path, documents]) => referencedFiles(path, documents));\n for (let path = pending.pop(); path !== undefined; path = pending.pop()) {\n if (!listed.has(path) || roots.has(path) || parts.has(path)) {\n continue;\n }\n parts.add(path);\n const text = await textOf(path, dependencies.files);\n const documents =\n text === undefined ? undefined : documentsOf(path, text, dependencies.readers);\n pending.push(...(documents === undefined ? [] : referencedFiles(path, documents)));\n }\n return parts;\n}\n","import type { DocumentRead } from \"../domain/config-documents.js\";\nimport type { NamedImportMaps } from \"./named-import-maps.js\";\nimport type { DocumentReaders } from \"./ports.js\";\nimport {\n baseName,\n DENO_CONFIG_FILES,\n IMPORT_MAP_FILE,\n JSON5_MANIFEST_FILE,\n MANIFEST_FILE,\n WORKSPACE_FILE,\n YAML_MANIFEST_FILES,\n YARNRC_FILE_NAME,\n} from \"./project-file-names.js\";\n\n/**\n * How a file takes part in the project plan: a manifest names dependencies on catalogs (and bun\n * keeps catalogs in package.json) and declares packages, a workspace file holds catalogs\n * (domain/catalogs.ts), and a Deno import map declares the packages that sources import.\n */\nexport interface PlanSource {\n readonly role: \"manifest\" | \"catalogs\" | \"import-map\";\n /** Undefined for a format the tool does not read; such a file counts as declaring all. */\n readonly read: ((text: string, readers: DocumentReaders) => DocumentRead) | undefined;\n}\n\nconst readJson = (text: string, readers: DocumentReaders) => readers.json.read(text);\nconst readYaml = (text: string, readers: DocumentReaders) => readers.yaml.read(text);\n\n/**\n * The part a file plays in the project plan, or undefined for a file that plays none.\n * `namedImportMaps` are the files that Deno configs name as their import maps.\n */\nexport function planSourceOf(\n path: string,\n namedImportMaps: NamedImportMaps,\n): PlanSource | undefined {\n const name = baseName(path);\n if (namedImportMaps.has(path) || DENO_CONFIG_FILES.has(name) || name === IMPORT_MAP_FILE) {\n return { role: \"import-map\", read: readJson };\n }\n if (name === MANIFEST_FILE) {\n return { role: \"manifest\", read: readJson };\n }\n if (YAML_MANIFEST_FILES.has(name)) {\n return { role: \"manifest\", read: readYaml };\n }\n if (name === JSON5_MANIFEST_FILE) {\n return { role: \"manifest\", read: undefined };\n }\n const isCatalogFile = name === WORKSPACE_FILE || name === YARNRC_FILE_NAME;\n return isCatalogFile ? { role: \"catalogs\", read: readYaml } : undefined;\n}\n","import type { CatalogPlan } from \"../domain/catalog-plan.js\";\nimport { planCatalogs } from \"../domain/catalogs.js\";\nimport { isMap, type TreeMap, valuesAt } from \"../domain/config-documents.js\";\nimport {\n declaredNames,\n localPackageNames,\n type ManifestDeclarations,\n namesUninstalledPackage,\n} from \"../domain/declared-packages.js\";\nimport { importMapNames } from \"../domain/import-map-migration.js\";\nimport { namesOriginalPackage, WORKSPACES_FIELD } from \"../domain/package-names.js\";\nimport { type SuccessorAliases, successorAliasedPackages } from \"../domain/successor-aliases.js\";\nimport { type ApiDescriptionParts, apiDescriptionParts } from \"./api-description-parts.js\";\nimport { type NamedImportMaps, namedImportMaps, withNamedImportMaps } from \"./named-import-maps.js\";\nimport { type PlanSource, planSourceOf } from \"./plan-sources.js\";\nimport type { DocumentReaders, ProjectFiles } from \"./ports.js\";\nimport { MANIFEST_FILE, WORKSPACE_FILE, YARNRC_FILE_NAME } from \"./project-file-names.js\";\n\n/**\n * The project plan: what the manifests, catalog files and import maps of a project say, read once\n * before any file is migrated, so that each file is migrated in step with the others.\n */\n\n/** What the plan reads files with. */\nexport interface PlanDependencies {\n readonly files: ProjectFiles;\n readonly readers: DocumentReaders;\n}\n\n/**\n * What every file of a project is migrated with: the tool's version, the catalog plan and what the\n * manifests declare.\n */\nexport interface ProjectTarget {\n readonly version: string;\n readonly catalogs: CatalogPlan;\n readonly manifests: readonly ManifestDeclarations[];\n /** The manifests and workspace files whose overrides alias original packages. */\n readonly aliases: readonly SuccessorAliases[];\n /** The files that Deno configs name as their import maps. */\n readonly importMaps: NamedImportMaps;\n /** The files that the API descriptions reach by `$ref`, which are data. */\n readonly apiDescriptionParts: ApiDescriptionParts;\n}\n\n/**\n * A manifest, catalog or import map file as the plan reads it: whether it names an original\n * package, and its parsed roots; `roots` is undefined when the file cannot be read or parsed.\n */\ninterface PlanRead {\n readonly namesOriginal: boolean;\n readonly roots: readonly TreeMap[] | undefined;\n}\n\nasync function readForPlan(\n path: string,\n source: PlanSource,\n dependencies: PlanDependencies,\n): Promise<PlanRead> {\n const read = await dependencies.files.read(path);\n if (read.kind !== \"read\") {\n return { namesOriginal: false, roots: undefined };\n }\n const namesOriginal = namesOriginalPackage(read.text);\n // A file that names none of the packages adds nothing, so it is not parsed (the same gate as\n // the migration's own, which keeps large YAML files fast). The root manifest is parsed: its\n // `workspaces` field tells whether the root is a workspace root.\n const isNeeded = namesOriginal || namesUninstalledPackage(read.text) || path === MANIFEST_FILE;\n if (!isNeeded) {\n return { namesOriginal, roots: [] };\n }\n const parsed = source.read?.(read.text, dependencies.readers);\n const roots = parsed?.kind === \"read\" ? parsed.documents.filter(isMap) : undefined;\n return { namesOriginal, roots };\n}\n\n/** The files at a workspace root where pnpm and yarn keep the workspace's catalogs. */\nconst ROOT_WORKSPACE_FILES: ReadonlySet<string> = new Set([WORKSPACE_FILE, YARNRC_FILE_NAME]);\n\n/**\n * Whether a file of the root makes it a workspace root: a pnpm or yarn workspace file, or a\n * root manifest with `workspaces` (bun keeps its catalogs there).\n */\nfunction marksWorkspaceRoot(path: string, roots: readonly TreeMap[] | undefined): boolean {\n if (ROOT_WORKSPACE_FILES.has(path)) {\n return true;\n }\n const manifests = path === MANIFEST_FILE ? (roots ?? []) : [];\n return manifests.some((manifest) => valuesAt(manifest, WORKSPACES_FIELD).length > 0);\n}\n\n/** The names that a manifest or an import map declares, by the role of its file. */\nconst DECLARED_NAMES: Readonly<\n Record<PlanSource[\"role\"], ((root: TreeMap) => string[]) | undefined>\n> = { manifest: declaredNames, \"import-map\": importMapNames, catalogs: undefined };\n\n/** What a manifest or an import map declares; nothing for a file of another role. */\nfunction declarationsOf(\n path: string,\n role: PlanSource[\"role\"],\n roots: readonly TreeMap[] | undefined,\n): ManifestDeclarations[] {\n const names = DECLARED_NAMES[role];\n if (names === undefined) {\n return [];\n }\n const local = role === \"manifest\" ? (roots ?? []).flatMap(localPackageNames) : [];\n return [{ path, names: roots && new Set(roots.flatMap(names)), localPackages: new Set(local) }];\n}\n\n/** The successor aliases in the overrides of a manifest or a workspace file. */\nfunction aliasesOf(path: string, roots: readonly TreeMap[] | undefined): SuccessorAliases[] {\n const names = (roots ?? []).flatMap(successorAliasedPackages);\n return names.length === 0 ? [] : [{ path, names: new Set(names) }];\n}\n\n/**\n * The catalog plan of the project and what its manifests and import maps declare, from the files\n * of the listing. A file that cannot be read or parsed adds no catalogs, and is reported when it\n * is migrated; such a manifest or import map counts as declaring every package.\n */\nexport async function planProjectTarget(\n paths: readonly string[],\n dependencies: PlanDependencies,\n version: string,\n): Promise<ProjectTarget> {\n const documents: Record<\"manifest\" | \"catalogs\", TreeMap[]> = { manifest: [], catalogs: [] };\n const manifests: ManifestDeclarations[] = [];\n const aliases: SuccessorAliases[] = [];\n let isWorkspaceRoot = false;\n const importMaps = await namedImportMaps(paths, dependencies.files, dependencies.readers);\n for (const path of paths) {\n const source = planSourceOf(path, importMaps);\n if (source === undefined) {\n continue;\n }\n const { namesOriginal, roots } = await readForPlan(path, source, dependencies);\n isWorkspaceRoot ||= marksWorkspaceRoot(path, roots);\n if (namesOriginal && source.role !== \"import-map\") {\n documents[source.role].push(...(roots ?? []));\n }\n manifests.push(...declarationsOf(path, source.role, roots));\n aliases.push(...aliasesOf(path, roots));\n }\n const catalogs = planCatalogs({\n manifests: documents.manifest,\n catalogFiles: documents.catalogs,\n isWorkspaceRoot,\n });\n const declarations = withNamedImportMaps(manifests, importMaps);\n const parts = await apiDescriptionParts(paths, dependencies);\n return {\n ...{ version, catalogs, manifests: declarations, aliases, importMaps },\n apiDescriptionParts: parts,\n };\n}\n","import type { Change, ManualStep } from \"../domain/migration-findings.js\";\nimport type { MigrationContext } from \"./config-steps.js\";\nimport { fileMigrationFor } from \"./file-migrations.js\";\nimport type {\n CallbackRewriter,\n DocumentReaders,\n FileProblem,\n Logger,\n ProjectFiles,\n SkippedFile,\n SourceStringScanner,\n} from \"./ports.js\";\nimport { type ProjectTarget, planProjectTarget } from \"./project-target.js\";\n\nexport interface MigrateProjectDependencies {\n readonly files: ProjectFiles;\n readonly rewriter: CallbackRewriter;\n readonly scanner: SourceStringScanner;\n readonly readers: DocumentReaders;\n readonly logger: Logger;\n}\n\nexport interface MigrateProjectInput {\n /** The openapi-typesafe version that renamed dependencies get. */\n readonly version: string;\n /** Write the changed files; without it the migration only reports (dry run). */\n readonly isWrite: boolean;\n}\n\n/**\n * What happened to the changed files. A write that fails stops the writing: the files written\n * before it are named, and so are the ones that were not written.\n */\nexport type WriteOutcome =\n | { readonly kind: \"dry-run\" }\n | { readonly kind: \"written\"; readonly paths: readonly string[] }\n | {\n readonly kind: \"failed\";\n readonly written: readonly string[];\n readonly failed: SkippedFile;\n readonly notWritten: readonly string[];\n };\n\n/**\n * What the migration found: the files with changes or manual steps, the paths that were not\n * read, and what was written.\n */\nexport interface ProjectMigration {\n readonly files: readonly FileReport[];\n readonly skipped: readonly SkippedFile[];\n readonly write: WriteOutcome;\n}\n\n/** What the migration found in one file. */\nexport interface FileReport {\n readonly path: string;\n readonly isChanged: boolean;\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** A file's report and the text to write; the text is undefined when nothing changed. */\ninterface PlannedFile {\n readonly report: FileReport;\n readonly text: string | undefined;\n}\n\ntype FilePlan =\n | { readonly kind: \"planned\"; readonly file: PlannedFile }\n | { readonly kind: \"skipped\"; readonly reason: FileProblem }\n | { readonly kind: \"not-migrated\" };\n\nasync function planFile(\n path: string,\n dependencies: MigrateProjectDependencies,\n target: ProjectTarget,\n): Promise<FilePlan> {\n const migrate = fileMigrationFor(path, target.importMaps);\n if (migrate === undefined) {\n return { kind: \"not-migrated\" };\n }\n const read = await dependencies.files.read(path);\n if (read.kind === \"skipped\") {\n return read;\n }\n const { rewriter, scanner, readers } = dependencies;\n const { version, catalogs, manifests, aliases, apiDescriptionParts } = target;\n const context: MigrationContext = {\n ...{ version, catalogs, manifests, aliases, apiDescriptionParts },\n ...{ rewriter, scanner, readers },\n };\n const migration = migrate(read.text, path, context);\n const isChanged = migration.text !== read.text;\n const { changes, manualSteps } = migration;\n if (isChanged || manualSteps.length > 0) {\n dependencies.logger.info(\"file_migrated\", { path, isChanged, changes, manualSteps });\n }\n const report = { path, isChanged, changes, manualSteps };\n return { kind: \"planned\", file: { report, text: isChanged ? migration.text : undefined } };\n}\n\ninterface ProjectPlan {\n readonly files: readonly PlannedFile[];\n readonly skipped: readonly SkippedFile[];\n}\n\n/**\n * Every file is read and migrated before anything is written, so a file that cannot be read\n * leaves the project as it was instead of half migrated. Such a file is skipped and reported.\n */\nasync function planProject(\n paths: readonly string[],\n dependencies: MigrateProjectDependencies,\n version: string,\n): Promise<ProjectPlan> {\n const files: PlannedFile[] = [];\n const skipped: SkippedFile[] = [];\n const target = await planProjectTarget(paths, dependencies, version);\n for (const path of paths) {\n const plan = await planFile(path, dependencies, target);\n if (plan.kind === \"skipped\") {\n skipped.push({ path, reason: plan.reason });\n dependencies.logger.warn(\"file_skipped\", { path, reason: plan.reason });\n } else if (plan.kind === \"planned\") {\n const { report } = plan.file;\n const isReported = report.isChanged || report.manualSteps.length > 0;\n files.push(...(isReported ? [plan.file] : []));\n }\n }\n return { files, skipped };\n}\n\n/** Writes the changed files in path order and stops at the first one that fails. */\nasync function writeFiles(\n planned: readonly PlannedFile[],\n dependencies: MigrateProjectDependencies,\n): Promise<WriteOutcome> {\n const changed = planned.flatMap(({ report, text }) =>\n text === undefined ? [] : [{ path: report.path, text }],\n );\n const written: string[] = [];\n for (const [index, { path, text }] of changed.entries()) {\n const result = await dependencies.files.write(path, text);\n if (result.kind === \"failed\") {\n dependencies.logger.warn(\"file_write_failed\", { path, reason: result.reason, written });\n const notWritten = changed.slice(index + 1).map((file) => file.path);\n return { kind: \"failed\", written, failed: { path, reason: result.reason }, notWritten };\n }\n written.push(path);\n }\n return { kind: \"written\", paths: written };\n}\n\n/**\n * Migrate every file of a project (ENGINEERING_PLAN 10.1): package.json files, catalogs, module\n * specifiers and `transform` callbacks in sources, and the generator command in scripts. Reads\n * and migrates every file first, then writes the changed ones, only with `isWrite`. Gives the\n * files with changes or manual steps in path order, the skipped paths, and what was written.\n */\nexport async function migrateProject(\n dependencies: MigrateProjectDependencies,\n input: MigrateProjectInput,\n): Promise<ProjectMigration> {\n const listing = await dependencies.files.listFiles();\n const paths = [...listing.files].sort();\n dependencies.logger.info(\"migration_started\", { fileCount: paths.length, ...input });\n const plan = await planProject(paths, dependencies, input.version);\n const skipped = [...listing.skipped, ...plan.skipped];\n const write: WriteOutcome = input.isWrite\n ? await writeFiles(plan.files, dependencies)\n : { kind: \"dry-run\" };\n dependencies.logger.info(\"migration_finished\", {\n changedFiles: plan.files.length,\n skippedFiles: skipped.length,\n write: write.kind,\n });\n return { files: plan.files.map((file) => file.report), skipped, write };\n}\n","/**\n * Text from a document or a project (a path key, an `operationId`, a file name) reaches the\n * terminal and CI job logs. A line break in it starts a new line that CI reads as a command\n * (`::error …` in GitHub Actions, `##vso[…]` in Azure Pipelines), and an escape sequence moves\n * the cursor or erases lines, so it can forge or hide output. Each such character is shown as an\n * escape instead (`\\n`, `\\u001b`), so one message stays one line and shows what the text holds.\n */\n\n/**\n * The code points shown as escapes: C0 controls but the tab, DEL and C1 controls, the Unicode\n * line and paragraph separators, and the bidirectional controls, which reorder how a terminal\n * shows the text around them.\n */\nconst CONTROL_RANGES: readonly (readonly [number, number])[] = [\n [0x00, 0x08],\n [0x0a, 0x1f],\n [0x7f, 0x9f],\n [0x2028, 0x2029],\n [0x202a, 0x202e],\n [0x2066, 0x2069],\n];\n\nconst SHORT_ESCAPES: Readonly<Record<string, string>> = { \"\\n\": \"\\\\n\", \"\\r\": \"\\\\r\" };\nconst HEX_DIGITS = 4;\nconst HEX_RADIX = 16;\n\nfunction isControl(codePoint: number): boolean {\n return CONTROL_RANGES.some(([first, last]) => codePoint >= first && codePoint <= last);\n}\n\nfunction escapeOf(character: string, codePoint: number): string {\n const hex = codePoint.toString(HEX_RADIX).padStart(HEX_DIGITS, \"0\");\n return SHORT_ESCAPES[character] ?? `\\\\u${hex}`;\n}\n\n/** The text with every control character shown as an escape, so it prints as one plain line. */\nexport function terminalSafeText(text: string): string {\n let shown = \"\";\n for (const character of text) {\n const codePoint = character.codePointAt(0) ?? 0;\n shown += isControl(codePoint) ? escapeOf(character, codePoint) : character;\n }\n return shown;\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { ManualStep } from \"../domain/migration-findings.js\";\nimport { FLAG_RENAMES, PACKAGE_RENAMES } from \"../domain/package-names.js\";\n\n/** The user-facing text of the manual steps found in commands (CODING_PRINCIPLES 7.8). */\n\nconst PINNED_NOTE = \"change it to openapi-typesafe@<version>\";\nconst OLD_FILE_NOTE =\n \"is a file of openapi-typescript, which is no longer installed: run openapi-typesafe instead\";\nconst FLAGS_IN_VARIABLE_NOTE =\n \"holds old flags of the generator and may serve other commands, so it was kept: rename\";\nconst NOT_ONLY_GENERATOR_NOTE =\n \"may run openapi-typescript or another program (set elsewhere in the file, in another \" +\n \"step or outside it), so the flags after it were kept; where it runs the generator, rename\";\nconst OLD_NAME_IN_COMMAND_NOTE =\n \"names an old package where the tool cannot tell what runs it (a script name, an argument of \" +\n \"a program it does not know), so it was kept: migrate it by hand\";\nconst SCRIPT_NOT_SHELL_NOTE =\n \"so the tool does not read it as commands: migrate the old package names in it by hand\";\nconst COMMAND_STRING_NOTE = \"a string runs openapi-typescript, so it was kept; change it to\";\n\nfunction pinnedPackageMessage(step: Extract<ManualStep, { kind: \"pinned-package\" }>): string {\n const successor = PACKAGE_RENAMES.get(step.name) ?? step.name;\n return (\n `${step.location} names a pinned ${step.name}@<version>: ` +\n `change it to ${successor}@<version>`\n );\n}\n\n/** `-it to --immutable, …`: each old flag with its new name. */\nconst flagRenames = (flags: readonly string[]): string =>\n flags.map((flag) => `${flag} to ${FLAG_RENAMES.get(flag) ?? flag}`).join(\", \");\n\nfunction flagsInVariableMessage(step: Extract<ManualStep, { kind: \"flags-in-variable\" }>) {\n return `${step.location}: ${step.variable} ${FLAGS_IN_VARIABLE_NOTE} ${flagRenames(step.flags)}`;\n}\n\nfunction notOnlyGeneratorMessage(\n step: Extract<ManualStep, { kind: \"variable-not-only-generator\" }>,\n): string {\n return `${step.location}: ${step.variable} ${NOT_ONLY_GENERATOR_NOTE} ${flagRenames(step.flags)}`;\n}\n\n/** The manual steps found in commands: scripts, shell files, CI files and command strings. */\ntype CommandStep = Extract<\n ManualStep,\n {\n kind:\n | \"versioned-command\"\n | \"flags-in-variable\"\n | \"variable-not-only-generator\"\n | \"pinned-package\"\n | \"old-package-file\"\n | \"old-name-in-command\"\n | \"script-not-shell\"\n | \"command-string\";\n }\n>;\n\nconst COMMAND_STEP_KINDS: ReadonlySet<ManualStep[\"kind\"]> = new Set([\n \"versioned-command\",\n \"flags-in-variable\",\n \"variable-not-only-generator\",\n \"pinned-package\",\n \"old-package-file\",\n \"old-name-in-command\",\n \"script-not-shell\",\n \"command-string\",\n]);\n\nexport const isCommandStep = (step: ManualStep): step is CommandStep =>\n COMMAND_STEP_KINDS.has(step.kind);\n\nexport function commandStepMessage(step: CommandStep): string {\n switch (step.kind) {\n case \"versioned-command\":\n return `${step.location} runs a pinned openapi-typescript@<version>: ${PINNED_NOTE}`;\n case \"flags-in-variable\":\n return flagsInVariableMessage(step);\n case \"variable-not-only-generator\":\n return notOnlyGeneratorMessage(step);\n case \"pinned-package\":\n return pinnedPackageMessage(step);\n case \"old-package-file\":\n return `${step.location}: ${step.path} ${OLD_FILE_NOTE}`;\n case \"old-name-in-command\":\n return `${step.location}: \"${step.word}\" ${OLD_NAME_IN_COMMAND_NOTE}`;\n case \"script-not-shell\":\n return `${step.location}: the step runs with shell: ${step.shell}, ${SCRIPT_NOT_SHELL_NOTE}`;\n case \"command-string\":\n return `line ${step.line}: ${COMMAND_STRING_NOTE} \"${step.to}\"`;\n default:\n return assertNever(step);\n }\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { ManualStep, TransformKeepReason } from \"../domain/migration-findings.js\";\n\n/** The user-facing text of the manual steps found in source files (CODING_PRINCIPLES 7.8). */\n\n// The same guide the generator links in its deprecation warning.\nconst IR_CALLBACKS_GUIDE =\n \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs/node.md#ir-callbacks\";\n\nconst KEEP_REASONS: Readonly<Record<TransformKeepReason, string>> = {\n \"other-callbacks\":\n \"postTransform or transformProperty are set too, and they need TypeScript nodes\",\n \"not-a-function\": \"it is not an inline function or a function of this file\",\n \"shared-function\": \"the function it names is used elsewhere too\",\n \"shared-options\": \"its options object is used elsewhere too\",\n \"unknown-return\": \"a return value is not a plain ts.factory type\",\n \"typed-options\":\n \"its options are declared with a type built from OpenAPITSOptions, which the tool cannot \" +\n \"change to OpenAPITSIrOptions\",\n \"spread-options\":\n \"its options take keys from another object (`...base`), whose callbacks and type the tool \" +\n \"cannot see\",\n};\nconst OPTIONS_NOTE =\n \"the options of openapiTS() are not an object written in this file: check them for \" +\n `transform, postTransform and transformProperty. See ${IR_CALLBACKS_GUIDE}`;\nconst DEEP_IMPORT_NOTE = \"imports a file inside the package; check that it exists\";\nconst OLD_FILE_NOTE = \"imports a file from node_modules of\";\nconst OLD_FILE_FIX_NOTE = \"which is no longer installed: import from\";\nconst DYNAMIC_NOTE =\n \"builds its module name at run time from an old package name, so it was kept; rename it to\";\nconst STRING_NOTE = \"is a string, not a module specifier, so it was kept\";\nconst STRING_FIX_NOTE = \"if it names the package, change it to\";\nconst KEPT_NOTE = `it works, with a deprecation warning. See ${IR_CALLBACKS_GUIDE}`;\nconst LEGACY_CALLBACK_NOTE = `receives TypeScript nodes (deprecated). See ${IR_CALLBACKS_GUIDE}`;\nconst HELPER_TYPES_ENTRY = \"openapi-typesafe-fetch/helpers\";\n\nfunction packageNotDeclaredMessage(\n step: Extract<ManualStep, { kind: \"package-not-declared\" }>,\n): string {\n const { line, name, installers } = step;\n return (\n `line ${line}: no package.json or Deno import map at or above this file lists ${name}; ` +\n `${installers.join(\" and \")} installed it, the openapi-typesafe packages do not: ` +\n `add it to the dependencies, or import the types from ${HELPER_TYPES_ENTRY}`\n );\n}\n\n/** Steps for a line of a source file. */\nexport type SourceStep = Extract<\n ManualStep,\n {\n kind:\n | \"options-not-inspected\"\n | \"deep-import\"\n | \"old-package-import\"\n | \"dynamic-specifier\"\n | \"string-names-package\"\n | \"transform-not-rewritten\"\n | \"legacy-callback\"\n | \"package-not-declared\";\n }\n>;\n\nconst SOURCE_STEP_KINDS: ReadonlySet<ManualStep[\"kind\"]> = new Set([\n \"options-not-inspected\",\n \"deep-import\",\n \"old-package-import\",\n \"dynamic-specifier\",\n \"string-names-package\",\n \"transform-not-rewritten\",\n \"legacy-callback\",\n \"package-not-declared\",\n]);\n\nexport const isSourceStep = (step: ManualStep): step is SourceStep =>\n SOURCE_STEP_KINDS.has(step.kind);\n\nexport function sourceStepMessage(step: SourceStep): string {\n switch (step.kind) {\n case \"options-not-inspected\":\n return `line ${step.line}: ${OPTIONS_NOTE}`;\n case \"deep-import\":\n return `line ${step.line}: \"${step.specifier}\" ${DEEP_IMPORT_NOTE}`;\n case \"old-package-import\":\n return (\n `line ${step.line}: \"${step.specifier}\" ${OLD_FILE_NOTE} ${step.name}, ` +\n `${OLD_FILE_FIX_NOTE} ${step.to}`\n );\n case \"dynamic-specifier\":\n return `line ${step.line}: \\`${step.value}\\` ${DYNAMIC_NOTE} ${step.to}`;\n case \"string-names-package\":\n return `line ${step.line}: \"${step.value}\" ${STRING_NOTE}; ${STRING_FIX_NOTE} \"${step.to}\"`;\n case \"transform-not-rewritten\":\n return `line ${step.line}: transform kept (${KEEP_REASONS[step.reason]}); ${KEPT_NOTE}`;\n case \"legacy-callback\":\n return `line ${step.line}: ${step.callback} ${LEGACY_CALLBACK_NOTE}`;\n case \"package-not-declared\":\n return packageNotDeclaredMessage(step);\n default:\n return assertNever(step);\n }\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { ManualStep } from \"../domain/migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"../domain/package-names.js\";\nimport { commandStepMessage, isCommandStep } from \"./command-step-messages.js\";\nimport { isSourceStep, sourceStepMessage } from \"./source-step-messages.js\";\n\n/** The user-facing text of the manual steps in the report (CODING_PRINCIPLES 7.8). */\n\nconst OPENAPI_FETCH_ALIAS_GUIDE =\n \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs/fetch/index.md\" +\n \"#libraries-built-on-openapi-fetch\";\n\nconst PEER_NOTE = \"users of this package must switch too (a breaking change for them)\";\nconst MANIFEST_NOT_READ_NOTE =\n \"is a JSON5 manifest, which the tool does not read: rename the packages and the generator \" +\n \"command by hand, or write it as package.json and run the tool again\";\nconst IMPORT_MAP_NOTE =\n \"is a URL or a file outside the project folder, so it was not migrated: rename the old \" +\n \"packages in it by hand\";\nconst PATCH_NOTE = \"check whether the fix is still needed, then make the patch again or delete it\";\nconst PATTERN_NOTE = \"is a pattern that names\";\nconst PATTERN_FIX_NOTE = \"where it means the package, make it match\";\nconst SETTING_NOTE = \"remove the setting if it no longer applies, or make it name\";\nconst LOCAL_PACKAGE_NOTE =\n \"points at a local package, not the npm package, so it and the imports of it were kept: if \" +\n \"that package is a copy of the original, move it to\";\nconst DEEP_TARGET_NOTE = \"points at a file inside the package; check that it exists\";\nconst OLD_PATH_NOTE =\n \"is a path into node_modules of an old package, which is no longer installed:\";\nconst OLD_PATH_FIX_NOTE = \"point it at the files of\";\n\nconst renamed = (name: string): string => PACKAGE_RENAMES.get(name) ?? name;\n\nconst localPackageMessage = (step: Extract<ManualStep, { kind: \"local-package\" }>): string =>\n `${step.field}: ${step.name} \"${step.spec}\" ${LOCAL_PACKAGE_NOTE} ${renamed(step.name)}`;\n\nfunction oldPeerMessage(step: Extract<ManualStep, { kind: \"old-peer-needed\" }>): string {\n const { dependent, peer, range } = step;\n const successor = PACKAGE_RENAMES.get(peer) ?? peer;\n return (\n `${dependent} takes its client type from ${peer}@${range}, its peer dependency: alias ` +\n `${peer} to ${successor} with overrides or resolutions, or passing it the ${successor} ` +\n `client fails to type-check. See ${OPENAPI_FETCH_ALIAS_GUIDE}`\n );\n}\n\n/** Steps for places of a structured file (JSON, YAML) that the tool could not edit. */\ntype UneditedStep = Extract<\n ManualStep,\n {\n kind:\n | \"config-unreadable\"\n | \"manifest-not-read\"\n | \"import-map-not-editable\"\n | \"old-package-patch\"\n | \"entry-not-edited\"\n | \"name-collision\";\n }\n>;\n\n/** Steps for catalog entries and the dependencies on them that keep the old names. */\ntype CatalogStep = Extract<\n ManualStep,\n {\n kind:\n | \"catalog-reference-kept\"\n | \"catalog-entry-outside\"\n | \"catalog-entry-missing\"\n | \"catalog-entry-in-use\";\n }\n>;\n\nfunction uneditedStepMessage(step: UneditedStep): string {\n switch (step.kind) {\n case \"config-unreadable\":\n return step.position === undefined\n ? \"nests too deep to be read; migrate it by hand\"\n : `cannot be parsed at line ${step.position.line}, column ${step.position.column}; ` +\n \"migrate it by hand\";\n case \"manifest-not-read\":\n return MANIFEST_NOT_READ_NOTE;\n case \"import-map-not-editable\":\n return `importMap \"${step.reference}\" ${IMPORT_MAP_NOTE}`;\n case \"old-package-patch\":\n return `patches the code of ${step.name}, which ${step.to} does not share: ${PATCH_NOTE}`;\n case \"entry-not-edited\":\n return `${step.field}: ${step.name} has a value the tool does not read; rename it by hand`;\n case \"name-collision\":\n return (\n `${step.field} has both ${step.from} and ${step.to}, so ${step.from} was kept: ` +\n \"remove one of them\"\n );\n default:\n return assertNever(step);\n }\n}\n\nfunction catalogStepMessage(step: CatalogStep): string {\n switch (step.kind) {\n case \"catalog-reference-kept\":\n return (\n `${step.field}: ${step.name} was kept, because catalog \"${step.catalog}\" keeps ` +\n `${step.name}: rename the entry and the dependency together`\n );\n case \"catalog-entry-outside\":\n return (\n `${step.field}: ${step.name} was kept, because no catalog of this project has its ` +\n `\"${step.catalog}\" entry; a catalog above the root (pnpm-workspace.yaml, .yarnrc.yml or ` +\n \"the workspace package.json) may hold it: rename the entry and the dependency together\"\n );\n case \"catalog-entry-missing\":\n return (\n `${step.field}: ${step.name} was kept, because no catalog of the workspace has its ` +\n `\"${step.catalog}\" entry: add the entry, or give the dependency a version`\n );\n case \"catalog-entry-in-use\":\n return (\n `${step.catalog}: ${step.name} was kept, because a dependency or an override still ` +\n \"names it: rename the entry and what names it together\"\n );\n default:\n return assertNever(step);\n }\n}\n\n/** Steps for the packages a manifest names. */\ntype PackageStep = Extract<\n ManualStep,\n {\n kind:\n | \"peer-dependency-renamed\"\n | \"spec-kept\"\n | \"local-package\"\n | \"override-names-package\"\n | \"setting-names-package\"\n | \"pattern-names-package\"\n | \"deep-target\"\n | \"old-package-path\"\n | \"old-peer-needed\";\n }\n>;\n\nfunction packageStepMessage(step: PackageStep): string {\n switch (step.kind) {\n case \"peer-dependency-renamed\":\n return `${step.name} is a peer dependency: ${PEER_NOTE}`;\n case \"spec-kept\":\n return `${step.name} kept the spec \"${step.spec}\": point it at an openapi-typesafe version`;\n case \"local-package\":\n return localPackageMessage(step);\n case \"override-names-package\":\n return `\"${step.field}\" names ${step.name}: update or remove that override`;\n case \"setting-names-package\":\n return `\"${step.field}\" names ${step.name}: ${SETTING_NOTE} ${renamed(step.name)}`;\n case \"pattern-names-package\":\n return (\n `${step.location}: \"${step.value}\" ${PATTERN_NOTE} ${step.name}: ` +\n `${PATTERN_FIX_NOTE} ${step.to}`\n );\n case \"deep-target\":\n return `${step.location}: \"${step.specifier}\" ${DEEP_TARGET_NOTE}`;\n case \"old-package-path\":\n return `${step.location}: \"${step.path}\" ${OLD_PATH_NOTE} ${OLD_PATH_FIX_NOTE} ${step.to}`;\n case \"old-peer-needed\":\n return oldPeerMessage(step);\n default:\n return assertNever(step);\n }\n}\n\nexport function manualStepMessage(step: ManualStep): string {\n if (isCommandStep(step)) {\n return commandStepMessage(step);\n }\n if (isSourceStep(step)) {\n return sourceStepMessage(step);\n }\n switch (step.kind) {\n case \"config-unreadable\":\n case \"manifest-not-read\":\n case \"import-map-not-editable\":\n case \"old-package-patch\":\n case \"entry-not-edited\":\n case \"name-collision\":\n return uneditedStepMessage(step);\n case \"catalog-reference-kept\":\n case \"catalog-entry-outside\":\n case \"catalog-entry-missing\":\n case \"catalog-entry-in-use\":\n return catalogStepMessage(step);\n case \"peer-dependency-renamed\":\n case \"spec-kept\":\n case \"local-package\":\n case \"override-names-package\":\n case \"setting-names-package\":\n case \"pattern-names-package\":\n case \"deep-target\":\n case \"old-package-path\":\n case \"old-peer-needed\":\n return packageStepMessage(step);\n default:\n return assertNever(step);\n }\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { Change } from \"../domain/migration-findings.js\";\nimport type { FileProblem } from \"./ports.js\";\n\n/**\n * The user-facing text of the report (CODING_PRINCIPLES 7.8: kept apart from the logic); the\n * manual steps have their own module, manual-step-messages.ts.\n */\n\nexport function changeMessage(change: Change): string {\n switch (change.kind) {\n case \"dependency-renamed\":\n return `${change.field}: ${change.from} → ${change.to}@${change.spec}`;\n case \"catalog-entry-renamed\":\n return `${change.catalog}: ${change.from} → ${change.to}@${change.spec}`;\n case \"import-renamed\":\n return `${change.field}: \"${change.from}\" → \"${change.to}\" (${change.target})`;\n case \"alias-renamed\":\n return `${change.field}: ${change.name} → ${change.spec}`;\n case \"command-renamed\":\n return `${change.location}: openapi-typescript → openapi-typesafe`;\n case \"flag-renamed\":\n case \"package-name-renamed\":\n return `${change.location}: ${change.from} → ${change.to}`;\n case \"specifier-renamed\":\n return `line ${change.line}: \"${change.from}\" → \"${change.to}\"`;\n case \"transform-rewritten\":\n return `line ${change.line}: transform returns type text; irCallbacks: true added`;\n case \"declaration-removed\":\n return `line ${change.line}: ${change.name} removed; only the old transform returns used it`;\n default:\n return assertNever(change);\n }\n}\n\nexport const SKIPPED_HEADING = \"Skipped (not read, not written):\";\n\n/** Why a file was not read, after its path in the \"Skipped\" section. */\nexport function skippedMessage(reason: FileProblem): string {\n switch (reason.kind) {\n case \"outside-root\":\n return \"it leads outside the project folder (a link, or a path in the git index)\";\n case \"not-utf-8\":\n return \"it is not UTF-8 text, so it was not changed; check it by hand\";\n case \"io-error\":\n return `it could not be read (${reason.code})`;\n default:\n return assertNever(reason);\n }\n}\n\nfunction writeProblemMessage(reason: FileProblem): string {\n switch (reason.kind) {\n case \"outside-root\":\n return \"it leads outside the project folder\";\n case \"not-utf-8\":\n return \"its text is not UTF-8\";\n case \"io-error\":\n return reason.code;\n default:\n return assertNever(reason);\n }\n}\n\n/** The first line of the report's end when a write failed and the writing stopped. */\nexport const writeFailedMessage = (path: string, reason: FileProblem): string =>\n `Writing stopped: ${path} could not be written (${writeProblemMessage(reason)}).`;\nexport const WRITTEN_HEADING = \"Written before it:\";\nexport const NOT_WRITTEN_HEADING = \"Not written (still as they were):\";\nexport const NONE_WRITTEN = \"Nothing was written before it.\";\n\nexport const NEXT_STEPS: readonly string[] = [\n \"Install: run your package manager's install, so the lockfile has the new packages.\",\n \"Regenerate your types and commit them once: the file header names openapi-typesafe now, \" +\n \"so `--check` fails until you do.\",\n \"Run your type check and tests.\",\n];\n\nexport const DRY_RUN_NOTE = \"Dry run: nothing was written. Run again with --write to apply.\";\nexport const WRITTEN_NOTE = \"Files were written.\";\nexport const NOTHING_FOUND =\n \"Nothing to migrate: no openapi-typescript, openapi-fetch, openapi-react-query \" +\n \"or openapi-typescript-helpers found.\";\n","import { assertNever } from \"../domain/assert-never.js\";\nimport { terminalSafeText } from \"../domain/terminal-text.js\";\nimport { manualStepMessage } from \"./manual-step-messages.js\";\nimport {\n changeMessage,\n DRY_RUN_NOTE,\n NEXT_STEPS,\n NONE_WRITTEN,\n NOT_WRITTEN_HEADING,\n NOTHING_FOUND,\n SKIPPED_HEADING,\n skippedMessage,\n WRITTEN_HEADING,\n WRITTEN_NOTE,\n writeFailedMessage,\n} from \"./messages.js\";\nimport type { FileReport, ProjectMigration, WriteOutcome } from \"./migrate-project.js\";\nimport type { SkippedFile } from \"./ports.js\";\n\nfunction changesSection(reports: readonly FileReport[]): string[] {\n const changed = reports.filter((report) => report.changes.length > 0);\n if (changed.length === 0) {\n return [];\n }\n return [\n \"Changes:\",\n ...changed.flatMap((report) => [\n ` ${report.path}`,\n ...report.changes.map((change) => ` ${changeMessage(change)}`),\n ]),\n \"\",\n ];\n}\n\nfunction manualStepsSection(reports: readonly FileReport[]): string[] {\n const steps = reports.flatMap((report) =>\n report.manualSteps.map((step) => ` ${report.path}: ${manualStepMessage(step)}`),\n );\n return steps.length === 0 ? [] : [\"Manual steps:\", ...steps, \"\"];\n}\n\nfunction skippedSection(skipped: readonly SkippedFile[]): string[] {\n if (skipped.length === 0) {\n return [];\n }\n const lines = skipped.map((file) => ` ${file.path}: ${skippedMessage(file.reason)}`);\n return [SKIPPED_HEADING, ...lines, \"\"];\n}\n\nconst listed = (paths: readonly string[]): string[] => paths.map((path) => ` ${path}`);\n\n/** The end of the report: what was written, or where the writing stopped. */\nfunction writeSection(write: WriteOutcome): string[] {\n switch (write.kind) {\n case \"dry-run\":\n return [DRY_RUN_NOTE];\n case \"written\":\n return [WRITTEN_NOTE];\n case \"failed\":\n return [\n writeFailedMessage(write.failed.path, write.failed.reason),\n ...(write.written.length === 0 ? [NONE_WRITTEN] : [WRITTEN_HEADING]),\n ...listed(write.written),\n ...(write.notWritten.length === 0 ? [] : [NOT_WRITTEN_HEADING]),\n ...listed(write.notWritten),\n ];\n default:\n return assertNever(write);\n }\n}\n\n/**\n * The report's lines as printed. A line quotes file names and text of the project, so each one is\n * shown as one plain line: a line break or an escape sequence in a file name must not forge a CI\n * command or erase the lines before it (terminal-text.ts).\n */\nfunction printed(lines: readonly string[]): string {\n return `${lines.map(terminalSafeText).join(\"\\n\")}\\n`;\n}\n\n/**\n * The summary the command prints: changes per file, manual steps, skipped paths, what to do\n * next, and what was written.\n */\nexport function renderReport(migration: ProjectMigration): string {\n const reports = migration.files;\n const skipped = skippedSection(migration.skipped);\n if (reports.length === 0) {\n return printed([...skipped, NOTHING_FOUND]);\n }\n const lines = [\n ...changesSection(reports),\n ...manualStepsSection(reports),\n ...skipped,\n \"Next steps:\",\n ...NEXT_STEPS.map((step, index) => ` ${index + 1}. ${step}`),\n \"\",\n ...writeSection(migration.write),\n ];\n return printed(lines);\n}\n","import { parseArgs } from \"node:util\";\n\n/** What the command was asked to do. */\nexport type CliRequest =\n | { readonly kind: \"help\" }\n | { readonly kind: \"version\" }\n | {\n readonly kind: \"migrate\";\n readonly isWrite: boolean;\n readonly root: string | undefined;\n readonly logPath: string | undefined;\n };\n\nconst OPTIONS = {\n write: { type: \"boolean\" },\n root: { type: \"string\" },\n log: { type: \"string\" },\n help: { type: \"boolean\", short: \"h\" },\n version: { type: \"boolean\", short: \"v\" },\n} as const;\n\n/** Parse the arguments; unknown options and positionals throw a TypeError with Node's message. */\nexport function parseCliArguments(argv: readonly string[]): CliRequest {\n const { values } = parseArgs({ args: [...argv], options: OPTIONS, strict: true });\n if (values.help === true) {\n return { kind: \"help\" };\n }\n if (values.version === true) {\n return { kind: \"version\" };\n }\n return {\n kind: \"migrate\",\n isWrite: values.write === true,\n root: values.root,\n logPath: values.log,\n };\n}\n","import type { ProjectRootState } from \"../application/ports.js\";\n\n/** The command's own text: help, usage errors and the closing notes. */\n\nexport const HELP_TEXT = `Usage\n openapi-typesafe-migrate [options]\n\nMove a project from openapi-typescript, openapi-fetch, openapi-react-query and\nopenapi-typescript-helpers to the openapi-typesafe packages. Without --write it only reports.\n\nOptions\n --write Write the changes (default: dry run)\n --root <dir> The project directory (default: the current directory)\n --log <file> The JSON Lines log file (default: a new file in the temporary directory)\n --help, -h Show this help\n --version, -v Show the version\n\nExit codes\n 0 Done\n 1 The migration failed (the message and the log say why), a file could not be written\n (the report names what was written), or the log could not be created\n 2 Unknown option or argument\n`;\n\nexport const usageError = (message: string): string =>\n `${message}\\nRun openapi-typesafe-migrate --help for the options.\\n`;\n\nexport const logNote = (path: string): string => `Log: ${path}\\n`;\n\nconst ROOT_PROBLEMS: Readonly<Record<Exclude<ProjectRootState, \"directory\">, string>> = {\n missing: \"does not exist\",\n \"not-a-directory\": \"is not a folder; --root takes the project folder\",\n};\n\n/** The project folder, as resolved from `--root` or the current directory, cannot be listed. */\nexport const rootError = (root: string, state: Exclude<ProjectRootState, \"directory\">): string =>\n `The project folder ${root} ${ROOT_PROBLEMS[state]}\\n`;\n\n/** `path` is the `--log` value as given; without one the log goes to the temporary directory. */\nexport const logError = (path: string | undefined, message: string): string =>\n `Cannot create the log ${path ?? \"in the temporary directory\"}: ${message}\\n`;\n","import { migrateProject } from \"../application/migrate-project.js\";\nimport type {\n CallbackRewriter,\n DocumentReaders,\n Logger,\n ProjectFiles,\n ProjectRootState,\n SourceStringScanner,\n} from \"../application/ports.js\";\nimport { renderReport } from \"../application/report.js\";\nimport { terminalSafeText } from \"../domain/terminal-text.js\";\nimport { type CliRequest, parseCliArguments } from \"./cli-arguments.js\";\nimport { HELP_TEXT, logError, logNote, rootError, usageError } from \"./cli-text.js\";\n\n/** Everything the command takes from the process, so tests run it with fakes. */\nexport interface CliDependencies {\n readonly version: string;\n readonly cwd: string;\n readonly writeStdout: (text: string) => void;\n readonly writeStderr: (text: string) => void;\n readonly inspectRoot: (root: string) => Promise<ProjectRootState>;\n readonly createFiles: (root: string, logger: Logger) => ProjectFiles;\n readonly createLogger: (path: string | undefined) => {\n readonly logger: Logger;\n readonly path: string;\n };\n readonly rewriter: CallbackRewriter;\n readonly scanner: SourceStringScanner;\n readonly readers: DocumentReaders;\n readonly resolvePath: (cwd: string, path: string) => string;\n}\n\nexport const EXIT_CODES = { success: 0, failure: 1, usage: 2 } as const;\n\nfunction parseRequest(\n argv: readonly string[],\n dependencies: CliDependencies,\n): CliRequest | undefined {\n try {\n return parseCliArguments(argv);\n } catch (error) {\n // parseArgs reports unknown options and stray positionals as a TypeError.\n if (error instanceof TypeError) {\n dependencies.writeStderr(usageError(error.message));\n return undefined;\n }\n throw error;\n }\n}\n\ntype MigrateRequest = Extract<CliRequest, { kind: \"migrate\" }>;\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\n/**\n * The log is created before any file is read, so a log that cannot be written (a parent that is\n * a file, a read-only folder) stops the run before it changes anything.\n */\nfunction openLog(\n request: MigrateRequest,\n dependencies: CliDependencies,\n): ReturnType<CliDependencies[\"createLogger\"]> | undefined {\n try {\n return dependencies.createLogger(request.logPath);\n } catch (error) {\n dependencies.writeStderr(logError(request.logPath, errorMessage(error)));\n return undefined;\n }\n}\n\n/** Migrate the project in `root`; resolves to the exit code. */\nasync function migrateRoot(\n request: MigrateRequest,\n root: string,\n logger: Logger,\n dependencies: CliDependencies,\n): Promise<number> {\n const rootState = await dependencies.inspectRoot(root);\n if (rootState !== \"directory\") {\n logger.warn(\"root_unusable\", { root, rootState });\n dependencies.writeStderr(rootError(root, rootState));\n return EXIT_CODES.failure;\n }\n const files = dependencies.createFiles(root, logger);\n const { rewriter, scanner, readers } = dependencies;\n const input = { version: dependencies.version, isWrite: request.isWrite };\n const migration = await migrateProject({ files, rewriter, scanner, readers, logger }, input);\n dependencies.writeStdout(renderReport(migration));\n return migration.write.kind === \"failed\" ? EXIT_CODES.failure : EXIT_CODES.success;\n}\n\nasync function runMigration(\n request: MigrateRequest,\n dependencies: CliDependencies,\n): Promise<number> {\n const log = openLog(request, dependencies);\n if (log === undefined) {\n return EXIT_CODES.failure;\n }\n const { logger, path } = log;\n const root = dependencies.resolvePath(dependencies.cwd, request.root ?? \".\");\n try {\n return await migrateRoot(request, root, logger, dependencies);\n } catch (error) {\n const message = errorMessage(error);\n logger.warn(\"migration_failed\", { root, message });\n // The message of a failed read or parse quotes a file name or text of the project.\n dependencies.writeStderr(`${terminalSafeText(message)}\\n`);\n return EXIT_CODES.failure;\n } finally {\n dependencies.writeStdout(logNote(path));\n }\n}\n\n/** Run the command; resolves to the exit code. */\nexport async function runCli(\n argv: readonly string[],\n dependencies: CliDependencies,\n): Promise<number> {\n const request = parseRequest(argv, dependencies);\n if (request === undefined) {\n return EXIT_CODES.usage;\n }\n if (request.kind === \"help\") {\n dependencies.writeStdout(HELP_TEXT);\n return EXIT_CODES.success;\n }\n if (request.kind === \"version\") {\n dependencies.writeStdout(`${dependencies.version}\\n`);\n return EXIT_CODES.success;\n }\n return runMigration(request, dependencies);\n}\n","import { readFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { createGitFileList } from \"../adapters/git-file-list/git-file-list.js\";\nimport { createNodeGitFileSystem } from \"../adapters/git-file-list/git-locations.js\";\nimport {\n createJsonLinesLogger,\n createTemporaryLogPath,\n} from \"../adapters/json-lines-logger/json-lines-logger.js\";\nimport { createJsonTextReader } from \"../adapters/json-text/json-text.js\";\nimport {\n createNodeProjectFiles,\n inspectProjectRoot,\n} from \"../adapters/node-project-files/node-project-files.js\";\nimport { createPipeSafeWriter } from \"../adapters/pipe-safe-writer/pipe-safe-writer.js\";\nimport { createTypescriptCallbackRewriter } from \"../adapters/typescript-parser/rewriter.js\";\nimport { createTypescriptStringScanner } from \"../adapters/typescript-parser/source-strings.js\";\nimport { createYamlTextReader } from \"../adapters/yaml-text/yaml-text.js\";\nimport { type CliDependencies, runCli } from \"./run-cli.js\";\n\n/**\n * The composition root: the only module that touches the process. `bin/migrate.js` imports the\n * built copy of this module.\n */\n\n/** The same path from `src/cli/` and from the built `dist/cli/`. */\nconst PACKAGE_JSON = new URL(\"../../package.json\", import.meta.url);\n\nfunction readVersion(): string {\n const packageJson: { version: string } = JSON.parse(readFileSync(PACKAGE_JSON, \"utf8\"));\n return packageJson.version;\n}\n\nconst now = (): Date => new Date();\n\n/**\n * Without `--log`, a new file per run in a new private folder in the temporary directory, named\n * by its UTC start time. A `--log` file is the user's choice and gets the lines appended.\n */\nfunction createLogger(path: string | undefined): ReturnType<CliDependencies[\"createLogger\"]> {\n const isExclusive = path === undefined;\n const logPath = isExclusive ? createTemporaryLogPath(tmpdir(), now()) : resolve(path);\n return { logger: createJsonLinesLogger({ path: logPath, now, isExclusive }), path: logPath };\n}\n\n/** Git for the project at `root`: git is looked up on PATH outside that folder. */\nconst createGit = (root: string) =>\n createGitFileList({\n environment: process.env,\n platform: process.platform,\n fileSystem: createNodeGitFileSystem(),\n projectRoot: root,\n });\n\nconst dependencies: CliDependencies = {\n version: readVersion(),\n cwd: process.cwd(),\n writeStdout: createPipeSafeWriter(process.stdout),\n writeStderr: createPipeSafeWriter(process.stderr),\n inspectRoot: inspectProjectRoot,\n createFiles: (root, logger) => createNodeProjectFiles(root, { git: createGit(root), logger }),\n createLogger,\n rewriter: createTypescriptCallbackRewriter(),\n scanner: createTypescriptStringScanner(),\n readers: { json: createJsonTextReader(), yaml: createYamlTextReader() },\n resolvePath: resolve,\n};\n\nrunCli(process.argv.slice(2), dependencies).then((exitCode) => {\n process.exitCode = exitCode;\n});\n"],"names":["PARENT_FOLDER","listedPaths","spanOf","convert","read","baseName","files","DEFAULT_EXPORT","referencedName","renamed","importEdits","extensionOf","plain","singleQuoted","doubleQuoted","isScalar","isMap","PATH_SEPARATOR","BACKSLASH","ASSIGNMENT_RE","QUOTES","isOption","RECIPE_PREFIX_RE","LINE_BREAK","SHELLS","OPTION_PREFIX","programName","programDefinitions","found","NOT_LINE_BREAK_RE","ASSIGNMENT","SCOPE_PREFIX","IMPORTS_FIELD","FIELD_SEPARATOR","COMMENT_START","MASK","assignmentsOf","shellText","variableValues","migrateCatalogs","OLD_FILE_NOTE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.mjs","sources":["../../src/adapters/git-file-list/git-locations.ts","../../src/adapters/git-file-list/git-process.ts","../../src/adapters/git-file-list/git-file-list.ts","../../src/adapters/json-lines-logger/json-lines-logger.ts","../../src/adapters/json-text/json-text.ts","../../src/adapters/node-project-files/paths-in-root.ts","../../src/adapters/node-project-files/node-project-files.ts","../../src/adapters/pipe-safe-writer/pipe-safe-writer.ts","../../src/domain/migration-findings.ts","../../src/domain/migration-bug.ts","../../src/domain/text-edits.ts","../../src/adapters/typescript-parser/declared-types.ts","../../src/adapters/typescript-parser/file-bindings.ts","../../src/adapters/typescript-parser/generator-calls.ts","../../src/adapters/typescript-parser/option-properties.ts","../../src/adapters/typescript-parser/options-type.ts","../../src/adapters/typescript-parser/script-regions.ts","../../src/adapters/typescript-parser/spread-options.ts","../../src/adapters/typescript-parser/transform-callback.ts","../../src/adapters/typescript-parser/factory-type-text.ts","../../src/adapters/typescript-parser/transform-returns.ts","../../src/adapters/typescript-parser/unused-declarations.ts","../../src/adapters/typescript-parser/rewriter.ts","../../src/adapters/typescript-parser/source-strings.ts","../../src/adapters/yaml-text/yaml-text.ts","../../src/domain/package-names.ts","../../src/domain/config-documents.ts","../../src/domain/relative-references.ts","../../src/domain/api-descriptions.ts","../../src/domain/command-launchers.ts","../../src/domain/shell-word-parts.ts","../../src/domain/shell-assignments.ts","../../src/domain/command-roles.ts","../../src/domain/old-package-words.ts","../../src/domain/file-variables.ts","../../src/domain/inline-code.ts","../../src/domain/parameter-expansions.ts","../../src/domain/here-documents.ts","../../src/domain/workflow-expressions.ts","../../src/domain/shell-words.ts","../../src/domain/assert-never.ts","../../src/domain/variable-programs.ts","../../src/domain/shell-variables.ts","../../src/domain/command-migration.ts","../../src/domain/command-paths.ts","../../src/domain/command-strings.ts","../../src/domain/version-spec.ts","../../src/domain/declared-packages.ts","../../src/domain/dockerfile-migration.ts","../../src/domain/catalog-plan.ts","../../src/domain/npm-alias.ts","../../src/domain/url-credentials.ts","../../src/domain/dependency-map.ts","../../src/domain/tree-entries.ts","../../src/domain/import-map-migration.ts","../../src/domain/import-map-reference.ts","../../src/domain/source-migration.ts","../../src/domain/jest-config.ts","../../src/domain/json-command-migration.ts","../../src/domain/just-expressions.ts","../../src/domain/just-recipe-parameters.ts","../../src/domain/step-shells.ts","../../src/domain/just-shebang-recipes.ts","../../src/domain/justfile-migration.ts","../../src/domain/makefile-migration.ts","../../src/domain/override-targets.ts","../../src/domain/catalogs.ts","../../src/domain/successor-aliases.ts","../../src/domain/settings-sections.ts","../../src/domain/specifier-maps.ts","../../src/domain/manifest-migration.ts","../../src/domain/patch-files.ts","../../src/domain/yaml-command-keys.ts","../../src/domain/yaml-migration.ts","../../src/domain/pre-commit-migration.ts","../../src/domain/tsconfig-migration.ts","../../src/domain/workspace-catalog-migration.ts","../../src/application/config-steps.ts","../../src/application/project-file-names.ts","../../src/application/named-import-maps.ts","../../src/application/file-migrations.ts","../../src/application/api-description-parts.ts","../../src/application/plan-sources.ts","../../src/application/project-target.ts","../../src/application/migrate-project.ts","../../src/domain/terminal-text.ts","../../src/application/command-step-messages.ts","../../src/application/source-step-messages.ts","../../src/application/manual-step-messages.ts","../../src/application/messages.ts","../../src/application/report.ts","../../src/cli/cli-arguments.ts","../../src/cli/cli-text.ts","../../src/cli/run-cli.ts","../../src/cli/main.ts"],"sourcesContent":["import { constants } from \"node:fs\";\nimport { access, lstat, realpath, stat } from \"node:fs/promises\";\nimport { posix, win32 } from \"node:path\";\nimport type { GitEnvironment } from \"./git-process.js\";\n\n/** What the git adapter reads from the file system to find git and the repository of a folder. */\nexport interface GitFileSystem {\n /** Whether `path` is a file that this process may execute. */\n isExecutableFile(path: string): Promise<boolean>;\n /** Whether anything (a file, a folder, a link) is at `path`. */\n hasEntry(path: string): Promise<boolean>;\n /** The path with every link resolved, or undefined when nothing usable is at `path`. */\n realPath(path: string): Promise<string | undefined>;\n}\n\n/** Where git is looked for: the process environment, its platform and its file system. */\nexport interface GitHost {\n readonly environment: GitEnvironment;\n readonly platform: NodeJS.Platform;\n readonly fileSystem: GitFileSystem;\n /** The folder the tool migrates. It is not trusted, so no git in it or under it runs. */\n readonly projectRoot: string;\n}\n\nconst WINDOWS = \"win32\";\nconst PATH_VARIABLE = \"PATH\";\nconst GIT_NAME = \"git\";\n/**\n * Git for Windows puts `git.exe` on PATH. A `.cmd` or `.bat` file runs only through a shell, and\n * the tool never starts one, so executables are the only candidates.\n */\nconst WINDOWS_EXECUTABLE_EXTENSION = \".exe\";\nconst GIT_FOLDER = \".git\";\nconst PARENT_FOLDER = \"..\";\n/**\n * The folder where package managers install packages and link their bins. npx puts the\n * `node_modules/.bin` of the project and of every folder above it on PATH, so a workspace root\n * above the migrated package, or any package of it, could plant a `git` there.\n */\nconst PACKAGES_FOLDER = \"node_modules\";\n/**\n * Errors that mean \"nothing usable is there\": a missing path, a parent that is not a folder, or\n * no permission. Any other error is a fault of the file system and is passed on.\n */\nconst ABSENT_CODES: ReadonlySet<string> = new Set([\"ENOENT\", \"ENOTDIR\", \"EACCES\", \"EPERM\"]);\n\nfunction isAbsent(error: unknown): boolean {\n return ABSENT_CODES.has((error as NodeJS.ErrnoException | undefined)?.code ?? \"\");\n}\n\n/** What `check` gives, or `absent` when it fails because nothing usable is at the path. */\nasync function unlessAbsent<T>(check: () => Promise<T>, absent: T): Promise<T> {\n try {\n return await check();\n } catch (error) {\n if (isAbsent(error)) {\n return absent;\n }\n throw error;\n }\n}\n\nconst pathsOf = (platform: NodeJS.Platform) => (platform === WINDOWS ? win32 : posix);\n\n/** The PATH variable; Windows spells its name in any case (`Path`). */\nfunction pathVariable({ environment, platform }: GitHost): string {\n const name =\n platform === WINDOWS\n ? Object.keys(environment).find((key) => key.toUpperCase() === PATH_VARIABLE)\n : PATH_VARIABLE;\n return name === undefined ? \"\" : (environment[name] ?? \"\");\n}\n\n/** Whether the real path `target` is the real folder `folder` or lies under it. */\nfunction isAtOrUnder(paths: typeof posix, folder: string, target: string): boolean {\n const path = paths.relative(folder, target);\n return (\n !(path === PARENT_FOLDER || path.startsWith(`${PARENT_FOLDER}${paths.sep}`)) &&\n !paths.isAbsolute(path)\n );\n}\n\n/**\n * Whether `path` has a `node_modules` segment, in any case. The file systems of macOS and Windows\n * ignore case, so a `NODE_MODULES` folder is the `node_modules` that npx puts on PATH, and a real\n * path keeps the case the folder was created with. Where case matters, this passes over more.\n */\nfunction isInPackagesFolder(host: GitHost, path: string): boolean {\n const separator = host.platform === WINDOWS ? /[\\\\/]/ : posix.sep;\n return path.split(separator).some((segment) => segment.toLowerCase() === PACKAGES_FOLDER);\n}\n\n/**\n * Whether a PATH entry is a folder git may run from. An empty or relative entry names a folder\n * relative to the working directory, a folder in the project is the project's, and a folder in a\n * `node_modules` holds the bins of packages, which npx puts on PATH for the project and every\n * folder above it; each can hold a planted git, so each is passed over. The entry is checked as\n * written and as its real path: a `node_modules` can be a link to a folder with another name.\n */\nasync function isTrustedFolder(host: GitHost, project: string, folder: string): Promise<boolean> {\n const paths = pathsOf(host.platform);\n if (!paths.isAbsolute(folder) || isInPackagesFolder(host, folder)) {\n return false;\n }\n const real = await host.fileSystem.realPath(folder);\n return (\n real !== undefined && !isAtOrUnder(paths, project, real) && !isInPackagesFolder(host, real)\n );\n}\n\n/**\n * The absolute path of the first git on PATH outside the project and outside every `node_modules`,\n * or undefined when there is none. The absolute path also keeps Windows from looking in the\n * working directory first, as it does for a bare program name: a `git.exe` planted at the project\n * root never runs.\n */\nexport async function findGitExecutable(host: GitHost): Promise<string | undefined> {\n const paths = pathsOf(host.platform);\n const name = host.platform === WINDOWS ? `${GIT_NAME}${WINDOWS_EXECUTABLE_EXTENSION}` : GIT_NAME;\n const root = paths.resolve(host.projectRoot);\n const project = (await host.fileSystem.realPath(root)) ?? root;\n for (const folder of pathVariable(host).split(paths.delimiter)) {\n const candidate = paths.join(folder, name);\n const isTrusted = await isTrustedFolder(host, project, folder);\n if (isTrusted && (await host.fileSystem.isExecutableFile(candidate))) {\n return candidate;\n }\n }\n return undefined;\n}\n\n/**\n * Whether git takes `folder` as the root of a repository when it looks no higher than `ceiling`\n * (the parent of `folder`, or `folder` itself at the root of the file system).\n */\nexport type RepositoryCheck = (folder: string, ceiling: string) => Promise<boolean>;\n\n/**\n * The nearest folder at or above `directory` whose `.git` entry (a folder, or the file of a\n * submodule or a linked work tree) git takes as a repository, or undefined. Git takes that folder\n * as the work tree unless `core.worktree` names another one; a planted `core.worktree` made git\n * list another folder, and the project looked empty, so the tool gives git this folder as the\n * work tree. Git passes over a `.git` that is no repository (an empty folder) and finds the one\n * above it, so `isRepository` asks git about each folder that has a `.git` entry.\n */\nexport async function findWorkTree(\n directory: string,\n { platform, fileSystem }: GitHost,\n isRepository: RepositoryCheck,\n): Promise<string | undefined> {\n const paths = pathsOf(platform);\n let folder = paths.resolve(directory);\n for (;;) {\n const parent = paths.dirname(folder);\n const hasGit = await fileSystem.hasEntry(paths.join(folder, GIT_FOLDER));\n if (hasGit && (await isRepository(folder, parent))) {\n return folder;\n }\n if (parent === folder) {\n return undefined;\n }\n folder = parent;\n }\n}\n\n/** The git file system on `node:fs`. */\nexport function createNodeGitFileSystem(): GitFileSystem {\n return {\n isExecutableFile: (path) =>\n unlessAbsent(async () => {\n const isFile = (await stat(path)).isFile();\n await access(path, constants.X_OK);\n return isFile;\n }, false),\n hasEntry: (path) =>\n unlessAbsent(async () => {\n await lstat(path);\n return true;\n }, false),\n realPath: (path) => unlessAbsent<string | undefined>(() => realpath(path), undefined),\n };\n}\n","import { spawn } from \"node:child_process\";\n\n/** The environment variables git inherits, as `process.env` holds them. */\nexport type GitEnvironment = Readonly<Record<string, string | undefined>>;\n\n/** One git command: the git program by its absolute path, where it runs, and with what. */\nexport interface GitInvocation {\n readonly executable: string;\n readonly directory: string;\n readonly gitArguments: readonly string[];\n readonly environment: GitEnvironment;\n}\n\n/** How a git command ended: its exit code and output, or why it did not start. */\nexport type GitRun =\n | {\n readonly kind: \"exited\";\n readonly exitCode: number | null;\n readonly output: string;\n readonly errors: string;\n }\n | { readonly kind: \"failed\"; readonly reason: string };\n\n/** Runs one git command exactly as given; the hardening is part of the invocation. */\nexport type GitProcess = (invocation: GitInvocation) => Promise<GitRun>;\n\n/** A git process in a child process, with the invocation's environment and nothing else. */\nexport const spawnGitProcess: GitProcess = ({ executable, directory, gitArguments, environment }) =>\n new Promise((resolve) => {\n // spawn, not execFile: the output of a large repository has no buffer limit this way.\n const child = spawn(executable, [...gitArguments], { cwd: directory, env: environment });\n const output: Buffer[] = [];\n const errors: Buffer[] = [];\n child.stdout.on(\"data\", (chunk: Buffer) => output.push(chunk));\n child.stderr.on(\"data\", (chunk: Buffer) => errors.push(chunk));\n // Git is gone since it was found, or the directory does not exist.\n child.on(\"error\", (error) => resolve({ kind: \"failed\", reason: error.message }));\n child.on(\"close\", (exitCode) => {\n resolve({\n kind: \"exited\",\n exitCode,\n output: Buffer.concat(output).toString(\"utf8\"),\n errors: Buffer.concat(errors).toString(\"utf8\").trim(),\n });\n });\n });\n\n/**\n * Settings that win over every config file, because the tool runs git in folders it did not\n * create: a nested repository unpacked from an archive, or a bare repository committed inside a\n * cloned one. Their config is not trusted.\n *\n * - `core.fsmonitor=false`: the fsmonitor hook is a command from config that `ls-files` and\n * `check-ignore` run on every call.\n * - `protocol.allow=never`: refuses every transport that no `protocol.<name>.allow` key allows.\n * A repository's own config can still allow one by name, so the environment below refuses\n * them all for real.\n * - `safe.bareRepository=explicit`: a bare repository found by walking up from the folder is\n * refused, so its config is not read at all; the folder is then walked as a tree.\n *\n * These two commands write no index, so no hook runs, and they start no filter or pager.\n */\nconst HARDENED_CONFIG = [\n \"-c\",\n \"core.fsmonitor=false\",\n \"-c\",\n \"protocol.allow=never\",\n \"-c\",\n \"safe.bareRepository=explicit\",\n] as const;\n\n/**\n * A partial clone fetches a missing object from its promisor remote while it reads the index (a\n * sparse directory entry, for example), and a fetch runs commands from config (`core.sshCommand`,\n * `remote.<name>.uploadpack`, `ext::` URLs, credential helpers).\n *\n * - `GIT_ALLOW_PROTOCOL` set to an empty list: git then allows only the transports in the list,\n * whatever any `protocol.*` key says (git 2.12 and newer), so no fetch starts. It is the\n * guarantee on every git the tool supports; git reports the missing object on stderr and\n * lists the files it can read.\n * - `GIT_NO_LAZY_FETCH=1`: git 2.45 and newer do not even try a fetch. Older git ignores it.\n * - `GIT_TERMINAL_PROMPT=0`: git never waits on a password prompt.\n */\nconst HARDENED_ENVIRONMENT = {\n GIT_ALLOW_PROTOCOL: \"\",\n GIT_NO_LAZY_FETCH: \"1\",\n GIT_TERMINAL_PROMPT: \"0\",\n} as const;\n\n/**\n * Variables that name a repository or a part of it. A git hook sets `GIT_DIR` and\n * `GIT_INDEX_FILE` for the commands it runs, so a run from a hook would list that repository\n * for every folder. The tool lists each folder by the repository the folder is in.\n */\nconst REPOSITORY_VARIABLES: readonly string[] = [\n \"GIT_DIR\",\n \"GIT_WORK_TREE\",\n \"GIT_COMMON_DIR\",\n \"GIT_INDEX_FILE\",\n \"GIT_OBJECT_DIRECTORY\",\n \"GIT_ALTERNATE_OBJECT_DIRECTORIES\",\n];\n/** Makes git use this folder as the work tree, whatever `core.worktree` says. */\nconst WORK_TREE_VARIABLE = \"GIT_WORK_TREE\";\n/** Keeps git from looking for a repository above this folder. */\nconst CEILING_VARIABLE = \"GIT_CEILING_DIRECTORIES\";\n\n/** The environment of a hardened git command, from the environment the process has. */\nfunction hardenedEnvironment(command: HardenedGitCommand): GitEnvironment {\n const kept = Object.entries(command.environment).filter(\n ([name]) => !REPOSITORY_VARIABLES.includes(name.toUpperCase()),\n );\n const { workTree, ceiling } = command;\n const forced = {\n ...(workTree === undefined ? {} : { [WORK_TREE_VARIABLE]: workTree }),\n ...(ceiling === undefined ? {} : { [CEILING_VARIABLE]: ceiling }),\n };\n return { ...Object.fromEntries(kept), ...forced, ...HARDENED_ENVIRONMENT };\n}\n\n/** What a hardened git command needs besides its arguments. */\nexport interface HardenedGitCommand {\n readonly executable: string;\n readonly directory: string;\n readonly environment: GitEnvironment;\n /** The folder that holds the `.git` of the repository, or undefined when there is none. */\n readonly workTree: string | undefined;\n /** The folder above which git looks for no repository; git's own rule when undefined. */\n readonly ceiling?: string;\n}\n\n/** The invocation of `gitArguments` with the hardening above. */\nexport function hardenedInvocation(\n command: HardenedGitCommand,\n gitArguments: readonly string[],\n): GitInvocation {\n return {\n executable: command.executable,\n directory: command.directory,\n gitArguments: [...HARDENED_CONFIG, ...gitArguments],\n environment: hardenedEnvironment(command),\n };\n}\n","import {\n findGitExecutable,\n findWorkTree,\n type GitFileSystem,\n type GitHost,\n type RepositoryCheck,\n} from \"./git-locations.js\";\nimport {\n type GitEnvironment,\n type GitProcess,\n type GitRun,\n type HardenedGitCommand,\n hardenedInvocation,\n spawnGitProcess,\n} from \"./git-process.js\";\n\nexport type { GitEnvironment } from \"./git-process.js\";\n\n/** The paths git lists for a directory, or why it could not list them. */\nexport type GitListing =\n | { readonly kind: \"listed\"; readonly paths: readonly string[] }\n | { readonly kind: \"unavailable\"; readonly reason: string };\n\n/**\n * Lists a directory the way git sees it: tracked files, and untracked files that are not ignored.\n * A submodule or a nested repository is one path: the directory, without a trailing slash.\n */\nexport interface GitFileList {\n list(directory: string): Promise<GitListing>;\n}\n\n/**\n * Tracked files, and untracked files that `.gitignore`, `.git/info/exclude` and the global\n * excludes file do not ignore, under the working directory, relative to it, NUL-separated. A file\n * in a merge conflict is in the index once per side; `--deduplicate` (git 2.31) lists it once.\n */\nconst LS_FILES_ARGUMENTS = [\n \"ls-files\",\n \"--cached\",\n \"--others\",\n \"--exclude-standard\",\n \"--deduplicate\",\n \"-z\",\n] as const;\n/**\n * Exit code 0 when the working directory is ignored by the repository it is in, 1 when not. Git\n * lists nothing in an ignored directory, so its listing would look like an empty project.\n */\nconst CHECK_IGNORE_ARGUMENTS = [\"check-ignore\", \"--quiet\", \".\"] as const;\n/** Exit code 0 when git finds a repository in the working directory. */\nconst REPOSITORY_CHECK_ARGUMENTS = [\"rev-parse\", \"--git-dir\"] as const;\nconst IGNORED_EXIT_CODE = 0;\nconst NOT_IGNORED_EXIT_CODE = 1;\nconst IGNORED_REASON = \"the git repository around the folder ignores it\";\nconst NO_GIT_REASON = \"no git executable in an absolute folder of PATH\";\n/** An untracked nested repository is listed with a slash, and the directory itself as `./`. */\nconst TRAILING_SLASH_RE = /\\/$/;\nconst SELF_PATHS: ReadonlySet<string> = new Set([\"\", \".\"]);\n\nfunction failureReason(run: GitRun): string {\n if (run.kind === \"failed\") {\n return run.reason;\n }\n return run.errors || `exit code ${run.exitCode}`;\n}\n\nfunction listedPaths(output: string): string[] {\n return output\n .split(\"\\0\")\n .map((path) => path.replace(TRAILING_SLASH_RE, \"\"))\n .filter((path) => !SELF_PATHS.has(path));\n}\n\nasync function listWith(command: HardenedGitCommand, run: GitProcess): Promise<GitListing> {\n const ignored = await run(hardenedInvocation(command, CHECK_IGNORE_ARGUMENTS));\n if (ignored.kind === \"exited\" && ignored.exitCode === IGNORED_EXIT_CODE) {\n return { kind: \"unavailable\", reason: IGNORED_REASON };\n }\n if (ignored.kind === \"failed\" || ignored.exitCode !== NOT_IGNORED_EXIT_CODE) {\n return { kind: \"unavailable\", reason: failureReason(ignored) };\n }\n const listed = await run(hardenedInvocation(command, LS_FILES_ARGUMENTS));\n if (listed.kind === \"failed\" || listed.exitCode !== 0) {\n return { kind: \"unavailable\", reason: failureReason(listed) };\n }\n return { kind: \"listed\", paths: listedPaths(listed.output) };\n}\n\n/** What the git file list runs git with. */\nexport interface GitFileListOptions {\n /** The process environment: `PATH`, `HOME` and git's own variables. */\n readonly environment: GitEnvironment;\n readonly platform: NodeJS.Platform;\n readonly fileSystem: GitFileSystem;\n /** The folder the tool migrates; no git in it or under it runs. */\n readonly projectRoot: string;\n /** Runs one git command; a child process unless a test wraps it. */\n readonly process?: GitProcess;\n}\n\nclass HardenedGitFileList implements GitFileList {\n readonly #host: GitHost;\n readonly #process: GitProcess;\n /** PATH is searched once, on the first listing. */\n #executable: Promise<string | undefined> | undefined;\n\n constructor(options: GitFileListOptions) {\n this.#host = options;\n this.#process = options.process ?? spawnGitProcess;\n }\n\n async list(directory: string): Promise<GitListing> {\n this.#executable ??= findGitExecutable(this.#host);\n const executable = await this.#executable;\n if (executable === undefined) {\n return { kind: \"unavailable\", reason: NO_GIT_REASON };\n }\n const { environment } = this.#host;\n const isRepository: RepositoryCheck = async (folder, ceiling) => {\n const command = { executable, directory: folder, environment, workTree: undefined, ceiling };\n const run = await this.#process(hardenedInvocation(command, REPOSITORY_CHECK_ARGUMENTS));\n return run.kind === \"exited\" && run.exitCode === 0;\n };\n const workTree = await findWorkTree(directory, this.#host, isRepository);\n return listWith({ executable, directory, environment, workTree }, this.#process);\n }\n}\n\n/**\n * A git file list that runs `git check-ignore` and `git ls-files` (git-process.ts has the\n * hardening): git by its absolute path from a PATH folder outside the project, with the folder\n * whose `.git` git takes as the repository of the listed directory as the work tree.\n */\nexport function createGitFileList(options: GitFileListOptions): GitFileList {\n return new HardenedGitFileList(options);\n}\n","import { appendFileSync, closeSync, fstatSync, mkdirSync, mkdtempSync, openSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type { Logger } from \"../../application/ports.js\";\n\n/** The log file, the clock of the timestamps, and whether the file must be new. */\nexport interface JsonLinesLoggerOptions {\n readonly path: string;\n readonly now: () => Date;\n /**\n * The file must not exist yet: it is created with `O_CREAT | O_EXCL`, which also refuses a\n * link at the path instead of following it. Used for the default log in the temporary folder.\n * Without it, an existing file (the user's `--log`) gets the new lines appended.\n * Either way the file is opened when the logger is created, so a path that cannot be a log\n * file (a folder, a read-only place) fails before the migration starts.\n */\n readonly isExclusive: boolean;\n}\n\ntype Level = \"info\" | \"warn\";\n\n/** The log can name files and changes of a private project, so only its owner can read it. */\nconst LOG_FILE_MODE = 0o600;\nconst TEMPORARY_FOLDER_PREFIX = \"openapi-typesafe-migrate-\";\nconst LOG_EXTENSION = \".jsonl\";\nconst TIME_SEPARATOR = \":\";\n/** `:` is not allowed in Windows file names. */\nconst FILE_NAME_TIME_SEPARATOR = \"-\";\n\n/** The path names a folder, so lines cannot be appended to it. */\nexport class LogPathIsFolderError extends Error {\n override readonly name = \"LogPathIsFolderError\";\n\n constructor(path: string) {\n super(`${path} is a folder; --log takes a file path`);\n }\n}\n\nconst EXCLUSIVE_CREATE_FLAG = \"wx\";\nconst APPEND_FLAG = \"a\";\nconst IS_A_DIRECTORY_CODE = \"EISDIR\";\n\n/**\n * Create or open the log file once, to fail early. POSIX refuses to open a folder for writing\n * (EISDIR), but Windows opens it and accepts empty writes, so the opened file is also checked.\n */\nfunction openLogFile(path: string, isExclusive: boolean): void {\n let descriptor: number;\n try {\n descriptor = openSync(path, isExclusive ? EXCLUSIVE_CREATE_FLAG : APPEND_FLAG, LOG_FILE_MODE);\n } catch (error) {\n throw isDirectoryError(error) ? new LogPathIsFolderError(path) : error;\n }\n try {\n if (fstatSync(descriptor).isDirectory()) {\n throw new LogPathIsFolderError(path);\n }\n } finally {\n closeSync(descriptor);\n }\n}\n\nconst isDirectoryError = (error: unknown): boolean =>\n error instanceof Error && \"code\" in error && error.code === IS_A_DIRECTORY_CODE;\n\n/**\n * The Logger port as a JSON Lines file: one object per event with a UTC timestamp, the level and\n * the event's fields. Lines are appended synchronously, so the log is complete when the command\n * fails half way.\n */\nclass JsonLinesLogger implements Logger {\n readonly #options: JsonLinesLoggerOptions;\n\n constructor(options: JsonLinesLoggerOptions) {\n this.#options = options;\n if (!options.isExclusive) {\n mkdirSync(dirname(options.path), { recursive: true });\n }\n openLogFile(options.path, options.isExclusive);\n }\n\n info(event: string, fields: Readonly<Record<string, unknown>> = {}): void {\n this.#append(\"info\", event, fields);\n }\n\n warn(event: string, fields: Readonly<Record<string, unknown>> = {}): void {\n this.#append(\"warn\", event, fields);\n }\n\n #append(level: Level, event: string, fields: Readonly<Record<string, unknown>>): void {\n const time = this.#options.now().toISOString();\n const line = `${JSON.stringify({ time, level, event, ...fields })}\\n`;\n appendFileSync(this.#options.path, line, { mode: LOG_FILE_MODE });\n }\n}\n\n/** A logger that appends to the JSON Lines file at `options.path`, creating its directory. */\nexport function createJsonLinesLogger(options: JsonLinesLoggerOptions): Logger {\n return new JsonLinesLogger(options);\n}\n\n/**\n * The path of a run's log in a new folder under `parent` (the system temporary folder), named by\n * the run's UTC start time. `mkdtemp` gives the folder a name no other user can guess and mode\n * 0700, so on a shared host nobody else can plant a file or a link in it.\n */\nexport function createTemporaryLogPath(parent: string, startTime: Date): string {\n const folder = mkdtempSync(join(parent, TEMPORARY_FOLDER_PREFIX));\n const name = startTime.toISOString().replaceAll(TIME_SEPARATOR, FILE_NAME_TIME_SEPARATOR);\n return join(folder, `${name}${LOG_EXTENSION}`);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { JsonDocumentReader } from \"../../application/ports.js\";\nimport type { DocumentRead, TreeEntry, TreeNode } from \"../../domain/config-documents.js\";\n\n/**\n * The JsonDocumentReader port on the TypeScript 6 JSON parser (ADR-015), the one tsc reads\n * `tsconfig.json` with: it accepts comments and trailing commas, as `deno.jsonc` and Nx\n * `project.json` do, and gives every node its offsets in the text. A byte order mark is allowed\n * before the value.\n */\n\n/** The parser names the file in its diagnostics only. */\nconst FILE_NAME = \"document.json\";\n/** The length of the quote on each side of a JSON string. */\nconst QUOTE_LENGTH = 1;\nconst JSON_ESCAPE = \"\\\\\";\n\nconst encode = (value: string): string => JSON.stringify(value);\n\nfunction spanOf(node: ts.Node, file: ts.SourceFile): { start: number; end: number } {\n return { start: node.getStart(file), end: node.end };\n}\n\nfunction convertString(node: ts.StringLiteral, file: ts.SourceFile): TreeNode {\n const span = spanOf(node, file);\n const content = { start: span.start + QUOTE_LENGTH, end: span.end - QUOTE_LENGTH };\n const isEscaped = file.text.slice(content.start, content.end).includes(JSON_ESCAPE);\n return { kind: \"scalar\", value: node.text, content, isFolded: false, isEscaped, encode, ...span };\n}\n\nfunction convertObject(node: ts.ObjectLiteralExpression, file: ts.SourceFile): TreeNode {\n // A valid document has only quoted keys (see firstError); the check narrows the node type.\n const entries = node.properties.filter(ts.isPropertyAssignment).map(\n (property): TreeEntry => ({\n key: ts.isStringLiteral(property.name)\n ? convertString(property.name, file)\n : { kind: \"other\", ...spanOf(property.name, file) },\n value: convert(property.initializer, file),\n }),\n );\n return { kind: \"map\", entries, ...spanOf(node, file) };\n}\n\nfunction convert(node: ts.Expression, file: ts.SourceFile): TreeNode {\n if (ts.isObjectLiteralExpression(node)) {\n return convertObject(node, file);\n }\n if (ts.isArrayLiteralExpression(node)) {\n const items = node.elements.map((item) => convert(item, file));\n return { kind: \"list\", items, ...spanOf(node, file) };\n }\n if (ts.isStringLiteral(node)) {\n return convertString(node, file);\n }\n return { kind: \"other\", ...spanOf(node, file) };\n}\n\n/**\n * `parseJsonText` keeps its syntax errors internal. This public reader of the same grammar\n * reports the first of them, and rejects what JSON forbids and the parser allows: unquoted or\n * single-quoted keys, and a root value that is not an object.\n */\nfunction firstError(text: string): number | undefined {\n const { error } = ts.parseConfigFileTextToJson(FILE_NAME, text);\n return error === undefined ? undefined : (error.start ?? 0);\n}\n\nfunction readTree(text: string): DocumentRead {\n const errorAt = firstError(text);\n if (errorAt !== undefined) {\n return { kind: \"unreadable\", offset: errorAt };\n }\n const file = ts.parseJsonText(FILE_NAME, text);\n const documents = file.statements.map((statement) => convert(statement.expression, file));\n return { kind: \"read\", documents };\n}\n\nfunction read(text: string): DocumentRead {\n try {\n return readTree(text);\n } catch (error) {\n // The parser and the conversion recurse per level of nesting: a crafted file (about a\n // thousand levels) exhausts the stack, and the error gives no place.\n if (error instanceof RangeError) {\n return { kind: \"unreadable\", offset: undefined };\n }\n throw error;\n }\n}\n\nexport function createJsonTextReader(): JsonDocumentReader {\n return { read };\n}\n","import { lstat, realpath } from \"node:fs/promises\";\nimport { isAbsolute, join, relative, sep } from \"node:path\";\n\nconst PARENT_DIRECTORY = \"..\";\n/**\n * Errors of a listed path that leads to no file: a tracked file deleted from the working tree\n * (ENOENT), a path through a file (ENOTDIR), and a link that is dangling or loops (ELOOP).\n */\nconst UNRESOLVED_PATH_CODES: ReadonlySet<string> = new Set([\"ENOENT\", \"ENOTDIR\", \"ELOOP\"]);\n\n/** What a path that git lists is on disk. */\nexport type ListedEntry = \"file\" | \"directory\" | \"other\" | \"outside\";\n\n/**\n * Whether `path` stays under the folder it is relative to, by its text. Git checks a path when it\n * adds it to the index, but it prints an index that it did not write (one in a planted `.git`) as\n * it is, with `../` or a leading `/`. Links are checked by the real path.\n */\nexport function isRelativeDownward(path: string): boolean {\n return !isAbsolute(path) && !path.split(\"/\").includes(PARENT_DIRECTORY);\n}\n\n/** Whether the real path `target` is in the real folder `folder`, not the folder itself. */\nexport function isInFolder(folder: string, target: string): boolean {\n const path = relative(folder, target);\n return (\n path !== \"\" &&\n path !== PARENT_DIRECTORY &&\n !path.startsWith(`${PARENT_DIRECTORY}${sep}`) &&\n !isAbsolute(path)\n );\n}\n\n/**\n * Git also lists links and tracked files deleted from the working tree; only regular files that\n * exist are the project's files. A directory is a submodule or a nested repository. A path whose\n * real path is outside the root (by `..`, a linked parent folder, or a link itself) is \"outside\",\n * so the report names it. A link inside the root is \"other\": links are not followed, and what it\n * points at is listed on its own. A path that leads to no file, a broken link included, is \"other\".\n */\nexport async function entryAt(root: string, realRoot: string, path: string): Promise<ListedEntry> {\n if (!isRelativeDownward(path)) {\n return \"outside\";\n }\n try {\n const stats = await lstat(join(root, path));\n const isListable = stats.isFile() || stats.isDirectory();\n if (!isListable && !stats.isSymbolicLink()) {\n return \"other\";\n }\n // A link to the root itself (`self -> .`) is in the project, like a link to a folder in it.\n const realPath = await realpath(join(root, path));\n if (realPath !== realRoot && !isInFolder(realRoot, realPath)) {\n return \"outside\";\n }\n if (!isListable) {\n return \"other\";\n }\n return stats.isFile() ? \"file\" : \"directory\";\n } catch (error) {\n if (UNRESOLVED_PATH_CODES.has((error as NodeJS.ErrnoException).code ?? \"\")) {\n return \"other\";\n }\n throw error;\n }\n}\n","import type { Dirent } from \"node:fs\";\nimport {\n chmod,\n lstat,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport type {\n FileProblem,\n FileRead,\n FileWrite,\n Logger,\n ProjectFileList,\n ProjectFiles,\n ProjectRootState,\n SkippedFile,\n} from \"../../application/ports.js\";\nimport type { GitFileList } from \"../git-file-list/git-file-list.js\";\nimport { entryAt, isInFolder, isRelativeDownward, type ListedEntry } from \"./paths-in-root.js\";\n\n/**\n * Installed packages, git metadata, build output and the output folders of frameworks and test\n * tools are not the project's own files: rewriting them only adds noise to the dry run and the\n * diff. They are skipped even when git tracks them.\n * `build` and `out` stay in, because some projects keep sources there. Links are not followed, so a\n * linked workspace package is migrated in its own project, not twice.\n */\nconst SKIPPED_DIRECTORIES: ReadonlySet<string> = new Set([\n \"node_modules\",\n \".git\",\n \"dist\",\n \".next\",\n \".nuxt\",\n \".output\",\n \".svelte-kit\",\n \".turbo\",\n \"coverage\",\n]);\n\nconst CURRENT_DIRECTORY = \".\";\n/** The new text is written next to the file under this suffix, then renamed over it. */\nconst TEMPORARY_SUFFIX = \".openapi-typesafe-migrate.tmp\";\nconst PERMISSION_BITS = 0o7777;\n/** Only the owner can read the new text until it has the mode of the file it replaces. */\nconst TEMPORARY_MODE = 0o600;\nconst OUTSIDE_ROOT: FileProblem = { kind: \"outside-root\" };\nconst NOT_UTF_8: FileProblem = { kind: \"not-utf-8\" };\nconst UTF_8 = \"utf-8\";\n\n/**\n * The text of a file's bytes, or \"not-utf-8\". Decoding replaces invalid bytes with U+FFFD by\n * default, and writing that text back would destroy them (a Latin-1 `é` became `�`). A fatal\n * decoder refuses them instead. The byte order mark stays in the text, so it is written back.\n */\nfunction decodeUtf8(bytes: Uint8Array): FileRead {\n try {\n const text = new TextDecoder(UTF_8, { fatal: true, ignoreBOM: true }).decode(bytes);\n return { kind: \"read\", text };\n } catch (error) {\n // The fatal decoder reports invalid bytes as a TypeError; anything else is a bug.\n if (error instanceof TypeError) {\n return { kind: \"skipped\", reason: NOT_UTF_8 };\n }\n throw error;\n }\n}\n\n/** The problem of a failed file system call; an error without an error code is passed on. */\nfunction ioProblem(error: unknown): FileProblem {\n const code = (error as NodeJS.ErrnoException | undefined)?.code;\n if (typeof code !== \"string\") {\n throw error;\n }\n return { kind: \"io-error\", code };\n}\n\n/** What the project files read besides the file system. */\nexport interface NodeProjectFilesOptions {\n readonly git: GitFileList;\n readonly logger: Logger;\n}\n\nfunction isInSkippedDirectory(path: string): boolean {\n return path\n .split(\"/\")\n .slice(0, -1)\n .some((directory) => SKIPPED_DIRECTORIES.has(directory));\n}\n\nasync function listTree(root: string, relative: string): Promise<string[]> {\n const entries: Dirent[] = await readdir(join(root, relative), { withFileTypes: true });\n const nested = await Promise.all(\n entries.map((entry) => {\n const path = relative === \"\" ? entry.name : `${relative}/${entry.name}`;\n if (entry.isDirectory()) {\n return SKIPPED_DIRECTORIES.has(entry.name) ? [] : listTree(root, path);\n }\n return entry.isFile() ? [path] : [];\n }),\n );\n return nested.flat();\n}\n\ninterface ListedPaths {\n readonly files: readonly string[];\n readonly directories: readonly string[];\n readonly skipped: readonly SkippedFile[];\n}\n\n/** The files, the nested repositories and the paths outside the root of a git listing. */\nasync function listedPaths(\n root: string,\n realRoot: string,\n paths: readonly string[],\n): Promise<ListedPaths> {\n const candidates = paths.filter((path) => !isInSkippedDirectory(path));\n const entries = await Promise.all(candidates.map((path) => entryAt(root, realRoot, path)));\n const withEntry = (entry: ListedEntry) =>\n candidates.filter((_path, index) => entries[index] === entry);\n return {\n files: withEntry(\"file\"),\n directories: withEntry(\"directory\").filter((path) => !SKIPPED_DIRECTORIES.has(baseName(path))),\n skipped: withEntry(\"outside\").map((path): SkippedFile => ({ path, reason: OUTSIDE_ROOT })),\n };\n}\n\nfunction baseName(path: string): string {\n return path.slice(path.lastIndexOf(\"/\") + 1);\n}\n\nfunction joinRelative(directory: string, path: string): string {\n return directory === \"\" ? path : `${directory}/${path}`;\n}\n\nconst NO_FILES: ProjectFileList = { files: [], skipped: [] };\n\nfunction joinLists(lists: readonly ProjectFileList[]): ProjectFileList {\n return lists.reduce(\n (joined, list) => ({\n files: [...joined.files, ...list.files],\n skipped: [...joined.skipped, ...list.skipped],\n }),\n NO_FILES,\n );\n}\n\nclass NodeProjectFiles implements ProjectFiles {\n readonly #root: string;\n readonly #options: NodeProjectFilesOptions;\n\n constructor(root: string, options: NodeProjectFilesOptions) {\n this.#root = root;\n this.#options = options;\n }\n\n /** Git's view of the project when it is in a git repository, so ignored files stay out. */\n async listFiles(): Promise<ProjectFileList> {\n return this.#listDirectory(await realpath(this.#root), \"\");\n }\n\n /**\n * One directory, by the git repository it is in. Git lists a submodule or a nested repository\n * as one entry, so each of those is listed the same way, by its own repository and ignore rules.\n */\n async #listDirectory(realRoot: string, directory: string): Promise<ProjectFileList> {\n const { git, logger } = this.#options;\n const listing = await git.list(join(this.#root, directory));\n const logged = { directory: directory === \"\" ? CURRENT_DIRECTORY : directory };\n if (listing.kind === \"unavailable\") {\n // Not a git repository, no git, or ignored by the repository around it: walk the tree; only\n // the skipped folders stay out.\n const files = await listTree(this.#root, directory);\n logger.info(\"files_listed\", {\n ...logged,\n source: \"tree\",\n fileCount: files.length,\n reason: listing.reason,\n });\n return { files, skipped: [] };\n }\n const paths = listing.paths.map((path) => joinRelative(directory, path));\n const { files, directories, skipped } = await listedPaths(this.#root, realRoot, paths);\n logger.info(\"files_listed\", { ...logged, source: \"git\", fileCount: files.length });\n for (const file of skipped) {\n logger.warn(\"file_skipped\", { ...file });\n }\n const nested = await Promise.all(\n directories.map((path) => this.#listDirectory(realRoot, path)),\n );\n return joinLists([{ files, skipped }, ...nested]);\n }\n\n async read(path: string): Promise<FileRead> {\n try {\n const target = await this.#pathInRoot(path);\n return target === undefined\n ? { kind: \"skipped\", reason: OUTSIDE_ROOT }\n : decodeUtf8(await readFile(target));\n } catch (error) {\n return { kind: \"skipped\", reason: ioProblem(error) };\n }\n }\n\n async write(path: string, text: string): Promise<FileWrite> {\n try {\n const target = await this.#pathInRoot(path);\n if (target === undefined) {\n return { kind: \"failed\", reason: OUTSIDE_ROOT };\n }\n await this.#replace(target, text, path);\n return { kind: \"written\" };\n } catch (error) {\n return { kind: \"failed\", reason: ioProblem(error) };\n }\n }\n\n /**\n * Writes a new file and renames it over the old one, so the write never goes through a link: a\n * hard link to a file outside the root keeps its old text, and is reported in the log. The new\n * file keeps the mode of the old one.\n */\n async #replace(target: string, text: string, path: string): Promise<void> {\n const { mode, nlink } = await lstat(target);\n // `wx`: a leftover of a failed run is not overwritten; the error names it.\n const temporary = join(dirname(target), `.${basename(target)}${TEMPORARY_SUFFIX}`);\n await writeFile(temporary, text, { encoding: \"utf8\", flag: \"wx\", mode: TEMPORARY_MODE });\n try {\n // The mode is set after the write, because `writeFile`'s mode is reduced by the umask.\n await chmod(temporary, mode & PERMISSION_BITS);\n await rename(temporary, target);\n } catch (error) {\n await rm(temporary, { force: true });\n throw error;\n }\n if (nlink > 1) {\n this.#options.logger.warn(\"hard_link_separated\", { path, linkCount: nlink });\n }\n }\n\n /** The real path of a project file, or undefined for one that resolves outside the root. */\n async #pathInRoot(path: string): Promise<string | undefined> {\n const realPath = isRelativeDownward(path) ? await realpath(join(this.#root, path)) : undefined;\n if (realPath === undefined || !isInFolder(await realpath(this.#root), realPath)) {\n return undefined;\n }\n return realPath;\n }\n}\n\n/** The files of the project in the directory `root`, by `/`-separated relative paths. */\nexport function createNodeProjectFiles(\n root: string,\n options: NodeProjectFilesOptions,\n): ProjectFiles {\n return new NodeProjectFiles(root, options);\n}\n\nconst MISSING_PATH_CODES: ReadonlySet<string> = new Set([\"ENOENT\", \"ENOTDIR\"]);\n\n/**\n * Whether `root` is a folder the migration can list, by its real path (a link to a folder is\n * one). Asked before anything is listed, so `--root` naming a file or nothing fails with a clear\n * message instead of git's or the file system's.\n */\nexport async function inspectProjectRoot(root: string): Promise<ProjectRootState> {\n try {\n return (await stat(root)).isDirectory() ? \"directory\" : \"not-a-directory\";\n } catch (error) {\n if (MISSING_PATH_CODES.has((error as NodeJS.ErrnoException).code ?? \"\")) {\n return \"missing\";\n }\n throw error;\n }\n}\n","import type { Writable } from \"node:stream\";\n\n/**\n * A writer for the CLI's stdout and stderr that stops when the reader closes the pipe (`| head`):\n * the write fails with `EPIPE`, which Node raises as an unhandled `error` event and a crash with\n * exit code 1. The reader has all it wanted, so the rest is dropped and the run ends as it would\n * have: the files are written before the report. Every other write error is thrown again. The\n * generator CLI has the same writer; the tool does not depend on the generator package.\n */\n\nconst BROKEN_PIPE = \"EPIPE\";\n\nfunction isBrokenPipe(error: Error): boolean {\n return (error as NodeJS.ErrnoException).code === BROKEN_PIPE;\n}\n\n/**\n * The text writer of the stream. After `EPIPE` the stream is destroyed, so later writes are\n * dropped by the stream itself and raise no second error.\n */\nexport function createPipeSafeWriter(stream: Writable): (text: string) => void {\n stream.on(\"error\", (error: Error) => {\n if (!isBrokenPipe(error)) {\n throw error;\n }\n });\n return (text) => {\n stream.write(text);\n };\n}\n","/**\n * What a migration found in one file: changes it made, and steps it leaves to the user. Both are\n * closed sets of facts, not text; the report turns them into messages (application/report.ts).\n * They go to the report and the log, so a version spec in them has its URL credentials hidden\n * (domain/url-credentials.ts).\n */\n\n/** A place in a text, 1-based. */\nexport interface TextPosition {\n readonly line: number;\n readonly column: number;\n}\n\nexport type Change =\n | {\n readonly kind: \"dependency-renamed\";\n readonly field: string;\n readonly from: string;\n readonly to: string;\n readonly spec: string;\n }\n | {\n readonly kind: \"catalog-entry-renamed\";\n readonly catalog: string;\n readonly from: string;\n readonly to: string;\n readonly spec: string;\n }\n | {\n readonly kind: \"import-renamed\";\n readonly field: string;\n readonly from: string;\n readonly to: string;\n readonly target: string;\n }\n | {\n readonly kind: \"alias-renamed\";\n readonly field: string;\n readonly name: string;\n readonly spec: string;\n }\n | { readonly kind: \"command-renamed\"; readonly location: string }\n | {\n readonly kind: \"package-name-renamed\";\n readonly location: string;\n readonly from: string;\n readonly to: string;\n }\n | {\n readonly kind: \"flag-renamed\";\n readonly location: string;\n readonly from: string;\n readonly to: string;\n }\n | {\n readonly kind: \"specifier-renamed\";\n readonly line: number;\n readonly from: string;\n readonly to: string;\n }\n | { readonly kind: \"transform-rewritten\"; readonly line: number }\n | { readonly kind: \"declaration-removed\"; readonly line: number; readonly name: string };\n\nexport type ManualStep =\n | { readonly kind: \"entry-not-edited\"; readonly field: string; readonly name: string }\n | {\n readonly kind: \"name-collision\";\n readonly field: string;\n readonly from: string;\n readonly to: string;\n }\n | {\n readonly kind: \"catalog-reference-kept\";\n readonly field: string;\n readonly name: string;\n readonly catalog: string;\n }\n | {\n readonly kind: \"catalog-entry-outside\";\n readonly field: string;\n readonly name: string;\n readonly catalog: string;\n }\n /** A dependency on a catalog entry that no catalog of the workspace has. */\n | {\n readonly kind: \"catalog-entry-missing\";\n readonly field: string;\n readonly name: string;\n readonly catalog: string;\n }\n | { readonly kind: \"catalog-entry-in-use\"; readonly catalog: string; readonly name: string }\n | { readonly kind: \"peer-dependency-renamed\"; readonly name: string }\n | { readonly kind: \"spec-kept\"; readonly name: string; readonly spec: string }\n /** A dependency under an original name whose spec points at a local package. */\n | {\n readonly kind: \"local-package\";\n readonly field: string;\n readonly name: string;\n readonly spec: string;\n }\n | { readonly kind: \"override-names-package\"; readonly field: string; readonly name: string }\n /** A pattern of a config (Jest's `moduleNameMapper`) that names an old package. */\n | {\n readonly kind: \"pattern-names-package\";\n readonly location: string;\n readonly value: string;\n readonly name: string;\n readonly to: string;\n }\n /** A package manager setting (not an override) that names an old package. */\n | { readonly kind: \"setting-names-package\"; readonly field: string; readonly name: string }\n | { readonly kind: \"versioned-command\"; readonly location: string }\n | {\n readonly kind: \"flags-in-variable\";\n readonly location: string;\n readonly variable: string;\n /** The old flags in the variable's value. */\n readonly flags: readonly string[];\n }\n | {\n readonly kind: \"variable-not-only-generator\";\n readonly location: string;\n readonly variable: string;\n /** The old flags of the generator after the variable, or in a variable's value there. */\n readonly flags: readonly string[];\n }\n | { readonly kind: \"pinned-package\"; readonly location: string; readonly name: string }\n | { readonly kind: \"old-package-file\"; readonly location: string; readonly path: string }\n | { readonly kind: \"old-name-in-command\"; readonly location: string; readonly word: string }\n /** A CI step whose `shell` is a program the tool does not read (`shell: python`). */\n | { readonly kind: \"script-not-shell\"; readonly location: string; readonly shell: string }\n | { readonly kind: \"command-string\"; readonly line: number; readonly to: string }\n | { readonly kind: \"config-unreadable\"; readonly position: TextPosition | undefined }\n | { readonly kind: \"manifest-not-read\" }\n /** A patch file (patch-package, pnpm, Yarn) of an old package's code. */\n | { readonly kind: \"old-package-patch\"; readonly name: string; readonly to: string }\n /** A Deno config names an import map by a URL or a path outside the project. */\n | { readonly kind: \"import-map-not-editable\"; readonly reference: string }\n | { readonly kind: \"options-not-inspected\"; readonly line: number }\n /** A spread in the options (`...base`) of an object the tool cannot read. */\n | { readonly kind: \"options-spread-not-inspected\"; readonly line: number }\n | { readonly kind: \"deep-import\"; readonly line: number; readonly specifier: string }\n /** A module specifier that is a path into the installed files of an old package. */\n | {\n readonly kind: \"old-package-import\";\n readonly line: number;\n readonly specifier: string;\n readonly name: string;\n readonly to: string;\n }\n /** A specifier of a config (`imports`, `browser`) that reaches into a renamed package. */\n | { readonly kind: \"deep-target\"; readonly location: string; readonly specifier: string }\n /** A config path into the installed files of an old package, which the new one does not have. */\n | {\n readonly kind: \"old-package-path\";\n readonly location: string;\n readonly path: string;\n readonly to: string;\n }\n | {\n readonly kind: \"dynamic-specifier\";\n readonly line: number;\n readonly value: string;\n /** The new name of the package the specifier starts with. */\n readonly to: string;\n }\n | {\n readonly kind: \"string-names-package\";\n readonly line: number;\n readonly value: string;\n readonly to: string;\n }\n | {\n readonly kind: \"old-peer-needed\";\n readonly dependent: string;\n readonly peer: string;\n readonly range: string;\n }\n | {\n readonly kind: \"transform-not-rewritten\";\n readonly line: number;\n readonly reason: TransformKeepReason;\n }\n | { readonly kind: \"legacy-callback\"; readonly line: number; readonly callback: string }\n | {\n readonly kind: \"package-not-declared\";\n readonly line: number;\n readonly name: string;\n /** The original packages that installed it as their own dependency. */\n readonly installers: readonly string[];\n };\n\n/** Why a `transform` callback was left as it is. */\nexport type TransformKeepReason =\n | \"other-callbacks\"\n | \"not-a-function\"\n | \"shared-function\"\n | \"shared-options\"\n | \"unknown-return\"\n | \"typed-options\"\n | \"spread-options\"\n | \"declared-type\"\n | \"in-spread\";\n\n/** A file's new text and what was found in it. Unchanged text means nothing to write. */\nexport interface FileMigration {\n readonly text: string;\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** The result for a file that the migration does not touch. */\nexport function unchanged(text: string): FileMigration {\n return { text, changes: [], manualSteps: [] };\n}\n\n/** Line number (1-based) of a character offset. */\nexport function lineAt(text: string, offset: number): number {\n let line = 1;\n for (let index = text.indexOf(\"\\n\"); index !== -1 && index < offset; ) {\n line++;\n index = text.indexOf(\"\\n\", index + 1);\n }\n return line;\n}\n\n/**\n * Line numbers (1-based) of character offsets in `text`, for a migration that names many places\n * of one text. The line starts are found once and searched by halves, so naming every command of\n * a large file stays linear in its size (`lineAt` for each one was quadratic: 57 s on 4 MB).\n */\nexport function lineLocator(text: string): (offset: number) => number {\n const lineStarts = [0];\n for (let index = text.indexOf(\"\\n\"); index !== -1; index = text.indexOf(\"\\n\", index + 1)) {\n lineStarts.push(index + 1);\n }\n return (offset) => {\n // The last line start at or before `offset`; a break at `offset` itself ends that line.\n let low = 0;\n let high = lineStarts.length - 1;\n while (low < high) {\n const middle = Math.ceil((low + high) / 2);\n if ((lineStarts[middle] as number) <= offset) {\n low = middle;\n } else {\n high = middle - 1;\n }\n }\n return low + 1;\n };\n}\n\n/** Column number (1-based) of a character offset. */\nexport function columnAt(text: string, offset: number): number {\n return offset - text.lastIndexOf(\"\\n\", offset - 1);\n}\n","/**\n * A migration that would corrupt a file: two edits or two strings of one file overlap, which\n * only a bug of the tool can cause. The file is left as it was and reported, and the other files\n * are still migrated: the bug of one reader must not hide the changes of all the others.\n */\nexport class MigrationBugError extends Error {\n override readonly name = \"MigrationBugError\";\n}\n","import { MigrationBugError } from \"./migration-bug.js\";\n\n/**\n * Edits by offset into the original text. A migration changes only the names, specs and command\n * words it renames, so everything else stays byte for byte: formatting, comments, key order,\n * number spellings, escapes and duplicate keys.\n */\nexport interface TextEdit {\n readonly start: number;\n readonly end: number;\n readonly text: string;\n}\n\n/**\n * The text with the edits applied. Edits that overlap cannot both apply: that is a bug of the\n * migration that made them, and applying them would corrupt the file.\n */\nexport function applyTextEdits(text: string, edits: readonly TextEdit[]): string {\n const sorted = [...edits].sort((left, right) => left.start - right.start);\n let edited = \"\";\n let copiedUpTo = 0;\n for (const edit of sorted) {\n if (edit.start < copiedUpTo) {\n throw new MigrationBugError(`edits overlap at offset ${edit.start}`);\n }\n edited += `${text.slice(copiedUpTo, edit.start)}${edit.text}`;\n copiedUpTo = edit.end;\n }\n return edited + text.slice(copiedUpTo);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { TextEdit } from \"../../domain/text-edits.js\";\nimport type { FileBindings } from \"./file-bindings.js\";\n\n/**\n * The types a `transform` declares outside its own return type: the type of the `const` that\n * holds it (`const transform: (s: SchemaObject) => ts.TypeNode = …`, or JSDoc `@type` there and\n * on the option), and a JSDoc `@returns`. Each names TypeScript nodes, which the rewritten\n * returns no longer are, so the file stopped compiling. A TypeScript node type in them becomes\n * `string`, the type text the returns are now; a type the tool cannot map keeps the `transform`.\n */\n\n/** The text that replaces a TypeScript node type: the returns are type text strings. */\nconst TYPE_TEXT = \"string\";\nconst TYPESCRIPT_MODULES: ReadonlySet<string> = new Set([\"typescript\", \"@typescript/typescript6\"]);\n\n/** What the declared types need: edits, or undefined when one of them cannot be mapped. */\nexport type DeclaredTypeEdits = TextEdit[] | undefined;\n\n/** Whether a type reference names a TypeScript node type: `ts.TypeNode`, a named import of it. */\nfunction isTypescriptReference(node: ts.TypeReferenceNode, bindings: FileBindings): boolean {\n const name = node.typeName;\n if (ts.isIdentifier(name)) {\n return bindings.bindingOf(name)?.kind === \"typescript-import\";\n }\n return ts.isIdentifier(name.left) && bindings.bindingOf(name.left)?.kind === \"typescript-module\";\n}\n\n/** Whether an import type names the TypeScript module: `import(\"typescript\").TypeNode`. */\nfunction isTypescriptImportType(node: ts.ImportTypeNode): boolean {\n const { argument } = node;\n return (\n !node.isTypeOf &&\n ts.isLiteralTypeNode(argument) &&\n ts.isStringLiteral(argument.literal) &&\n TYPESCRIPT_MODULES.has(argument.literal.text)\n );\n}\n\n/** The edits of every part, or undefined when one part cannot be mapped. */\nfunction joined(found: readonly DeclaredTypeEdits[]): DeclaredTypeEdits {\n const edits: TextEdit[] = [];\n for (const part of found) {\n if (part === undefined) {\n return undefined;\n }\n edits.push(...part);\n }\n return edits;\n}\n\n/** The edits for the members of a type literal (`{ schema: ts.TypeNode; questionToken: … }`). */\nconst memberEdits = (node: ts.TypeLiteralNode, bindings: FileBindings): DeclaredTypeEdits =>\n joined(\n node.members.map((member) =>\n ts.isPropertySignature(member) ? typeEdits(member.type, bindings) : undefined,\n ),\n );\n\nconst replaced = (node: ts.Node): TextEdit[] => [\n { start: node.getStart(), end: node.getEnd(), text: TYPE_TEXT },\n];\n\nconst isKeyword = (node: ts.Node): boolean =>\n node.kind >= ts.SyntaxKind.FirstKeyword && node.kind <= ts.SyntaxKind.LastKeyword;\n\n/**\n * The edits that make a declared return type fit type text: each TypeScript node type becomes\n * `string`; keywords and literal types stay. Undefined for any other type (a local alias,\n * `TransformObject`, an array), whose meaning the tool does not map.\n */\nfunction typeEdits(node: ts.TypeNode | undefined, bindings: FileBindings): DeclaredTypeEdits {\n if (node === undefined) {\n return undefined;\n }\n if (ts.isLiteralTypeNode(node) || isKeyword(node)) {\n return [];\n }\n if (ts.isUnionTypeNode(node) || ts.isIntersectionTypeNode(node)) {\n return joined(node.types.map((part) => typeEdits(part, bindings)));\n }\n if (ts.isParenthesizedTypeNode(node)) {\n return typeEdits(node.type, bindings);\n }\n if (ts.isTypeLiteralNode(node)) {\n return memberEdits(node, bindings);\n }\n const isNodeType = ts.isTypeReferenceNode(node)\n ? isTypescriptReference(node, bindings)\n : ts.isImportTypeNode(node) && isTypescriptImportType(node);\n return isNodeType ? replaced(node) : undefined;\n}\n\n/** The return type of a function type (`(s) => R`, JSDoc `function(s): R`), or undefined. */\nfunction functionReturnType(node: ts.TypeNode): ts.TypeNode | undefined {\n return ts.isFunctionTypeNode(node) || ts.isJSDocFunctionType(node) ? node.type : undefined;\n}\n\n/**\n * The declared type of the `const` or the option that holds `transform`, as TypeScript reads it:\n * the annotation, or the JSDoc `@type` in a JavaScript file.\n */\nexport function declaredType(node: ts.Node): ts.TypeNode | undefined {\n const annotation = ts.isVariableDeclaration(node) ? node.type : undefined;\n const isJavaScript = (node.flags & ts.NodeFlags.JavaScriptFile) !== 0;\n return annotation ?? (isJavaScript ? ts.getJSDocType(node) : undefined);\n}\n\n/**\n * The edits for one declared type of the callback: the return type of a function type. The\n * options member (`OpenAPITSOptions[\"transform\"]`) is retargeted with the options type\n * (options-type.ts), and `any` takes type text; any other type is not mapped (undefined).\n */\nfunction annotationEdits(type: ts.TypeNode, bindings: FileBindings): DeclaredTypeEdits {\n const returned = functionReturnType(type);\n if (returned !== undefined) {\n return typeEdits(returned, bindings);\n }\n return ts.isIndexedAccessTypeNode(type) || isKeyword(type) ? [] : undefined;\n}\n\n/**\n * The edits that make the declared types of a callback fit type text: its `const` or option\n * types and its JSDoc `@returns`. Undefined when one of them cannot be mapped, so the\n * `transform` is kept and reported.\n */\nexport function callbackTypeEdits(\n annotations: readonly ts.TypeNode[],\n callback: ts.FunctionLikeDeclaration,\n bindings: FileBindings,\n): DeclaredTypeEdits {\n const returnsTag = ts.getJSDocReturnTag(callback)?.typeExpression?.type;\n return joined([\n ...annotations.map((type) => annotationEdits(type, bindings)),\n returnsTag === undefined ? [] : typeEdits(returnsTag, bindings),\n ]);\n}\n","import ts from \"@typescript/typescript6\";\n\n/**\n * The module-level names of a file that the rewriter follows: the TypeScript module and its named\n * imports, the generator and its helpers, module-level `const`s and functions. Identifiers are\n * resolved by scope with the TypeScript checker, so a local `const DATE` inside a callback is not\n * the module's `DATE`, however it is spelled.\n */\n\nexport type Binding =\n /** `ts` in `import ts from \"typescript\"` or `import * as ts from \"typescript\"`. */\n | { readonly kind: \"typescript-module\" }\n /** `factory` in `import { factory } from \"typescript\"`, by its imported name. */\n | { readonly kind: \"typescript-import\"; readonly name: string }\n /** A named import from the generator (`tsUnion`, `NULL`), by its imported name. */\n | { readonly kind: \"helper-import\"; readonly name: string }\n /** The generator function: the default import of the generator module. */\n | { readonly kind: \"generator-function\" }\n /** A namespace import of the generator module; `ns.default` is the generator function. */\n | { readonly kind: \"generator-module\" }\n /** A module-level `const` with an initializer. */\n | { readonly kind: \"constant\"; readonly initializer: ts.Expression }\n /** A module-level function declaration. */\n | { readonly kind: \"function\"; readonly declaration: ts.FunctionDeclaration }\n /** A module-level type: an alias, an interface or a JSDoc `@typedef`. */\n | { readonly kind: \"local-type\"; readonly declaration: LocalTypeDeclaration };\n\nexport type LocalTypeDeclaration =\n | ts.TypeAliasDeclaration\n | ts.InterfaceDeclaration\n | ts.JSDocTypedefTag;\n\nexport interface FileBindings {\n /** Every binding of the file, by its declaration node. */\n readonly declarations: ReadonlyMap<ts.Node, Binding>;\n /** The declaration node an identifier refers to, if it is a binding of this file. */\n declarationOf(identifier: ts.Identifier): ts.Node | undefined;\n bindingOf(identifier: ts.Identifier): Binding | undefined;\n /** The identifiers that refer to a declaration, without the name it declares. */\n usesOf(declaration: ts.Node): readonly ts.Identifier[];\n /** True when the file imports the generator, so it may call it. */\n readonly hasGenerator: boolean;\n}\n\n/** True for a declaration with an `export` modifier (`export const`, `export function`). */\nexport const hasExportModifier = (declaration: ts.Node): boolean =>\n (ts.getCombinedModifierFlags(declaration as ts.Declaration) & ts.ModifierFlags.Export) !== 0;\n\n/** The generator after the specifier rename, and before it, for files the rename skipped. */\nexport const GENERATOR_MODULES: ReadonlySet<string> = new Set([\n \"openapi-typesafe\",\n \"openapi-typescript\",\n]);\nconst TYPESCRIPT_MODULES: ReadonlySet<string> = new Set([\"typescript\", \"@typescript/typescript6\"]);\nconst DEFAULT_EXPORT = \"default\";\n\ntype BindingMap = Map<ts.Node, Binding>;\n\nfunction addNamedImports(clause: ts.ImportClause, isGenerator: boolean, into: BindingMap): void {\n const bindings = clause.namedBindings;\n if (bindings === undefined || !ts.isNamedImports(bindings)) {\n return;\n }\n for (const element of bindings.elements) {\n const name = (element.propertyName ?? element.name).text;\n const binding: Binding = isGenerator\n ? name === DEFAULT_EXPORT\n ? { kind: \"generator-function\" }\n : { kind: \"helper-import\", name }\n : { kind: \"typescript-import\", name };\n into.set(element, binding);\n }\n}\n\n/** An `import` statement, or a JSDoc `@import` tag of a JavaScript file, which has its parts. */\ntype ImportForm = Pick<ts.ImportDeclaration, \"importClause\" | \"moduleSpecifier\">;\n\nfunction addImport(statement: ImportForm, into: BindingMap): void {\n const clause = statement.importClause;\n const specifier = ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : \"\";\n const isGenerator = GENERATOR_MODULES.has(specifier);\n if (clause === undefined || (!isGenerator && !TYPESCRIPT_MODULES.has(specifier))) {\n return;\n }\n if (clause.name !== undefined) {\n into.set(clause, isGenerator ? { kind: \"generator-function\" } : { kind: \"typescript-module\" });\n }\n const namespace = clause.namedBindings;\n if (namespace !== undefined && ts.isNamespaceImport(namespace)) {\n const kind = isGenerator ? \"generator-module\" : \"typescript-module\";\n into.set(namespace, { kind });\n }\n addNamedImports(clause, isGenerator, into);\n}\n\nfunction addConstants(statement: ts.VariableStatement, into: BindingMap): void {\n if ((statement.declarationList.flags & ts.NodeFlags.Const) === 0) {\n return;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.initializer !== undefined) {\n into.set(declaration, { kind: \"constant\", initializer: declaration.initializer });\n }\n }\n}\n\nfunction addStatement(statement: ts.Statement, into: BindingMap): void {\n if (ts.isImportDeclaration(statement)) {\n addImport(statement, into);\n } else if (ts.isVariableStatement(statement)) {\n addConstants(statement, into);\n } else if (ts.isFunctionDeclaration(statement) && statement.name !== undefined) {\n into.set(statement, { kind: \"function\", declaration: statement });\n } else if (ts.isTypeAliasDeclaration(statement) || ts.isInterfaceDeclaration(statement)) {\n into.set(statement, { kind: \"local-type\", declaration: statement });\n }\n}\n\nfunction collectBindings(file: ts.SourceFile): BindingMap {\n const bindings: BindingMap = new Map();\n for (const statement of file.statements) {\n addStatement(statement, bindings);\n }\n return bindings;\n}\n\n/** A compiler host that knows only the parsed file, so the file system is never read. */\nexport function singleFileHost(file: ts.SourceFile): ts.CompilerHost {\n return {\n getSourceFile: (name) => (name === file.fileName ? file : undefined),\n getDefaultLibFileName: () => \"lib.d.ts\",\n writeFile: () => undefined,\n getCurrentDirectory: () => \"\",\n getCanonicalFileName: (name) => name,\n useCaseSensitiveFileNames: () => true,\n getNewLine: () => \"\\n\",\n fileExists: (name) => name === file.fileName,\n readFile: () => undefined,\n };\n}\n\n/**\n * A checker for this one file: no default library and no module resolution, which binding names\n * by scope does not need.\n */\nfunction createChecker(file: ts.SourceFile): ts.TypeChecker {\n const options: ts.CompilerOptions = { noLib: true, noResolve: true, allowJs: true, types: [] };\n const host = singleFileHost(file);\n return ts.createProgram({ rootNames: [file.fileName], options, host }).getTypeChecker();\n}\n\n/**\n * The symbol of an identifier; `{ DATE }` refers to the variable, not to the new property, and\n * `export { DATE }` to the variable, not to the export alias, so an export counts as a use.\n */\nfunction symbolOf(checker: ts.TypeChecker, identifier: ts.Identifier): ts.Symbol | undefined {\n const parent = identifier.parent;\n if (ts.isShorthandPropertyAssignment(parent) && parent.name === identifier) {\n return checker.getShorthandAssignmentValueSymbol(parent);\n }\n if (ts.isExportSpecifier(parent)) {\n return checker.getExportSpecifierLocalTargetSymbol(parent);\n }\n return checker.getSymbolAtLocation(identifier);\n}\n\n/** True for the name that a declaration of this file declares, and for names in imports. */\nfunction isDeclaredName(identifier: ts.Identifier, declaration: ts.Node): boolean {\n const declaredName = (declaration as ts.NamedDeclaration).name;\n return (\n declaredName === identifier || ts.findAncestor(identifier, ts.isImportDeclaration) !== undefined\n );\n}\n\n/**\n * The binding of a JSDoc declaration of a JavaScript file: a `@typedef`, or a name of an\n * `@import`. The checker finds them in any JSDoc comment, so they are bound when a name refers to\n * one; TypeScript's API lists only the last JSDoc comment of a node.\n */\nfunction addJSDocBinding(declaration: ts.Node, into: BindingMap): void {\n if (ts.isJSDocTypedefTag(declaration)) {\n into.set(declaration, { kind: \"local-type\", declaration });\n return;\n }\n const importTag = ts.findAncestor(declaration, ts.isJSDocImportTag);\n if (importTag !== undefined) {\n addImport(importTag, into);\n }\n}\n\n/**\n * The uses of each binding, JSDoc included: `@param {ts.TypeNode}` types a JavaScript file, and\n * `{@link ts.factory}` refers to the import. `getChildren` lists the JSDoc blocks of a node,\n * which `forEachChild` skips.\n */\nfunction indexUses(file: ts.SourceFile, bindings: FileBindings): Map<ts.Node, ts.Identifier[]> {\n const uses = new Map<ts.Node, ts.Identifier[]>();\n const visit = (node: ts.Node): void => {\n const declaration = ts.isIdentifier(node) ? bindings.declarationOf(node) : undefined;\n if (declaration !== undefined && !isDeclaredName(node as ts.Identifier, declaration)) {\n uses.set(declaration, [...(uses.get(declaration) ?? []), node as ts.Identifier]);\n }\n for (const child of node.getChildren(file)) {\n visit(child);\n }\n };\n visit(file);\n return uses;\n}\n\nclass CheckedFileBindings implements FileBindings {\n readonly hasGenerator: boolean;\n readonly #file: ts.SourceFile;\n readonly #bindings: BindingMap;\n readonly declarations: ReadonlyMap<ts.Node, Binding>;\n #checker: ts.TypeChecker | undefined;\n #uses: Map<ts.Node, ts.Identifier[]> | undefined;\n\n constructor(file: ts.SourceFile) {\n this.#file = file;\n this.#bindings = collectBindings(file);\n this.declarations = this.#bindings;\n this.hasGenerator = [...this.#bindings.values()].some(\n (binding) => binding.kind === \"generator-function\" || binding.kind === \"generator-module\",\n );\n }\n\n declarationOf(identifier: ts.Identifier): ts.Node | undefined {\n // The checker is built on first use: most files never call the generator.\n this.#checker ??= createChecker(this.#file);\n const declaration = symbolOf(this.#checker, identifier)?.declarations?.[0];\n if (declaration !== undefined && !this.#bindings.has(declaration)) {\n addJSDocBinding(declaration, this.#bindings);\n }\n return declaration !== undefined && this.#bindings.has(declaration) ? declaration : undefined;\n }\n\n bindingOf(identifier: ts.Identifier): Binding | undefined {\n const declaration = this.declarationOf(identifier);\n return declaration === undefined ? undefined : this.#bindings.get(declaration);\n }\n\n usesOf(declaration: ts.Node): readonly ts.Identifier[] {\n this.#uses ??= indexUses(this.#file, this);\n return this.#uses.get(declaration) ?? [];\n }\n}\n\n/** The bindings of a parsed file (parsed with parent pointers). */\nexport function createFileBindings(file: ts.SourceFile): FileBindings {\n return new CheckedFileBindings(file);\n}\n","import ts from \"@typescript/typescript6\";\nimport { type FileBindings, hasExportModifier } from \"./file-bindings.js\";\n\n/**\n * The `openapiTS(source, options)` calls of a file, and where their options object is: written in\n * the call, in a module-level `const` (`openapiTS(source, options)`), or somewhere the rewriter\n * cannot see. The generator is the default import of the generator module, by any local name,\n * or `ns.default` of a namespace import (`import * as ns from \"openapi-typescript\"`).\n */\n\nexport type GeneratorOptions =\n /**\n * An object literal that only this call uses: it may be rewritten. `annotations` are the types\n * it is declared with: the type of its `const`, and `satisfies` or `as` around it, also as a\n * JSDoc `@type` or `@satisfies` of a JavaScript file. `isContextuallyTyped` is false for an\n * object in a `const` with none of these: its `true` values widen to `boolean`.\n */\n | {\n readonly kind: \"own\";\n readonly options: ts.ObjectLiteralExpression;\n readonly annotations: readonly ts.TypeNode[];\n readonly isContextuallyTyped: boolean;\n }\n /** An object literal in a `const` that other code uses too: it is only reported. */\n | { readonly kind: \"shared\"; readonly options: ts.ObjectLiteralExpression }\n /** An expression that is not an object literal of this file. */\n | { readonly kind: \"unknown\"; readonly expression: ts.Expression };\n\nexport interface GeneratorCall {\n readonly call: ts.CallExpression;\n /** Undefined when the call passes no options. */\n readonly options: GeneratorOptions | undefined;\n}\n\nconst DEFAULT_EXPORT = \"default\";\n\nfunction isGenerator(callee: ts.Expression, bindings: FileBindings): boolean {\n if (ts.isIdentifier(callee)) {\n return bindings.bindingOf(callee)?.kind === \"generator-function\";\n }\n return (\n ts.isPropertyAccessExpression(callee) &&\n callee.name.text === DEFAULT_EXPORT &&\n ts.isIdentifier(callee.expression) &&\n bindings.bindingOf(callee.expression)?.kind === \"generator-module\"\n );\n}\n\n/**\n * The types of the JSDoc `@type` and `@satisfies` tags of a node of a JavaScript file, which\n * TypeScript checks it with as with an annotation: `@type {T}` on `(value)` is `value as T`. In a\n * TypeScript file such a tag checks nothing.\n */\nfunction jsDocTypes(node: ts.Node): ts.TypeNode[] {\n if ((node.flags & ts.NodeFlags.JavaScriptFile) === 0) {\n return [];\n }\n return ts\n .getJSDocTags(node)\n .filter((tag) => ts.isJSDocTypeTag(tag) || ts.isJSDocSatisfiesTag(tag))\n .map((tag) => (tag as ts.JSDocTypeTag | ts.JSDocSatisfiesTag).typeExpression.type);\n}\n\n/**\n * The expression without parentheses, `as` and `satisfies`, which do not change the value, and\n * the types of the `as` and `satisfies` around it.\n */\nexport function unwrapped(\n expression: ts.Expression,\n types: ts.TypeNode[] = [],\n): { value: ts.Expression; types: ts.TypeNode[] } {\n if (ts.isParenthesizedExpression(expression)) {\n return unwrapped(expression.expression, [...types, ...jsDocTypes(expression)]);\n }\n if (ts.isAsExpression(expression) || ts.isSatisfiesExpression(expression)) {\n return unwrapped(expression.expression, [...types, expression.type]);\n }\n return { value: expression, types };\n}\n\n/** The options object a `const` holds, owned by this call when the call is its only use. */\nfunction constantOptions(\n name: ts.Identifier,\n bindings: FileBindings,\n outerTypes: readonly ts.TypeNode[],\n): GeneratorOptions {\n const binding = bindings.bindingOf(name);\n const declaration = bindings.declarationOf(name) as ts.Node;\n const found = binding?.kind === \"constant\" ? unwrapped(binding.initializer) : undefined;\n if (found === undefined || !ts.isObjectLiteralExpression(found.value)) {\n return { kind: \"unknown\", expression: name };\n }\n const isOwn = bindings.usesOf(declaration).length === 1 && !hasExportModifier(declaration);\n if (!isOwn) {\n return { kind: \"shared\", options: found.value };\n }\n const declared = (declaration as ts.VariableDeclaration).type;\n // A type around the name in the call (`options as T`) does not type the object.\n const ownTypes = [\n ...found.types,\n ...(declared === undefined ? [] : [declared]),\n ...jsDocTypes(declaration),\n ];\n const annotations = [...outerTypes, ...ownTypes];\n return {\n kind: \"own\",\n options: found.value,\n annotations,\n isContextuallyTyped: ownTypes.length > 0,\n };\n}\n\nfunction optionsOf(argument: ts.Expression, bindings: FileBindings): GeneratorOptions {\n const { value, types } = unwrapped(argument);\n if (ts.isObjectLiteralExpression(value)) {\n return { kind: \"own\", options: value, annotations: types, isContextuallyTyped: true };\n }\n return ts.isIdentifier(value)\n ? constantOptions(value, bindings, types)\n : { kind: \"unknown\", expression: argument };\n}\n\n/** Every generator call of the file, in source order. */\nexport function generatorCalls(file: ts.SourceFile, bindings: FileBindings): GeneratorCall[] {\n const calls: GeneratorCall[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node) && isGenerator(node.expression, bindings)) {\n const argument = node.arguments[1];\n const options = argument === undefined ? undefined : optionsOf(argument, bindings);\n calls.push({ call: node, options });\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n return calls;\n}\n","import ts from \"@typescript/typescript6\";\nimport { lineAt, type ManualStep } from \"../../domain/migration-findings.js\";\n\n/** The properties of an `openapiTS` options object that the rewriter looks for. */\n\nexport const TRANSFORM = \"transform\";\n/** The legacy callbacks that are only reported: they have no IR form the tool can write. */\nexport const LEGACY_ONLY_CALLBACKS = [\"postTransform\", \"transformProperty\"] as const;\nexport const IR_CALLBACKS_OPTION = \"irCallbacks\";\n\n/** The property of an object literal with the name `name`, written as a name or a string. */\nexport function propertyNamed(\n options: ts.ObjectLiteralExpression,\n name: string,\n): ts.ObjectLiteralElementLike | undefined {\n return options.properties.find((property) => {\n const key = property.name;\n return (\n key !== undefined && (ts.isIdentifier(key) || ts.isStringLiteral(key)) && key.text === name\n );\n });\n}\n\n/** One step for each `postTransform` and `transformProperty` of the options. */\nexport function legacyCallbackSteps(\n options: ts.ObjectLiteralExpression,\n text: string,\n): ManualStep[] {\n return LEGACY_ONLY_CALLBACKS.flatMap((callback) => {\n const property = propertyNamed(options, callback);\n return property === undefined\n ? []\n : [{ kind: \"legacy-callback\" as const, line: lineAt(text, property.getStart()), callback }];\n });\n}\n","import ts from \"@typescript/typescript6\";\nimport type { TextEdit } from \"../../domain/text-edits.js\";\nimport { type FileBindings, GENERATOR_MODULES } from \"./file-bindings.js\";\n\n/**\n * The options type of a rewritten `transform`. `OpenAPITSOptions` types the TypeScript-node\n * callbacks, so options declared with it (`const options: OpenAPITSOptions`, `satisfies\n * OpenAPITSOptions`) stopped compiling once `irCallbacks: true` and type text were in them. The\n * annotations of rewritten options name `OpenAPITSIrOptions`, the type of the IR callbacks.\n */\n\nconst TS_NODE_OPTIONS = \"OpenAPITSOptions\";\nconst IR_OPTIONS = \"OpenAPITSIrOptions\";\nconst TYPE_MODIFIER = \"type \";\n\n/** `import(\"openapi-typescript\").OpenAPITSOptions`: its `OpenAPITSOptions`, or undefined. */\nfunction importTypeName(node: ts.ImportTypeNode): ts.Identifier | undefined {\n const { argument, qualifier } = node;\n const isGeneratorModule =\n ts.isLiteralTypeNode(argument) &&\n ts.isStringLiteral(argument.literal) &&\n GENERATOR_MODULES.has(argument.literal.text);\n const isOptions =\n !node.isTypeOf &&\n qualifier !== undefined &&\n ts.isIdentifier(qualifier) &&\n qualifier.text === TS_NODE_OPTIONS;\n return isGeneratorModule && isOptions ? qualifier : undefined;\n}\n\n/** The name a type reference or an `extends` names (`A`, `ns.A`), or undefined. */\nfunction referencedName(node: ts.Node): ts.Node | undefined {\n if (ts.isTypeReferenceNode(node)) {\n return node.typeName;\n }\n return ts.isExpressionWithTypeArguments(node) ? node.expression : undefined;\n}\n\n/** The two parts of `ns.A`: a qualified type name, or the expression of an `extends`. */\nfunction qualifiedParts(name: ts.Node): { left: ts.Node; right: ts.Node } | undefined {\n if (ts.isQualifiedName(name)) {\n return { left: name.left, right: name.right };\n }\n return ts.isPropertyAccessExpression(name)\n ? { left: name.expression, right: name.name }\n : undefined;\n}\n\n/**\n * The identifier of `OpenAPITSOptions` that a type reference or an `extends` names, by any local\n * name of its import, as `ns.OpenAPITSOptions` of a namespace import or as an import type, or\n * undefined.\n */\nfunction optionsTypeName(node: ts.Node, bindings: FileBindings): ts.Identifier | undefined {\n if (ts.isImportTypeNode(node)) {\n return importTypeName(node);\n }\n const name = referencedName(node);\n if (name !== undefined && ts.isIdentifier(name)) {\n const binding = bindings.bindingOf(name);\n return binding?.kind === \"helper-import\" && binding.name === TS_NODE_OPTIONS ? name : undefined;\n }\n const parts = name === undefined ? undefined : qualifiedParts(name);\n if (parts === undefined || !ts.isIdentifier(parts.left) || !ts.isIdentifier(parts.right)) {\n return undefined;\n }\n const isGeneratorModule = bindings.bindingOf(parts.left)?.kind === \"generator-module\";\n return isGeneratorModule && parts.right.text === TS_NODE_OPTIONS ? parts.right : undefined;\n}\n\n/**\n * The declaration of a type of this file that a type reference or an `extends` names: an alias,\n * an interface or a JSDoc `@typedef`, or undefined.\n */\nfunction localTypeOf(node: ts.Node, bindings: FileBindings): ts.Node | undefined {\n const name = referencedName(node);\n const binding =\n name !== undefined && ts.isIdentifier(name) ? bindings.bindingOf(name) : undefined;\n return binding?.kind === \"local-type\" ? binding.declaration : undefined;\n}\n\n/**\n * Whether a type names `OpenAPITSOptions` anywhere in it (`Partial<OpenAPITSOptions>`), also\n * through a type of this file (`type Opts = OpenAPITSOptions`), which the rewrite does not change.\n */\nfunction mentionsOptionsType(\n node: ts.Node,\n bindings: FileBindings,\n seen: Set<ts.Node> = new Set(),\n): boolean {\n const local = localTypeOf(node, bindings);\n const isNewLocal = local !== undefined && !seen.has(local);\n if (isNewLocal) {\n seen.add(local);\n }\n const mentions = (child: ts.Node) => mentionsOptionsType(child, bindings, seen) || undefined;\n return (\n (isNewLocal && mentionsOptionsType(local, bindings, seen)) ||\n optionsTypeName(node, bindings) !== undefined ||\n (ts.forEachChild(node, mentions) ?? false)\n );\n}\n\n/**\n * The `OpenAPITSOptions` names to retarget in the annotations of rewritten options: an annotation\n * that is the type (`OpenAPITSOptions`) or a member of it (`OpenAPITSOptions[\"transform\"]`).\n * Undefined when one names it otherwise (`Partial<OpenAPITSOptions>`): the tool cannot tell the IR\n * type of that, so the `transform` is not rewritten.\n */\nexport function optionsTypeReferences(\n annotations: readonly ts.TypeNode[],\n bindings: FileBindings,\n): ts.Identifier[] | undefined {\n const references: ts.Identifier[] = [];\n for (const annotation of annotations) {\n const target = ts.isIndexedAccessTypeNode(annotation) ? annotation.objectType : annotation;\n const reference = optionsTypeName(target, bindings);\n if (reference !== undefined) {\n references.push(reference);\n } else if (mentionsOptionsType(annotation, bindings)) {\n return undefined;\n }\n }\n return references;\n}\n\nconst renamed = (identifier: ts.Identifier, text: string): TextEdit => ({\n start: identifier.getStart(),\n end: identifier.getEnd(),\n text,\n});\n\n/** The local name of an import of `OpenAPITSIrOptions` that the file has, or undefined. */\nfunction importedIrOptions(bindings: FileBindings): string | undefined {\n for (const [declaration, binding] of bindings.declarations) {\n if (binding.kind === \"helper-import\" && binding.name === IR_OPTIONS) {\n return (declaration as ts.ImportSpecifier).name.text;\n }\n }\n return undefined;\n}\n\n/**\n * The edits for the references of one import of `OpenAPITSOptions`. When the rewritten options\n * are its only uses, the import names `OpenAPITSIrOptions` instead; else it is imported too. A\n * JavaScript file imports it with a JSDoc `@import` and names it in JSDoc comments, whose uses\n * TypeScript's API does not all list, so there it is always imported too.\n */\nfunction importEdits(\n specifier: ts.ImportSpecifier,\n references: readonly ts.Identifier[],\n bindings: FileBindings,\n): TextEdit[] {\n const isJavaScript = (specifier.flags & ts.NodeFlags.JavaScriptFile) !== 0;\n const isOnlyUse =\n !isJavaScript && bindings.usesOf(specifier).every((use) => references.includes(use));\n if (isOnlyUse && specifier.propertyName !== undefined) {\n return [renamed(specifier.propertyName as ts.Identifier, IR_OPTIONS)];\n }\n const uses = references.map((reference) => renamed(reference, IR_OPTIONS));\n if (isOnlyUse) {\n return [renamed(specifier.name, IR_OPTIONS), ...uses];\n }\n const isTypeImport = specifier.parent.parent.isTypeOnly;\n const added = `, ${isTypeImport ? \"\" : TYPE_MODIFIER}${IR_OPTIONS}`;\n return [{ start: specifier.getEnd(), end: specifier.getEnd(), text: added }, ...uses];\n}\n\n/** The edits that make the references name `OpenAPITSIrOptions`, with its import. */\nexport function optionsTypeEdits(\n references: readonly ts.Identifier[],\n bindings: FileBindings,\n): TextEdit[] {\n const edits: TextEdit[] = [];\n const byImport = new Map<ts.ImportSpecifier, ts.Identifier[]>();\n const existing = importedIrOptions(bindings);\n for (const reference of new Set(references)) {\n const specifier = bindings.declarationOf(reference);\n if (specifier === undefined || !ts.isImportSpecifier(specifier)) {\n edits.push(renamed(reference, IR_OPTIONS));\n } else if (existing !== undefined) {\n edits.push(renamed(reference, existing));\n } else {\n byImport.set(specifier, [...(byImport.get(specifier) ?? []), reference]);\n }\n }\n for (const [specifier, found] of byImport) {\n edits.push(...importEdits(specifier, found, bindings));\n }\n return edits;\n}\n","import ts from \"@typescript/typescript6\";\n\n/** A part of a file that is a script, and where it starts in the file. */\nexport interface ScriptRegion {\n readonly offset: number;\n readonly text: string;\n readonly kind: ts.ScriptKind;\n}\n\nconst SCRIPT_KINDS: ReadonlyMap<string, ts.ScriptKind> = new Map([\n [\".ts\", ts.ScriptKind.TS],\n [\".mts\", ts.ScriptKind.TS],\n [\".cts\", ts.ScriptKind.TS],\n [\".tsx\", ts.ScriptKind.TSX],\n [\".js\", ts.ScriptKind.JS],\n [\".mjs\", ts.ScriptKind.JS],\n [\".cjs\", ts.ScriptKind.JS],\n [\".jsx\", ts.ScriptKind.JSX],\n]);\n\nconst ASTRO_EXTENSION = \".astro\";\nconst MDX_EXTENSION = \".mdx\";\n/** An MDX ESM block starts with `import` or `export` at the start of a line. */\nconst MDX_ESM_START_RE = /^(?:import|export)\\b/;\n/** A Markdown code fence: three or more backticks or tildes, indented by at most 3 spaces. */\nconst CODE_FENCE_RE = /^ {0,3}(`{3,}|~{3,})/;\nconst MDX_KIND = ts.ScriptKind.JSX;\nconst SCRIPT_OPEN_TAG = \"<script\";\nconst TAG_END = \">\";\n/** Astro's component script: the fenced block at the top of the file. */\nconst ASTRO_FRONTMATTER_RE = /^(\\s*---\\r?\\n)([\\s\\S]*?)\\r?\\n---/;\nconst LANG_RE = /\\blang\\s*=\\s*[\"']?([a-z]+)/i;\nconst LANG_KINDS: ReadonlyMap<string, ts.ScriptKind> = new Map([\n [\"ts\", ts.ScriptKind.TS],\n [\"typescript\", ts.ScriptKind.TS],\n [\"tsx\", ts.ScriptKind.TSX],\n [\"jsx\", ts.ScriptKind.JSX],\n]);\n\nfunction extensionOf(path: string): string {\n return path.slice(path.lastIndexOf(\".\"));\n}\n\n/** The script kind of a plain script file, or undefined for anything else. */\nexport function plainScriptKind(path: string): ts.ScriptKind | undefined {\n return SCRIPT_KINDS.get(extensionOf(path));\n}\n\n/** Astro scripts are TypeScript; Vue and Svelte scripts are JavaScript unless `lang` says not. */\nfunction blockKind(attributes: string, isAstro: boolean): ts.ScriptKind {\n const lang = LANG_RE.exec(attributes)?.[1]?.toLowerCase();\n const fallback = isAstro ? ts.ScriptKind.TS : ts.ScriptKind.JS;\n return (lang === undefined ? undefined : LANG_KINDS.get(lang)) ?? fallback;\n}\n\n/** Astro's frontmatter, and where the markup after it starts; the markup is the whole text else. */\nfunction astroFrontmatter(text: string): { region?: ScriptRegion; markupStart: number } {\n const frontmatter = ASTRO_FRONTMATTER_RE.exec(text);\n if (frontmatter === null) {\n return { markupStart: 0 };\n }\n const [whole, fence, content] = frontmatter as unknown as [string, string, string];\n const region = { offset: fence.length, text: content, kind: ts.ScriptKind.TS };\n return { region, markupStart: whole.length };\n}\n\n/** A `<script>` block of component markup: its attributes, and its content and where it starts. */\ninterface ScriptBlock {\n readonly attributes: string;\n readonly contentStart: number;\n readonly content: string;\n}\n\n/**\n * The `<script>` blocks of a Vue, Svelte or Astro component, each up to the first closing tag\n * after it. Searches from left to right that never go back, not one regular expression with a\n * lazy body: that one scanned the rest of the file again from every unclosed tag, which took\n * seconds on a crafted file. When a tag or a block is not closed, no later one is either.\n */\nfunction scriptBlocks(markup: string): ScriptBlock[] {\n const openTag = /<script\\b/gi;\n const closeTag = /<\\/script\\s*>/gi;\n const blocks: ScriptBlock[] = [];\n for (let opening = openTag.exec(markup); opening !== null; opening = openTag.exec(markup)) {\n const tagEnd = markup.indexOf(TAG_END, opening.index);\n closeTag.lastIndex = tagEnd + 1;\n const closing = tagEnd === -1 ? null : closeTag.exec(markup);\n if (closing === null) {\n break;\n }\n const attributes = markup.slice(opening.index + SCRIPT_OPEN_TAG.length, tagEnd);\n blocks.push({\n attributes,\n contentStart: tagEnd + 1,\n content: markup.slice(tagEnd + 1, closing.index),\n });\n openTag.lastIndex = closeTag.lastIndex;\n }\n return blocks;\n}\n\nfunction componentRegions(text: string, isAstro: boolean): ScriptRegion[] {\n const { region, markupStart } = isAstro ? astroFrontmatter(text) : { markupStart: 0 };\n const regions: ScriptRegion[] = region === undefined ? [] : [region];\n // Script blocks are read in the markup only: a \"<script>\" string in the frontmatter is code, and\n // a block found there would overlap the frontmatter, so its strings would be edited twice.\n for (const block of scriptBlocks(text.slice(markupStart))) {\n const offset = markupStart + block.contentStart;\n regions.push({ offset, text: block.content, kind: blockKind(block.attributes, isAstro) });\n }\n return regions;\n}\n\n/** Whether a line closes the code fence `fence` opened: the same mark, at least as long. */\nfunction closesFence(line: string, fence: string): boolean {\n const mark = CODE_FENCE_RE.exec(line)?.[1];\n return mark !== undefined && mark[0] === fence[0] && mark.length >= fence.length;\n}\n\n/**\n * The ESM blocks of an MDX file: from a line that starts with `import` or `export`, outside a\n * code fence, up to the next blank line (MDX reads them as JavaScript, JSX allowed).\n */\nfunction mdxRegions(text: string): ScriptRegion[] {\n const regions: ScriptRegion[] = [];\n let fence: string | undefined;\n let block: { start: number; end: number } | undefined;\n let offset = 0;\n for (const line of text.split(\"\\n\")) {\n const end = offset + line.length;\n if (block !== undefined && line.trim() === \"\") {\n regions.push({\n offset: block.start,\n text: text.slice(block.start, block.end),\n kind: MDX_KIND,\n });\n block = undefined;\n } else if (block !== undefined) {\n block.end = end;\n } else if (fence !== undefined) {\n fence = closesFence(line, fence) ? undefined : fence;\n } else if (MDX_ESM_START_RE.test(line)) {\n block = { start: offset, end };\n } else {\n fence = CODE_FENCE_RE.exec(line)?.[1];\n }\n offset = end + 1;\n }\n if (block !== undefined) {\n regions.push({ offset: block.start, text: text.slice(block.start, block.end), kind: MDX_KIND });\n }\n return regions;\n}\n\n/**\n * The scripts of a file: the whole file for a plain script, the `<script>` blocks (and Astro's\n * frontmatter) for a single-file component, the ESM blocks of MDX. Markup is not a script and is\n * left out.\n */\nexport function scriptRegions(text: string, path: string): ScriptRegion[] {\n const kind = plainScriptKind(path);\n if (kind !== undefined) {\n return [{ offset: 0, text, kind }];\n }\n const extension = extensionOf(path);\n if (extension === MDX_EXTENSION) {\n return mdxRegions(text);\n }\n return componentRegions(text, extension === ASTRO_EXTENSION);\n}\n","import ts from \"@typescript/typescript6\";\nimport { lineAt, type ManualStep } from \"../../domain/migration-findings.js\";\nimport type { FileBindings } from \"./file-bindings.js\";\nimport { unwrapped } from \"./generator-calls.js\";\nimport {\n IR_CALLBACKS_OPTION,\n legacyCallbackSteps,\n propertyNamed,\n TRANSFORM,\n} from \"./option-properties.js\";\n\n/**\n * The objects that `openapiTS` options take keys from (`{ ...base }`). An object literal, also in\n * a `const` of the file, is read like the options themselves: its legacy callbacks are reported,\n * and a `transform` in it is kept, since the call it reaches is not where it is written. Any other\n * spread (an import, a call, a parameter) may bring callbacks the tool cannot see, so it is\n * reported.\n */\n\n/** The object literal a spread takes its keys from, when the file writes it. */\nfunction spreadObject(\n expression: ts.Expression,\n bindings: FileBindings,\n): ts.ObjectLiteralExpression | undefined {\n const { value } = unwrapped(expression);\n if (ts.isObjectLiteralExpression(value)) {\n return value;\n }\n const binding = ts.isIdentifier(value) ? bindings.bindingOf(value) : undefined;\n const initializer =\n binding?.kind === \"constant\" ? unwrapped(binding.initializer).value : undefined;\n return initializer !== undefined && ts.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** The steps of an object that options take with a spread, and of the spreads inside it. */\nfunction spreadObjectSteps(\n source: ts.ObjectLiteralExpression,\n text: string,\n bindings: FileBindings,\n seen: Set<ts.Node>,\n): ManualStep[] {\n if (seen.has(source) || propertyNamed(source, IR_CALLBACKS_OPTION) !== undefined) {\n return [];\n }\n seen.add(source);\n const transform = propertyNamed(source, TRANSFORM);\n const kept: ManualStep[] =\n transform === undefined\n ? []\n : [\n {\n kind: \"transform-not-rewritten\",\n line: lineAt(text, transform.getStart()),\n reason: \"in-spread\",\n },\n ];\n return [\n ...legacyCallbackSteps(source, text),\n ...kept,\n ...spreadSteps(source, text, bindings, seen),\n ];\n}\n\n/** The manual steps of the spreads of an options object (`{ ...base, alphabetize: true }`). */\nexport function spreadSteps(\n options: ts.ObjectLiteralExpression,\n text: string,\n bindings: FileBindings,\n seen: Set<ts.Node> = new Set(),\n): ManualStep[] {\n return options.properties.filter(ts.isSpreadAssignment).flatMap((spread) => {\n const source = spreadObject(spread.expression, bindings);\n return source === undefined\n ? [{ kind: \"options-spread-not-inspected\", line: lineAt(text, spread.getStart()) } as const]\n : spreadObjectSteps(source, text, bindings, seen);\n });\n}\n","import ts from \"@typescript/typescript6\";\nimport { declaredType } from \"./declared-types.js\";\nimport type { FactoryNames } from \"./factory-type-text.js\";\nimport { hasExportModifier } from \"./file-bindings.js\";\n\n/**\n * The function a `transform` option holds, and what else knows that function: other uses of a\n * module-level function, and the type its `const` is declared with.\n */\n\n/** The function a `const` or a function declaration of this file holds. */\nfunction namedFunction(\n name: ts.Identifier,\n names: FactoryNames,\n): ts.FunctionLikeDeclaration | undefined {\n const binding = names.bindings.bindingOf(name);\n if (binding?.kind === \"function\") {\n return binding.declaration;\n }\n const value = binding?.kind === \"constant\" ? binding.initializer : undefined;\n return value !== undefined && (ts.isArrowFunction(value) || ts.isFunctionExpression(value))\n ? value\n : undefined;\n}\n\n/** The name a `transform` property gives its value: `transform: name`, or `{ transform }`. */\nfunction namedValue(property: ts.ObjectLiteralElementLike): ts.Identifier | undefined {\n if (ts.isShorthandPropertyAssignment(property)) {\n return property.name;\n }\n return ts.isPropertyAssignment(property) && ts.isIdentifier(property.initializer)\n ? property.initializer\n : undefined;\n}\n\n/**\n * The function a `transform` property holds: a method, an arrow function or a function, inline or\n * by the name of a module-level function.\n */\nexport function callbackFunction(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n): ts.FunctionLikeDeclaration | undefined {\n if (ts.isMethodDeclaration(property)) {\n return property;\n }\n const name = namedValue(property);\n if (name !== undefined) {\n return namedFunction(name, names);\n }\n const value = ts.isPropertyAssignment(property) ? property.initializer : undefined;\n return value !== undefined && (ts.isArrowFunction(value) || ts.isFunctionExpression(value))\n ? value\n : undefined;\n}\n\n/**\n * The type declared for the function of a `transform` option: the type of the `const` it names\n * (`OpenAPITSOptions[\"transform\"]`, a function type), or a JSDoc `@type` of an inline option.\n */\nexport function callbackAnnotations(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n): ts.TypeNode[] {\n const name = namedValue(property);\n const declaration = name === undefined ? undefined : names.bindings.declarationOf(name);\n const type = declaredType(declaration ?? property);\n return type === undefined ? [] : [type];\n}\n\n/**\n * A function named by `transform` is rewritten only when this is its only use and it is not\n * exported: other callers, in this file or in the modules that import it, would get type text\n * where they expect nodes.\n */\nexport function isSharedFunction(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n): boolean {\n const name = namedValue(property);\n const declaration = name === undefined ? undefined : names.bindings.declarationOf(name);\n return (\n declaration !== undefined &&\n (names.bindings.usesOf(declaration).length > 1 || hasExportModifier(declaration))\n );\n}\n","import ts from \"@typescript/typescript6\";\n\nimport type { FileBindings } from \"./file-bindings.js\";\n\n/**\n * TypeScript type text for the `ts.factory` expressions of the classic `transform` recipe\n * (`createTypeReferenceNode`, keywords, `null` and literal types, unions, intersections, arrays),\n * and for the openapi-typesafe helper constants and `tsUnion` / `tsIntersection`. Anything else\n * returns undefined, so the callback is left as it is. A name such as `DATE` is followed to the\n * module-level `const` it refers to by scope, never by spelling.\n */\n\n/** How to read names: the file's bindings, and the constants being followed (to stop cycles). */\nexport interface FactoryNames {\n readonly bindings: FileBindings;\n readonly following: ReadonlySet<ts.Node>;\n}\n\nconst KEYWORDS: ReadonlyMap<string, string> = new Map([\n [\"AnyKeyword\", \"any\"],\n [\"BigIntKeyword\", \"bigint\"],\n [\"BooleanKeyword\", \"boolean\"],\n [\"NeverKeyword\", \"never\"],\n [\"NumberKeyword\", \"number\"],\n [\"ObjectKeyword\", \"object\"],\n [\"StringKeyword\", \"string\"],\n [\"SymbolKeyword\", \"symbol\"],\n [\"UndefinedKeyword\", \"undefined\"],\n [\"UnknownKeyword\", \"unknown\"],\n [\"VoidKeyword\", \"void\"],\n]);\n\nconst HELPER_CONSTANTS: ReadonlyMap<string, string> = new Map([\n [\"BOOLEAN\", \"boolean\"],\n [\"FALSE\", \"false\"],\n [\"NEVER\", \"never\"],\n [\"NULL\", \"null\"],\n [\"NUMBER\", \"number\"],\n [\"STRING\", \"string\"],\n [\"TRUE\", \"true\"],\n [\"UNDEFINED\", \"undefined\"],\n [\"UNKNOWN\", \"unknown\"],\n]);\n\n/** A type name the type text can hold as written: `Date`, `Foo.Bar`. */\nconst TYPE_NAME_RE = /^[A-Za-z_$][\\w$]*(\\.[A-Za-z_$][\\w$]*)*$/;\n\n/** A type with a `|` or `&` at the top needs parentheses inside `[]`, and a union inside `&`. */\ninterface TypeText {\n readonly text: string;\n readonly operator: \"|\" | \"&\" | null;\n}\n\nconst plain = (text: string): TypeText => ({ text, operator: null });\n\n/**\n * True when `target` is the TypeScript export `member`: `factory` imported by name, or\n * `ts.factory` on the TypeScript module.\n */\nfunction isTypescriptMember(target: ts.Expression, member: string, names: FactoryNames): boolean {\n if (ts.isIdentifier(target)) {\n const binding = names.bindings.bindingOf(target);\n return binding?.kind === \"typescript-import\" && binding.name === member;\n }\n return (\n ts.isPropertyAccessExpression(target) &&\n target.name.text === member &&\n ts.isIdentifier(target.expression) &&\n names.bindings.bindingOf(target.expression)?.kind === \"typescript-module\"\n );\n}\n\n/** `ts.factory.createX` or `factory.createX`: the factory method name, if that is the callee. */\nfunction factoryMethod(callee: ts.Expression, names: FactoryNames): string | undefined {\n return ts.isPropertyAccessExpression(callee) &&\n isTypescriptMember(callee.expression, \"factory\", names)\n ? callee.name.text\n : undefined;\n}\n\n/** `ts.SyntaxKind.StringKeyword` or `SyntaxKind.StringKeyword`: the member name. */\nfunction syntaxKindMember(expression: ts.Expression, names: FactoryNames): string | undefined {\n return ts.isPropertyAccessExpression(expression) &&\n isTypescriptMember(expression.expression, \"SyntaxKind\", names)\n ? expression.name.text\n : undefined;\n}\n\nfunction typeName(argument: ts.Expression | undefined, names: FactoryNames): string | undefined {\n if (argument === undefined) {\n return undefined;\n }\n if (ts.isStringLiteralLike(argument)) {\n return TYPE_NAME_RE.test(argument.text) ? argument.text : undefined;\n }\n if (\n ts.isCallExpression(argument) &&\n factoryMethod(argument.expression, names) === \"createIdentifier\"\n ) {\n return typeName(argument.arguments[0], names);\n }\n return undefined;\n}\n\n/** Digits with optional `_` separators between them, as in `1_000`. */\nconst digits = (digit: string): string => `${digit}(?:_?${digit})*`;\nconst DECIMAL_LITERAL =\n `(?:(?:0|[1-9](?:_?\\\\d)*)(?:\\\\.(?:${digits(\"\\\\d\")})?)?|\\\\.${digits(\"\\\\d\")})` +\n `(?:[eE][+-]?${digits(\"\\\\d\")})?`;\n/** A numeric literal as TypeScript writes it: decimal, hex, octal or binary. */\nconst NUMERIC_LITERAL_RE = new RegExp(\n `^(?:0[xX]${digits(\"[\\\\da-fA-F]\")}|0[oO]${digits(\"[0-7]\")}|0[bB]${digits(\"[01]\")}|` +\n `${DECIMAL_LITERAL})$`,\n);\n\n/**\n * The text that `createNumericLiteral(value)` prints. A string prints as given, so it is kept as\n * written (`1_000`, `1e999`) when it is a numeric literal. A number prints as JavaScript writes\n * it, and one beyond the range of a number prints `Infinity`, which is no type: that is left.\n */\nfunction numericLiteralText(value: ts.Expression): string | undefined {\n if (ts.isNumericLiteral(value)) {\n const number = Number(value.text);\n return Number.isFinite(number) ? String(number) : undefined;\n }\n return ts.isStringLiteralLike(value) && NUMERIC_LITERAL_RE.test(value.text)\n ? value.text\n : undefined;\n}\n\nfunction literalText(argument: ts.Expression | undefined, names: FactoryNames): string | undefined {\n if (argument === undefined || !ts.isCallExpression(argument)) {\n return undefined;\n }\n const method = factoryMethod(argument.expression, names);\n const [value] = argument.arguments;\n switch (method) {\n case \"createNull\":\n return \"null\";\n case \"createTrue\":\n return \"true\";\n case \"createFalse\":\n return \"false\";\n case \"createStringLiteral\":\n return value !== undefined && ts.isStringLiteralLike(value)\n ? JSON.stringify(value.text)\n : undefined;\n case \"createNumericLiteral\":\n return value === undefined ? undefined : numericLiteralText(value);\n default:\n return undefined;\n }\n}\n\nfunction joined(\n elements: ts.Expression | undefined,\n operator: \"|\" | \"&\",\n names: FactoryNames,\n): TypeText | undefined {\n if (\n elements === undefined ||\n !ts.isArrayLiteralExpression(elements) ||\n elements.elements.length === 0\n ) {\n return undefined;\n }\n const parts = elements.elements.map((element) => typeTextOf(element, names));\n if (parts.some((part) => part === undefined)) {\n return undefined;\n }\n const texts = (parts as TypeText[]).map((part) =>\n operator === \"&\" && part.operator === \"|\" ? `(${part.text})` : part.text,\n );\n return { text: texts.join(` ${operator} `), operator: texts.length > 1 ? operator : null };\n}\n\nfunction factoryCallText(\n call: ts.CallExpression,\n method: string,\n names: FactoryNames,\n): TypeText | undefined {\n const [first, second] = call.arguments;\n switch (method) {\n case \"createTypeReferenceNode\": {\n const name = second === undefined ? typeName(first, names) : undefined;\n return name === undefined ? undefined : plain(name);\n }\n case \"createKeywordTypeNode\": {\n const keyword =\n first === undefined ? undefined : KEYWORDS.get(syntaxKindMember(first, names) ?? \"\");\n return keyword === undefined ? undefined : plain(keyword);\n }\n case \"createLiteralTypeNode\": {\n const literal = literalText(first, names);\n return literal === undefined ? undefined : plain(literal);\n }\n case \"createUnionTypeNode\":\n return joined(first, \"|\", names);\n case \"createIntersectionTypeNode\":\n return joined(first, \"&\", names);\n case \"createArrayTypeNode\": {\n const element = first === undefined ? undefined : typeTextOf(first, names);\n return element === undefined\n ? undefined\n : plain(element.operator ? `(${element.text})[]` : `${element.text}[]`);\n }\n default:\n return undefined;\n }\n}\n\nfunction helperCallText(call: ts.CallExpression, names: FactoryNames): TypeText | undefined {\n if (!ts.isIdentifier(call.expression)) {\n return undefined;\n }\n const binding = names.bindings.bindingOf(call.expression);\n const helper = binding?.kind === \"helper-import\" ? binding.name : undefined;\n if (helper === \"tsUnion\") {\n return joined(call.arguments[0], \"|\", names);\n }\n return helper === \"tsIntersection\" ? joined(call.arguments[0], \"&\", names) : undefined;\n}\n\nfunction identifierText(identifier: ts.Identifier, names: FactoryNames): TypeText | undefined {\n const declaration = names.bindings.declarationOf(identifier);\n const binding = names.bindings.bindingOf(identifier);\n if (binding?.kind === \"helper-import\") {\n const constant = HELPER_CONSTANTS.get(binding.name);\n return constant === undefined ? undefined : plain(constant);\n }\n if (binding?.kind !== \"constant\" || names.following.has(declaration as ts.Node)) {\n return undefined;\n }\n const following = new Set([...names.following, declaration as ts.Node]);\n return typeTextOf(binding.initializer, { ...names, following });\n}\n\n/** The type text of an expression that builds a type, or undefined. */\nexport function typeTextOf(expression: ts.Expression, names: FactoryNames): TypeText | undefined {\n if (ts.isParenthesizedExpression(expression)) {\n return typeTextOf(expression.expression, names);\n }\n if (ts.isIdentifier(expression)) {\n return identifierText(expression, names);\n }\n if (!ts.isCallExpression(expression)) {\n return undefined;\n }\n const method = factoryMethod(expression.expression, names);\n return method === undefined\n ? helperCallText(expression, names)\n : factoryCallText(expression, method, names);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { TextEdit } from \"../../domain/text-edits.js\";\nimport { type FactoryNames, typeTextOf } from \"./factory-type-text.js\";\n\n/** The returned expressions of a function, without those of functions nested in it. */\nexport function returnedExpressions(body: ts.ConciseBody): (ts.Expression | undefined)[] {\n if (!ts.isBlock(body)) {\n return [body];\n }\n const returned: (ts.Expression | undefined)[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isFunctionLike(node) || ts.isClassLike(node)) {\n return;\n }\n if (ts.isReturnStatement(node)) {\n returned.push(node.expression);\n }\n ts.forEachChild(node, visit);\n };\n ts.forEachChild(body, visit);\n return returned;\n}\n\nconst isUndefined = (expression: ts.Expression): boolean =>\n (ts.isIdentifier(expression) && expression.text === \"undefined\") ||\n ts.isVoidExpression(expression);\n\nfunction typeTextEdit(expression: ts.Expression, names: FactoryNames): TextEdit[] | undefined {\n const typeText = typeTextOf(expression, names);\n if (typeText === undefined) {\n return undefined;\n }\n const start = expression.getStart();\n return [{ start, end: expression.getEnd(), text: JSON.stringify(typeText.text) }];\n}\n\n/** `{ schema: <type>, questionToken: … }`: only the `schema` value changes. */\nfunction resultObjectEdits(\n object: ts.ObjectLiteralExpression,\n names: FactoryNames,\n): TextEdit[] | undefined {\n const schema = object.properties.find(\n (property) =>\n property.name !== undefined &&\n ts.isIdentifier(property.name) &&\n property.name.text === \"schema\",\n );\n const isPlain = object.properties.every(ts.isPropertyAssignment);\n if (schema === undefined || !isPlain || !ts.isPropertyAssignment(schema)) {\n return undefined;\n }\n return typeTextEdit(schema.initializer, names);\n}\n\n/**\n * The edits that turn one returned expression into type text, or undefined when it is not one of\n * the known type-building forms. `undefined` (keep the generated type) needs no edit.\n */\nexport function returnEdits(\n expression: ts.Expression | undefined,\n names: FactoryNames,\n): TextEdit[] | undefined {\n if (expression === undefined || isUndefined(expression)) {\n return [];\n }\n if (ts.isParenthesizedExpression(expression)) {\n return returnEdits(expression.expression, names);\n }\n if (ts.isConditionalExpression(expression)) {\n const whenTrue = returnEdits(expression.whenTrue, names);\n const whenFalse = returnEdits(expression.whenFalse, names);\n return whenTrue === undefined || whenFalse === undefined\n ? undefined\n : [...whenTrue, ...whenFalse];\n }\n if (ts.isObjectLiteralExpression(expression)) {\n return resultObjectEdits(expression, names);\n }\n return typeTextEdit(expression, names);\n}\n","import ts from \"@typescript/typescript6\";\nimport type { TextEdit } from \"../../domain/text-edits.js\";\nimport { type FactoryNames, typeTextOf } from \"./factory-type-text.js\";\nimport { type Binding, hasExportModifier } from \"./file-bindings.js\";\n\n/**\n * After the `transform` returns become type text, the module-level constants that built the old\n * nodes (`const DATE = ts.factory…`), and the TypeScript and helper imports that only they used,\n * are no longer read. Left in place they fail `noUnusedLocals` (TS6133), so they are removed.\n * Only declarations that the rewrite made unused go: each had uses, and all of them were in\n * replaced text or in other removed declarations. A constant goes only when its initializer is a\n * type-building expression, so no side effect is lost; an exported one always stays.\n */\n\n/** A removed declaration, for the report. */\nexport interface RemovedDeclaration {\n readonly node: ts.Node;\n readonly name: string;\n}\n\ninterface Range {\n readonly start: number;\n readonly end: number;\n}\n\nfunction isRemovable(node: ts.Node, binding: Binding, names: FactoryNames): boolean {\n switch (binding.kind) {\n case \"typescript-module\":\n case \"typescript-import\":\n case \"helper-import\":\n return true;\n case \"constant\":\n return !hasExportModifier(node) && typeTextOf(binding.initializer, names) !== undefined;\n default:\n return false;\n }\n}\n\nconst isInside = (node: ts.Node, ranges: readonly Range[]): boolean =>\n ranges.some((range) => node.getStart() >= range.start && node.getEnd() <= range.end);\n\n/** The declarations that the replaced ranges leave without a use, until nothing changes. */\nexport function unusedDeclarations(\n names: FactoryNames,\n replaced: readonly TextEdit[],\n): RemovedDeclaration[] {\n const ranges: Range[] = replaced.filter((edit) => edit.end > edit.start);\n const removed: RemovedDeclaration[] = [];\n for (let isChanged = true; isChanged; ) {\n isChanged = false;\n for (const [node, binding] of names.bindings.declarations) {\n const uses = names.bindings.usesOf(node);\n const isUnused = uses.length > 0 && uses.every((use) => isInside(use, ranges));\n const isNew = removed.every((found) => found.node !== node);\n if (isNew && isUnused && isRemovable(node, binding, names)) {\n const name = (node as ts.NamedDeclaration).name?.getText() ?? \"\";\n removed.push({ node, name });\n ranges.push({ start: node.getStart(), end: node.getEnd() });\n isChanged = true;\n }\n }\n }\n return removed;\n}\n\n/** The edit that removes a whole statement, with its line when nothing else is on it. */\nfunction statementRemoval(statement: ts.Statement, text: string): TextEdit {\n const start = statement.getStart(undefined, true);\n const end = statement.getEnd();\n const lineStart = text.lastIndexOf(\"\\n\", start - 1) + 1;\n const lineBreak = text.indexOf(\"\\n\", end);\n const lineEnd = lineBreak === -1 ? text.length : lineBreak + 1;\n const isAlone =\n text.slice(lineStart, start).trim() === \"\" && text.slice(end, lineEnd).trim() === \"\";\n return isAlone ? { start: lineStart, end: lineEnd, text: \"\" } : { start, end, text: \"\" };\n}\n\n/**\n * The edits that remove some elements of a comma-separated list. An element before the last kept\n * one goes with the comma after it; the elements after the last kept one go with the comma before\n * them, in one edit.\n */\nfunction listRemovals(\n elements: readonly ts.Node[],\n isRemoved: (node: ts.Node) => boolean,\n): TextEdit[] {\n const lastKept = elements.findLastIndex((element) => !isRemoved(element));\n const edits: TextEdit[] = [];\n elements.forEach((element, index) => {\n const next = elements[index + 1];\n if (index < lastKept && isRemoved(element) && next !== undefined) {\n edits.push({ start: element.getStart(), end: next.getStart(), text: \"\" });\n }\n });\n const last = elements.at(-1);\n if (lastKept !== -1 && last !== undefined && lastKept < elements.length - 1) {\n edits.push({ start: (elements[lastKept] as ts.Node).getEnd(), end: last.getEnd(), text: \"\" });\n }\n return edits;\n}\n\ntype IsRemoved = (node: ts.Node) => boolean;\n\n/** The edits for an import some of whose bindings were removed. */\nfunction importEdits(\n statement: ts.ImportDeclaration,\n isRemoved: IsRemoved,\n text: string,\n): TextEdit[] {\n const clause = statement.importClause as ts.ImportClause;\n const bindings = clause.namedBindings;\n const named = bindings !== undefined && ts.isNamedImports(bindings) ? bindings : undefined;\n const namespace = bindings !== undefined && ts.isNamespaceImport(bindings) ? bindings : undefined;\n const parts: ts.Node[] = [\n ...(clause.name === undefined ? [] : [clause]),\n ...(namespace === undefined ? [] : [namespace]),\n ...(named?.elements ?? []),\n ];\n if (parts.every(isRemoved)) {\n return [statementRemoval(statement, text)];\n }\n // Not every part is removed, so a removed default import has a named or namespace one after it.\n const defaultEnd = clause.name?.getEnd() ?? 0;\n const edits: TextEdit[] = [];\n if (clause.name !== undefined && isRemoved(clause)) {\n edits.push({ start: clause.name.getStart(), end: (bindings as ts.Node).getStart(), text: \"\" });\n }\n if (namespace !== undefined && isRemoved(namespace)) {\n edits.push({ start: defaultEnd, end: namespace.getEnd(), text: \"\" });\n }\n if (named !== undefined && named.elements.length > 0 && named.elements.every(isRemoved)) {\n edits.push({ start: defaultEnd, end: named.getEnd(), text: \"\" });\n } else if (named !== undefined) {\n edits.push(...listRemovals(named.elements, isRemoved));\n }\n return edits;\n}\n\nfunction statementEdits(statement: ts.Statement, isRemoved: IsRemoved, text: string): TextEdit[] {\n if (ts.isImportDeclaration(statement)) {\n return importEdits(statement, isRemoved, text);\n }\n const declarations = (statement as ts.VariableStatement).declarationList.declarations;\n return declarations.every(isRemoved)\n ? [statementRemoval(statement, text)]\n : listRemovals(declarations, isRemoved);\n}\n\n/** The edits that remove the declarations, grouped by the statement each belongs to. */\nexport function removalEdits(removed: readonly RemovedDeclaration[], text: string): TextEdit[] {\n const nodes = new Set(removed.map((found) => found.node));\n const isRemoved: IsRemoved = (node) => nodes.has(node);\n const statements = new Set(\n removed.map(\n (found) =>\n ts.findAncestor(\n found.node,\n (node) => ts.isVariableStatement(node) || ts.isImportDeclaration(node),\n ) as ts.Statement,\n ),\n );\n return [...statements].flatMap((statement) => statementEdits(statement, isRemoved, text));\n}\n","import ts from \"@typescript/typescript6\";\nimport type { CallbackRewriter } from \"../../application/ports.js\";\nimport {\n type Change,\n type FileMigration,\n lineAt,\n type ManualStep,\n type TransformKeepReason,\n unchanged,\n} from \"../../domain/migration-findings.js\";\nimport { applyTextEdits, type TextEdit } from \"../../domain/text-edits.js\";\nimport { callbackTypeEdits } from \"./declared-types.js\";\nimport type { FactoryNames } from \"./factory-type-text.js\";\nimport { createFileBindings, type FileBindings } from \"./file-bindings.js\";\nimport { type GeneratorCall, type GeneratorOptions, generatorCalls } from \"./generator-calls.js\";\nimport {\n IR_CALLBACKS_OPTION,\n LEGACY_ONLY_CALLBACKS,\n legacyCallbackSteps,\n propertyNamed,\n TRANSFORM,\n} from \"./option-properties.js\";\nimport { optionsTypeEdits, optionsTypeReferences } from \"./options-type.js\";\nimport { plainScriptKind } from \"./script-regions.js\";\nimport { spreadSteps } from \"./spread-options.js\";\nimport { callbackAnnotations, callbackFunction, isSharedFunction } from \"./transform-callback.js\";\nimport { returnEdits, returnedExpressions } from \"./transform-returns.js\";\nimport { removalEdits, unusedDeclarations } from \"./unused-declarations.js\";\n\n/**\n * The CallbackRewriter port on the TypeScript 6 parser (ADR-015). In each `openapiTS(source, {…})`\n * call where `transform` is the only callback and every value it returns builds a type with\n * `ts.factory` or the helpers, the returns become TypeScript type text and `irCallbacks: true` is\n * added; the module-level constants and imports that only the old returns used are removed. Every\n * other legacy callback is reported, not changed: it still works, with a warning.\n */\n\n/** The value of `irCallbacks` in an object that the call types: the literal `true` stays `true`. */\nconst IR_CALLBACKS_TRUE = \"true\";\n/** In an untyped `const`, `true` widens to `boolean`, which no signature of `openapiTS` takes. */\nconst IR_CALLBACKS_TRUE_CONST = \"true as const\";\n/** The same assertion in a JavaScript file, where `as const` is not syntax. */\nconst IR_CALLBACKS_TRUE_CONST_JS = \"/** @type {const} */ (true)\";\n\ninterface CallFindings {\n readonly edits: TextEdit[];\n readonly changes: Change[];\n readonly manualSteps: ManualStep[];\n /** The `OpenAPITSOptions` names of rewritten options, retargeted once per file. */\n readonly typeReferences: ts.Identifier[];\n}\n\ntype OwnOptions = Extract<GeneratorOptions, { kind: \"own\" }>;\n\nconst noFindings = (): CallFindings => ({\n edits: [],\n changes: [],\n manualSteps: [],\n typeReferences: [],\n});\n\n/**\n * A declared return type names TypeScript nodes (`ts.TypeNode`), which type text does not match,\n * so it is removed and the type is inferred from the new returns.\n */\nfunction returnTypeEdits(callback: ts.FunctionLikeDeclaration, text: string): TextEdit[] {\n const type = callback.type;\n if (type === undefined) {\n return [];\n }\n const colon = text.lastIndexOf(\":\", type.getStart());\n return [{ start: colon, end: type.getEnd(), text: \"\" }];\n}\n\n/** The edits for the returns of `transform`, or the reason to keep it. */\nfunction transformEdits(\n property: ts.ObjectLiteralElementLike,\n names: FactoryNames,\n text: string,\n): TextEdit[] | TransformKeepReason {\n const callback = callbackFunction(property, names);\n if (callback?.body === undefined) {\n return \"not-a-function\";\n }\n if (isSharedFunction(property, names)) {\n return \"shared-function\";\n }\n const declared = callbackTypeEdits(\n callbackAnnotations(property, names),\n callback,\n names.bindings,\n );\n if (declared === undefined) {\n return \"declared-type\";\n }\n const edits = [...returnTypeEdits(callback, text), ...declared];\n for (const returned of returnedExpressions(callback.body)) {\n const returnEditList = returnEdits(returned, names);\n if (returnEditList === undefined) {\n return \"unknown-return\";\n }\n edits.push(...returnEditList);\n }\n return edits;\n}\n\n/** The value of the added `irCallbacks`, which must keep the type `true` (TS2769 otherwise). */\nfunction irCallbacksValue(options: OwnOptions): string {\n if (options.isContextuallyTyped) {\n return IR_CALLBACKS_TRUE;\n }\n const isJavaScript = (options.options.flags & ts.NodeFlags.JavaScriptFile) !== 0;\n return isJavaScript ? IR_CALLBACKS_TRUE_CONST_JS : IR_CALLBACKS_TRUE_CONST;\n}\n\n/**\n * The `irCallbacks` option, placed before `transform`: on its own line with the same\n * indentation when `transform` starts a line, else on the same line.\n */\nfunction irCallbacksOption(text: string, transformStart: number, value: string): string {\n const lineStart = text.lastIndexOf(\"\\n\", transformStart - 1) + 1;\n const before = text.slice(lineStart, transformStart);\n const option = `${IR_CALLBACKS_OPTION}: ${value},`;\n return /^\\s*$/.test(before) ? `${option}\\n${before}` : `${option} `;\n}\n\n/**\n * Why the options keep their `transform`, or undefined. A spread (`...base`) may bring callbacks\n * that need TypeScript nodes, `irCallbacks`, or a type of `OpenAPITSOptions` that the IR return\n * does not fit, and the tool cannot see them.\n */\nfunction keepReason(options: ts.ObjectLiteralExpression): TransformKeepReason | undefined {\n const hasOther = LEGACY_ONLY_CALLBACKS.some((name) => propertyNamed(options, name) !== undefined);\n if (hasOther) {\n return \"other-callbacks\";\n }\n return options.properties.some(ts.isSpreadAssignment) ? \"spread-options\" : undefined;\n}\n\n/** The rewrite of `transform` with the options types to retarget, or the reason to keep it. */\nfunction transformRewrite(\n transform: ts.ObjectLiteralElementLike,\n options: OwnOptions,\n names: FactoryNames,\n text: string,\n) {\n const edits = keepReason(options.options) ?? transformEdits(transform, names, text);\n if (typeof edits === \"string\") {\n return edits;\n }\n const annotations = [...options.annotations, ...callbackAnnotations(transform, names)];\n const typeReferences = optionsTypeReferences(annotations, names.bindings);\n return typeReferences === undefined ? \"typed-options\" : { edits, typeReferences };\n}\n\n/** The findings of one `openapiTS(source, options)` call with an options object literal. */\nfunction migrateOptions(options: OwnOptions, text: string, names: FactoryNames): CallFindings {\n // With irCallbacks set, the callbacks already use the IR form: nothing to migrate.\n if (propertyNamed(options.options, IR_CALLBACKS_OPTION) !== undefined) {\n return noFindings();\n }\n const findings = noFindings();\n findings.manualSteps.push(...legacyCallbackSteps(options.options, text));\n findings.manualSteps.push(...spreadSteps(options.options, text, names.bindings));\n const transform = propertyNamed(options.options, TRANSFORM);\n if (transform === undefined) {\n return findings;\n }\n const start = transform.getStart();\n const line = lineAt(text, start);\n const result = transformRewrite(transform, options, names, text);\n if (typeof result === \"string\") {\n findings.manualSteps.push({ kind: \"transform-not-rewritten\", line, reason: result });\n return findings;\n }\n // Before the JSDoc of `transform`, which documents (and in JavaScript types) `transform`.\n const at = transform.getStart(undefined, true);\n const option = irCallbacksOption(text, at, irCallbacksValue(options));\n findings.edits.push({ start: at, end: at, text: option }, ...result.edits);\n findings.typeReferences.push(...result.typeReferences);\n findings.changes.push({ kind: \"transform-rewritten\", line });\n return findings;\n}\n\n/** Options that other code uses too: the callbacks are reported, never changed. */\nfunction sharedOptionsFindings(\n options: ts.ObjectLiteralExpression,\n text: string,\n bindings: FileBindings,\n): CallFindings {\n const findings = noFindings();\n if (propertyNamed(options, IR_CALLBACKS_OPTION) !== undefined) {\n return findings;\n }\n findings.manualSteps.push(...legacyCallbackSteps(options, text));\n findings.manualSteps.push(...spreadSteps(options, text, bindings));\n const transform = propertyNamed(options, TRANSFORM);\n if (transform !== undefined) {\n const line = lineAt(text, transform.getStart());\n findings.manualSteps.push({ kind: \"transform-not-rewritten\", line, reason: \"shared-options\" });\n }\n return findings;\n}\n\nfunction callFindings(found: GeneratorCall, text: string, names: FactoryNames): CallFindings {\n const options = found.options;\n switch (options?.kind) {\n case undefined:\n return noFindings();\n case \"own\":\n return migrateOptions(options, text, names);\n case \"shared\":\n return sharedOptionsFindings(options.options, text, names.bindings);\n case \"unknown\": {\n const line = lineAt(text, options.expression.getStart());\n return { ...noFindings(), manualSteps: [{ kind: \"options-not-inspected\", line }] };\n }\n }\n}\n\n/** The findings of every generator call; options that several calls share are read once. */\nfunction findCallFindings(file: ts.SourceFile, text: string, names: FactoryNames): CallFindings {\n const all = noFindings();\n const seen = new Set<ts.Node>();\n for (const found of generatorCalls(file, names.bindings)) {\n const options = found.options?.kind === \"unknown\" ? undefined : found.options?.options;\n if (options !== undefined && seen.has(options)) {\n continue;\n }\n if (options !== undefined) {\n seen.add(options);\n }\n const findings = callFindings(found, text, names);\n all.edits.push(...findings.edits);\n all.changes.push(...findings.changes);\n all.manualSteps.push(...findings.manualSteps);\n all.typeReferences.push(...findings.typeReferences);\n }\n return all;\n}\n\n/** The rewrite of a file that calls the generator, with the declarations it leaves unused. */\nfunction rewriteFile(file: ts.SourceFile, names: FactoryNames): FileMigration {\n const text = file.text;\n const { edits, changes, manualSteps, typeReferences } = findCallFindings(file, text, names);\n // The options type edits rename uses of an import, which leaves it in use, not unused.\n const removed = unusedDeclarations(names, edits);\n for (const found of removed) {\n changes.push({\n kind: \"declaration-removed\",\n line: lineAt(text, found.node.getStart()),\n name: found.name,\n });\n }\n const typeEdits = optionsTypeEdits(typeReferences, names.bindings);\n const allEdits = [...edits, ...typeEdits, ...removalEdits(removed, text)];\n return { text: applyTextEdits(text, allEdits), changes, manualSteps };\n}\n\nclass TypescriptCallbackRewriter implements CallbackRewriter {\n rewrite(text: string, path: string): FileMigration {\n // Single-file components (`.vue`, `.svelte`, `.astro`) are not plain scripts; they are left.\n const scriptKind = plainScriptKind(path);\n if (scriptKind === undefined) {\n return unchanged(text);\n }\n const file = ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, scriptKind);\n const bindings = createFileBindings(file);\n if (!bindings.hasGenerator) {\n return unchanged(text);\n }\n return rewriteFile(file, { bindings, following: new Set() });\n }\n}\n\n/** A callback rewriter that parses each file with the TypeScript 6 parser. */\nexport function createTypescriptCallbackRewriter(): CallbackRewriter {\n return new TypescriptCallbackRewriter();\n}\n","import ts from \"@typescript/typescript6\";\nimport type { SourceStringScanner } from \"../../application/ports.js\";\nimport type { SourceString } from \"../../domain/source-migration.js\";\nimport { type ScriptRegion, scriptRegions } from \"./script-regions.js\";\n\n/**\n * The SourceStringScanner port on the TypeScript 6 parser (ADR-015). It finds every string\n * literal of a file's scripts, JSDoc types included, and the `/// <reference types>` directives,\n * and tells module specifiers from other strings by the syntax around them.\n */\n\nconst REQUIRE = \"require\";\nconst RESOLVE = \"resolve\";\n/** Methods of vitest's `vi` whose first argument is a module. */\nconst VITEST_METHODS: ReadonlySet<string> = new Set([\n \"mock\",\n \"doMock\",\n \"unmock\",\n \"doUnmock\",\n \"importActual\",\n \"importMock\",\n]);\n/** Methods of `jest` whose first argument is a module, older names included. */\nconst JEST_METHODS: ReadonlySet<string> = new Set([\n \"mock\",\n \"doMock\",\n \"unmock\",\n \"dontMock\",\n \"deepUnmock\",\n \"setMock\",\n \"requireActual\",\n \"requireMock\",\n \"createMockFromModule\",\n \"genMockFromModule\",\n \"unstable_mockModule\",\n \"unstable_unmockModule\",\n]);\n/** `vi.mock`, `jest.setMock`, bun's `mock.module` and `require.resolve`, by object. */\nconst MODULE_METHODS: ReadonlyMap<string, ReadonlySet<string>> = new Map([\n [\"vi\", VITEST_METHODS],\n [\"jest\", JEST_METHODS],\n [\"mock\", new Set([\"module\"])],\n [REQUIRE, new Set([RESOLVE])],\n]);\n\nfunction isIdentifierNamed(node: ts.Node, name: string): boolean {\n return ts.isIdentifier(node) && node.text === name;\n}\n\n/** The module methods, and `import.meta.resolve`. */\nfunction isModuleMethod(callee: ts.PropertyAccessExpression): boolean {\n const object = callee.expression;\n const method = callee.name.text;\n if (ts.isIdentifier(object)) {\n return MODULE_METHODS.get(object.text)?.has(method) ?? false;\n }\n return method === RESOLVE && ts.isMetaProperty(object);\n}\n\n/** Calls whose first argument is a module: `import()`, `require()` and the module methods. */\nfunction isModuleCall(call: ts.CallExpression): boolean {\n const callee = call.expression;\n if (callee.kind === ts.SyntaxKind.ImportKeyword || isIdentifierNamed(callee, REQUIRE)) {\n return true;\n }\n return ts.isPropertyAccessExpression(callee) && isModuleMethod(callee);\n}\n\nfunction isModuleSpecifier(literal: ts.StringLiteralLike | ts.TemplateExpression): boolean {\n const parent = literal.parent;\n if (\n ts.isImportDeclaration(parent) ||\n ts.isExportDeclaration(parent) ||\n ts.isJSDocImportTag(parent)\n ) {\n return parent.moduleSpecifier === literal;\n }\n if (ts.isCallExpression(parent)) {\n return parent.arguments[0] === literal && isModuleCall(parent);\n }\n if (ts.isModuleDeclaration(parent)) {\n return parent.name === literal;\n }\n // `import(\"openapi-fetch\").Client` in a type, also in a JSDoc type of a JavaScript file.\n if (ts.isLiteralTypeNode(parent)) {\n return ts.isImportTypeNode(parent.parent);\n }\n return ts.isExternalModuleReference(parent);\n}\n\ntype FoundStrings = Map<number, SourceString>;\n\n/** The value of a string literal; the text between the backticks of a template with `${…}`. */\nfunction stringValue(node: ts.StringLiteralLike | ts.TemplateExpression, file: ts.SourceFile) {\n return ts.isTemplateExpression(node)\n ? file.text.slice(node.getStart(file) + 1, node.getEnd() - 1)\n : node.text;\n}\n\n/** Adds the string literals under `root` to `found`; `file` starts at `offset` in the file. */\nfunction collectStrings(\n root: ts.Node,\n file: ts.SourceFile,\n offset: number,\n found: FoundStrings,\n): void {\n const visit = (node: ts.Node): void => {\n // A template with substitutions (`npx openapi-typescript ${spec}`) gives its text as written,\n // `${…}` included: the specifier rename then keeps the substitutions, and a command in it is\n // reported with them.\n if (ts.isStringLiteralLike(node) || ts.isTemplateExpression(node)) {\n // The value starts after the opening quote and ends before the closing one.\n const start = offset + node.getStart(file) + 1;\n const end = offset + node.getEnd() - 1;\n found.set(start, {\n start,\n end,\n value: stringValue(node, file),\n isModuleSpecifier: isModuleSpecifier(node),\n });\n }\n ts.forEachChild(node, visit);\n };\n visit(root);\n}\n\n/**\n * Every comment of a parsed file. Comments are the trivia in front of tokens, so the ranges in\n * front of each token cover them all, also where no node owns a JSDoc block. A trailing range\n * ends at the first line break and a leading one starts after it, so a token needs both. JSX text\n * is not trivia, and the JSDoc nodes are read from their comments, so neither is walked.\n */\nfunction commentRanges(file: ts.SourceFile): ts.CommentRange[] {\n const ranges = new Map<number, ts.CommentRange>();\n const add = (found: ts.CommentRange[] | undefined): void => {\n for (const range of found ?? []) {\n ranges.set(range.pos, range);\n }\n };\n const visit = (node: ts.Node): void => {\n if (node.kind === ts.SyntaxKind.JsxText) {\n return;\n }\n const children = node.getChildren(file).filter((child) => !ts.isJSDoc(child));\n if (children.length === 0) {\n add(ts.getTrailingCommentRanges(file.text, node.pos));\n add(ts.getLeadingCommentRanges(file.text, node.pos));\n }\n children.forEach(visit);\n };\n visit(file);\n return [...ranges.values()];\n}\n\nconst JSDOC_START = \"/**\";\nconst EMPTY_BLOCK_COMMENT = \"/**/\";\n/** A statement for an isolated JSDoc block to belong to, so that the parser reads the block. */\nconst JSDOC_HOST = \"\\nvar host;\";\nconst JSDOC_FILE_NAME = \"jsdoc.js\";\n\n/**\n * Adds the strings of one JSDoc block. The parser reads only the last block before a node it\n * keeps JSDoc for, so each block is parsed on its own, in front of a statement of its own.\n */\nfunction collectJsDocStrings(comment: string, offset: number, found: FoundStrings): void {\n const text = `${comment}${JSDOC_HOST}`;\n const file = ts.createSourceFile(JSDOC_FILE_NAME, text, ts.ScriptTarget.Latest, true);\n const host = file.statements[0] as ts.Statement;\n for (const doc of ts.getJSDocCommentsAndTags(host)) {\n collectStrings(doc, file, offset, found);\n }\n}\n\nfunction literalStrings(file: ts.SourceFile, offset: number): FoundStrings {\n const found: FoundStrings = new Map();\n collectStrings(file, file, offset, found);\n for (const range of commentRanges(file)) {\n const comment = file.text.slice(range.pos, range.end);\n if (comment.startsWith(JSDOC_START) && comment !== EMPTY_BLOCK_COMMENT) {\n collectJsDocStrings(comment, offset + range.pos, found);\n }\n }\n return found;\n}\n\nfunction regionStrings(region: ScriptRegion, path: string): SourceString[] {\n const file = ts.createSourceFile(path, region.text, ts.ScriptTarget.Latest, true, region.kind);\n const found = literalStrings(file, region.offset);\n for (const reference of file.typeReferenceDirectives) {\n const start = region.offset + reference.pos;\n const end = region.offset + reference.end;\n found.set(start, { start, end, value: reference.fileName, isModuleSpecifier: true });\n }\n return [...found.values()];\n}\n\nclass TypescriptSourceStringScanner implements SourceStringScanner {\n scan(text: string, path: string): SourceString[] {\n return scriptRegions(text, path)\n .flatMap((region) => regionStrings(region, path))\n .sort((left, right) => left.start - right.start);\n }\n}\n\n/** A source string scanner that parses each script with the TypeScript 6 parser. */\nexport function createTypescriptStringScanner(): SourceStringScanner {\n return new TypescriptSourceStringScanner();\n}\n","import { CST, isMap, isNode, isScalar, isSeq, parseAllDocuments, Scalar } from \"yaml\";\nimport type { YamlDocumentReader } from \"../../application/ports.js\";\nimport type { DocumentRead, TreeNode } from \"../../domain/config-documents.js\";\n\n/**\n * The YamlDocumentReader port on the `yaml` package (ADR-015). It keeps the source tokens, so\n * each scalar has the offsets of its text as written, in block and flow style alike, and reads\n * every document of a stream.\n */\n\ninterface Conversion {\n /** Inside a flow collection (`{ … }`, `[ … ]`), where `,` and brackets end a plain scalar. */\n readonly isFlow: boolean;\n}\n\ninterface TextRange {\n readonly start: number;\n readonly end: number;\n}\n\ntype Quoting = (value: string) => string;\n\nconst plain: Quoting = (value) => value;\nconst singleQuoted: Quoting = (value) => `'${value.replaceAll(\"'\", \"''\")}'`;\n// JSON is YAML: a JSON string is a valid double-quoted scalar for every value.\nconst doubleQuoted: Quoting = (value) => JSON.stringify(value);\n\n/** The quotings a new value may take, the old scalar's first; block scalars take none. */\nconst QUOTINGS: Readonly<Record<string, readonly Quoting[]>> = {\n [Scalar.PLAIN]: [plain, singleQuoted, doubleQuoted],\n [Scalar.QUOTE_SINGLE]: [singleQuoted, doubleQuoted],\n [Scalar.QUOTE_DOUBLE]: [doubleQuoted],\n};\n\n/** Whether `written`, at a place like the old scalar's, reads back as the string `value`. */\nfunction readsBack(written: string, value: string, isFlow: boolean): boolean {\n const [document] = parseAllDocuments(isFlow ? `[${written}]` : `- ${written}`);\n const list = document?.contents;\n const item = isSeq(list) && list.items.length === 1 ? list.items[0] : undefined;\n return document?.errors.length === 0 && isScalar(item) && item.value === value;\n}\n\n/**\n * The old scalar's quoting, or the next one that can hold the new value: a value that plain text\n * would read as another type or cut short (`true`, `a: b`, `x #y`) is quoted.\n */\nfunction encoderFor(quotings: readonly Quoting[], isFlow: boolean): (value: string) => string {\n return (value) =>\n quotings.map((quoting) => quoting(value)).find((text) => readsBack(text, value, isFlow)) ??\n doubleQuoted(value);\n}\n\n/** The content lines of a block scalar follow its header line, which its props make up. */\nfunction blockContent(token: CST.BlockScalar): TextRange {\n const headerLength = token.props.reduce((length, prop) => length + CST.stringify(prop).length, 0);\n const start = token.offset + headerLength;\n return { start, end: start + token.source.trimEnd().length };\n}\n\n/** The text of a scalar as written: without quotes, and without the header of a block scalar. */\nfunction contentRange(token: CST.Token | undefined, node: TextRange): TextRange {\n switch (token?.type) {\n case \"scalar\":\n return { start: token.offset, end: token.offset + token.source.length };\n case \"single-quoted-scalar\":\n case \"double-quoted-scalar\":\n return { start: token.offset + 1, end: token.offset + token.source.length - 1 };\n case \"block-scalar\":\n return blockContent(token);\n default:\n return node;\n }\n}\n\nfunction spanOf(node: { range?: [number, number, number] | null }): TextRange {\n const [start, end] = node.range ?? [0, 0];\n return { start, end };\n}\n\n/** A plain scalar that YAML reads as a number or boolean keeps its text as written. */\nfunction scalarText(node: Scalar): string | undefined {\n if (typeof node.value === \"string\") {\n return node.value;\n }\n const isWritten = node.type === Scalar.PLAIN && node.value !== null;\n return isWritten ? node.source : undefined;\n}\n\n/** The text that starts an escape in a quoted scalar, by the type of its token. */\nconst ESCAPES: Readonly<Partial<Record<string, string>>> = {\n \"single-quoted-scalar\": \"''\",\n \"double-quoted-scalar\": \"\\\\\",\n};\n\n/** Whether a quoted scalar has an escape in its text as written. */\nfunction isEscaped(token: CST.Token | undefined): boolean {\n const escapeStart = token === undefined ? undefined : ESCAPES[token.type];\n return escapeStart !== undefined && token !== undefined && \"source\" in token\n ? token.source.includes(escapeStart)\n : false;\n}\n\nfunction convertScalar(node: Scalar, isFlow: boolean): TreeNode {\n const span = spanOf(node);\n const value = scalarText(node);\n if (value === undefined) {\n return { kind: \"other\", ...span };\n }\n const quotings = node.type === undefined ? undefined : QUOTINGS[node.type];\n const isReplaceable =\n quotings !== undefined && node.anchor === undefined && node.tag === undefined;\n return {\n kind: \"scalar\",\n value,\n content: contentRange(node.srcToken, span),\n isFolded: node.type !== Scalar.BLOCK_LITERAL,\n isEscaped: isEscaped(node.srcToken),\n encode: isReplaceable ? encoderFor(quotings, isFlow) : undefined,\n ...span,\n };\n}\n\nconst flowOf = (conversion: Conversion, node: { flow?: boolean }): Conversion => ({\n isFlow: conversion.isFlow || node.flow === true,\n});\n\nfunction convert(node: unknown, conversion: Conversion): TreeNode {\n if (isScalar(node)) {\n return convertScalar(node, conversion.isFlow);\n }\n if (isSeq(node)) {\n const inner = flowOf(conversion, node);\n return { kind: \"list\", items: node.items.map((item) => convert(item, inner)), ...spanOf(node) };\n }\n if (isMap(node)) {\n const inner = flowOf(conversion, node);\n const entries = node.items.map((pair) => ({\n key: convert(pair.key, inner),\n value: convert(pair.value, inner),\n }));\n return { kind: \"map\", entries, ...spanOf(node) };\n }\n // An alias, or no value at all (`key:` with nothing after it).\n return { kind: \"other\", ...spanOf(isNode(node) ? node : {}) };\n}\n\n/**\n * The offset of the first key that repeats an earlier scalar key of the same map, under `node`.\n * YAML forbids such a key. The `yaml` package checks it by comparing each key with every key\n * before it, which took 25 s on a 6 MB OpenAPI document; this check is linear and finds the same\n * keys: scalar keys with the same value.\n */\nfunction duplicateKeyOffset(node: unknown): number | undefined {\n if (isSeq(node)) {\n return firstOffset(node.items);\n }\n if (!isMap(node)) {\n return undefined;\n }\n const keys = new Set<unknown>();\n for (const pair of node.items) {\n if (isScalar(pair.key) && keys.has(pair.key.value)) {\n return spanOf(pair.key).start;\n }\n keys.add(isScalar(pair.key) ? pair.key.value : pair.key);\n }\n return firstOffset(node.items.flatMap((pair) => [pair.key, pair.value]));\n}\n\nfunction firstOffset(nodes: readonly unknown[]): number | undefined {\n for (const node of nodes) {\n const offset = duplicateKeyOffset(node);\n if (offset !== undefined) {\n return offset;\n }\n }\n return undefined;\n}\n\n/**\n * How the `yaml` package parses a config. Its own duplicate key check compares each key with every\n * key before it, so it is turned off (`uniqueKeys: false`) for the linear one above; the source\n * tokens give the offsets of the strings the migrations edit.\n */\nexport const YAML_PARSE_OPTIONS = { keepSourceTokens: true, uniqueKeys: false } as const;\n\n/**\n * The `yaml` package stops at nesting deeper than the stack allows and reports it as an error, so\n * a tree it gives is shallow enough for the migrations to walk.\n */\nfunction read(text: string): DocumentRead {\n const documents = parseAllDocuments(text, YAML_PARSE_OPTIONS);\n const error = documents.flatMap((document) => document.errors)[0];\n if (error !== undefined) {\n return { kind: \"unreadable\", offset: error.pos[0] };\n }\n const duplicate = firstOffset(documents.map((document) => document.contents));\n if (duplicate !== undefined) {\n return { kind: \"unreadable\", offset: duplicate };\n }\n const roots = documents.flatMap((document) =>\n document.contents === null ? [] : [convert(document.contents, { isFlow: false })],\n );\n return { kind: \"read\", documents: roots };\n}\n\nexport function createYamlTextReader(): YamlDocumentReader {\n return { read };\n}\n","/**\n * What the migration renames (ENGINEERING_PLAN 10.1). openapi-typesafe is a drop-in successor, so\n * moving a project is a matter of names: packages, the CLI command and a few renamed CLI flags.\n */\n\n/** Original package name → openapi-typesafe package name. */\nexport const PACKAGE_RENAMES: ReadonlyMap<string, string> = new Map([\n [\"openapi-typescript\", \"openapi-typesafe\"],\n [\"openapi-fetch\", \"openapi-typesafe-fetch\"],\n [\"openapi-react-query\", \"openapi-typesafe-react-query\"],\n [\"openapi-typescript-helpers\", \"openapi-typesafe-helpers\"],\n]);\n\n/**\n * Whether `text` names an original package as written. Every rename and every report starts at\n * such a name, so a text without one has nothing to migrate. The generator command is one of the\n * names. A name written with escapes (`\"openapi\\x2dfetch\"` in YAML) is not found, so a file that\n * names a package only that way is left as it is.\n */\nexport function namesOriginalPackage(text: string): boolean {\n return [...PACKAGE_RENAMES.keys()].some((name) => text.includes(name));\n}\n\n/** The generator's command, as package.json scripts and shell lines run it. */\nexport const GENERATOR_COMMAND = \"openapi-typescript\";\nexport const MIGRATED_GENERATOR_COMMAND = \"openapi-typesafe\";\n\n/**\n * Flags that openapi-typescript 6 and 7 renamed; the openapi-typesafe CLI rejects the old spelling\n * with CLI_FLAG_REMOVED, so the migration writes the new one.\n */\nexport const FLAG_RENAMES: ReadonlyMap<string, string> = new Map([\n [\"--immutable-types\", \"--immutable\"],\n [\"-it\", \"--immutable\"],\n [\"--support-array-length\", \"--array-length\"],\n [\"--redoc\", \"--redocly\"],\n [\"-ap\", \"--additional-properties\"],\n]);\n\n/** The dependency fields of package.json that install packages, in the order npm documents them. */\nexport const DEPENDENCY_FIELDS = [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n] as const;\n\nexport type DependencyField = (typeof DEPENDENCY_FIELDS)[number];\n\n/**\n * Fields keyed by the name of a dependency: `peerDependenciesMeta` (npm, its `optional` flag),\n * `dependenciesMeta` (pnpm and Yarn). A key left with the old name loses its meaning: an optional\n * peer becomes required (finding M3).\n */\nexport const NAME_KEYED_FIELDS = [\"peerDependenciesMeta\", \"dependenciesMeta\"] as const;\n\n/** Fields that list the names of dependencies to bundle (npm reads both spellings). */\nexport const NAME_LIST_FIELDS = [\"bundleDependencies\", \"bundledDependencies\"] as const;\n\n/**\n * Catalogs in package.json: bun reads `catalog` and `catalogs` at the top level and under\n * `workspaces`. Their names are what `catalog:` dependencies point at.\n */\nexport const CATALOG_FIELD = \"catalog\";\nexport const NAMED_CATALOGS_FIELD = \"catalogs\";\nexport const WORKSPACES_FIELD = \"workspaces\";\n\n/** Fields that can name a package without installing it; they are reported, not rewritten. */\nexport const OVERRIDE_FIELDS = [\"overrides\", \"resolutions\"] as const;\n\n/** The pnpm settings of package.json; `pnpm.overrides` is one of them. */\nexport const PNPM_SETTINGS_FIELD = \"pnpm\";\n\n/** An original package that another package still needs as a peer dependency. */\nexport interface OldPeer {\n readonly peer: string;\n readonly range: string;\n}\n\n/**\n * Packages that keep a peer dependency on an original package after the migration. swr-openapi 5\n * takes its client type from openapi-fetch (`peerDependencies: { \"openapi-fetch\": \">=0.15\" }`).\n * TypeScript infers the paths of that generic type only from the same declaration, so the\n * project must alias openapi-fetch to openapi-typesafe-fetch (ADR-030).\n */\nexport const OLD_PEER_DEPENDENTS: ReadonlyMap<string, OldPeer> = new Map([\n [\"swr-openapi\", { peer: \"openapi-fetch\", range: \">=0.15\" }],\n]);\n\nconst PATH_SEPARATOR = \"/\";\n/** Bundlers read a query after a specifier (`?url`, `?raw`) as how to load the module. */\nconst QUERY_START = \"?\";\n\n/** A module specifier with the package renamed, and whether it reaches into the package. */\nexport interface RenamedSpecifier {\n readonly to: string;\n readonly isDeep: boolean;\n}\n\n/**\n * The new name of a whole package name, or of a name and a subpath (`openapi-fetch/x`, and the\n * `openapi-fetch/` prefix of an import map), with any query of a bundler kept as written\n * (`openapi-fetch?url`, `openapi-fetch/x.js?raw`); undefined for other specifiers.\n */\nexport function renamedSpecifier(value: string): RenamedSpecifier | undefined {\n const ends = [value.indexOf(PATH_SEPARATOR), value.indexOf(QUERY_START)].filter(\n (at) => at !== -1,\n );\n const name = value.slice(0, ends.length === 0 ? value.length : Math.min(...ends));\n const renamed = PACKAGE_RENAMES.get(name);\n if (renamed === undefined) {\n return undefined;\n }\n const rest = value.slice(name.length);\n const subpath = rest.split(QUERY_START, 1)[0] ?? rest;\n return { to: `${renamed}${rest}`, isDeep: subpath !== \"\" && subpath !== PATH_SEPARATOR };\n}\n\nconst NODE_MODULES_FOLDER = \"node_modules/\";\n\n/**\n * The old package whose installed files a path points into (`../node_modules/openapi-fetch/x.js`,\n * `node_modules/openapi-typescript/bin/cli.js`) or whose folder it names\n * (`./node_modules/openapi-fetch`), or undefined.\n */\nexport function oldPackageInNodeModules(path: string): string | undefined {\n return [...PACKAGE_RENAMES.keys()].find(\n (name) =>\n path.includes(`${NODE_MODULES_FOLDER}${name}${PATH_SEPARATOR}`) ||\n path.endsWith(`${NODE_MODULES_FOLDER}${name}`),\n );\n}\n","import { columnAt, type FileMigration, lineAt, unchanged } from \"./migration-findings.js\";\nimport { namesOriginalPackage } from \"./package-names.js\";\n\n/**\n * A JSON, JSONC or YAML config as a parser adapter reads it: a tree per document with the offsets\n * of its nodes in the text, so a migration replaces one key, value or word and keeps the rest of\n * the file byte for byte (comments, formatting, number literals, key order, duplicate keys).\n * Migrations that look for values by key path read the string values of the tree.\n */\n\ninterface Span {\n readonly start: number;\n readonly end: number;\n}\n\n/**\n * A text value: a JSON string, a YAML scalar. `start` and `end` cover the node with its quotes;\n * `content` covers its text as written: inside the quotes, and the content lines of a block\n * scalar without its `|` or `>` line. A YAML plain scalar that YAML reads as a number or a\n * boolean has its text as written as `value` (`1.10`, not 1.1).\n */\nexport interface TreeScalar extends Span {\n readonly kind: \"scalar\";\n readonly value: string;\n readonly content: Span;\n /** Line breaks fold to spaces in every YAML scalar but a literal block scalar (`|`). */\n readonly isFolded: boolean;\n /**\n * Whether the value differs from its text as written by more than folding: a JSON string or a\n * double-quoted YAML scalar with an escape (`\\\"`, `\\n`), a single-quoted one with `''`.\n */\n readonly isEscaped: boolean;\n /**\n * Writes a new value as the format needs it at this place, in the quoting of the old one when\n * that quoting can hold it. Undefined where a whole new value could change other places or the\n * type: a YAML block scalar, an anchored or a tagged scalar.\n */\n readonly encode: ((value: string) => string) | undefined;\n}\n\nexport interface TreeEntry {\n readonly key: TreeNode;\n readonly value: TreeNode;\n}\n\n/** A JSON object or YAML mapping, every entry as written, duplicate keys included, in order. */\nexport interface TreeMap extends Span {\n readonly kind: \"map\";\n readonly entries: readonly TreeEntry[];\n}\n\nexport interface TreeList extends Span {\n readonly kind: \"list\";\n readonly items: readonly TreeNode[];\n}\n\n/** A number, boolean or null in JSON, a YAML alias, an empty value. */\nexport interface TreeOther extends Span {\n readonly kind: \"other\";\n}\n\nexport type TreeNode = TreeMap | TreeList | TreeScalar | TreeOther;\n\n/**\n * The documents of a config (a YAML stream can hold several), or where the text stops being\n * valid. `offset` is undefined when the parser gives no place (it gave up on nesting deeper than\n * it can follow).\n */\nexport type DocumentRead =\n | { readonly kind: \"read\"; readonly documents: readonly TreeNode[] }\n | { readonly kind: \"unreadable\"; readonly offset: number | undefined };\n\n/** A key path: mapping keys and list indexes, from the root of the document. */\nexport type DocumentPath = readonly (string | number)[];\n\n/** A string value of a document with its key path. */\nexport interface DocumentString extends TreeScalar {\n readonly path: DocumentPath;\n}\n\nexport const isMap = (node: TreeNode | undefined): node is TreeMap => node?.kind === \"map\";\n\nexport const isScalar = (node: TreeNode): node is TreeScalar => node.kind === \"scalar\";\n\n/** The entries of `map` with a text key, as key and value. */\nexport function textEntries(map: TreeMap): { key: TreeScalar; value: TreeNode }[] {\n return map.entries.flatMap(({ key, value }) => (isScalar(key) ? [{ key, value }] : []));\n}\n\n/** The values of the entries of `map` whose key is `key`, in order. */\nexport function valuesAt(map: TreeMap, key: string): TreeNode[] {\n return textEntries(map)\n .filter((entry) => entry.key.value === key)\n .map((entry) => entry.value);\n}\n\n/** The maps at `key` of `map`, all of them if the key is there more than once. */\nexport function mapsAt(map: TreeMap, key: string): TreeMap[] {\n return valuesAt(map, key).filter(isMap);\n}\n\n/** The string values below `node` in document order; none below a key that is not text. */\nfunction stringsBelow(node: TreeNode, path: DocumentPath): DocumentString[] {\n switch (node.kind) {\n case \"scalar\":\n return [{ ...node, path }];\n case \"list\":\n return node.items.flatMap((item, index) => stringsBelow(item, [...path, index]));\n case \"map\":\n return textEntries(node).flatMap(({ key, value }) =>\n stringsBelow(value, [...path, key.value]),\n );\n default:\n return [];\n }\n}\n\n/** Every string value of the documents (not the keys), with its key path, in document order. */\nexport function documentStrings(documents: readonly TreeNode[]): DocumentString[] {\n return documents.flatMap((document) => stringsBelow(document, []));\n}\n\n/**\n * The key a value belongs to: the last key of its path, past list indexes, so the items of a list\n * (also of a nested list) belong to the key that holds the list.\n */\nexport function ownerKey(path: DocumentPath): string | undefined {\n return path.findLast((part): part is string => typeof part === \"string\");\n}\n\n/**\n * The migration of a config that the parser could not read. A broken config that names no\n * original package is not this migration's concern; one that does is left to the user, with the\n * place where it stops being valid.\n */\nexport function unreadableConfig(text: string, offset: number | undefined): FileMigration {\n if (!namesOriginalPackage(text)) {\n return unchanged(text);\n }\n const position =\n offset === undefined\n ? undefined\n : { line: lineAt(text, offset), column: columnAt(text, offset) };\n return { ...unchanged(text), manualSteps: [{ kind: \"config-unreadable\", position }] };\n}\n","/**\n * A file of the project that names another one by a relative reference (`./deps.json`,\n * `../schemas/Job.yaml`), which its tool resolves against the folder of the file.\n */\n\nconst SEPARATOR = \"/\";\nconst CURRENT_FOLDER = \".\";\nconst PARENT_FOLDER = \"..\";\n// A URL scheme (`https:`, `file:`): the tool fetches or reads such a file from where it says.\nconst URL_SCHEME = /^[a-z][a-z\\d+.-]*:/i;\n\n/** The project-relative path of `reference` from the folder of `fromPath`, or undefined. */\nfunction resolvedPath(fromPath: string, reference: string): string | undefined {\n const parts = fromPath.split(SEPARATOR).slice(0, -1);\n for (const part of reference.split(SEPARATOR)) {\n if (part === PARENT_FOLDER) {\n if (parts.pop() === undefined) {\n return undefined;\n }\n } else if (part !== CURRENT_FOLDER && part !== \"\") {\n parts.push(part);\n }\n }\n return parts.join(SEPARATOR);\n}\n\n/**\n * The project-relative path that `reference` in the file at `fromPath` names, or undefined for a\n * URL, an absolute path, a path outside the project, or the project folder itself.\n */\nexport function referencedProjectPath(fromPath: string, reference: string): string | undefined {\n const isOutside = URL_SCHEME.test(reference) || reference.startsWith(SEPARATOR);\n const path = isOutside ? undefined : resolvedPath(fromPath, reference);\n return path === \"\" ? undefined : path;\n}\n","import {\n documentStrings,\n isMap,\n isScalar,\n type TreeNode,\n textEntries,\n} from \"./config-documents.js\";\nimport { referencedProjectPath } from \"./relative-references.js\";\n\n/**\n * API descriptions are data: an example `command`, a `default`, a `script` in them is not a\n * command that anything runs, and a change to it reaches the generated JSDoc. They are not\n * migrated: the documents with a top-level key of their format, and the files that such a\n * document reaches by `$ref` (a split layout keeps a schema in `components/schemas/Job.yaml`,\n * which has no such key).\n */\n\n/**\n * The top-level keys of an API description: OpenAPI 3, Swagger 2, AsyncAPI, and the OpenAPI\n * Overlay and Arazzo documents that are written next to them.\n */\nconst API_DESCRIPTION_KEYS: readonly string[] = [\n \"openapi\",\n \"swagger\",\n \"asyncapi\",\n \"overlay\",\n \"arazzo\",\n];\nconst API_DESCRIPTION_KEY_SET: ReadonlySet<string> = new Set(API_DESCRIPTION_KEYS);\n\n/**\n * A line that can start such a key, in YAML (`openapi: 3.1.0`) or JSON (`\"openapi\": \"3.1.0\"`).\n * It only tells which texts to parse: the parsed keys decide.\n */\nconst DESCRIPTION_KEY_LINE_RE = new RegExp(\n `^[ \\\\t{]*[\"']?(?:${API_DESCRIPTION_KEYS.join(\"|\")})[\"']?[ \\\\t]*:`,\n \"m\",\n);\n\n/** Whether a text may be an API description, so it is worth parsing to tell. */\nexport const mayBeApiDescription = (text: string): boolean => DESCRIPTION_KEY_LINE_RE.test(text);\n\n/**\n * The version that each of these specs writes under its key (`openapi: 3.1.0`,\n * `swagger: \"2.0\"`, `asyncapi: 3.0.0`, `overlay: 1.0.0`, `arazzo: 1.0.1`): major and minor, an\n * optional patch and pre-release. A map there (a GitLab job named `openapi`) is no API\n * description.\n */\nconst SPEC_VERSION_RE = /^\\d+\\.\\d+(?:\\.\\d+)?(?:-[0-9A-Za-z.-]+)?$/;\n\n/** True when a document of the stream has a top-level key of an API description with a version. */\nexport const isApiDescription = (documents: readonly TreeNode[]): boolean =>\n documents.some(\n (root) =>\n isMap(root) &&\n textEntries(root).some(\n ({ key, value }) =>\n API_DESCRIPTION_KEY_SET.has(key.value) &&\n isScalar(value) &&\n SPEC_VERSION_RE.test(value.value),\n ),\n );\n\nconst REF_KEY = \"$ref\";\nconst FRAGMENT_START = \"#\";\n\n/**\n * The project files that the `$ref` values of the document at `path` name, without their\n * fragment (`./schemas/Job.yaml#/Job`). A reference inside the document (`#/components/…`), a URL\n * and a path outside the project name no file of it.\n */\nexport function referencedFiles(path: string, documents: readonly TreeNode[]): string[] {\n return documentStrings(documents)\n .filter((string) => string.path.at(-1) === REF_KEY)\n .flatMap(({ value }) => {\n // `#/components/…` leaves no file part, which names the folder of the document: no file.\n const file = value.split(FRAGMENT_START)[0] ?? \"\";\n const referenced = referencedProjectPath(path, file);\n return referenced === undefined ? [] : [referenced];\n });\n}\n","/**\n * The programs that run another program or install packages, so the migration can tell the\n * generator command and package names from the words of other commands. `docker run -it` keeps\n * its flag, `npm run openapi-typescript` names a script, and `npm i openapi-fetch` a package.\n */\n\n/** A program that runs the program named by its first argument that is not an option. */\nexport interface Launcher {\n /** The words that start it: `npx`, or `pnpm dlx`. */\n readonly words: readonly string[];\n /** Options whose value is the next word, so that word is not the program. */\n readonly valueOptions: ReadonlySet<string>;\n /** Options whose value is a package to install first (`npx -p <package>`). */\n readonly packageOptions: ReadonlySet<string>;\n /** Arguments before the program that are not options: the image of `docker run <image>`. */\n readonly operands: number;\n}\n\nconst NONE: ReadonlySet<string> = new Set();\n/** `npx -p`, `pnpm dlx --package`, `yarn dlx -p`, `bunx -p`. */\nconst PACKAGE_OPTIONS: ReadonlySet<string> = new Set([\"-p\", \"--package\"]);\n/** Options of npm, pnpm and yarn that take a value and may come before the subcommand. */\nconst PACKAGE_MANAGER_OPTIONS: ReadonlySet<string> = new Set([\n \"--filter\",\n \"-F\",\n \"--dir\",\n \"-C\",\n \"--prefix\",\n \"--cwd\",\n \"--workspace\",\n]);\n\nconst launcher = (\n words: readonly string[],\n packageOptions: ReadonlySet<string> = NONE,\n valueOptions: ReadonlySet<string> = NONE,\n): Launcher => {\n const allValueOptions = new Set([...valueOptions, ...packageOptions]);\n return { words, packageOptions, valueOptions: allValueOptions, operands: 0 };\n};\n\n/** Options of `docker run` and `docker exec` that take a value. */\nconst CONTAINER_OPTIONS: ReadonlySet<string> = new Set([\n \"-e\",\n \"--env\",\n \"--env-file\",\n \"-v\",\n \"--volume\",\n \"--mount\",\n \"-p\",\n \"--publish\",\n \"-w\",\n \"--workdir\",\n \"-u\",\n \"--user\",\n \"--name\",\n \"--network\",\n \"--entrypoint\",\n \"--platform\",\n \"-l\",\n \"--label\",\n \"-h\",\n \"--hostname\",\n \"--add-host\",\n]);\n\n/** `docker run <image> <command>`: the image comes first, then the command run in it. */\nconst container = (words: readonly string[]): Launcher => ({\n ...launcher(words, NONE, CONTAINER_OPTIONS),\n operands: 1,\n});\n\n/** A launcher with arguments before the program: the duration of `timeout 60 <command>`. */\nconst withOperands = (\n words: readonly string[],\n operands: number,\n valueOptions: ReadonlySet<string> = NONE,\n): Launcher => ({ ...launcher(words, NONE, valueOptions), operands });\n\n/** Options of `xargs` that take a value (GNU and BSD). */\nconst XARGS_OPTIONS: ReadonlySet<string> = new Set([\n \"-I\",\n \"-J\",\n \"-L\",\n \"-n\",\n \"-P\",\n \"-R\",\n \"-S\",\n \"-s\",\n \"-d\",\n \"-E\",\n \"-a\",\n \"--max-args\",\n \"--max-procs\",\n \"--max-lines\",\n \"--delimiter\",\n \"--arg-file\",\n]);\n\n/** Options of `node`, which `tsx` and `ts-node` take too, that are followed by a value. */\nconst NODE_OPTIONS: ReadonlySet<string> = new Set([\n \"-r\",\n \"--require\",\n \"--import\",\n \"--loader\",\n \"--env-file\",\n]);\n\n/**\n * The launchers, longest first, so `pnpm dlx` wins over `pnpm`. A bare `pnpm <name>`, `yarn\n * <name>` or `bun <name>` runs the binary `<name>` when no script has that name; `run` names a\n * script first, so `npm run`, `yarn run` and `bun run` are no launchers: a word after them that\n * names an old package is reported (command-migration.ts).\n */\nexport const LAUNCHERS: readonly Launcher[] = [\n launcher([\"npm\", \"exec\"], PACKAGE_OPTIONS),\n launcher([\"npm\", \"x\"], PACKAGE_OPTIONS),\n launcher([\"pnpm\", \"exec\"], NONE, PACKAGE_MANAGER_OPTIONS),\n launcher([\"pnpm\", \"dlx\"], new Set([\"--package\"])),\n launcher([\"yarn\", \"dlx\"], PACKAGE_OPTIONS),\n launcher([\"yarn\", \"exec\"]),\n launcher([\"bun\", \"x\"], PACKAGE_OPTIONS),\n withOperands([\"yarn\", \"workspace\"], 1),\n launcher([\"dotenvx\", \"run\"], NONE, new Set([\"-f\", \"--env-file\", \"-e\", \"--env\", \"--convention\"])),\n launcher(\n [\"doppler\", \"run\"],\n NONE,\n new Set([\"-p\", \"--project\", \"-c\", \"--config\", \"--token\", \"--mount\", \"--scope\"]),\n ),\n launcher([\"nx\", \"exec\"], NONE, new Set([\"--projects\", \"-p\", \"--exclude\"])),\n launcher([\"deno\", \"run\"], NONE, new Set([\"--config\", \"-c\", \"--import-map\", \"--location\"])),\n launcher([\"deno\", \"x\"]),\n launcher([\"npx\"], PACKAGE_OPTIONS, new Set([\"-c\", \"--call\"])),\n launcher([\"pnpx\"], PACKAGE_OPTIONS),\n launcher([\"bunx\"], PACKAGE_OPTIONS),\n // Like a bare `pnpm <name>`, a bare `bun <name>` runs the binary when no script has the name.\n launcher([\"bun\"], NONE, new Set([\"--cwd\", \"--filter\", \"-F\"])),\n launcher([\"corepack\"]),\n launcher([\"pnpm\"], NONE, PACKAGE_MANAGER_OPTIONS),\n launcher([\"yarn\"], NONE, PACKAGE_MANAGER_OPTIONS),\n launcher([\"node\"], NONE, NODE_OPTIONS),\n launcher([\"tsx\"], NONE, NODE_OPTIONS),\n launcher([\"ts-node\"], NONE, new Set([...NODE_OPTIONS, \"-P\", \"--project\", \"-O\", \"--compiler\"])),\n launcher([\"cross-env\"]),\n launcher([\"dotenv\"], NONE, new Set([\"-e\", \"-c\", \"-v\"])),\n launcher([\"env\"], NONE, new Set([\"-u\", \"--unset\", \"-C\", \"--chdir\"])),\n launcher([\"exec\"], NONE, new Set([\"-a\"])),\n launcher([\"command\"]),\n launcher([\"time\"]),\n launcher([\"nice\"], NONE, new Set([\"-n\", \"--adjustment\"])),\n withOperands([\"timeout\"], 1, new Set([\"-s\", \"--signal\", \"-k\", \"--kill-after\"])),\n launcher([\"xargs\"], NONE, XARGS_OPTIONS),\n launcher([\"nohup\"]),\n launcher([\"sudo\"], NONE, new Set([\"-u\", \"-g\"])),\n // The shell form of Dockerfile instructions runs the rest of the line in a shell.\n launcher([\"RUN\"], NONE, new Set([\"--mount\", \"--network\", \"--security\"])),\n launcher([\"CMD\"]),\n launcher([\"ENTRYPOINT\"]),\n container([\"docker\", \"run\"]),\n container([\"docker\", \"exec\"]),\n container([\"docker\", \"compose\", \"run\"]),\n container([\"docker\", \"compose\", \"exec\"]),\n container([\"podman\", \"run\"]),\n container([\"podman\", \"exec\"]),\n];\n\n/** A subcommand that installs, updates or removes the packages named by its other arguments. */\nexport interface Installer {\n readonly words: readonly string[];\n}\n\nconst installers = (manager: string, subcommands: readonly string[]): Installer[] =>\n subcommands.map((subcommand) => ({ words: [manager, subcommand] }));\n\nconst NPM_INSTALL = [\"install\", \"i\", \"add\", \"update\", \"up\", \"uninstall\", \"remove\", \"rm\", \"un\"];\n\nexport const INSTALLERS: readonly Installer[] = [\n ...installers(\"npm\", NPM_INSTALL),\n ...installers(\"pnpm\", [\"add\", \"update\", \"up\", \"remove\", \"rm\", \"uninstall\", \"un\"]),\n ...installers(\"yarn\", [\"add\", \"upgrade\", \"up\", \"remove\"]),\n // Yarn 1 installs global packages with `yarn global add`.\n { words: [\"yarn\", \"global\", \"add\"] },\n { words: [\"yarn\", \"global\", \"remove\"] },\n ...installers(\"bun\", [\"add\", \"a\", \"update\", \"remove\", \"rm\", \"install\", \"i\"]),\n ...installers(\"deno\", [\"add\", \"install\", \"i\", \"remove\", \"uninstall\"]),\n];\n\n/** `npm:` names a package in Deno commands (`deno run npm:openapi-typescript`). */\nexport const NPM_SPECIFIER_PREFIX = \"npm:\";\n","/**\n * The words of shell text: where a word ends, and its value after quote removal (POSIX 2.2, 2.3).\n * shell-words.ts splits a text into commands of these words.\n */\n\n/** One word of a command. `start` and `end` are offsets of the word as written, quotes included. */\nexport interface ShellWord {\n readonly start: number;\n readonly end: number;\n /** The word after quote removal: `\"a b\"` is `a b`. */\n readonly value: string;\n /** The word as written: `\"a b\"` is `\"a b\"`. */\n readonly raw: string;\n}\n\n/** A simple command: the words between two control operators. */\nexport type ShellCommand = readonly ShellWord[];\n\n/** Characters that end a command: `;`, `&`, `|`, subshells and command substitution. */\nexport const COMMAND_SEPARATORS: ReadonlySet<string> = new Set([\n \";\",\n \"&\",\n \"|\",\n \"(\",\n \")\",\n \"`\",\n \"\\n\",\n]);\n/** Characters that end a word without ending the command: blanks and redirections. */\nexport const WORD_BREAKS: ReadonlySet<string> = new Set([\" \", \"\\t\", \"\\r\", \"<\", \">\"]);\nconst BACKSLASH = \"\\\\\";\n/** Inside double quotes a backslash escapes only these characters (POSIX 2.2.3). */\nconst DOUBLE_QUOTE_ESCAPES: ReadonlySet<string> = new Set([\"$\", \"`\", '\"', BACKSLASH, \"\\n\"]);\n\n/** A quoted part of a word: where it ends (after the closing quote) and its value. */\ninterface QuotedPart {\n readonly end: number;\n readonly value: string;\n}\n\n/** A single-quoted part starting at `start`: everything up to the next `'` is literal. */\nfunction singleQuoted(text: string, start: number): QuotedPart {\n const close = text.indexOf(\"'\", start + 1);\n const end = close === -1 ? text.length : close + 1;\n return { end, value: text.slice(start + 1, close === -1 ? text.length : close) };\n}\n\n/** A double-quoted part starting at `start`, with its backslash escapes resolved. */\nfunction doubleQuoted(text: string, start: number): QuotedPart {\n let value = \"\";\n let index = start + 1;\n while (index < text.length && text[index] !== '\"') {\n const next = text[index + 1] ?? \"\";\n const isEscape = text[index] === BACKSLASH && DOUBLE_QUOTE_ESCAPES.has(next);\n value += isEscape ? (next === \"\\n\" ? \"\" : next) : text[index];\n index += isEscape ? 2 : 1;\n }\n return { end: Math.min(index + 1, text.length), value };\n}\n\nexport const isLineContinuation = (text: string, index: number): boolean =>\n text[index] === BACKSLASH && (text[index + 1] === \"\\n\" || text.startsWith(\"\\r\\n\", index + 1));\n\n/** `$((…))`: an arithmetic expansion (POSIX 2.6.4), whose `<<` is a shift, not a here-document. */\nconst ARITHMETIC_OPEN = \"$((\";\nconst NESTING_OPEN = \"(\";\nconst NESTING_CLOSE = \")\";\n/** The parentheses that `$((` opens and `))` closes. */\nconst ARITHMETIC_DEPTH = 2;\n\n/**\n * The arithmetic expansion at `start`, up to the `))` that closes it, as written: it holds an\n * expression, not commands, so its parentheses do not end the command. Undefined when it is not\n * closed, a syntax error that the shell reports.\n */\nfunction arithmeticExpansion(text: string, start: number): QuotedPart | undefined {\n let depth = ARITHMETIC_DEPTH;\n for (let index = start + ARITHMETIC_OPEN.length; index < text.length; index++) {\n depth += text[index] === NESTING_OPEN ? 1 : text[index] === NESTING_CLOSE ? -1 : 0;\n if (depth === 0) {\n return { end: index + 1, value: text.slice(start, index + 1) };\n }\n }\n return undefined;\n}\n\n/** `${…}`: a parameter expansion (POSIX 2.6.2), one part of a word up to its closing brace. */\nexport const PARAMETER_OPEN = \"${\";\nconst PARAMETER_CLOSE = \"}\";\n\n/**\n * The end of the parameter expansion at `start`, after the `}` that closes it, or undefined when\n * none does. A blank inside it does not end the word (`${GEN:-npx openapi-typescript}`), and a\n * quoted string, an escape or a nested expansion inside it is skipped whole.\n */\nexport function parameterExpansionEnd(text: string, start: number): number | undefined {\n let depth = 1;\n for (let index = start + PARAMETER_OPEN.length; index < text.length; ) {\n if (text.startsWith(PARAMETER_OPEN, index)) {\n depth += 1;\n index += PARAMETER_OPEN.length;\n } else if (text[index] === PARAMETER_CLOSE) {\n depth -= 1;\n index += 1;\n if (depth === 0) {\n return index;\n }\n } else {\n index = quotedOrEscapedEnd(text, index) ?? index + 1;\n }\n }\n return undefined;\n}\n\n/** The end of a quoted string or an escape at `index`, or undefined for another character. */\nfunction quotedOrEscapedEnd(text: string, index: number): number | undefined {\n const char = text[index];\n if (char === \"'\") {\n return singleQuoted(text, index).end;\n }\n if (char === '\"') {\n return doubleQuoted(text, index).end;\n }\n return char === BACKSLASH ? index + 2 : undefined;\n}\n\n/** The expansion parts of a word that are read whole: `$((…))` and `${…}`, as written. */\nfunction expansionPart(text: string, index: number): QuotedPart | undefined {\n if (text.startsWith(ARITHMETIC_OPEN, index)) {\n return arithmeticExpansion(text, index);\n }\n const end = text.startsWith(PARAMETER_OPEN, index)\n ? parameterExpansionEnd(text, index)\n : undefined;\n return end === undefined ? undefined : { end, value: text.slice(index, end) };\n}\n\n/**\n * The part of a word that starts at `index`: a quoted string, an escape, an arithmetic or a\n * parameter expansion, or one character.\n */\nexport function wordPart(text: string, index: number): QuotedPart {\n const char = text[index] as string;\n const expansion = expansionPart(text, index);\n if (expansion !== undefined) {\n return expansion;\n }\n if (char === \"'\") {\n return singleQuoted(text, index);\n }\n if (char === '\"') {\n return doubleQuoted(text, index);\n }\n if (char === BACKSLASH && index + 1 < text.length) {\n return { end: index + 2, value: text[index + 1] as string };\n }\n return { end: index + 1, value: char };\n}\n\n/** The head of a bash array assignment, `NAME=` or `NAME+=` right before its `(`. */\nconst ARRAY_HEAD_RE = /^[A-Za-z_][A-Za-z0-9_]*\\+?=$/;\n\n/**\n * The end of the list of a bash array assignment (`GEN=(npx openapi-typescript)`) at `index`,\n * after its `)`: bash reads it as part of the assignment word, not as a subshell. Quotes and\n * escapes in it are skipped whole. Undefined when no `)` closes it.\n */\nfunction arrayListEnd(text: string, index: number): number | undefined {\n let depth = 0;\n for (let at = index; at < text.length; ) {\n depth += text[at] === NESTING_OPEN ? 1 : text[at] === NESTING_CLOSE ? -1 : 0;\n if (depth === 0) {\n return at + 1;\n }\n at = quotedOrEscapedEnd(text, at) ?? at + 1;\n }\n return undefined;\n}\n\nconst endsWord = (text: string, index: number): boolean => {\n const char = text[index] as string;\n return WORD_BREAKS.has(char) || COMMAND_SEPARATORS.has(char) || isLineContinuation(text, index);\n};\n\n/** The word that starts at `start` (not a blank, separator or comment). */\nexport function readWord(text: string, start: number): ShellWord {\n let value = \"\";\n let index = start;\n while (index < text.length) {\n const isArrayList =\n text[index] === NESTING_OPEN && ARRAY_HEAD_RE.test(text.slice(start, index));\n const list = isArrayList ? arrayListEnd(text, index) : undefined;\n if (list === undefined && endsWord(text, index)) {\n break;\n }\n const part =\n list === undefined ? wordPart(text, index) : { end: list, value: text.slice(index, list) };\n value += part.value;\n index = part.end;\n }\n return { start, end: index, value, raw: text.slice(start, index) };\n}\n","import { type ShellCommand, type ShellWord, wordPart } from \"./shell-word-parts.js\";\n\n/**\n * The variables a shell text sets itself: `GEN=\"npx openapi-typescript\"` alone or before a\n * command, and the arguments of `export`, `readonly`, `local`, `declare` and `typeset`. A later\n * `$GEN a.yaml -it` runs what the value holds, so the value is read as a command line where it is\n * set, and the commands that expand the variable know which program it runs.\n */\n\n/** A word that assigns a variable (POSIX 2.9.1): a name, `=`, then the value. */\nexport const ASSIGNMENT_RE = /^([A-Za-z_][A-Za-z0-9_]*)=/;\n\n/** Builtins whose `NAME=value` arguments set variables of the shell. */\nconst DECLARATION_BUILTINS: ReadonlySet<string> = new Set([\n \"export\",\n \"readonly\",\n \"local\",\n \"declare\",\n \"typeset\",\n]);\n\nconst QUOTES: ReadonlySet<string> = new Set([\"'\", '\"']);\n/**\n * Characters that make an unquoted value more than a plain command line: quotes and escapes (its\n * offsets would not map onto the value), and expansions, whose result only the shell knows.\n */\nconst UNPLAIN_RE = /['\"\\\\$`]/;\n\n/** One assignment: the variable, its value after quote removal, and its word. */\nexport interface ShellAssignment {\n readonly name: string;\n readonly value: string;\n readonly word: ShellWord;\n}\n\n/** How many words at the start of a command are assignments. */\nfunction leadingAssignments(command: ShellCommand): number {\n const index = command.findIndex((word) => !ASSIGNMENT_RE.test(word.raw));\n return index === -1 ? command.length : index;\n}\n\n/** The assignments of one command, in order. */\nexport function shellAssignments(command: ShellCommand): ShellAssignment[] {\n const count = leadingAssignments(command);\n const isDeclaration = DECLARATION_BUILTINS.has(command[count]?.value ?? \"\");\n const words = [...command.slice(0, count), ...(isDeclaration ? command.slice(count + 1) : [])];\n return words.flatMap((word) => {\n const match = ASSIGNMENT_RE.exec(word.raw);\n const name = match?.[1];\n return name === undefined ? [] : [{ name, value: word.value.slice(name.length + 1), word }];\n });\n}\n\nconst ARRAY_OPEN = \"(\";\nconst ARRAY_CLOSE = \")\";\n\n/**\n * Whether an assignment sets a bash array (`GEN=(npx openapi-typescript)`). Its items are read\n * as a command line where they are written, but what an expansion of it runs (`$GEN` is the first\n * item, `\"${GEN[@]}\"` all of them) is not read: the commands after it are reported.\n */\nexport const isArrayAssignment = (assignment: ShellAssignment): boolean =>\n assignment.word.raw.startsWith(ARRAY_OPEN, assignment.name.length + 1);\n\n/**\n * The value of an assignment as written and its offset in the text, when its offsets map one to\n * one onto the text: a plain value, one quoted string (read as written, as a quoted command line\n * is), or the items of an array. Undefined for a value built of several parts.\n */\nexport function assignmentValueText(\n assignment: ShellAssignment,\n): { readonly text: string; readonly start: number } | undefined {\n const at = assignment.name.length + 1;\n const raw = assignment.word.raw.slice(at);\n const start = assignment.word.start + at;\n const quote = raw[0] ?? \"\";\n if (isArrayAssignment(assignment)) {\n return raw.endsWith(ARRAY_CLOSE) ? { text: raw.slice(1, -1), start: start + 1 } : undefined;\n }\n if (QUOTES.has(quote)) {\n const isOneString =\n raw.length > 1 && raw.endsWith(quote) && wordPart(raw, 0).end === raw.length;\n return isOneString ? { text: raw.slice(1, -1), start: start + 1 } : undefined;\n }\n return UNPLAIN_RE.test(raw) ? undefined : { text: raw, start };\n}\n","import { INSTALLERS, LAUNCHERS, type Launcher } from \"./command-launchers.js\";\nimport { ASSIGNMENT_RE } from \"./shell-assignments.js\";\nimport type { ShellCommand, ShellWord } from \"./shell-words.js\";\n\n/**\n * What the words of one shell command are: which word is the program it runs, after launchers\n * such as `npx`, `pnpm exec`, `cross-env` or `node`, and which words name packages to install.\n * The other words are arguments of whichever program owns them, and are never renamed for it.\n */\n\n/** A word that names a package, and the package part of it (`--package=x` names `x`). */\nexport interface PackageWord {\n readonly word: ShellWord;\n readonly value: string;\n}\n\nexport interface CommandRoles {\n /** The index of the program's word, or undefined for an install or an empty command. */\n readonly program: number | undefined;\n readonly packages: readonly PackageWord[];\n}\n\nconst END_OF_OPTIONS = \"--\";\n\nconst isOption = (word: ShellWord): boolean => word.value.startsWith(\"-\") && word.value.length > 1;\n\n/** The first word after the `NAME=value` assignments that may start a command. */\nfunction skipAssignments(words: ShellCommand, start: number): number {\n let index = start;\n while (index < words.length && ASSIGNMENT_RE.test((words[index] as ShellWord).raw)) {\n index++;\n }\n return index;\n}\n\n/** The Windows file suffixes of a program that npm, pnpm and yarn install (`npx.cmd`). */\nconst WINDOWS_PROGRAM_SUFFIX_RE = /\\.(?:cmd|exe|ps1)$/i;\n\n/** The name of a word of a launcher or installer: `npx` of `npx.cmd`. */\nconst entryWord = (word: ShellWord | undefined): string | undefined =>\n word?.value.replace(WINDOWS_PROGRAM_SUFFIX_RE, \"\");\n\n/** The first entry whose words start the command at `index`. */\nfunction matchingPrefix<T extends { readonly words: readonly string[] }>(\n entries: readonly T[],\n words: ShellCommand,\n index: number,\n): T | undefined {\n return entries.find((entry) =>\n entry.words.every((name, offset) => entryWord(words[index + offset]) === name),\n );\n}\n\n/** An option with its value in the same word (`--package=x`): the package it names, if any. */\nfunction inlineOptionPackage(word: ShellWord, launcher: Launcher): PackageWord | undefined {\n const equals = word.value.indexOf(\"=\");\n const name = word.value.slice(0, equals);\n return launcher.packageOptions.has(name)\n ? { word, value: word.value.slice(equals + 1) }\n : undefined;\n}\n\n/**\n * The index of the program a launcher runs: the first word after its options. Options that take\n * a value skip it, and the values of package options are collected into `packages`.\n */\nfunction launchedProgram(\n words: ShellCommand,\n start: number,\n launcher: Launcher,\n packages: PackageWord[],\n): number {\n let index = start;\n while (index < words.length && isOption(words[index] as ShellWord)) {\n const option = words[index++] as ShellWord;\n if (option.value === END_OF_OPTIONS) {\n break;\n }\n const inline = option.value.includes(\"=\") ? inlineOptionPackage(option, launcher) : undefined;\n if (inline !== undefined) {\n packages.push(inline);\n }\n const value = words[index];\n if (!option.value.includes(\"=\") && launcher.valueOptions.has(option.value) && value) {\n if (launcher.packageOptions.has(option.value)) {\n packages.push({ word: value, value: value.value });\n }\n index++;\n }\n }\n return index;\n}\n\n/** The package arguments of an install command: every word that is not an option. */\nconst installArguments = (words: ShellCommand, start: number): PackageWord[] =>\n words\n .slice(start)\n .filter((word) => !isOption(word))\n .map((word) => ({ word, value: word.value }));\n\n/** The roles of the words of one simple command. */\nexport function commandRoles(words: ShellCommand): CommandRoles {\n const packages: PackageWord[] = [];\n let index = skipAssignments(words, 0);\n while (index < words.length) {\n const installer = matchingPrefix(INSTALLERS, words, index);\n if (installer !== undefined) {\n packages.push(...installArguments(words, index + installer.words.length));\n return { program: undefined, packages };\n }\n const launcher = matchingPrefix(LAUNCHERS, words, index);\n if (launcher === undefined) {\n return { program: index, packages };\n }\n const start = index + launcher.words.length;\n const afterOptions = launchedProgram(words, start, launcher, packages);\n index = skipAssignments(words, afterOptions + launcher.operands);\n }\n return { program: undefined, packages };\n}\n","import { NPM_SPECIFIER_PREFIX } from \"./command-launchers.js\";\nimport type { ManualStep } from \"./migration-findings.js\";\nimport { GENERATOR_COMMAND, oldPackageInNodeModules, PACKAGE_RENAMES } from \"./package-names.js\";\nimport type { ShellCommand } from \"./shell-words.js\";\n\n/** The words of a command that name the original packages, apart from the roles they have. */\n\n/** A package name with an optional `npm:` prefix and `@version`. */\nexport function packageReference(value: string): { name: string; isPinned: boolean } {\n const bare = value.startsWith(NPM_SPECIFIER_PREFIX)\n ? value.slice(NPM_SPECIFIER_PREFIX.length)\n : value;\n const at = bare.indexOf(\"@\", 1);\n return { name: at === -1 ? bare : bare.slice(0, at), isPinned: at !== -1 };\n}\n\n/**\n * Whether a word names an original package: its name (`openapi-fetch`, `npm:x@1`), a file of it\n * in `node_modules`, or a path to the generator's binary (`$(npm bin)/openapi-typescript`).\n */\nfunction namesOldPackage(value: string): boolean {\n return (\n PACKAGE_RENAMES.has(packageReference(value).name) ||\n oldPackageInNodeModules(value) !== undefined ||\n value.endsWith(`/${GENERATOR_COMMAND}`)\n );\n}\n\n/** A manual step at an offset of the text. */\nexport interface WordStep {\n readonly offset: number;\n readonly manualStep: ManualStep;\n}\n\n/**\n * The words that name an original package at offsets no finding renamed or reported: an argument\n * of a program the tool does not know (`chronic openapi-typescript`), or a script name of\n * `npm run`. The tool cannot tell what runs them, so each is a manual step, never silence.\n */\nexport function unmigratedWordFindings(\n words: ShellCommand,\n handledOffsets: ReadonlySet<number>,\n locate: (offset: number) => string,\n): WordStep[] {\n return words\n .filter((word) => !handledOffsets.has(word.start) && namesOldPackage(word.value))\n .map((word) => ({\n offset: word.start,\n manualStep: { kind: \"old-name-in-command\", location: locate(word.start), word: word.value },\n }));\n}\n","import { commandRoles } from \"./command-roles.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { GENERATOR_COMMAND } from \"./package-names.js\";\nimport type { ShellCommand, ShellWord } from \"./shell-words.js\";\nimport type { VariableProgram } from \"./variable-programs.js\";\n\n/**\n * What the commands of a file know about its variables, and which commands run the generator.\n * The command migration reads them; each file kind (a Makefile, a Dockerfile, a YAML `env`, the\n * assignments of a shell text) answers them from its own definitions (shell-variables.ts).\n */\n\nconst RECIPE_PREFIX_RE = /^[@+-]+(?=.)/;\n\n/**\n * The command with the recipe prefix taken off the value of its first word, so `@npx …` runs\n * `npx`. A shell command never starts with an option, so this changes nothing else.\n */\nexport function withoutRecipePrefix(words: ShellCommand): ShellCommand {\n const [first, ...rest] = words;\n if (first === undefined || !RECIPE_PREFIX_RE.test(first.value)) {\n return words;\n }\n return [{ ...first, value: first.value.replace(RECIPE_PREFIX_RE, \"\") }, ...rest];\n}\n\n/** A program word that expands one variable the file sets: as written, and what it runs. */\nexport interface VariableProgramUse {\n readonly written: string;\n readonly program: VariableProgram;\n}\n\n/** A whole word that expands one variable the file sets: as written, and the value it gets. */\nexport interface VariableReference {\n readonly written: string;\n readonly value: string;\n}\n\n/**\n * The variables of a file as its commands use them. A program word can run the generator through\n * a variable (`$(OAT)` in a Makefile with `OAT := openapi-typescript`): the variable's value is\n * migrated where it is set, the flags after it where it is used. An argument can expand a\n * variable that holds flags (`$(FLAGS)` with `FLAGS := -it`); the variable may serve other\n * commands too, so its old flags are reported, not changed.\n */\nexport interface FileVariables {\n /** What a program word runs through a variable, or undefined when it expands none. */\n programAt(program: ShellWord): VariableProgramUse | undefined;\n referenceAt(word: ShellWord): VariableReference | undefined;\n}\n\nexport const NO_VARIABLES: FileVariables = {\n programAt: () => undefined,\n referenceAt: () => undefined,\n};\n\n/**\n * Whether a command runs the generator by its old name, so a variable set to it holds the\n * generator command.\n */\nexport function runsGenerator(command: ShellCommand): boolean {\n const words = withoutRecipePrefix(command);\n const { program } = commandRoles(words);\n const word = program === undefined ? undefined : words[program];\n return word !== undefined && packageReference(word.value).name === GENERATOR_COMMAND;\n}\n","import type { ShellCommand, ShellWord } from \"./shell-word-parts.js\";\n\n/**\n * Code given to an interpreter on the command line: `python3 -c '…'`, `node -e \"…\"`,\n * `ruby -e '…'`. The word after the option is code of that language, not a command line, so the\n * migration does not read it as commands; it reports the code when it names an old package.\n */\n\n/** The options whose next word is code, by interpreter. */\nconst CODE_OPTIONS: ReadonlyMap<string, ReadonlySet<string>> = new Map([\n [\"python\", new Set([\"-c\"])],\n [\"node\", new Set([\"-e\", \"--eval\", \"-p\", \"--print\"])],\n [\"bun\", new Set([\"-e\", \"--eval\", \"-p\", \"--print\"])],\n [\"ruby\", new Set([\"-e\"])],\n [\"perl\", new Set([\"-e\", \"-E\"])],\n]);\n/** A versioned Python program (`python3`, `python3.12`) and the Windows launcher `py`. */\nconst PYTHON_RE = /^(?:python[0-9.]*|py)$/;\nconst PYTHON = \"python\";\nconst PATH_SEPARATOR_RE = /[/\\\\]/;\nconst WINDOWS_EXECUTABLE_RE = /\\.exe$/i;\nconst OPTION_START = \"-\";\n\n/** The interpreter of a program word: `python` of `/usr/bin/python3.12`, `node` of `node.exe`. */\nfunction interpreterOf(word: ShellWord): string {\n const name = (word.value.split(PATH_SEPARATOR_RE).at(-1) ?? \"\").replace(\n WINDOWS_EXECUTABLE_RE,\n \"\",\n );\n return PYTHON_RE.test(name) ? PYTHON : name;\n}\n\n/** Inline code of a command: the word that holds it, and the program that runs it. */\nexport interface InlineCode {\n readonly code: ShellWord;\n readonly program: ShellWord;\n}\n\n/**\n * The code word after the options of the interpreter at `program`: the word after a code option\n * that comes before the first argument (`node -e '…'`, not `node a.js -e '…'`, where the option\n * goes to the script).\n */\nfunction codeAfter(command: ShellCommand, program: number): ShellWord | undefined {\n const options = CODE_OPTIONS.get(interpreterOf(command[program] as ShellWord));\n for (let index = program + 1; options !== undefined && index < command.length; index += 1) {\n const word = command[index] as ShellWord;\n if (!word.value.startsWith(OPTION_START)) {\n return undefined;\n }\n if (options.has(word.value)) {\n return command[index + 1];\n }\n }\n return undefined;\n}\n\n/**\n * The first inline code of a command. An interpreter is found at any word, since launchers run\n * one (`npx -p x node -e '…'`, `docker run python python3 -c '…'`), and `node` is a launcher too.\n */\nexport function inlineCode(command: ShellCommand): InlineCode | undefined {\n for (const [index, program] of command.entries()) {\n const code = codeAfter(command, index);\n if (code !== undefined) {\n return { code, program };\n }\n }\n return undefined;\n}\n","import { PARAMETER_OPEN, parameterExpansionEnd } from \"./shell-word-parts.js\";\n\n/**\n * The parameter expansions of a word that give a word of their own when the variable is unset or\n * empty (POSIX 2.6.2): `${GEN:-npx openapi-typescript}`, `${GEN:=…}`, and when it is set:\n * `${GEN:+…}`. That word is command text as written, the common \"overridable command\" idiom, so\n * it is read as a command line where it is written. The value is the variable's or that word,\n * which only the shell knows.\n */\n\n/** How an expansion uses its word: instead of an unset variable, as its value too, or if set. */\nexport type ExpansionUse = \"default\" | \"assign\" | \"alternative\";\n\n/** An expansion with a word: the variable, how it uses the word, the word and where it is. */\nexport interface WordExpansion {\n readonly name: string;\n readonly use: ExpansionUse;\n /** The word as written, between the operator and the closing brace. */\n readonly text: string;\n /** The offset of `text` in the text that was scanned. */\n readonly start: number;\n /** The offsets of the whole expansion, `${` to `}`. */\n readonly expansionStart: number;\n readonly expansionEnd: number;\n}\n\n/** `${NAME`, then an operator with a word: `-`, `=`, `+`, each also with `:` before it. */\nconst EXPANSION_HEAD_RE = /^\\$\\{([A-Za-z_][A-Za-z0-9_]*):?([-=+])/;\nconst USES: Readonly<Record<string, ExpansionUse>> = {\n \"-\": \"default\",\n \"=\": \"assign\",\n \"+\": \"alternative\",\n};\nconst SINGLE_QUOTE = \"'\";\nconst BACKSLASH = \"\\\\\";\n\n/** The expansion with a word at `start` of `text`, or undefined for any other expansion. */\nfunction expansionAt(text: string, start: number): WordExpansion | undefined {\n const head = EXPANSION_HEAD_RE.exec(text.slice(start));\n const end = head === null ? undefined : parameterExpansionEnd(text, start);\n if (head === null || end === undefined) {\n return undefined;\n }\n const wordStart = start + head[0].length;\n return {\n name: head[1] as string,\n use: USES[head[2] as string] as ExpansionUse,\n text: text.slice(wordStart, end - 1),\n start: wordStart,\n expansionStart: start,\n expansionEnd: end,\n };\n}\n\n/**\n * The expansions with a word in a word as written, outside single quotes (where `$` is a\n * character), in double quotes too. Nested ones are found when their word is read as commands.\n */\nexport function wordExpansions(raw: string): WordExpansion[] {\n const found: WordExpansion[] = [];\n for (let index = 0; index < raw.length; ) {\n const char = raw[index];\n if (char === SINGLE_QUOTE) {\n const close = raw.indexOf(SINGLE_QUOTE, index + 1);\n index = close === -1 ? raw.length : close + 1;\n } else if (char === BACKSLASH) {\n index += 2;\n } else if (raw.startsWith(PARAMETER_OPEN, index)) {\n const expansion = expansionAt(raw, index);\n found.push(...(expansion === undefined ? [] : [expansion]));\n index = expansion?.expansionEnd ?? index + PARAMETER_OPEN.length;\n } else {\n index += 1;\n }\n }\n return found;\n}\n\nconst DOUBLE_QUOTE = '\"';\n\n/** The expansion that is a whole word, also in double quotes: `${GEN:-…}`, `\"${GEN:-…}\"`. */\nexport function wholeWordExpansion(raw: string): WordExpansion | undefined {\n const isQuoted = raw.length > 1 && raw.startsWith(DOUBLE_QUOTE) && raw.endsWith(DOUBLE_QUOTE);\n const inner = isQuoted ? 1 : 0;\n const [expansion] = wordExpansions(raw);\n const isWhole =\n expansion?.expansionStart === inner && expansion.expansionEnd === raw.length - inner;\n return isWhole ? expansion : undefined;\n}\n","import { readWord } from \"./shell-word-parts.js\";\n\n/**\n * Here-documents (POSIX 2.7.4): the lines after a command line that are the input of a command.\n * Their body is data, so its quotes do not open a word (shell-words.ts reads the commands).\n */\n\n/** `<<WORD`, `<<'WORD'`, `<<-WORD`: a here-document (POSIX 2.7.4); `<<<` is a here-string. */\nconst HEREDOC_OPERATOR = \"<<\";\nconst HERE_STRING_OPERATOR = \"<<<\";\nconst STRIP_TABS = \"-\";\nconst LINE_BREAK = \"\\n\";\nconst LEADING_TABS_RE = /^\\t+/;\nconst CARRIAGE_RETURN_RE = /\\r$/;\n\n/** A here-document waiting for its body: the lines after the line of its operator. */\nexport interface PendingHeredoc {\n readonly delimiter: string;\n readonly isTabStripped: boolean;\n /** The index of the command whose input the body is. */\n readonly command: number;\n /** Spaces at the start of each line that the shell does not see (shellCommands). */\n readonly indent: number;\n}\n\n/** The body of a here-document, and the command whose input it is. */\nexport interface HeredocBody {\n readonly command: number;\n readonly start: number;\n readonly text: string;\n}\n\n/**\n * The here-document operator at `index` and where its delimiter word ends, or undefined. A\n * here-string operator gives no here-document, and ends where its `<<<` ends.\n */\nexport function heredocAt(\n text: string,\n index: number,\n where: { readonly command: number; readonly indent: number },\n): { pending?: PendingHeredoc; end: number } | undefined {\n if (text.startsWith(HERE_STRING_OPERATOR, index)) {\n return { end: index + HERE_STRING_OPERATOR.length };\n }\n if (!text.startsWith(HEREDOC_OPERATOR, index)) {\n return undefined;\n }\n let start = index + HEREDOC_OPERATOR.length;\n const isTabStripped = text[start] === STRIP_TABS;\n start += isTabStripped ? 1 : 0;\n while (text[start] === \" \" || text[start] === \"\\t\") {\n start++;\n }\n const word = readWord(text, start);\n // The quotes of the delimiter only turn off expansion in the body; its value ends the body.\n const pending: PendingHeredoc = { delimiter: word.value, isTabStripped, ...where };\n return word.value === \"\" ? undefined : { pending, end: word.end };\n}\n\n/** Whether the line from `lineStart` to `end` is the delimiter line of a here-document. */\nfunction isDelimiterLine(text: string, lineStart: number, end: number, heredoc: PendingHeredoc) {\n let first = lineStart;\n while (first < lineStart + heredoc.indent && text[first] === \" \") {\n first++;\n }\n const line = text.slice(first, end).replace(CARRIAGE_RETURN_RE, \"\");\n const compared = heredoc.isTabStripped ? line.replace(LEADING_TABS_RE, \"\") : line;\n return compared === heredoc.delimiter;\n}\n\n/** The body of one here-document from `start`, and where its delimiter line ends. */\nfunction readBody(text: string, start: number, heredoc: PendingHeredoc) {\n let lineStart = start;\n while (lineStart < text.length) {\n const lineEnd = text.indexOf(LINE_BREAK, lineStart);\n const end = lineEnd === -1 ? text.length : lineEnd;\n if (isDelimiterLine(text, lineStart, end, heredoc)) {\n const body = { command: heredoc.command, start, text: text.slice(start, lineStart) };\n return { body, end: Math.min(end + 1, text.length) };\n }\n lineStart = end + 1;\n }\n // No delimiter line: the body runs to the end of the text, as the shell reads it.\n return { body: { command: heredoc.command, start, text: text.slice(start) }, end: text.length };\n}\n\n/** The bodies of the pending here-documents from `start`, one after another, and their end. */\nexport function readBodies(text: string, start: number, pending: readonly PendingHeredoc[]) {\n const bodies: HeredocBody[] = [];\n let end = start;\n for (const heredoc of pending) {\n const read = readBody(text, end, heredoc);\n bodies.push(read.body);\n end = read.end;\n }\n return { bodies, end };\n}\n","/**\n * GitHub Actions expressions in shell text (`${{ inputs.gen || 'npx openapi-typescript' }}`).\n * The runner puts the value of an expression into the script before the shell runs, so a string\n * literal of the expression is command text where it is written, the \"overridable command\" idiom\n * of reusable workflows. The rest of the expression (an input, a matrix value) is known only to\n * the run.\n */\n\n/** A string literal of an expression: its text between the quotes, and where that text starts. */\nexport interface ExpressionLiteral {\n readonly text: string;\n readonly start: number;\n}\n\n/** In shell text `${{` is a bad substitution, so no valid shell text holds one otherwise. */\nconst EXPRESSION_OPEN = \"${{\";\nconst EXPRESSION_CLOSE = \"}}\";\nconst LITERAL_QUOTE = \"'\";\nconst SHELL_SINGLE_QUOTE = \"'\";\nconst BACKSLASH = \"\\\\\";\nconst DOUBLE_QUOTE = '\"';\n\n/**\n * The end of the expression at `start`, after the `}}` that closes it, or undefined when none\n * does. Its string literals are skipped whole; `''` in one reads as its end and a new start.\n */\nfunction expressionEnd(text: string, start: number): number | undefined {\n for (let index = start + EXPRESSION_OPEN.length; index < text.length; ) {\n if (text.startsWith(EXPRESSION_CLOSE, index)) {\n return index + EXPRESSION_CLOSE.length;\n }\n const close = text[index] === LITERAL_QUOTE ? text.indexOf(LITERAL_QUOTE, index + 1) : index;\n index = close === -1 ? text.length : close + 1;\n }\n return undefined;\n}\n\n/**\n * The string literals between `start` and `end` of `raw`. A literal with an escaped quote (`''`)\n * is left out: its value is not the text as written, so its offsets would not map onto the text.\n */\nfunction literalsIn(raw: string, start: number, end: number): ExpressionLiteral[] {\n const found: ExpressionLiteral[] = [];\n let open = raw.indexOf(LITERAL_QUOTE, start);\n while (open !== -1 && open < end) {\n let close = raw.indexOf(LITERAL_QUOTE, open + 1);\n let isEscaped = false;\n while (close !== -1 && raw[close + 1] === LITERAL_QUOTE) {\n isEscaped = true;\n close = raw.indexOf(LITERAL_QUOTE, close + 2);\n }\n if (close === -1) {\n break;\n }\n found.push(...(isEscaped ? [] : [{ text: raw.slice(open + 1, close), start: open + 1 }]));\n open = raw.indexOf(LITERAL_QUOTE, close + 1);\n }\n return found;\n}\n\n/**\n * The string literals of the expressions in a word as written, outside shell single quotes: a\n * value put inside them is data for the program, not a command.\n */\nexport function expressionLiterals(raw: string): ExpressionLiteral[] {\n const found: ExpressionLiteral[] = [];\n for (let index = 0; index < raw.length; ) {\n if (raw[index] === SHELL_SINGLE_QUOTE) {\n const close = raw.indexOf(SHELL_SINGLE_QUOTE, index + 1);\n index = close === -1 ? raw.length : close + 1;\n } else if (raw[index] === BACKSLASH) {\n index += 2;\n } else if (raw.startsWith(EXPRESSION_OPEN, index)) {\n const end = expressionEnd(raw, index) ?? raw.length;\n found.push(...literalsIn(raw, index + EXPRESSION_OPEN.length, end));\n index = end;\n } else {\n index += 1;\n }\n }\n return found;\n}\n\n/** Whether a word is one expression as a whole, also in double quotes: `\"${{ inputs.gen }}\"`. */\nexport function isWholeExpression(raw: string): boolean {\n const isQuoted = raw.length > 1 && raw.startsWith(DOUBLE_QUOTE) && raw.endsWith(DOUBLE_QUOTE);\n const inner = isQuoted ? 1 : 0;\n return raw.startsWith(EXPRESSION_OPEN, inner) && expressionEnd(raw, inner) === raw.length - inner;\n}\n","import { type HeredocBody, heredocAt, type PendingHeredoc, readBodies } from \"./here-documents.js\";\nimport { inlineCode } from \"./inline-code.js\";\nimport { wordExpansions } from \"./parameter-expansions.js\";\nimport { assignmentValueText, shellAssignments } from \"./shell-assignments.js\";\nimport {\n COMMAND_SEPARATORS,\n isLineContinuation,\n readWord,\n type ShellCommand,\n type ShellWord,\n WORD_BREAKS,\n wordPart,\n} from \"./shell-word-parts.js\";\nimport { expressionLiterals } from \"./workflow-expressions.js\";\n\nexport type { ShellCommand, ShellWord } from \"./shell-word-parts.js\";\n\nconst COMMENT = \"#\";\nconst LINE_BREAK = \"\\n\";\n\n/**\n * Splits shell text (a package.json script, a line of a shell script, Makefile or CI step) into\n * simple commands, each a list of words with their offsets. It follows the POSIX shell rules that\n * decide where a word and a command end: quotes, backslash escapes, line continuations, comments\n * and the control operators. It does not expand anything, so it never runs or guesses a value.\n */\n\n/** Where the blank, continuation or comment at `index` ends, or `index` if there is none. */\nfunction skipTrivia(text: string, index: number): number {\n const char = text[index] as string;\n if (WORD_BREAKS.has(char)) {\n return index + 1;\n }\n if (isLineContinuation(text, index)) {\n return text.indexOf(\"\\n\", index) + 1;\n }\n if (char === COMMENT) {\n const lineEnd = text.indexOf(\"\\n\", index);\n return lineEnd === -1 ? text.length : lineEnd;\n }\n return index;\n}\n\n/**\n * The commands of a text without nested ones, the bodies of its here-documents, and the commands\n * whose output a pipe gives to the next one (`cat <<EOF | sh`).\n */\ninterface TopLevel {\n readonly commands: ShellWord[][];\n readonly heredocs: HeredocBody[];\n readonly pipes: ReadonlySet<number>;\n}\n\n/**\n * A pipe; the two `|` of `||` give an empty command between the two around them, which is no\n * command that a pipe gives a here-document.\n */\nconst PIPE = \"|\";\n\n/**\n * The commands of `text`, in order, without nested ones. The body of a here-document is input\n * data, not commands: a `'` in it (`Don't edit`) opened a quote to the end of the text, and\n * every command after it was lost.\n */\nfunction topLevelCommands(text: string, indent: number): TopLevel {\n const commands: ShellWord[][] = [[]];\n const heredocs: HeredocBody[] = [];\n const pipes = new Set<number>();\n let pending: PendingHeredoc[] = [];\n let index = 0;\n while (index < text.length) {\n const afterTrivia = skipTrivia(text, index);\n const heredoc = heredocAt(text, index, { command: commands.length - 1, indent });\n if (heredoc !== undefined) {\n pending.push(...(heredoc.pending === undefined ? [] : [heredoc.pending]));\n index = heredoc.end;\n } else if (afterTrivia !== index) {\n index = afterTrivia;\n } else if (text[index] === LINE_BREAK && pending.length > 0) {\n const read = readBodies(text, index + 1, pending);\n heredocs.push(...read.bodies);\n pending = [];\n commands.push([]);\n index = read.end;\n } else if (COMMAND_SEPARATORS.has(text[index] as string)) {\n if (text[index] === PIPE) {\n pipes.add(commands.length - 1);\n }\n commands.push([]);\n index++;\n } else {\n const word = readWord(text, index);\n commands.at(-1)?.push(word);\n index = word.end;\n }\n }\n return { commands, heredocs, pipes };\n}\n\n/**\n * Reserved words (POSIX 2.4, and bash's `[[`) that open or close a compound command and are\n * followed by a command: `if a; then b; fi`, `while a; do b; done`, `! a`, `{ a; }`. They are\n * reserved only where a command name can stand, and only unquoted, so `echo then` and `\"if\"` stay\n * words. `time` is a launcher (domain/command-launchers.ts), as it takes options.\n */\nconst COMMAND_PREFIX_WORDS: ReadonlySet<string> = new Set([\n \"if\",\n \"then\",\n \"elif\",\n \"else\",\n \"fi\",\n \"while\",\n \"until\",\n \"do\",\n \"done\",\n \"!\",\n \"{\",\n \"}\",\n \"esac\",\n]);\n/**\n * Reserved words whose words up to the next separator are not a command: `for NAME in WORDS`,\n * `select NAME in WORDS`, `case WORD in`, and a `[[ … ]]` test.\n */\nconst CLAUSE_WORDS: ReadonlySet<string> = new Set([\"for\", \"select\", \"case\", \"[[\"]);\n/** `function NAME` (bash, ksh): the function's body, a compound command, follows the name. */\nconst FUNCTION_WORD = \"function\";\nconst FUNCTION_HEADER_LENGTH = 2;\n\nconst isReserved = (word: ShellWord | undefined, words: ReadonlySet<string>): boolean =>\n word !== undefined && word.raw === word.value && words.has(word.value);\n\n/** How many words at `index` are a reserved word or a function header, before a command. */\nfunction prefixLength(words: readonly ShellWord[], index: number): number {\n if (isReserved(words[index], COMMAND_PREFIX_WORDS)) {\n return 1;\n }\n const word = words[index];\n return word?.raw === FUNCTION_WORD ? FUNCTION_HEADER_LENGTH : 0;\n}\n\n/**\n * The simple command that a list of words between two separators holds, without the reserved\n * words in front of it: `then a b` is the command `a b`, and `for x in a b` is none.\n */\nfunction simpleCommand(words: readonly ShellWord[]): ShellWord[] {\n let first = 0;\n for (let length = prefixLength(words, 0); length > 0; length = prefixLength(words, first)) {\n first += length;\n }\n return isReserved(words[first], CLAUSE_WORDS) ? [] : words.slice(first);\n}\n\nconst QUOTES: ReadonlySet<string> = new Set([\"'\", '\"']);\n/** A quoted word with more than one word in it may be a command (`sh -c \"…\"`, `concurrently`). */\nconst NESTED_COMMAND_RE = /[\\s;&|()`]/;\n\n/**\n * The text inside the quotes of a word that is one quoted string holding a command line. The\n * inner text is read as written, so its offsets map one to one onto the outer text.\n */\nfunction nestedCommandText(word: ShellWord): string | undefined {\n const quote = word.raw[0] as string;\n const isOneQuotedString =\n QUOTES.has(quote) &&\n word.raw.length > 1 &&\n word.raw.endsWith(quote) &&\n wordPart(word.raw, 0).end === word.raw.length;\n return isOneQuotedString && NESTED_COMMAND_RE.test(word.value)\n ? word.raw.slice(1, -1)\n : undefined;\n}\n\n/** Shells that run the script a here-document or a pipe gives them. */\nconst SHELLS: ReadonlySet<string> = new Set([\"sh\", \"bash\", \"dash\", \"ash\", \"zsh\", \"ksh\"]);\n/** Docker's `RUN <<EOF` runs the here-document, or gives it to the command after its options. */\nconst DOCKER_RUN = \"RUN\";\n/** A command that writes the here-document it reads as it is, so a pipe gives it on. */\nconst PASS_THROUGH = \"cat\";\nconst PATH_SEPARATOR = \"/\";\nconst OPTION_PREFIX = \"-\";\n\nconst programName = (command: ShellCommand): string =>\n command[0]?.value.split(PATH_SEPARATOR).at(-1) ?? \"\";\n\nconst isOption = (word: ShellWord): boolean => word.value.startsWith(OPTION_PREFIX);\n\n/** Whether a command is a shell with options only, which runs its input as a script. */\nconst isScriptShell = (command: ShellCommand): boolean =>\n SHELLS.has(programName(command)) && command.slice(1).every(isOption);\n\n/**\n * Whether a command runs the here-document it reads as a script: a shell with options only\n * (`bash -e <<EOF`), or `RUN` with options only or with such a shell after them (`RUN <<EOT\n * bash`). Any other command reads it as data (`cat`, `bash gen.sh`).\n */\nfunction readsScript(command: ShellCommand): boolean {\n if (programName(command) !== DOCKER_RUN) {\n return isScriptShell(command);\n }\n const after = command.slice(1);\n const shell = after.slice(after.findIndex((word) => !isOption(word)));\n return after.every(isOption) || isScriptShell(shell);\n}\n\n/** Whether a command writes its here-document unchanged, so the next command of a pipe reads it. */\nconst passesThrough = (command: ShellCommand): boolean =>\n programName(command) === PASS_THROUGH && command.slice(1).every(isOption);\n\n/**\n * The here-documents that the command at `index` runs as scripts: its own, when it reads them as\n * a script, and those of a `cat` whose output a pipe gives it, when it is a shell. Each is read\n * after the command that runs it, so the commands stay in the order of the text.\n */\nfunction scriptsRunBy(top: TopLevel, index: number, command: ShellCommand): HeredocBody[] {\n const previous = index - 1;\n const isPipedScript =\n top.pipes.has(previous) &&\n isScriptShell(command) &&\n passesThrough(simpleCommand(top.commands[previous] ?? []));\n return top.heredocs.filter(\n (body) =>\n (body.command === index && readsScript(command)) ||\n (body.command === previous && isPipedScript),\n );\n}\n\n/** Moves the offsets of words found in a part of a text to offsets in the whole text. */\nconst shifted = (words: readonly ShellWord[], offset: number): ShellWord[] =>\n words.map((word) => ({ ...word, start: word.start + offset, end: word.end + offset }));\n\n/** The commands of `text`, which starts at `offset` of a larger text, by offsets in that one. */\nexport function shellCommandsAt(text: string, offset: number, indent = 0): ShellCommand[] {\n return shellCommands(text, indent).map((words) => shifted(words, offset));\n}\n\n/**\n * The words of the parameter expansions of a word (`${GEN:-npx …}`) and the string literals of\n * its workflow expressions (`${{ inputs.gen || 'npx …' }}`), read as command lines.\n */\nconst expansionCommands = (word: ShellWord): ShellCommand[] =>\n [...wordExpansions(word.raw), ...expressionLiterals(word.raw)].flatMap((part) =>\n shellCommandsAt(part.text, word.start + part.start),\n );\n\n/**\n * The command lines inside the words of a command: a quoted word that holds one, the value of an\n * assignment (`GEN=\"npx openapi-typescript\"`), which runs where the variable is expanded, and\n * the word of a parameter expansion (`${GEN:-npx openapi-typescript}`). A text read as commands\n * is read once: its own expansions are found in it. The code of `python3 -c '…'` is no command\n * line.\n */\nfunction innerCommands(command: ShellCommand): ShellCommand[] {\n const assignments = new Map(shellAssignments(command).map((found) => [found.word, found]));\n const code = inlineCode(command)?.code;\n return command.flatMap((word) => {\n const inner = word === code ? undefined : nestedCommandText(word);\n if (inner !== undefined) {\n return shellCommandsAt(inner, word.start + 1);\n }\n const assignment = assignments.get(word);\n const value = assignment === undefined ? undefined : assignmentValueText(assignment);\n return value === undefined ? expansionCommands(word) : shellCommandsAt(value.text, value.start);\n });\n}\n\n/**\n * The commands of `text`, in order of their first word. A quoted word that holds a command line\n * is read as commands too, so `sh -c \"openapi-typescript a.yaml\"` and `concurrently \"…\"` count.\n * `indent` is the number of spaces at the start of each line that the shell does not see, such as\n * the indentation of a YAML block scalar: a here-document delimiter line may have them.\n */\nexport function shellCommands(text: string, indent = 0): ShellCommand[] {\n const top = topLevelCommands(text, indent);\n const commands: ShellCommand[] = [];\n for (const [index, words] of top.commands.entries()) {\n const command = simpleCommand(words);\n if (command.length > 0) {\n commands.push(command);\n }\n commands.push(...innerCommands(command));\n const scripts = scriptsRunBy(top, index, command);\n commands.push(...scripts.flatMap((body) => shellCommandsAt(body.text, body.start, indent)));\n }\n return commands;\n}\n","/** Compile-time proof that a switch over a closed union handled every variant. */\nexport function assertNever(value: never): never {\n throw new Error(`Unexpected variant: ${JSON.stringify(value)}`);\n}\n","/**\n * Which program a variable runs where a command starts with it (`$GEN …`, `$(GEN) …`). A file can\n * set one name in several places: two Dockerfile stages, a workflow and one of its steps, a\n * Makefile line and a later one that make reads before it runs any recipe. The tool does not\n * follow which definition reaches which command, so it changes the flags after a variable only\n * when every definition of the name runs the generator.\n */\n\nimport { assertNever } from \"./assert-never.js\";\n\n/**\n * `generator`: every definition runs the generator. `generator-or-other`: some definitions run it\n * and some run another program, so the flags after the variable are left to the user. `other`: no\n * definition runs it.\n */\nexport type VariableProgram = \"generator\" | \"generator-or-other\" | \"other\";\n\n/**\n * What one definition of a variable sets it to: a command (that runs the generator or not), a\n * reference to one variable (`GEN := $(OAT)`, `ENV GEN=$GEN`), or text that make appends to the\n * value it already has (`GEN += --flag`), which keeps the program.\n */\nexport type ProgramDefinition =\n | { readonly name: string; readonly kind: \"command\"; readonly runsGenerator: boolean }\n | { readonly name: string; readonly kind: \"reference\"; readonly target: string }\n | { readonly name: string; readonly kind: \"append\" };\n\n/** Whether a definition can run the generator, given the names found to run it so far. */\nfunction canRunGenerator(definition: ProgramDefinition, generators: ReadonlySet<string>): boolean {\n switch (definition.kind) {\n case \"command\":\n return definition.runsGenerator;\n case \"reference\":\n return generators.has(definition.target);\n case \"append\":\n return false;\n default:\n return assertNever(definition);\n }\n}\n\n/**\n * Whether a definition can run another program. A reference to a variable the file never sets\n * gets its value from elsewhere (the environment, a base image), so it can run anything.\n */\nfunction canRunOther(\n definition: ProgramDefinition,\n others: ReadonlySet<string>,\n defined: ReadonlySet<string>,\n): boolean {\n switch (definition.kind) {\n case \"command\":\n return !definition.runsGenerator;\n case \"reference\":\n return others.has(definition.target) || !defined.has(definition.target);\n case \"append\":\n return false;\n default:\n return assertNever(definition);\n }\n}\n\n/**\n * The program each defined variable runs. References are followed however long the chain, so\n * `GEN := $(OAT)` runs what `OAT` runs; a cycle adds nothing.\n */\nexport function variablePrograms(\n definitions: readonly ProgramDefinition[],\n): ReadonlyMap<string, VariableProgram> {\n const defined = new Set(definitions.map((definition) => definition.name));\n const generators = new Set<string>();\n const others = new Set<string>();\n for (let size = -1; size !== generators.size + others.size; ) {\n size = generators.size + others.size;\n for (const definition of definitions) {\n if (canRunGenerator(definition, generators)) {\n generators.add(definition.name);\n }\n if (canRunOther(definition, others, defined)) {\n others.add(definition.name);\n }\n }\n }\n const programOf = (name: string): VariableProgram => {\n if (!generators.has(name)) {\n return \"other\";\n }\n return others.has(name) ? \"generator-or-other\" : \"generator\";\n };\n return new Map([...defined].map((name) => [name, programOf(name)]));\n}\n","import { type FileVariables, runsGenerator, type VariableProgramUse } from \"./file-variables.js\";\nimport { type WordExpansion, wholeWordExpansion, wordExpansions } from \"./parameter-expansions.js\";\nimport { isArrayAssignment, shellAssignments } from \"./shell-assignments.js\";\nimport { type ShellCommand, type ShellWord, shellCommands } from \"./shell-words.js\";\nimport {\n type ProgramDefinition,\n type VariableProgram,\n variablePrograms,\n} from \"./variable-programs.js\";\nimport { isWholeExpression } from \"./workflow-expressions.js\";\n\n/** A shell variable as a file sets it: its name and its value, read as shell text. */\nexport interface VariableDefinition {\n readonly name: string;\n readonly value: string;\n}\n\n/** A whole word that expands one shell variable: `$NAME`, `${NAME}`, also in double quotes. */\nconst SHELL_VARIABLE_RE = /^\"?\\$(?:([A-Za-z_][A-Za-z0-9_]*)|\\{([A-Za-z_][A-Za-z0-9_]*)\\})\"?$/;\n\n/** The variable that `text` expands as a whole, or undefined. */\nfunction expandedName(text: string): string | undefined {\n const match = SHELL_VARIABLE_RE.exec(text);\n return match === null ? undefined : (match[1] ?? match[2]);\n}\n\n/** Whether text, read as a command line, runs the generator. */\nconst textRunsGenerator = (text: string): boolean => shellCommands(text).some(runsGenerator);\n\n/** What a text sets a variable to: a reference to one variable, or a command. */\nfunction textDefinition(name: string, text: string): ProgramDefinition {\n const target = expandedName(text.trim());\n return target === undefined\n ? { name, kind: \"command\", runsGenerator: textRunsGenerator(text) }\n : { name, kind: \"reference\", target };\n}\n\n/**\n * What a value that is one expansion with a word (`GEN=\"${GEN:-npx openapi-typescript}\"`) can\n * set: the word, or the variable's own value. The variable's value before the assignment, and\n * the value of an alternative's unset variable, come from outside the text: another program.\n */\nfunction expansionDefinitions(name: string, expansion: WordExpansion): ProgramDefinition[] {\n const word = textDefinition(name, expansion.text);\n const isOutside = expansion.use === \"alternative\" || expansion.name === name;\n const variable: ProgramDefinition = isOutside\n ? { name, kind: \"command\", runsGenerator: false }\n : { name, kind: \"reference\", target: expansion.name };\n return [word, variable];\n}\n\n/** A definition as the programs it can set: references to variables, or commands. */\nfunction programDefinitions({ name, value }: VariableDefinition): ProgramDefinition[] {\n const expansion = wholeWordExpansion(value.trim());\n return expansion === undefined\n ? [textDefinition(name, value)]\n : expansionDefinitions(name, expansion);\n}\n\n/**\n * The variables that a file's shell commands expand: `$GEN` runs the generator when every\n * definition of `GEN` in the file sets it to the generator (see variable-programs.ts). The\n * values of one name are read as one (a workflow, a job and a step `env`), since any of them can\n * reach a command.\n */\nexport function shellVariables(definitions: readonly VariableDefinition[]): FileVariables {\n const values = new Map<string, string>();\n for (const { name, value } of definitions) {\n values.set(name, [values.get(name), value].filter((part) => part !== undefined).join(\" \"));\n }\n const programs = variablePrograms(definitions.flatMap(programDefinitions));\n // A word that expands no variable has no name, so no definition (not even of \"\") matches it.\n const nameAt = (word: ShellWord): string | undefined => expandedName(word.raw);\n return {\n programAt: (program) => {\n const name = nameAt(program);\n const found = name === undefined ? undefined : programs.get(name);\n return found === undefined ? undefined : { written: program.raw, program: found };\n },\n referenceAt: (word) => {\n const name = nameAt(word);\n const value = name === undefined ? undefined : values.get(name);\n return value === undefined ? undefined : { written: word.raw, value };\n },\n };\n}\n\n/** What two answers for one program word say together: one program, or not only the generator. */\nfunction combinedUse(\n left: VariableProgramUse | undefined,\n right: VariableProgramUse | undefined,\n): VariableProgramUse | undefined {\n if (left === undefined || right === undefined) {\n return left ?? right;\n }\n return left.program === right.program ? left : { ...left, program: \"generator-or-other\" };\n}\n\n/**\n * The variables that `${NAME:=word}` and `${NAME=word}` set: the word when the variable is unset,\n * else the value it had, which comes from outside the text.\n */\nfunction assignedByExpansions(commands: readonly ShellCommand[]): VariableDefinition[] {\n return commands\n .flat()\n .flatMap((word) => wordExpansions(word.raw))\n .filter((expansion) => expansion.use === \"assign\")\n .flatMap(({ name, text }) => [\n { name, value: text },\n { name, value: \"\" },\n ]);\n}\n\n/**\n * The variables of a file (a workflow `env`, a Makefile) and those that its shell commands set\n * themselves (`GEN=\"npx openapi-typescript\"; $GEN a.yaml -it`), read as one: a name both set\n * runs the generator only when both say so, as for the definitions of one file.\n */\nexport function withShellAssignments(\n commands: readonly ShellCommand[],\n file: FileVariables,\n): FileVariables {\n const assigned = commands.flatMap(shellAssignments).filter((found) => !isArrayAssignment(found));\n const definitions = [...assigned, ...assignedByExpansions(commands)];\n if (definitions.length === 0) {\n return file;\n }\n const own = shellVariables(definitions);\n return {\n programAt: (program) => combinedUse(own.programAt(program), file.programAt(program)),\n referenceAt: (word) => own.referenceAt(word) ?? file.referenceAt(word),\n };\n}\n\n/** Two programs as one: the same, or not only the generator when they differ. */\nconst joinedProgram = (left: VariableProgram, right: VariableProgram): VariableProgram =>\n left === right ? left : \"generator-or-other\";\n\n/**\n * What a program word that is one expansion with a word runs (`npx ${GEN:-openapi-typescript}`,\n * `\"${GEN:-npx openapi-typescript}\" a.yaml`): its word, or the variable's value, which the\n * variables of the text know or which comes from outside it.\n */\nfunction expansionUse(word: ShellWord, variables: FileVariables): VariableProgramUse | undefined {\n const expansion = wholeWordExpansion(word.raw);\n if (expansion === undefined) {\n return undefined;\n }\n const programOf = (name: string | undefined): VariableProgram =>\n (name === undefined ? undefined : variables.programAt({ ...word, raw: `$${name}` })?.program) ??\n \"other\";\n const target = expandedName(expansion.text.trim());\n const textProgram = textRunsGenerator(expansion.text) ? \"generator\" : \"other\";\n const own = target === undefined ? textProgram : programOf(target);\n const variable = programOf(expansion.use === \"alternative\" ? undefined : expansion.name);\n return { written: word.raw, program: joinedProgram(own, variable) };\n}\n\n/** The variables with the program words that are expansions with a word. */\nexport function withWordExpansions(variables: FileVariables): FileVariables {\n return {\n programAt: (program) => variables.programAt(program) ?? expansionUse(program, variables),\n referenceAt: (word) => variables.referenceAt(word),\n };\n}\n\n/**\n * A program word that expands one shell variable as a whole: `$GEN`, `${GEN}`, a bash array\n * `\"${GEN[@]}\"`, and in a Makefile recipe `$$GEN`.\n */\nconst VARIABLE_NAME = \"[A-Za-z_][A-Za-z0-9_]*\";\nconst VARIABLE_WORD_RE = new RegExp(\n `^\"?\\\\$\\\\$?(?:${VARIABLE_NAME}|\\\\{${VARIABLE_NAME}(?:\\\\[[^\\\\]]*\\\\])?\\\\})\"?$`,\n);\n\n/**\n * The variables with the program words that expand a variable no definition the tool reads sets:\n * one set by another `script` item, through `$GITHUB_ENV`, by a recipe line, as an array or\n * outside the file, and a workflow expression (`${{ inputs.gen }}`), whose value the run gives.\n * It may run the generator, so the old flags after it are reported, not kept without a word.\n */\nexport function withUnreadVariables(variables: FileVariables): FileVariables {\n return {\n programAt: (program) =>\n variables.programAt(program) ??\n (VARIABLE_WORD_RE.test(program.raw) || isWholeExpression(program.raw)\n ? { written: program.raw, program: \"generator-or-other\" }\n : undefined),\n referenceAt: (word) => variables.referenceAt(word),\n };\n}\n","import { commandRoles, type PackageWord } from \"./command-roles.js\";\nimport { type FileVariables, NO_VARIABLES, withoutRecipePrefix } from \"./file-variables.js\";\nimport { type InlineCode, inlineCode } from \"./inline-code.js\";\nimport { type Change, lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { packageReference, unmigratedWordFindings } from \"./old-package-words.js\";\nimport {\n FLAG_RENAMES,\n GENERATOR_COMMAND,\n MIGRATED_GENERATOR_COMMAND,\n namesOriginalPackage,\n PACKAGE_RENAMES,\n} from \"./package-names.js\";\nimport {\n withShellAssignments,\n withUnreadVariables,\n withWordExpansions,\n} from \"./shell-variables.js\";\nimport { type ShellCommand, type ShellWord, shellCommands } from \"./shell-words.js\";\nimport { applyTextEdits, type TextEdit } from \"./text-edits.js\";\n\n/** One command line or script after the migration. */\nexport interface CommandMigration {\n readonly text: string;\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** Names the place of an offset for the report: a script name, or `file:line`. */\nexport type Locate = (offset: number) => string;\n\n/** What the migration found at one offset of the text. */\ninterface Finding {\n readonly offset: number;\n readonly edit?: TextEdit;\n readonly change?: Change;\n readonly manualStep?: ManualStep;\n}\n\nconst QUOTES: ReadonlySet<string> = new Set([\"'\", '\"']);\nconst PATH_SEPARATOR = \"/\";\nconst BIN_FOLDER = \"/.bin/\";\nconst OLD_PACKAGE_FOLDER = `node_modules/${GENERATOR_COMMAND}/`;\n\n/**\n * The edit that renames `name` at the end of a word (`x`, `\"x\"`, `npm:x`, `.bin/x`), or undefined\n * when the word is quoted in a way that does not keep `name` in one piece.\n */\nfunction renameAtEnd(word: ShellWord, name: string, to: string): TextEdit | undefined {\n const at = word.raw.lastIndexOf(name);\n const tail = word.raw.slice(at + name.length);\n if (at === -1 || (tail !== \"\" && !QUOTES.has(tail))) {\n return undefined;\n }\n return { start: word.start + at, end: word.start + at + name.length, text: to };\n}\n\n/** A word of an install command or a `--package` option that names an original package. */\nfunction packageFindings(found: PackageWord, locate: Locate): Finding[] {\n const { name, isPinned } = packageReference(found.value);\n const to = PACKAGE_RENAMES.get(name);\n const offset = found.word.start;\n if (to === undefined) {\n return [];\n }\n const location = locate(offset);\n if (isPinned) {\n return [{ offset, manualStep: { kind: \"pinned-package\", location, name } }];\n }\n const edit = renameAtEnd(found.word, name, to);\n const change: Change = { kind: \"package-name-renamed\", location, from: name, to };\n return edit === undefined ? [] : [{ offset, edit, change }];\n}\n\n/** The program given by a path: `node_modules/.bin/openapi-typescript` or a file of the package. */\nfunction programPathFindings(word: ShellWord, location: string): Finding[] {\n const offset = word.start;\n if (word.value.includes(OLD_PACKAGE_FOLDER)) {\n return [{ offset, manualStep: { kind: \"old-package-file\", location, path: word.value } }];\n }\n const isBin = word.value.endsWith(`${BIN_FOLDER}${GENERATOR_COMMAND}`);\n const edit = isBin ? renameAtEnd(word, GENERATOR_COMMAND, MIGRATED_GENERATOR_COMMAND) : undefined;\n return edit === undefined\n ? []\n : [{ offset, edit, change: { kind: \"command-renamed\", location } }];\n}\n\n/** The findings for the program word of a command; renamed tells whether flags follow. */\nfunction programFindings(word: ShellWord, location: string): Finding[] {\n if (word.value.includes(PATH_SEPARATOR)) {\n return programPathFindings(word, location);\n }\n const { name, isPinned } = packageReference(word.value);\n if (name !== GENERATOR_COMMAND) {\n return [];\n }\n if (isPinned) {\n return [{ offset: word.start, manualStep: { kind: \"versioned-command\", location } }];\n }\n const edit = renameAtEnd(word, GENERATOR_COMMAND, MIGRATED_GENERATOR_COMMAND);\n const change: Change = { kind: \"command-renamed\", location };\n return edit === undefined ? [] : [{ offset: word.start, edit, change }];\n}\n\n/** A renamed flag of the generator, alone (`-it`) or with its value (`--redoc=r.yaml`). */\nfunction flagFindings(word: ShellWord, locate: Locate): Finding[] {\n const flag = word.raw.split(\"=\", 1)[0] as string;\n const to = FLAG_RENAMES.get(flag);\n if (to === undefined) {\n return [];\n }\n const offset = word.start;\n const edit: TextEdit = { start: offset, end: offset + flag.length, text: to };\n return [\n { offset, edit, change: { kind: \"flag-renamed\", location: locate(offset), from: flag, to } },\n ];\n}\n\n/** `@`, `-` and `+` before a Makefile or justfile recipe: silent, ignore errors, always run. */\n/** The flags of a variable's value that the generator renamed, each once. */\nfunction renamedFlags(value: string): string[] {\n const flags = shellCommands(value)\n .flat()\n .map((word) => word.raw.split(\"=\", 1)[0] as string);\n return [...new Set(flags.filter((flag) => FLAG_RENAMES.has(flag)))];\n}\n\n/** The findings of one argument of the generator: a renamed flag, or a variable that holds one. */\nfunction argumentFindings(word: ShellWord, locate: Locate, variables: FileVariables): Finding[] {\n const reference = variables.referenceAt(word);\n if (reference === undefined) {\n return flagFindings(word, locate);\n }\n const flags = renamedFlags(reference.value);\n if (flags.length === 0) {\n return [];\n }\n const manualStep: ManualStep = {\n kind: \"flags-in-variable\",\n location: locate(word.start),\n variable: reference.written,\n flags,\n };\n return [{ offset: word.start, manualStep }];\n}\n\n/** The old flags that findings rename, or report in a variable's value. */\nconst oldFlagsOf = (findings: readonly Finding[]): string[] =>\n findings.flatMap(({ change, manualStep }) => {\n if (change?.kind === \"flag-renamed\") {\n return [change.from];\n }\n return manualStep?.kind === \"flags-in-variable\" ? [...manualStep.flags] : [];\n });\n\n/**\n * The findings after a variable that may run the generator or another program (some of its\n * definitions, a default, a value set where the tool does not read): one step that names the old\n * flags, since the tool cannot tell which program runs there.\n */\nfunction uncertainFlagSteps(\n program: ShellWord,\n variable: string,\n found: readonly Finding[],\n locate: Locate,\n) {\n const flags = [...new Set(oldFlagsOf(found))];\n if (flags.length === 0) {\n return [];\n }\n const manualStep: ManualStep = {\n kind: \"variable-not-only-generator\",\n location: locate(program.start),\n variable,\n flags,\n };\n return [{ offset: program.start, manualStep }];\n}\n\nfunction commandFindings(\n command: ShellCommand,\n locate: Locate,\n variables: FileVariables,\n): Finding[] {\n const words = withoutRecipePrefix(command);\n const found = knownFindings(words, locate, variables);\n const handled = new Set(found.map((finding) => finding.offset));\n return [...found, ...unmigratedWordFindings(words, handled, locate)];\n}\n\n/** Inline code (`python3 -c '…'`) that names an old package: code the tool does not read. */\nfunction inlineCodeFindings({ code, program }: InlineCode, locate: Locate): Finding[] {\n if (!namesOriginalPackage(code.value)) {\n return [];\n }\n const location = locate(code.start);\n const manualStep: ManualStep = { kind: \"script-not-shell\", location, shell: program.value };\n return [{ offset: code.start, manualStep }];\n}\n\n/** The findings of the packages, the program and its flags in the roles the tool knows. */\nfunction knownFindings(words: ShellCommand, locate: Locate, variables: FileVariables): Finding[] {\n const roles = commandRoles(words);\n const findings = roles.packages.flatMap((found) => packageFindings(found, locate));\n const program = roles.program === undefined ? undefined : (words[roles.program] as ShellWord);\n if (program === undefined) {\n return findings;\n }\n const code = inlineCode(words);\n if (code !== undefined) {\n return [...findings, ...inlineCodeFindings(code, locate)];\n }\n const found = programFindings(program, locate(program.start));\n findings.push(...found);\n // Only a renamed command is ours to change; a pinned one still runs the old package.\n const isRenamed = found.some((finding) => finding.change?.kind === \"command-renamed\");\n const variable = variables.programAt(program);\n if (!isRenamed && (variable === undefined || variable.program === \"other\")) {\n return findings;\n }\n const flags = words.slice((roles.program as number) + 1);\n const flagFound = flags.flatMap((word) => argumentFindings(word, locate, variables));\n const isUncertain = variable?.program === \"generator-or-other\";\n findings.push(\n ...(isUncertain ? uncertainFlagSteps(program, variable.written, flagFound, locate) : flagFound),\n );\n return findings;\n}\n\n/** The findings of a shell text as edits, without applying them. */\nexport interface ShellTextFindings {\n readonly edits: readonly TextEdit[];\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** Find what to migrate in every command of a shell text; `locate` names each place. */\nexport function shellTextFindings(text: string, locate: Locate): ShellTextFindings {\n return commandWordFindings(shellCommands(text), locate);\n}\n\n/** Find what to migrate in commands already split into words, as an exec-form list is. */\nexport function commandWordFindings(\n commands: readonly ShellCommand[],\n locate: Locate,\n variables: FileVariables = NO_VARIABLES,\n): ShellTextFindings {\n const known = withUnreadVariables(withWordExpansions(withShellAssignments(commands, variables)));\n const findings = commands\n .flatMap((words) => commandFindings(words, locate, known))\n .sort((left, right) => left.offset - right.offset);\n return {\n edits: findings.flatMap((finding) => (finding.edit === undefined ? [] : [finding.edit])),\n changes: findings.flatMap((finding) => (finding.change === undefined ? [] : [finding.change])),\n manualSteps: findings.flatMap((finding) =>\n finding.manualStep === undefined ? [] : [finding.manualStep],\n ),\n };\n}\n\nfunction migrateShellText(text: string, locate: Locate): CommandMigration {\n const { edits, changes, manualSteps } = shellTextFindings(text, locate);\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n\n/**\n * Rename the generator command in one script, the renamed flags of that command only, and the\n * original packages that an install command or `npx -p` names. `location` names the script.\n */\nexport function migrateCommand(text: string, location: string): CommandMigration {\n return migrateShellText(text, () => location);\n}\n\n/**\n * Every command of a shell script, Makefile or Dockerfile, through `migrateCommand`. A command\n * continued with `\\` onto the next lines is one command. Each finding names its `file:line`.\n */\nexport function migrateCommandLines(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n return migrateShellText(text, (offset) => `${file}:${lineOf(offset)}`);\n}\n","import type { DocumentPath } from \"./config-documents.js\";\n\n/**\n * Where configs keep commands, as key path patterns: package.json scripts and the hook tools it\n * configures, Nx targets, Deno tasks and lint-staged. Only the strings at these paths are read as\n * commands, so the other values of a config stay as written.\n */\n\n/** A key path pattern; `*` matches any key or index. */\nexport type CommandPathPattern = readonly string[];\n\nconst ANY = \"*\";\n\n/** The `command` and `commands` of `nx:run-commands` options under `prefix`. */\nconst nxOptionPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, \"command\"],\n [...prefix, \"commands\", ANY],\n [...prefix, \"commands\", ANY, \"command\"],\n];\n\n/**\n * `nx:run-commands` targets under `prefix`: `command`, the commands of `options`, and those of\n * each of its `configurations`, which replace the options they name (`nx run app:gen:ci`).\n */\nconst nxTargetPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, ANY, \"command\"],\n ...nxOptionPaths([...prefix, ANY, \"options\"]),\n ...nxOptionPaths([...prefix, ANY, \"configurations\", ANY]),\n];\n\n/** lint-staged: each glob runs a command or a list of them. */\nconst lintStagedPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, ANY],\n [...prefix, ANY, ANY],\n];\n\n/** simple-git-hooks: each git hook runs one command. */\nconst simpleGitHooksPaths = (prefix: CommandPathPattern): CommandPathPattern[] => [\n [...prefix, ANY],\n];\n\n/** Nx `project.json` targets. */\nexport const NX_PROJECT_COMMAND_PATHS: readonly CommandPathPattern[] = nxTargetPaths([\"targets\"]);\n\n/** `nx.json`: the defaults of the targets, by target name or executor. */\nexport const NX_WORKSPACE_COMMAND_PATHS: readonly CommandPathPattern[] = nxTargetPaths([\n \"targetDefaults\",\n]);\n\n/**\n * A manifest (package.json, package.yaml): the scripts, the configs of simple-git-hooks and\n * lint-staged, the `command` of each wireit script (the script itself is just `wireit`), and the\n * Nx targets of the project. Each finding names its place (`scripts.gen`).\n */\nexport const MANIFEST_COMMAND_PATHS: readonly CommandPathPattern[] = [\n [\"scripts\", ANY],\n [\"wireit\", ANY, \"command\"],\n ...simpleGitHooksPaths([\"simple-git-hooks\"]),\n ...lintStagedPaths([\"lint-staged\"]),\n ...nxTargetPaths([\"nx\", \"targets\"]),\n];\n\n/** A lint-staged config file (`.lintstagedrc`, `.lintstagedrc.json`, …). */\nexport const LINT_STAGED_COMMAND_PATHS: readonly CommandPathPattern[] = lintStagedPaths([]);\n\n/** A simple-git-hooks config file (`.simple-git-hooks.json`, …). */\nexport const SIMPLE_GIT_HOOKS_COMMAND_PATHS: readonly CommandPathPattern[] = simpleGitHooksPaths(\n [],\n);\n\n/** Deno tasks: a command string, or an object with a `command`. */\nexport const DENO_TASK_PATHS: readonly CommandPathPattern[] = [\n [\"tasks\", ANY],\n [\"tasks\", ANY, \"command\"],\n];\n\nconst matches = (path: DocumentPath, pattern: CommandPathPattern): boolean =>\n path.length === pattern.length &&\n pattern.every((part, index) => part === ANY || part === String(path[index]));\n\n/** Whether a value at `path` is a command by one of `patterns`. */\nexport const isCommandPath = (\n path: DocumentPath,\n patterns: readonly CommandPathPattern[],\n): boolean => patterns.some((pattern) => matches(path, pattern));\n","import { migrateCommand } from \"./command-migration.js\";\nimport { lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport type { SourceString } from \"./source-migration.js\";\n\n/** No location: the step names the line of the string instead. */\nconst NO_LOCATION = \"\";\n\n/**\n * Strings of a source file that run the generator, such as `execSync(\"npx openapi-typescript …\")`\n * or the command of `spawn` with `shell: true`. They are reported with the migrated command, not\n * changed: a string is data, and only the author knows that it reaches a shell.\n */\nexport function commandStringSteps(text: string, strings: readonly SourceString[]): ManualStep[] {\n const lineOf = lineLocator(text);\n return strings.flatMap((found) => {\n // A string that is just a package name is reported by the specifier migration.\n if (found.isModuleSpecifier || PACKAGE_RENAMES.has(found.value)) {\n return [];\n }\n const migrated = migrateCommand(found.value, NO_LOCATION).text;\n return migrated === found.value\n ? []\n : [{ kind: \"command-string\" as const, line: lineOf(found.start), to: migrated }];\n });\n}\n","/**\n * The version spec a renamed dependency gets. A semver range keeps its style and gets the\n * openapi-typesafe version: `^` and `>=` give `^`, `~` gives `~`, an exact version stays exact,\n * and a partial version keeps what it fixes (`7` and `7.x` fix the major: `^`; `0.13` and\n * `0.13.x` fix the minor: `~`). A range of several comparators takes the style of its first one.\n * `catalog:` and `workspace:` stay, because they point elsewhere (a dependency on a local package\n * keeps its old name too, domain/dependency-map.ts); anything else (a tag, `*`, an\n * upper bound only, a URL, a file or an npm alias) is kept and reported.\n */\n\nconst KEPT_PROTOCOLS = [\"catalog:\", \"workspace:\"] as const;\n/**\n * The protocols of specs that point at a package on disk (pnpm, Yarn, npm, bun), not at the npm\n * registry: such a dependency is a local package that only shares an original package's name.\n */\nconst LOCAL_PROTOCOLS = [\"workspace:\", \"link:\", \"file:\", \"portal:\"] as const;\nconst RANGE_SEPARATOR = \"||\";\nconst HYPHEN = \"-\";\nconst WHITE_SPACE_RE = /\\s+/;\n/** node-semver allows white space between an operator and its version: `>= 1.2.3`. */\nconst SPACED_OPERATOR_RE = /(<=|>=|<|>|=|~>|~|\\^)\\s+/g;\nconst OPERATOR = String.raw`(<=|>=|<|>|=|~>|~|\\^)?`;\nconst VERSION_PART = String.raw`(\\d+|[xX*])`;\nconst LABELS = String.raw`(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?`;\n/** A comparator: an operator, then a version whose parts can be `x` or `*` or left out. */\nconst COMPARATOR_RE = new RegExp(\n String.raw`^${OPERATOR}v?${VERSION_PART}(?:\\.${VERSION_PART})?(?:\\.${VERSION_PART})?${LABELS}$`,\n);\nconst NUMBER_RE = /^\\d+$/;\n\n/** The style a replaced spec keeps: `^`, `~` or exact (no operator). */\ntype RangeStyle = \"^\" | \"~\" | \"\";\n\nconst OPERATOR_STYLES: Readonly<Record<string, RangeStyle | undefined>> = {\n \"^\": \"^\",\n // `>=` means \"this or newer\"; with a new package line, a caret range says the same safely.\n \">=\": \"^\",\n \">\": \"^\",\n \"~\": \"~\",\n \"~>\": \"~\",\n};\n\nexport type SpecDecision =\n | { readonly kind: \"replaced\"; readonly spec: string }\n | { readonly kind: \"kept\"; readonly spec: string; readonly isReported: boolean };\n\nconst isNumber = (part: string | undefined): boolean => part !== undefined && NUMBER_RE.test(part);\n\n/** The style of a comparator without an operator (or `=`), by the parts it fixes. */\nfunction versionStyle(\n major: string | undefined,\n minor: string | undefined,\n patch: string | undefined,\n): RangeStyle | undefined {\n if (!isNumber(major)) {\n return undefined;\n }\n if (isNumber(minor) && isNumber(patch)) {\n return \"\";\n }\n return isNumber(minor) ? \"~\" : \"^\";\n}\n\n/** The style of the first comparator of a range, or undefined when the spec is not a range. */\nfunction rangeStyle(spec: string): RangeStyle | undefined {\n const sets = spec.replace(SPACED_OPERATOR_RE, \"$1\").split(RANGE_SEPARATOR);\n const tokens = sets.map((set) => set.trim().split(WHITE_SPACE_RE));\n const comparators = tokens.flat().filter((token) => token !== HYPHEN);\n const matches = comparators.map((comparator) => COMPARATOR_RE.exec(comparator));\n const first = matches[0];\n if (first === undefined || first === null || matches.includes(null)) {\n return undefined;\n }\n const operator = first[1];\n // `1.2.3 - 2.0.0` is `>=1.2.3 <=2.0.0`: a lower bound, as `>=` is.\n const isHyphenRange = tokens[0]?.[1] === HYPHEN;\n if (operator !== undefined && operator !== \"=\") {\n return OPERATOR_STYLES[operator];\n }\n return isHyphenRange ? \"^\" : versionStyle(first[2], first[3], first[4]);\n}\n\n/** True for a spec that points at a package on disk: `workspace:*`, `link:../fork`, `file:…`. */\nexport const isLocalPackageSpec = (spec: string): boolean =>\n LOCAL_PROTOCOLS.some((protocol) => spec.startsWith(protocol));\n\n/** The new spec for a renamed dependency whose old spec was `spec`. */\nexport function migrateVersionSpec(spec: string, version: string): SpecDecision {\n if (KEPT_PROTOCOLS.some((protocol) => spec.startsWith(protocol))) {\n return { kind: \"kept\", spec, isReported: false };\n }\n const style = rangeStyle(spec);\n if (style === undefined) {\n return { kind: \"kept\", spec, isReported: true };\n }\n return { kind: \"replaced\", spec: `${style}${version}` };\n}\n","import { isScalar, mapsAt, type TreeMap, textEntries } from \"./config-documents.js\";\nimport type { ManualStep } from \"./migration-findings.js\";\nimport { DEPENDENCY_FIELDS, PACKAGE_RENAMES } from \"./package-names.js\";\nimport { isLocalPackageSpec } from \"./version-spec.js\";\n\n/**\n * What the manifests of a project declare, to tell whether a source file may import a package\n * without relying on another package to install it.\n */\n\n/**\n * One manifest of the project: its path in the listing and the names its dependency fields hold;\n * `names` is undefined when the manifest could not be read, and it then counts as declaring all.\n */\nexport interface ManifestDeclarations {\n readonly path: string;\n readonly names: ReadonlySet<string> | undefined;\n /** The original names it declares with a spec that points at a local package. */\n readonly localPackages?: ReadonlySet<string>;\n}\n\n/**\n * A package that an original package installed as its own dependency and its successor does not.\n * openapi-fetch and openapi-react-query depend on openapi-typescript-helpers, so code could import\n * it without a dependency of its own. openapi-typesafe-fetch declares the helper types itself and\n * the hooks name them through it, so nothing installs openapi-typesafe-helpers for such code.\n */\nexport const NO_LONGER_INSTALLED: ReadonlyMap<string, readonly string[]> = new Map([\n [\"openapi-typesafe-helpers\", [\"openapi-fetch\", \"openapi-react-query\"]],\n]);\n\n/** The original name of each successor package. */\nconst ORIGINAL_NAMES: ReadonlyMap<string, string> = new Map(\n [...PACKAGE_RENAMES].map(([original, successor]) => [successor, original]),\n);\n\nconst PATH_SEPARATOR = \"/\";\n\n/** Whether a manifest text can declare a package of NO_LONGER_INSTALLED, so it must be read. */\nexport function namesUninstalledPackage(text: string): boolean {\n return [...NO_LONGER_INSTALLED.keys()].some(\n (name) => text.includes(name) || text.includes(ORIGINAL_NAMES.get(name) ?? name),\n );\n}\n\nconst directoryOf = (path: string): string => path.slice(0, path.lastIndexOf(PATH_SEPARATOR) + 1);\n\n/** Whether the file at `path` is in the folder of `filePath` or in a folder above it. */\nexport const isAtOrAbove = (path: string, filePath: string): boolean =>\n filePath.startsWith(directoryOf(path));\n\n/** The names that the dependency fields of a parsed manifest hold. */\nexport function declaredNames(manifest: TreeMap): string[] {\n return DEPENDENCY_FIELDS.flatMap((field) => mapsAt(manifest, field))\n .flatMap(textEntries)\n .map(({ key }) => key.value);\n}\n\n/**\n * The names that a parsed manifest's dependency fields point at a local package\n * (`\"openapi-fetch\": \"workspace:*\"`): such a dependency keeps its name, so its imports do too.\n */\nexport function localPackageNames(manifest: TreeMap): string[] {\n return DEPENDENCY_FIELDS.flatMap((field) => mapsAt(manifest, field))\n .flatMap(textEntries)\n .flatMap(({ key, value }) =>\n isScalar(value) && isLocalPackageSpec(value.value) ? [key.value] : [],\n );\n}\n\n/**\n * The original packages that the imports of the file at `filePath` resolve to a local package.\n * Node looks in the `node_modules` folder of the file's folder first, then in each folder above,\n * so the nearest manifest that declares a name decides: a local package of a workspace root does\n * not count for a package that declares the npm package itself. A manifest that could not be\n * read tells nothing and is passed over.\n */\nexport function localPackagesFor(\n manifests: readonly ManifestDeclarations[],\n filePath: string,\n): ReadonlySet<string> {\n const nearestFirst = manifests\n .filter(({ path }) => isAtOrAbove(path, filePath))\n .sort((left, right) => directoryOf(right.path).length - directoryOf(left.path).length);\n const candidates = new Set(\n nearestFirst.flatMap(({ localPackages }) => [...(localPackages ?? [])]),\n );\n const isLocal = (name: string): boolean =>\n nearestFirst.find(({ names }) => names?.has(name) === true)?.localPackages?.has(name) === true;\n return new Set([...candidates].filter(isLocal));\n}\n\n/**\n * Whether a manifest at or above `filePath` declares `name`, under its old or its new name. Node\n * looks for a package in the `node_modules` folders of every directory above the file, so a\n * dependency of a workspace root counts for its packages. A file that no manifest contains is not\n * judged: it is not part of a package (a Deno module, a loose script).\n */\nfunction isDeclaredFor(\n manifests: readonly ManifestDeclarations[],\n filePath: string,\n name: string,\n): boolean {\n const original = ORIGINAL_NAMES.get(name);\n const containing = manifests.filter(({ path }) => isAtOrAbove(path, filePath));\n const declares = ({ names }: ManifestDeclarations): boolean =>\n names === undefined || names.has(name) || (original !== undefined && names.has(original));\n return containing.length === 0 || containing.some(declares);\n}\n\n/** The package that a module specifier names: `pkg` of `pkg/subpath`. */\nexport const packageOfSpecifier = (specifier: string): string => {\n const slash = specifier.indexOf(PATH_SEPARATOR);\n return slash === -1 ? specifier : specifier.slice(0, slash);\n};\n\n/** A module specifier of a source file, as the migration leaves it, and its line. */\nexport interface ImportedSpecifier {\n readonly specifier: string;\n readonly line: number;\n}\n\n/**\n * The imports of a source file, as the migration leaves them, of a package that no manifest or\n * import map at or above the file declares and that the original packages no longer install. An\n * import already renamed by an earlier run counts too, so a second run still reports it. A Deno\n * `npm:` specifier installs its package itself and is not a package name, so it is never reported.\n */\nexport function undeclaredImportSteps(\n imports: readonly ImportedSpecifier[],\n filePath: string,\n manifests: readonly ManifestDeclarations[],\n): ManualStep[] {\n return imports.flatMap(({ specifier, line }) => {\n const name = packageOfSpecifier(specifier);\n const installers = NO_LONGER_INSTALLED.get(name);\n return installers === undefined || isDeclaredFor(manifests, filePath, name)\n ? []\n : [{ kind: \"package-not-declared\", line, name, installers } as const];\n });\n}\n","import { type CommandMigration, commandWordFindings, migrateCommand } from \"./command-migration.js\";\nimport { lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { shellVariables } from \"./shell-variables.js\";\nimport {\n type ShellCommand,\n type ShellWord,\n shellCommands,\n shellCommandsAt,\n} from \"./shell-words.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\n\n/**\n * Dockerfiles and Containerfiles. `RUN`, `CMD` and `ENTRYPOINT` take a command in shell form (a\n * line the shell splits) or in exec form: a JSON array of strings, each one word, which no shell\n * splits. Docker reads an instruction whose argument is not a valid JSON array as shell form, and\n * so does the migration.\n */\n\n/**\n * An instruction that takes a command, at the start of a line, before its `[`, after the flags of\n * `RUN` (`--mount=type=cache,target=/root/.npm`, `--network=none`). In capitals, as Dockerfiles\n * write them and as the launcher table reads the shell form (command-launchers.ts).\n */\nconst EXEC_FORM_START_RE = /^[ \\t]*(?:RUN|CMD|ENTRYPOINT)(?:[ \\t]+--\\S+)*[ \\t]+\\[/gm;\n/** Shells whose `-c` option takes a command line, as `SHELL` and the shell form use them. */\nconst SHELLS: ReadonlySet<string> = new Set([\"sh\", \"bash\", \"dash\", \"ash\", \"zsh\"]);\nconst OPTION_PREFIX = \"-\";\nconst LONG_OPTION_PREFIX = \"--\";\nconst COMMAND_OPTION = \"c\";\nconst SET_OPTION = \"-o\";\nconst PATH_SEPARATOR = \"/\";\n/** Blanks between the items of the array; a `\\` at the end of a line continues the instruction. */\nconst ARRAY_BLANK_RE = /(?:[ \\t\\r\\n]|\\\\\\r?\\n)*/y;\n/** A double-quoted string on one line; `JSON.parse` decides whether it is a JSON string. */\nconst QUOTED_RE = /\"(?:[^\"\\\\\\n]|\\\\.)*\"/y;\nconst ITEM_SEPARATOR = \",\";\nconst NOT_LINE_BREAK_RE = /[^\\n]/g;\nconst ARRAY_END = \"]\";\n/** Instructions that set variables which later shell-form commands expand (`$GEN`). */\nconst VARIABLE_INSTRUCTIONS: ReadonlySet<string> = new Set([\"ARG\", \"ENV\"]);\nconst LEGACY_ENV_INSTRUCTION = \"ENV\";\nconst ASSIGNMENT = \"=\";\nconst QUOTES: ReadonlySet<string> = new Set(['\"', \"'\"]);\n\n/** Where a pattern with the sticky flag matches at `index`, or undefined. */\nfunction matchAt(pattern: RegExp, text: string, index: number): string | undefined {\n pattern.lastIndex = index;\n return pattern.exec(text)?.[0];\n}\n\n/** The value of a JSON string, or undefined when `raw` is not one (a bad escape, a raw tab). */\nfunction jsonString(raw: string): string | undefined {\n try {\n return JSON.parse(raw) as string;\n } catch (error) {\n // Docker reads an argument that is not valid JSON as shell form; so does the migration.\n if (error instanceof SyntaxError) {\n return undefined;\n }\n throw error;\n }\n}\n\n/** One exec-form array: where it starts (at the `[`) and ends (after the `]`), and its words. */\ninterface ExecForm {\n readonly start: number;\n readonly end: number;\n readonly words: readonly ShellWord[];\n}\n\n/** The exec-form array whose `[` is at `start`, or undefined when it is not one. */\nfunction execFormAt(text: string, start: number): ExecForm | undefined {\n const words: ShellWord[] = [];\n let index = start + 1;\n for (;;) {\n index += matchAt(ARRAY_BLANK_RE, text, index)?.length ?? 0;\n const raw = matchAt(QUOTED_RE, text, index);\n if (raw === undefined) {\n const isEmpty = text[index] === ARRAY_END && words.length === 0;\n return isEmpty ? { start, end: index + 1, words } : undefined;\n }\n const value = jsonString(raw);\n if (value === undefined) {\n return undefined;\n }\n // A word is the text inside the quotes, as an exec-form item of a YAML file is.\n words.push({ start: index + 1, end: index + raw.length - 1, value, raw: raw.slice(1, -1) });\n index += raw.length;\n index += matchAt(ARRAY_BLANK_RE, text, index)?.length ?? 0;\n if (text[index] === ARRAY_END) {\n return { start, end: index + 1, words };\n }\n if (text[index] !== ITEM_SEPARATOR) {\n return undefined;\n }\n index++;\n }\n}\n\n/** The exec-form arrays of a Dockerfile, in order. */\nfunction execForms(text: string): ExecForm[] {\n return [...text.matchAll(EXEC_FORM_START_RE)].flatMap((match) => {\n const form = execFormAt(text, match.index + match[0].length - 1);\n return form === undefined ? [] : [form];\n });\n}\n\n/**\n * The command line of `[\"sh\", \"-c\", \"…\"]` (also `/bin/bash -o pipefail -ec`): the word after the\n * first short option that holds `c`, before any word that is not an option.\n */\nfunction shellScript(words: readonly ShellWord[]): ShellWord | undefined {\n const program = words[0]?.value.split(PATH_SEPARATOR).at(-1) ?? \"\";\n if (!SHELLS.has(program)) {\n return undefined;\n }\n let index = 1;\n for (let option = words[index]?.value; option !== undefined; option = words[index]?.value) {\n if (!option.startsWith(OPTION_PREFIX)) {\n return undefined;\n }\n if (!option.startsWith(LONG_OPTION_PREFIX) && option.includes(COMMAND_OPTION)) {\n return words[index + 1];\n }\n // `-o pipefail` names a shell option in the next word.\n index += option === SET_OPTION ? 2 : 1;\n }\n return undefined;\n}\n\n/** What the exec-form arrays run: the arrays, and the command lines of the shells they start. */\ninterface ExecCommands {\n readonly commands: readonly ShellCommand[];\n /** Command lines with JSON escapes, whose offsets do not map onto the file: reported only. */\n readonly escaped: readonly ShellWord[];\n}\n\nfunction execCommands(forms: readonly ExecForm[]): ExecCommands {\n const commands: ShellCommand[] = [];\n const escaped: ShellWord[] = [];\n for (const { words } of forms) {\n commands.push(words);\n const script = shellScript(words);\n if (script !== undefined && script.raw === script.value) {\n commands.push(...shellCommandsAt(script.value, script.start));\n } else if (script !== undefined) {\n escaped.push(script);\n }\n }\n return { commands, escaped };\n}\n\n/** The text with the arrays blanked out, line breaks kept, so the shell reads the rest. */\nfunction withoutExecForms(text: string, forms: readonly ExecForm[]): string {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (const { start, end } of forms) {\n parts.push(\n text.slice(copiedUpTo, start),\n text.slice(start, end).replace(NOT_LINE_BREAK_RE, \" \"),\n );\n copiedUpTo = end;\n }\n parts.push(text.slice(copiedUpTo));\n return parts.join(\"\");\n}\n\n/** A command line that the migration would change but cannot edit in place, as a manual step. */\nfunction escapedScriptSteps(scripts: readonly ShellWord[], lineOf: (offset: number) => number) {\n return scripts.flatMap((script): ManualStep[] => {\n const migrated = migrateCommand(script.value, \"\").text;\n return migrated === script.value\n ? []\n : [{ kind: \"command-string\", line: lineOf(script.start), to: migrated }];\n });\n}\n\n/** A variable that `ARG` or `ENV` sets: its name, and its value as written at its offset. */\ninterface DockerVariable {\n readonly name: string;\n readonly value: string;\n readonly start: number;\n}\n\n/** The variable of one `NAME=value` word, its quotes taken off, or undefined. */\nfunction assignedVariable(word: ShellWord): DockerVariable | undefined {\n const at = word.raw.indexOf(ASSIGNMENT);\n if (at <= 0) {\n return undefined;\n }\n const raw = word.raw.slice(at + 1);\n const isQuoted = raw.length >= 2 && QUOTES.has(raw[0] as string) && raw.at(-1) === raw[0];\n const value = isQuoted ? raw.slice(1, -1) : raw;\n const start = word.start + at + 1 + (isQuoted ? 1 : 0);\n return { name: word.raw.slice(0, at), value, start };\n}\n\n/** An `ARG` or `ENV` instruction: where it is in the text, and the variables it sets. */\ninterface VariableInstruction {\n readonly start: number;\n readonly end: number;\n readonly variables: readonly DockerVariable[];\n}\n\n/**\n * The variables of one instruction: `ARG NAME=value`, `ENV NAME=value …`, and `ENV NAME value`,\n * the legacy form that sets one variable to the rest of the line.\n */\nfunction instructionVariables(text: string, words: readonly ShellWord[]): DockerVariable[] {\n const [instruction, first, ...rest] = words as [ShellWord, ShellWord, ...ShellWord[]];\n const last = rest.at(-1);\n if (instruction.value === LEGACY_ENV_INSTRUCTION && !first.raw.includes(ASSIGNMENT)) {\n const value = last === undefined ? \"\" : text.slice(rest[0]?.start, last.end);\n return [{ name: first.value, value, start: rest[0]?.start ?? first.end }];\n }\n return [first, ...rest].flatMap((word) => assignedVariable(word) ?? []);\n}\n\n/** The `ARG` and `ENV` instructions among the shell-form commands of a Dockerfile. */\nfunction variableInstructions(\n text: string,\n commands: readonly ShellCommand[],\n): VariableInstruction[] {\n return commands.flatMap((words): VariableInstruction[] => {\n const [instruction, first] = words;\n if (instruction === undefined || first === undefined) {\n return [];\n }\n if (!VARIABLE_INSTRUCTIONS.has(instruction.value)) {\n return [];\n }\n const end = (words.at(-1) as ShellWord).end;\n return [{ start: instruction.start, end, variables: instructionVariables(text, words) }];\n });\n}\n\n/**\n * The shell-form commands that are not `ARG` or `ENV` instructions, nor read inside one. Docker,\n * not a shell, reads those: their values are read once, as the commands that `$NAME` runs, so\n * no word of them (`ENV GEN=${GEN:-npx openapi-typescript}`) is edited twice.\n */\nfunction withoutVariableInstructions(\n commands: readonly ShellCommand[],\n instructions: readonly VariableInstruction[],\n): ShellCommand[] {\n const isInInstruction = (words: ShellCommand): boolean => {\n const start = words[0]?.start ?? -1;\n return instructions.some(\n (instruction) => start >= instruction.start && start < instruction.end,\n );\n };\n return commands.filter((words) => !isInInstruction(words));\n}\n\nconst valueCommands = ({ value, start }: DockerVariable): ShellCommand[] =>\n shellCommandsAt(value, start);\n\n/**\n * Migrate the commands of a Dockerfile: exec-form arrays word by word, everything else as shell\n * text, with the values of `ARG` and `ENV` variables as commands that `$NAME` runs. Each finding\n * names its `file:line`.\n */\nexport function migrateDockerfile(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const forms = execForms(text);\n const exec = execCommands(forms);\n const shellForm = shellCommands(withoutExecForms(text, forms));\n const instructions = variableInstructions(text, shellForm);\n // A value that runs the generator is migrated where it is set, its flags where it is used.\n const definitions = instructions.flatMap((instruction) => instruction.variables);\n const values = definitions.flatMap(valueCommands);\n const run = withoutVariableInstructions(shellForm, instructions);\n const commands = [...run, ...values, ...exec.commands];\n const variables = shellVariables(definitions);\n const { edits, changes, manualSteps } = commandWordFindings(commands, locate, variables);\n const steps = [...manualSteps, ...escapedScriptSteps(exec.escaped, lineOf)];\n return { text: applyTextEdits(text, edits), changes, manualSteps: steps };\n}\n","/**\n * What the catalogs of a project keep under the old names (domain/catalogs.ts makes the plan).\n * It is apart from the catalogs so that dependency-map.ts can read a plan without importing the\n * catalog readers, which import it.\n */\n\nconst CATALOG_PROTOCOL = \"catalog:\";\n/** The name that `catalog:` gives the default catalog. */\nexport const DEFAULT_CATALOG = \"default\";\n\n/** The catalog that a spec points at (`catalog:` is the default one), or undefined. */\nexport function catalogOfSpec(spec: string): string | undefined {\n if (!spec.startsWith(CATALOG_PROTOCOL)) {\n return undefined;\n }\n // pnpm trims the name, so `catalog: ` is the default catalog too.\n return spec.slice(CATALOG_PROTOCOL.length).trim() || DEFAULT_CATALOG;\n}\n\n/** Entries of catalogs, by catalog and package name. */\nexport class CatalogEntries {\n readonly #keys = new Set<string>();\n\n add(catalog: string, name: string): void {\n this.#keys.add(JSON.stringify([catalog, name]));\n }\n\n has(catalog: string, name: string): boolean {\n return this.#keys.has(JSON.stringify([catalog, name]));\n }\n}\n\n/** What the catalogs of a project keep under the old names. */\nexport interface CatalogPlan {\n /** Entries that a dependency keeps using under the old name: they are not renamed. */\n readonly inUse: CatalogEntries;\n /** Entries that keep the old name, with no entry for the new one: a dependency stays. */\n readonly kept: CatalogEntries;\n /**\n * The entries of the project's catalogs. A dependency on an entry that is not among them points\n * at a catalog outside the root (`--root packages/api` of a pnpm workspace): that entry cannot\n * be renamed, so the dependency keeps its name.\n */\n readonly defined: CatalogEntries;\n /**\n * Whether the root is a workspace root: it holds the workspace's catalogs, so there is no\n * catalog above it, and an entry missing from the project is missing from the workspace.\n */\n readonly isWorkspaceRoot: boolean;\n}\n\n/** The plan for files with no dependencies on catalogs (import maps): nothing is kept. */\nexport const NO_CATALOG_PLAN: CatalogPlan = {\n inUse: new CatalogEntries(),\n kept: new CatalogEntries(),\n defined: new CatalogEntries(),\n isWorkspaceRoot: false,\n};\n","import { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { migrateVersionSpec } from \"./version-spec.js\";\n\n/**\n * `npm:` specs name a package from the registry under another name: an alias in package.json\n * (`\"my-fetch\": \"npm:openapi-fetch@^0.13\"`), and the npm specifiers of Deno (in `deno.json`\n * imports and in sources: `npm:openapi-fetch@0.13/path`, `npm:/openapi-fetch@0.13/`). The package\n * in them is renamed like any other, and the range gets the openapi-typesafe version.\n */\n\nconst NPM_PROTOCOL = \"npm:\";\nconst SCOPE_PREFIX = \"@\";\nconst PATH_SEPARATOR = \"/\";\nconst VERSION_SEPARATOR = \"@\";\n\n/** The parts of `npm:[/]<name>[@<range>][/<path>]`; `rest` is the `/<path>` after the range. */\ninterface NpmSpec {\n readonly lead: string;\n readonly name: string;\n readonly range: string | undefined;\n readonly rest: string;\n}\n\n/** The end of the package name in `text`: a scoped name has one `/` inside. */\nfunction nameEnd(text: string): number {\n const searchFrom = text.startsWith(SCOPE_PREFIX) ? text.indexOf(PATH_SEPARATOR) + 1 : 0;\n const ends = [VERSION_SEPARATOR, PATH_SEPARATOR]\n .map((separator) => text.indexOf(separator, Math.max(searchFrom, 1)))\n .filter((index) => index !== -1);\n return ends.length === 0 ? text.length : Math.min(...ends);\n}\n\nfunction parseNpmSpec(spec: string): NpmSpec | undefined {\n if (!spec.startsWith(NPM_PROTOCOL)) {\n return undefined;\n }\n const body = spec.slice(NPM_PROTOCOL.length);\n const lead = body.startsWith(PATH_SEPARATOR) ? PATH_SEPARATOR : \"\";\n const text = body.slice(lead.length);\n const end = nameEnd(text);\n const name = text.slice(0, end);\n if (!text.startsWith(VERSION_SEPARATOR, end)) {\n return { lead, name, range: undefined, rest: text.slice(end) };\n }\n const rangeEnd = text.indexOf(PATH_SEPARATOR, end);\n const restStart = rangeEnd === -1 ? text.length : rangeEnd;\n return { lead, name, range: text.slice(end + 1, restStart), rest: text.slice(restStart) };\n}\n\n/**\n * An `npm:` spec of an original package, renamed. `isReported` when its range was kept;\n * `isDeep` when it reaches into the package (`npm:openapi-fetch@0.13/dist/index.js`).\n */\nexport interface MigratedNpmSpec {\n readonly spec: string;\n readonly isReported: boolean;\n readonly isDeep: boolean;\n}\n\n/** Whether `spec` is an `npm:` specifier of an original package (`npm:openapi-fetch@^0.13`). */\nexport function isOldPackageNpmSpec(spec: string): boolean {\n const parsed = parseNpmSpec(spec);\n return parsed !== undefined && PACKAGE_RENAMES.has(parsed.name);\n}\n\n/**\n * The `npm:` spec with the openapi-typesafe package and version, or undefined when `spec` is not\n * an `npm:` spec of an original package. A spec without a range keeps none; a range that is not\n * a semver range (a tag) is kept and reported.\n */\nexport function migrateNpmSpec(spec: string, version: string): MigratedNpmSpec | undefined {\n const parsed = parseNpmSpec(spec);\n const renamed = parsed === undefined ? undefined : PACKAGE_RENAMES.get(parsed.name);\n if (parsed === undefined || renamed === undefined) {\n return undefined;\n }\n const head = `${NPM_PROTOCOL}${parsed.lead}${renamed}`;\n const isDeep = parsed.rest !== \"\" && parsed.rest !== PATH_SEPARATOR;\n if (parsed.range === undefined) {\n return { spec: `${head}${parsed.rest}`, isReported: false, isDeep };\n }\n const decision = migrateVersionSpec(parsed.range, version);\n const isReported = decision.kind === \"kept\" && decision.isReported;\n const migrated = `${head}${VERSION_SEPARATOR}${decision.spec}${parsed.rest}`;\n return { spec: migrated, isReported, isDeep };\n}\n","/**\n * Credentials in URLs (`https://user:password@host`, `git+https://token@host`) that the findings\n * would copy into the report and the log. The project files keep them; only the findings hide\n * them, because a CI log or a temporary log file is a new place for a secret.\n */\n\nconst SCHEME_SEPARATOR = \"://\";\nconst HIDDEN_USERINFO = \"***\";\nconst USERINFO_END = \"@\";\n/** The authority of a URL ends at a path, a query, a fragment, a quote or white space. */\nconst AUTHORITY_END_RE = /[/?#\"'`\\s]/;\n\n/** The index where the authority that starts at `start` ends, and its last `@` (or -1). */\nfunction scanAuthority(text: string, start: number): { end: number; userinfoEnd: number } {\n let userinfoEnd = -1;\n let end = start;\n for (; end < text.length && !AUTHORITY_END_RE.test(text.charAt(end)); end++) {\n if (text.charAt(end) === USERINFO_END) {\n userinfoEnd = end;\n }\n }\n return { end, userinfoEnd };\n}\n\n/** `text` with the userinfo of every URL in it replaced by `***`. Linear in the text length. */\nexport function hideUrlCredentials(text: string): string {\n let hidden = \"\";\n let copiedUpTo = 0;\n for (let found = text.indexOf(SCHEME_SEPARATOR); found !== -1; ) {\n const start = found + SCHEME_SEPARATOR.length;\n const { end, userinfoEnd } = scanAuthority(text, start);\n if (userinfoEnd !== -1) {\n hidden += `${text.slice(copiedUpTo, start)}${HIDDEN_USERINFO}`;\n copiedUpTo = userinfoEnd;\n }\n found = text.indexOf(SCHEME_SEPARATOR, end);\n }\n return `${hidden}${text.slice(copiedUpTo)}`;\n}\n","import { assertNever } from \"./assert-never.js\";\nimport { type CatalogPlan, catalogOfSpec } from \"./catalog-plan.js\";\nimport type { Change, ManualStep } from \"./migration-findings.js\";\nimport { migrateNpmSpec } from \"./npm-alias.js\";\nimport { PACKAGE_RENAMES, renamedSpecifier } from \"./package-names.js\";\nimport type { TextEdit } from \"./text-edits.js\";\nimport { hideUrlCredentials } from \"./url-credentials.js\";\nimport { isLocalPackageSpec, migrateVersionSpec } from \"./version-spec.js\";\n\n/**\n * Maps of package names: dependency fields and catalogs (`name: spec`), and lists or keys that\n * only name a package (`peerDependenciesMeta`, `bundleDependencies`). The file formats (JSON and\n * YAML) give their entries with edits that keep the format's quoting; the decisions are here, so\n * every format renames the same way.\n */\n\n/** The string value of an entry, and the edit that replaces it. */\nexport interface SpecValue {\n readonly value: string;\n readonly replace: (spec: string) => TextEdit;\n}\n\n/** One `name: spec` entry. `spec` is undefined when the value is not a string. */\nexport interface SpecEntry {\n readonly name: string;\n readonly spec: SpecValue | undefined;\n readonly renameKey: (name: string) => TextEdit;\n}\n\n/** One place that only names a package: a key of a meta field, an item of a list. */\nexport interface NameEntry {\n readonly name: string;\n readonly rename: (name: string) => TextEdit;\n}\n\n/** The edits a file gets, and what the migration found while making them. */\nexport interface Findings {\n readonly edits: TextEdit[];\n readonly changes: Change[];\n readonly manualSteps: ManualStep[];\n}\n\nexport const newFindings = (): Findings => ({ edits: [], changes: [], manualSteps: [] });\n\n/**\n * A dependency field (`dependencies`, …), a catalog (`catalog`, `catalogs.legacy`, …), or an\n * import map (Deno's `imports` and `scopes`), whose keys are module specifiers: a package name, a\n * subpath of it or a prefix (`openapi-fetch/`).\n */\nexport type SpecMap =\n | { readonly kind: \"dependencies\"; readonly field: string }\n | {\n readonly kind: \"catalog\";\n /** Where the catalog is in its file (`catalogs.legacy`), for the report. */\n readonly catalog: string;\n /** The name that `catalog:<name>` gives it (`default` for `catalog:`). */\n readonly name: string;\n }\n | { readonly kind: \"imports\"; readonly field: string };\n\n/** What renamed entries get: the version of the tool, and the plan of the project's catalogs. */\nexport interface RenameTarget {\n readonly version: string;\n readonly catalogs: CatalogPlan;\n}\n\n/** Where a map is, the version renamed entries get, and where the findings go. */\nexport interface MapContext {\n readonly map: SpecMap;\n readonly version: string;\n readonly findings: Findings;\n /** What the project's catalogs keep under the old names (domain/catalogs.ts). */\n readonly catalogs: CatalogPlan;\n}\n\nconst PEER_FIELD = \"peerDependencies\";\n\nconst mapLabel = (map: SpecMap): string => (map.kind === \"catalog\" ? map.catalog : map.field);\n\n/** The new key of an entry of `map`, or undefined when it names no original package. */\nconst renamedKey = (name: string, map: SpecMap): string | undefined =>\n map.kind === \"imports\" ? renamedSpecifier(name)?.to : PACKAGE_RENAMES.get(name);\n\n/** The spec a renamed entry gets; `isReported` when it was kept because it is not a range. */\nfunction migrateSpec(spec: string, version: string): { spec: string; isReported: boolean } {\n const npm = migrateNpmSpec(spec, version);\n if (npm !== undefined) {\n return { spec: npm.spec, isReported: npm.isReported };\n }\n const decision = migrateVersionSpec(spec, version);\n return { spec: decision.spec, isReported: decision.kind === \"kept\" && decision.isReported };\n}\n\n/** A rename of one key or name, where it is, and the other names of that place. */\nexport interface Rename {\n readonly from: string;\n readonly to: string;\n readonly field: string;\n readonly names: ReadonlySet<string>;\n}\n\n/**\n * Whether the rename can be made: not when the place already has the new name too. Renaming then\n * would give a map the same key twice, and one entry would be lost without a word (finding\n * M10), so the old entry is left and reported.\n */\nexport function isFree({ from, to, field, names }: Rename, findings: Findings): boolean {\n if (names.has(to)) {\n findings.manualSteps.push({ kind: \"name-collision\", field, from, to });\n return false;\n }\n return true;\n}\n\n/** An entry under another name whose spec is an `npm:` alias of an original package. */\nfunction migrateAlias(entry: SpecEntry, { map, version, findings }: MapContext): void {\n const migrated = entry.spec === undefined ? undefined : migrateNpmSpec(entry.spec.value, version);\n if (entry.spec === undefined || migrated === undefined) {\n return;\n }\n findings.edits.push(entry.spec.replace(migrated.spec));\n const spec = hideUrlCredentials(migrated.spec);\n findings.changes.push({ kind: \"alias-renamed\", field: mapLabel(map), name: entry.name, spec });\n if (migrated.isReported) {\n findings.manualSteps.push({ kind: \"spec-kept\", name: entry.name, spec });\n }\n}\n\nfunction renamedChange(map: SpecMap, from: string, to: string, spec: string): Change {\n switch (map.kind) {\n case \"dependencies\":\n return { kind: \"dependency-renamed\", field: map.field, from, to, spec };\n case \"catalog\":\n return { kind: \"catalog-entry-renamed\", catalog: map.catalog, from, to, spec };\n case \"imports\":\n return { kind: \"import-renamed\", field: map.field, from, to, target: spec };\n default:\n return assertNever(map);\n }\n}\n\nfunction migrateEntry(\n entry: SpecEntry,\n spec: SpecValue,\n to: string,\n { map, version, findings }: MapContext,\n): void {\n const old = spec.value;\n const migrated = migrateSpec(old, version);\n findings.edits.push(entry.renameKey(to));\n if (migrated.spec !== old) {\n findings.edits.push(spec.replace(migrated.spec));\n }\n findings.changes.push(renamedChange(map, entry.name, to, hideUrlCredentials(migrated.spec)));\n if (migrated.isReported) {\n findings.manualSteps.push({ kind: \"spec-kept\", name: to, spec: hideUrlCredentials(old) });\n }\n if (map.kind === \"dependencies\" && map.field === PEER_FIELD) {\n findings.manualSteps.push({ kind: \"peer-dependency-renamed\", name: to });\n }\n}\n\n/**\n * Why an entry keeps its old name to stay in step with a catalog, or undefined. A dependency on a\n * catalog entry that stays keeps the name it points at; a catalog entry that a dependency keeps\n * using stays too, so `catalog:` never points at a name the catalog does not have. A dependency\n * on an entry outside the project keeps its name too: the tool edits no file outside the root.\n */\nfunction catalogHold(entry: SpecEntry, spec: SpecValue, { map, catalogs }: MapContext) {\n if (map.kind === \"catalog\") {\n const isInUse = catalogs.inUse.has(map.name, entry.name);\n return isInUse\n ? ({ kind: \"catalog-entry-in-use\", catalog: map.catalog, name: entry.name } as const)\n : undefined;\n }\n const catalog = map.kind === \"dependencies\" ? catalogOfSpec(spec.value) : undefined;\n if (catalog === undefined) {\n return undefined;\n }\n const reference = { field: mapLabel(map), name: entry.name, catalog };\n if (!catalogs.defined.has(catalog, entry.name)) {\n const kind = catalogs.isWorkspaceRoot ? \"catalog-entry-missing\" : \"catalog-entry-outside\";\n return { kind, ...reference } as const;\n }\n return catalogs.kept.has(catalog, entry.name)\n ? ({ kind: \"catalog-reference-kept\", ...reference } as const)\n : undefined;\n}\n\n/**\n * A dependency on a local package (`workspace:*`, `link:`, `file:`) is that package, which only\n * shares the original name: under the new name it would point at a package the project lacks.\n */\nfunction localPackageHold(entry: SpecEntry, spec: SpecValue, { map }: MapContext) {\n return map.kind === \"dependencies\" && isLocalPackageSpec(spec.value)\n ? ({ kind: \"local-package\", field: map.field, name: entry.name, spec: spec.value } as const)\n : undefined;\n}\n\n/** Why an entry keeps its old name, or undefined when it is renamed. */\nconst holdOf = (entry: SpecEntry, spec: SpecValue, context: MapContext) =>\n localPackageHold(entry, spec, context) ?? catalogHold(entry, spec, context);\n\n/**\n * Rename the original packages of a dependency field or catalog, in place, with `version` as\n * the new version, and retarget `npm:` aliases of them. An entry whose value is not a string (a\n * YAML anchor or flow value) is not one the tool understands: it is left and reported.\n */\nexport function migrateSpecMap(entries: readonly SpecEntry[], context: MapContext): void {\n const names = new Set(entries.map((entry) => entry.name));\n for (const entry of entries) {\n const to = renamedKey(entry.name, context.map);\n const field = mapLabel(context.map);\n if (to === undefined) {\n migrateAlias(entry, context);\n continue;\n }\n if (!isFree({ from: entry.name, to, field, names }, context.findings)) {\n continue;\n }\n const hold = entry.spec === undefined ? undefined : holdOf(entry, entry.spec, context);\n if (entry.spec === undefined) {\n context.findings.manualSteps.push({ kind: \"entry-not-edited\", field, name: entry.name });\n } else if (hold !== undefined) {\n context.findings.manualSteps.push(hold);\n } else {\n migrateEntry(entry, entry.spec, to, context);\n }\n }\n}\n\n/** Rename the original packages where `field` only names them. */\nexport function renameNames(\n entries: readonly NameEntry[],\n field: string,\n findings: Findings,\n): void {\n const names = new Set(entries.map((entry) => entry.name));\n for (const entry of entries) {\n const to = PACKAGE_RENAMES.get(entry.name);\n if (to !== undefined && isFree({ from: entry.name, to, field, names }, findings)) {\n findings.edits.push(entry.rename(to));\n findings.changes.push({\n kind: \"package-name-renamed\",\n location: field,\n from: entry.name,\n to,\n });\n }\n }\n}\n","import {\n type TreeList,\n type TreeMap,\n type TreeNode,\n type TreeScalar,\n textEntries,\n} from \"./config-documents.js\";\nimport type { NameEntry, SpecEntry } from \"./dependency-map.js\";\nimport type { TextEdit } from \"./text-edits.js\";\n\n/**\n * The tree side of domain/dependency-map.ts: the entries of parsed maps and lists, with the edits\n * that replace their keys and values in place (domain/config-documents.ts).\n */\n\n/** A scalar that a whole new value can replace. */\ntype EditableScalar = TreeScalar & { readonly encode: (value: string) => string };\n\nconst isEditable = (node: TreeNode): node is EditableScalar =>\n node.kind === \"scalar\" && node.encode !== undefined;\n\n/** The edit that writes `value` where `scalar` is. */\nexport const replaceScalar = (scalar: EditableScalar, value: string): TextEdit => ({\n start: scalar.start,\n end: scalar.end,\n text: scalar.encode(value),\n});\n\n/**\n * The `name: spec` entries of a dependency map, catalog or import map. A key the tool cannot\n * replace is left out; a value it cannot replace gives an entry without a spec.\n */\nexport function specEntries(map: TreeMap): SpecEntry[] {\n return textEntries(map).flatMap(({ key, value }): SpecEntry[] => {\n if (!isEditable(key)) {\n return [];\n }\n const spec = isEditable(value)\n ? { value: value.value, replace: (to: string) => replaceScalar(value, to) }\n : undefined;\n return [{ name: key.value, spec, renameKey: (name) => replaceScalar(key, name) }];\n });\n}\n\n/** The keys of `map` that the tool can replace, as names. */\nexport function keyEntries(map: TreeMap): NameEntry[] {\n return textEntries(map)\n .map(({ key }) => key)\n .filter(isEditable)\n .map((key) => ({ name: key.value, rename: (name) => replaceScalar(key, name) }));\n}\n\n/** The text items of `list` that the tool can replace, as names. */\nexport function itemEntries(list: TreeList): NameEntry[] {\n return list.items\n .filter(isEditable)\n .map((item) => ({ name: item.value, rename: (name) => replaceScalar(item, name) }));\n}\n\n/**\n * The keys of `node` and of the maps in it, at any depth, in order. Override fields name\n * packages by their keys (domain/override-targets.ts).\n */\nexport function nestedKeys(node: TreeNode): string[] {\n if (node.kind !== \"map\") {\n return [];\n }\n return textEntries(node).flatMap(({ key, value }) => [key.value, ...nestedKeys(value)]);\n}\n","// Import maps point at no catalog, so no catalog plan applies to them.\nimport { NO_CATALOG_PLAN } from \"./catalog-plan.js\";\nimport {\n type DocumentRead,\n isMap,\n mapsAt,\n type TreeMap,\n textEntries,\n unreadableConfig,\n} from \"./config-documents.js\";\nimport { type Findings, migrateSpecMap, newFindings } from \"./dependency-map.js\";\nimport type { FileMigration } from \"./migration-findings.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { specEntries } from \"./tree-entries.js\";\n\n/**\n * Deno import maps: the `imports` and `scopes` of `deno.json` / `deno.jsonc`, and of a separate\n * `import_map.json`. Sources import the keys, and the migration renames the packages in sources,\n * so a key that names an original package (`openapi-fetch`, `openapi-fetch/`) gets the new name\n * too, and an `npm:` value gets the new package and version. A value it cannot replace (a URL) is\n * kept and reported. Deno reads these files as JSONC; they are edited in place\n * (domain/config-documents.ts).\n */\n\nconst IMPORTS_FIELD = \"imports\";\nconst SCOPES_FIELD = \"scopes\";\nconst FIELD_SEPARATOR = \".\";\n\nfunction migrateImports(config: TreeMap, version: string, findings: Findings): void {\n for (const imports of mapsAt(config, IMPORTS_FIELD)) {\n const map = { kind: \"imports\", field: IMPORTS_FIELD } as const;\n migrateSpecMap(specEntries(imports), { map, version, findings, catalogs: NO_CATALOG_PLAN });\n }\n for (const scopes of mapsAt(config, SCOPES_FIELD)) {\n for (const { key, value } of textEntries(scopes)) {\n if (isMap(value)) {\n const field = [SCOPES_FIELD, key.value].join(FIELD_SEPARATOR);\n const map = { kind: \"imports\", field } as const;\n migrateSpecMap(specEntries(value), { map, version, findings, catalogs: NO_CATALOG_PLAN });\n }\n }\n }\n}\n\nconst PATH_SEPARATOR = \"/\";\nconst SCOPE_PREFIX = \"@\";\n\n/** The keys of an import map, the module specifiers it maps. */\nfunction importMapKeys(config: TreeMap): string[] {\n const scoped = mapsAt(config, SCOPES_FIELD)\n .flatMap(textEntries)\n .flatMap(({ value }) => (isMap(value) ? [value] : []));\n return [...mapsAt(config, IMPORTS_FIELD), ...scoped]\n .flatMap(textEntries)\n .map(({ key }) => key.value);\n}\n\n/**\n * The package names that an import map declares for the sources that use it: `pkg` of the keys\n * `pkg`, `pkg/` and `pkg/subpath`, and `@scope/pkg` of scoped keys. Deno resolves a bare import\n * through the map, so such a package needs no `package.json` entry.\n */\nexport function importMapNames(config: TreeMap): string[] {\n return importMapKeys(config).map((key) => {\n const parts = key.split(PATH_SEPARATOR);\n return key.startsWith(SCOPE_PREFIX)\n ? parts.slice(0, 2).join(PATH_SEPARATOR)\n : (parts[0] ?? key);\n });\n}\n\n/** Migrate the import map of a Deno config or import map file (`read` is `text` parsed). */\nexport function migrateImportMap(text: string, read: DocumentRead, version: string): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const config of read.documents.filter(isMap)) {\n migrateImports(config, version, findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import { type DocumentRead, isMap, isScalar, type TreeMap, valuesAt } from \"./config-documents.js\";\nimport type { ManualStep } from \"./migration-findings.js\";\nimport { referencedProjectPath } from \"./relative-references.js\";\n\n/**\n * A Deno config can keep its import map in another file and name it: `\"importMap\":\n * \"./deps.json\"`. Deno resolves the name against the folder of the config. A file in the project\n * is migrated as an import map; one the tool cannot edit (a URL, a path outside the project) is\n * reported, since the sources it maps get the new names.\n */\n\nconst IMPORT_MAP_FIELD = \"importMap\";\n\n/** Where the import map that a config names is, for a config at a project-relative path. */\nexport type ImportMapLocation =\n | { readonly kind: \"in-project\"; readonly path: string }\n | { readonly kind: \"not-editable\"; readonly reference: string };\n\n/** The `importMap` values of a config's roots, in order. */\nfunction importMapReferences(roots: readonly TreeMap[]): string[] {\n return roots\n .flatMap((root) => valuesAt(root, IMPORT_MAP_FIELD))\n .flatMap((value) => (isScalar(value) ? [value.value] : []));\n}\n\nexport function importMapLocation(configPath: string, reference: string): ImportMapLocation {\n const path = referencedProjectPath(configPath, reference);\n return path === undefined ? { kind: \"not-editable\", reference } : { kind: \"in-project\", path };\n}\n\n/** The import maps that the config at `configPath` names, read as `roots`. */\nexport const importMapLocations = (\n configPath: string,\n roots: readonly TreeMap[],\n): ImportMapLocation[] =>\n importMapReferences(roots).map((reference) => importMapLocation(configPath, reference));\n\n/** The manual steps for the import maps of a config that the tool cannot edit. */\nexport function importMapSteps(configPath: string, read: DocumentRead): ManualStep[] {\n const roots = read.kind === \"read\" ? read.documents.filter(isMap) : [];\n return importMapLocations(configPath, roots).flatMap((location) =>\n location.kind === \"not-editable\"\n ? [{ kind: \"import-map-not-editable\" as const, reference: location.reference }]\n : [],\n );\n}\n","import { type ImportedSpecifier, packageOfSpecifier } from \"./declared-packages.js\";\nimport { MigrationBugError } from \"./migration-bug.js\";\nimport {\n type Change,\n type FileMigration,\n lineLocator,\n type ManualStep,\n} from \"./migration-findings.js\";\nimport { isOldPackageNpmSpec, migrateNpmSpec } from \"./npm-alias.js\";\nimport {\n oldPackageInNodeModules,\n PACKAGE_RENAMES,\n type RenamedSpecifier,\n renamedSpecifier,\n} from \"./package-names.js\";\nimport { hideUrlCredentials } from \"./url-credentials.js\";\n\n/**\n * A string literal of a source file, as a parser finds it. `start` and `end` are the offsets of\n * its value, inside the quotes. `isModuleSpecifier` is true where the string names a module:\n * `import … from`, `export … from`, `import()`, `require()`, `import x = require()`,\n * `import(\"…\")` types and JSDoc `@import` tags, `declare module`, `/// <reference types>` and the\n * module mocks of vitest, jest and bun. Strings nest: a template with substitutions spans its\n * text as written, so the strings inside its `${…}` lie within it.\n */\nexport interface SourceString {\n readonly start: number;\n readonly end: number;\n readonly value: string;\n readonly isModuleSpecifier: boolean;\n}\n\n/** Source file extensions whose text can hold module specifiers. */\nexport const SOURCE_EXTENSIONS: ReadonlySet<string> = new Set([\n \".ts\",\n \".tsx\",\n \".mts\",\n \".cts\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".vue\",\n \".svelte\",\n \".astro\",\n \".mdx\",\n]);\n\n/** A renamed specifier; `keptSpec` is the old spec when its range could not be replaced. */\ninterface RenamedValue extends RenamedSpecifier {\n readonly keptSpec?: string;\n}\n\n/**\n * The new specifier: a package name or subpath, or a Deno `npm:` specifier\n * (`npm:openapi-fetch@^0.13`), which gets the new package and version.\n */\nfunction renamedValue(value: string, version: string): RenamedValue | undefined {\n const npm = migrateNpmSpec(value, version);\n if (npm === undefined) {\n return renamedSpecifier(value);\n }\n const renamed = { to: npm.spec, isDeep: npm.isDeep };\n return npm.isReported ? { ...renamed, keptSpec: hideUrlCredentials(value) } : renamed;\n}\n\n/**\n * Whether the migration renames a string with this value, or reports it as one that names a\n * package: an old package name or subpath, or an `npm:` specifier of one.\n */\nexport const namesRenamedModule = (value: string): boolean =>\n isOldPackageNpmSpec(value) || renamedSpecifier(value) !== undefined;\n\nconst TEMPLATE_SUBSTITUTION = \"${\";\n\n/**\n * The new name of an original package that a template specifier ends its name with, right before\n * a substitution (`openapi-fetch${suffix}`). The substitution may go on with the name or start a\n * subpath, so only the user knows what to write; undefined for any other specifier.\n */\nfunction dynamicPackage(value: string): string | undefined {\n const at = value.indexOf(TEMPLATE_SUBSTITUTION);\n return at === -1 ? undefined : PACKAGE_RENAMES.get(value.slice(0, at));\n}\n\n/** Outer strings first: a string that holds another starts no later and ends no earlier. */\nconst byStartThenOuter = (left: SourceString, right: SourceString): number =>\n left.start - right.start || right.end - left.end;\n\n/**\n * The strings in file order, outer before inner, each span once. A span found twice (two scripts\n * of a component that overlap) is one string, and a module specifier if either finding says so.\n * Spans may nest, as a template holds the strings of its substitutions; spans that cross cannot\n * both be replaced: that is a scanner bug, and editing on would corrupt the file.\n */\nfunction distinctStrings(strings: readonly SourceString[]): SourceString[] {\n const distinct: SourceString[] = [];\n const enclosing: SourceString[] = [];\n for (const found of [...strings].sort(byStartThenOuter)) {\n const previous = distinct.at(-1);\n if (previous?.start === found.start && previous.end === found.end) {\n const isModuleSpecifier = previous.isModuleSpecifier || found.isModuleSpecifier;\n distinct[distinct.length - 1] = { ...previous, isModuleSpecifier };\n continue;\n }\n let outer = enclosing.at(-1);\n while (outer !== undefined && outer.end <= found.start) {\n enclosing.pop();\n outer = enclosing.at(-1);\n }\n if (outer !== undefined && found.end > outer.end) {\n throw new MigrationBugError(\n `source strings overlap at offsets ${outer.start}-${outer.end} and ` +\n `${found.start}-${found.end}`,\n );\n }\n enclosing.push(found);\n distinct.push(found);\n }\n return distinct;\n}\n\nconst dynamicStep = (line: number, value: string, to: string): ManualStep => ({\n kind: \"dynamic-specifier\",\n line,\n value,\n to,\n});\n\n/**\n * The steps for a string that is not renamed: a module name built at run time from an old\n * package name, or a path into the installed files of an old package, which the new package\n * does not have there.\n */\nfunction unrenamedSteps(found: SourceString, line: number, dynamic: string | undefined) {\n if (dynamic !== undefined) {\n return [dynamicStep(line, found.value, dynamic)];\n }\n const name = found.isModuleSpecifier ? oldPackageInNodeModules(found.value) : undefined;\n const to = name === undefined ? undefined : PACKAGE_RENAMES.get(name);\n return name === undefined || to === undefined\n ? []\n : [{ kind: \"old-package-import\" as const, line, specifier: found.value, name, to }];\n}\n\n/**\n * Rename the original packages where a source file names them as modules. A string that equals a\n * package name anywhere else (an object key, a label, a config value) may mean the package or\n * may not, so it is reported, not changed. Comments are not strings and stay as written. The\n * `kept` packages stay: the file's manifest points them at a local package of that name.\n */\nexport function migrateModuleSpecifiers(\n text: string,\n strings: readonly SourceString[],\n version: string,\n kept: ReadonlySet<string> = new Set(),\n): FileMigration {\n const changes: Change[] = [];\n const manualSteps: ManualStep[] = [];\n let migrated = \"\";\n let copiedUpTo = 0;\n const lineOf = lineLocator(text);\n for (const found of distinctStrings(strings)) {\n const isKept = kept.has(packageOfSpecifier(found.value));\n const renamed = isKept ? undefined : renamedValue(found.value, version);\n const line = lineOf(found.start);\n const dynamic = found.isModuleSpecifier ? dynamicPackage(found.value) : undefined;\n if (renamed === undefined) {\n manualSteps.push(...unrenamedSteps(found, line, dynamic));\n continue;\n }\n // A string inside a template that was replaced is part of the replacement, which keeps it as\n // written, so it can only be reported.\n if (!found.isModuleSpecifier || found.start < copiedUpTo) {\n manualSteps.push({ kind: \"string-names-package\", line, value: found.value, to: renamed.to });\n continue;\n }\n changes.push({ kind: \"specifier-renamed\", line, from: found.value, to: renamed.to });\n // A deep import reaches into the package's files, whose layout is not part of the contract.\n if (renamed.isDeep) {\n manualSteps.push({ kind: \"deep-import\", line, specifier: renamed.to });\n }\n if (renamed.keptSpec !== undefined) {\n manualSteps.push({ kind: \"spec-kept\", name: renamed.to, spec: renamed.keptSpec });\n }\n migrated += `${text.slice(copiedUpTo, found.start)}${renamed.to}`;\n copiedUpTo = found.end;\n }\n return { text: migrated + text.slice(copiedUpTo), changes, manualSteps };\n}\n\n/**\n * The module specifiers of a source file as the migration leaves them: an original package with\n * its new name, any other specifier as written, each with its line.\n */\nexport function importedSpecifiers(\n text: string,\n strings: readonly SourceString[],\n): ImportedSpecifier[] {\n const lineOf = lineLocator(text);\n return strings\n .filter((found) => found.isModuleSpecifier)\n .map((found) => ({\n specifier: renamedSpecifier(found.value)?.to ?? found.value,\n line: lineOf(found.start),\n }));\n}\n","import {\n type DocumentPath,\n type DocumentRead,\n isMap,\n type TreeNode,\n textEntries,\n} from \"./config-documents.js\";\nimport { lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { namesRenamedModule, type SourceString } from \"./source-migration.js\";\n\n/**\n * Jest names packages inside patterns: `moduleNameMapper: { \"^openapi-fetch$\": … }`,\n * `transformIgnorePatterns: [\"node_modules/(?!(openapi-fetch)/)\"]`. A pattern is not a module\n * specifier, and whether it should match the new name is the user's call, so each one that names\n * an old package is reported, never changed: in `jest.config.*`, and in the `jest` field of\n * package.json.\n */\n\n/** The names Jest looks for its config under. */\nconst JEST_CONFIG_RE = /^jest\\.config\\.(?:[cm]?[jt]s|json)$/;\nexport const JEST_FIELD = \"jest\";\n/** A character that a package name can go on with; a name in a pattern is not followed by one. */\nconst NAME_CHARACTER_RE = /[\\w-]/;\nconst FIELD_SEPARATOR = \".\";\n\nexport const isJestConfig = (fileName: string): boolean => JEST_CONFIG_RE.test(fileName);\n\n/** Whether `name` is in `value` as a whole package name, not a part of a longer one. */\nfunction hasWholeName(value: string, name: string): boolean {\n for (let at = value.indexOf(name); at !== -1; at = value.indexOf(name, at + 1)) {\n const before = value[at - 1] ?? \"\";\n const after = value[at + name.length] ?? \"\";\n if (!NAME_CHARACTER_RE.test(before) && !NAME_CHARACTER_RE.test(after)) {\n return true;\n }\n }\n return false;\n}\n\n/** The old packages that a pattern names, in the order of PACKAGE_RENAMES. */\nexport const oldPackagesInPattern = (value: string): string[] =>\n [...PACKAGE_RENAMES.keys()].filter((name) => hasWholeName(value, name));\n\n/**\n * The steps for the old packages a pattern names. `isNameReported` is true where a string that is\n * a module name is reported already: the source migration reports such a string of a script\n * (`\"openapi-fetch\"`, `\"openapi-fetch/$1\"`) as a string that names the package. Nothing reports a\n * JSON value, so there it is a step too.\n */\nconst patternSteps = (value: string, location: string, isNameReported: boolean): ManualStep[] =>\n isNameReported && namesRenamedModule(value)\n ? []\n : oldPackagesInPattern(value).map((name) => ({\n kind: \"pattern-names-package\",\n location,\n value,\n name,\n to: PACKAGE_RENAMES.get(name) ?? name,\n }));\n\n/** The steps for the strings of a Jest config script that are not module specifiers. */\nexport function jestScriptSteps(text: string, strings: readonly SourceString[]): ManualStep[] {\n const lineOf = lineLocator(text);\n return strings\n .filter((string) => !string.isModuleSpecifier)\n .flatMap((string) => patternSteps(string.value, `line ${lineOf(string.start)}`, true));\n}\n\n/** The keys and string values of `node` with the key path they are at. */\nfunction textsAt(node: TreeNode, path: DocumentPath): { value: string; path: DocumentPath }[] {\n switch (node.kind) {\n case \"scalar\":\n return [{ value: node.value, path }];\n case \"list\":\n return node.items.flatMap((item, index) => textsAt(item, [...path, index]));\n case \"map\":\n return textEntries(node).flatMap(({ key, value }) => [\n { value: key.value, path },\n ...textsAt(value, [...path, key.value]),\n ]);\n default:\n return [];\n }\n}\n\n/** The steps for a Jest config in JSON: `node` at `path` (`[\"jest\"]` in package.json). */\nexport const jestConfigSteps = (node: TreeNode, path: DocumentPath): ManualStep[] =>\n textsAt(node, path).flatMap(({ value, path: at }) =>\n patternSteps(value, at.join(FIELD_SEPARATOR), false),\n );\n\n/** The steps for `jest.config.json`, read as `read`. */\nexport const jestJsonSteps = (read: DocumentRead): ManualStep[] =>\n read.kind === \"read\"\n ? read.documents.filter(isMap).flatMap((root) => jestConfigSteps(root, []))\n : [];\n","import { migrateCommand } from \"./command-migration.js\";\nimport { type CommandPathPattern, isCommandPath } from \"./command-paths.js\";\nimport type { DocumentString } from \"./config-documents.js\";\nimport type { Change, FileMigration, ManualStep } from \"./migration-findings.js\";\nimport { applyTextEdits, type TextEdit } from \"./text-edits.js\";\n\n/**\n * Commands in JSON configs, at the paths of domain/command-paths.ts. Only the strings at those\n * paths are migrated, and each is replaced in place, so the rest of the file keeps its formatting.\n */\n\n/** Migrate the command strings of a JSON config whose key paths match one of `patterns`. */\nexport function migrateJsonCommands(\n text: string,\n strings: readonly DocumentString[],\n patterns: readonly CommandPathPattern[],\n): FileMigration {\n const changes: Change[] = [];\n const manualSteps: ManualStep[] = [];\n const edits: TextEdit[] = [];\n for (const found of strings.filter((string) => isCommandPath(string.path, patterns))) {\n const migrated = migrateCommand(found.value, found.path.join(\".\"));\n changes.push(...migrated.changes);\n manualSteps.push(...migrated.manualSteps);\n if (migrated.text !== found.value) {\n edits.push({ start: found.start, end: found.end, text: JSON.stringify(migrated.text) });\n }\n }\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","/**\n * The literals of just expressions: in a variable's value (`gen := env_var_or_default(\"GEN\",\n * \"npx openapi-typescript\")`), in a recipe parameter's default (`types gen=\"npx …\":`) and in an\n * interpolation (`{{ \"npx …\" }}`). A string can become command text of a recipe line, and a\n * backtick is a command that just runs, so their text is read as command lines where it is\n * written. Which literal an expression evaluates to (an `if`, a function call, the environment)\n * is known only when just runs.\n */\n\n/** A string literal or a backtick, with the place of its text between the delimiters. */\nexport interface JustLiteral {\n readonly kind: \"string\" | \"backtick\";\n /** The offset of the opening delimiter. */\n readonly start: number;\n /** The offset after the closing delimiter. */\n readonly end: number;\n readonly contentStart: number;\n /** The text between the delimiters as written: an escape (`\\\"`) stays two characters. */\n readonly content: string;\n}\n\n/** The delimiters of just, the indented (tripled) forms first. */\nconst DELIMITERS: readonly string[] = ['\"\"\"', \"'''\", \"```\", '\"', \"'\", \"`\"];\nconst BACKTICK = \"`\";\n/** The one delimiter in which just reads escapes, so `\\\"` does not end the string. */\nconst ESCAPING_DELIMITER = '\"';\nconst ESCAPE = \"\\\\\";\nconst COMMENT_START = \"#\";\nconst LINE_BREAK = \"\\n\";\n\n/** The end of the text that a delimiter at `from` closes, or undefined when it is not closed. */\nfunction closingOffset(text: string, delimiter: string, from: number): number | undefined {\n if (delimiter !== ESCAPING_DELIMITER) {\n const close = text.indexOf(delimiter, from);\n return close === -1 ? undefined : close;\n }\n for (let index = from; index < text.length; index += 1) {\n const char = text[index];\n if (char === ESCAPE) {\n index += 1;\n } else if (char === ESCAPING_DELIMITER || char === LINE_BREAK) {\n return char === ESCAPING_DELIMITER ? index : undefined;\n }\n }\n return undefined;\n}\n\n/** The literal that starts at `offset`, or undefined when none does. */\nexport function literalAt(text: string, offset: number): JustLiteral | undefined {\n const delimiter = DELIMITERS.find((candidate) => text.startsWith(candidate, offset));\n if (delimiter === undefined) {\n return undefined;\n }\n const contentStart = offset + delimiter.length;\n const close = closingOffset(text, delimiter, contentStart);\n if (close === undefined) {\n return undefined;\n }\n const kind = delimiter.startsWith(BACKTICK) ? \"backtick\" : \"string\";\n const content = text.slice(contentStart, close);\n return { kind, start: offset, end: close + delimiter.length, contentStart, content };\n}\n\n/** The literals of an expression and the offset where it ends. */\nexport interface JustExpression {\n readonly literals: readonly JustLiteral[];\n readonly end: number;\n}\n\n/**\n * The expression from `start` to the end of its line, before a comment: a literal that spans\n * lines (`\"\"\"…\"\"\"`) moves the end to the line where it closes.\n */\nexport function expressionAt(text: string, start: number): JustExpression {\n const literals: JustLiteral[] = [];\n let index = start;\n while (index < text.length && text[index] !== LINE_BREAK && text[index] !== COMMENT_START) {\n const literal = literalAt(text, index);\n literals.push(...(literal === undefined ? [] : [literal]));\n index = literal?.end ?? index + 1;\n }\n return { literals, end: index };\n}\n\n/** The literals between `start` and `end`, which no literal crosses (a parameter default). */\nexport function literalsBetween(text: string, start: number, end: number): JustLiteral[] {\n const literals: JustLiteral[] = [];\n for (let index = start; index < end; ) {\n const literal = literalAt(text, index);\n literals.push(...(literal === undefined ? [] : [literal]));\n index = literal?.end ?? index + 1;\n }\n return literals;\n}\n\n/** An interpolation of a recipe line, `{{…}}`, with the literals of its expression. */\nexport interface JustInterpolation {\n readonly start: number;\n readonly end: number;\n readonly literals: readonly JustLiteral[];\n}\n\nconst INTERPOLATION_OPEN = \"{{\";\nconst INTERPOLATION_CLOSE = \"}}\";\n\n/** The interpolation that opens at `start`, or undefined when its line does not close it. */\nfunction interpolationAt(text: string, start: number): JustInterpolation | undefined {\n const literals: JustLiteral[] = [];\n for (let index = start + INTERPOLATION_OPEN.length; index < text.length; ) {\n if (text.startsWith(INTERPOLATION_CLOSE, index)) {\n return { start, end: index + INTERPOLATION_CLOSE.length, literals };\n }\n if (text[index] === LINE_BREAK) {\n return undefined;\n }\n const literal = literalAt(text, index);\n literals.push(...(literal === undefined ? [] : [literal]));\n index = literal?.end ?? index + 1;\n }\n return undefined;\n}\n\n/** The interpolations of a text in order; a `}}` inside a literal does not close one. */\nexport function interpolationsOf(text: string): JustInterpolation[] {\n const found: JustInterpolation[] = [];\n for (let open = text.indexOf(INTERPOLATION_OPEN); open !== -1; ) {\n const interpolation = interpolationAt(text, open);\n found.push(...(interpolation === undefined ? [] : [interpolation]));\n const next = interpolation?.end ?? open + INTERPOLATION_OPEN.length;\n open = text.indexOf(INTERPOLATION_OPEN, next);\n }\n return found;\n}\n","import { type JustLiteral, literalAt, literalsBetween } from \"./just-expressions.js\";\n\n/**\n * The parameters of justfile recipes: `types gen=\"npx openapi-typescript\" *args:`. A parameter is\n * a variable of its recipe's lines (`{{gen}}`), set by its default or by the command line\n * (`just types other`), so its value can always be another program.\n */\n\n/** A parameter with a default: its name, the literals of the default, the variable it names. */\nexport interface ParameterDefault {\n readonly name: string;\n readonly literals: readonly JustLiteral[];\n /** The variable that the default is (`gen=other`), or undefined for another expression. */\n readonly target: string | undefined;\n}\n\n/** A recipe's header up to its colon, which just reads and no shell does. */\nexport interface RecipeHeader {\n readonly start: number;\n readonly end: number;\n readonly defaults: readonly ParameterDefault[];\n}\n\n/** The recipe name at the start of a line, with the quiet `@` prefix. */\nconst RECIPE_NAME_RE = /^@?[A-Za-z_][A-Za-z0-9_-]*(?=[ \\t:])/gm;\n/** One parameter: its kind prefix (`+`, `*`, `$`), its name and its default. */\nconst PARAMETER_RE = /^[+*$]*([A-Za-z_][A-Za-z0-9_-]*)(?:=([\\s\\S]*))?$/;\nconst NAME_RE = /^[A-Za-z_][A-Za-z0-9_-]*$/;\nconst COLON = \":\";\nconst EQUALS = \"=\";\nconst OPEN_PAREN = \"(\";\nconst CLOSE_PAREN = \")\";\nconst COMMENT_START = \"#\";\nconst LINE_BREAK = \"\\n\";\nconst BLANK_RE = /[ \\t]/;\n\n/** How a character changes the depth of parentheses. */\nconst depthChange = (char: string | undefined): number =>\n char === OPEN_PAREN ? 1 : char === CLOSE_PAREN ? -1 : 0;\n\n/** A word of the parameter list: its place, literals and parentheses kept whole. */\ninterface ParameterWord {\n readonly start: number;\n readonly end: number;\n}\n\n/**\n * The colon that ends the header that starts at `from`, or undefined when the line is not a\n * header: `:=` (a `set` or an `alias`) or a comment comes first, or the line has no colon.\n */\nfunction headerColon(text: string, from: number): number | undefined {\n for (let index = from; index < text.length && text[index] !== LINE_BREAK; ) {\n const literal = literalAt(text, index);\n const char = text[index];\n if (literal !== undefined) {\n index = literal.end;\n continue;\n }\n if (char === COMMENT_START || (char === COLON && text[index + 1] === EQUALS)) {\n return undefined;\n }\n if (char === COLON) {\n return index;\n }\n index += 1;\n }\n return undefined;\n}\n\n/** The words between `start` and `end`, split at blanks outside literals and parentheses. */\nfunction parameterWords(text: string, start: number, end: number): ParameterWord[] {\n const words: ParameterWord[] = [];\n let wordStart: number | undefined;\n let depth = 0;\n for (let index = start; index < end; ) {\n const isBreak = depth === 0 && BLANK_RE.test(text[index] ?? \"\");\n if (isBreak && wordStart !== undefined) {\n words.push({ start: wordStart, end: index });\n }\n wordStart = isBreak ? undefined : (wordStart ?? index);\n const literal = isBreak ? undefined : literalAt(text, index);\n depth += literal === undefined ? depthChange(text[index]) : 0;\n index = literal?.end ?? index + 1;\n }\n return wordStart === undefined ? words : [...words, { start: wordStart, end }];\n}\n\nfunction parameterDefault(text: string, word: ParameterWord): ParameterDefault[] {\n const written = text.slice(word.start, word.end);\n const match = PARAMETER_RE.exec(written);\n const value = match?.[2];\n if (match === null || value === undefined) {\n return [];\n }\n const defaultStart = word.end - value.length;\n const literals = literalsBetween(text, defaultStart, word.end);\n const target = NAME_RE.test(value) ? value : undefined;\n return [{ name: match[1] as string, literals, target }];\n}\n\n/** The recipe headers of a justfile with the defaults of their parameters. */\nexport function recipeHeaders(text: string): RecipeHeader[] {\n return [...text.matchAll(RECIPE_NAME_RE)].flatMap((match) => {\n const nameEnd = match.index + match[0].length;\n const colon = headerColon(text, nameEnd);\n if (colon === undefined) {\n return [];\n }\n const words = parameterWords(text, nameEnd, colon);\n const defaults = words.flatMap((word) => parameterDefault(text, word));\n return [{ start: match.index, end: colon, defaults }];\n });\n}\n","import type { Locate, ShellTextFindings } from \"./command-migration.js\";\nimport type { DocumentPath, DocumentString } from \"./config-documents.js\";\nimport { namesOriginalPackage } from \"./package-names.js\";\n\n/**\n * A CI step can name the program that runs its script: GitHub Actions `shell: python` next to\n * `run`, or as `defaults.run.shell` of the job or the workflow; CircleCI `shell` next to\n * `command`, of the job, or of the executor the job runs on. A script for a program other than a\n * shell is code of that language, so the command migration leaves it as it is and reports it\n * when it names an old package.\n */\n\n/** The key of a CI step or job that names the program its scripts go to. */\nconst STEP_SHELL_KEY = \"shell\";\n/** GitHub Actions' default shell of a job or a workflow: `defaults.run.shell`. */\nconst DEFAULT_SHELL_PATH: readonly string[] = [\"defaults\", \"run\", STEP_SHELL_KEY];\n/**\n * Shells whose scripts are command lines as the tool reads them: POSIX shells, PowerShell, cmd,\n * and the wrappers that run bash on Windows (`msys2 {0}` of setup-msys2, `wsl-bash {0}` of\n * setup-wsl).\n */\nconst COMMAND_LINE_SHELLS: ReadonlySet<string> = new Set([\n ...[\"sh\", \"bash\", \"dash\", \"ash\", \"zsh\", \"ksh\"],\n ...[\"pwsh\", \"powershell\", \"cmd\"],\n ...[\"msys2\", \"wsl-bash\"],\n]);\n/** `env` runs the program after its options and assignments (`/usr/bin/env bash -e {0}`). */\nconst ENV_PROGRAM = \"env\";\n/** The options of `env` that take the next word as their value. */\nconst ENV_OPTIONS_WITH_VALUE: ReadonlySet<string> = new Set([\"-u\", \"--unset\", \"-C\", \"--chdir\"]);\nconst OPTION_START = \"-\";\nconst ASSIGNMENT = \"=\";\nconst PATH_SEPARATOR_RE = /[/\\\\]/;\nconst WINDOWS_EXECUTABLE_RE = /\\.exe$/i;\nconst WHITESPACE_RE = /\\s+/;\n/** CircleCI's top-level map of executors, each of which may name a `shell`. */\nconst EXECUTORS_KEY = \"executors\";\n/** The keys of the path of an executor's shell: `executors`, the executor name, `shell`. */\nconst EXECUTOR_SHELL_PATH_LENGTH = 3;\n/** The key of a CircleCI job that names its executor: `executor: py`. */\nconst EXECUTOR_KEY = \"executor\";\n/** The key of the executor name in the map form: `executor: { name: py }`. */\nconst EXECUTOR_NAME_KEY = \"name\";\n\n/** The `shell` of the step that a script belongs to, when it is not a shell. */\nexport type StepShellOf = (value: DocumentString) => string | undefined;\n\n/** The name of a program word: `bash` of `/usr/bin/bash` and of `C:\\msys64\\bin\\bash.exe`. */\nconst programName = (word: string): string =>\n (word.split(PATH_SEPARATOR_RE).at(-1) ?? \"\").replace(WINDOWS_EXECUTABLE_RE, \"\");\n\n/** The number of words after `env` before its program: options, their values, assignments. */\nfunction envPrefixLength(words: readonly string[]): number {\n let index = 0;\n while (index < words.length) {\n const word = words[index] ?? \"\";\n if (ENV_OPTIONS_WITH_VALUE.has(word)) {\n index += 2;\n } else if (word.startsWith(OPTION_START) || word.includes(ASSIGNMENT)) {\n index += 1;\n } else {\n break;\n }\n }\n return index;\n}\n\n/** The program of a `shell` value (`python`, `bash -e {0}`, `/usr/bin/env bash -e {0}`). */\nfunction shellProgram(shell: string): string {\n const words = shell.trim().split(WHITESPACE_RE);\n const first = programName(words[0] ?? \"\");\n if (first !== ENV_PROGRAM) {\n return first;\n }\n const rest = words.slice(1);\n return programName(rest[envPrefixLength(rest)] ?? \"\");\n}\n\n/** Whether a `shell` value or a shebang runs a shell whose scripts the tool reads as commands. */\nexport const isCommandLineShell = (shell: string): boolean =>\n COMMAND_LINE_SHELLS.has(shellProgram(shell));\n\n/** Whether a document path ends with `keys`. */\nconst endsWith = (path: DocumentPath, keys: readonly string[]): boolean =>\n keys.every((key, index) => path[path.length - keys.length + index] === key);\n\nconst isDefaultShell = (value: DocumentString): boolean => endsWith(value.path, DEFAULT_SHELL_PATH);\n\n/**\n * The map whose scripts a `shell` value is for, as a key: the step or job of a `shell` key, the\n * job or workflow of `defaults.run.shell`.\n */\nfunction scopeOf(value: DocumentString): string {\n const keys = isDefaultShell(value) ? DEFAULT_SHELL_PATH.length : 1;\n return JSON.stringify(value.path.slice(0, -keys));\n}\n\n/** The `shell` of each CircleCI executor (`executors.py.shell`), by executor name. */\nfunction executorShells(shells: readonly DocumentString[]): ReadonlyMap<string, string> {\n const isExecutorShell = ({ path }: DocumentString): boolean =>\n path.length === EXECUTOR_SHELL_PATH_LENGTH && path[0] === EXECUTORS_KEY;\n return new Map(\n shells.filter(isExecutorShell).map((shell) => [String(shell.path[1]), shell.value]),\n );\n}\n\n/** The path of the job that a CircleCI `executor` value belongs to, or undefined. */\nfunction executorJob({ path }: DocumentString): DocumentPath | undefined {\n if (path.at(-1) === EXECUTOR_KEY) {\n return path.slice(0, -1);\n }\n const isNamed = path.at(-1) === EXECUTOR_NAME_KEY && path.at(-2) === EXECUTOR_KEY;\n return isNamed ? path.slice(0, -2) : undefined;\n}\n\n/**\n * The shells that CircleCI jobs take from their executor, by the scope of the job. A job's own\n * `shell` goes after these and wins.\n */\nfunction inheritedShells(strings: readonly DocumentString[], shells: readonly DocumentString[]) {\n const byExecutor = executorShells(shells);\n return strings.flatMap((value): [string, string][] => {\n const job = executorJob(value);\n const shell = byExecutor.get(value.value);\n return job === undefined || shell === undefined ? [] : [[JSON.stringify(job), shell]];\n });\n}\n\n/**\n * The shell that a command value runs with, when it is a program other than a shell\n * (`shell: python`): the nearest `shell` above the value, of its step, its job, its executor, or\n * a default of the job or the workflow. A step's own `shell` wins over a default of the same map.\n */\nexport function stepShells(strings: readonly DocumentString[]): StepShellOf {\n const shells = strings.filter((value) => value.path.at(-1) === STEP_SHELL_KEY);\n const isOwnShell = (value: DocumentString): boolean => !isDefaultShell(value);\n // Later entries win: the own `shell` of a map goes after a default of the same map.\n const ordered = [...shells.filter(isDefaultShell), ...shells.filter(isOwnShell)];\n const byScope = new Map([\n ...inheritedShells(strings, shells),\n ...ordered.map((value): [string, string] => [scopeOf(value), value.value]),\n ]);\n return (value) => {\n for (let depth = value.path.length - 1; depth >= 0; depth -= 1) {\n const shell = byScope.get(JSON.stringify(value.path.slice(0, depth)));\n if (shell !== undefined) {\n return isCommandLineShell(shell) ? undefined : shell;\n }\n }\n return undefined;\n };\n}\n\n/** A script of a step with another program as its shell that names an old package. */\nexport function otherShellFindings(\n values: readonly DocumentString[],\n shellOf: StepShellOf,\n locate: Locate,\n): ShellTextFindings {\n const manualSteps = values.flatMap((value) => {\n const shell = shellOf(value);\n return shell === undefined || !namesOriginalPackage(value.value)\n ? []\n : [{ kind: \"script-not-shell\", location: locate(value.start), shell } as const];\n });\n return { edits: [], changes: [], manualSteps };\n}\n","import type { RecipeHeader } from \"./just-recipe-parameters.js\";\nimport { isCommandLineShell } from \"./step-shells.js\";\n\n/**\n * A justfile recipe whose body starts with a shebang (`#!/usr/bin/env python3`) is a script for\n * that program: just writes the body to a file and runs it. A body for a program other than a\n * shell is code of that language, so the migration does not read it as commands.\n */\n\n/** The body of a recipe that another program runs, and that program as its shebang names it. */\nexport interface ShebangRecipe {\n readonly start: number;\n readonly end: number;\n /** The offset of the shebang, after the blank lines that may start the body. */\n readonly shebang: number;\n readonly shell: string;\n}\n\nconst LINE_BREAK = \"\\n\";\nconst SHEBANG = \"#!\";\n/** A line of a recipe body: indented, or blank inside the body. */\nconst BODY_LINE_RE = /^(?:[ \\t][^\\n]*|[ \\t]*\\r?)$/;\n\n/** The offset after the line break that ends the line at `offset`, or the end of the text. */\nfunction nextLineStart(text: string, offset: number): number {\n const lineBreak = text.indexOf(LINE_BREAK, offset);\n return lineBreak === -1 ? text.length : lineBreak + 1;\n}\n\n/** The end of the body that starts at `start`: before the first line that is not a body line. */\nfunction bodyEnd(text: string, start: number): number {\n let end = start;\n while (end < text.length) {\n const lineEnd = nextLineStart(text, end);\n if (!BODY_LINE_RE.test(text.slice(end, lineEnd).replace(LINE_BREAK, \"\"))) {\n break;\n }\n end = lineEnd;\n }\n return end;\n}\n\n/** The body of the recipe of a header, when its first line is a shebang for another program. */\nfunction shebangRecipe(text: string, header: RecipeHeader): ShebangRecipe[] {\n const start = nextLineStart(text, header.end);\n const end = bodyEnd(text, start);\n const firstLine = text\n .slice(start, end)\n .split(LINE_BREAK)\n .map((line) => line.trim())\n .find((line) => line.length > 0);\n if (firstLine === undefined || !firstLine.startsWith(SHEBANG)) {\n return [];\n }\n const shell = firstLine.slice(SHEBANG.length).trim();\n const shebang = text.indexOf(SHEBANG, start);\n return isCommandLineShell(shell) ? [] : [{ start, end, shebang, shell }];\n}\n\n/** The recipes of a justfile that a program other than a shell runs. */\nexport const shebangRecipes = (text: string, headers: readonly RecipeHeader[]): ShebangRecipe[] =>\n headers.flatMap((header) => shebangRecipe(text, header));\n","import { type CommandMigration, commandWordFindings } from \"./command-migration.js\";\nimport { type FileVariables, runsGenerator } from \"./file-variables.js\";\nimport {\n expressionAt,\n interpolationsOf,\n type JustInterpolation,\n type JustLiteral,\n} from \"./just-expressions.js\";\nimport {\n type ParameterDefault,\n type RecipeHeader,\n recipeHeaders,\n} from \"./just-recipe-parameters.js\";\nimport { type ShebangRecipe, shebangRecipes } from \"./just-shebang-recipes.js\";\nimport { lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { namesOriginalPackage } from \"./package-names.js\";\nimport {\n type ShellCommand,\n type ShellWord,\n shellCommands,\n shellCommandsAt,\n} from \"./shell-words.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport {\n type ProgramDefinition,\n type VariableProgram,\n variablePrograms,\n} from \"./variable-programs.js\";\n\n/**\n * Justfiles. just puts the value of a variable into a recipe line before the shell runs it, so a\n * variable can hold the generator command: `gen := \"npx openapi-typescript\"`, then\n * `{{gen}} a.yaml -it`. Each string literal and backtick of a just expression (a value, a\n * parameter default, an interpolation) is migrated where it is written, as a command line; the\n * flags after a variable set to the generator, or to such a variable (`run := gen`), where it is\n * used. A value that just computes (`env_var_or_default(\"GEN\", \"npx openapi-typescript\")`, an\n * `if`) and a recipe parameter may run another program, so the flags after them are reported.\n * A recipe with a shebang for another program (`#!/usr/bin/env python3`) is code of that\n * language: it is reported when it names an old package. Everything else is shell text.\n */\n\n/** An assignment at the start of a line: `gen := …`, also `export gen := …`. */\nconst ASSIGNMENT_RE = /^(?:export[ \\t]+)?([A-Za-z_][A-Za-z0-9_-]*)[ \\t]*:=[ \\t]*/gm;\n/** A value that is the name of another variable. */\nconst NAME_VALUE_RE = /^[A-Za-z_][A-Za-z0-9_-]*$/;\n/** An interpolation of one variable, after the recipe prefix (`@`, `-`) of the line. */\nconst VARIABLE_INTERPOLATION_RE = /^[@+-]*\\{\\{[ \\t]*([A-Za-z_][A-Za-z0-9_-]*)[ \\t]*\\}\\}$/;\nconst MASK = \"_\";\nconst BLANK = \" \";\n\n/** An assignment of a justfile: the variable, its value as written, and their places. */\ninterface Assignment {\n readonly name: string;\n /** The value as written, without a comment after it. */\n readonly value: string;\n readonly start: number;\n readonly end: number;\n readonly literals: readonly JustLiteral[];\n}\n\nfunction assignmentsOf(text: string): Assignment[] {\n return [...text.matchAll(ASSIGNMENT_RE)].map((match) => {\n const valueStart = match.index + match[0].length;\n const { literals, end } = expressionAt(text, valueStart);\n const value = text.slice(valueStart, end).trim();\n return { name: match[1] as string, value, start: match.index, end, literals };\n });\n}\n\n/** The literal that is the whole value, or undefined for another expression. */\nfunction onlyString({ value, literals }: Assignment): JustLiteral | undefined {\n const [literal] = literals;\n if (literals.length !== 1 || literal?.kind !== \"string\") {\n return undefined;\n }\n return value.length === literal.end - literal.start ? literal : undefined;\n}\n\nconst stringRunsGenerator = (literal: JustLiteral): boolean =>\n literal.kind === \"string\" && shellCommands(literal.content).some(runsGenerator);\n\n/**\n * The definitions of a value that just computes from `literals`, or that the command line gives:\n * it may be a string that runs the generator, and it may be anything else.\n */\nfunction computedDefinitions(name: string, literals: readonly JustLiteral[]): ProgramDefinition[] {\n const other: ProgramDefinition = { name, kind: \"command\", runsGenerator: false };\n const isMaybeGenerator = literals.some(stringRunsGenerator);\n return isMaybeGenerator ? [{ name, kind: \"command\", runsGenerator: true }, other] : [other];\n}\n\n/** Each assignment as the programs it can set: a reference, a command, or a computed value. */\nfunction assignmentDefinitions(assignment: Assignment): ProgramDefinition[] {\n const { name, value } = assignment;\n if (NAME_VALUE_RE.test(value)) {\n return [{ name, kind: \"reference\", target: value }];\n }\n const literal = onlyString(assignment);\n return literal === undefined\n ? computedDefinitions(name, assignment.literals)\n : [{ name, kind: \"command\", runsGenerator: stringRunsGenerator(literal) }];\n}\n\n/** A parameter: its default, and the command line, which can set anything. */\nfunction parameterDefinitions({ name, literals, target }: ParameterDefault): ProgramDefinition[] {\n const fromCommandLine = computedDefinitions(name, literals);\n return target === undefined\n ? fromCommandLine\n : [{ name, kind: \"reference\", target }, ...fromCommandLine];\n}\n\n/** The shell text of a justfile, and the interpolations of its recipe lines. */\ninterface ShellText {\n readonly text: string;\n readonly interpolations: readonly JustInterpolation[];\n}\n\n/**\n * The text as the shell gets it: each interpolation one word of the same length, and each\n * assignment and recipe header blanked, since just reads them and no shell does. Blanks keep\n * every offset, so the interpolations found in it are those of the file's recipe lines.\n */\nfunction shellText(text: string, spans: readonly { start: number; end: number }[]): ShellText {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (const { start, end } of [...spans].sort((left, right) => left.start - right.start)) {\n parts.push(text.slice(copiedUpTo, start), BLANK.repeat(end - start));\n copiedUpTo = end;\n }\n parts.push(text.slice(copiedUpTo));\n const blanked = parts.join(\"\");\n const interpolations = interpolationsOf(blanked);\n const masked = interpolations.reduce(\n (current, { start, end }) =>\n current.slice(0, start) + MASK.repeat(end - start) + current.slice(end),\n blanked,\n );\n return { text: masked, interpolations };\n}\n\n/** The commands of literals, read as written: an escape (`\\\"`) stays two characters. */\nconst literalCommands = (literals: readonly JustLiteral[]): ShellCommand[] =>\n literals.flatMap((literal) => shellCommandsAt(literal.content, literal.contentStart));\n\n/** The text a parameter default may give its variable: the contents of its literals. */\nconst defaultValue = ({ literals }: ParameterDefault): string =>\n literals.map((literal) => literal.content).join(BLANK);\n\n/**\n * The values of the variables, for an argument that expands one (`{{flags}}`): each assignment,\n * and each parameter default (`*flags='-it'`), joined when a name has several.\n */\nfunction variableValues(\n assignments: readonly Assignment[],\n defaults: readonly ParameterDefault[],\n): Map<string, string> {\n const values = new Map<string, string>();\n const named = [\n ...assignments.map((found) => ({ ...found, value: onlyString(found)?.content ?? found.value })),\n ...defaults.map((found) => ({ name: found.name, value: defaultValue(found) })),\n ];\n for (const { name, value } of named) {\n values.set(name, [values.get(name), value].join(BLANK).trim());\n }\n return values;\n}\n\n/**\n * The program of a word with interpolations that are not one variable: one whose strings may run\n * the generator (`{{ env_var_or_default(\"GEN\", \"npx openapi-typescript\") }}`) may also run another.\n */\nfunction computedProgram(written: string): VariableProgram | undefined {\n const literals = interpolationsOf(written).flatMap((interpolation) => interpolation.literals);\n return literals.some(stringRunsGenerator) ? \"generator-or-other\" : undefined;\n}\n\n/** The variables of a justfile, read from its assignments and recipe parameters. */\nfunction justfileVariables(\n text: string,\n values: ReadonlyMap<string, string>,\n programs: ReadonlyMap<string, VariableProgram>,\n): FileVariables {\n const writtenAt = (word: ShellWord): string => text.slice(word.start, word.end);\n const nameAt = (word: ShellWord) => VARIABLE_INTERPOLATION_RE.exec(writtenAt(word))?.[1];\n return {\n programAt: (word) => {\n const name = nameAt(word);\n const written = writtenAt(word);\n const found = name === undefined ? computedProgram(written) : programs.get(name);\n return found === undefined ? undefined : { written, program: found };\n },\n referenceAt: (word) => {\n const name = nameAt(word);\n const value = name === undefined ? undefined : values.get(name);\n return value === undefined ? undefined : { written: writtenAt(word), value };\n },\n };\n}\n\n/** Each recipe that another program runs and that names an old package: code the tool skips. */\nconst shebangSteps = (\n text: string,\n recipes: readonly ShebangRecipe[],\n locate: (offset: number) => string,\n): ManualStep[] =>\n recipes\n .filter((recipe) => namesOriginalPackage(text.slice(recipe.start, recipe.end)))\n .map(({ shebang, shell }) => ({ kind: \"script-not-shell\", location: locate(shebang), shell }));\n\n/** Migrate a justfile; each finding names its `file:line`. */\nexport function migrateJustfile(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n const assignments = assignmentsOf(text);\n const headers: RecipeHeader[] = recipeHeaders(text);\n const defaults = headers.flatMap((header) => header.defaults);\n const programs = variablePrograms([\n ...assignments.flatMap(assignmentDefinitions),\n ...defaults.flatMap(parameterDefinitions),\n ]);\n const variables = justfileVariables(text, variableValues(assignments, defaults), programs);\n const scripts = shebangRecipes(text, headers);\n const shell = shellText(text, [...assignments, ...headers, ...scripts]);\n const commands = [\n ...shellCommands(shell.text),\n ...literalCommands(assignments.flatMap((assignment) => assignment.literals)),\n ...literalCommands(defaults.flatMap((found) => found.literals)),\n ...literalCommands(shell.interpolations.flatMap((found) => found.literals)),\n ];\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const { edits, changes, manualSteps } = commandWordFindings(commands, locate, variables);\n const steps = [...manualSteps, ...shebangSteps(text, scripts, locate)];\n return { text: applyTextEdits(text, edits), changes, manualSteps: steps };\n}\n","import { type CommandMigration, commandWordFindings } from \"./command-migration.js\";\nimport { type FileVariables, runsGenerator } from \"./file-variables.js\";\nimport { lineLocator } from \"./migration-findings.js\";\nimport { type ShellWord, shellCommands } from \"./shell-words.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport {\n type ProgramDefinition,\n type VariableProgram,\n variablePrograms,\n} from \"./variable-programs.js\";\n\n/**\n * Makefiles. Make expands its variables before a recipe line reaches the shell, so a variable can\n * hold the generator command: `OAT := openapi-typescript`, then `$(OAT) a.yaml -it`. The value of\n * an assignment is read as a command and migrated where it is set; the flags after a reference\n * to such a variable, or to one set to it (`GEN := $(OAT)`), are migrated where it is used.\n * Everything else is shell text.\n */\n\n/**\n * A variable assignment at the start of a line (not a recipe line, which starts with a tab), also\n * one for some targets only (`gen: OAT := openapi-typescript`).\n */\nconst ASSIGNMENT_RE = new RegExp(\n [\n \"^(?:[^\\\\s:#=][^:#=\\\\n]*:[ \\\\t]*)?\",\n \"(?:(?:export|override|private)[ \\\\t]+)*\",\n \"([A-Za-z_][A-Za-z0-9_.-]*)\",\n \"[ \\\\t]*(:::=|::=|:=|\\\\?=|\\\\+=|!=|=)\",\n ].join(\"\"),\n \"gm\",\n);\n/**\n * A reference to one variable, as a whole word: `$(NAME)`, `${NAME}`, or `$N` for a variable whose\n * name is one letter, as make reads a `$` before any other character.\n */\nconst VARIABLE_REFERENCE_RE =\n /^\\$(?:\\(([A-Za-z_][A-Za-z0-9_.-]*)\\)|\\{([A-Za-z_][A-Za-z0-9_.-]*)\\}|([A-Za-z_]))$/;\n/** `@`, `-` and `+` before a recipe line: silent, ignore errors, always run. */\nconst RECIPE_PREFIX_RE = /^[@+-]+/;\nconst DOLLAR = \"$\";\nconst CLOSING: Readonly<Record<string, string>> = { \"(\": \")\", \"{\": \"}\" };\nconst NOT_LINE_BREAK_RE = /[^\\n]/g;\nconst MASK = \"_\";\nconst LINE_BREAK = \"\\n\";\nconst BACKSLASH = \"\\\\\";\n\n/** Where the make expansion that starts with the `$` at `start` ends, or undefined for none. */\nfunction expansionEnd(text: string, start: number): number | undefined {\n const open = text[start + 1] ?? \"\";\n const close = CLOSING[open];\n if (close === undefined) {\n return undefined;\n }\n let depth = 0;\n for (let index = start + 1; index < text.length; index++) {\n if (text[index] === open) {\n depth++;\n } else if (text[index] === close && --depth === 0) {\n return index + 1;\n }\n }\n return undefined;\n}\n\n/**\n * The text with each `$(…)` and `${…}` expansion turned into one word of the same length, so the\n * shell reads it as make passes it on. `$$` is a `$` for the shell and stays.\n */\nfunction maskExpansions(text: string): string {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (let index = text.indexOf(DOLLAR); index !== -1; index = text.indexOf(DOLLAR, index + 1)) {\n if (text[index + 1] === DOLLAR) {\n index++;\n continue;\n }\n const end = expansionEnd(text, index);\n if (end !== undefined) {\n parts.push(text.slice(copiedUpTo, index + 1), MASK.repeat(end - index - 1));\n copiedUpTo = end;\n index = end - 1;\n }\n }\n parts.push(text.slice(copiedUpTo));\n return parts.join(\"\");\n}\n\n/** `+=` adds text to the value a variable already has, so the program it runs stays. */\nconst APPEND_OPERATOR = \"+=\";\n\n/** An assignment of a Makefile: the variable, where it starts, and where its value is. */\ninterface Assignment {\n readonly name: string;\n readonly isAppend: boolean;\n readonly start: number;\n readonly valueStart: number;\n readonly valueEnd: number;\n}\n\n/** Where the line that holds `index` ends; a `\\` before a line break continues it. */\nfunction logicalLineEnd(text: string, index: number): number {\n let end = text.indexOf(LINE_BREAK, index);\n while (end !== -1 && text[end - 1] === BACKSLASH) {\n end = text.indexOf(LINE_BREAK, end + 1);\n }\n return end === -1 ? text.length : end;\n}\n\nconst assignmentsOf = (text: string): Assignment[] =>\n [...text.matchAll(ASSIGNMENT_RE)].map((match) => {\n const valueStart = match.index + match[0].length;\n const valueEnd = logicalLineEnd(text, valueStart);\n const name = match[1] as string;\n const isAppend = match[2] === APPEND_OPERATOR;\n return { name, isAppend, start: match.index, valueStart, valueEnd };\n });\n\n/** The text with the `NAME :=` of each assignment blanked, so its value reads as a command. */\nfunction withoutAssignmentHeads(text: string, assignments: readonly Assignment[]): string {\n const parts: string[] = [];\n let copiedUpTo = 0;\n for (const { start, valueStart } of assignments) {\n parts.push(\n text.slice(copiedUpTo, start),\n text.slice(start, valueStart).replace(NOT_LINE_BREAK_RE, \" \"),\n );\n copiedUpTo = valueStart;\n }\n parts.push(text.slice(copiedUpTo));\n return parts.join(\"\");\n}\n\n/** A make expansion at the start of a word: a reference or a function call such as `$(or …)`. */\nconst COMPUTED_RE = /^\\$[({]/;\n\n/**\n * Whether a word starts with a make expansion that is not a plain reference (`$(or $(GEN),npx\n * openapi-typescript)`, `$(shell …)`): make computes the program, which may be the generator.\n */\nconst isComputed = (written: string): boolean =>\n COMPUTED_RE.test(written.trim().replace(RECIPE_PREFIX_RE, \"\"));\n\n/** The variable that `written` references as a whole, after the recipe prefix, or undefined. */\nfunction referencedName(written: string): string | undefined {\n const match = VARIABLE_REFERENCE_RE.exec(written.trim().replace(RECIPE_PREFIX_RE, \"\"));\n return match === null ? undefined : (match[1] ?? match[2] ?? match[3]);\n}\n\n/**\n * Each assignment as the program it sets: text appended to the value, a reference to one variable\n * (`GEN := $(OAT)`), or a command, which runs the generator when one of the commands that start in\n * its value does.\n */\nfunction programDefinitions(\n text: string,\n commands: readonly (readonly ShellWord[])[],\n assignments: readonly Assignment[],\n): ProgramDefinition[] {\n const generatorStarts = commands\n .filter(runsGenerator)\n .map((command) => (command[0] as ShellWord).start);\n return assignments.map(({ name, isAppend, valueStart, valueEnd }): ProgramDefinition => {\n if (isAppend) {\n return { name, kind: \"append\" };\n }\n const target = referencedName(text.slice(valueStart, valueEnd));\n if (target !== undefined) {\n return { name, kind: \"reference\", target };\n }\n const runs = generatorStarts.some((start) => valueStart <= start && start < valueEnd);\n return { name, kind: \"command\", runsGenerator: runs };\n });\n}\n\n/** The values each variable gets in the file, joined: any of them can reach a command. */\nfunction variableValues(text: string, assignments: readonly Assignment[]): Map<string, string> {\n const values = new Map<string, string>();\n for (const { name, valueStart, valueEnd } of assignments) {\n const value = text.slice(valueStart, valueEnd);\n values.set(name, [values.get(name), value].filter((part) => part !== undefined).join(\" \"));\n }\n return values;\n}\n\n/** The variables of a Makefile, read from its assignments. */\nfunction makefileVariables(\n text: string,\n assignments: readonly Assignment[],\n programs: ReadonlyMap<string, VariableProgram>,\n) {\n const values = variableValues(text, assignments);\n const nameAt = (word: ShellWord) => referencedName(text.slice(word.start, word.end));\n const variables: FileVariables = {\n programAt: (program) => {\n const written = text.slice(program.start, program.end);\n const name = nameAt(program);\n if (name === undefined) {\n return isComputed(written) ? { written, program: \"generator-or-other\" } : undefined;\n }\n // A variable that no line of the file sets comes from an included file, the command line\n // or the environment, so it may run the generator.\n return { written, program: programs.get(name) ?? \"generator-or-other\" };\n },\n referenceAt: (word) => {\n const name = nameAt(word);\n const value = name === undefined ? undefined : values.get(name);\n const written = text.slice(word.start, word.end);\n return value === undefined ? undefined : { written, value };\n },\n };\n return variables;\n}\n\n/** Migrate a Makefile; each finding names its `file:line`. */\nexport function migrateMakefile(text: string, file: string): CommandMigration {\n const lineOf = lineLocator(text);\n const assignments = assignmentsOf(text);\n const commands = shellCommands(withoutAssignmentHeads(maskExpansions(text), assignments));\n const programs = variablePrograms(programDefinitions(text, commands, assignments));\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const variables = makefileVariables(text, assignments, programs);\n const { edits, changes, manualSteps } = commandWordFindings(commands, locate, variables);\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import { PACKAGE_RENAMES } from \"./package-names.js\";\n\n/**\n * Override, resolution and patch keys name a package with a path or a version around it:\n * `app>openapi-fetch` (pnpm), `**\\/openapi-fetch` (Yarn), `openapi-fetch@0.13` (pnpm, npm).\n * Matching the name as a substring took `openapi-typescript-helpers` for `openapi-typescript` too.\n */\n\nconst PARENT_SEPARATOR = \">\";\nconst PATH_SEPARATOR = \"/\";\nconst SCOPE_PREFIX = \"@\";\n\n/** The package a key targets: the last parent and path segment, without a version. */\nexport function overrideTarget(key: string): string {\n const child = key.split(PARENT_SEPARATOR).at(-1) ?? key;\n const segments = child.split(PATH_SEPARATOR);\n const isScoped = segments.length > 1 && segments.at(-2)?.startsWith(SCOPE_PREFIX) === true;\n const name = isScoped ? segments.slice(-2).join(PATH_SEPARATOR) : (segments.at(-1) ?? child);\n const versionAt = name.indexOf(SCOPE_PREFIX, 1);\n return versionAt === -1 ? name : name.slice(0, versionAt);\n}\n\n/** The original packages that `keys` target; each once, in key order. */\nexport function overriddenPackages(keys: readonly string[]): string[] {\n const targets = keys.map(overrideTarget);\n return [...new Set(targets.filter((target) => PACKAGE_RENAMES.has(target)))];\n}\n","import {\n CatalogEntries,\n type CatalogPlan,\n catalogOfSpec,\n DEFAULT_CATALOG,\n} from \"./catalog-plan.js\";\nimport {\n isMap,\n mapsAt,\n type TreeMap,\n type TreeNode,\n textEntries,\n valuesAt,\n} from \"./config-documents.js\";\nimport { overrideTarget } from \"./override-targets.js\";\nimport {\n CATALOG_FIELD,\n DEPENDENCY_FIELDS,\n NAMED_CATALOGS_FIELD,\n OVERRIDE_FIELDS,\n PACKAGE_RENAMES,\n PNPM_SETTINGS_FIELD,\n WORKSPACES_FIELD,\n} from \"./package-names.js\";\nimport { specEntries } from \"./tree-entries.js\";\n\n/**\n * Catalogs and the dependencies that point at them (`\"openapi-fetch\": \"catalog:\"`). A catalog\n * entry and the dependencies on it must keep the same name, or the install fails\n * (`ERR_PNPM_CATALOG_ENTRY_NOT_FOUND_FOR_SPEC`). The files are migrated one by one, so this plan\n * is made from all of them first: an entry keeps its old name while a dependency keeps using it,\n * and a dependency keeps its old name while its entry stays.\n */\n\nconst PATH_SEPARATOR = \".\";\n\n/** One catalog map: its name as `catalog:<name>` names it, and where it is in the file. */\nexport interface CatalogMap {\n readonly name: string;\n readonly label: string;\n readonly map: TreeMap;\n}\n\n/**\n * The catalogs of a file: `catalog` (the default one) and `catalogs.<name>`, as pnpm and Yarn\n * read them, and also under `workspaces` as bun reads them. `prefix` names where `root` is.\n */\nexport function catalogMaps(root: TreeMap, prefix = \"\"): CatalogMap[] {\n const maps = mapsAt(root, CATALOG_FIELD).map((map) => ({\n name: DEFAULT_CATALOG,\n label: `${prefix}${CATALOG_FIELD}`,\n map,\n }));\n for (const catalogs of mapsAt(root, NAMED_CATALOGS_FIELD)) {\n for (const { key, value } of textEntries(catalogs)) {\n if (isMap(value)) {\n const label = [prefix + NAMED_CATALOGS_FIELD, key.value].join(PATH_SEPARATOR);\n maps.push({ name: key.value, label, map: value });\n }\n }\n }\n return maps;\n}\n\n/** The catalogs of a manifest: at the top level and under `workspaces` (bun). */\nexport const manifestCatalogMaps = (manifest: TreeMap): CatalogMap[] => [\n ...catalogMaps(manifest),\n ...mapsAt(manifest, WORKSPACES_FIELD).flatMap((workspaces) =>\n catalogMaps(workspaces, `${WORKSPACES_FIELD}${PATH_SEPARATOR}`),\n ),\n];\n\n/** The documents the plan is made from: manifests, and the files that hold catalogs. */\nexport interface CatalogDocuments {\n readonly manifests: readonly TreeMap[];\n readonly catalogFiles: readonly TreeMap[];\n readonly isWorkspaceRoot: boolean;\n}\n\n/**\n * Dependencies on a catalog that keep the old name whatever the catalog does: their field has the\n * new name too, so the rename is left (domain/dependency-map.ts).\n */\nfunction entriesInUse(manifests: readonly TreeMap[]): CatalogEntries {\n const inUse = new CatalogEntries();\n const fields = manifests.flatMap((manifest) =>\n DEPENDENCY_FIELDS.flatMap((field) => mapsAt(manifest, field)),\n );\n for (const dependencies of fields) {\n const entries = specEntries(dependencies);\n const names = new Set(entries.map((entry) => entry.name));\n for (const { name, spec } of entries) {\n const catalog = spec === undefined ? undefined : catalogOfSpec(spec.value);\n const to = PACKAGE_RENAMES.get(name);\n if (catalog !== undefined && to !== undefined && names.has(to)) {\n inUse.add(catalog, name);\n }\n }\n }\n return inUse;\n}\n\n/** The `key: value` texts below `node` at every depth: npm nests overrides by parent package. */\nfunction nestedTexts(node: TreeNode): { key: string; value: string }[] {\n if (node.kind !== \"map\") {\n return [];\n }\n return textEntries(node).flatMap(({ key, value }) =>\n value.kind === \"scalar\" ? [{ key: key.value, value: value.value }] : nestedTexts(value),\n );\n}\n\n/**\n * Adds the entries that overrides point at (`\"openapi-fetch\": \"catalog:\"` in `overrides`,\n * `resolutions` or `pnpm.overrides`). The tool reports overrides and leaves them as they are, so\n * the entry they use must keep its old name, or the install fails\n * (`ERR_PNPM_CATALOG_IN_OVERRIDES`).\n */\nfunction addOverrideUses(documents: readonly TreeMap[], inUse: CatalogEntries): void {\n const sections = documents.flatMap((document) =>\n [...OVERRIDE_FIELDS, PNPM_SETTINGS_FIELD].flatMap((field) => valuesAt(document, field)),\n );\n for (const { key, value } of sections.flatMap(nestedTexts)) {\n const catalog = catalogOfSpec(value);\n const name = overrideTarget(key);\n if (catalog !== undefined && PACKAGE_RENAMES.has(name)) {\n inUse.add(catalog, name);\n }\n }\n}\n\n/**\n * The plan for the catalogs of a project, from all its manifests and catalog files. An entry with\n * an old name stays when its value is not one the tool edits (an alias, a flow map), or when a\n * dependency or an override keeps using it; then, unless the catalog has the new name too, the\n * dependencies on it keep the old name as well (dependency-map.ts makes both decisions by this\n * plan).\n */\nexport function planCatalogs({\n manifests,\n catalogFiles,\n isWorkspaceRoot,\n}: CatalogDocuments): CatalogPlan {\n const inUse = entriesInUse(manifests);\n addOverrideUses([...manifests, ...catalogFiles], inUse);\n const kept = new CatalogEntries();\n const defined = new CatalogEntries();\n const catalogs = [\n ...catalogFiles.flatMap((file) => catalogMaps(file)),\n ...manifests.flatMap(manifestCatalogMaps),\n ];\n for (const { name: catalog, map } of catalogs) {\n const entries = specEntries(map);\n const names = new Set(entries.map((entry) => entry.name));\n for (const { name, spec } of entries) {\n defined.add(catalog, name);\n const to = PACKAGE_RENAMES.get(name);\n const stays = spec === undefined || inUse.has(catalog, name);\n if (to !== undefined && !names.has(to) && stays) {\n kept.add(catalog, name);\n }\n }\n }\n return { inUse, kept, defined, isWorkspaceRoot };\n}\n","import { NPM_SPECIFIER_PREFIX } from \"./command-launchers.js\";\nimport {\n documentStrings,\n mapsAt,\n type TreeMap,\n type TreeNode,\n textEntries,\n} from \"./config-documents.js\";\nimport { isAtOrAbove } from \"./declared-packages.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { overrideTarget } from \"./override-targets.js\";\nimport { OVERRIDE_FIELDS, PACKAGE_RENAMES, PNPM_SETTINGS_FIELD } from \"./package-names.js\";\n\n/**\n * The override that aliases an original package to its successor\n * (`\"openapi-fetch\": \"npm:openapi-typesafe-fetch@^1.0.0\"`) is what the docs ask for when a library\n * such as swr-openapi takes its client type from the original package. It is the migration done,\n * so it is not reported, and a dependency that needs the original as its peer then needs nothing.\n */\n\n/** The key of pnpm's overrides in the `pnpm` field of a manifest (`pnpm.overrides`). */\nconst PNPM_OVERRIDES = \"overrides\";\n\n/** True for an override entry that points an original package at its successor. */\nfunction isSuccessorAlias(key: string, value: TreeNode): boolean {\n const successor = PACKAGE_RENAMES.get(overrideTarget(key));\n return (\n value.kind === \"scalar\" &&\n value.value.startsWith(NPM_SPECIFIER_PREFIX) &&\n packageReference(value.value).name === successor\n );\n}\n\n/**\n * The original packages that an override map names, each once, in order, without the entries\n * that alias one to its successor; nested maps (npm's `\"swr-openapi\": { … }`) are read too.\n */\nexport function overriddenOldPackages(node: TreeNode): string[] {\n const names =\n node.kind === \"map\"\n ? textEntries(node).flatMap(({ key, value }) =>\n isSuccessorAlias(key.value, value)\n ? []\n : [overrideTarget(key.value), ...overriddenOldPackages(value)],\n )\n : documentStrings([node]).map((string) => packageReference(string.value).name);\n return [...new Set(names.filter((name) => PACKAGE_RENAMES.has(name)))];\n}\n\n/** The original packages that an override map aliases to their successors, at any depth. */\nfunction aliasedIn(node: TreeNode): string[] {\n if (node.kind !== \"map\") {\n return [];\n }\n return textEntries(node).flatMap(({ key, value }) =>\n isSuccessorAlias(key.value, value) ? [overrideTarget(key.value)] : aliasedIn(value),\n );\n}\n\n/**\n * The original packages that a manifest (`overrides`, `resolutions`, `pnpm.overrides`) or a\n * `pnpm-workspace.yaml` (`overrides`) aliases to their successors.\n */\nexport function successorAliasedPackages(root: TreeMap): string[] {\n const fields = [...OVERRIDE_FIELDS].flatMap((field) => mapsAt(root, field));\n const pnpm = mapsAt(root, PNPM_SETTINGS_FIELD).flatMap((map) => mapsAt(map, PNPM_OVERRIDES));\n return [...new Set([...fields, ...pnpm].flatMap(aliasedIn))];\n}\n\n/** The successor aliases of one file of the project, by its path. */\nexport interface SuccessorAliases {\n readonly path: string;\n readonly names: ReadonlySet<string>;\n}\n\n/**\n * The original packages aliased to their successors for a manifest at `filePath`: by a file at\n * or above it, as a workspace root's overrides apply to its packages.\n */\nexport function aliasedPackagesFor(\n aliases: readonly SuccessorAliases[],\n filePath: string,\n): ReadonlySet<string> {\n const applying = aliases.filter(({ path }) => isAtOrAbove(path, filePath));\n return new Set(applying.flatMap(({ names }) => [...names]));\n}\n","import { documentStrings, type TreeMap, type TreeNode, textEntries } from \"./config-documents.js\";\nimport type { Findings } from \"./dependency-map.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { overrideTarget } from \"./override-targets.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { overriddenOldPackages } from \"./successor-aliases.js\";\nimport { nestedKeys } from \"./tree-entries.js\";\n\n/**\n * The settings of a package manager name packages in keys and values of every shape:\n * `packageExtensions: { \"openapi-fetch@*\": … }`, `allowedDeprecatedVersions`,\n * `onlyBuiltDependencies: [openapi-fetch]`, `overrides: { \"app>openapi-fetch\": … }`. A setting\n * that names an old package no longer applies once it is renamed, and what the new name needs\n * there is the user's call, so each one is reported, never changed.\n */\n\n/** How the sections of one settings map are read. */\nexport interface SettingsFile {\n /** Sections the migration renames itself (catalogs) or that hold no names (`packages`). */\n readonly migratedSections: ReadonlySet<string>;\n /** Sections that change what is installed; they are reported as overrides. */\n readonly overrideSections: ReadonlySet<string>;\n /** What comes before a section's key in the report (`pnpm.`). */\n readonly prefix: string;\n}\n\n/**\n * The old packages that `node` names, each once, in order: by its keys at any depth, with a path\n * or a version around the name (`a>openapi-fetch@0`), and by its string values, as a name with an\n * optional `npm:` and version (`openapi-fetch`, `npm:openapi-fetch@0.13`).\n */\nexport function oldPackagesNamedBy(node: TreeNode): string[] {\n const values = documentStrings([node]).map((string) => packageReference(string.value).name);\n const names = [...nestedKeys(node).map(overrideTarget), ...values];\n return [...new Set(names.filter((name) => PACKAGE_RENAMES.has(name)))];\n}\n\n/** Report each section of `settings` that names an old package, by its key. */\nexport function reportSettingSections(\n settings: TreeMap,\n file: SettingsFile,\n findings: Findings,\n): void {\n for (const { key, value } of textEntries(settings)) {\n if (file.migratedSections.has(key.value)) {\n continue;\n }\n const field = `${file.prefix}${key.value}`;\n const isOverride = file.overrideSections.has(key.value);\n const names = isOverride ? overriddenOldPackages(value) : oldPackagesNamedBy(value);\n for (const name of names) {\n findings.manualSteps.push(\n isOverride\n ? { kind: \"override-names-package\", field, name }\n : { kind: \"setting-names-package\", field, name },\n );\n }\n }\n}\n","import {\n type DocumentPath,\n documentStrings,\n isMap,\n type TreeMap,\n type TreeNode,\n textEntries,\n valuesAt,\n} from \"./config-documents.js\";\nimport { type Findings, isFree } from \"./dependency-map.js\";\nimport {\n oldPackageInNodeModules,\n PACKAGE_RENAMES,\n type RenamedSpecifier,\n renamedSpecifier,\n} from \"./package-names.js\";\nimport { replaceScalar } from \"./tree-entries.js\";\n\n/**\n * Config maps that name modules by their specifiers, as keys or as targets. The imports get the\n * new names (domain/source-migration.ts), so a key or target that names an original package, or\n * a subpath of it, would no longer match or resolve: it gets the new name too.\n */\n\nconst PATH_SEPARATOR = \".\";\n\n/**\n * Node's subpath imports: `\"imports\": { \"#client\": \"openapi-fetch\" }` maps a private name to a\n * target, a string under any nesting of conditions and fallback lists. The `#` keys are the\n * project's own names and stay.\n */\nconst IMPORTS_FIELD = \"imports\";\n\n/**\n * The `browser` field of bundlers: `\"browser\": { \"openapi-fetch\": false }` replaces a module, keyed\n * by its specifier, with another one or with nothing. A string `browser` names the package's own\n * file and stays.\n */\nconst BROWSER_FIELD = \"browser\";\n\n/** A deep specifier reaches into the package's files, whose layout is not part of the contract. */\nfunction reportDeep(renamed: RenamedSpecifier, location: string, findings: Findings): void {\n if (renamed.isDeep) {\n findings.manualSteps.push({ kind: \"deep-target\", location, specifier: renamed.to });\n }\n}\n\n/**\n * Rename the module specifiers among the strings below `nodes` (`field` locates them in the\n * report): a target that names an original package, or a subpath of it, gets the new name.\n */\nexport function renameSpecifierTargets(\n nodes: readonly TreeNode[],\n field: string,\n findings: Findings,\n): void {\n for (const target of documentStrings(nodes)) {\n const renamed = renamedSpecifier(target.value);\n if (renamed === undefined) {\n continue;\n }\n const location = [field, ...target.path].join(PATH_SEPARATOR);\n if (target.encode === undefined) {\n findings.manualSteps.push({ kind: \"entry-not-edited\", field: location, name: target.value });\n continue;\n }\n findings.edits.push(replaceScalar({ ...target, encode: target.encode }, renamed.to));\n findings.changes.push({\n kind: \"package-name-renamed\",\n location,\n from: target.value,\n to: renamed.to,\n });\n reportDeep(renamed, location, findings);\n }\n}\n\n/** A key that was renamed, by where it is, with its new name. */\ninterface RenamedKey {\n readonly location: string;\n readonly renamed: RenamedSpecifier;\n}\n\n/**\n * Rename the keys of `map` that are specifiers of an original package (`field` locates them), and\n * return them. A key whose new name the map already has is kept and reported, as dependency keys\n * are.\n */\nexport function renameSpecifierKeys(map: TreeMap, field: string, findings: Findings): RenamedKey[] {\n const keys = textEntries(map).map(({ key }) => key);\n const names = new Set(keys.map((key) => key.value));\n return keys.flatMap((key): RenamedKey[] => {\n const renamed = renamedSpecifier(key.value);\n if (renamed === undefined) {\n return [];\n }\n if (key.encode === undefined) {\n findings.manualSteps.push({ kind: \"entry-not-edited\", field, name: key.value });\n return [];\n }\n const { to } = renamed;\n if (!isFree({ from: key.value, to, field, names }, findings)) {\n return [];\n }\n findings.edits.push(replaceScalar({ ...key, encode: key.encode }, to));\n findings.changes.push({ kind: \"package-name-renamed\", location: field, from: key.value, to });\n return [{ location: `${field}${PATH_SEPARATOR}${key.value}`, renamed }];\n });\n}\n\nexport function migrateSubpathImports(manifest: TreeMap, findings: Findings): void {\n renameSpecifierTargets(valuesAt(manifest, IMPORTS_FIELD), IMPORTS_FIELD, findings);\n}\n\nexport function migrateBrowserField(manifest: TreeMap, findings: Findings): void {\n for (const browser of valuesAt(manifest, BROWSER_FIELD).filter(isMap)) {\n // A deep key replaces a file of the package, which the new package may not have there.\n for (const { location, renamed } of renameSpecifierKeys(browser, BROWSER_FIELD, findings)) {\n reportDeep(renamed, location, findings);\n }\n for (const { key, value } of textEntries(browser)) {\n renameSpecifierTargets([value], `${BROWSER_FIELD}${PATH_SEPARATOR}${key.value}`, findings);\n }\n }\n}\n\n/**\n * Report each string under `node` (at `prefix` of its file) that is a path into the installed\n * files of an old package (`node_modules/openapi-fetch/…`): the new package has its own files\n * there, so only the user can say where the path should point.\n */\nexport function reportOldPackagePaths(\n node: TreeNode,\n prefix: DocumentPath,\n findings: Findings,\n): void {\n for (const value of documentStrings([node])) {\n const name = oldPackageInNodeModules(value.value);\n const to = name === undefined ? undefined : PACKAGE_RENAMES.get(name);\n if (name !== undefined && to !== undefined) {\n const location = [...prefix, ...value.path].join(PATH_SEPARATOR);\n findings.manualSteps.push({ kind: \"old-package-path\", location, path: value.value, to });\n }\n }\n}\n","import { manifestCatalogMaps } from \"./catalogs.js\";\nimport {\n type DocumentRead,\n isMap,\n mapsAt,\n type TreeMap,\n textEntries,\n unreadableConfig,\n valuesAt,\n} from \"./config-documents.js\";\nimport { declaredNames } from \"./declared-packages.js\";\nimport {\n type Findings,\n migrateSpecMap,\n newFindings,\n type RenameTarget,\n renameNames,\n} from \"./dependency-map.js\";\nimport { JEST_FIELD, jestConfigSteps } from \"./jest-config.js\";\nimport { type FileMigration, unchanged } from \"./migration-findings.js\";\nimport { overriddenPackages } from \"./override-targets.js\";\nimport {\n DEPENDENCY_FIELDS,\n NAME_KEYED_FIELDS,\n NAME_LIST_FIELDS,\n namesOriginalPackage,\n OLD_PEER_DEPENDENTS,\n OVERRIDE_FIELDS,\n PACKAGE_RENAMES,\n PNPM_SETTINGS_FIELD,\n} from \"./package-names.js\";\nimport { reportSettingSections, type SettingsFile } from \"./settings-sections.js\";\nimport {\n migrateBrowserField,\n migrateSubpathImports,\n reportOldPackagePaths,\n} from \"./specifier-maps.js\";\nimport { overriddenOldPackages } from \"./successor-aliases.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { itemEntries, keyEntries, specEntries } from \"./tree-entries.js\";\n\n/**\n * A package manifest: package.json, or the `package.yaml` that pnpm reads in its place. It is\n * edited in place: a renamed key or a new spec replaces that one value, and everything else stays\n * as written (domain/config-documents.ts). Scripts are commands: file-migrations.ts migrates\n * them with the other command files.\n */\n\n/** TypeScript's `typesVersions`: its paths may point into the installed files of an old package. */\nconst TYPES_VERSIONS_FIELD = \"typesVersions\";\n\nfunction migrateDependencyFields(manifest: TreeMap, target: RenameTarget, findings: Findings) {\n for (const field of DEPENDENCY_FIELDS) {\n for (const dependencies of mapsAt(manifest, field)) {\n const map = { kind: \"dependencies\", field } as const;\n migrateSpecMap(specEntries(dependencies), { ...target, map, findings });\n }\n }\n}\n\n/**\n * Keys of the meta fields that name an original package are renamed. A key with a version\n * (`openapi-fetch@0.13.0`, as Yarn allows) would need a new version too, so it is reported.\n */\nfunction migrateNameKeys(manifest: TreeMap, findings: Findings): void {\n for (const field of NAME_KEYED_FIELDS) {\n for (const meta of mapsAt(manifest, field)) {\n renameNames(keyEntries(meta), field, findings);\n const versioned = textEntries(meta)\n .map(({ key }) => key.value)\n .filter((key) => !PACKAGE_RENAMES.has(key));\n for (const name of overriddenPackages(versioned)) {\n findings.manualSteps.push({ kind: \"override-names-package\", field, name });\n }\n }\n }\n}\n\nfunction migrateNameLists(manifest: TreeMap, findings: Findings): void {\n for (const field of NAME_LIST_FIELDS) {\n for (const list of valuesAt(manifest, field)) {\n if (list.kind === \"list\") {\n renameNames(itemEntries(list), field, findings);\n }\n }\n }\n}\n\n/** bun's `catalog` and `catalogs.<name>`, at the top level and under `workspaces`. */\nfunction migrateCatalogs(manifest: TreeMap, target: RenameTarget, findings: Findings): void {\n for (const { name, label, map } of manifestCatalogMaps(manifest)) {\n const context = {\n ...target,\n map: { kind: \"catalog\", catalog: label, name } as const,\n findings,\n };\n migrateSpecMap(specEntries(map), context);\n }\n}\n\n/** pnpm's settings in package.json: none of them is migrated, `overrides` among them. */\nconst PNPM_SETTINGS: SettingsFile = {\n migratedSections: new Set(),\n overrideSections: new Set([\"overrides\", \"patchedDependencies\"]),\n prefix: `${PNPM_SETTINGS_FIELD}.`,\n};\n\n/**\n * Overrides, resolutions and pnpm's settings can name the old packages; changing them needs the\n * user's intent (domain/settings-sections.ts).\n */\nfunction reportSettings(manifest: TreeMap, findings: Findings): void {\n for (const field of OVERRIDE_FIELDS) {\n for (const name of valuesAt(manifest, field).flatMap(overriddenOldPackages)) {\n findings.manualSteps.push({ kind: \"override-names-package\", field, name });\n }\n }\n for (const settings of mapsAt(manifest, PNPM_SETTINGS_FIELD)) {\n reportSettingSections(settings, PNPM_SETTINGS, findings);\n }\n}\n\n/**\n * A dependency that needs an original package as its peer keeps needing it after the rename,\n * unless an override of this manifest or of a workspace above it (`aliased`, from the project\n * plan) already points the peer at its successor.\n */\nfunction reportOldPeers(manifest: TreeMap, aliased: ReadonlySet<string>, findings: Findings) {\n const dependencies = new Set(declaredNames(manifest));\n for (const [dependent, { peer, range }] of OLD_PEER_DEPENDENTS) {\n if (dependencies.has(dependent) && !aliased.has(peer)) {\n findings.manualSteps.push({ kind: \"old-peer-needed\", dependent, peer, range });\n }\n }\n}\n\n/**\n * What a manifest is migrated with: the rename target, and the original packages that the\n * overrides of a workspace above it alias to their successors (domain/successor-aliases.ts).\n */\nexport interface ManifestTarget extends RenameTarget {\n readonly aliased?: ReadonlySet<string>;\n}\n\nfunction migrateManifestMap(manifest: TreeMap, target: ManifestTarget, findings: Findings): void {\n migrateDependencyFields(manifest, target, findings);\n migrateNameKeys(manifest, findings);\n migrateNameLists(manifest, findings);\n migrateCatalogs(manifest, target, findings);\n migrateSubpathImports(manifest, findings);\n migrateBrowserField(manifest, findings);\n for (const versions of valuesAt(manifest, TYPES_VERSIONS_FIELD)) {\n reportOldPackagePaths(versions, [TYPES_VERSIONS_FIELD], findings);\n }\n reportSettings(manifest, findings);\n for (const jest of valuesAt(manifest, JEST_FIELD)) {\n findings.manualSteps.push(...jestConfigSteps(jest, [JEST_FIELD]));\n }\n reportOldPeers(manifest, target.aliased ?? new Set(), findings);\n}\n\n/**\n * Migrate the package names of a manifest (`read` is `text` parsed): rename the original packages\n * in the dependency fields (with `version` as the new version), in the fields that name\n * dependencies, in bun's catalogs, in the targets of subpath imports and in the `browser` field,\n * and report overrides that name the original packages.\n */\nexport function migratePackageManifest(\n text: string,\n read: DocumentRead,\n target: ManifestTarget,\n): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const manifest of read.documents.filter(isMap)) {\n migrateManifestMap(manifest, target, findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n\n/**\n * A manifest in a format the tool does not read: pnpm's `package.json5`. JSON5 has its own\n * strings (single quotes, line continuations), so it is not edited; a manifest that names an\n * original package is reported for the user to migrate.\n */\nexport function unreadManifest(text: string): FileMigration {\n return namesOriginalPackage(text)\n ? { ...unchanged(text), manualSteps: [{ kind: \"manifest-not-read\" }] }\n : unchanged(text);\n}\n","import type { ManualStep } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\n\n/**\n * Patches to the code of an installed package, by the file names their tools give them:\n * patch-package `openapi-fetch+0.13.0.patch` (`parent++openapi-fetch+0.13.0.patch` for a nested\n * one), pnpm `openapi-fetch@0.13.0.patch`, Yarn `openapi-fetch-npm-0.13.0-<hash>.patch`. The new\n * package has other code, so a patch to an old one cannot be carried over: it is reported.\n */\n\nconst PATCH_EXTENSION = \".patch\";\nconst NESTED_SEPARATOR = \"++\";\n/** What follows the package name in each tool's file name. */\nconst NAME_ENDS = [\"+\", \"@\", \"-npm-\"] as const;\n\n/** The old package that a patch file patches, by its file name, or undefined. */\nexport function patchedOldPackage(fileName: string): string | undefined {\n if (!fileName.endsWith(PATCH_EXTENSION)) {\n return undefined;\n }\n const innermost = fileName.split(NESTED_SEPARATOR).at(-1) ?? fileName;\n return [...PACKAGE_RENAMES.keys()].find((name) =>\n NAME_ENDS.some((end) => innermost.startsWith(`${name}${end}`)),\n );\n}\n\n/** The manual step for a patch file of an old package. */\nexport function oldPackagePatchSteps(fileName: string): ManualStep[] {\n const name = patchedOldPackage(fileName);\n const to = name === undefined ? undefined : PACKAGE_RENAMES.get(name);\n return name === undefined || to === undefined ? [] : [{ kind: \"old-package-patch\", name, to }];\n}\n","/**\n * The keys whose values YAML files run as shell commands. A file kind that runs other keys\n * (Taskfile `cmds`, pre-commit `entry`) adds its own to the common ones.\n */\n\n/**\n * Keys whose value is a shell command or a list of them: GitHub Actions and lefthook `run`,\n * GitLab, Travis and Bitbucket `script` and its hooks, Azure Pipelines `script` / `bash` /\n * `pwsh`, CircleCI `command`, Drone `commands`, Docker Compose `command` and `entrypoint`.\n */\nexport const YAML_COMMAND_KEYS: ReadonlySet<string> = new Set([\n \"run\",\n \"script\",\n \"before_script\",\n \"after_script\",\n \"before_install\",\n \"install\",\n \"bash\",\n \"pwsh\",\n \"powershell\",\n \"command\",\n \"commands\",\n \"entrypoint\",\n]);\n\n/**\n * Task (Taskfile.yml): `cmds` and `cmd` run commands, `defer` runs one when the task ends, `sh`\n * computes a variable or checks a precondition with one, `preconditions` lists such checks in\n * short form, and `status` lists commands that tell whether a task is up to date. A deferred task\n * (`defer: { task: … }`) and a precondition's `msg` are under other keys.\n */\nexport const TASKFILE_COMMAND_KEYS: ReadonlySet<string> = new Set([\n ...YAML_COMMAND_KEYS,\n \"cmds\",\n \"cmd\",\n \"defer\",\n \"sh\",\n \"preconditions\",\n \"status\",\n]);\n","import {\n type CommandMigration,\n commandWordFindings,\n type Locate,\n type ShellTextFindings,\n} from \"./command-migration.js\";\nimport { type CommandPathPattern, isCommandPath } from \"./command-paths.js\";\nimport { type DocumentString, ownerKey } from \"./config-documents.js\";\nimport type { FileVariables } from \"./file-variables.js\";\nimport { type Change, lineLocator } from \"./migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport { shellVariables } from \"./shell-variables.js\";\nimport { type ShellCommand, type ShellWord, shellCommands } from \"./shell-words.js\";\nimport { otherShellFindings, stepShells } from \"./step-shells.js\";\nimport { applyTextEdits, type TextEdit } from \"./text-edits.js\";\nimport { YAML_COMMAND_KEYS } from \"./yaml-command-keys.js\";\n\n/**\n * YAML files are migrated only where they hold commands or package names, so the text of other\n * values (an OpenAPI `description`, a label) stays as written even when it names a package.\n */\n\n/**\n * Keys whose map holds environment variables (GitHub Actions, Drone and Woodpecker `env`). A\n * variable can hold a command that a step runs as `$GEN`, so each value is read as shell text:\n * it changes only where the generator is in command position, never in a sentence that names it.\n */\nconst ENVIRONMENT_KEYS: ReadonlySet<string> = new Set([\"env\"]);\n\nconst isEnvironmentValue = (value: DocumentString): boolean =>\n value.path.length >= 2 && ENVIRONMENT_KEYS.has(String(value.path.at(-2)));\n\n/**\n * The default of an input of an action (`inputs.NAME.default` in `action.yml`) or of a reusable\n * or manual workflow (`on.workflow_call.inputs`): a step that runs `${{ inputs.NAME }}` runs it\n * when the caller gives none, so it is read as shell text, as an `env` value is.\n */\nconst INPUTS_KEY = \"inputs\";\nconst DEFAULT_KEY = \"default\";\nconst INPUT_DEFAULT_DEPTH = 3;\n\nconst isInputDefault = (value: DocumentString): boolean =>\n value.path.length >= INPUT_DEFAULT_DEPTH &&\n value.path.at(-1) === DEFAULT_KEY &&\n value.path.at(-INPUT_DEFAULT_DEPTH) === INPUTS_KEY;\n\n/**\n * The `env` variables of a file as its commands use them: `$GEN` runs the generator when an `env`\n * map sets `GEN` to it. The maps of a workflow, a job and a step are read as one, by name.\n */\nfunction environmentVariables(text: string, strings: readonly DocumentString[]): FileVariables {\n return shellVariables(\n strings.filter(isEnvironmentValue).map((value) => ({\n name: String(value.path.at(-1)),\n value: value.isEscaped ? value.value : shellText(text, value),\n })),\n );\n}\n\n/** Keys of a Dependabot config whose values are package names (`ignore`, `allow`, `groups`). */\nexport const DEPENDABOT_NAME_KEYS: ReadonlySet<string> = new Set([\n \"dependency-name\",\n \"patterns\",\n \"exclude-patterns\",\n]);\n\n/** A line break between two lines with text; a blank line between them stays a line break. */\nconst FOLDED_LINE_BREAK_RE = /(?<=\\S[^\\S\\n]*)\\n(?=[^\\S\\n]*\\S)/g;\n\n/**\n * The shell text of a value: where YAML folds a line break to a space, so does the shell text.\n * The replacement keeps the length, so offsets into it are offsets into the value as written.\n */\n/**\n * A GitHub Actions expression that reads one `env` variable: `${{ env.NAME }}`. The runner puts its\n * value into the command before the shell runs, as the shell expands `$NAME`.\n */\nconst ENV_EXPRESSION_RE = /\\$\\{\\{[ \\t]*env\\.([A-Za-z_][A-Za-z0-9_]*)[ \\t]*\\}\\}/g;\n\n/** `${{ env.NAME }}` read as `$NAME`, padded with blanks so that every offset stays. */\nconst asShellVariable = (expression: string, name: string): string =>\n `$${name}`.padEnd(expression.length, \" \");\n\nexport function shellText(text: string, value: DocumentString): string {\n const slice = text.slice(value.content.start, value.content.end);\n const unfolded = value.isFolded ? slice.replace(FOLDED_LINE_BREAK_RE, \" \") : slice;\n return unfolded.replace(ENV_EXPRESSION_RE, asShellVariable);\n}\n\nconst LEADING_SPACES_RE = /^ */;\n\n/**\n * The indentation of a block scalar as written: the fewest spaces at the start of its lines after\n * the first, which YAML removes from the value the shell runs. 0 for a value on one line.\n */\nfunction blockIndent(shell: string): number {\n const lines = shell\n .split(\"\\n\")\n .slice(1)\n .filter((line) => line.trim() !== \"\");\n const indents = lines.map((line) => LEADING_SPACES_RE.exec(line)?.[0].length ?? 0);\n return indents.length === 0 ? 0 : Math.min(...indents);\n}\n\n/** The values that belong to one of `keys`, also as items of a list. */\nconst valuesOf = (\n strings: readonly DocumentString[],\n keys: ReadonlySet<string>,\n): DocumentString[] => strings.filter((string) => keys.has(ownerKey(string.path) ?? \"\"));\n\n/**\n * Keys whose list value is one command in exec form, as Compose and Kubernetes read it: each item\n * is one word, and no shell splits it. A string value of these keys is still shell text.\n */\nconst EXEC_FORM_KEYS: ReadonlySet<string> = new Set([\"command\", \"entrypoint\"]);\n\nconst isExecFormItem = (value: DocumentString): boolean =>\n typeof value.path.at(-1) === \"number\" && EXEC_FORM_KEYS.has(String(value.path.at(-2)));\n\nconst listOf = (item: DocumentString): string => item.path.slice(0, -1).join(\".\");\n\n/** The next item of the same list: the documents of a stream may repeat a list's path. */\nconst isNextItem = (previous: DocumentString, item: DocumentString): boolean =>\n listOf(previous) === listOf(item) && Number(item.path.at(-1)) > Number(previous.path.at(-1));\n\n/** The commands of exec-form lists, one per list, each item a word. */\nfunction execFormCommands(text: string, items: readonly DocumentString[]): ShellCommand[] {\n const commands: ShellWord[][] = [];\n let previous: DocumentString | undefined;\n let command: ShellWord[] = [];\n for (const item of items) {\n if (previous === undefined || !isNextItem(previous, item)) {\n command = [];\n commands.push(command);\n }\n const { start, end } = item.content;\n command.push({ start, end, value: item.value, raw: text.slice(start, end) });\n previous = item;\n }\n return commands;\n}\n\n/**\n * The findings of a value with an escape (`\"echo \\\"Don't\\\" && …\"`), read as the value the shell\n * gets: its text as written would read `\\\"` as a quote and `'` as the start of a quoted word.\n * The offsets of the value are not those of the text, so a changed value replaces the whole\n * scalar, quoted as it was, and every finding names the line where the scalar starts.\n */\nfunction escapedValueFindings(\n value: DocumentString,\n encode: (value: string) => string,\n locate: Locate,\n variables?: FileVariables,\n): ShellTextFindings {\n const commands = shellCommands(value.value);\n const found = commandWordFindings(commands, () => locate(value.start), variables);\n const migrated = applyTextEdits(value.value, found.edits);\n const isChanged = migrated !== value.value;\n const edits = isChanged ? [{ start: value.start, end: value.end, text: encode(migrated) }] : [];\n return { ...found, edits };\n}\n\n/** The findings of one value read as shell text, with offsets into the whole text. */\nfunction valueFindings(\n text: string,\n value: DocumentString,\n locate: Locate,\n variables?: FileVariables,\n): ShellTextFindings {\n if (value.isEscaped && value.encode !== undefined) {\n return escapedValueFindings(value, value.encode, locate, variables);\n }\n const { start } = value.content;\n const shell = shellText(text, value);\n const commands = shellCommands(shell, blockIndent(shell));\n const found = commandWordFindings(commands, (offset) => locate(start + offset), variables);\n return { ...found, edits: shiftedEdits(found.edits, start) };\n}\n\n/** The edits of shell findings in a value, as offsets into the whole text. */\nconst shiftedEdits = (edits: readonly TextEdit[], offset: number): TextEdit[] =>\n edits.map((edit) => ({ ...edit, start: edit.start + offset, end: edit.end + offset }));\n\nexport function appliedFindings(\n text: string,\n found: readonly ShellTextFindings[],\n): CommandMigration {\n return {\n text: applyTextEdits(\n text,\n found.flatMap((findings) => findings.edits),\n ),\n changes: found.flatMap((findings) => findings.changes),\n manualSteps: found.flatMap((findings) => findings.manualSteps),\n };\n}\n\n/**\n * Migrate the commands of a YAML file (CI workflows, Compose files, hook configs). Edits replace\n * words only, never the blanks between them, so they apply to the value as written even where a\n * folded scalar was read with spaces for its line breaks.\n */\nexport function migrateYamlCommands(\n text: string,\n file: string,\n strings: readonly DocumentString[],\n keys: ReadonlySet<string> = YAML_COMMAND_KEYS,\n): CommandMigration {\n const lineOf = lineLocator(text);\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n const shellOf = stepShells(strings);\n const values = valuesOf(strings, keys).filter((value) => shellOf(value) === undefined);\n const commandValues = new Set(values.filter((value) => !isExecFormItem(value)));\n const shellValues = strings.filter(\n (value) => commandValues.has(value) || isEnvironmentValue(value) || isInputDefault(value),\n );\n const variables = environmentVariables(text, strings);\n return appliedFindings(text, [\n ...shellValues.map((value) => valueFindings(text, value, locate, variables)),\n commandWordFindings(execFormCommands(text, values.filter(isExecFormItem)), locate),\n otherShellFindings(valuesOf(strings, keys), shellOf, locate),\n ]);\n}\n\n/**\n * Migrate the commands of a YAML config at the paths of `patterns` (domain/command-paths.ts): a\n * pnpm `package.yaml`, a lint-staged config. Each finding names its place (`scripts.gen`).\n */\nexport function migrateYamlPathCommands(\n text: string,\n strings: readonly DocumentString[],\n patterns: readonly CommandPathPattern[],\n): CommandMigration {\n const commands = strings.filter((string) => isCommandPath(string.path, patterns));\n return appliedFindings(\n text,\n commands.map((command) => valueFindings(text, command, () => command.path.join(\".\"))),\n );\n}\n\n/** Rename the original packages that a Dependabot config ignores, allows or groups. */\nexport function migrateDependabotConfig(\n text: string,\n file: string,\n strings: readonly DocumentString[],\n): CommandMigration {\n const changes: Change[] = [];\n const edits: TextEdit[] = [];\n const lineOf = lineLocator(text);\n for (const value of valuesOf(strings, DEPENDABOT_NAME_KEYS)) {\n const from = value.value;\n const to = PACKAGE_RENAMES.get(from);\n if (to !== undefined) {\n const { start, end } = value.content;\n const location = `${file}:${lineOf(start)}`;\n changes.push({ kind: \"package-name-renamed\", location, from, to });\n edits.push({ start, end, text: to });\n }\n }\n return { text: applyTextEdits(text, edits), changes, manualSteps: [] };\n}\n","import {\n type CommandMigration,\n commandWordFindings,\n type ShellTextFindings,\n} from \"./command-migration.js\";\nimport type { DocumentPath, DocumentString } from \"./config-documents.js\";\nimport { type Change, lineLocator, type ManualStep } from \"./migration-findings.js\";\nimport { packageReference } from \"./old-package-words.js\";\nimport { PACKAGE_RENAMES } from \"./package-names.js\";\nimport type { ShellCommand, ShellWord } from \"./shell-word-parts.js\";\nimport { shellCommands } from \"./shell-words.js\";\nimport type { TextEdit } from \"./text-edits.js\";\nimport { appliedFindings, shellText } from \"./yaml-migration.js\";\n\n/**\n * pre-commit hooks (`.pre-commit-config.yaml`). A hook runs its `entry`, split into words without\n * a shell, with its `args` after them, so the two are read as one command: the flags of the\n * generator can be in either. A `language: node` hook installs its `additional_dependencies`;\n * an old package there is renamed, or reported when it is pinned to a version.\n */\n\nconst ENTRY_KEY = \"entry\";\nconst ARGS_KEY = \"args\";\nconst DEPENDENCIES_KEY = \"additional_dependencies\";\n\nconst hookOf = (path: DocumentPath): string => path.slice(0, -1).join(\".\");\n\n/** The items of the list at `key` of each hook, by hook. */\nfunction listsByHook(strings: readonly DocumentString[], key: string) {\n const lists = new Map<string, DocumentString[]>();\n for (const item of strings) {\n if (item.path.at(-2) === key) {\n const hook = item.path.slice(0, -2).join(\".\");\n lists.set(hook, [...(lists.get(hook) ?? []), item]);\n }\n }\n return lists;\n}\n\n/** The words of an entry, as offsets into the whole text. */\nfunction entryWords(text: string, entry: DocumentString): ShellWord[] {\n const { start } = entry.content;\n return shellCommands(shellText(text, entry))\n .flat()\n .map((word) => ({ ...word, start: word.start + start, end: word.end + start }));\n}\n\nconst itemWord = (text: string, item: DocumentString): ShellWord => {\n const { start, end } = item.content;\n return { start, end, value: item.value, raw: text.slice(start, end) };\n};\n\n/** The command of each hook: its entry words, then its args. */\nfunction hookCommands(text: string, strings: readonly DocumentString[]): ShellCommand[] {\n const args = listsByHook(strings, ARGS_KEY);\n return strings\n .filter((string) => string.path.at(-1) === ENTRY_KEY)\n .map((entry) => [\n ...entryWords(text, entry),\n ...(args.get(hookOf(entry.path)) ?? []).map((item) => itemWord(text, item)),\n ]);\n}\n\n/** The old packages that the hooks install, renamed, or reported when pinned. */\nfunction dependencyFindings(\n strings: readonly DocumentString[],\n locate: (offset: number) => string,\n): ShellTextFindings {\n const found = {\n edits: [] as TextEdit[],\n changes: [] as Change[],\n manualSteps: [] as ManualStep[],\n };\n for (const item of [...listsByHook(strings, DEPENDENCIES_KEY).values()].flat()) {\n const { name, isPinned } = packageReference(item.value);\n const to = PACKAGE_RENAMES.get(name);\n const location = locate(item.content.start);\n if (to !== undefined && isPinned) {\n found.manualSteps.push({ kind: \"pinned-package\", location, name });\n } else if (to !== undefined) {\n found.edits.push({ start: item.content.start, end: item.content.end, text: to });\n found.changes.push({ kind: \"package-name-renamed\", location, from: name, to });\n }\n }\n return found;\n}\n\n/** Migrate the hooks of a pre-commit config: their commands and the packages they install. */\nexport function migratePreCommitHooks(\n text: string,\n file: string,\n strings: readonly DocumentString[],\n): CommandMigration {\n const lineOf = lineLocator(text);\n const locate = (offset: number): string => `${file}:${lineOf(offset)}`;\n return appliedFindings(text, [\n commandWordFindings(hookCommands(text, strings), locate),\n dependencyFindings(strings, locate),\n ]);\n}\n","import {\n type DocumentRead,\n isMap,\n mapsAt,\n type TreeMap,\n unreadableConfig,\n valuesAt,\n} from \"./config-documents.js\";\nimport { type Findings, newFindings, renameNames } from \"./dependency-map.js\";\nimport type { FileMigration } from \"./migration-findings.js\";\nimport { renameSpecifierKeys, reportOldPackagePaths } from \"./specifier-maps.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { itemEntries } from \"./tree-entries.js\";\n\n/**\n * A TypeScript (or JavaScript) project config. Imports get the new names, so the options that\n * name packages get them too: the keys of `compilerOptions.paths` are module specifiers, and\n * `compilerOptions.types` lists packages by name. A path into the installed files of an old\n * package (`node_modules/openapi-fetch/…`, in `paths` or `include`) points at files the new\n * package does not have there, so it is reported.\n */\n\nconst COMPILER_OPTIONS_FIELD = \"compilerOptions\";\nconst PATHS_FIELD = \"paths\";\nconst TYPES_FIELD = \"types\";\nconst FIELD_SEPARATOR = \".\";\n\nfunction migrateCompilerOptions(options: TreeMap, findings: Findings): void {\n for (const paths of mapsAt(options, PATHS_FIELD)) {\n // A key maps the imports it matches to the project's own files, so a deep key (`x/*`) still\n // matches the renamed imports and reaches no file of the package.\n const field = [COMPILER_OPTIONS_FIELD, PATHS_FIELD].join(FIELD_SEPARATOR);\n renameSpecifierKeys(paths, field, findings);\n }\n for (const types of valuesAt(options, TYPES_FIELD)) {\n if (types.kind === \"list\") {\n const field = [COMPILER_OPTIONS_FIELD, TYPES_FIELD].join(FIELD_SEPARATOR);\n renameNames(itemEntries(types), field, findings);\n }\n }\n}\n\n/** Migrate the package names of a tsconfig or jsconfig (`read` is `text` parsed). */\nexport function migrateTsconfig(text: string, read: DocumentRead): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const config of read.documents.filter(isMap)) {\n for (const options of mapsAt(config, COMPILER_OPTIONS_FIELD)) {\n migrateCompilerOptions(options, findings);\n }\n reportOldPackagePaths(config, [], findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import { catalogMaps } from \"./catalogs.js\";\nimport { type DocumentRead, isMap, type TreeMap, unreadableConfig } from \"./config-documents.js\";\nimport { type Findings, migrateSpecMap, newFindings, type RenameTarget } from \"./dependency-map.js\";\nimport type { FileMigration } from \"./migration-findings.js\";\nimport { CATALOG_FIELD, NAMED_CATALOGS_FIELD } from \"./package-names.js\";\nimport { reportSettingSections, type SettingsFile } from \"./settings-sections.js\";\nimport { applyTextEdits } from \"./text-edits.js\";\nimport { specEntries } from \"./tree-entries.js\";\n\n/**\n * Catalogs in YAML: `pnpm-workspace.yaml` (pnpm) and `.yarnrc.yml` (Yarn 4.10 and newer). A\n * project whose package.json says `\"openapi-fetch\": \"catalog:\"` keeps its version here, so the\n * entry and that dependency must keep one name whatever its spec is, or the install fails\n * (`ERR_PNPM_CATALOG_ENTRY_NOT_FOUND_FOR_SPEC`); the catalog plan (domain/catalogs.ts) says\n * which entries keep the old one. Only the renamed keys and values are replaced\n * in the text, so comments and formatting stay (domain/config-documents.ts). Only entries of\n * `catalog:` and `catalogs:` are renamed; the other settings that name an original package are\n * reported (domain/settings-sections.ts), like the same fields of package.json.\n */\n\nconst CATALOG_SECTIONS = [CATALOG_FIELD, NAMED_CATALOGS_FIELD];\n\nexport const PNPM_WORKSPACE_FILE: SettingsFile = {\n migratedSections: new Set([...CATALOG_SECTIONS, \"packages\"]),\n overrideSections: new Set([\"overrides\", \"patchedDependencies\"]),\n prefix: \"\",\n};\n\n/** Yarn keeps overrides in package.json (`resolutions`), not in `.yarnrc.yml`. */\nexport const YARNRC_FILE: SettingsFile = {\n migratedSections: new Set(CATALOG_SECTIONS),\n overrideSections: new Set(),\n prefix: \"\",\n};\n\nfunction migrateCatalogs(workspace: TreeMap, target: RenameTarget, findings: Findings): void {\n for (const { name, label, map } of catalogMaps(workspace)) {\n const context = {\n ...target,\n map: { kind: \"catalog\", catalog: label, name } as const,\n findings,\n };\n migrateSpecMap(specEntries(map), context);\n }\n}\n\n/**\n * Rename the original packages in the catalogs of a YAML file (`read` is `text` parsed); report\n * its other settings that name them.\n */\nexport function migrateWorkspaceCatalogs(\n text: string,\n read: DocumentRead,\n target: RenameTarget,\n file: SettingsFile,\n): FileMigration {\n if (read.kind === \"unreadable\") {\n return unreadableConfig(text, read.offset);\n }\n const findings = newFindings();\n for (const workspace of read.documents.filter(isMap)) {\n migrateCatalogs(workspace, target, findings);\n reportSettingSections(workspace, file, findings);\n }\n const { edits, changes, manualSteps } = findings;\n return { text: applyTextEdits(text, edits), changes, manualSteps };\n}\n","import type { CatalogPlan } from \"../domain/catalog-plan.js\";\nimport {\n type DocumentRead,\n type DocumentString,\n documentStrings,\n unreadableConfig,\n} from \"../domain/config-documents.js\";\nimport type { ManifestDeclarations } from \"../domain/declared-packages.js\";\nimport {\n type Change,\n type FileMigration,\n type ManualStep,\n unchanged,\n} from \"../domain/migration-findings.js\";\nimport { namesOriginalPackage } from \"../domain/package-names.js\";\nimport type { SuccessorAliases } from \"../domain/successor-aliases.js\";\nimport type { ApiDescriptionParts } from \"./api-description-parts.js\";\nimport type { CallbackRewriter, DocumentReaders, SourceStringScanner } from \"./ports.js\";\n\n/**\n * The parts that file migrations are built from: the context they get, configs read once and\n * migrated in steps, and the gate that leaves a file naming no old package unread.\n */\n\n/** What a migration of one kind of file needs besides the text. */\nexport interface MigrationContext {\n readonly version: string;\n /** What the catalogs keep under the old names, from every manifest and catalog file. */\n readonly catalogs: CatalogPlan;\n /** What every manifest of the project declares, for the imports of a source file. */\n readonly manifests: readonly ManifestDeclarations[];\n /** The files whose overrides alias original packages to their successors. */\n readonly aliases: readonly SuccessorAliases[];\n /** The files that the API descriptions reach by `$ref`: data, not commands. */\n readonly apiDescriptionParts: ApiDescriptionParts;\n readonly rewriter: CallbackRewriter;\n readonly scanner: SourceStringScanner;\n readonly readers: DocumentReaders;\n}\n\n/** One kind of file the migration knows, and how to migrate it. */\nexport interface FileKind {\n readonly matches: (path: string) => boolean;\n readonly migrate: (text: string, path: string, context: MigrationContext) => FileMigration;\n}\n\n/** A migration with more manual steps appended. */\nexport const withSteps = (\n migration: FileMigration,\n steps: readonly ManualStep[],\n): FileMigration => ({\n ...migration,\n manualSteps: [...migration.manualSteps, ...steps],\n});\n\n/** Two migrations of the same text, one after the other, with their findings joined. */\nexport function chain(first: FileMigration, next: (text: string) => FileMigration): FileMigration {\n const second = next(first.text);\n const changes: Change[] = [...first.changes, ...second.changes];\n const manualSteps: ManualStep[] = [...first.manualSteps, ...second.manualSteps];\n return { text: second.text, changes, manualSteps };\n}\n\n/** One migration of a config, given its text and that text read. */\nexport type ConfigStep = (text: string, read: DocumentRead) => FileMigration;\n\n/**\n * The steps one after the other, each on the text the step before it left. A config that cannot\n * be read is reported once, and no step runs.\n */\nfunction migrateConfig(\n text: string,\n read: (text: string) => DocumentRead,\n steps: readonly ConfigStep[],\n): FileMigration {\n const first = read(text);\n if (first.kind === \"unreadable\") {\n return unreadableConfig(text, first.offset);\n }\n return steps.reduce(\n (done, step) =>\n chain(done, (current) => step(current, current === text ? first : read(current))),\n unchanged(text),\n );\n}\n\n/** A step that reads the string values of the config, with their key paths. */\nexport const stringsStep =\n (migrate: (text: string, strings: readonly DocumentString[]) => FileMigration): ConfigStep =>\n (text, read) =>\n read.kind === \"unreadable\"\n ? unreadableConfig(text, read.offset)\n : migrate(text, documentStrings(read.documents));\n\n/** A JSON config migrated by `steps`, which also get its path. */\nexport const jsonConfig =\n (\n steps: (context: MigrationContext, path: string) => readonly ConfigStep[],\n ): FileKind[\"migrate\"] =>\n (text, path, context) =>\n migrateConfig(text, (current) => context.readers.json.read(current), steps(context, path));\n\n/** A YAML config migrated by `steps`, which also get its path. */\nexport const yamlConfig =\n (\n steps: (context: MigrationContext, path: string) => readonly ConfigStep[],\n ): FileKind[\"migrate\"] =>\n (text, path, context) =>\n migrateConfig(text, (current) => context.readers.yaml.read(current), steps(context, path));\n\n/**\n * A migration that leaves a text naming no original package as it is, without reading it. For\n * the files whose findings all start at an old name: commands and Dependabot names. Any YAML file\n * matches the command kind, and an OpenAPI document of megabytes is read in seconds, for nothing.\n */\nexport const whenNamed =\n (migrate: FileKind[\"migrate\"]): FileKind[\"migrate\"] =>\n (text, path, context) =>\n namesOriginalPackage(text) ? migrate(text, path, context) : unchanged(text);\n","/** The names of the files the migration reads, as the tools that own them look for them. */\n\nexport const SHELL_EXTENSIONS: ReadonlySet<string> = new Set([\".sh\", \".bash\", \".zsh\"]);\nexport const MAKEFILE_EXTENSION = \".mk\";\nexport const YAML_EXTENSIONS: ReadonlySet<string> = new Set([\".yml\", \".yaml\"]);\n/** Makefiles, justfiles and Dockerfiles, by the names make, just and docker look for. */\nexport const MAKEFILE_NAMES: ReadonlySet<string> = new Set([\"Makefile\", \"makefile\", \"GNUmakefile\"]);\nexport const JUSTFILE_NAMES: ReadonlySet<string> = new Set([\"justfile\", \"Justfile\", \".justfile\"]);\nexport const DOCKERFILE_NAMES: ReadonlySet<string> = new Set([\"Dockerfile\", \"Containerfile\"]);\n/** Git hooks that husky runs; `.husky/_/` holds husky's own generated scripts. */\nexport const HUSKY_FOLDER = \".husky/\";\nexport const HUSKY_INTERNALS = \".husky/_/\";\nexport const NX_PROJECT_FILE = \"project.json\";\nexport const NX_WORKSPACE_FILE = \"nx.json\";\n/** Jest's config in JSON; `jest.config.js` and the other scripts are source files. */\nexport const JEST_JSON_CONFIG_FILE = \"jest.config.json\";\n/** The names Task looks for, `.dist` ones included. */\nexport const TASKFILE_NAMES: ReadonlySet<string> = new Set(\n [\"Taskfile\", \"taskfile\", \"Taskfile.dist\", \"taskfile.dist\"].flatMap((name) => [\n `${name}.yml`,\n `${name}.yaml`,\n ]),\n);\nexport const PRE_COMMIT_FILES: ReadonlySet<string> = new Set([\n \".pre-commit-config.yaml\",\n \".pre-commit-config.yml\",\n]);\n/** lint-staged reads `.lintstagedrc` as JSON or YAML; YAML reads both. */\nexport const LINT_STAGED_YAML_FILES: ReadonlySet<string> = new Set([\n \".lintstagedrc\",\n \".lintstagedrc.yaml\",\n \".lintstagedrc.yml\",\n]);\nexport const LINT_STAGED_JSON_FILE = \".lintstagedrc.json\";\nexport const SIMPLE_GIT_HOOKS_FILES: ReadonlySet<string> = new Set([\n \".simple-git-hooks.json\",\n \"simple-git-hooks.json\",\n]);\nexport const DENO_CONFIG_FILES: ReadonlySet<string> = new Set([\"deno.json\", \"deno.jsonc\"]);\n/** Deno reads its import map from its config, or from a file that the config names. */\nexport const IMPORT_MAP_FILE = \"import_map.json\";\nexport const DEPENDABOT_FILES: ReadonlySet<string> = new Set([\n \".github/dependabot.yml\",\n \".github/dependabot.yaml\",\n]);\nexport const WORKSPACE_FILE = \"pnpm-workspace.yaml\";\nexport const YARNRC_FILE_NAME = \".yarnrc.yml\";\n/** pnpm reads a manifest from `package.yaml` too. */\nexport const YAML_MANIFEST_FILES: ReadonlySet<string> = new Set([\"package.yaml\", \"package.yml\"]);\n/** pnpm also reads a manifest from `package.json5`, a format the tool reports but does not read. */\nexport const JSON5_MANIFEST_FILE = \"package.json5\";\nexport const MANIFEST_FILE = \"package.json\";\n/**\n * TypeScript's project configs by the names tsc and editors look for: `tsconfig.json`,\n * `jsconfig.json`, and the `tsconfig.build.json` kind that `--project` and `extends` name.\n */\nexport const PROJECT_CONFIG_NAME = /^[jt]sconfig(\\.[^/]+)?\\.json$/;\n/** The package manager writes these again on install; their entries are not commands. */\nexport const LOCK_FILES: ReadonlySet<string> = new Set([\"pnpm-lock.yaml\", \"yarn.lock\", \"bun.lock\"]);\n\n/**\n * CI configs by the names and folders their services read: a top-level `openapi:` there is a job\n * (GitLab names jobs freely), never an API description.\n */\nconst CI_CONFIG_FILES: ReadonlySet<string> = new Set([\n \".gitlab-ci.yml\",\n \".gitlab-ci.yaml\",\n \"bitbucket-pipelines.yml\",\n \"azure-pipelines.yml\",\n \".drone.yml\",\n \".woodpecker.yml\",\n \".travis.yml\",\n]);\nconst CI_CONFIG_FOLDERS: readonly string[] = [\n \".github/workflows/\",\n \".gitea/workflows/\",\n \".forgejo/workflows/\",\n \".circleci/\",\n \".gitlab/\",\n \".woodpecker/\",\n];\nconst FOLDER_SEPARATOR = \"/\";\n\n/** Whether a path is a CI config, also in a nested project (`apps/api/.gitlab-ci.yml`). */\nexport function isCiConfigFile(path: string): boolean {\n const inFolder = (folder: string): boolean =>\n path.startsWith(folder) || path.includes(`${FOLDER_SEPARATOR}${folder}`);\n return CI_CONFIG_FILES.has(baseName(path)) || CI_CONFIG_FOLDERS.some(inFolder);\n}\n\nexport function baseName(path: string): string {\n return path.slice(path.lastIndexOf(\"/\") + 1);\n}\n\nexport function extensionOf(path: string): string {\n const name = baseName(path);\n const dot = name.lastIndexOf(\".\");\n return dot <= 0 ? \"\" : name.slice(dot);\n}\n","import { isMap } from \"../domain/config-documents.js\";\nimport type { ManifestDeclarations } from \"../domain/declared-packages.js\";\nimport { importMapLocations } from \"../domain/import-map-reference.js\";\nimport type { DocumentReaders, ProjectFiles } from \"./ports.js\";\nimport { baseName, DENO_CONFIG_FILES } from \"./project-file-names.js\";\n\n/** Each import map file that Deno configs name, with the paths of the configs that name it. */\nexport type NamedImportMaps = ReadonlyMap<string, readonly string[]>;\n\nexport const NO_NAMED_IMPORT_MAPS: NamedImportMaps = new Map();\n\n/** The import maps in the project that one Deno config names, read as JSON. */\nasync function importMapsOf(\n path: string,\n files: ProjectFiles,\n readers: DocumentReaders,\n): Promise<string[]> {\n const read = await files.read(path);\n const parsed = read.kind === \"read\" ? readers.json.read(read.text) : undefined;\n if (parsed?.kind !== \"read\") {\n return [];\n }\n return importMapLocations(path, parsed.documents.filter(isMap)).flatMap((location) =>\n location.kind === \"in-project\" ? [location.path] : [],\n );\n}\n\n/**\n * The project files that Deno configs name as their import maps (`\"importMap\": \"./deps.json\"`).\n * They are found before the plan, which reads them as import maps whatever their name. A config\n * that cannot be read names none here; its migration reports it.\n */\nexport async function namedImportMaps(\n paths: readonly string[],\n files: ProjectFiles,\n readers: DocumentReaders,\n): Promise<NamedImportMaps> {\n const named = new Map<string, string[]>();\n for (const path of paths.filter((candidate) => DENO_CONFIG_FILES.has(baseName(candidate)))) {\n for (const map of await importMapsOf(path, files, readers)) {\n named.set(map, [...(named.get(map) ?? []), path]);\n }\n }\n return named;\n}\n\n/** All of `sets` in one; undefined (every package) when one of them is. */\nfunction joinedNames(\n sets: readonly (ReadonlySet<string> | undefined)[],\n): ReadonlySet<string> | undefined {\n return sets.some((names) => names === undefined)\n ? undefined\n : new Set(sets.flatMap((names) => [...(names ?? [])]));\n}\n\n/**\n * The declarations with the names of each named import map given to the configs that name it:\n * Deno resolves the imports of the files under a config through its map, wherever the map is.\n */\nexport function withNamedImportMaps(\n declarations: readonly ManifestDeclarations[],\n importMaps: NamedImportMaps,\n): ManifestDeclarations[] {\n const mapNames = new Map(declarations.map(({ path, names }) => [path, names]));\n return declarations\n .filter(({ path }) => !importMaps.has(path))\n .map((declaration) => {\n const { path, names } = declaration;\n const maps = [...importMaps].filter(([, configs]) => configs.includes(path));\n const named = maps.flatMap(([map]) => (mapNames.has(map) ? [mapNames.get(map)] : []));\n return { ...declaration, names: joinedNames([names, ...named]) };\n });\n}\n","import { isApiDescription } from \"../domain/api-descriptions.js\";\nimport { migrateCommandLines } from \"../domain/command-migration.js\";\nimport {\n type CommandPathPattern,\n DENO_TASK_PATHS,\n LINT_STAGED_COMMAND_PATHS,\n MANIFEST_COMMAND_PATHS,\n NX_PROJECT_COMMAND_PATHS,\n NX_WORKSPACE_COMMAND_PATHS,\n SIMPLE_GIT_HOOKS_COMMAND_PATHS,\n} from \"../domain/command-paths.js\";\nimport { commandStringSteps } from \"../domain/command-strings.js\";\nimport { localPackagesFor, undeclaredImportSteps } from \"../domain/declared-packages.js\";\nimport { migrateDockerfile } from \"../domain/dockerfile-migration.js\";\nimport { migrateImportMap } from \"../domain/import-map-migration.js\";\nimport { importMapSteps } from \"../domain/import-map-reference.js\";\nimport { isJestConfig, jestJsonSteps, jestScriptSteps } from \"../domain/jest-config.js\";\nimport { migrateJsonCommands } from \"../domain/json-command-migration.js\";\nimport { migrateJustfile } from \"../domain/justfile-migration.js\";\nimport { migrateMakefile } from \"../domain/makefile-migration.js\";\nimport { migratePackageManifest, unreadManifest } from \"../domain/manifest-migration.js\";\nimport { type FileMigration, unchanged } from \"../domain/migration-findings.js\";\nimport { oldPackagePatchSteps, patchedOldPackage } from \"../domain/patch-files.js\";\nimport { migratePreCommitHooks } from \"../domain/pre-commit-migration.js\";\nimport {\n importedSpecifiers,\n migrateModuleSpecifiers,\n SOURCE_EXTENSIONS,\n} from \"../domain/source-migration.js\";\nimport { aliasedPackagesFor } from \"../domain/successor-aliases.js\";\nimport { migrateTsconfig } from \"../domain/tsconfig-migration.js\";\nimport {\n migrateWorkspaceCatalogs,\n PNPM_WORKSPACE_FILE,\n YARNRC_FILE,\n} from \"../domain/workspace-catalog-migration.js\";\nimport { TASKFILE_COMMAND_KEYS } from \"../domain/yaml-command-keys.js\";\nimport {\n migrateDependabotConfig,\n migrateYamlCommands,\n migrateYamlPathCommands,\n} from \"../domain/yaml-migration.js\";\nimport {\n type ConfigStep,\n chain,\n type FileKind,\n jsonConfig,\n type MigrationContext,\n stringsStep,\n whenNamed,\n withSteps,\n yamlConfig,\n} from \"./config-steps.js\";\nimport { type NamedImportMaps, NO_NAMED_IMPORT_MAPS } from \"./named-import-maps.js\";\nimport {\n baseName,\n DENO_CONFIG_FILES,\n DEPENDABOT_FILES,\n DOCKERFILE_NAMES,\n extensionOf,\n HUSKY_FOLDER,\n HUSKY_INTERNALS,\n IMPORT_MAP_FILE,\n isCiConfigFile,\n JEST_JSON_CONFIG_FILE,\n JSON5_MANIFEST_FILE,\n JUSTFILE_NAMES,\n LINT_STAGED_JSON_FILE,\n LINT_STAGED_YAML_FILES,\n LOCK_FILES,\n MAKEFILE_EXTENSION,\n MAKEFILE_NAMES,\n MANIFEST_FILE,\n NX_PROJECT_FILE,\n NX_WORKSPACE_FILE,\n PRE_COMMIT_FILES,\n PROJECT_CONFIG_NAME,\n SHELL_EXTENSIONS,\n SIMPLE_GIT_HOOKS_FILES,\n TASKFILE_NAMES,\n WORKSPACE_FILE,\n YAML_EXTENSIONS,\n YAML_MANIFEST_FILES,\n YARNRC_FILE_NAME,\n} from \"./project-file-names.js\";\n\nconst isHuskyHook = (path: string): boolean =>\n (path.startsWith(HUSKY_FOLDER) || path.includes(`/${HUSKY_FOLDER}`)) &&\n !path.includes(HUSKY_INTERNALS);\n\nconst isDependabotConfig = (path: string): boolean =>\n [...DEPENDABOT_FILES].some((file) => path === file || path.endsWith(`/${file}`));\n\n/** Module specifiers and `transform` callbacks are migrated; command strings are reported. */\nfunction migrateSource(text: string, path: string, context: MigrationContext): FileMigration {\n const strings = context.scanner.scan(text, path);\n const kept = localPackagesFor(context.manifests, path);\n const migrated = chain(migrateModuleSpecifiers(text, strings, context.version, kept), (renamed) =>\n context.rewriter.rewrite(renamed, path),\n );\n const imports = importedSpecifiers(text, strings);\n const undeclared = undeclaredImportSteps(imports, path, context.manifests);\n const patterns = isJestConfig(baseName(path)) ? jestScriptSteps(text, strings) : [];\n return withSteps(migrated, [...commandStringSteps(text, strings), ...undeclared, ...patterns]);\n}\n\nconst jsonCommandsStep = (patterns: readonly CommandPathPattern[]): ConfigStep =>\n stringsStep((text, strings) => migrateJsonCommands(text, strings, patterns));\n\n/** A Deno import map, in its own file or in a config. */\nconst importMapStep =\n (version: string): ConfigStep =>\n (text, read) =>\n migrateImportMap(text, read, version);\n\nconst importMapFile = jsonConfig(({ version }) => [importMapStep(version)]);\n\n/** A YAML config whose commands are at the paths of `patterns`. */\nconst yamlPathCommands = (patterns: readonly CommandPathPattern[]): ConfigStep =>\n stringsStep((text, strings) => migrateYamlPathCommands(text, strings, patterns));\n\n/**\n * Configs that only hold commands, by file name: they come before the generic YAML kind, which\n * would read them by the common command keys only.\n */\nconst COMMAND_CONFIG_KINDS: readonly FileKind[] = [\n {\n matches: (path) => baseName(path) === NX_PROJECT_FILE,\n migrate: jsonConfig(() => [jsonCommandsStep(NX_PROJECT_COMMAND_PATHS)]),\n },\n {\n matches: (path) => baseName(path) === NX_WORKSPACE_FILE,\n migrate: jsonConfig(() => [jsonCommandsStep(NX_WORKSPACE_COMMAND_PATHS)]),\n },\n {\n matches: (path) => baseName(path) === LINT_STAGED_JSON_FILE,\n migrate: jsonConfig(() => [jsonCommandsStep(LINT_STAGED_COMMAND_PATHS)]),\n },\n {\n matches: (path) => LINT_STAGED_YAML_FILES.has(baseName(path)),\n migrate: whenNamed(yamlConfig(() => [yamlPathCommands(LINT_STAGED_COMMAND_PATHS)])),\n },\n {\n matches: (path) => SIMPLE_GIT_HOOKS_FILES.has(baseName(path)),\n migrate: jsonConfig(() => [jsonCommandsStep(SIMPLE_GIT_HOOKS_COMMAND_PATHS)]),\n },\n {\n matches: (path) => TASKFILE_NAMES.has(baseName(path)),\n migrate: whenNamed(\n yamlConfig((_context, path) => [\n stringsStep((text, strings) =>\n migrateYamlCommands(text, path, strings, TASKFILE_COMMAND_KEYS),\n ),\n ]),\n ),\n },\n {\n matches: (path) => PRE_COMMIT_FILES.has(baseName(path)),\n migrate: whenNamed(\n yamlConfig((_context, path) => [\n stringsStep((text, strings) => migratePreCommitHooks(text, path, strings)),\n ]),\n ),\n },\n];\n\n/**\n * The commands of a YAML file; an API description (an OpenAPI document) and the files it reaches\n * by `$ref` are data and stay. A CI config is never one (project-file-names.ts).\n */\nconst yamlCommandsStep =\n (path: string, isPart: boolean): ConfigStep =>\n (text, read) =>\n isPart || (!isCiConfigFile(path) && read.kind === \"read\" && isApiDescription(read.documents))\n ? unchanged(text)\n : stringsStep((current, strings) => migrateYamlCommands(current, path, strings))(text, read);\n\n/** What the manifest at `path` is migrated with. */\nconst manifestTarget = ({ version, catalogs, aliases }: MigrationContext, path: string) => ({\n version,\n catalogs,\n aliased: aliasedPackagesFor(aliases, path),\n});\n\n/** The kinds in order; the first that matches a path migrates it. */\nconst FILE_KINDS: readonly FileKind[] = [\n {\n matches: (path) => baseName(path) === MANIFEST_FILE,\n migrate: jsonConfig((context, path) => [\n (text, read) => migratePackageManifest(text, read, manifestTarget(context, path)),\n jsonCommandsStep(MANIFEST_COMMAND_PATHS),\n ]),\n },\n {\n matches: (path) => YAML_MANIFEST_FILES.has(baseName(path)),\n migrate: yamlConfig((context, path) => [\n (text, read) => migratePackageManifest(text, read, manifestTarget(context, path)),\n yamlPathCommands(MANIFEST_COMMAND_PATHS),\n ]),\n },\n {\n matches: (path) => baseName(path) === JSON5_MANIFEST_FILE,\n migrate: unreadManifest,\n },\n {\n matches: (path) => baseName(path) === WORKSPACE_FILE,\n migrate: yamlConfig(({ version, catalogs }) => [\n (text, read) =>\n migrateWorkspaceCatalogs(text, read, { version, catalogs }, PNPM_WORKSPACE_FILE),\n ]),\n },\n {\n matches: (path) => baseName(path) === YARNRC_FILE_NAME,\n migrate: yamlConfig(({ version, catalogs }) => [\n (text, read) => migrateWorkspaceCatalogs(text, read, { version, catalogs }, YARNRC_FILE),\n ]),\n },\n {\n matches: (path) => baseName(path) === JEST_JSON_CONFIG_FILE,\n migrate: jsonConfig(() => [(text, read) => withSteps(unchanged(text), jestJsonSteps(read))]),\n },\n {\n matches: (path) => patchedOldPackage(baseName(path)) !== undefined,\n migrate: (text, path) => withSteps(unchanged(text), oldPackagePatchSteps(baseName(path))),\n },\n {\n matches: (path) => SOURCE_EXTENSIONS.has(extensionOf(path)),\n migrate: migrateSource,\n },\n ...COMMAND_CONFIG_KINDS,\n {\n matches: (path) => DENO_CONFIG_FILES.has(baseName(path)),\n migrate: jsonConfig(({ version }, path) => [\n importMapStep(version),\n (text, read) => withSteps(unchanged(text), importMapSteps(path, read)),\n jsonCommandsStep(DENO_TASK_PATHS),\n ]),\n },\n {\n matches: (path) => baseName(path) === IMPORT_MAP_FILE,\n migrate: importMapFile,\n },\n {\n matches: (path) => PROJECT_CONFIG_NAME.test(baseName(path)),\n migrate: whenNamed(jsonConfig(() => [migrateTsconfig])),\n },\n {\n matches: isDependabotConfig,\n migrate: whenNamed(\n yamlConfig((_context, path) => [\n stringsStep((text, strings) => migrateDependabotConfig(text, path, strings)),\n ]),\n ),\n },\n {\n matches: (path) => YAML_EXTENSIONS.has(extensionOf(path)),\n migrate: whenNamed(\n yamlConfig((context, path) => [\n yamlCommandsStep(path, context.apiDescriptionParts.has(path)),\n ]),\n ),\n },\n {\n matches: (path) => DOCKERFILE_NAMES.has(baseName(path)),\n migrate: whenNamed((text, path) => migrateDockerfile(text, path)),\n },\n {\n matches: (path) =>\n MAKEFILE_NAMES.has(baseName(path)) || extensionOf(path) === MAKEFILE_EXTENSION,\n migrate: whenNamed((text, path) => migrateMakefile(text, path)),\n },\n {\n matches: (path) => JUSTFILE_NAMES.has(baseName(path)),\n migrate: whenNamed((text, path) => migrateJustfile(text, path)),\n },\n {\n matches: (path) => SHELL_EXTENSIONS.has(extensionOf(path)) || isHuskyHook(path),\n migrate: whenNamed((text, path) => migrateCommandLines(text, path)),\n },\n];\n\n/**\n * The migration for a file, or undefined when the migration does not read that kind of file.\n * `namedImportMaps` are the files that a Deno config names as its import map (`\"importMap\":\n * \"./deps.json\"`): they are import maps whatever their name.\n */\nexport function fileMigrationFor(\n path: string,\n namedImportMaps: NamedImportMaps = NO_NAMED_IMPORT_MAPS,\n): FileKind[\"migrate\"] | undefined {\n if (LOCK_FILES.has(baseName(path))) {\n return undefined;\n }\n if (namedImportMaps.has(path)) {\n return importMapFile;\n }\n return FILE_KINDS.find((kind) => kind.matches(path))?.migrate;\n}\n","import {\n isApiDescription,\n mayBeApiDescription,\n referencedFiles,\n} from \"../domain/api-descriptions.js\";\nimport type { DocumentRead, TreeNode } from \"../domain/config-documents.js\";\nimport { namesOriginalPackage } from \"../domain/package-names.js\";\nimport type { DocumentReaders, ProjectFiles } from \"./ports.js\";\nimport { extensionOf, isCiConfigFile, YAML_EXTENSIONS } from \"./project-file-names.js\";\n\n/**\n * The files of a split API description: the YAML and JSON files that an API description of the\n * project reaches by `$ref`, directly or through other such files. Their values are data, so the\n * YAML command migration leaves them as it leaves the description.\n */\n\n/** The parts of the project's API descriptions; empty when none is listed. */\nexport type ApiDescriptionParts = ReadonlySet<string>;\n\nexport const NO_API_DESCRIPTION_PARTS: ApiDescriptionParts = new Set();\n\nconst JSON_EXTENSION = \".json\";\n\ninterface PartsDependencies {\n readonly files: ProjectFiles;\n readonly readers: DocumentReaders;\n}\n\nconst isYaml = (path: string): boolean => YAML_EXTENSIONS.has(extensionOf(path));\n\n/** A YAML or JSON file that can be an API description or a part of one; a CI config is neither. */\nconst isDescriptionFormat = (path: string): boolean =>\n (isYaml(path) || extensionOf(path) === JSON_EXTENSION) && !isCiConfigFile(path);\n\n/** The text of a listed file, or undefined when it cannot be read. */\nasync function textOf(path: string, files: ProjectFiles): Promise<string | undefined> {\n const read = await files.read(path);\n return read.kind === \"read\" ? read.text : undefined;\n}\n\n/** The parsed documents of a YAML or JSON text, or undefined when it does not parse. */\nfunction documentsOf(path: string, text: string, readers: DocumentReaders): TreeNode[] | undefined {\n const parsed: DocumentRead = (isYaml(path) ? readers.yaml : readers.json).read(text);\n return parsed.kind === \"read\" ? [...parsed.documents] : undefined;\n}\n\n/**\n * Whether a YAML file names an old package, so the command migration reads it: only then can a\n * part be changed. The descriptions, which can be large, are parsed only when there is one.\n */\nasync function hasNamingYaml(paths: readonly string[], files: ProjectFiles): Promise<boolean> {\n for (const path of paths.filter(isYaml)) {\n const text = await textOf(path, files);\n if (text !== undefined && namesOriginalPackage(text)) {\n return true;\n }\n }\n return false;\n}\n\n/** The API descriptions of the listing, with their parsed documents. */\nasync function descriptionRoots(\n paths: readonly string[],\n { files, readers }: PartsDependencies,\n): Promise<Map<string, TreeNode[]>> {\n const roots = new Map<string, TreeNode[]>();\n for (const path of paths.filter(isDescriptionFormat)) {\n const text = await textOf(path, files);\n const documents =\n text !== undefined && mayBeApiDescription(text)\n ? documentsOf(path, text, readers)\n : undefined;\n if (documents !== undefined && isApiDescription(documents)) {\n roots.set(path, documents);\n }\n }\n return roots;\n}\n\n/**\n * The listed files that the API descriptions of `paths` reach by `$ref`, the descriptions\n * themselves left out. A part that cannot be read or parsed is still a part; its own references\n * are not followed.\n */\nexport async function apiDescriptionParts(\n paths: readonly string[],\n dependencies: PartsDependencies,\n): Promise<ApiDescriptionParts> {\n if (!(await hasNamingYaml(paths, dependencies.files))) {\n return NO_API_DESCRIPTION_PARTS;\n }\n const listed = new Set(paths.filter(isDescriptionFormat));\n const roots = await descriptionRoots(paths, dependencies);\n const parts = new Set<string>();\n const pending = [...roots].flatMap(([path, documents]) => referencedFiles(path, documents));\n for (let path = pending.pop(); path !== undefined; path = pending.pop()) {\n if (!listed.has(path) || roots.has(path) || parts.has(path)) {\n continue;\n }\n parts.add(path);\n const text = await textOf(path, dependencies.files);\n const documents =\n text === undefined ? undefined : documentsOf(path, text, dependencies.readers);\n pending.push(...(documents === undefined ? [] : referencedFiles(path, documents)));\n }\n return parts;\n}\n","import type { DocumentRead } from \"../domain/config-documents.js\";\nimport type { NamedImportMaps } from \"./named-import-maps.js\";\nimport type { DocumentReaders } from \"./ports.js\";\nimport {\n baseName,\n DENO_CONFIG_FILES,\n IMPORT_MAP_FILE,\n JSON5_MANIFEST_FILE,\n MANIFEST_FILE,\n WORKSPACE_FILE,\n YAML_MANIFEST_FILES,\n YARNRC_FILE_NAME,\n} from \"./project-file-names.js\";\n\n/**\n * How a file takes part in the project plan: a manifest names dependencies on catalogs (and bun\n * keeps catalogs in package.json) and declares packages, a workspace file holds catalogs\n * (domain/catalogs.ts), and a Deno import map declares the packages that sources import.\n */\nexport interface PlanSource {\n readonly role: \"manifest\" | \"catalogs\" | \"import-map\";\n /** Undefined for a format the tool does not read; such a file counts as declaring all. */\n readonly read: ((text: string, readers: DocumentReaders) => DocumentRead) | undefined;\n}\n\nconst readJson = (text: string, readers: DocumentReaders) => readers.json.read(text);\nconst readYaml = (text: string, readers: DocumentReaders) => readers.yaml.read(text);\n\n/**\n * The part a file plays in the project plan, or undefined for a file that plays none.\n * `namedImportMaps` are the files that Deno configs name as their import maps.\n */\nexport function planSourceOf(\n path: string,\n namedImportMaps: NamedImportMaps,\n): PlanSource | undefined {\n const name = baseName(path);\n if (namedImportMaps.has(path) || DENO_CONFIG_FILES.has(name) || name === IMPORT_MAP_FILE) {\n return { role: \"import-map\", read: readJson };\n }\n if (name === MANIFEST_FILE) {\n return { role: \"manifest\", read: readJson };\n }\n if (YAML_MANIFEST_FILES.has(name)) {\n return { role: \"manifest\", read: readYaml };\n }\n if (name === JSON5_MANIFEST_FILE) {\n return { role: \"manifest\", read: undefined };\n }\n const isCatalogFile = name === WORKSPACE_FILE || name === YARNRC_FILE_NAME;\n return isCatalogFile ? { role: \"catalogs\", read: readYaml } : undefined;\n}\n","import type { CatalogPlan } from \"../domain/catalog-plan.js\";\nimport { planCatalogs } from \"../domain/catalogs.js\";\nimport { isMap, type TreeMap, valuesAt } from \"../domain/config-documents.js\";\nimport {\n declaredNames,\n localPackageNames,\n type ManifestDeclarations,\n namesUninstalledPackage,\n} from \"../domain/declared-packages.js\";\nimport { importMapNames } from \"../domain/import-map-migration.js\";\nimport { namesOriginalPackage, WORKSPACES_FIELD } from \"../domain/package-names.js\";\nimport { type SuccessorAliases, successorAliasedPackages } from \"../domain/successor-aliases.js\";\nimport { type ApiDescriptionParts, apiDescriptionParts } from \"./api-description-parts.js\";\nimport { type NamedImportMaps, namedImportMaps, withNamedImportMaps } from \"./named-import-maps.js\";\nimport { type PlanSource, planSourceOf } from \"./plan-sources.js\";\nimport type { DocumentReaders, ProjectFiles } from \"./ports.js\";\nimport { MANIFEST_FILE, WORKSPACE_FILE, YARNRC_FILE_NAME } from \"./project-file-names.js\";\n\n/**\n * The project plan: what the manifests, catalog files and import maps of a project say, read once\n * before any file is migrated, so that each file is migrated in step with the others.\n */\n\n/** What the plan reads files with. */\nexport interface PlanDependencies {\n readonly files: ProjectFiles;\n readonly readers: DocumentReaders;\n}\n\n/**\n * What every file of a project is migrated with: the tool's version, the catalog plan and what the\n * manifests declare.\n */\nexport interface ProjectTarget {\n readonly version: string;\n readonly catalogs: CatalogPlan;\n readonly manifests: readonly ManifestDeclarations[];\n /** The manifests and workspace files whose overrides alias original packages. */\n readonly aliases: readonly SuccessorAliases[];\n /** The files that Deno configs name as their import maps. */\n readonly importMaps: NamedImportMaps;\n /** The files that the API descriptions reach by `$ref`, which are data. */\n readonly apiDescriptionParts: ApiDescriptionParts;\n}\n\n/**\n * A manifest, catalog or import map file as the plan reads it: whether it names an original\n * package, and its parsed roots; `roots` is undefined when the file cannot be read or parsed.\n */\ninterface PlanRead {\n readonly namesOriginal: boolean;\n readonly roots: readonly TreeMap[] | undefined;\n}\n\nasync function readForPlan(\n path: string,\n source: PlanSource,\n dependencies: PlanDependencies,\n): Promise<PlanRead> {\n const read = await dependencies.files.read(path);\n if (read.kind !== \"read\") {\n return { namesOriginal: false, roots: undefined };\n }\n const namesOriginal = namesOriginalPackage(read.text);\n // A file that names none of the packages adds nothing, so it is not parsed (the same gate as\n // the migration's own, which keeps large YAML files fast). The root manifest is parsed: its\n // `workspaces` field tells whether the root is a workspace root.\n const isNeeded = namesOriginal || namesUninstalledPackage(read.text) || path === MANIFEST_FILE;\n if (!isNeeded) {\n return { namesOriginal, roots: [] };\n }\n const parsed = source.read?.(read.text, dependencies.readers);\n const roots = parsed?.kind === \"read\" ? parsed.documents.filter(isMap) : undefined;\n return { namesOriginal, roots };\n}\n\n/** The files at a workspace root where pnpm and yarn keep the workspace's catalogs. */\nconst ROOT_WORKSPACE_FILES: ReadonlySet<string> = new Set([WORKSPACE_FILE, YARNRC_FILE_NAME]);\n\n/**\n * Whether a file of the root makes it a workspace root: a pnpm or yarn workspace file, or a\n * root manifest with `workspaces` (bun keeps its catalogs there).\n */\nfunction marksWorkspaceRoot(path: string, roots: readonly TreeMap[] | undefined): boolean {\n if (ROOT_WORKSPACE_FILES.has(path)) {\n return true;\n }\n const manifests = path === MANIFEST_FILE ? (roots ?? []) : [];\n return manifests.some((manifest) => valuesAt(manifest, WORKSPACES_FIELD).length > 0);\n}\n\n/** The names that a manifest or an import map declares, by the role of its file. */\nconst DECLARED_NAMES: Readonly<\n Record<PlanSource[\"role\"], ((root: TreeMap) => string[]) | undefined>\n> = { manifest: declaredNames, \"import-map\": importMapNames, catalogs: undefined };\n\n/** What a manifest or an import map declares; nothing for a file of another role. */\nfunction declarationsOf(\n path: string,\n role: PlanSource[\"role\"],\n roots: readonly TreeMap[] | undefined,\n): ManifestDeclarations[] {\n const names = DECLARED_NAMES[role];\n if (names === undefined) {\n return [];\n }\n const local = role === \"manifest\" ? (roots ?? []).flatMap(localPackageNames) : [];\n return [{ path, names: roots && new Set(roots.flatMap(names)), localPackages: new Set(local) }];\n}\n\n/** The successor aliases in the overrides of a manifest or a workspace file. */\nfunction aliasesOf(path: string, roots: readonly TreeMap[] | undefined): SuccessorAliases[] {\n const names = (roots ?? []).flatMap(successorAliasedPackages);\n return names.length === 0 ? [] : [{ path, names: new Set(names) }];\n}\n\n/**\n * The catalog plan of the project and what its manifests and import maps declare, from the files\n * of the listing. A file that cannot be read or parsed adds no catalogs, and is reported when it\n * is migrated; such a manifest or import map counts as declaring every package.\n */\nexport async function planProjectTarget(\n paths: readonly string[],\n dependencies: PlanDependencies,\n version: string,\n): Promise<ProjectTarget> {\n const documents: Record<\"manifest\" | \"catalogs\", TreeMap[]> = { manifest: [], catalogs: [] };\n const manifests: ManifestDeclarations[] = [];\n const aliases: SuccessorAliases[] = [];\n let isWorkspaceRoot = false;\n const importMaps = await namedImportMaps(paths, dependencies.files, dependencies.readers);\n for (const path of paths) {\n const source = planSourceOf(path, importMaps);\n if (source === undefined) {\n continue;\n }\n const { namesOriginal, roots } = await readForPlan(path, source, dependencies);\n isWorkspaceRoot ||= marksWorkspaceRoot(path, roots);\n if (namesOriginal && source.role !== \"import-map\") {\n documents[source.role].push(...(roots ?? []));\n }\n manifests.push(...declarationsOf(path, source.role, roots));\n aliases.push(...aliasesOf(path, roots));\n }\n const catalogs = planCatalogs({\n manifests: documents.manifest,\n catalogFiles: documents.catalogs,\n isWorkspaceRoot,\n });\n const declarations = withNamedImportMaps(manifests, importMaps);\n const parts = await apiDescriptionParts(paths, dependencies);\n return {\n ...{ version, catalogs, manifests: declarations, aliases, importMaps },\n apiDescriptionParts: parts,\n };\n}\n","import { MigrationBugError } from \"../domain/migration-bug.js\";\nimport type { Change, FileMigration, ManualStep } from \"../domain/migration-findings.js\";\nimport type { MigrationContext } from \"./config-steps.js\";\nimport { fileMigrationFor } from \"./file-migrations.js\";\nimport type {\n CallbackRewriter,\n DocumentReaders,\n FileProblem,\n Logger,\n ProjectFiles,\n SkippedFile,\n SourceStringScanner,\n} from \"./ports.js\";\nimport { type ProjectTarget, planProjectTarget } from \"./project-target.js\";\n\nexport interface MigrateProjectDependencies {\n readonly files: ProjectFiles;\n readonly rewriter: CallbackRewriter;\n readonly scanner: SourceStringScanner;\n readonly readers: DocumentReaders;\n readonly logger: Logger;\n}\n\nexport interface MigrateProjectInput {\n /** The openapi-typesafe version that renamed dependencies get. */\n readonly version: string;\n /** Write the changed files; without it the migration only reports (dry run). */\n readonly isWrite: boolean;\n}\n\n/**\n * What happened to the changed files. A write that fails stops the writing: the files written\n * before it are named, and so are the ones that were not written.\n */\nexport type WriteOutcome =\n | { readonly kind: \"dry-run\" }\n | { readonly kind: \"written\"; readonly paths: readonly string[] }\n | {\n readonly kind: \"failed\";\n readonly written: readonly string[];\n readonly failed: SkippedFile;\n readonly notWritten: readonly string[];\n };\n\n/** Why a file was left as it was: it was not read, or a bug of the tool would corrupt it. */\nexport type SkipReason = FileProblem | { readonly kind: \"migration-bug\"; readonly message: string };\n\n/** A listed file that the migration left as it was, and why. */\nexport interface SkippedPath {\n readonly path: string;\n readonly reason: SkipReason;\n}\n\n/**\n * What the migration found: the files with changes or manual steps, the paths that were not\n * read, and what was written.\n */\nexport interface ProjectMigration {\n readonly files: readonly FileReport[];\n readonly skipped: readonly SkippedPath[];\n readonly write: WriteOutcome;\n}\n\n/** What the migration found in one file. */\nexport interface FileReport {\n readonly path: string;\n readonly isChanged: boolean;\n readonly changes: readonly Change[];\n readonly manualSteps: readonly ManualStep[];\n}\n\n/** A file's report and the text to write; the text is undefined when nothing changed. */\ninterface PlannedFile {\n readonly report: FileReport;\n readonly text: string | undefined;\n}\n\ntype FilePlan =\n | { readonly kind: \"planned\"; readonly file: PlannedFile }\n | { readonly kind: \"skipped\"; readonly reason: SkipReason }\n | { readonly kind: \"not-migrated\" };\n\ntype MigrationAttempt =\n | { readonly kind: \"migrated\"; readonly migration: FileMigration }\n | { readonly kind: \"skipped\"; readonly reason: SkipReason };\n\n/** The migration of one file, or the bug that stopped it (see MigrationBugError). */\nfunction attemptMigration(migrate: () => FileMigration): MigrationAttempt {\n try {\n return { kind: \"migrated\", migration: migrate() };\n } catch (error) {\n if (error instanceof MigrationBugError) {\n return { kind: \"skipped\", reason: { kind: \"migration-bug\", message: error.message } };\n }\n throw error;\n }\n}\n\nasync function planFile(\n path: string,\n dependencies: MigrateProjectDependencies,\n target: ProjectTarget,\n): Promise<FilePlan> {\n const migrate = fileMigrationFor(path, target.importMaps);\n if (migrate === undefined) {\n return { kind: \"not-migrated\" };\n }\n const read = await dependencies.files.read(path);\n if (read.kind === \"skipped\") {\n return read;\n }\n const { rewriter, scanner, readers } = dependencies;\n const { version, catalogs, manifests, aliases, apiDescriptionParts } = target;\n const context: MigrationContext = {\n ...{ version, catalogs, manifests, aliases, apiDescriptionParts },\n ...{ rewriter, scanner, readers },\n };\n const attempt = attemptMigration(() => migrate(read.text, path, context));\n if (attempt.kind === \"skipped\") {\n return attempt;\n }\n const { migration } = attempt;\n const isChanged = migration.text !== read.text;\n const { changes, manualSteps } = migration;\n if (isChanged || manualSteps.length > 0) {\n dependencies.logger.info(\"file_migrated\", { path, isChanged, changes, manualSteps });\n }\n const report = { path, isChanged, changes, manualSteps };\n return { kind: \"planned\", file: { report, text: isChanged ? migration.text : undefined } };\n}\n\ninterface ProjectPlan {\n readonly files: readonly PlannedFile[];\n readonly skipped: readonly SkippedPath[];\n}\n\n/**\n * Every file is read and migrated before anything is written, so a file that cannot be read\n * leaves the project as it was instead of half migrated. Such a file is skipped and reported.\n */\nasync function planProject(\n paths: readonly string[],\n dependencies: MigrateProjectDependencies,\n version: string,\n): Promise<ProjectPlan> {\n const files: PlannedFile[] = [];\n const skipped: SkippedPath[] = [];\n const target = await planProjectTarget(paths, dependencies, version);\n for (const path of paths) {\n const plan = await planFile(path, dependencies, target);\n if (plan.kind === \"skipped\") {\n skipped.push({ path, reason: plan.reason });\n dependencies.logger.warn(\"file_skipped\", { path, reason: plan.reason });\n } else if (plan.kind === \"planned\") {\n const { report } = plan.file;\n const isReported = report.isChanged || report.manualSteps.length > 0;\n files.push(...(isReported ? [plan.file] : []));\n }\n }\n return { files, skipped };\n}\n\n/** Writes the changed files in path order and stops at the first one that fails. */\nasync function writeFiles(\n planned: readonly PlannedFile[],\n dependencies: MigrateProjectDependencies,\n): Promise<WriteOutcome> {\n const changed = planned.flatMap(({ report, text }) =>\n text === undefined ? [] : [{ path: report.path, text }],\n );\n const written: string[] = [];\n for (const [index, { path, text }] of changed.entries()) {\n const result = await dependencies.files.write(path, text);\n if (result.kind === \"failed\") {\n dependencies.logger.warn(\"file_write_failed\", { path, reason: result.reason, written });\n const notWritten = changed.slice(index + 1).map((file) => file.path);\n return { kind: \"failed\", written, failed: { path, reason: result.reason }, notWritten };\n }\n written.push(path);\n }\n return { kind: \"written\", paths: written };\n}\n\n/**\n * Migrate every file of a project (ENGINEERING_PLAN 10.1): package.json files, catalogs, module\n * specifiers and `transform` callbacks in sources, and the generator command in scripts. Reads\n * and migrates every file first, then writes the changed ones, only with `isWrite`. Gives the\n * files with changes or manual steps in path order, the skipped paths, and what was written.\n */\nexport async function migrateProject(\n dependencies: MigrateProjectDependencies,\n input: MigrateProjectInput,\n): Promise<ProjectMigration> {\n const listing = await dependencies.files.listFiles();\n const paths = [...listing.files].sort();\n dependencies.logger.info(\"migration_started\", { fileCount: paths.length, ...input });\n const plan = await planProject(paths, dependencies, input.version);\n const skipped = [...listing.skipped, ...plan.skipped];\n const write: WriteOutcome = input.isWrite\n ? await writeFiles(plan.files, dependencies)\n : { kind: \"dry-run\" };\n dependencies.logger.info(\"migration_finished\", {\n changedFiles: plan.files.length,\n skippedFiles: skipped.length,\n write: write.kind,\n });\n return { files: plan.files.map((file) => file.report), skipped, write };\n}\n","/**\n * Text from a document or a project (a path key, an `operationId`, a file name) reaches the\n * terminal and CI job logs. A line break in it starts a new line that CI reads as a command\n * (`::error …` in GitHub Actions, `##vso[…]` in Azure Pipelines), and an escape sequence moves\n * the cursor or erases lines, so it can forge or hide output. Each such character is shown as an\n * escape instead (`\\n`, `\\u001b`), so one message stays one line and shows what the text holds.\n */\n\n/**\n * The code points shown as escapes: C0 controls but the tab, DEL and C1 controls, the Unicode\n * line and paragraph separators, and the bidirectional controls, which reorder how a terminal\n * shows the text around them.\n */\nconst CONTROL_RANGES: readonly (readonly [number, number])[] = [\n [0x00, 0x08],\n [0x0a, 0x1f],\n [0x7f, 0x9f],\n [0x2028, 0x2029],\n [0x202a, 0x202e],\n [0x2066, 0x2069],\n];\n\nconst SHORT_ESCAPES: Readonly<Record<string, string>> = { \"\\n\": \"\\\\n\", \"\\r\": \"\\\\r\" };\nconst HEX_DIGITS = 4;\nconst HEX_RADIX = 16;\n\nfunction isControl(codePoint: number): boolean {\n return CONTROL_RANGES.some(([first, last]) => codePoint >= first && codePoint <= last);\n}\n\nfunction escapeOf(character: string, codePoint: number): string {\n const hex = codePoint.toString(HEX_RADIX).padStart(HEX_DIGITS, \"0\");\n return SHORT_ESCAPES[character] ?? `\\\\u${hex}`;\n}\n\n/** The text with every control character shown as an escape, so it prints as one plain line. */\nexport function terminalSafeText(text: string): string {\n let shown = \"\";\n for (const character of text) {\n const codePoint = character.codePointAt(0) ?? 0;\n shown += isControl(codePoint) ? escapeOf(character, codePoint) : character;\n }\n return shown;\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { ManualStep } from \"../domain/migration-findings.js\";\nimport { FLAG_RENAMES, PACKAGE_RENAMES } from \"../domain/package-names.js\";\n\n/** The user-facing text of the manual steps found in commands (CODING_PRINCIPLES 7.8). */\n\nconst PINNED_NOTE = \"change it to openapi-typesafe@<version>\";\nconst OLD_FILE_NOTE =\n \"is a file of openapi-typescript, which is no longer installed: run openapi-typesafe instead\";\nconst FLAGS_IN_VARIABLE_NOTE =\n \"holds old flags of the generator and may serve other commands, so it was kept: rename\";\nconst NOT_ONLY_GENERATOR_NOTE =\n \"may run openapi-typescript or another program (set elsewhere in the file, in another \" +\n \"step or outside it), so the flags after it were kept; where it runs the generator, rename\";\nconst OLD_NAME_IN_COMMAND_NOTE =\n \"names an old package where the tool cannot tell what runs it (a script name, an argument of \" +\n \"a program it does not know), so it was kept: migrate it by hand\";\nconst SCRIPT_NOT_SHELL_NOTE =\n \"so the tool does not read it as commands: migrate the old package names in it by hand\";\nconst COMMAND_STRING_NOTE = \"a string runs openapi-typescript, so it was kept; change it to\";\n\nfunction pinnedPackageMessage(step: Extract<ManualStep, { kind: \"pinned-package\" }>): string {\n const successor = PACKAGE_RENAMES.get(step.name) ?? step.name;\n return (\n `${step.location} names a pinned ${step.name}@<version>: ` +\n `change it to ${successor}@<version>`\n );\n}\n\n/** `-it to --immutable, …`: each old flag with its new name. */\nconst flagRenames = (flags: readonly string[]): string =>\n flags.map((flag) => `${flag} to ${FLAG_RENAMES.get(flag) ?? flag}`).join(\", \");\n\nfunction flagsInVariableMessage(step: Extract<ManualStep, { kind: \"flags-in-variable\" }>) {\n return `${step.location}: ${step.variable} ${FLAGS_IN_VARIABLE_NOTE} ${flagRenames(step.flags)}`;\n}\n\nfunction notOnlyGeneratorMessage(\n step: Extract<ManualStep, { kind: \"variable-not-only-generator\" }>,\n): string {\n return `${step.location}: ${step.variable} ${NOT_ONLY_GENERATOR_NOTE} ${flagRenames(step.flags)}`;\n}\n\n/** The manual steps found in commands: scripts, shell files, CI files and command strings. */\ntype CommandStep = Extract<\n ManualStep,\n {\n kind:\n | \"versioned-command\"\n | \"flags-in-variable\"\n | \"variable-not-only-generator\"\n | \"pinned-package\"\n | \"old-package-file\"\n | \"old-name-in-command\"\n | \"script-not-shell\"\n | \"command-string\";\n }\n>;\n\nconst COMMAND_STEP_KINDS: ReadonlySet<ManualStep[\"kind\"]> = new Set([\n \"versioned-command\",\n \"flags-in-variable\",\n \"variable-not-only-generator\",\n \"pinned-package\",\n \"old-package-file\",\n \"old-name-in-command\",\n \"script-not-shell\",\n \"command-string\",\n]);\n\nexport const isCommandStep = (step: ManualStep): step is CommandStep =>\n COMMAND_STEP_KINDS.has(step.kind);\n\nexport function commandStepMessage(step: CommandStep): string {\n switch (step.kind) {\n case \"versioned-command\":\n return `${step.location} runs a pinned openapi-typescript@<version>: ${PINNED_NOTE}`;\n case \"flags-in-variable\":\n return flagsInVariableMessage(step);\n case \"variable-not-only-generator\":\n return notOnlyGeneratorMessage(step);\n case \"pinned-package\":\n return pinnedPackageMessage(step);\n case \"old-package-file\":\n return `${step.location}: ${step.path} ${OLD_FILE_NOTE}`;\n case \"old-name-in-command\":\n return `${step.location}: \"${step.word}\" ${OLD_NAME_IN_COMMAND_NOTE}`;\n case \"script-not-shell\":\n return `${step.location}: the script runs with ${step.shell}, ${SCRIPT_NOT_SHELL_NOTE}`;\n case \"command-string\":\n return `line ${step.line}: ${COMMAND_STRING_NOTE} \"${step.to}\"`;\n default:\n return assertNever(step);\n }\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { ManualStep, TransformKeepReason } from \"../domain/migration-findings.js\";\n\n/** The user-facing text of the manual steps found in source files (CODING_PRINCIPLES 7.8). */\n\n// The same guide the generator links in its deprecation warning.\nconst IR_CALLBACKS_GUIDE =\n \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs/node.md#ir-callbacks\";\n\nconst KEEP_REASONS: Readonly<Record<TransformKeepReason, string>> = {\n \"other-callbacks\":\n \"postTransform or transformProperty are set too, and they need TypeScript nodes\",\n \"not-a-function\": \"it is not an inline function or a function of this file\",\n \"shared-function\": \"the function it names is used elsewhere too\",\n \"shared-options\": \"its options object is used elsewhere too\",\n \"unknown-return\": \"a return value is not a plain ts.factory type\",\n \"typed-options\":\n \"its options are declared with a type built from OpenAPITSOptions, which the tool cannot \" +\n \"change to OpenAPITSIrOptions\",\n \"spread-options\":\n \"its options take keys from another object (`...base`), whose callbacks and type the tool \" +\n \"cannot see\",\n \"declared-type\":\n \"its declared type (a `const` type, JSDoc `@type` or `@returns`) names a type the tool \" +\n \"cannot change to type text\",\n \"in-spread\":\n \"it is in an object that the options take keys from (`...base`), and the tool rewrites \" +\n \"only a transform written in the options\",\n};\nconst OPTIONS_NOTE =\n \"the options of openapiTS() are not an object written in this file: check them for \" +\n `transform, postTransform and transformProperty. See ${IR_CALLBACKS_GUIDE}`;\nconst SPREAD_NOTE =\n \"the options of openapiTS() take keys from an object the tool cannot read (`...base`): \" +\n `check it for transform, postTransform and transformProperty. See ${IR_CALLBACKS_GUIDE}`;\nconst DEEP_IMPORT_NOTE = \"imports a file inside the package; check that it exists\";\nconst OLD_FILE_NOTE = \"imports a file from node_modules of\";\nconst OLD_FILE_FIX_NOTE = \"which is no longer installed: import from\";\nconst DYNAMIC_NOTE =\n \"builds its module name at run time from an old package name, so it was kept; rename it to\";\nconst STRING_NOTE = \"is a string, not a module specifier, so it was kept\";\nconst STRING_FIX_NOTE = \"if it names the package, change it to\";\nconst KEPT_NOTE = `it works, with a deprecation warning. See ${IR_CALLBACKS_GUIDE}`;\nconst LEGACY_CALLBACK_NOTE = `receives TypeScript nodes (deprecated). See ${IR_CALLBACKS_GUIDE}`;\nconst HELPER_TYPES_ENTRY = \"openapi-typesafe-fetch/helpers\";\n\nfunction packageNotDeclaredMessage(\n step: Extract<ManualStep, { kind: \"package-not-declared\" }>,\n): string {\n const { line, name, installers } = step;\n return (\n `line ${line}: no package.json or Deno import map at or above this file lists ${name}; ` +\n `${installers.join(\" and \")} installed it, the openapi-typesafe packages do not: ` +\n `add it to the dependencies, or import the types from ${HELPER_TYPES_ENTRY}`\n );\n}\n\n/** Steps for a line of a source file. */\nexport type SourceStep = Extract<\n ManualStep,\n {\n kind:\n | \"options-not-inspected\"\n | \"options-spread-not-inspected\"\n | \"deep-import\"\n | \"old-package-import\"\n | \"dynamic-specifier\"\n | \"string-names-package\"\n | \"transform-not-rewritten\"\n | \"legacy-callback\"\n | \"package-not-declared\";\n }\n>;\n\nconst SOURCE_STEP_KINDS: ReadonlySet<ManualStep[\"kind\"]> = new Set([\n \"options-not-inspected\",\n \"options-spread-not-inspected\",\n \"deep-import\",\n \"old-package-import\",\n \"dynamic-specifier\",\n \"string-names-package\",\n \"transform-not-rewritten\",\n \"legacy-callback\",\n \"package-not-declared\",\n]);\n\nexport const isSourceStep = (step: ManualStep): step is SourceStep =>\n SOURCE_STEP_KINDS.has(step.kind);\n\nexport function sourceStepMessage(step: SourceStep): string {\n switch (step.kind) {\n case \"options-not-inspected\":\n return `line ${step.line}: ${OPTIONS_NOTE}`;\n case \"options-spread-not-inspected\":\n return `line ${step.line}: ${SPREAD_NOTE}`;\n case \"deep-import\":\n return `line ${step.line}: \"${step.specifier}\" ${DEEP_IMPORT_NOTE}`;\n case \"old-package-import\":\n return (\n `line ${step.line}: \"${step.specifier}\" ${OLD_FILE_NOTE} ${step.name}, ` +\n `${OLD_FILE_FIX_NOTE} ${step.to}`\n );\n case \"dynamic-specifier\":\n return `line ${step.line}: \\`${step.value}\\` ${DYNAMIC_NOTE} ${step.to}`;\n case \"string-names-package\":\n return `line ${step.line}: \"${step.value}\" ${STRING_NOTE}; ${STRING_FIX_NOTE} \"${step.to}\"`;\n case \"transform-not-rewritten\":\n return `line ${step.line}: transform kept (${KEEP_REASONS[step.reason]}); ${KEPT_NOTE}`;\n case \"legacy-callback\":\n return `line ${step.line}: ${step.callback} ${LEGACY_CALLBACK_NOTE}`;\n case \"package-not-declared\":\n return packageNotDeclaredMessage(step);\n default:\n return assertNever(step);\n }\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { ManualStep } from \"../domain/migration-findings.js\";\nimport { PACKAGE_RENAMES } from \"../domain/package-names.js\";\nimport { commandStepMessage, isCommandStep } from \"./command-step-messages.js\";\nimport { isSourceStep, sourceStepMessage } from \"./source-step-messages.js\";\n\n/** The user-facing text of the manual steps in the report (CODING_PRINCIPLES 7.8). */\n\nconst OPENAPI_FETCH_ALIAS_GUIDE =\n \"https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs/fetch/index.md\" +\n \"#libraries-built-on-openapi-fetch\";\n\nconst PEER_NOTE = \"users of this package must switch too (a breaking change for them)\";\nconst MANIFEST_NOT_READ_NOTE =\n \"is a JSON5 manifest, which the tool does not read: rename the packages and the generator \" +\n \"command by hand, or write it as package.json and run the tool again\";\nconst IMPORT_MAP_NOTE =\n \"is a URL or a file outside the project folder, so it was not migrated: rename the old \" +\n \"packages in it by hand\";\nconst PATCH_NOTE = \"check whether the fix is still needed, then make the patch again or delete it\";\nconst PATTERN_NOTE = \"is a pattern that names\";\nconst PATTERN_FIX_NOTE = \"where it means the package, make it match\";\nconst SETTING_NOTE = \"remove the setting if it no longer applies, or make it name\";\nconst LOCAL_PACKAGE_NOTE =\n \"points at a local package, not the npm package, so it and the imports of it were kept: if \" +\n \"that package is a copy of the original, move it to\";\nconst DEEP_TARGET_NOTE = \"points at a file inside the package; check that it exists\";\nconst OLD_PATH_NOTE =\n \"is a path into node_modules of an old package, which is no longer installed:\";\nconst OLD_PATH_FIX_NOTE = \"point it at the files of\";\n\nconst renamed = (name: string): string => PACKAGE_RENAMES.get(name) ?? name;\n\nconst localPackageMessage = (step: Extract<ManualStep, { kind: \"local-package\" }>): string =>\n `${step.field}: ${step.name} \"${step.spec}\" ${LOCAL_PACKAGE_NOTE} ${renamed(step.name)}`;\n\nfunction oldPeerMessage(step: Extract<ManualStep, { kind: \"old-peer-needed\" }>): string {\n const { dependent, peer, range } = step;\n const successor = PACKAGE_RENAMES.get(peer) ?? peer;\n return (\n `${dependent} takes its client type from ${peer}@${range}, its peer dependency: alias ` +\n `${peer} to ${successor} with overrides or resolutions, or passing it the ${successor} ` +\n `client fails to type-check. See ${OPENAPI_FETCH_ALIAS_GUIDE}`\n );\n}\n\n/** Steps for places of a structured file (JSON, YAML) that the tool could not edit. */\ntype UneditedStep = Extract<\n ManualStep,\n {\n kind:\n | \"config-unreadable\"\n | \"manifest-not-read\"\n | \"import-map-not-editable\"\n | \"old-package-patch\"\n | \"entry-not-edited\"\n | \"name-collision\";\n }\n>;\n\n/** Steps for catalog entries and the dependencies on them that keep the old names. */\ntype CatalogStep = Extract<\n ManualStep,\n {\n kind:\n | \"catalog-reference-kept\"\n | \"catalog-entry-outside\"\n | \"catalog-entry-missing\"\n | \"catalog-entry-in-use\";\n }\n>;\n\nfunction uneditedStepMessage(step: UneditedStep): string {\n switch (step.kind) {\n case \"config-unreadable\":\n return step.position === undefined\n ? \"nests too deep to be read; migrate it by hand\"\n : `cannot be parsed at line ${step.position.line}, column ${step.position.column}; ` +\n \"migrate it by hand\";\n case \"manifest-not-read\":\n return MANIFEST_NOT_READ_NOTE;\n case \"import-map-not-editable\":\n return `importMap \"${step.reference}\" ${IMPORT_MAP_NOTE}`;\n case \"old-package-patch\":\n return `patches the code of ${step.name}, which ${step.to} does not share: ${PATCH_NOTE}`;\n case \"entry-not-edited\":\n return `${step.field}: ${step.name} has a value the tool does not read; rename it by hand`;\n case \"name-collision\":\n return (\n `${step.field} has both ${step.from} and ${step.to}, so ${step.from} was kept: ` +\n \"remove one of them\"\n );\n default:\n return assertNever(step);\n }\n}\n\nfunction catalogStepMessage(step: CatalogStep): string {\n switch (step.kind) {\n case \"catalog-reference-kept\":\n return (\n `${step.field}: ${step.name} was kept, because catalog \"${step.catalog}\" keeps ` +\n `${step.name}: rename the entry and the dependency together`\n );\n case \"catalog-entry-outside\":\n return (\n `${step.field}: ${step.name} was kept, because no catalog of this project has its ` +\n `\"${step.catalog}\" entry; a catalog above the root (pnpm-workspace.yaml, .yarnrc.yml or ` +\n \"the workspace package.json) may hold it: rename the entry and the dependency together\"\n );\n case \"catalog-entry-missing\":\n return (\n `${step.field}: ${step.name} was kept, because no catalog of the workspace has its ` +\n `\"${step.catalog}\" entry: add the entry, or give the dependency a version`\n );\n case \"catalog-entry-in-use\":\n return (\n `${step.catalog}: ${step.name} was kept, because a dependency or an override still ` +\n \"names it: rename the entry and what names it together\"\n );\n default:\n return assertNever(step);\n }\n}\n\n/** Steps for the packages a manifest names. */\ntype PackageStep = Extract<\n ManualStep,\n {\n kind:\n | \"peer-dependency-renamed\"\n | \"spec-kept\"\n | \"local-package\"\n | \"override-names-package\"\n | \"setting-names-package\"\n | \"pattern-names-package\"\n | \"deep-target\"\n | \"old-package-path\"\n | \"old-peer-needed\";\n }\n>;\n\nfunction packageStepMessage(step: PackageStep): string {\n switch (step.kind) {\n case \"peer-dependency-renamed\":\n return `${step.name} is a peer dependency: ${PEER_NOTE}`;\n case \"spec-kept\":\n return `${step.name} kept the spec \"${step.spec}\": point it at an openapi-typesafe version`;\n case \"local-package\":\n return localPackageMessage(step);\n case \"override-names-package\":\n return `\"${step.field}\" names ${step.name}: update or remove that override`;\n case \"setting-names-package\":\n return `\"${step.field}\" names ${step.name}: ${SETTING_NOTE} ${renamed(step.name)}`;\n case \"pattern-names-package\":\n return (\n `${step.location}: \"${step.value}\" ${PATTERN_NOTE} ${step.name}: ` +\n `${PATTERN_FIX_NOTE} ${step.to}`\n );\n case \"deep-target\":\n return `${step.location}: \"${step.specifier}\" ${DEEP_TARGET_NOTE}`;\n case \"old-package-path\":\n return `${step.location}: \"${step.path}\" ${OLD_PATH_NOTE} ${OLD_PATH_FIX_NOTE} ${step.to}`;\n case \"old-peer-needed\":\n return oldPeerMessage(step);\n default:\n return assertNever(step);\n }\n}\n\nexport function manualStepMessage(step: ManualStep): string {\n if (isCommandStep(step)) {\n return commandStepMessage(step);\n }\n if (isSourceStep(step)) {\n return sourceStepMessage(step);\n }\n switch (step.kind) {\n case \"config-unreadable\":\n case \"manifest-not-read\":\n case \"import-map-not-editable\":\n case \"old-package-patch\":\n case \"entry-not-edited\":\n case \"name-collision\":\n return uneditedStepMessage(step);\n case \"catalog-reference-kept\":\n case \"catalog-entry-outside\":\n case \"catalog-entry-missing\":\n case \"catalog-entry-in-use\":\n return catalogStepMessage(step);\n case \"peer-dependency-renamed\":\n case \"spec-kept\":\n case \"local-package\":\n case \"override-names-package\":\n case \"setting-names-package\":\n case \"pattern-names-package\":\n case \"deep-target\":\n case \"old-package-path\":\n case \"old-peer-needed\":\n return packageStepMessage(step);\n default:\n return assertNever(step);\n }\n}\n","import { assertNever } from \"../domain/assert-never.js\";\nimport type { Change } from \"../domain/migration-findings.js\";\nimport type { SkipReason } from \"./migrate-project.js\";\nimport type { FileProblem } from \"./ports.js\";\n\n/**\n * The user-facing text of the report (CODING_PRINCIPLES 7.8: kept apart from the logic); the\n * manual steps have their own module, manual-step-messages.ts.\n */\n\nexport function changeMessage(change: Change): string {\n switch (change.kind) {\n case \"dependency-renamed\":\n return `${change.field}: ${change.from} → ${change.to}@${change.spec}`;\n case \"catalog-entry-renamed\":\n return `${change.catalog}: ${change.from} → ${change.to}@${change.spec}`;\n case \"import-renamed\":\n return `${change.field}: \"${change.from}\" → \"${change.to}\" (${change.target})`;\n case \"alias-renamed\":\n return `${change.field}: ${change.name} → ${change.spec}`;\n case \"command-renamed\":\n return `${change.location}: openapi-typescript → openapi-typesafe`;\n case \"flag-renamed\":\n case \"package-name-renamed\":\n return `${change.location}: ${change.from} → ${change.to}`;\n case \"specifier-renamed\":\n return `line ${change.line}: \"${change.from}\" → \"${change.to}\"`;\n case \"transform-rewritten\":\n return `line ${change.line}: transform returns type text; irCallbacks: true added`;\n case \"declaration-removed\":\n return `line ${change.line}: ${change.name} removed; only the old transform returns used it`;\n default:\n return assertNever(change);\n }\n}\n\nexport const SKIPPED_HEADING = \"Skipped (not migrated, not written):\";\n\n/** Why a file was left as it was, after its path in the \"Skipped\" section. */\nexport function skippedMessage(reason: SkipReason): string {\n switch (reason.kind) {\n case \"outside-root\":\n return \"it leads outside the project folder (a link, or a path in the git index)\";\n case \"not-utf-8\":\n return \"it is not UTF-8 text, so it was not changed; check it by hand\";\n case \"io-error\":\n return `it could not be read (${reason.code})`;\n case \"migration-bug\":\n return (\n `the tool could not migrate it (${reason.message}), a bug of the tool: it was not ` +\n \"changed, so migrate it by hand, and please report the bug\"\n );\n default:\n return assertNever(reason);\n }\n}\n\nfunction writeProblemMessage(reason: FileProblem): string {\n switch (reason.kind) {\n case \"outside-root\":\n return \"it leads outside the project folder\";\n case \"not-utf-8\":\n return \"its text is not UTF-8\";\n case \"io-error\":\n return reason.code;\n default:\n return assertNever(reason);\n }\n}\n\n/** The first line of the report's end when a write failed and the writing stopped. */\nexport const writeFailedMessage = (path: string, reason: FileProblem): string =>\n `Writing stopped: ${path} could not be written (${writeProblemMessage(reason)}).`;\nexport const WRITTEN_HEADING = \"Written before it:\";\nexport const NOT_WRITTEN_HEADING = \"Not written (still as they were):\";\nexport const NONE_WRITTEN = \"Nothing was written before it.\";\n\nexport const NEXT_STEPS: readonly string[] = [\n \"Install: run your package manager's install, so the lockfile has the new packages.\",\n \"Regenerate your types and commit them once: the file header names openapi-typesafe now, \" +\n \"so `--check` fails until you do.\",\n \"Run your type check and tests.\",\n];\n\nexport const DRY_RUN_NOTE = \"Dry run: nothing was written. Run again with --write to apply.\";\nexport const WRITTEN_NOTE = \"Files were written.\";\nexport const NOTHING_FOUND =\n \"Nothing to migrate: no openapi-typescript, openapi-fetch, openapi-react-query \" +\n \"or openapi-typescript-helpers found.\";\n","import { assertNever } from \"../domain/assert-never.js\";\nimport { terminalSafeText } from \"../domain/terminal-text.js\";\nimport { manualStepMessage } from \"./manual-step-messages.js\";\nimport {\n changeMessage,\n DRY_RUN_NOTE,\n NEXT_STEPS,\n NONE_WRITTEN,\n NOT_WRITTEN_HEADING,\n NOTHING_FOUND,\n SKIPPED_HEADING,\n skippedMessage,\n WRITTEN_HEADING,\n WRITTEN_NOTE,\n writeFailedMessage,\n} from \"./messages.js\";\nimport type { FileReport, ProjectMigration, SkippedPath, WriteOutcome } from \"./migrate-project.js\";\n\nfunction changesSection(reports: readonly FileReport[]): string[] {\n const changed = reports.filter((report) => report.changes.length > 0);\n if (changed.length === 0) {\n return [];\n }\n return [\n \"Changes:\",\n ...changed.flatMap((report) => [\n ` ${report.path}`,\n ...report.changes.map((change) => ` ${changeMessage(change)}`),\n ]),\n \"\",\n ];\n}\n\nfunction manualStepsSection(reports: readonly FileReport[]): string[] {\n const steps = reports.flatMap((report) =>\n report.manualSteps.map((step) => ` ${report.path}: ${manualStepMessage(step)}`),\n );\n return steps.length === 0 ? [] : [\"Manual steps:\", ...steps, \"\"];\n}\n\nfunction skippedSection(skipped: readonly SkippedPath[]): string[] {\n if (skipped.length === 0) {\n return [];\n }\n const lines = skipped.map((file) => ` ${file.path}: ${skippedMessage(file.reason)}`);\n return [SKIPPED_HEADING, ...lines, \"\"];\n}\n\nconst listed = (paths: readonly string[]): string[] => paths.map((path) => ` ${path}`);\n\n/** The end of the report: what was written, or where the writing stopped. */\nfunction writeSection(write: WriteOutcome): string[] {\n switch (write.kind) {\n case \"dry-run\":\n return [DRY_RUN_NOTE];\n case \"written\":\n return [WRITTEN_NOTE];\n case \"failed\":\n return [\n writeFailedMessage(write.failed.path, write.failed.reason),\n ...(write.written.length === 0 ? [NONE_WRITTEN] : [WRITTEN_HEADING]),\n ...listed(write.written),\n ...(write.notWritten.length === 0 ? [] : [NOT_WRITTEN_HEADING]),\n ...listed(write.notWritten),\n ];\n default:\n return assertNever(write);\n }\n}\n\n/**\n * The report's lines as printed. A line quotes file names and text of the project, so each one is\n * shown as one plain line: a line break or an escape sequence in a file name must not forge a CI\n * command or erase the lines before it (terminal-text.ts).\n */\nfunction printed(lines: readonly string[]): string {\n return `${lines.map(terminalSafeText).join(\"\\n\")}\\n`;\n}\n\n/**\n * The summary the command prints: changes per file, manual steps, skipped paths, what to do\n * next, and what was written.\n */\nexport function renderReport(migration: ProjectMigration): string {\n const reports = migration.files;\n const skipped = skippedSection(migration.skipped);\n if (reports.length === 0) {\n return printed([...skipped, NOTHING_FOUND]);\n }\n const lines = [\n ...changesSection(reports),\n ...manualStepsSection(reports),\n ...skipped,\n \"Next steps:\",\n ...NEXT_STEPS.map((step, index) => ` ${index + 1}. ${step}`),\n \"\",\n ...writeSection(migration.write),\n ];\n return printed(lines);\n}\n","import { parseArgs } from \"node:util\";\n\n/** What the command was asked to do. */\nexport type CliRequest =\n | { readonly kind: \"help\" }\n | { readonly kind: \"version\" }\n | {\n readonly kind: \"migrate\";\n readonly isWrite: boolean;\n readonly root: string | undefined;\n readonly logPath: string | undefined;\n };\n\nconst OPTIONS = {\n write: { type: \"boolean\" },\n root: { type: \"string\" },\n log: { type: \"string\" },\n help: { type: \"boolean\", short: \"h\" },\n version: { type: \"boolean\", short: \"v\" },\n} as const;\n\n/** Parse the arguments; unknown options and positionals throw a TypeError with Node's message. */\nexport function parseCliArguments(argv: readonly string[]): CliRequest {\n const { values } = parseArgs({ args: [...argv], options: OPTIONS, strict: true });\n if (values.help === true) {\n return { kind: \"help\" };\n }\n if (values.version === true) {\n return { kind: \"version\" };\n }\n return {\n kind: \"migrate\",\n isWrite: values.write === true,\n root: values.root,\n logPath: values.log,\n };\n}\n","import type { ProjectRootState } from \"../application/ports.js\";\n\n/** The command's own text: help, usage errors and the closing notes. */\n\nexport const HELP_TEXT = `Usage\n openapi-typesafe-migrate [options]\n\nMove a project from openapi-typescript, openapi-fetch, openapi-react-query and\nopenapi-typescript-helpers to the openapi-typesafe packages. Without --write it only reports.\n\nOptions\n --write Write the changes (default: dry run)\n --root <dir> The project directory (default: the current directory)\n --log <file> The JSON Lines log file (default: a new file in the temporary directory)\n --help, -h Show this help\n --version, -v Show the version\n\nExit codes\n 0 Done\n 1 The migration failed (the message and the log say why), a file could not be written\n (the report names what was written), or the log could not be created\n 2 Unknown option or argument\n`;\n\nexport const usageError = (message: string): string =>\n `${message}\\nRun openapi-typesafe-migrate --help for the options.\\n`;\n\nexport const logNote = (path: string): string => `Log: ${path}\\n`;\n\nconst ROOT_PROBLEMS: Readonly<Record<Exclude<ProjectRootState, \"directory\">, string>> = {\n missing: \"does not exist\",\n \"not-a-directory\": \"is not a folder; --root takes the project folder\",\n};\n\n/** The project folder, as resolved from `--root` or the current directory, cannot be listed. */\nexport const rootError = (root: string, state: Exclude<ProjectRootState, \"directory\">): string =>\n `The project folder ${root} ${ROOT_PROBLEMS[state]}\\n`;\n\n/** `path` is the `--log` value as given; without one the log goes to the temporary directory. */\nexport const logError = (path: string | undefined, message: string): string =>\n `Cannot create the log ${path ?? \"in the temporary directory\"}: ${message}\\n`;\n","import { migrateProject } from \"../application/migrate-project.js\";\nimport type {\n CallbackRewriter,\n DocumentReaders,\n Logger,\n ProjectFiles,\n ProjectRootState,\n SourceStringScanner,\n} from \"../application/ports.js\";\nimport { renderReport } from \"../application/report.js\";\nimport { terminalSafeText } from \"../domain/terminal-text.js\";\nimport { type CliRequest, parseCliArguments } from \"./cli-arguments.js\";\nimport { HELP_TEXT, logError, logNote, rootError, usageError } from \"./cli-text.js\";\n\n/** Everything the command takes from the process, so tests run it with fakes. */\nexport interface CliDependencies {\n readonly version: string;\n readonly cwd: string;\n readonly writeStdout: (text: string) => void;\n readonly writeStderr: (text: string) => void;\n readonly inspectRoot: (root: string) => Promise<ProjectRootState>;\n readonly createFiles: (root: string, logger: Logger) => ProjectFiles;\n readonly createLogger: (path: string | undefined) => {\n readonly logger: Logger;\n readonly path: string;\n };\n readonly rewriter: CallbackRewriter;\n readonly scanner: SourceStringScanner;\n readonly readers: DocumentReaders;\n readonly resolvePath: (cwd: string, path: string) => string;\n}\n\nexport const EXIT_CODES = { success: 0, failure: 1, usage: 2 } as const;\n\nfunction parseRequest(\n argv: readonly string[],\n dependencies: CliDependencies,\n): CliRequest | undefined {\n try {\n return parseCliArguments(argv);\n } catch (error) {\n // parseArgs reports unknown options and stray positionals as a TypeError.\n if (error instanceof TypeError) {\n dependencies.writeStderr(usageError(error.message));\n return undefined;\n }\n throw error;\n }\n}\n\ntype MigrateRequest = Extract<CliRequest, { kind: \"migrate\" }>;\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\n/**\n * The log is created before any file is read, so a log that cannot be written (a parent that is\n * a file, a read-only folder) stops the run before it changes anything.\n */\nfunction openLog(\n request: MigrateRequest,\n dependencies: CliDependencies,\n): ReturnType<CliDependencies[\"createLogger\"]> | undefined {\n try {\n return dependencies.createLogger(request.logPath);\n } catch (error) {\n dependencies.writeStderr(logError(request.logPath, errorMessage(error)));\n return undefined;\n }\n}\n\n/** Migrate the project in `root`; resolves to the exit code. */\nasync function migrateRoot(\n request: MigrateRequest,\n root: string,\n logger: Logger,\n dependencies: CliDependencies,\n): Promise<number> {\n const rootState = await dependencies.inspectRoot(root);\n if (rootState !== \"directory\") {\n logger.warn(\"root_unusable\", { root, rootState });\n dependencies.writeStderr(rootError(root, rootState));\n return EXIT_CODES.failure;\n }\n const files = dependencies.createFiles(root, logger);\n const { rewriter, scanner, readers } = dependencies;\n const input = { version: dependencies.version, isWrite: request.isWrite };\n const migration = await migrateProject({ files, rewriter, scanner, readers, logger }, input);\n dependencies.writeStdout(renderReport(migration));\n // A file that a bug of the tool left as it was is not migrated: the run did not finish its job.\n const hasBug = migration.skipped.some((file) => file.reason.kind === \"migration-bug\");\n return migration.write.kind === \"failed\" || hasBug ? EXIT_CODES.failure : EXIT_CODES.success;\n}\n\nasync function runMigration(\n request: MigrateRequest,\n dependencies: CliDependencies,\n): Promise<number> {\n const log = openLog(request, dependencies);\n if (log === undefined) {\n return EXIT_CODES.failure;\n }\n const { logger, path } = log;\n const root = dependencies.resolvePath(dependencies.cwd, request.root ?? \".\");\n try {\n return await migrateRoot(request, root, logger, dependencies);\n } catch (error) {\n const message = errorMessage(error);\n logger.warn(\"migration_failed\", { root, message });\n // The message of a failed read or parse quotes a file name or text of the project.\n dependencies.writeStderr(`${terminalSafeText(message)}\\n`);\n return EXIT_CODES.failure;\n } finally {\n dependencies.writeStdout(logNote(path));\n }\n}\n\n/** Run the command; resolves to the exit code. */\nexport async function runCli(\n argv: readonly string[],\n dependencies: CliDependencies,\n): Promise<number> {\n const request = parseRequest(argv, dependencies);\n if (request === undefined) {\n return EXIT_CODES.usage;\n }\n if (request.kind === \"help\") {\n dependencies.writeStdout(HELP_TEXT);\n return EXIT_CODES.success;\n }\n if (request.kind === \"version\") {\n dependencies.writeStdout(`${dependencies.version}\\n`);\n return EXIT_CODES.success;\n }\n return runMigration(request, dependencies);\n}\n","import { readFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { createGitFileList } from \"../adapters/git-file-list/git-file-list.js\";\nimport { createNodeGitFileSystem } from \"../adapters/git-file-list/git-locations.js\";\nimport {\n createJsonLinesLogger,\n createTemporaryLogPath,\n} from \"../adapters/json-lines-logger/json-lines-logger.js\";\nimport { createJsonTextReader } from \"../adapters/json-text/json-text.js\";\nimport {\n createNodeProjectFiles,\n inspectProjectRoot,\n} from \"../adapters/node-project-files/node-project-files.js\";\nimport { createPipeSafeWriter } from \"../adapters/pipe-safe-writer/pipe-safe-writer.js\";\nimport { createTypescriptCallbackRewriter } from \"../adapters/typescript-parser/rewriter.js\";\nimport { createTypescriptStringScanner } from \"../adapters/typescript-parser/source-strings.js\";\nimport { createYamlTextReader } from \"../adapters/yaml-text/yaml-text.js\";\nimport { type CliDependencies, runCli } from \"./run-cli.js\";\n\n/**\n * The composition root: the only module that touches the process. `bin/migrate.js` imports the\n * built copy of this module.\n */\n\n/** The same path from `src/cli/` and from the built `dist/cli/`. */\nconst PACKAGE_JSON = new URL(\"../../package.json\", import.meta.url);\n\nfunction readVersion(): string {\n const packageJson: { version: string } = JSON.parse(readFileSync(PACKAGE_JSON, \"utf8\"));\n return packageJson.version;\n}\n\nconst now = (): Date => new Date();\n\n/**\n * Without `--log`, a new file per run in a new private folder in the temporary directory, named\n * by its UTC start time. A `--log` file is the user's choice and gets the lines appended.\n */\nfunction createLogger(path: string | undefined): ReturnType<CliDependencies[\"createLogger\"]> {\n const isExclusive = path === undefined;\n const logPath = isExclusive ? createTemporaryLogPath(tmpdir(), now()) : resolve(path);\n return { logger: createJsonLinesLogger({ path: logPath, now, isExclusive }), path: logPath };\n}\n\n/** Git for the project at `root`: git is looked up on PATH outside that folder. */\nconst createGit = (root: string) =>\n createGitFileList({\n environment: process.env,\n platform: process.platform,\n fileSystem: createNodeGitFileSystem(),\n projectRoot: root,\n });\n\nconst dependencies: CliDependencies = {\n version: readVersion(),\n cwd: process.cwd(),\n writeStdout: createPipeSafeWriter(process.stdout),\n writeStderr: createPipeSafeWriter(process.stderr),\n inspectRoot: inspectProjectRoot,\n createFiles: (root, logger) => createNodeProjectFiles(root, { git: createGit(root), logger }),\n createLogger,\n rewriter: createTypescriptCallbackRewriter(),\n scanner: createTypescriptStringScanner(),\n readers: { json: createJsonTextReader(), yaml: createYamlTextReader() },\n resolvePath: resolve,\n};\n\nrunCli(process.argv.slice(2), dependencies).then((exitCode) => {\n process.exitCode = exitCode;\n});\n"],"names":["PARENT_FOLDER","listedPaths","spanOf","convert","read","baseName","files","TYPESCRIPT_MODULES","joined","DEFAULT_EXPORT","referencedName","renamed","importEdits","extensionOf","plain","singleQuoted","doubleQuoted","isScalar","isMap","PATH_SEPARATOR","BACKSLASH","ASSIGNMENT_RE","QUOTES","isOption","RECIPE_PREFIX_RE","PATH_SEPARATOR_RE","WINDOWS_EXECUTABLE_RE","OPTION_START","DOUBLE_QUOTE","LINE_BREAK","SHELLS","OPTION_PREFIX","programName","programDefinitions","found","NOT_LINE_BREAK_RE","ASSIGNMENT","SCOPE_PREFIX","IMPORTS_FIELD","FIELD_SEPARATOR","COMMENT_START","MASK","assignmentsOf","shellText","variableValues","migrateCatalogs","OLD_FILE_NOTE"],"mappings":"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"}
|