@askrjs/cli 0.0.2 → 0.0.3

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.
Files changed (96) hide show
  1. package/README.md +9 -7
  2. package/dist/add.js +554 -1
  3. package/dist/add.js.map +1 -0
  4. package/dist/cli.js +43 -14
  5. package/dist/cli.js.map +1 -1
  6. package/dist/discovery-Difb7Y4G.js +325 -0
  7. package/dist/discovery-Difb7Y4G.js.map +1 -0
  8. package/dist/generate.js +396 -0
  9. package/dist/generate.js.map +1 -0
  10. package/dist/openapi.js +5 -4
  11. package/dist/openapi.js.map +1 -1
  12. package/dist/planner-VAj7qlxr.js +287 -0
  13. package/dist/planner-VAj7qlxr.js.map +1 -0
  14. package/dist/range-YUs9eimn.js +127 -0
  15. package/dist/range-YUs9eimn.js.map +1 -0
  16. package/dist/registry-CyrRHRG5.js +211 -0
  17. package/dist/registry-CyrRHRG5.js.map +1 -0
  18. package/dist/skills/askr-dashboard-charts/SKILL.md +61 -44
  19. package/dist/skills/askr-dashboard-charts/agents/openai.yaml +2 -2
  20. package/dist/specification-DXnDOC-0.js +51 -0
  21. package/dist/specification-DXnDOC-0.js.map +1 -0
  22. package/dist/templates/full-stack/AGENTS.md +0 -1
  23. package/dist/templates/full-stack/README.md +0 -1
  24. package/dist/templates/full-stack/index.html +0 -1
  25. package/dist/templates/full-stack/package.json +4 -2
  26. package/dist/templates/full-stack/server.ts +5 -9
  27. package/dist/templates/full-stack/src/action-authorizations.ts +2 -2
  28. package/dist/templates/full-stack/src/actions/create-message.ts +5 -5
  29. package/dist/templates/full-stack/src/i18n.ts +4 -4
  30. package/dist/templates/full-stack/src/main.tsx +4 -5
  31. package/dist/templates/full-stack/src/pages/home.tsx +5 -5
  32. package/dist/templates/full-stack/src/pages/layout.tsx +15 -5
  33. package/dist/templates/full-stack/src/pages/not-found.tsx +5 -2
  34. package/dist/templates/full-stack/src/routes.tsx +11 -12
  35. package/dist/templates/full-stack/src/schemas.ts +1 -2
  36. package/dist/templates/full-stack/src/server/action-registry.ts +6 -10
  37. package/dist/templates/full-stack/src/server/actions/create-message.ts +4 -4
  38. package/dist/templates/full-stack/src/server/app.ts +67 -57
  39. package/dist/templates/full-stack/src/server/dependencies.ts +10 -10
  40. package/dist/templates/full-stack/src/server/entry-server.ts +3 -3
  41. package/dist/templates/full-stack/src/telemetry.ts +1 -2
  42. package/dist/templates/full-stack/src/vite-server.d.ts +2 -3
  43. package/dist/templates/full-stack/tests/actions/create-message.test.ts +7 -8
  44. package/dist/templates/full-stack/tsconfig.json +0 -1
  45. package/dist/templates/full-stack/vite.config.ts +5 -6
  46. package/dist/templates/spa/AGENTS.md +1 -1
  47. package/dist/templates/spa/package.json +1 -1
  48. package/dist/templates/spa/src/adapters/operations-client.ts +7 -2
  49. package/dist/templates/spa/src/pages/app/admin-home.tsx +21 -3
  50. package/dist/templates/spa/src/styles.css +1 -1
  51. package/dist/templates/ssg/tests/ssg-config.test.ts +3 -3
  52. package/dist/templates/ssr/server.ts +4 -10
  53. package/dist/templates/ssr/src/entry-server.tsx +6 -4
  54. package/dist/update.js +284 -2
  55. package/dist/update.js.map +1 -0
  56. package/dist/writer-D8qe_7ud.js +228 -0
  57. package/dist/writer-D8qe_7ud.js.map +1 -0
  58. package/package.json +11 -15
  59. package/skills/askr-dashboard-charts/SKILL.md +61 -44
  60. package/skills/askr-dashboard-charts/agents/openai.yaml +2 -2
  61. package/templates/full-stack/AGENTS.md +0 -1
  62. package/templates/full-stack/README.md +0 -1
  63. package/templates/full-stack/index.html +0 -1
  64. package/templates/full-stack/package.json +4 -2
  65. package/templates/full-stack/server.ts +5 -9
  66. package/templates/full-stack/src/action-authorizations.ts +2 -2
  67. package/templates/full-stack/src/actions/create-message.ts +5 -5
  68. package/templates/full-stack/src/i18n.ts +4 -4
  69. package/templates/full-stack/src/main.tsx +4 -5
  70. package/templates/full-stack/src/pages/home.tsx +5 -5
  71. package/templates/full-stack/src/pages/layout.tsx +15 -5
  72. package/templates/full-stack/src/pages/not-found.tsx +5 -2
  73. package/templates/full-stack/src/routes.tsx +11 -12
  74. package/templates/full-stack/src/schemas.ts +1 -2
  75. package/templates/full-stack/src/server/action-registry.ts +6 -10
  76. package/templates/full-stack/src/server/actions/create-message.ts +4 -4
  77. package/templates/full-stack/src/server/app.ts +67 -57
  78. package/templates/full-stack/src/server/dependencies.ts +10 -10
  79. package/templates/full-stack/src/server/entry-server.ts +3 -3
  80. package/templates/full-stack/src/telemetry.ts +1 -2
  81. package/templates/full-stack/src/vite-server.d.ts +2 -3
  82. package/templates/full-stack/tests/actions/create-message.test.ts +7 -8
  83. package/templates/full-stack/tsconfig.json +0 -1
  84. package/templates/full-stack/vite.config.ts +5 -6
  85. package/templates/spa/AGENTS.md +1 -1
  86. package/templates/spa/package.json +1 -1
  87. package/templates/spa/src/adapters/operations-client.ts +7 -2
  88. package/templates/spa/src/pages/app/admin-home.tsx +21 -3
  89. package/templates/spa/src/styles.css +1 -1
  90. package/templates/ssg/tests/ssg-config.test.ts +3 -3
  91. package/templates/ssr/server.ts +4 -10
  92. package/templates/ssr/src/entry-server.tsx +6 -4
  93. package/dist/add-DqhqRzBQ.js +0 -555
  94. package/dist/add-DqhqRzBQ.js.map +0 -1
  95. package/dist/update-DyW1na5V.js +0 -1140
  96. package/dist/update-DyW1na5V.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-DyW1na5V.js","names":[],"sources":["../src/update/range.ts","../src/update/npm-adapters.ts","../src/update/types.ts","../src/update/discovery.ts","../src/update/planner.ts","../src/update/registry.ts","../src/update/writer.ts","../src/bin/update.ts"],"sourcesContent":["import semver from \"semver\";\n\nexport type AtomicRangeShape =\n | { kind: \"exact\" }\n | { kind: \"operator\"; operator: \"^\" | \"~\" }\n | {\n kind: \"x\";\n parts: string[];\n wildcard: \"x\" | \"X\" | \"*\" | null;\n }\n | { kind: \"bounded\"; lower: string };\n\nexport type RangeShape =\n | AtomicRangeShape\n | { kind: \"union\"; clauses: AtomicRangeShape[]; sourceClauses: string[]; highestIndex: number };\n\nexport interface RangeAnalysis {\n shape: RangeShape | null;\n tracking: boolean;\n reason: string;\n}\n\nconst FULL_VERSION = String.raw`\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?`;\nconst PARTIAL_VERSION = String.raw`\\d+(?:\\.\\d+){0,2}`;\n\nfunction analyzeAtomicRange(specification: string): RangeAnalysis {\n const value = specification.trim();\n\n if (/^(?:\\*|x|X)$/.test(value)) {\n return { shape: null, tracking: true, reason: \"wildcard range tracks the selected tag\" };\n }\n\n if (new RegExp(`^${FULL_VERSION}$`).test(value) && semver.valid(value)) {\n return { shape: { kind: \"exact\" }, tracking: false, reason: \"\" };\n }\n\n const operator = value.match(new RegExp(`^([~^])\\\\s*(${FULL_VERSION}|${PARTIAL_VERSION})$`));\n if (operator && semver.validRange(value)) {\n return {\n shape: { kind: \"operator\", operator: operator[1] as \"^\" | \"~\" },\n tracking: false,\n reason: \"\",\n };\n }\n\n const bounded = value.match(/^((?:>=|>)\\s*\\d+(?:\\.\\d+){0,2})\\s+(?:<|<=)\\s*\\d+(?:\\.\\d+){0,2}$/);\n if (bounded && semver.validRange(value)) {\n return {\n shape: { kind: \"bounded\", lower: bounded[1].replace(/\\s+/g, \"\") },\n tracking: false,\n reason: \"\",\n };\n }\n\n const xRange = value.match(/^(\\d+|[xX*])(?:\\.(\\d+|[xX*]))?(?:\\.(\\d+|[xX*]))?$/);\n if (xRange && semver.validRange(value)) {\n const parts = xRange.slice(1).filter((part): part is string => part !== undefined);\n const explicitWildcard = parts.find((part) => /^[xX*]$/.test(part));\n return {\n shape: {\n kind: \"x\",\n parts,\n wildcard: (explicitWildcard as \"x\" | \"X\" | \"*\" | undefined) ?? null,\n },\n tracking: false,\n reason: \"\",\n };\n }\n\n return {\n shape: null,\n tracking: false,\n reason: \"unsupported complex semver range\",\n };\n}\n\nexport function analyzeRange(specification: string): RangeAnalysis {\n const clauses = specification.split(\"||\").map((clause) => clause.trim());\n if (clauses.length === 1) return analyzeAtomicRange(specification);\n\n if (clauses.some((clause) => clause.length === 0)) {\n return { shape: null, tracking: false, reason: \"unsupported complex semver range\" };\n }\n\n const analyzed = clauses.map(analyzeAtomicRange);\n if (analyzed.some((entry) => !entry.shape || entry.shape.kind === \"union\" || entry.tracking)) {\n return { shape: null, tracking: false, reason: \"unsupported complex semver union\" };\n }\n\n const minimums = clauses.map((clause) => semver.minVersion(clause));\n if (minimums.some((version) => version === null)) {\n return { shape: null, tracking: false, reason: \"unsupported complex semver union\" };\n }\n\n let highestIndex = 0;\n for (let index = 1; index < minimums.length; index += 1) {\n if (semver.gt(minimums[index]!, minimums[highestIndex]!)) highestIndex = index;\n }\n\n return {\n shape: {\n kind: \"union\",\n clauses: analyzed.map((entry) => entry.shape as AtomicRangeShape),\n sourceClauses: clauses,\n highestIndex,\n },\n tracking: false,\n reason: \"\",\n };\n}\n\nexport function isBreakingChange(allowedVersion: string, targetVersion: string): boolean {\n const allowed = new semver.SemVer(allowedVersion);\n const target = new semver.SemVer(targetVersion);\n if (allowed.major !== target.major) return true;\n return allowed.major === 0 && allowed.minor !== target.minor;\n}\n\nexport function nextBreakingBoundary(version: string): string {\n const parsed = new semver.SemVer(version);\n return parsed.major === 0 ? `0.${parsed.minor + 1}.0` : `${parsed.major + 1}.0.0`;\n}\n\nfunction rewriteXRange(shape: Extract<AtomicRangeShape, { kind: \"x\" }>, target: string): string {\n const parsed = new semver.SemVer(target);\n const count = shape.parts.length;\n\n if (shape.wildcard) {\n const wildcardIndex = shape.parts.findIndex((part) => /^[xX*]$/.test(part));\n if (wildcardIndex === 0) return shape.wildcard;\n if (wildcardIndex === 1) return `${parsed.major}.${shape.wildcard}`;\n return `${parsed.major}.${parsed.minor}.${shape.wildcard}`;\n }\n\n if (count === 1) return String(parsed.major);\n return `${parsed.major}.${parsed.minor}`;\n}\n\nfunction rewriteAtomic(shape: AtomicRangeShape, target: string, forcedBreaking: boolean): string {\n if (shape.kind === \"exact\") return target;\n if (shape.kind === \"operator\") return `${shape.operator}${target}`;\n if (shape.kind === \"x\") return rewriteXRange(shape, target);\n\n const boundary = nextBreakingBoundary(target);\n return forcedBreaking ? `>=${target} <${boundary}` : `${shape.lower} <${boundary}`;\n}\n\nexport function rewriteRange(shape: RangeShape, target: string, forcedBreaking: boolean): string {\n if (shape.kind !== \"union\") return rewriteAtomic(shape, target, forcedBreaking);\n\n const highestShape = shape.clauses[shape.highestIndex];\n if (forcedBreaking) return rewriteAtomic(highestShape, target, true);\n\n const rewritten = [...shape.sourceClauses];\n rewritten[shape.highestIndex] = rewriteAtomic(highestShape, target, false);\n return rewritten.join(\" || \");\n}\n","import { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\n\ninterface NpmPackageSpec {\n escapedName: string;\n name?: string;\n rawSpec: string;\n type: string;\n}\n\ninterface NpmPackageArg {\n (specification: string): NpmPackageSpec;\n resolve(name: string, specification: string, where?: string): NpmPackageSpec;\n}\n\ninterface MapWorkspaces {\n (options: {\n cwd: string;\n pkg: { workspaces: string[] };\n ignore?: string[];\n }): Promise<Map<string, string>>;\n}\n\nexport interface NpmFetchOptions extends Record<string, unknown> {\n headers?: Record<string, string>;\n spec?: NpmPackageSpec;\n}\n\ninterface NpmRegistryFetch {\n json(uri: string, options: NpmFetchOptions): Promise<unknown>;\n}\n\nexport const npmPackageArg = require(\"npm-package-arg\") as NpmPackageArg;\nexport const mapDeclaredWorkspaces = require(\"@npmcli/map-workspaces\") as MapWorkspaces;\nexport const npmRegistryFetch = require(\"npm-registry-fetch\") as NpmRegistryFetch;\n\ninterface NpmConfigInstance {\n flat: NpmFetchOptions;\n load(): Promise<void>;\n validate(): boolean;\n}\n\ninterface NpmConfigConstructor {\n new (options: {\n argv: string[];\n cwd: string;\n definitions: Record<string, unknown>;\n env: NodeJS.ProcessEnv;\n flatten(source: Record<string, unknown>, destination: Record<string, unknown>): unknown;\n npmPath: string;\n shorthands: Record<string, string[]>;\n }): NpmConfigInstance;\n}\n\nexport const NpmConfig = require(\"@npmcli/config\") as NpmConfigConstructor;\nexport const npmConfigDefinitions = require(\"@npmcli/config/lib/definitions\") as {\n definitions: Record<string, unknown>;\n flatten(source: Record<string, unknown>, destination: Record<string, unknown>): unknown;\n shorthands: Record<string, string[]>;\n};\n","export const DEPENDENCY_SECTIONS = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n] as const;\n\nexport type DependencySection = (typeof DEPENDENCY_SECTIONS)[number];\n\nexport type UpdateStatus = \"current\" | \"safe\" | \"breaking\" | \"local\" | \"manual\" | \"error\";\n\nexport interface UpdatePolicy {\n ignore: string[];\n tags: Record<string, string>;\n}\n\nexport interface WorkspaceManifest {\n name: string;\n directory: string;\n manifestPath: string;\n relativeManifestPath: string;\n manifest: Record<string, unknown>;\n isRoot: boolean;\n}\n\nexport interface DependencyOccurrence {\n package: string;\n workspace: string;\n manifestPath: string;\n relativeManifestPath: string;\n section: DependencySection;\n currentSpecification: string;\n kind: \"fetch\" | \"local\" | \"manual\" | \"current\";\n registryManaged: boolean;\n reason: string;\n}\n\nexport interface DiscoveredProject {\n root: string;\n workspaces: WorkspaceManifest[];\n selectedWorkspaces: WorkspaceManifest[];\n policy: UpdatePolicy;\n occurrences: DependencyOccurrence[];\n contextOccurrences: DependencyOccurrence[];\n}\n\nexport interface Packument {\n \"dist-tags\"?: Record<string, unknown>;\n versions?: Record<string, unknown>;\n}\n\nexport interface PlannedOccurrence {\n workspace: string;\n manifestPath: string;\n relativeManifestPath: string;\n section: DependencySection;\n currentSpecification: string;\n proposedSpecification: string | null;\n status: UpdateStatus;\n reason: string;\n allowedVersion: string | null;\n}\n\nexport interface PackageDecision {\n package: string;\n selectedTag: string;\n targetVersion: string | null;\n status: UpdateStatus;\n reason: string;\n occurrences: PlannedOccurrence[];\n}\n\nexport interface UpdateSummary extends Record<UpdateStatus, number> {\n packages: number;\n occurrences: number;\n changedOccurrences: number;\n}\n\nexport interface UpdatePlan {\n decisions: PackageDecision[];\n summary: UpdateSummary;\n hasErrors: boolean;\n}\n\nexport interface ManifestValueEdit {\n manifestPath: string;\n section: DependencySection;\n package: string;\n currentSpecification: string;\n proposedSpecification: string;\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { minimatch } from \"minimatch\";\nimport { parseDocument } from \"yaml\";\nimport { analyzeRange } from \"./range\";\nimport { mapDeclaredWorkspaces, npmPackageArg } from \"./npm-adapters\";\nimport {\n DEPENDENCY_SECTIONS,\n type DependencyOccurrence,\n type DiscoveredProject,\n type UpdatePolicy,\n type WorkspaceManifest,\n} from \"./types\";\n\ninterface DiscoveryOptions {\n cwd: string;\n packagePatterns: string[];\n workspacePatterns: string[];\n}\n\nasync function isFile(filePath: string): Promise<boolean> {\n return (await fs.stat(filePath).catch(() => null))?.isFile() ?? false;\n}\n\nasync function readManifest(manifestPath: string): Promise<Record<string, unknown>> {\n let source: string;\n try {\n source = await fs.readFile(manifestPath, \"utf8\");\n } catch {\n throw new Error(`Unable to read manifest: ${manifestPath}`);\n }\n\n try {\n const value = JSON.parse(source.replace(/^\\uFEFF/, \"\")) as unknown;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error();\n return value as Record<string, unknown>;\n } catch {\n throw new Error(`Malformed package manifest: ${manifestPath}`);\n }\n}\n\nfunction packageWorkspacePatterns(manifest: Record<string, unknown>): string[] | null {\n if (!(\"workspaces\" in manifest)) return null;\n const declaration = manifest.workspaces;\n const patterns = Array.isArray(declaration)\n ? declaration\n : declaration && typeof declaration === \"object\" && !Array.isArray(declaration)\n ? (declaration as Record<string, unknown>).packages\n : null;\n\n if (!Array.isArray(patterns) || patterns.some((pattern) => typeof pattern !== \"string\")) {\n throw new Error(\"Invalid package.json workspaces declaration; expected an array of paths.\");\n }\n return patterns as string[];\n}\n\nasync function pnpmWorkspacePatterns(root: string): Promise<string[] | null> {\n const workspacePath = path.join(root, \"pnpm-workspace.yaml\");\n if (!(await isFile(workspacePath))) return null;\n\n const source = await fs.readFile(workspacePath, \"utf8\");\n const document = parseDocument(source, { prettyErrors: false });\n if (document.errors.length > 0) {\n throw new Error(`Malformed pnpm workspace declaration: ${workspacePath}`);\n }\n\n const value = document.toJS() as unknown;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Invalid pnpm workspace declaration; expected a mapping with packages.\");\n }\n const packages = (value as Record<string, unknown>).packages;\n if (!Array.isArray(packages) || packages.some((pattern) => typeof pattern !== \"string\")) {\n throw new Error(\"Invalid pnpm workspace declaration; expected packages to be an array.\");\n }\n return packages as string[];\n}\n\nasync function findProjectRoot(start: string): Promise<string> {\n const resolved = path.resolve(start);\n const startStat = await fs.stat(resolved).catch(() => null);\n if (!startStat?.isDirectory()) throw new Error(`Working directory does not exist: ${resolved}`);\n\n let directory = resolved;\n let nearestManifestDirectory: string | null = null;\n\n while (true) {\n const manifestPath = path.join(directory, \"package.json\");\n const hasManifest = await isFile(manifestPath);\n if (hasManifest) {\n const manifest = await readManifest(manifestPath);\n nearestManifestDirectory ??= directory;\n if (packageWorkspacePatterns(manifest) !== null) return directory;\n }\n\n if (await isFile(path.join(directory, \"pnpm-workspace.yaml\"))) {\n if (!hasManifest) throw new Error(`Workspace root is missing package.json: ${directory}`);\n await pnpmWorkspacePatterns(directory);\n return directory;\n }\n\n const parent = path.dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n\n if (nearestManifestDirectory) return nearestManifestDirectory;\n throw new Error(`No package.json found from ${resolved}.`);\n}\n\nfunction parsePolicy(manifest: Record<string, unknown>): UpdatePolicy {\n const empty = { ignore: [], tags: {} };\n if (!(\"askr\" in manifest)) return empty;\n if (!manifest.askr || typeof manifest.askr !== \"object\" || Array.isArray(manifest.askr)) {\n throw new Error(\"Invalid askr update configuration in the workspace root.\");\n }\n const update = (manifest.askr as Record<string, unknown>).update;\n if (update === undefined) return empty;\n if (!update || typeof update !== \"object\" || Array.isArray(update)) {\n throw new Error(\"Invalid askr.update configuration in the workspace root.\");\n }\n\n const config = update as Record<string, unknown>;\n const ignore = config.ignore ?? [];\n const tags = config.tags ?? {};\n if (!Array.isArray(ignore) || ignore.some((entry) => typeof entry !== \"string\")) {\n throw new Error(\"Invalid askr.update.ignore configuration; expected an array of patterns.\");\n }\n if (\n !tags ||\n typeof tags !== \"object\" ||\n Array.isArray(tags) ||\n Object.entries(tags).some(([name, tag]) => !name || typeof tag !== \"string\" || !tag)\n ) {\n throw new Error(\"Invalid askr.update.tags configuration; expected package-to-tag strings.\");\n }\n\n return { ignore: ignore as string[], tags: tags as Record<string, string> };\n}\n\nfunction relativeManifestPath(root: string, manifestPath: string): string {\n return path.relative(root, manifestPath).split(path.sep).join(\"/\") || \"package.json\";\n}\n\nfunction workspaceName(manifest: Record<string, unknown>, fallback: string): string {\n return typeof manifest.name === \"string\" && manifest.name.trim() ? manifest.name : fallback;\n}\n\nasync function discoverWorkspaces(root: string): Promise<{\n policy: UpdatePolicy;\n rootManifest: Record<string, unknown>;\n workspaces: WorkspaceManifest[];\n}> {\n const rootManifestPath = path.join(root, \"package.json\");\n const rootManifest = await readManifest(rootManifestPath);\n const policy = parsePolicy(rootManifest);\n const packagePatterns = packageWorkspacePatterns(rootManifest) ?? [];\n const pnpmPatterns = (await pnpmWorkspacePatterns(root)) ?? [];\n const patterns = [...packagePatterns, ...pnpmPatterns];\n const mapped =\n patterns.length > 0\n ? await mapDeclaredWorkspaces({ cwd: root, pkg: { workspaces: patterns } })\n : new Map<string, string>();\n\n const rootName = workspaceName(rootManifest, \"(root)\");\n if (mapped.has(rootName)) {\n throw new Error(`Duplicate workspace name '${rootName}' includes the workspace root.`);\n }\n\n const workspaces: WorkspaceManifest[] = [\n {\n name: rootName,\n directory: root,\n manifestPath: rootManifestPath,\n relativeManifestPath: \"package.json\",\n manifest: rootManifest,\n isRoot: true,\n },\n ];\n\n for (const [mappedName, directory] of mapped) {\n const manifestPath = path.join(directory, \"package.json\");\n const manifest = await readManifest(manifestPath);\n workspaces.push({\n name: workspaceName(manifest, mappedName),\n directory,\n manifestPath,\n relativeManifestPath: relativeManifestPath(root, manifestPath),\n manifest,\n isRoot: false,\n });\n }\n\n workspaces.sort((left, right) => {\n if (left.isRoot !== right.isRoot) return left.isRoot ? -1 : 1;\n return (\n left.name.localeCompare(right.name) || left.manifestPath.localeCompare(right.manifestPath)\n );\n });\n return { policy, rootManifest, workspaces };\n}\n\nfunction matchesAny(value: string, patterns: string[]): boolean {\n return patterns.some((pattern) => minimatch(value, pattern, { dot: true }));\n}\n\nfunction classifySpecification(\n packageName: string,\n specification: string,\n directory: string,\n localNames: Set<string>,\n): Pick<DependencyOccurrence, \"kind\" | \"registryManaged\" | \"reason\"> {\n if (localNames.has(packageName)) {\n return {\n kind: \"local\",\n registryManaged: false,\n reason: \"dependency resolves to a discovered workspace\",\n };\n }\n if (/^workspace:/i.test(specification)) {\n return {\n kind: \"local\",\n registryManaged: false,\n reason: \"workspace protocol is not registry-managed\",\n };\n }\n if (/^link:/i.test(specification)) {\n return {\n kind: \"local\",\n registryManaged: false,\n reason: \"link protocol is not registry-managed\",\n };\n }\n\n let parsed: ReturnType<typeof npmPackageArg.resolve>;\n try {\n parsed = npmPackageArg.resolve(packageName, specification, directory);\n } catch {\n return {\n kind: \"manual\",\n registryManaged: false,\n reason: \"unsupported dependency specification\",\n };\n }\n\n if ([\"directory\", \"file\", \"git\", \"remote\"].includes(parsed.type)) {\n return {\n kind: \"local\",\n registryManaged: false,\n reason: `${parsed.type} specification is not registry-managed`,\n };\n }\n if (parsed.type === \"alias\") {\n return { kind: \"manual\", registryManaged: false, reason: \"npm aliases require manual review\" };\n }\n if (parsed.type === \"tag\") {\n return { kind: \"current\", registryManaged: true, reason: \"tracking tag is not rewritten\" };\n }\n if (parsed.type !== \"range\" && parsed.type !== \"version\") {\n return {\n kind: \"manual\",\n registryManaged: false,\n reason: \"unsupported dependency specification\",\n };\n }\n\n const analysis = analyzeRange(specification);\n if (analysis.tracking) {\n return { kind: \"current\", registryManaged: true, reason: analysis.reason };\n }\n if (!analysis.shape) {\n return { kind: \"manual\", registryManaged: false, reason: analysis.reason };\n }\n return { kind: \"fetch\", registryManaged: true, reason: \"\" };\n}\n\nfunction collectOccurrences(\n root: string,\n workspaces: WorkspaceManifest[],\n localNames: Set<string>,\n policy: UpdatePolicy,\n packagePatterns: string[],\n): DependencyOccurrence[] {\n const occurrences: DependencyOccurrence[] = [];\n for (const workspace of workspaces) {\n for (const section of DEPENDENCY_SECTIONS) {\n const dependencies = workspace.manifest[section];\n if (dependencies === undefined) continue;\n if (!dependencies || typeof dependencies !== \"object\" || Array.isArray(dependencies)) {\n throw new Error(\n `Invalid ${section} in ${workspace.relativeManifestPath}; expected an object.`,\n );\n }\n\n for (const [packageName, specification] of Object.entries(dependencies)) {\n if (typeof specification !== \"string\") {\n throw new Error(\n `Invalid ${section}.${packageName} in ${workspace.relativeManifestPath}.`,\n );\n }\n if (packagePatterns.length > 0 && !matchesAny(packageName, packagePatterns)) continue;\n if (packagePatterns.length === 0 && matchesAny(packageName, policy.ignore)) continue;\n occurrences.push({\n package: packageName,\n workspace: workspace.name,\n manifestPath: workspace.manifestPath,\n relativeManifestPath: relativeManifestPath(root, workspace.manifestPath),\n section,\n currentSpecification: specification,\n ...classifySpecification(packageName, specification, workspace.directory, localNames),\n });\n }\n }\n }\n\n const sectionOrder = new Map(DEPENDENCY_SECTIONS.map((section, index) => [section, index]));\n occurrences.sort(\n (left, right) =>\n left.package.localeCompare(right.package) ||\n left.workspace.localeCompare(right.workspace) ||\n left.relativeManifestPath.localeCompare(right.relativeManifestPath) ||\n sectionOrder.get(left.section)! - sectionOrder.get(right.section)!,\n );\n return occurrences;\n}\n\nexport async function discoverProject(options: DiscoveryOptions): Promise<DiscoveredProject> {\n const root = await findProjectRoot(options.cwd);\n const { policy, workspaces } = await discoverWorkspaces(root);\n const selectedWorkspaces =\n options.workspacePatterns.length === 0\n ? workspaces\n : workspaces.filter((workspace) => matchesAny(workspace.name, options.workspacePatterns));\n if (selectedWorkspaces.length === 0) {\n throw new Error(\"No discovered workspace matches the requested --workspace filters.\");\n }\n\n const localNames = new Set(workspaces.map((workspace) => workspace.name));\n return {\n root,\n workspaces,\n selectedWorkspaces,\n policy,\n occurrences: collectOccurrences(\n root,\n selectedWorkspaces,\n localNames,\n policy,\n options.packagePatterns,\n ),\n contextOccurrences: collectOccurrences(\n root,\n selectedWorkspaces,\n localNames,\n { ignore: [], tags: policy.tags },\n [],\n ),\n };\n}\n","import semver from \"semver\";\nimport { npmPackageArg } from \"./npm-adapters\";\nimport { analyzeRange, isBreakingChange, rewriteRange } from \"./range\";\nimport type {\n DependencyOccurrence,\n PackageDecision,\n Packument,\n PlannedOccurrence,\n UpdatePlan,\n UpdateStatus,\n UpdateSummary,\n} from \"./types\";\n\ninterface PlannerOptions {\n occurrences: DependencyOccurrence[];\n contextOccurrences?: DependencyOccurrence[];\n packuments: Map<string, Packument>;\n failures?: Map<string, string>;\n tags?: Record<string, string>;\n cliTag?: string;\n force?: boolean;\n}\n\ninterface VersionMetadata extends Record<string, unknown> {\n peerDependencies?: Record<string, unknown>;\n}\n\nconst STATUS_PRIORITY: Record<UpdateStatus, number> = {\n current: 0,\n local: 1,\n safe: 2,\n breaking: 3,\n manual: 4,\n error: 5,\n};\n\nfunction publishedVersions(packument: Packument): string[] {\n return Object.keys(packument.versions ?? {})\n .filter((version) => semver.valid(version) !== null)\n .sort(semver.compare);\n}\n\nfunction selectedTarget(packument: Packument, tag: string): string | null {\n const value = packument[\"dist-tags\"]?.[tag];\n return typeof value === \"string\" && semver.valid(value) ? value : null;\n}\n\nfunction plannedOccurrence(\n occurrence: DependencyOccurrence,\n packument: Packument | undefined,\n failure: string | undefined,\n selectedTag: string,\n force: boolean,\n): { occurrence: PlannedOccurrence; targetVersion: string | null } {\n const base = {\n workspace: occurrence.workspace,\n manifestPath: occurrence.manifestPath,\n relativeManifestPath: occurrence.relativeManifestPath,\n section: occurrence.section,\n currentSpecification: occurrence.currentSpecification,\n proposedSpecification: null,\n allowedVersion: null,\n };\n\n if (occurrence.kind === \"local\") {\n return {\n targetVersion: null,\n occurrence: { ...base, status: \"local\", reason: occurrence.reason },\n };\n }\n if (occurrence.kind === \"manual\") {\n return {\n targetVersion: null,\n occurrence: { ...base, status: \"manual\", reason: occurrence.reason },\n };\n }\n if (failure) {\n return {\n targetVersion: null,\n occurrence: { ...base, status: \"error\", reason: failure },\n };\n }\n if (occurrence.kind === \"current\") {\n return {\n targetVersion: packument ? selectedTarget(packument, selectedTag) : null,\n occurrence: { ...base, status: \"current\", reason: occurrence.reason },\n };\n }\n if (!packument) {\n return {\n targetVersion: null,\n occurrence: { ...base, status: \"error\", reason: \"package metadata is unavailable\" },\n };\n }\n\n const targetVersion = selectedTarget(packument, selectedTag);\n if (!targetVersion) {\n return {\n targetVersion: null,\n occurrence: {\n ...base,\n status: \"error\",\n reason: `dist-tag '${selectedTag}' is not published`,\n },\n };\n }\n\n const versions = publishedVersions(packument);\n if (!versions.includes(targetVersion)) {\n return {\n targetVersion: null,\n occurrence: {\n ...base,\n status: \"error\",\n reason: `dist-tag '${selectedTag}' does not identify a published version`,\n },\n };\n }\n const allowedVersion = semver.maxSatisfying(versions, occurrence.currentSpecification);\n if (!allowedVersion) {\n return {\n targetVersion,\n occurrence: {\n ...base,\n status: \"manual\",\n reason: \"no published version satisfies the current specification\",\n },\n };\n }\n if (\n semver.satisfies(targetVersion, occurrence.currentSpecification) ||\n !semver.gt(targetVersion, allowedVersion)\n ) {\n return {\n targetVersion,\n occurrence: {\n ...base,\n allowedVersion,\n status: \"current\",\n reason: \"selected target is already covered by the current specification\",\n },\n };\n }\n\n const analysis = analyzeRange(occurrence.currentSpecification);\n if (!analysis.shape) {\n return {\n targetVersion,\n occurrence: { ...base, allowedVersion, status: \"manual\", reason: analysis.reason },\n };\n }\n\n const breaking = isBreakingChange(allowedVersion, targetVersion);\n const eligible = !breaking || force;\n return {\n targetVersion,\n occurrence: {\n ...base,\n allowedVersion,\n proposedSpecification: eligible\n ? rewriteRange(analysis.shape, targetVersion, breaking)\n : null,\n status: breaking ? \"breaking\" : \"safe\",\n reason: breaking\n ? eligible\n ? \"breaking update included by --force\"\n : \"breaking update requires --upgrade --force\"\n : \"compatible update is available\",\n },\n };\n}\n\nfunction occurrenceKey(\n occurrence: {\n manifestPath: string;\n section: string;\n currentSpecification: string;\n } & ({ package: string } | { package?: never }),\n packageName?: string,\n): string {\n return [\n occurrence.manifestPath,\n occurrence.section,\n packageName ?? occurrence.package,\n occurrence.currentSpecification,\n ].join(\"\\u0000\");\n}\n\nfunction resolveSpecificationVersion(specification: string, packument: Packument): string | null {\n const versions = publishedVersions(packument);\n let parsed: ReturnType<typeof npmPackageArg.resolve>;\n try {\n parsed = npmPackageArg.resolve(\"placeholder\", specification);\n } catch {\n return null;\n }\n if (parsed.type === \"tag\") {\n const tagged = packument[\"dist-tags\"]?.[parsed.rawSpec];\n return typeof tagged === \"string\" && semver.valid(tagged) ? tagged : null;\n }\n if (parsed.type === \"version\") return semver.valid(parsed.rawSpec);\n if (parsed.type === \"range\") return semver.maxSatisfying(versions, parsed.rawSpec);\n return null;\n}\n\nfunction versionMetadata(packument: Packument, version: string): VersionMetadata | null {\n const metadata = packument.versions?.[version];\n return metadata && typeof metadata === \"object\" && !Array.isArray(metadata)\n ? (metadata as VersionMetadata)\n : null;\n}\n\nfunction applyPeerCompatibilityGuard(\n decisions: PackageDecision[],\n contextOccurrences: DependencyOccurrence[],\n packuments: Map<string, Packument>,\n): void {\n const plannedByKey = new Map<string, PlannedOccurrence>();\n for (const decision of decisions) {\n for (const occurrence of decision.occurrences) {\n plannedByKey.set(occurrenceKey(occurrence, decision.package), occurrence);\n }\n }\n\n const contextByWorkspace = new Map<string, DependencyOccurrence[]>();\n for (const occurrence of contextOccurrences) {\n const entries = contextByWorkspace.get(occurrence.workspace) ?? [];\n entries.push(occurrence);\n contextByWorkspace.set(occurrence.workspace, entries);\n }\n\n for (const [workspace, context] of contextByWorkspace) {\n const states = context.flatMap((dependency) => {\n if (!dependency.registryManaged) return [];\n const packument = packuments.get(dependency.package);\n if (!packument) return [];\n const planned = plannedByKey.get(occurrenceKey(dependency));\n const currentVersion = resolveSpecificationVersion(\n dependency.currentSpecification,\n packument,\n );\n const futureSpecification = planned?.proposedSpecification ?? dependency.currentSpecification;\n const futureVersion = resolveSpecificationVersion(futureSpecification, packument);\n return currentVersion && futureVersion\n ? [\n {\n dependency,\n packument,\n planned,\n currentVersion,\n futureVersion,\n changed: Boolean(planned?.proposedSpecification),\n },\n ]\n : [];\n });\n const blockers = new Map<PlannedOccurrence, string>();\n\n for (const provider of states) {\n const currentPeers =\n versionMetadata(provider.packument, provider.currentVersion)?.peerDependencies ?? {};\n const futurePeers =\n versionMetadata(provider.packument, provider.futureVersion)?.peerDependencies ?? {};\n const peerNames = new Set([...Object.keys(currentPeers), ...Object.keys(futurePeers)]);\n for (const peerName of peerNames) {\n const currentRequirement = currentPeers[peerName];\n const futureRequirement = futurePeers[peerName];\n if (futureRequirement !== undefined && typeof futureRequirement !== \"string\") continue;\n\n for (const peer of states.filter((state) => state.dependency.package === peerName)) {\n const currentAccepted =\n typeof currentRequirement !== \"string\" ||\n semver.satisfies(peer.currentVersion, currentRequirement);\n const futureAccepted =\n typeof futureRequirement !== \"string\" ||\n semver.satisfies(peer.futureVersion, futureRequirement);\n if (!currentAccepted || futureAccepted) continue;\n\n const reason = `${provider.dependency.package}@${provider.futureVersion} requires ${peerName}@${futureRequirement}`;\n if (provider.changed && provider.planned) blockers.set(provider.planned, reason);\n if (peer.changed && peer.planned) blockers.set(peer.planned, reason);\n }\n }\n }\n\n for (const [planned, reason] of blockers) {\n planned.status = \"manual\";\n planned.proposedSpecification = null;\n planned.reason = reason;\n }\n\n void workspace;\n }\n}\n\nfunction aggregateStatus(occurrences: PlannedOccurrence[]): UpdateStatus {\n return occurrences.reduce<UpdateStatus>(\n (status, occurrence) =>\n STATUS_PRIORITY[occurrence.status] > STATUS_PRIORITY[status] ? occurrence.status : status,\n \"current\",\n );\n}\n\nfunction summarize(decisions: PackageDecision[]): UpdateSummary {\n const summary: UpdateSummary = {\n packages: decisions.length,\n occurrences: 0,\n changedOccurrences: 0,\n current: 0,\n safe: 0,\n breaking: 0,\n local: 0,\n manual: 0,\n error: 0,\n };\n for (const decision of decisions) {\n decision.status = aggregateStatus(decision.occurrences);\n decision.reason =\n decision.occurrences.find((entry) => entry.status === decision.status)?.reason ?? \"\";\n summary[decision.status] += 1;\n summary.occurrences += decision.occurrences.length;\n summary.changedOccurrences += decision.occurrences.filter(\n (entry) => entry.proposedSpecification,\n ).length;\n }\n return summary;\n}\n\nexport function planUpdates(options: PlannerOptions): UpdatePlan {\n const failures = options.failures ?? new Map<string, string>();\n const tags = options.tags ?? {};\n const grouped = new Map<string, DependencyOccurrence[]>();\n for (const occurrence of options.occurrences) {\n const entries = grouped.get(occurrence.package) ?? [];\n entries.push(occurrence);\n grouped.set(occurrence.package, entries);\n }\n\n const decisions = [...grouped.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([packageName, occurrences]): PackageDecision => {\n const selectedTag = options.cliTag ?? tags[packageName] ?? \"latest\";\n const planned = occurrences.map((occurrence) =>\n plannedOccurrence(\n occurrence,\n options.packuments.get(packageName),\n failures.get(packageName),\n selectedTag,\n options.force ?? false,\n ),\n );\n const targetVersion = planned.find((entry) => entry.targetVersion)?.targetVersion ?? null;\n const plannedOccurrences = planned.map((entry) => entry.occurrence);\n const status = aggregateStatus(plannedOccurrences);\n return {\n package: packageName,\n selectedTag,\n targetVersion,\n status,\n reason: plannedOccurrences.find((entry) => entry.status === status)?.reason ?? \"\",\n occurrences: plannedOccurrences,\n };\n });\n\n const selectedNames = new Set(grouped.keys());\n for (const [packageName, failure] of [...failures].sort(([left], [right]) =>\n left.localeCompare(right),\n )) {\n if (selectedNames.has(packageName)) continue;\n const context = (options.contextOccurrences ?? [])\n .filter((occurrence) => occurrence.package === packageName)\n .map(\n (occurrence): PlannedOccurrence => ({\n workspace: occurrence.workspace,\n manifestPath: occurrence.manifestPath,\n relativeManifestPath: occurrence.relativeManifestPath,\n section: occurrence.section,\n currentSpecification: occurrence.currentSpecification,\n proposedSpecification: null,\n allowedVersion: null,\n status: \"error\",\n reason: `peer compatibility lookup failed: ${failure}`,\n }),\n );\n decisions.push({\n package: packageName,\n selectedTag: options.cliTag ?? tags[packageName] ?? \"latest\",\n targetVersion: null,\n status: \"error\",\n reason: `peer compatibility lookup failed: ${failure}`,\n occurrences: context,\n });\n }\n decisions.sort((left, right) => left.package.localeCompare(right.package));\n\n applyPeerCompatibilityGuard(\n decisions,\n options.contextOccurrences ?? options.occurrences,\n options.packuments,\n );\n const summary = summarize(decisions);\n return { decisions, summary, hasErrors: summary.error > 0 };\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport {\n NpmConfig,\n npmConfigDefinitions,\n npmPackageArg,\n npmRegistryFetch,\n type NpmFetchOptions,\n} from \"./npm-adapters\";\nimport type { Packument } from \"./types\";\n\nconst ABBREVIATED_PACKUMENT =\n \"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*\";\n\nfunction npmPathFromExecutable(executable: string): string | null {\n let directory = path.dirname(path.resolve(executable));\n for (let depth = 0; depth < 5; depth += 1) {\n const manifestPath = path.join(directory, \"package.json\");\n if (existsSync(manifestPath)) {\n try {\n const manifest = createRequire(import.meta.url)(manifestPath) as { name?: string };\n if (manifest.name === \"npm\") return directory;\n } catch {\n // Continue to a parent; npm may be launched through a shim.\n }\n }\n const parent = path.dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n return null;\n}\n\nfunction resolveNpmPath(env: NodeJS.ProcessEnv): string {\n if (env.npm_execpath) {\n const fromEnvironment = npmPathFromExecutable(env.npm_execpath);\n if (fromEnvironment) return fromEnvironment;\n }\n\n const executableDirectory = path.dirname(process.execPath);\n const candidates =\n process.platform === \"win32\"\n ? [path.join(executableDirectory, \"node_modules\", \"npm\")]\n : [path.resolve(executableDirectory, \"..\", \"lib\", \"node_modules\", \"npm\")];\n const installed = candidates.find((candidate) =>\n existsSync(path.join(candidate, \"package.json\")),\n );\n if (installed) return installed;\n\n return path.dirname(createRequire(import.meta.url).resolve(\"@npmcli/config/package.json\"));\n}\n\nexport async function loadNpmConfiguration(\n root: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<NpmFetchOptions> {\n try {\n const config = new NpmConfig({\n argv: [],\n cwd: root,\n definitions: npmConfigDefinitions.definitions,\n env,\n flatten: npmConfigDefinitions.flatten,\n npmPath: resolveNpmPath(env),\n shorthands: npmConfigDefinitions.shorthands,\n });\n await config.load();\n if (!config.validate()) throw new Error(\"Invalid npm configuration\");\n return { ...config.flat };\n } catch {\n throw new Error(\"Unable to load or validate npm configuration.\");\n }\n}\n\nexport function sanitizeRegistryError(error: unknown): string {\n const value =\n error && typeof error === \"object\" ? (error as { code?: unknown; statusCode?: unknown }) : {};\n if (value.statusCode === 404) return \"package was not found in the selected registry\";\n if (value.statusCode === 401 || value.statusCode === 403) {\n return \"registry authentication or authorization failed\";\n }\n const code = typeof value.code === \"string\" ? value.code.toUpperCase() : \"\";\n if ([\"ETIMEDOUT\", \"ETIMEOUT\", \"FETCH_ERROR\", \"ECONNRESET\"].includes(code)) {\n return \"registry request timed out or was interrupted\";\n }\n if (/^[A-Z][A-Z0-9_]{1,30}$/.test(code)) return `registry request failed (${code})`;\n return \"registry request failed\";\n}\n\nexport interface PackumentResults {\n packuments: Map<string, Packument>;\n failures: Map<string, string>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPackument(value: unknown): value is Packument {\n return isRecord(value) && isRecord(value[\"dist-tags\"]) && isRecord(value.versions);\n}\n\nexport async function fetchPackuments(\n packageNames: string[],\n configuration: NpmFetchOptions,\n fetchJson: typeof npmRegistryFetch.json = npmRegistryFetch.json.bind(npmRegistryFetch),\n): Promise<PackumentResults> {\n const names = [...new Set(packageNames)].sort((left, right) => left.localeCompare(right));\n const packuments = new Map<string, Packument>();\n const failures = new Map<string, string>();\n let nextIndex = 0;\n\n const worker = async (): Promise<void> => {\n while (nextIndex < names.length) {\n const packageName = names[nextIndex];\n nextIndex += 1;\n const spec = npmPackageArg(packageName);\n try {\n const result = await fetchJson(`/${spec.escapedName}`, {\n ...configuration,\n headers: {\n ...configuration.headers,\n accept: ABBREVIATED_PACKUMENT,\n },\n offline: false,\n preferOffline: false,\n preferOnline: true,\n spec,\n });\n if (!isPackument(result)) {\n failures.set(packageName, \"registry returned malformed package metadata\");\n } else {\n packuments.set(packageName, result as Packument);\n }\n } catch (error) {\n failures.set(packageName, sanitizeRegistryError(error));\n }\n }\n };\n\n await Promise.all(Array.from({ length: Math.min(8, names.length) }, worker));\n return { packuments, failures };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { applyEdits, modify, parse, type ParseError } from \"jsonc-parser\";\nimport type { ManifestValueEdit } from \"./types\";\n\ninterface StagedManifest {\n manifestPath: string;\n original: Buffer;\n replacement: string;\n temporaryPath: string;\n mode: number;\n}\n\ninterface WriterOptions {\n replace?: (temporaryPath: string, manifestPath: string) => Promise<void>;\n}\n\nfunction groupEdits(edits: ManifestValueEdit[]): Map<string, ManifestValueEdit[]> {\n const grouped = new Map<string, ManifestValueEdit[]>();\n for (const edit of edits) {\n const entries = grouped.get(edit.manifestPath) ?? [];\n entries.push(edit);\n grouped.set(edit.manifestPath, entries);\n }\n for (const entries of grouped.values()) {\n entries.sort(\n (left, right) =>\n left.section.localeCompare(right.section) || left.package.localeCompare(right.package),\n );\n }\n return new Map([...grouped].sort(([left], [right]) => left.localeCompare(right)));\n}\n\nfunction renderReplacement(source: string, edits: ManifestValueEdit[]): string {\n const errors: ParseError[] = [];\n const manifest = parse(source, errors, { allowTrailingComma: true }) as unknown;\n if (errors.length > 0 || !manifest || typeof manifest !== \"object\" || Array.isArray(manifest)) {\n throw new Error(\"Manifest changed to invalid JSON before writing.\");\n }\n\n let result = source;\n for (const edit of edits) {\n const dependencies = (manifest as Record<string, unknown>)[edit.section];\n const current =\n dependencies && typeof dependencies === \"object\" && !Array.isArray(dependencies)\n ? (dependencies as Record<string, unknown>)[edit.package]\n : undefined;\n if (current !== edit.currentSpecification) {\n throw new Error(`Manifest changed before writing: ${edit.manifestPath}`);\n }\n result = applyEdits(\n result,\n modify(result, [edit.section, edit.package], edit.proposedSpecification, {}),\n );\n }\n return result;\n}\n\nasync function cleanup(paths: string[]): Promise<void> {\n await Promise.all(\n paths.map((filePath) => fs.rm(filePath, { force: true }).catch(() => undefined)),\n );\n}\n\nasync function rollback(replaced: StagedManifest[]): Promise<boolean> {\n let complete = true;\n for (const staged of [...replaced].reverse()) {\n const rollbackPath = path.join(\n path.dirname(staged.manifestPath),\n `.${path.basename(staged.manifestPath)}.askr-rollback-${randomUUID()}`,\n );\n try {\n await fs.writeFile(rollbackPath, staged.original, { flag: \"wx\", mode: staged.mode });\n await fs.rename(rollbackPath, staged.manifestPath);\n } catch {\n complete = false;\n await fs.rm(rollbackPath, { force: true }).catch(() => undefined);\n }\n }\n return complete;\n}\n\nexport async function writeManifestEdits(\n edits: ManifestValueEdit[],\n options: WriterOptions = {},\n): Promise<number> {\n if (edits.length === 0) return 0;\n const staged: StagedManifest[] = [];\n const replace = options.replace ?? fs.rename;\n\n try {\n for (const [manifestPath, manifestEdits] of groupEdits(edits)) {\n const [original, stat] = await Promise.all([\n fs.readFile(manifestPath),\n fs.stat(manifestPath),\n ]);\n const replacement = renderReplacement(original.toString(\"utf8\"), manifestEdits);\n const temporaryPath = path.join(\n path.dirname(manifestPath),\n `.${path.basename(manifestPath)}.askr-update-${randomUUID()}`,\n );\n await fs.writeFile(temporaryPath, replacement, { flag: \"wx\", mode: stat.mode });\n staged.push({ manifestPath, original, replacement, temporaryPath, mode: stat.mode });\n }\n } catch (error) {\n await cleanup(staged.map((entry) => entry.temporaryPath));\n throw error;\n }\n\n const replaced: StagedManifest[] = [];\n try {\n for (const manifest of staged) {\n await replace(manifest.temporaryPath, manifest.manifestPath);\n replaced.push(manifest);\n }\n } catch {\n const rollbackComplete = await rollback(replaced);\n await cleanup(staged.map((entry) => entry.temporaryPath));\n throw new Error(\n rollbackComplete\n ? \"Manifest replacement failed; completed replacements were rolled back.\"\n : \"Manifest replacement failed and rollback was incomplete.\",\n );\n }\n\n return edits.length;\n}\n","#!/usr/bin/env node\n\nimport path from \"node:path\";\nimport { isDirectExecution } from \"./is-direct-execution\";\nimport { discoverProject } from \"../update/discovery\";\nimport { planUpdates } from \"../update/planner\";\nimport { fetchPackuments, loadNpmConfiguration, type PackumentResults } from \"../update/registry\";\nimport type {\n ManifestValueEdit,\n PackageDecision,\n PlannedOccurrence,\n UpdateSummary,\n WorkspaceManifest,\n} from \"../update/types\";\nimport { writeManifestEdits } from \"../update/writer\";\n\ntype CliIo = Pick<Console, \"error\" | \"log\">;\n\ninterface ParsedArgs {\n cwd: string;\n force: boolean;\n help: boolean;\n json: boolean;\n packagePatterns: string[];\n tag?: string;\n upgrade: boolean;\n workspacePatterns: string[];\n errors: string[];\n}\n\ninterface UpdateRuntime {\n registry?: (root: string, packageNames: string[]) => Promise<PackumentResults>;\n writer?: typeof writeManifestEdits;\n}\n\nfunction helpText(): string {\n return [\n \"askr update - Plan or apply dependency manifest updates\",\n \"\",\n \"Usage:\",\n \" askr update [packages...] [options]\",\n \"\",\n \"Options:\",\n \" -u, --upgrade Apply compatible package.json edits\",\n \" -f, --force Include breaking updates (requires --upgrade)\",\n \" --cwd <dir> Resolve a project from another directory\",\n \" --workspace <glob> Select workspace names (repeatable)\",\n \" --tag <tag> Use one registry dist-tag for selected packages\",\n \" --json Emit one deterministic JSON object on stdout\",\n \" --help, -h Show this help message\",\n \"\",\n \"Notes:\",\n \" Package arguments are minimatch patterns and override persistent ignores.\",\n \" The command is dry-run by default and changes package.json files only.\",\n \" Lockfiles, installs, and lifecycle scripts are never touched.\",\n ].join(\"\\n\");\n}\n\nfunction optionValue(\n args: string[],\n index: number,\n option: string,\n errors: string[],\n): string | null {\n if (index + 1 >= args.length || args[index + 1].startsWith(\"-\")) {\n errors.push(`Missing value for ${option}`);\n return null;\n }\n return args[index + 1];\n}\n\nfunction parseArgs(args: string[]): ParsedArgs {\n const parsed: ParsedArgs = {\n cwd: process.cwd(),\n force: false,\n help: false,\n json: false,\n packagePatterns: [],\n upgrade: false,\n workspacePatterns: [],\n errors: [],\n };\n let positionalOnly = false;\n\n for (let index = 0; index < args.length; index += 1) {\n const argument = args[index];\n if (positionalOnly) {\n parsed.packagePatterns.push(argument);\n } else if (argument === \"--\") {\n positionalOnly = true;\n } else if (argument === \"--help\" || argument === \"-h\") {\n parsed.help = true;\n } else if (argument === \"--upgrade\" || argument === \"-u\") {\n parsed.upgrade = true;\n } else if (argument === \"--force\" || argument === \"-f\") {\n parsed.force = true;\n } else if (argument === \"--json\") {\n parsed.json = true;\n } else if (argument === \"--cwd\") {\n const value = optionValue(args, index, \"--cwd\", parsed.errors);\n if (value !== null) {\n parsed.cwd = path.resolve(value);\n index += 1;\n }\n } else if (argument.startsWith(\"--cwd=\")) {\n parsed.cwd = path.resolve(argument.slice(\"--cwd=\".length));\n } else if (argument === \"--workspace\") {\n const value = optionValue(args, index, \"--workspace\", parsed.errors);\n if (value !== null) {\n parsed.workspacePatterns.push(value);\n index += 1;\n }\n } else if (argument.startsWith(\"--workspace=\")) {\n parsed.workspacePatterns.push(argument.slice(\"--workspace=\".length));\n } else if (argument === \"--tag\") {\n const value = optionValue(args, index, \"--tag\", parsed.errors);\n if (value !== null) {\n parsed.tag = value;\n index += 1;\n }\n } else if (argument.startsWith(\"--tag=\")) {\n parsed.tag = argument.slice(\"--tag=\".length);\n } else if (argument.startsWith(\"-\")) {\n parsed.errors.push(`Unknown option: ${argument}`);\n } else {\n parsed.packagePatterns.push(argument);\n }\n }\n\n if (parsed.force && !parsed.upgrade) {\n parsed.errors.push(\"--force requires --upgrade\");\n }\n if (parsed.tag !== undefined && (!parsed.tag || /\\s/.test(parsed.tag))) {\n parsed.errors.push(\"--tag must be a non-empty dist-tag without whitespace\");\n }\n if (parsed.workspacePatterns.some((pattern) => !pattern)) {\n parsed.errors.push(\"--workspace patterns must not be empty\");\n }\n if (parsed.packagePatterns.some((pattern) => !pattern)) {\n parsed.errors.push(\"Package patterns must not be empty\");\n }\n return parsed;\n}\n\nfunction emptySummary(): UpdateSummary {\n return {\n packages: 0,\n occurrences: 0,\n changedOccurrences: 0,\n current: 0,\n safe: 0,\n breaking: 0,\n local: 0,\n manual: 0,\n error: 0,\n };\n}\n\nfunction serializableDecision(decision: PackageDecision): Record<string, unknown> {\n return {\n package: decision.package,\n selectedTag: decision.selectedTag,\n targetVersion: decision.targetVersion,\n status: decision.status,\n reason: decision.reason,\n occurrences: decision.occurrences.map((occurrence) => ({\n workspace: occurrence.workspace,\n manifest: occurrence.relativeManifestPath,\n section: occurrence.section,\n currentSpecification: occurrence.currentSpecification,\n proposedSpecification: occurrence.proposedSpecification,\n allowedVersion: occurrence.allowedVersion,\n status: occurrence.status,\n reason: occurrence.reason,\n })),\n };\n}\n\nfunction selectedWorkspaceJson(\n root: string,\n workspaces: WorkspaceManifest[],\n): Array<Record<string, unknown>> {\n return workspaces.map((workspace) => ({\n name: workspace.name,\n path: path.relative(root, workspace.directory).split(path.sep).join(\"/\") || \".\",\n manifest: workspace.relativeManifestPath,\n }));\n}\n\nfunction emitJson(\n io: CliIo,\n options: {\n root: string | null;\n workspaces: Array<Record<string, unknown>>;\n summary: UpdateSummary;\n decisions: PackageDecision[];\n applied: number;\n errors: string[];\n },\n): void {\n io.log(\n JSON.stringify(\n {\n root: options.root,\n workspaces: options.workspaces,\n summary: options.summary,\n decisions: options.decisions.map(serializableDecision),\n applied: { occurrences: options.applied },\n errors: options.errors,\n },\n null,\n 2,\n ),\n );\n}\n\nfunction rangeText(occurrence: PlannedOccurrence): string {\n if (occurrence.proposedSpecification) {\n return `${occurrence.currentSpecification} → ${occurrence.proposedSpecification}`;\n }\n if (occurrence.status === \"breaking\") {\n return `${occurrence.currentSpecification} (skipped; use -u -f)`;\n }\n return `${occurrence.currentSpecification} (${occurrence.reason})`;\n}\n\nfunction renderTable(rows: string[][]): string[] {\n const headings = [\"Package\", \"Allowed\", \"Latest\", \"Status\", \"Range\"];\n const widths = headings.map((heading, column) =>\n Math.max(heading.length, ...rows.map((row) => row[column].length)),\n );\n return [headings, ...rows].map((row) =>\n row\n .map((value, column) => (column === row.length - 1 ? value : value.padEnd(widths[column])))\n .join(\" \"),\n );\n}\n\nfunction emitHuman(\n io: CliIo,\n decisions: PackageDecision[],\n summary: UpdateSummary,\n applied: number,\n upgrade: boolean,\n): void {\n const byWorkspace = new Map<string, string[][]>();\n for (const decision of decisions) {\n for (const occurrence of decision.occurrences) {\n if (occurrence.status === \"current\") continue;\n const rows = byWorkspace.get(occurrence.workspace) ?? [];\n rows.push([\n decision.package,\n occurrence.allowedVersion ?? \"-\",\n decision.targetVersion ?? \"-\",\n occurrence.status,\n rangeText(occurrence),\n ]);\n byWorkspace.set(occurrence.workspace, rows);\n }\n }\n\n if (byWorkspace.size === 0) {\n io.log(\"All selected dependencies are current.\");\n } else {\n let first = true;\n for (const [workspace, rows] of byWorkspace) {\n if (!first) io.log(\"\");\n first = false;\n io.log(workspace);\n for (const line of renderTable(rows)) io.log(line);\n }\n }\n\n const counts = ([\"safe\", \"breaking\", \"current\", \"manual\", \"local\", \"error\"] as const)\n .filter((status) => summary[status] > 0)\n .map((status) => `${summary[status]} ${status}`)\n .join(\", \");\n io.log(\"\");\n io.log(\n `Scanned ${summary.packages} package${summary.packages === 1 ? \"\" : \"s\"}${counts ? `: ${counts}` : \".\"}`,\n );\n if (upgrade) {\n io.log(`Updated ${applied} manifest occurrence${applied === 1 ? \"\" : \"s\"}.`);\n } else if (summary.changedOccurrences > 0) {\n io.log(\n `Dry run: ${summary.changedOccurrences} manifest occurrence${summary.changedOccurrences === 1 ? \"\" : \"s\"} can be updated; rerun with -u to apply.`,\n );\n }\n}\n\nfunction collectEdits(decisions: PackageDecision[]): ManifestValueEdit[] {\n return decisions.flatMap((decision) =>\n decision.occurrences.flatMap((occurrence) =>\n occurrence.proposedSpecification\n ? [\n {\n manifestPath: occurrence.manifestPath,\n section: occurrence.section,\n package: decision.package,\n currentSpecification: occurrence.currentSpecification,\n proposedSpecification: occurrence.proposedSpecification,\n },\n ]\n : [],\n ),\n );\n}\n\nasync function defaultRegistry(root: string, packageNames: string[]): Promise<PackumentResults> {\n const configuration = await loadNpmConfiguration(root);\n return fetchPackuments(packageNames, configuration);\n}\n\nexport async function runUpdateCli(\n args: string[],\n io: CliIo = console,\n runtime: UpdateRuntime = {},\n): Promise<number> {\n const parsed = parseArgs(args);\n if (parsed.help && parsed.errors.length === 0) {\n io.log(helpText());\n return 0;\n }\n if (parsed.errors.length > 0) {\n for (const error of parsed.errors) io.error(`askr update: ${error}`);\n if (parsed.json) {\n emitJson(io, {\n root: null,\n workspaces: [],\n summary: emptySummary(),\n decisions: [],\n applied: 0,\n errors: parsed.errors,\n });\n }\n return 1;\n }\n\n let root: string | null = null;\n let selectedWorkspaces: WorkspaceManifest[] = [];\n try {\n const project = await discoverProject({\n cwd: parsed.cwd,\n packagePatterns: parsed.packagePatterns,\n workspacePatterns: parsed.workspacePatterns,\n });\n root = project.root;\n selectedWorkspaces = project.selectedWorkspaces;\n\n const hasRegistryCandidate = project.occurrences.some(\n (occurrence) => occurrence.kind === \"fetch\",\n );\n const lookupNames = hasRegistryCandidate\n ? project.contextOccurrences\n .filter((occurrence) => occurrence.registryManaged)\n .map((occurrence) => occurrence.package)\n : [];\n const registry = runtime.registry ?? defaultRegistry;\n const results =\n lookupNames.length > 0\n ? await registry(project.root, lookupNames)\n : { packuments: new Map(), failures: new Map() };\n const plan = planUpdates({\n occurrences: project.occurrences,\n contextOccurrences: project.contextOccurrences,\n packuments: results.packuments,\n failures: results.failures,\n tags: project.policy.tags,\n cliTag: parsed.tag,\n force: parsed.force,\n });\n\n let applied = 0;\n const errors: string[] = [];\n if (!plan.hasErrors && parsed.upgrade) {\n try {\n applied = await (runtime.writer ?? writeManifestEdits)(collectEdits(plan.decisions));\n } catch {\n errors.push(\n \"Unable to replace package manifests; completed replacements were rolled back when possible.\",\n );\n }\n }\n if (plan.hasErrors) errors.push(\"One or more registry lookups or package plans failed.\");\n\n if (parsed.json) {\n emitJson(io, {\n root: project.root,\n workspaces: selectedWorkspaceJson(project.root, project.selectedWorkspaces),\n summary: plan.summary,\n decisions: plan.decisions,\n applied,\n errors,\n });\n } else {\n emitHuman(io, plan.decisions, plan.summary, applied, parsed.upgrade);\n }\n for (const error of errors) io.error(`askr update: ${error}`);\n return errors.length > 0 ? 1 : 0;\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Update failed.\";\n io.error(`askr update: ${message}`);\n if (parsed.json) {\n emitJson(io, {\n root,\n workspaces: root ? selectedWorkspaceJson(root, selectedWorkspaces) : [],\n summary: emptySummary(),\n decisions: [],\n applied: 0,\n errors: [message],\n });\n }\n return 1;\n }\n}\n\nasync function main(): Promise<void> {\n process.exit(await runUpdateCli(process.argv.slice(2)));\n}\n\nif (isDirectExecution(import.meta.url)) void main();\n"],"mappings":"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"}