@pob/version 6.5.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index-node.mjs +72 -3
- package/dist/index-node.mjs.map +1 -1
- package/package.json +6 -6
- package/src/pm/BunPackageManager.ts +15 -0
- package/src/utils/bunLockUtils.test.ts +126 -0
- package/src/utils/bunLockUtils.ts +81 -0
- package/src/utils/conventionalChangelogUtils.test.ts +18 -18
- package/src/utils/conventionalChangelogUtils.ts +0 -1
package/dist/index-node.mjs
CHANGED
|
@@ -3,12 +3,74 @@ import fs$1, { existsSync } from 'node:fs';
|
|
|
3
3
|
import { program, Option } from 'commander';
|
|
4
4
|
import { LoggerCLI } from 'nightingale';
|
|
5
5
|
import semver, { satisfies, gt } from 'semver';
|
|
6
|
-
import
|
|
6
|
+
import fs, { readFile, writeFile, glob } from 'node:fs/promises';
|
|
7
7
|
import path from 'node:path';
|
|
8
|
+
import childProcess from 'node:child_process';
|
|
8
9
|
import { writeChangelogString } from 'conventional-changelog-writer';
|
|
9
10
|
import { parseCommits } from 'conventional-commits-parser';
|
|
10
11
|
import { loadPreset } from 'conventional-changelog-preset-loader';
|
|
11
|
-
|
|
12
|
+
|
|
13
|
+
const syncBunLockWorkspaceVersions = (lockContent, getVersion) => {
|
|
14
|
+
const lines = lockContent.split("\n");
|
|
15
|
+
let inWorkspaces = false;
|
|
16
|
+
let currentPath = null;
|
|
17
|
+
return lines.map((line) => {
|
|
18
|
+
if (!inWorkspaces) {
|
|
19
|
+
if (/^ {2}"workspaces": \{\s*$/.test(line)) inWorkspaces = true;
|
|
20
|
+
return line;
|
|
21
|
+
}
|
|
22
|
+
if (/^ {2}\}/.test(line)) {
|
|
23
|
+
inWorkspaces = false;
|
|
24
|
+
return line;
|
|
25
|
+
}
|
|
26
|
+
const pathMatch = /^ {4}("(?:[^"\\]|\\.)*"): \{\s*$/.exec(line);
|
|
27
|
+
if (pathMatch) {
|
|
28
|
+
currentPath = JSON.parse(pathMatch[1]);
|
|
29
|
+
return line;
|
|
30
|
+
}
|
|
31
|
+
if (currentPath === null) return line;
|
|
32
|
+
const versionMatch = /^( {6}"version": )"(?:[^"\\]|\\.)*"(,?\s*)$/.exec(
|
|
33
|
+
line
|
|
34
|
+
);
|
|
35
|
+
if (!versionMatch) return line;
|
|
36
|
+
const newVersion = getVersion(currentPath);
|
|
37
|
+
if (newVersion === void 0) return line;
|
|
38
|
+
const [, prefix = "", suffix = ""] = versionMatch;
|
|
39
|
+
return prefix + JSON.stringify(newVersion) + suffix;
|
|
40
|
+
}).join("\n");
|
|
41
|
+
};
|
|
42
|
+
const syncBunLockFile = async (rootCwd) => {
|
|
43
|
+
const lockPath = path.join(rootCwd, "bun.lock");
|
|
44
|
+
let content;
|
|
45
|
+
try {
|
|
46
|
+
content = await readFile(lockPath, "utf8");
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (error.code === "ENOENT") return;
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
const workspacePaths = /* @__PURE__ */ new Set();
|
|
52
|
+
syncBunLockWorkspaceVersions(content, (workspacePath) => {
|
|
53
|
+
workspacePaths.add(workspacePath);
|
|
54
|
+
return void 0;
|
|
55
|
+
});
|
|
56
|
+
const versions = /* @__PURE__ */ new Map();
|
|
57
|
+
await Promise.all(
|
|
58
|
+
[...workspacePaths].map(async (workspacePath) => {
|
|
59
|
+
const pkg = JSON.parse(
|
|
60
|
+
await readFile(
|
|
61
|
+
path.join(rootCwd, workspacePath, "package.json"),
|
|
62
|
+
"utf8"
|
|
63
|
+
)
|
|
64
|
+
);
|
|
65
|
+
if (pkg.version !== void 0) versions.set(workspacePath, pkg.version);
|
|
66
|
+
})
|
|
67
|
+
);
|
|
68
|
+
const newContent = syncBunLockWorkspaceVersions(
|
|
69
|
+
content,
|
|
70
|
+
(workspacePath) => versions.get(workspacePath)
|
|
71
|
+
);
|
|
72
|
+
if (newContent !== content) await writeFile(lockPath, newContent);
|
|
73
|
+
};
|
|
12
74
|
|
|
13
75
|
async function execvp(command, args, {
|
|
14
76
|
cwd = process.cwd(),
|
|
@@ -165,6 +227,14 @@ const execCommand$1 = /*#__PURE__*/Object.defineProperty({
|
|
|
165
227
|
}, Symbol.toStringTag, { value: 'Module' });
|
|
166
228
|
|
|
167
229
|
const BunPackageManager = {
|
|
230
|
+
async installOnPackageContentChange(rootWorkspace) {
|
|
231
|
+
await syncBunLockFile(rootWorkspace.cwd);
|
|
232
|
+
await execCommand(
|
|
233
|
+
rootWorkspace,
|
|
234
|
+
["bun", "install", "--lockfile-only"],
|
|
235
|
+
"inherit"
|
|
236
|
+
);
|
|
237
|
+
},
|
|
168
238
|
async runScript(workspace, scriptName) {
|
|
169
239
|
await execCommand(workspace, ["bun", "run", scriptName], "inherit");
|
|
170
240
|
},
|
|
@@ -499,7 +569,6 @@ const generateChangelog = (workspace, pkg, config, previousTag, newTag, commits,
|
|
|
499
569
|
return writeChangelogString(
|
|
500
570
|
commits ?? [],
|
|
501
571
|
{
|
|
502
|
-
// @ts-expect-error - missing types
|
|
503
572
|
previousTag,
|
|
504
573
|
currentTag: newTag,
|
|
505
574
|
linkCompare: previousTag != null,
|
package/dist/index-node.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-node.mjs","sources":["../src/utils/execCommand.ts","../src/pm/BunPackageManager.ts","../src/pm/PnpmPackageManager.ts","../src/pm/YarnPackageManager.ts","../src/pm/PackageManager.ts","../src/utils/UsageError.ts","../src/utils/mapUtils.ts","../src/utils/packageDependenciesUtils.ts","../src/utils/workspaceUtils.ts","../src/utils/bumpTypeUtils.ts","../src/utils/conventionalChangelogUtils.ts","../src/utils/conventionalCommitConfigUtils.ts","../src/utils/generatorUtils.ts","../src/utils/gitUtils.ts","../src/utils/githubUtils.ts","../src/utils/packageUtils.ts","../src/utils/updateChangelog.ts","../src/commands/version.ts","../src/index.ts"],"sourcesContent":["import childProcess from \"node:child_process\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\ninterface ExecResultIfFailed {\n code: number | null;\n signal: string | null;\n stdout: string;\n stderr: string;\n}\n\ninterface ExecResultIfSuccess {\n code: null;\n signal: null;\n stdout: string;\n stderr: string;\n}\n\ntype ExecResult<Strict extends boolean> = Strict extends true\n ? ExecResultIfSuccess\n : ExecResultIfFailed;\n\nasync function execvp<const Strict extends boolean>(\n command: string,\n args: string[],\n {\n cwd = process.cwd(),\n env = process.env,\n encoding,\n strict,\n stdo = \"pipe\",\n input,\n }: {\n cwd?: string;\n env?: typeof process.env;\n encoding?: BufferEncoding;\n strict?: Strict;\n stdo?: \"inherit\" | \"pipe\";\n input?: string;\n },\n): Promise<ExecResult<Strict>> {\n const stdoutChunks: Uint8Array[] = [];\n const stderrChunks: Uint8Array[] = [];\n if (env.PWD !== undefined) {\n env = { ...env, PWD: cwd };\n }\n const subprocess = childProcess.spawn(command, args, {\n cwd,\n env,\n stdio: [input ? \"pipe\" : \"ignore\", stdo, stdo],\n });\n if (input && subprocess.stdin) {\n // write input to stdin and close it\n subprocess.stdin.write(input);\n subprocess.stdin.end();\n }\n subprocess.stdout?.on(\"data\", (chunk) => {\n stdoutChunks.push(chunk);\n });\n subprocess.stderr?.on(\"data\", (chunk) => {\n stderrChunks.push(chunk);\n });\n return new Promise((resolve, reject) => {\n subprocess.on(\"error\", (err) => {\n reject(new Error(`Process ${command} failed to spawn`));\n });\n subprocess.on(\"close\", (code, signal) => {\n const chunksToString = (chunks: Uint8Array[]): string =>\n stdo === \"inherit\"\n ? \"\"\n : Buffer.concat(chunks).toString(encoding ?? \"utf8\");\n const stdout = chunksToString(stdoutChunks);\n const stderr = chunksToString(stderrChunks);\n if (code === 0 || !strict) {\n resolve({\n code,\n signal,\n stdout,\n stderr,\n } as ExecResult<Strict>);\n } else {\n reject(\n new Error(\n `Process ${[command, ...args].join(\" \")} exited ${code !== null ? `with code ${code}` : `with signal ${signal || \"\"}`}:\\nstdout: ${stdout}\\nstderr: ${stderr}`,\n ),\n );\n }\n });\n });\n}\n\nasync function* spawnStreamStdout<const Strict extends boolean>(\n command: string,\n args: string[],\n {\n cwd = process.cwd(),\n env = process.env,\n encoding,\n strict,\n separator,\n }: {\n cwd?: string;\n env?: typeof process.env;\n encoding?: BufferEncoding;\n strict?: Strict;\n separator: string;\n },\n): AsyncGenerator<string, ExecResult<Strict>, unknown> {\n const stderrChunks: Uint8Array[] = [];\n if (env.PWD !== undefined) {\n env = { ...env, PWD: cwd };\n }\n const subprocess = childProcess.spawn(command, args, {\n cwd,\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n subprocess.stderr.on(\"data\", (chunk) => {\n stderrChunks.push(chunk);\n });\n\n let chunk: Buffer;\n let payload: string[];\n let buffer = \"\";\n\n for await (chunk of subprocess.stdout) {\n buffer += chunk.toString();\n\n if (buffer.includes(separator)) {\n payload = buffer.split(separator);\n buffer = payload.pop() || \"\";\n\n yield* payload;\n }\n }\n\n if (buffer) {\n yield buffer;\n }\n\n return new Promise((resolve, reject) => {\n subprocess.on(\"error\", (err) => {\n reject(new Error(`Process ${command} failed to spawn`));\n });\n subprocess.on(\"close\", (code, signal) => {\n const chunksToString = (chunks: Uint8Array[]): string =>\n Buffer.concat(chunks).toString(encoding ?? \"utf8\");\n const stderr = chunksToString(stderrChunks);\n if (code === 0 || !strict) {\n resolve({\n code,\n signal,\n stderr,\n } as ExecResult<Strict>);\n } else {\n reject(\n new Error(\n `Process ${[command, ...args].join(\" \")} exited ${code !== null ? `with code ${code}` : `with signal ${signal || \"\"}`}:\\nstderr: ${stderr}`,\n ),\n );\n }\n });\n });\n}\n\nexport const execCommand = (\n workspace: Workspace,\n commandAndArgs: string[],\n stdo: \"inherit\" | \"pipe\" = \"pipe\",\n): ReturnType<typeof execvp> => {\n const [command, ...args] = commandAndArgs;\n if (command === undefined) {\n throw new Error(\"Command is required\");\n }\n return execvp(command, args, {\n cwd: workspace.cwd,\n strict: true,\n stdo,\n });\n};\n\nexport const execCommandWithInput = (\n workspace: Workspace,\n commandAndArgs: string[],\n input: string,\n stdo: \"inherit\" | \"pipe\" = \"pipe\",\n): ReturnType<typeof execvp> => {\n const [command, ...args] = commandAndArgs;\n if (command === undefined) {\n throw new Error(\"Command is required\");\n }\n return execvp(command, args, {\n cwd: workspace.cwd,\n strict: true,\n stdo,\n input,\n });\n};\n\nexport const execCommandStreamStdout = (\n workspace: Workspace,\n commandAndArgs: string[],\n separator = \"\\n\",\n): AsyncGenerator<string, ExecResult<true>, unknown> => {\n const [command, ...args] = commandAndArgs;\n if (command === undefined) {\n throw new Error(\"Command is required\");\n }\n return spawnStreamStdout(command, args, {\n cwd: workspace.cwd,\n strict: true,\n separator,\n });\n};\n","import { execCommand } from \"../utils/execCommand.ts\";\nimport type {\n PackageManager,\n PackageManagerPublishOptions,\n} from \"./PackageManager.ts\";\n\nexport const BunPackageManager: PackageManager = {\n async runScript(workspace, scriptName) {\n await execCommand(workspace, [\"bun\", \"run\", scriptName], \"inherit\");\n },\n\n async publish(workspace, options?: PackageManagerPublishOptions) {\n if (options?.provenance) {\n // Use bun pack for provenance support\n // See: https://github.com/oven-sh/bun/issues/15601\n const packResult = await execCommand(workspace, [\"bun\", \"pm\", \"pack\"]);\n // Extract .tgz filename from output (find line ending with .tgz)\n const lines = packResult.stdout.trim().split(\"\\n\");\n const tgzPath =\n lines.find((line) => line.endsWith(\".tgz\")) ?? lines.at(-1);\n if (!tgzPath) {\n throw new Error(\"Failed to extract .tgz path from bun pack output\");\n }\n await execCommand(workspace, [\"npm\", \"publish\", \"--provenance\", tgzPath]);\n } else {\n await execCommand(workspace, [\"bun\", \"publish\"], \"inherit\");\n }\n },\n};\n","import { execCommand } from \"../utils/execCommand.ts\";\nimport type {\n PackageManager,\n PackageManagerPublishOptions,\n} from \"./PackageManager.ts\";\n\nexport const PnpmPackageManager: PackageManager = {\n async runScript(workspace, scriptName) {\n await execCommand(workspace, [\"pnpm\", \"run\", scriptName], \"inherit\");\n },\n\n async publish(workspace, options?: PackageManagerPublishOptions) {\n if (options?.provenance) {\n await execCommand(\n workspace,\n [\"pnpm\", \"publish\", \"--provenance\"],\n \"inherit\",\n );\n } else {\n await execCommand(workspace, [\"pnpm\", \"publish\"], \"inherit\");\n }\n },\n};\n","import { execCommand } from \"../utils/execCommand.ts\";\nimport type { Workspace } from \"../utils/packageUtils.ts\";\nimport type {\n PackageManager,\n PackageManagerPublishOptions,\n} from \"./PackageManager.ts\";\n\nexport const YarnPackageManager: PackageManager = {\n async installOnPackageContentChange(rootWorkspace: Workspace) {\n await execCommand(rootWorkspace, [\"yarn\", \"install\"], \"inherit\");\n },\n\n async runScript(workspace: Workspace, scriptName: string) {\n await execCommand(workspace, [\"yarn\", \"run\", scriptName], \"inherit\");\n },\n\n async publish(workspace: Workspace, options?: PackageManagerPublishOptions) {\n const publishArgs = [\"yarn\", \"npm\", \"publish\"];\n if (options?.provenance) {\n publishArgs.push(\"--provenance\");\n }\n await execCommand(workspace, publishArgs, \"inherit\");\n },\n\n async publishWorkspaces(\n rootWorkspace: Workspace,\n options?: PackageManagerPublishOptions,\n ) {\n const publishArgs = [\n \"yarn\",\n \"workspaces\",\n \"foreach\",\n \"--all\",\n \"--parallel\",\n \"--no-private\",\n \"npm\",\n \"publish\",\n ];\n if (options?.provenance) {\n publishArgs.push(\"--provenance\");\n }\n await execCommand(rootWorkspace, publishArgs, \"inherit\");\n },\n};\n","import { existsSync } from \"node:fs\";\nimport type { Workspace } from \"../utils/packageUtils.ts\";\nimport { BunPackageManager } from \"./BunPackageManager.ts\";\nimport { PnpmPackageManager } from \"./PnpmPackageManager.ts\";\nimport { YarnPackageManager } from \"./YarnPackageManager.ts\";\n\nexport interface PackageManagerPublishOptions {\n provenance?: boolean;\n}\n\nexport interface PackageManager {\n installOnPackageContentChange?: (rootWorkspace: Workspace) => Promise<void>;\n runScript: (workspace: Workspace, scriptName: string) => Promise<void>;\n publish: (\n workspace: Workspace,\n options?: PackageManagerPublishOptions,\n ) => Promise<void>;\n publishWorkspaces?: (\n rootWorkspace: Workspace,\n options?: PackageManagerPublishOptions,\n ) => Promise<void>;\n}\n\nexport const autoDetectPackageManager = (\n rootWorkspace: Workspace,\n): PackageManager => {\n const hasYarnLock = existsSync(`${rootWorkspace.cwd}/yarn.lock`);\n const hasBunLockLegacy = existsSync(`${rootWorkspace.cwd}/bun.lockb`);\n const hasBunLock = existsSync(`${rootWorkspace.cwd}/bun.lock`);\n const hasNpmPackageLock = existsSync(\n `${rootWorkspace.cwd}/package-lock.json`,\n );\n const hasPnpmLock = existsSync(`${rootWorkspace.cwd}/pnpm-lock.yaml`);\n\n if (\n [\n hasYarnLock,\n hasBunLockLegacy,\n hasBunLock,\n hasNpmPackageLock,\n hasPnpmLock,\n ].filter(Boolean).length > 1\n ) {\n throw new Error(\n `Multiple lock files detected in workspace at ${rootWorkspace.cwd}. Please ensure only one lock file is present, or pass --package-manager option to bypass auto-detection.`,\n );\n }\n\n if (hasYarnLock) {\n return YarnPackageManager;\n }\n\n if (hasBunLockLegacy || hasBunLock) {\n return BunPackageManager;\n }\n\n if (hasPnpmLock) {\n return PnpmPackageManager;\n }\n\n if (hasNpmPackageLock) {\n throw new Error(\n \"NPM is not currently supported as a package manager. Please migrate to Yarn or Bun, or open an issue to request support.\",\n );\n }\n\n throw new Error(\n `No lock file detected in workspace at ${rootWorkspace.cwd}. Please ensure a supported lock file is present, or pass --package-manager option to bypass auto-detection.`,\n );\n};\n\nexport const getPackageManager = (\n rootWorkspace: Workspace,\n specifiedPackageManager?: \"bun\" | \"pnpm\" | \"yarn\",\n): PackageManager => {\n switch (specifiedPackageManager) {\n case \"bun\":\n return BunPackageManager;\n case \"yarn\":\n return YarnPackageManager;\n case \"pnpm\":\n return PnpmPackageManager;\n case undefined:\n default: {\n throw new Error(\n \"Invalid package manager specified. Supported values are 'bun' and 'yarn'.\",\n );\n }\n }\n};\n","export class UsageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UsageError\";\n }\n}\n","export function getMapArrayItemForKey<K, V>(map: Map<K, V[]>, key: K): V[] {\n let value: V[] | undefined = map.get(key);\n if (value === undefined) {\n map.set(key, (value = [] as V[]));\n }\n return value;\n}\n","/**\n * Combination of an optional scope and name.\n *\n * eg `@npm/types`\n */\nexport interface PackageDescriptorName {\n scope?: string;\n name: string;\n}\n\ninterface DescriptorUtils<Descriptor> {\n parse: (value: string) => Descriptor;\n stringify: (descriptor: Descriptor) => string;\n}\n\nexport const PackageDescriptorNameUtils: DescriptorUtils<PackageDescriptorName> =\n {\n parse: (value) => {\n if (value.startsWith(\"@\")) {\n const [scope, name] = value.slice(1).split(\"/\", 2);\n if (!scope || !name) {\n throw new Error(`Invalid package descriptor name: ${value}`);\n }\n return { scope, name };\n }\n return { name: value };\n },\n stringify: (descriptor) => {\n return descriptor.scope === undefined\n ? descriptor.name\n : `@${descriptor.scope}/${descriptor.name}`;\n },\n };\n\nexport interface PackageDependencyDescriptor {\n key: string;\n name: PackageDescriptorName;\n selector: string; // can be npm tag or version or version range or git url or local folder path\n}\n\ninterface PackageDependencyDescriptorUtils<\n Descriptor = PackageDependencyDescriptor,\n> {\n make: (descriptor: Descriptor, selector: string) => Descriptor;\n parse: (dependencyKey: string, dependencyValue: string) => Descriptor;\n stringify: (descriptor: Descriptor) => [key: string, value: string];\n}\n\nexport const PackageDependencyDescriptorUtils: PackageDependencyDescriptorUtils =\n {\n make: (descriptor, selector) => {\n return { key: descriptor.key, name: descriptor.name, selector };\n },\n parse: (dependencyKey, dependencyValue) => {\n const [name, selector] = dependencyValue.startsWith(\"npm:\")\n ? (() => {\n const v = dependencyValue.slice(\"npm:\".length);\n if (!v.startsWith(\"@\")) return v.split(\"@\", 2) as [string, string];\n const [packageNameWithoutFirstChar, selector] = v\n .slice(1)\n .split(\"@\", 2);\n if (!packageNameWithoutFirstChar || !selector) {\n throw new Error(`Invalid package descriptor: ${dependencyValue}`);\n }\n return [`@${packageNameWithoutFirstChar}`, selector];\n })()\n : [dependencyKey, dependencyValue];\n\n return {\n key: dependencyKey,\n name: PackageDescriptorNameUtils.parse(name),\n selector,\n };\n },\n stringify: (descriptor) => {\n return [descriptor.key, descriptor.selector];\n },\n };\n\n// export const PackageDependencySelectorUtils;\n","import path from \"node:path\";\nimport { getMapArrayItemForKey } from \"./mapUtils.ts\";\nimport type { PackageDependencyDescriptor } from \"./packageDependenciesUtils.ts\";\nimport {\n PackageDependencyDescriptorUtils,\n PackageDescriptorNameUtils,\n} from \"./packageDependenciesUtils.ts\";\nimport type { ProjectWorkspace, Workspace } from \"./packageUtils.ts\";\n\nconst allDependenciesTypes = [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n] as const;\nexport type DependencyType = (typeof allDependenciesTypes)[number];\n\nexport const getWorkspaceName = (workspace: Workspace): string => {\n return (\n workspace.pkg.name ?? (path.basename(workspace.cwd) || \"unnamed-workspace\")\n );\n};\n\ntype WorkspacesDependenciesMap = Map<\n Workspace,\n [Workspace, DependencyType, PackageDependencyDescriptor][]\n>;\n\nexport const buildDependentsMaps = (\n project: ProjectWorkspace,\n): WorkspacesDependenciesMap => {\n const dependentsMap: WorkspacesDependenciesMap = new Map<\n Workspace,\n [Workspace, DependencyType, PackageDependencyDescriptor][]\n >();\n\n // Note that we need to do this before applying the new versions,\n // otherwise the `findWorkspacesByDescriptor` calls won't be able to\n // resolve the workspaces anymore (because the workspace versions will\n // have changed and won't match the outdated dependencies).\n\n for (const [, dependent] of project.children) {\n for (const set of allDependenciesTypes) {\n for (const [dependencyKey, dependencyValue] of Object.entries(\n dependent.pkg[set] || {},\n )) {\n if (!dependencyValue) continue;\n const descriptor = PackageDependencyDescriptorUtils.parse(\n dependencyKey,\n dependencyValue,\n );\n const workspace = project.children.get(\n PackageDescriptorNameUtils.stringify(descriptor.name),\n );\n if (!workspace) continue;\n\n const dependents = getMapArrayItemForKey(dependentsMap, workspace);\n dependents.push([dependent, set, descriptor]);\n }\n }\n }\n\n return dependentsMap;\n};\n\nexport const buildDependenciesMaps = (\n project: ProjectWorkspace,\n): WorkspacesDependenciesMap => {\n const dependenciesMap: WorkspacesDependenciesMap = new Map<\n Workspace,\n [Workspace, DependencyType, PackageDependencyDescriptor][]\n >();\n\n // Note that we need to do this before applying the new versions,\n // otherwise the `findWorkspacesByDescriptor` calls won't be able to\n // resolve the workspaces anymore (because the workspace versions will\n // have changed and won't match the outdated dependencies).\n\n for (const dependent of project.children.values()) {\n for (const set of allDependenciesTypes) {\n for (const [dependencyKey, dependencyValue] of Object.entries(\n dependent.pkg[set] || {},\n )) {\n if (!dependencyValue) continue;\n const descriptor = PackageDependencyDescriptorUtils.parse(\n dependencyKey,\n dependencyValue,\n );\n\n const workspace = project.children.get(\n PackageDescriptorNameUtils.stringify(descriptor.name),\n );\n if (!workspace) continue;\n\n const dependencies = getMapArrayItemForKey(dependenciesMap, dependent);\n dependencies.push([workspace, set, descriptor]);\n }\n }\n }\n\n return dependenciesMap;\n};\n\nexport const buildTopologicalOrderBatches = (\n project: ProjectWorkspace,\n dependenciesMap: WorkspacesDependenciesMap,\n): Workspace[][] => {\n const batches: Workspace[][] = [];\n\n const added = new Set<Workspace>();\n const toAdd = new Set<Workspace>([\n project.root,\n ...project.children.values(),\n ]);\n\n while (toAdd.size > 0) {\n const batch = new Set<Workspace>();\n for (const workspace of toAdd) {\n // make sure top level workspace is always in the last batch\n if (workspace === project.root && toAdd.size > 1) {\n continue;\n }\n\n const dependencies = dependenciesMap.get(workspace);\n if (!dependencies || dependencies.every((w) => added.has(w[0]))) {\n batch.add(workspace);\n }\n }\n\n for (const workspace of batch) {\n added.add(workspace);\n toAdd.delete(workspace);\n }\n\n if (batch.size === 0) {\n throw new Error(\"Circular dependency detected\");\n }\n batches.push([...batch]);\n }\n\n return batches;\n};\n","import semver from \"semver\";\nimport { UsageError } from \"./UsageError.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\nimport { getWorkspaceName } from \"./workspaceUtils.ts\";\n\nexport type BumpType = \"major\" | \"minor\" | \"patch\";\n\n// https://github.com/yarnpkg/berry/blob/506ded5f5f5a89553435940c74f1d857fd685a42/packages/plugin-version/sources/versionUtils.ts#L10\n// Basically we only support auto-upgrading the ranges that are very simple (^x.y.z, ~x.y.z, >=x.y.z, and of course x.y.z)\nconst SUPPORTED_UPGRADE_REGEXP =\n // oxlint-disable-next-line regexp/no-unused-capturing-group\n /^((?:>=|[~^])?)(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*)(\\.(0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*))*)?(\\+[0-9a-z-]+(\\.[0-9a-z-]+)*)?$/i;\n\nconst yarnWorkspaceProtocol = \"workspace:\";\n\nexport const calcBumpRange = (\n workspace: Workspace,\n range: string,\n newVersion: string,\n): string => {\n if (range === \"*\") {\n return range;\n }\n\n let useWorkspaceProtocol = false;\n\n if (range.startsWith(yarnWorkspaceProtocol)) {\n const slicedRange = range.slice(yarnWorkspaceProtocol.length);\n\n // Workspaces referenced through their path never get upgraded (\"workspace:packages/yarnpkg-core\")\n if (slicedRange === workspace.relativeCwd) {\n return range;\n }\n\n if (slicedRange === \"*\" || slicedRange === \"^\" || slicedRange === \"~\") {\n return range;\n }\n\n range = slicedRange;\n useWorkspaceProtocol = true;\n }\n\n const parsed = SUPPORTED_UPGRADE_REGEXP.exec(range);\n if (!parsed) {\n const workspaceName = getWorkspaceName(workspace);\n throw new Error(`Couldn't bump range ${range} in ${workspaceName}`);\n }\n\n return `${useWorkspaceProtocol ? yarnWorkspaceProtocol : \"\"}${parsed[1] ?? \"\"}${newVersion}`;\n};\n\nexport const getHighestBumpType = (bumpTypes: BumpType[]): BumpType => {\n if (bumpTypes.includes(\"major\")) {\n return \"major\";\n }\n\n if (bumpTypes.includes(\"minor\")) {\n return \"minor\";\n }\n\n return \"patch\";\n};\n\nexport const calcBumpType = (\n bumpType: BumpType,\n maxBumpType: BumpType,\n): BumpType => {\n if (maxBumpType === \"major\") {\n return bumpType;\n }\n\n if (maxBumpType === \"minor\") {\n return bumpType === \"major\" || bumpType === \"minor\" ? \"minor\" : \"patch\";\n }\n\n return \"patch\";\n};\n\nconst incVersion = (version: string, bumpType: BumpType): string | null => {\n // handle breaking of 0.x\n if (bumpType === \"major\" && semver.major(version) === 0) {\n bumpType = \"minor\";\n }\n return semver.inc(version, bumpType);\n};\n\nexport const incrementVersion = (\n workspace: Workspace,\n currentVersion: string,\n bumpType: BumpType,\n): string => {\n const newVersion = incVersion(currentVersion, bumpType);\n\n if (!newVersion) {\n throw new UsageError(\n `Could not determine next version for \"${getWorkspaceName(\n workspace,\n )}\" (currentVersion: ${currentVersion}, bumpType: ${bumpType}})`,\n );\n }\n\n return newVersion;\n};\n\n// const createPrerelease = (\n// version: string,\n// prereleaseType: ReleaseType,\n// prereleaseId: string,\n// ) => {\n// return semver.inc(version, prereleaseType, prereleaseId);\n// };\n","import { writeChangelogString } from \"conventional-changelog-writer\";\nimport { parseCommits as createConventionalCommitsParser } from \"conventional-commits-parser\";\nimport type { Commit, ParserStreamOptions } from \"conventional-commits-parser\";\nimport type { PackageJson } from \"type-fest\";\nimport type { ConventionalChangelogConfig } from \"./conventionalCommitConfigUtils.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport interface WhatBump {\n level: 0 | 1 | 2;\n reason: string;\n}\nexport type WhatBumpResult = WhatBump | null | undefined;\nexport interface BumperRecommendation extends WhatBump {\n releaseType: \"major\" | \"minor\" | \"patch\";\n commits: Commit[];\n}\nexport interface EmptyBumperRecommendation {\n commits: Commit[];\n}\nexport type BumperRecommendationResult =\n | BumperRecommendation\n | EmptyBumperRecommendation;\n\nexport interface Preset {\n whatBump: (commits: Commit[]) => Promise<WhatBumpResult> | WhatBumpResult;\n tags?: unknown;\n commits?: unknown;\n parser?: ParserStreamOptions;\n}\n\nconst versions: BumperRecommendation[\"releaseType\"][] = [\n \"major\",\n \"minor\",\n \"patch\",\n];\n\nexport const recommendBump = async (\n commits: Parameters<ConventionalChangelogConfig[\"whatBump\"]>[0],\n config: ConventionalChangelogConfig,\n): Promise<Partial<BumperRecommendation>> => {\n const whatBump = config.whatBump;\n if (!whatBump) {\n throw new Error(\"whatBump method is missing in config\");\n }\n const result = { ...(await whatBump(commits)) };\n\n return {\n ...result,\n releaseType: result.level != null ? versions[result.level] : undefined,\n };\n};\n\nexport type Commits = Parameters<ConventionalChangelogConfig[\"whatBump\"]>[0];\n\n// oxlint-disable-next-line max-params\nexport const generateChangelog = (\n workspace: Workspace,\n pkg: PackageJson,\n config: ConventionalChangelogConfig,\n previousTag: string | null,\n newTag: string | null,\n commits: Commits | undefined,\n date: string,\n): Promise<string> => {\n if (!newTag) {\n throw new Error(`Missing new tag for package \"${pkg.name ?? \"\"}\"`);\n }\n\n const originUrl =\n typeof pkg.repository === \"string\" ? pkg.repository : pkg.repository?.url;\n const match =\n originUrl &&\n typeof originUrl === \"string\" &&\n /^(?:git@|https?:\\/\\/)(?:([^./:]+(?:\\.com)?)[/:])?([^/:]+)\\/([^./:]+)(?:.git)?/.exec(\n originUrl,\n );\n const [, gitHost, gitAccount, repoName] = match || [\n undefined,\n undefined,\n undefined,\n undefined,\n ];\n\n return writeChangelogString(\n commits ?? [],\n {\n // @ts-expect-error - missing types\n previousTag,\n currentTag: newTag,\n linkCompare: previousTag != null,\n version: pkg.version,\n host: gitHost ? `https://${gitHost}` : undefined,\n owner: gitAccount,\n repository: repoName,\n date,\n },\n // @ts-expect-error - missing types\n config.writer,\n );\n};\n\nexport const createCommitsParser = (config: ConventionalChangelogConfig) => {\n return createConventionalCommitsParser(config.parser);\n};\n","import { loadPreset } from \"conventional-changelog-preset-loader\";\nimport { UsageError } from \"./UsageError.ts\";\nimport type { Preset } from \"./conventionalChangelogUtils.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport type ConventionalChangelogConfig = Preset;\n\nexport const loadConventionalCommitConfig = async (\n rootWorkspace: Workspace,\n preset: string,\n): Promise<ConventionalChangelogConfig> => {\n try {\n return await loadPreset<ConventionalChangelogConfig>(preset);\n } catch (error: any) {\n throw new UsageError(\n `Failed to require preset \"${preset}\": ${error.message as string}`,\n );\n }\n};\n","export async function asyncIterableToArray<T>(\n asyncIterable: AsyncIterable<T>,\n): Promise<T[]> {\n const result: T[] = [];\n\n for await (const value of asyncIterable) {\n result.push(value);\n }\n\n return result;\n}\n","import semver from \"semver\";\nimport { UsageError } from \"./UsageError.ts\";\nimport { execCommand, execCommandStreamStdout } from \"./execCommand.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport const getGitCurrentBranch = async (\n workspace: Workspace,\n): Promise<string> => {\n const { stdout } = await execCommand(workspace, [\n \"git\",\n \"rev-parse\",\n \"--abbrev-ref\",\n \"HEAD\",\n ]);\n const currentBranch = stdout.trim();\n\n if (currentBranch === \"HEAD\") {\n throw new UsageError(\"HEAD is detached. Please checkout a branch.\");\n }\n\n return currentBranch;\n};\n\nexport const createGitCommit = async (\n workspace: Workspace,\n commitMessage: string,\n): Promise<void> => {\n await execCommand(workspace, [\"git\", \"add\", \"-A\"]);\n\n await execCommand(workspace, [\n \"git\",\n \"commit\",\n \"--no-verify\",\n \"-m\",\n commitMessage,\n ]);\n};\n\nexport const createGitTag = async (\n workspace: Workspace,\n newTag: string,\n): Promise<void> => {\n await execCommand(workspace, [\"git\", \"tag\", newTag, \"-m\", newTag]);\n};\n\nexport const pushCommitsAndTags = async (\n workspace: Workspace,\n gitRemote: string,\n currentBranch: string,\n): Promise<void> => {\n await execCommand(workspace, [\n \"git\",\n \"push\",\n \"--follow-tags\",\n \"--no-verify\",\n \"--atomic\",\n gitRemote,\n currentBranch,\n ]);\n};\n\nexport const isBehindRemote = async (\n workspace: Workspace,\n gitRemote: string,\n currentBranch: string,\n): Promise<boolean> => {\n await execCommand(workspace, [\"git\", \"remote\", \"update\", gitRemote]);\n const { stdout } = await execCommand(workspace, [\n \"git\",\n \"rev-list\",\n \"--left-right\",\n \"--count\",\n `${gitRemote}/${currentBranch}..${currentBranch}`,\n ]);\n\n const [behind] = stdout.split(\"\\t\").map((val) => parseInt(val, 10));\n\n return behind ? behind > 0 : false;\n};\n\nexport const getDirtyFiles = async (workspace: Workspace): Promise<string> => {\n const { stdout: dirtyFiles } = await execCommand(workspace, [\n \"git\",\n \"status\",\n \"--porcelain\",\n ]);\n return dirtyFiles;\n};\n\nconst toArray = <T>(input: T | T[]): T[] =>\n Array.isArray(input) ? input : [input];\n\nexport interface GitTagVersion {\n tag: string;\n version: string;\n}\n\nexport const getGitLatestTagVersion = async (\n workspace: Workspace,\n {\n prefix,\n skipUnstable,\n since,\n from = \"\",\n to = \"HEAD\",\n path,\n }: {\n prefix?: string;\n skipUnstable?: boolean;\n since?: Date | string;\n from?: string;\n to?: string;\n path?: string[] | string;\n } = {},\n): Promise<GitTagVersion | null> => {\n // oxlint-disable-next-line regexp/no-super-linear-backtracking\n const tagRegex = /tag:\\s*(.+?)[,)]/gi;\n for await (const chunk of execCommandStreamStdout(workspace, [\n \"git\",\n \"log\",\n \"--no-color\",\n \"--date-order\",\n \"--format=%d\",\n ...(since\n ? [`--since=${since instanceof Date ? since.toISOString() : since}`]\n : []),\n [from, to].filter(Boolean).join(\"..\"),\n ...(path ? [\"--\", ...toArray(path)] : []),\n ])) {\n const trimmed = chunk.trim();\n if (!trimmed) continue;\n const matches = trimmed.matchAll(tagRegex);\n for (const match of matches) {\n const tag = match[1];\n if (!tag) continue;\n if (prefix && !tag.startsWith(prefix)) {\n continue;\n }\n const version = prefix ? tag.slice(prefix.length) : tag;\n if (!semver.valid(version)) {\n continue;\n }\n if (skipUnstable && semver.prerelease(version)) {\n continue;\n }\n return { tag, version };\n }\n }\n\n return null;\n};\n\nconst GIT_COMMIT_SEPARATOR =\n \"------------------------ >8 ------------------------\";\n\nexport const getGitCommits = (\n workspace: Workspace,\n {\n path,\n from = \"\",\n to = \"HEAD\",\n format = \"%B\",\n reverse,\n merges,\n since,\n }: {\n format?: string;\n path?: string[] | string;\n from?: string;\n to?: string;\n reverse?: boolean;\n merges?: boolean;\n since?: Date | string;\n } = {},\n) => {\n return execCommandStreamStdout(\n workspace,\n [\n \"git\",\n \"log\",\n `--format=${format}%n${GIT_COMMIT_SEPARATOR}`,\n ...(since\n ? [`--since=${since instanceof Date ? since.toISOString() : since}`]\n : []),\n ...(reverse ? [\"--reverse\"] : []),\n ...(merges ? [\"--merges\"] : []),\n ...(merges === false ? [\"--no-merges\"] : []),\n [from, to].filter(Boolean).join(\"..\"),\n ...(path ? [\"--\", ...toArray(path)] : []),\n ],\n GIT_COMMIT_SEPARATOR,\n );\n};\n","import { UsageError } from \"./UsageError.ts\";\nimport { execCommandWithInput } from \"./execCommand.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport async function ensureGhCliAvailable(\n workspace: Workspace,\n): Promise<void> {\n const { GH_TOKEN } = process.env;\n\n if (!GH_TOKEN) {\n throw new UsageError('\"GH_TOKEN\" environment variable required');\n }\n\n try {\n // Use existing execCommand helper pattern by spawning gh --version\n // We import execCommand lazily to avoid cycles when utils are used elsewhere\n const { execCommand } = await import(\"./execCommand.ts\");\n await execCommand(workspace, [\"gh\", \"--version\"]);\n } catch {\n throw new UsageError(\n 'The \"gh\" CLI is required. Please install GitHub CLI: https://cli.github.com/',\n );\n }\n}\n\ninterface ParsedGithubUrl {\n username: string;\n reponame: string;\n}\n\nconst githubRegex = /^https?:\\/\\/github.com\\/([^#/]+)\\/([^#/]+?)(?:\\.git)?$/;\nexport const parseGithubRepoUrl = (workspace: Workspace): ParsedGithubUrl => {\n const repository = workspace.pkg.repository;\n\n const url: string | undefined =\n typeof repository === \"string\" ? repository : repository?.url;\n\n if (!url) {\n throw new Error(\n \"No repository URL found in manifest. Please add one and try again. https://docs.npmjs.com/cli/v9/configuring-npm/package-json#repository\",\n );\n }\n const match = githubRegex.exec(url);\n\n if (!match) {\n throw new Error(`Invalid GitHub repository URL: \"${url}\"`);\n }\n const [, username, reponame] = match;\n if (!username || !reponame) {\n throw new Error(`Invalid GitHub repository URL: \"${url}\"`);\n }\n return { username, reponame };\n};\n\nconst extractHostnameFromGheApiUrl = (gheApiUrl: string): string | null => {\n try {\n const url = new URL(gheApiUrl);\n return url.hostname || null;\n } catch {\n // fallback: try to strip protocol and path\n const m = /^https?:\\/\\/([^/]+)/.exec(gheApiUrl);\n return m?.[1] || null;\n }\n};\n\nexport const createGhRelease = async (\n workspace: Workspace,\n opts: {\n parsedRepoUrl: ParsedGithubUrl;\n tag: string;\n title: string; // title is not necessary but slack release bot shows \"undefined\" if not provided\n body: string;\n prerelease: boolean;\n },\n): Promise<void> => {\n const { parsedRepoUrl, tag, title, body, prerelease } = opts;\n\n const { GH_TOKEN, GHE_API_URL } = process.env;\n\n if (!GH_TOKEN) {\n await ensureGhCliAvailable(workspace);\n return;\n }\n\n // Determine hostname for GHE if provided\n const args: string[] = [\n \"release\",\n \"create\",\n tag,\n \"--title\",\n title,\n \"--repo\",\n `${parsedRepoUrl.username}/${parsedRepoUrl.reponame}`,\n ];\n\n if (prerelease) {\n args.push(\"--prerelease\");\n }\n\n if (GHE_API_URL) {\n const hostname = extractHostnameFromGheApiUrl(GHE_API_URL);\n if (hostname) {\n args.push(\"--hostname\", hostname);\n }\n }\n\n try {\n await execCommandWithInput(\n workspace,\n [\"gh\", ...args, \"--notes-file\", \"-\"],\n body,\n );\n } catch (error) {\n // execCommandWithInput will include stdout/stderr in its error message when strict\n throw new Error(\n `gh release create failed: ${String(error instanceof Error ? error.message : error)}`,\n { cause: error },\n );\n }\n};\n","/* oxlint-disable no-use-before-define */\nimport fs, { glob } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { PackageJson } from \"type-fest\";\n\nexport interface Workspace {\n readonly cwd: string;\n readonly relativeCwd?: string;\n readonly pkg: PackageJson;\n}\n\nexport interface ProjectWorkspace {\n readonly root: Workspace;\n readonly children: Map<string, Workspace>;\n}\n\nasync function mapWorkspacesFromPkg({\n cwd,\n pkg,\n}: {\n cwd: string;\n pkg: PackageJson;\n}): Promise<Map<string, Workspace>> {\n const workspacesPatterns: string[] = Array.isArray(pkg.workspaces)\n ? pkg.workspaces\n : pkg.workspaces?.packages || [];\n\n const map = new Map<string, Workspace>();\n\n for (const pattern of workspacesPatterns) {\n const normalized = pattern.endsWith(\"package.json\")\n ? pattern\n : `${pattern.replace(/\\/*$/, \"\")}/package.json`;\n\n const files = glob(normalized, { cwd });\n for await (const file of files) {\n const packageDir = path.join(cwd, path.dirname(file));\n const packageJson: PackageJson = await readPkg(packageDir);\n const workspaceName = packageJson.name || path.basename(packageDir);\n if (map.has(workspaceName)) {\n const existingWorkspace = map.get(workspaceName);\n if (existingWorkspace && existingWorkspace.cwd !== packageDir) {\n throw new Error(\n `must not have multiple workspaces with the same name\\npackage '${workspaceName}' has conflicts in the following paths:\\n ${existingWorkspace.cwd}\\n ${packageDir}`,\n );\n }\n // if it's the same package dir, ignore duplicate match\n if (existingWorkspace?.cwd === packageDir) continue;\n }\n map.set(workspaceName, { cwd: packageDir, pkg: packageJson });\n }\n }\n return map;\n}\n\nexport const createProjectWorkspace = async (\n root: Workspace,\n): Promise<ProjectWorkspace> => {\n const map: Map<string, Workspace> = root.pkg.workspaces\n ? await mapWorkspacesFromPkg({ cwd: root.cwd, pkg: root.pkg })\n : new Map();\n\n const children = new Map<string, Workspace>(\n [...map.entries()].map(([packageName, workspace]) => {\n const w: Workspace = {\n ...workspace,\n relativeCwd: path.relative(root.cwd, workspace.cwd),\n };\n return [packageName, w] as const;\n }),\n );\n return { root, children };\n};\n\nconst isAccessible = (path: string): Promise<boolean> =>\n fs.access(path).then(\n () => true,\n () => false,\n );\n\nexport const findRootWorkspace = async (\n cwd: string,\n): Promise<Workspace | null> => {\n let currentPath = cwd;\n do {\n const isRootIfOneOfThesePathsExists = await Promise.all([\n isAccessible(path.join(currentPath, \".yarnrc.yml\")),\n isAccessible(path.join(currentPath, \"yarn.lock\")),\n isAccessible(path.join(currentPath, \"bun.lock\")),\n isAccessible(path.join(currentPath, \"pnpm-lock.yaml\")),\n ]);\n if (isRootIfOneOfThesePathsExists.some(Boolean)) {\n return createWorkspace(currentPath);\n }\n currentPath = path.dirname(currentPath);\n } while (currentPath && currentPath !== \"/\");\n return null;\n};\n\nconst getPackageJsonPath = (cwd: string): string =>\n path.join(cwd, \"package.json\");\n\nexport const createWorkspace = async (path: string): Promise<Workspace> => {\n const pkg = await readPkg(path);\n return { cwd: path, pkg };\n};\n\nexport async function writePkg(workspace: Workspace): Promise<void> {\n const string = `${JSON.stringify(workspace.pkg, null, 2)}\\n`;\n await fs.writeFile(getPackageJsonPath(workspace.cwd), string, \"utf8\");\n}\n\nexport async function readPkg(cwd: string): Promise<PackageJson> {\n const packagePath = getPackageJsonPath(cwd);\n // oxlint-disable-next-line typescript/use-unknown-in-catch-callback-variable\n const pkg = await fs.readFile(packagePath, \"utf8\").catch((error: Error) => {\n throw new Error(\n `Failed to read \"${packagePath}\": ${error instanceof Error ? error.message : String(error)}`,\n );\n });\n try {\n return JSON.parse(pkg);\n } catch (error: unknown) {\n throw new Error(\n `Failed to parse \"${packagePath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error },\n );\n }\n}\n","import fs from \"node:fs/promises\";\n\nconst COMMIT_GUIDELINE =\n \"See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\";\n\nconst CHANGELOG_HEADER = [\n \"# Changelog\",\n \"\",\n \"All notable changes to this project will be documented in this file.\",\n COMMIT_GUIDELINE,\n \"\",\n].join(\"\\n\");\n\nexport const updateChangelogFile = async (\n versionChangelogContent: string,\n tagPrefix: string,\n file = \"CHANGELOG.md\",\n): Promise<void> => {\n const START_OF_LAST_RELEASE_PATTERN = new RegExp(\n `(^#+ \\\\[?(?:${tagPrefix})?\\\\d+\\\\.\\\\d+\\\\.\\\\d+|<a name=)`,\n \"m\",\n );\n\n let oldContent = \"\";\n\n try {\n oldContent = await fs.readFile(file, \"utf8\");\n const oldContentStart = oldContent.search(START_OF_LAST_RELEASE_PATTERN);\n // find the position of the last release and remove header:\n if (oldContentStart !== -1) {\n oldContent = oldContent.slice(Math.max(0, oldContentStart));\n }\n } catch {}\n\n await fs.writeFile(\n file,\n `${CHANGELOG_HEADER}\\n${versionChangelogContent}\\n${oldContent}`,\n );\n};\n","/* oxlint-disable complexity */\n\nimport { Option, program } from \"commander\";\nimport { LoggerCLI } from \"nightingale\";\nimport { gt, satisfies } from \"semver\";\nimport {\n autoDetectPackageManager,\n getPackageManager,\n} from \"../pm/PackageManager.ts\";\nimport { UsageError } from \"../utils/UsageError.ts\";\nimport type { BumpType } from \"../utils/bumpTypeUtils.ts\";\nimport {\n calcBumpRange,\n calcBumpType,\n getHighestBumpType,\n incrementVersion,\n} from \"../utils/bumpTypeUtils.ts\";\nimport {\n createCommitsParser,\n generateChangelog,\n recommendBump,\n} from \"../utils/conventionalChangelogUtils.ts\";\nimport { loadConventionalCommitConfig } from \"../utils/conventionalCommitConfigUtils.ts\";\nimport { asyncIterableToArray } from \"../utils/generatorUtils.ts\";\nimport type { GitTagVersion } from \"../utils/gitUtils.ts\";\nimport {\n createGitCommit,\n createGitTag,\n getDirtyFiles,\n getGitCommits,\n getGitCurrentBranch,\n getGitLatestTagVersion,\n isBehindRemote,\n pushCommitsAndTags,\n} from \"../utils/gitUtils.ts\";\nimport {\n createGhRelease,\n ensureGhCliAvailable,\n parseGithubRepoUrl,\n} from \"../utils/githubUtils.ts\";\nimport {\n PackageDependencyDescriptorUtils,\n PackageDescriptorNameUtils,\n} from \"../utils/packageDependenciesUtils.ts\";\nimport type { PackageDependencyDescriptor } from \"../utils/packageDependenciesUtils.ts\";\nimport type { Workspace } from \"../utils/packageUtils.ts\";\nimport {\n createProjectWorkspace,\n createWorkspace,\n findRootWorkspace,\n writePkg,\n} from \"../utils/packageUtils.ts\";\nimport { updateChangelogFile } from \"../utils/updateChangelog.ts\";\nimport type { DependencyType } from \"../utils/workspaceUtils.ts\";\nimport {\n buildDependenciesMaps,\n buildTopologicalOrderBatches,\n getWorkspaceName,\n} from \"../utils/workspaceUtils.ts\";\n\nexport interface VersionCommandOptions {\n cwd: string;\n includesRoot: boolean;\n dryRun: boolean;\n force?: \"major\" | \"minor\" | \"patch\";\n prerelease?: string;\n json: boolean;\n preset: string;\n tagVersionPrefix: string;\n changelog: string;\n commitMessage: string;\n createRelease: boolean;\n bumpDependentsHighestAs: \"major\" | \"minor\" | \"patch\";\n alwaysBumpPeerDependencies: boolean;\n gitRemote: string;\n ignoreChanges?: string;\n verbose?: boolean;\n cwdIsRoot?: boolean;\n packageManager?: \"bun\" | \"yarn\";\n publish?: boolean;\n publishProvenance?: boolean;\n}\n\ninterface BumpableWorkspace {\n workspace: Workspace;\n previousTag?: string;\n workspaceName: string;\n isRoot: boolean;\n version: string;\n}\n\ninterface ChangedWorkspace {\n bumpReason?: string;\n bumpType: BumpType;\n}\n\ninterface NoVersionToUpdateWorkspace {\n // for legacy configuration not using workspaces ranges https://yarnpkg.com/features/workspaces#workspace-ranges-workspace\n dependenciesToBump: [DependencyType, PackageDependencyDescriptor, string][];\n}\n\ninterface BumpedWorkspace extends ChangedWorkspace, NoVersionToUpdateWorkspace {\n bumpForDependenciesReasons?: string[];\n hasChanged: boolean;\n currentVersion: string;\n newVersion: string;\n newTag: string | null;\n}\n\nconst todayInYYYYMMDD = (): string => {\n // sv-SEis used for yyyy-mm-dd format\n const dateFormatter = Intl.DateTimeFormat(\"sv-SE\", {\n timeZone: \"UTC\",\n });\n return dateFormatter.format(new Date());\n};\n\nexport const versionCommandAction = async (\n options: VersionCommandOptions,\n { logger = new LoggerCLI(\"@pob/version\", { json: options.json }) } = {},\n): Promise<void> => {\n const rootWorkspace = await (options.cwdIsRoot\n ? createWorkspace(options.cwd)\n : findRootWorkspace(options.cwd));\n\n if (!rootWorkspace) {\n throw new UsageError(\"Could not find root workspace from this path.\");\n }\n\n const packageManager = options.packageManager\n ? getPackageManager(rootWorkspace, options.packageManager)\n : autoDetectPackageManager(rootWorkspace);\n\n const project = await createProjectWorkspace(rootWorkspace);\n\n if (!options.dryRun) {\n const dirtyFiles = await getDirtyFiles(project.root);\n if (dirtyFiles) {\n throw new Error(\n `Dirty Files:\\n${dirtyFiles}\\n\\nThere are uncommitted changes in the git repository. Please commit or stash them first.`,\n );\n }\n }\n\n const rootWorkspaceChildren = [...project.children.values()];\n let rootNewVersion = \"\";\n let rootNewTag = \"\";\n const isMonorepo = rootWorkspaceChildren.length > 0;\n const isMonorepoVersionIndependent = isMonorepo && !rootWorkspace.pkg.version;\n const workspaces =\n !(isMonorepo && !rootWorkspaceChildren) || options.includesRoot\n ? [rootWorkspace, ...rootWorkspaceChildren]\n : rootWorkspaceChildren;\n\n if (options.prerelease) {\n throw new UsageError(\"--prerelease is not supported yet.\");\n }\n if (options.ignoreChanges) {\n throw new UsageError(\"--ignore-changes is not supported yet.\");\n }\n\n const [conventionalCommitConfig, parsedRepoUrl, gitCurrentBranch] =\n await Promise.all([\n loadConventionalCommitConfig(rootWorkspace, options.preset),\n options.createRelease\n ? parseGithubRepoUrl(rootWorkspace)\n : Promise.resolve(null),\n getGitCurrentBranch(rootWorkspace),\n // ensure gh CLI is available early to fail fast if necessary\n options.createRelease\n ? ensureGhCliAvailable(rootWorkspace)\n : Promise.resolve(undefined),\n ]);\n\n const rootPreviousVersionTagPromise =\n options.force || isMonorepoVersionIndependent\n ? null\n : getGitLatestTagVersion(rootWorkspace, {\n prefix: options.tagVersionPrefix,\n skipUnstable: true,\n });\n\n const buildTagName = (workspace: Workspace, version: string): string =>\n `${\n isMonorepo && workspace !== rootWorkspace\n ? `${getWorkspaceName(workspace)}@`\n : options.tagVersionPrefix\n }${version}`;\n\n const changedWorkspaces = new Map<Workspace, ChangedWorkspace>();\n const dependenciesMap = isMonorepo ? buildDependenciesMaps(project) : null;\n\n const bumpableWorkspaces: BumpableWorkspace[] = [];\n\n logger.group(\n options.force\n ? \"Check all workspaces (force option)\"\n : \"Finding changed workspaces\",\n () => {\n // check workspaces and create bumpableWorkspaces\n\n for (const workspace of workspaces) {\n const workspaceName = getWorkspaceName(workspace);\n const isRoot = workspace === rootWorkspace;\n if (isRoot && isMonorepo && isMonorepoVersionIndependent) continue;\n\n const version = workspace.pkg.version;\n\n if (!version || version === \"0.0.0\") {\n if (\n (isRoot || isMonorepoVersionIndependent) &&\n (!isMonorepo || !isMonorepoVersionIndependent)\n ) {\n throw new UsageError(\n 'package.json has no version in its manifest. For the first release, set to \"1.0.0-pre\" or \"0.1.0-pre\".',\n );\n }\n\n logger.info(`${workspaceName}: skipped (no version)`);\n continue;\n }\n\n bumpableWorkspaces.push({\n workspace,\n workspaceName,\n isRoot,\n version,\n });\n }\n\n if (bumpableWorkspaces.length > 0) {\n logger.info(\"Found bumpable workspaces\", {\n count: bumpableWorkspaces.length,\n });\n }\n },\n );\n\n const previousTagVersionByWorkspace = new Map<\n Workspace,\n GitTagVersion | null\n >(\n await Promise.all(\n bumpableWorkspaces.map(async ({ workspace, workspaceName, isRoot }) => {\n const packageOption =\n isMonorepo && isMonorepoVersionIndependent\n ? workspaceName\n : undefined;\n\n const tagPrefix = packageOption\n ? `${packageOption}@`\n : options.tagVersionPrefix;\n\n const previousTagAndVersion = await (isRoot ||\n !isMonorepoVersionIndependent\n ? rootPreviousVersionTagPromise\n : getGitLatestTagVersion(rootWorkspace, {\n path: workspace.relativeCwd,\n prefix: tagPrefix,\n skipUnstable: true,\n }));\n\n return [workspace, previousTagAndVersion] as const;\n }),\n ),\n );\n\n if (options.dryRun) {\n logger.info(\"Previous tags\", {\n previousTagByWorkspace: Object.fromEntries(\n [...previousTagVersionByWorkspace.entries()].map(\n ([workspace, previousTagVersion]) => [\n getWorkspaceName(workspace),\n previousTagVersion?.tag,\n ],\n ),\n ),\n });\n }\n\n const parseCommits = createCommitsParser(conventionalCommitConfig);\n\n const commitsByWorkspace = options.force\n ? undefined\n : new Map(\n await Promise.all(\n bumpableWorkspaces.map(async ({ workspace }) => {\n const previousTagVersion =\n previousTagVersionByWorkspace.get(workspace);\n\n const commits = await asyncIterableToArray(\n parseCommits(\n getGitCommits(rootWorkspace, {\n path: workspace.relativeCwd,\n from: previousTagVersion?.tag || undefined,\n }),\n ),\n );\n\n return [workspace, commits] as const;\n }),\n ),\n );\n\n await logger.group(\"Finding changed workspaces\", async () => {\n for (const { workspace, workspaceName } of bumpableWorkspaces) {\n let bumpType: BumpType | null = null;\n let bumpReason: string | undefined;\n\n if (options.force) {\n bumpType = options.force;\n bumpReason = \"forced by --force flag\";\n } else {\n const commits = commitsByWorkspace?.get(workspace);\n\n // No changes found for this package\n if (!commits || commits.length === 0) {\n logger.info(`${workspaceName}: skipped (no changes)`);\n continue;\n }\n\n const { releaseType, reason } = await recommendBump(\n commits,\n conventionalCommitConfig,\n );\n bumpReason = reason;\n\n if (releaseType) {\n bumpType = releaseType satisfies BumpType;\n }\n }\n\n if (bumpType) {\n if (isMonorepo && !workspace.pkg.name) {\n throw new Error(\"Workspace name is required\");\n }\n\n const currentVersion = workspace.pkg.version;\n\n if (!currentVersion) {\n throw new UsageError(\n `Invalid \"${getWorkspaceName(workspace)}\" version`,\n );\n }\n\n changedWorkspaces.set(workspace, {\n bumpType,\n bumpReason,\n });\n }\n }\n\n if (changedWorkspaces.size === 0) {\n logger.info(\"No changed workspaces\");\n }\n });\n\n const bumpedWorkspaces = new Map<Workspace, BumpedWorkspace>();\n const noVersionToUpdateWorkspaces = new Map<\n Workspace,\n NoVersionToUpdateWorkspace\n >();\n const batches = dependenciesMap\n ? buildTopologicalOrderBatches(project, dependenciesMap)\n : [[rootWorkspace]];\n\n logger.group(\"Preparing bumping\", () => {\n for (const batch of batches) {\n for (const workspace of batch) {\n const currentVersion = workspace.pkg.version;\n\n if (!currentVersion && !workspace.pkg.private) {\n throw new UsageError(\n `Invalid \"${getWorkspaceName(workspace)}\" version`,\n );\n }\n\n const changedWorkspace = changedWorkspaces.get(workspace);\n let bumpType: BumpType | null = null;\n const bumpReasons: string[] = [];\n const dependenciesToBump: BumpedWorkspace[\"dependenciesToBump\"] = [];\n\n if (changedWorkspace) {\n bumpType = changedWorkspace.bumpType;\n bumpReasons.push(changedWorkspace.bumpReason || \"by commits\");\n }\n\n const dependencies = dependenciesMap?.get(workspace);\n\n if (dependencies) {\n for (const [\n dependencyWorkspace,\n dependencyType,\n dependencyDescriptor,\n ] of dependencies) {\n const dependencyBumpedWorkspace =\n bumpedWorkspaces.get(dependencyWorkspace);\n\n if (!dependencyBumpedWorkspace) {\n continue;\n }\n\n if (\n dependencyType === \"peerDependencies\" &&\n !options.alwaysBumpPeerDependencies &&\n // skip when peerdependency with a new version satisfied by the existing range.\n satisfies(\n dependencyBumpedWorkspace.newVersion,\n dependencyDescriptor.selector,\n {\n includePrerelease: true,\n },\n )\n ) {\n continue;\n }\n\n const newRange = calcBumpRange(\n workspace,\n dependencyDescriptor.selector,\n dependencyBumpedWorkspace.newVersion,\n );\n\n if (\n dependencyDescriptor.selector === newRange &&\n newRange !== \"workspace:*\" &&\n newRange !== \"workspace:^\" &&\n newRange !== \"workspace:~\"\n ) {\n continue;\n }\n\n dependenciesToBump.push([\n dependencyType,\n dependencyDescriptor,\n newRange,\n ]);\n\n bumpType = getHighestBumpType([\n bumpType ?? \"patch\",\n calcBumpType(\n dependencyBumpedWorkspace.bumpType,\n options.bumpDependentsHighestAs,\n ),\n ]);\n\n bumpReasons.push(\n `Version bump for dependency: ${PackageDescriptorNameUtils.stringify(dependencyDescriptor.name)}`,\n );\n }\n }\n\n const workspaceName = getWorkspaceName(workspace);\n if (!currentVersion) {\n logger.info(`${workspaceName}: skipped (no version)`);\n if (workspace !== rootWorkspace) {\n noVersionToUpdateWorkspaces.set(workspace, {\n dependenciesToBump,\n });\n }\n } else if (!bumpType) {\n logger.info(\n `${workspaceName}: skipped (${\n changedWorkspace\n ? `no bump recommended by ${options.preset}`\n : \"no changes\"\n })`,\n );\n } else {\n const newVersion = incrementVersion(\n workspace,\n currentVersion,\n bumpType,\n );\n\n const tagName = buildTagName(workspace, newVersion);\n\n if (workspace === rootWorkspace) {\n rootNewVersion = newVersion;\n rootNewTag = tagName;\n }\n\n if (workspace !== rootWorkspace || !isMonorepo) {\n const bumpReason = bumpReasons.join(\"\\n\");\n bumpedWorkspaces.set(workspace, {\n currentVersion,\n bumpType,\n bumpReason,\n bumpForDependenciesReasons: changedWorkspace\n ? bumpReasons.slice(1)\n : bumpReasons,\n newVersion,\n newTag: tagName,\n hasChanged: changedWorkspace !== undefined,\n dependenciesToBump,\n });\n\n logger.info(\n `${workspaceName}: ${currentVersion} -> ${\n !isMonorepo || isMonorepoVersionIndependent\n ? newVersion\n : \"bump\"\n } (${bumpReason.replaceAll(\"\\n\", \" ; \")})`,\n );\n // TODO Json only:\n // logger.info({\n // cwd: npath.fromPortablePath(workspace.cwd),\n // ident: workspaceName,\n // oldVersion: currentVersion,\n // ...(isMonorepoVersionIndependent ? { newVersion } : {}),\n // bumpType,\n // bumpReasons,\n // });\n }\n }\n }\n }\n });\n\n // TODO ask for confirmation\n // if (!this.yes) {\n // }\n\n // TODO do this entire phase here, not override for not independent only\n if (isMonorepo && !isMonorepoVersionIndependent) {\n const currentVersion = rootWorkspace.pkg.version!;\n const highestBumpType = getHighestBumpType(\n [...bumpedWorkspaces.values()].map(({ bumpType }) => bumpType),\n );\n const newVersion = incrementVersion(\n rootWorkspace,\n currentVersion,\n highestBumpType,\n );\n rootNewVersion = newVersion;\n rootNewTag = buildTagName(rootWorkspace, newVersion);\n\n [...bumpedWorkspaces.entries()].forEach(([workspace, bumpedWorkspace]) => {\n const isRoot = workspace === rootWorkspace;\n if (isRoot) {\n throw new Error(\"Unexpected root found in bumped workspaces\");\n }\n if (gt(bumpedWorkspace.currentVersion, newVersion)) {\n throw new UsageError(\n `\"${getWorkspaceName(workspace)}\" is at ${bumpedWorkspace.currentVersion}, higher than the monorepo version ${newVersion} it would be set to.\\nRemove \"version\" from the root package.json for independent versioning, or align the versions.`,\n );\n }\n bumpedWorkspace.bumpType = highestBumpType;\n bumpedWorkspace.newVersion = newVersion;\n bumpedWorkspace.newTag = null;\n });\n\n [\n ...bumpedWorkspaces.entries(),\n ...noVersionToUpdateWorkspaces.entries(),\n ].forEach(([workspace, { dependenciesToBump }]) => {\n dependenciesToBump.forEach((dependencyToBump) => {\n dependencyToBump[2] = calcBumpRange(\n workspace,\n dependencyToBump[1].selector,\n newVersion,\n );\n });\n });\n\n bumpedWorkspaces.set(rootWorkspace, {\n currentVersion,\n bumpType: highestBumpType,\n hasChanged: true,\n newVersion: rootNewVersion,\n newTag: rootNewTag,\n dependenciesToBump: [],\n });\n\n logger.info(\n `${currentVersion} -> ${newVersion}`,\n // TODO Json only:\n // {\n // oldVersion: currentVersion,\n // newVersion, },\n );\n }\n\n await logger.group(\"Applying changes\", async () => {\n // Update lockfile ; must be done to make sure preversion script can be ran\n\n if (!options.dryRun) {\n if (packageManager.installOnPackageContentChange) {\n logger.info(`${getWorkspaceName(rootWorkspace)}: Running install`);\n await packageManager.installOnPackageContentChange(rootWorkspace);\n }\n\n logger.info(\"Lifecycle script: preversion\");\n\n if (\n isMonorepoVersionIndependent &&\n rootWorkspace.pkg.scripts?.preversion\n ) {\n await packageManager.runScript(rootWorkspace, \"preversion\");\n }\n\n // lifecycle: preversion\n for (const workspace of bumpedWorkspaces.keys()) {\n if (workspace.pkg.scripts?.preversion) {\n await packageManager.runScript(workspace, \"preversion\");\n }\n }\n\n logger.info(\"Modifying versions in package.json\");\n // update versions\n\n await Promise.all(\n [...bumpedWorkspaces.entries()].map(\n ([workspace, { newVersion, dependenciesToBump }]) => {\n workspace.pkg.version = newVersion;\n\n for (const [\n dependencyType,\n dependencyDescriptor,\n dependencyNewRange,\n ] of dependenciesToBump) {\n const newDescriptor = PackageDependencyDescriptorUtils.make(\n dependencyDescriptor,\n dependencyNewRange,\n );\n const [key, newValue] =\n PackageDependencyDescriptorUtils.stringify(newDescriptor);\n workspace.pkg[dependencyType]![key] = newValue;\n }\n\n return writePkg(workspace);\n },\n ),\n );\n\n if (packageManager.installOnPackageContentChange) {\n // Update lockfile ; must be done before running again lifecycle scripts\n logger.info(`${getWorkspaceName(rootWorkspace)}: Running install`);\n await packageManager.installOnPackageContentChange(rootWorkspace);\n }\n\n // lifecycle: version\n logger.info(\"Lifecycle script: version\");\n for (const workspace of bumpedWorkspaces.keys()) {\n if (workspace.pkg.scripts?.version) {\n await packageManager.runScript(workspace, \"version\");\n }\n }\n }\n\n if (isMonorepoVersionIndependent && rootWorkspace.pkg.scripts?.version) {\n await packageManager.runScript(rootWorkspace, \"version\");\n }\n });\n\n const changelogs = new Map<Workspace, string>();\n\n await Promise.all(\n [...bumpedWorkspaces.entries()].map(\n async ([\n workspace,\n { newTag, hasChanged, bumpReason, bumpForDependenciesReasons },\n ]) => {\n // const workspaceRelativePath =\n // rootWorkspace === workspace\n // ? undefined\n // : path.relative(rootWorkspace.cwd, workspace.cwd);\n\n const commits = commitsByWorkspace?.get(workspace);\n\n let changelog = await generateChangelog(\n rootWorkspace,\n workspace.pkg,\n conventionalCommitConfig,\n previousTagVersionByWorkspace.get(workspace)?.tag || null,\n isMonorepoVersionIndependent ? newTag : rootNewTag,\n commits,\n todayInYYYYMMDD(),\n // {\n // path: workspaceRelativePath,\n // previousTag: previousTagByWorkspace.get(workspace) || undefined,\n // verbose: options.verbose,\n // tagPrefix: options.tagVersionPrefix,\n // lernaPackage:\n // rootWorkspace === workspace\n // ? undefined\n // : getWorkspaceName(workspace),\n // },\n );\n\n if (bumpForDependenciesReasons && workspace !== rootWorkspace) {\n if (bumpForDependenciesReasons.length > 0) {\n changelog += `${!changelog.endsWith(\"\\n\\n\") ? \"\\n\" : \"\"}${bumpForDependenciesReasons.join(\"\\n\")}\\n\\n`;\n }\n }\n\n if (changelog.slice(changelog.indexOf(\"\\n\")).trim().length === 0) {\n changelog += `${!changelog.endsWith(\"\\n\\n\") ? \"\\n\" : \"\"}Note: no notable changes\\n\\n`;\n }\n\n if (!changelog && rootWorkspace === workspace) {\n throw new Error(\"No changelog found for root workspace\");\n }\n\n changelogs.set(workspace, changelog);\n\n if (options.changelog) {\n if (options.dryRun) {\n logger.info(\n `${getWorkspaceName(workspace)}: ${options.changelog}\\n${changelog}`,\n );\n } else {\n await updateChangelogFile(\n changelog,\n options.tagVersionPrefix,\n `${workspace.cwd}/${options.changelog}`,\n );\n }\n }\n },\n ),\n );\n\n if (!options.dryRun) {\n logger.separator();\n\n if (packageManager.installOnPackageContentChange) {\n // install to update versions in lock file\n logger.info(`${getWorkspaceName(rootWorkspace)}: Running install`);\n await packageManager.installOnPackageContentChange(rootWorkspace);\n }\n\n logger.separator();\n\n const changedFiles = await getDirtyFiles(project.root);\n\n if (changedFiles) {\n logger.info(\"Commit, tag and push\", {\n changedFiles,\n });\n\n const tagsSet = new Set<string>(\n [...bumpedWorkspaces.values()]\n .map(({ newTag }) => newTag)\n .filter((newTag) => newTag !== null),\n );\n\n const tagsInCommitMessage = [...tagsSet]\n .map((tag) => `- ${tag}`)\n .join(\"\\n\");\n const message = options.commitMessage\n .replace(/\\\\n/g, \"\\n\")\n .replace(\n /%a/g,\n isMonorepoVersionIndependent\n ? `\\n\\n${tagsInCommitMessage}`\n : rootNewVersion,\n )\n .replace(/%s/g, rootNewTag)\n .replace(/%v/g, rootNewVersion)\n .replace(/%t/g, tagsInCommitMessage);\n\n await createGitCommit(rootWorkspace, message);\n\n for (const [workspace, { newTag }] of bumpedWorkspaces.entries()) {\n if (newTag === null) continue;\n await createGitTag(workspace, newTag);\n }\n\n if (\n await isBehindRemote(rootWorkspace, options.gitRemote, gitCurrentBranch)\n ) {\n logger.error(\"Remote is ahead, aborting\");\n // oxlint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n }\n\n await pushCommitsAndTags(\n rootWorkspace,\n options.gitRemote,\n gitCurrentBranch,\n );\n\n // run postversion\n if (rootWorkspace.pkg.scripts?.postversion) {\n logger.info(\"Lifecycle script: postversion\");\n await packageManager.runScript(rootWorkspace, \"postversion\");\n }\n\n // TODO open github PR\n\n if (options.createRelease && parsedRepoUrl) {\n logger.info(\"Create git release\");\n\n await Promise.all(\n [...bumpedWorkspaces.entries()].map(([workspace, { newTag }]) => {\n if (newTag === null) return Promise.resolve(undefined);\n const changelog = changelogs.get(workspace);\n if (!changelog) {\n logger.warn(\n `No changelog found for workspace: ${getWorkspaceName(workspace)}`,\n );\n return Promise.resolve(undefined);\n }\n return createGhRelease(workspace, {\n parsedRepoUrl,\n title: newTag,\n tag: newTag,\n body: changelog,\n prerelease: !!options.prerelease,\n });\n }),\n );\n }\n\n if (!options.publish) {\n return;\n }\n await logger.group(\"Publishing packages\", async () => {\n if (packageManager.publishWorkspaces) {\n await packageManager.publishWorkspaces(rootWorkspace, {\n provenance: options.publishProvenance,\n });\n } else {\n for (const [workspace] of bumpedWorkspaces.entries()) {\n if (workspace.pkg.private) {\n logger.info(\n `Skipping private workspace ${getWorkspaceName(workspace)}`,\n );\n continue;\n }\n\n logger.info(`Publishing ${getWorkspaceName(workspace)}`);\n await packageManager.publish(workspace, {\n provenance: options.publishProvenance,\n });\n }\n }\n });\n } else {\n logger.warn(\"No changes made. Nothing to commit.\");\n }\n }\n};\n\nexport const Defaults: VersionCommandOptions = {\n cwd: process.cwd(),\n includesRoot: false,\n dryRun: false,\n json: false,\n preset: \"conventional-changelog-conventionalcommits\",\n tagVersionPrefix: \"v\",\n changelog: \"CHANGELOG.md\",\n commitMessage: \"chore: release %a\",\n createRelease: false,\n bumpDependentsHighestAs: \"major\",\n alwaysBumpPeerDependencies: false,\n gitRemote: \"origin\",\n verbose: false,\n publish: false,\n publishProvenance: false,\n};\n\nexport default program\n .command(\"version\", { isDefault: true })\n .usage(\"Bump package version using conventional commit\")\n .addOption(\n new Option(\"--includes-root\", \"Release root workspace [untested]\").default(\n Defaults.includesRoot,\n ),\n )\n .addOption(new Option(\"--cwd\", \"working directory\").default(process.cwd()))\n .addOption(\n new Option(\n \"--dry-run\",\n \"Print the versions without actually generating the package archive\",\n ).default(Defaults.dryRun),\n )\n .addOption(new Option(\"-v,--verbose\").default(Defaults.verbose))\n .addOption(\n new Option(\"--force <type>\", \"Specify the release type\").choices([\n \"major\",\n \"minor\",\n \"patch\",\n ]),\n )\n .addOption(\n new Option(\n \"--prerelease [releaseType]\",\n \"Add a prerelease identifier to new versions\",\n ),\n )\n .addOption(\n new Option(\n \"--preset <presetName>\",\n \"Conventional Changelog preset to require. Defaults to conventional-changelog-conventionalcommits.\",\n ).default(\"conventional-changelog-conventionalcommits\"),\n )\n .addOption(\n new Option(\"--tag-version-prefix <prefix>\", \"Tag version prefix\").default(\n Defaults.tagVersionPrefix,\n ),\n )\n .addOption(\n new Option(\n \"--changelog <path>\",\n \"Changelog path. Default to CHANGELOG.md.\",\n ).default(Defaults.changelog),\n )\n .addOption(\n new Option(\n \"-m,--commit-message <message>\",\n 'Commit message. Default to \"chore: release %a\". You can use %v for the version, %s for the version with prefix, %t to list tags, %a for auto best display.',\n ).default(Defaults.commitMessage),\n )\n .addOption(\n new Option(\"--create-release <type>\", \"Create a release\").choices([\n \"github\",\n ]),\n )\n .addOption(\n new Option(\n \"--bump-dependents-highest-as <type>\",\n \"Bump dependents highest version as major, minor or patch\",\n )\n .choices([\"major\", \"minor\", \"patch\"])\n .default(Defaults.bumpDependentsHighestAs),\n )\n .addOption(\n new Option(\n \"--always-bump-peer-dependencies\",\n \"Always bump peer dependencies. Default to bumping only if the version doesn't satisfies the peer dependency range.\",\n ).default(Defaults.alwaysBumpPeerDependencies),\n )\n .addOption(\n new Option(\n \"--git-remote <remote-name>\",\n \"Git remote to push commits and tags to\",\n ).default(Defaults.gitRemote),\n )\n .addOption(\n new Option(\n \"--ignore-changes <glob>\",\n 'Ignore changes in files matching the glob. Example: \"**/*.test.js\"',\n ),\n )\n .addOption(new Option(\"--json\", \"Logger json\"))\n .addOption(\n new Option(\n \"--package-manager <manager>\",\n \"Specify the package manager to use (bun or yarn). Autodetected if not specified.\",\n ).choices([\"bun\", \"yarn\"]),\n )\n .addOption(new Option(\"--publish\", \"Publish after versioning\").default(false))\n .addOption(\n new Option(\n \"--publish-provenance\",\n \"Generate provenance attestation when publishing (if supported by package manager)\",\n ).default(false),\n )\n .action((options) => versionCommandAction(options));\n","import fs from \"node:fs\";\nimport { program } from \"commander\";\n\nimport \"./commands/version.ts\";\n\n// relative to dist directory\nconst pkg = JSON.parse(\n // oxlint-disable-next-line unicorn-js/prefer-json-parse-buffer\n fs.readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\"),\n);\n\nprogram.name(pkg.name).description(pkg.description).version(pkg.version);\nprogram.parse();\n"],"names":["chunk","selector","createConventionalCommitsParser","path","fs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-node.mjs","sources":["../src/utils/bunLockUtils.ts","../src/utils/execCommand.ts","../src/pm/BunPackageManager.ts","../src/pm/PnpmPackageManager.ts","../src/pm/YarnPackageManager.ts","../src/pm/PackageManager.ts","../src/utils/UsageError.ts","../src/utils/mapUtils.ts","../src/utils/packageDependenciesUtils.ts","../src/utils/workspaceUtils.ts","../src/utils/bumpTypeUtils.ts","../src/utils/conventionalChangelogUtils.ts","../src/utils/conventionalCommitConfigUtils.ts","../src/utils/generatorUtils.ts","../src/utils/gitUtils.ts","../src/utils/githubUtils.ts","../src/utils/packageUtils.ts","../src/utils/updateChangelog.ts","../src/commands/version.ts","../src/index.ts"],"sourcesContent":["import { readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/**\n * Rewrite the `version` of each entry of the `workspaces` section of a bun.lock (JSONC).\n *\n * bun replaces `workspace:` ranges with the version recorded there when packing/publishing,\n * not the one from the workspace package.json, and `bun install` never refreshes it.\n *\n * Only the text of the version values is changed, so the formatting is preserved.\n */\nexport const syncBunLockWorkspaceVersions = (\n lockContent: string,\n getVersion: (workspacePath: string) => string | undefined,\n): string => {\n const lines = lockContent.split(\"\\n\");\n let inWorkspaces = false;\n let currentPath: string | null = null;\n\n return lines\n .map((line) => {\n if (!inWorkspaces) {\n if (/^ {2}\"workspaces\": \\{\\s*$/.test(line)) inWorkspaces = true;\n return line;\n }\n if (/^ {2}\\}/.test(line)) {\n inWorkspaces = false;\n return line;\n }\n const pathMatch = /^ {4}(\"(?:[^\"\\\\]|\\\\.)*\"): \\{\\s*$/.exec(line);\n if (pathMatch) {\n currentPath = JSON.parse(pathMatch[1]!) as string;\n return line;\n }\n if (currentPath === null) return line;\n const versionMatch = /^( {6}\"version\": )\"(?:[^\"\\\\]|\\\\.)*\"(,?\\s*)$/.exec(\n line,\n );\n if (!versionMatch) return line;\n const newVersion = getVersion(currentPath);\n if (newVersion === undefined) return line;\n const [, prefix = \"\", suffix = \"\"] = versionMatch;\n return prefix + JSON.stringify(newVersion) + suffix;\n })\n .join(\"\\n\");\n};\n\nexport const syncBunLockFile = async (rootCwd: string): Promise<void> => {\n const lockPath = path.join(rootCwd, \"bun.lock\");\n let content: string;\n try {\n content = await readFile(lockPath, \"utf8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return; // legacy bun.lockb: binary, not handled\n throw error;\n }\n\n const workspacePaths = new Set<string>();\n syncBunLockWorkspaceVersions(content, (workspacePath) => {\n workspacePaths.add(workspacePath);\n return undefined;\n });\n\n const versions = new Map<string, string>();\n await Promise.all(\n [...workspacePaths].map(async (workspacePath) => {\n const pkg = JSON.parse(\n await readFile(\n path.join(rootCwd, workspacePath, \"package.json\"),\n \"utf8\",\n ),\n ) as { version?: string };\n if (pkg.version !== undefined) versions.set(workspacePath, pkg.version);\n }),\n );\n\n const newContent = syncBunLockWorkspaceVersions(content, (workspacePath) =>\n versions.get(workspacePath),\n );\n if (newContent !== content) await writeFile(lockPath, newContent);\n};\n","import childProcess from \"node:child_process\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\ninterface ExecResultIfFailed {\n code: number | null;\n signal: string | null;\n stdout: string;\n stderr: string;\n}\n\ninterface ExecResultIfSuccess {\n code: null;\n signal: null;\n stdout: string;\n stderr: string;\n}\n\ntype ExecResult<Strict extends boolean> = Strict extends true\n ? ExecResultIfSuccess\n : ExecResultIfFailed;\n\nasync function execvp<const Strict extends boolean>(\n command: string,\n args: string[],\n {\n cwd = process.cwd(),\n env = process.env,\n encoding,\n strict,\n stdo = \"pipe\",\n input,\n }: {\n cwd?: string;\n env?: typeof process.env;\n encoding?: BufferEncoding;\n strict?: Strict;\n stdo?: \"inherit\" | \"pipe\";\n input?: string;\n },\n): Promise<ExecResult<Strict>> {\n const stdoutChunks: Uint8Array[] = [];\n const stderrChunks: Uint8Array[] = [];\n if (env.PWD !== undefined) {\n env = { ...env, PWD: cwd };\n }\n const subprocess = childProcess.spawn(command, args, {\n cwd,\n env,\n stdio: [input ? \"pipe\" : \"ignore\", stdo, stdo],\n });\n if (input && subprocess.stdin) {\n // write input to stdin and close it\n subprocess.stdin.write(input);\n subprocess.stdin.end();\n }\n subprocess.stdout?.on(\"data\", (chunk) => {\n stdoutChunks.push(chunk);\n });\n subprocess.stderr?.on(\"data\", (chunk) => {\n stderrChunks.push(chunk);\n });\n return new Promise((resolve, reject) => {\n subprocess.on(\"error\", (err) => {\n reject(new Error(`Process ${command} failed to spawn`));\n });\n subprocess.on(\"close\", (code, signal) => {\n const chunksToString = (chunks: Uint8Array[]): string =>\n stdo === \"inherit\"\n ? \"\"\n : Buffer.concat(chunks).toString(encoding ?? \"utf8\");\n const stdout = chunksToString(stdoutChunks);\n const stderr = chunksToString(stderrChunks);\n if (code === 0 || !strict) {\n resolve({\n code,\n signal,\n stdout,\n stderr,\n } as ExecResult<Strict>);\n } else {\n reject(\n new Error(\n `Process ${[command, ...args].join(\" \")} exited ${code !== null ? `with code ${code}` : `with signal ${signal || \"\"}`}:\\nstdout: ${stdout}\\nstderr: ${stderr}`,\n ),\n );\n }\n });\n });\n}\n\nasync function* spawnStreamStdout<const Strict extends boolean>(\n command: string,\n args: string[],\n {\n cwd = process.cwd(),\n env = process.env,\n encoding,\n strict,\n separator,\n }: {\n cwd?: string;\n env?: typeof process.env;\n encoding?: BufferEncoding;\n strict?: Strict;\n separator: string;\n },\n): AsyncGenerator<string, ExecResult<Strict>, unknown> {\n const stderrChunks: Uint8Array[] = [];\n if (env.PWD !== undefined) {\n env = { ...env, PWD: cwd };\n }\n const subprocess = childProcess.spawn(command, args, {\n cwd,\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n subprocess.stderr.on(\"data\", (chunk) => {\n stderrChunks.push(chunk);\n });\n\n let chunk: Buffer;\n let payload: string[];\n let buffer = \"\";\n\n for await (chunk of subprocess.stdout) {\n buffer += chunk.toString();\n\n if (buffer.includes(separator)) {\n payload = buffer.split(separator);\n buffer = payload.pop() || \"\";\n\n yield* payload;\n }\n }\n\n if (buffer) {\n yield buffer;\n }\n\n return new Promise((resolve, reject) => {\n subprocess.on(\"error\", (err) => {\n reject(new Error(`Process ${command} failed to spawn`));\n });\n subprocess.on(\"close\", (code, signal) => {\n const chunksToString = (chunks: Uint8Array[]): string =>\n Buffer.concat(chunks).toString(encoding ?? \"utf8\");\n const stderr = chunksToString(stderrChunks);\n if (code === 0 || !strict) {\n resolve({\n code,\n signal,\n stderr,\n } as ExecResult<Strict>);\n } else {\n reject(\n new Error(\n `Process ${[command, ...args].join(\" \")} exited ${code !== null ? `with code ${code}` : `with signal ${signal || \"\"}`}:\\nstderr: ${stderr}`,\n ),\n );\n }\n });\n });\n}\n\nexport const execCommand = (\n workspace: Workspace,\n commandAndArgs: string[],\n stdo: \"inherit\" | \"pipe\" = \"pipe\",\n): ReturnType<typeof execvp> => {\n const [command, ...args] = commandAndArgs;\n if (command === undefined) {\n throw new Error(\"Command is required\");\n }\n return execvp(command, args, {\n cwd: workspace.cwd,\n strict: true,\n stdo,\n });\n};\n\nexport const execCommandWithInput = (\n workspace: Workspace,\n commandAndArgs: string[],\n input: string,\n stdo: \"inherit\" | \"pipe\" = \"pipe\",\n): ReturnType<typeof execvp> => {\n const [command, ...args] = commandAndArgs;\n if (command === undefined) {\n throw new Error(\"Command is required\");\n }\n return execvp(command, args, {\n cwd: workspace.cwd,\n strict: true,\n stdo,\n input,\n });\n};\n\nexport const execCommandStreamStdout = (\n workspace: Workspace,\n commandAndArgs: string[],\n separator = \"\\n\",\n): AsyncGenerator<string, ExecResult<true>, unknown> => {\n const [command, ...args] = commandAndArgs;\n if (command === undefined) {\n throw new Error(\"Command is required\");\n }\n return spawnStreamStdout(command, args, {\n cwd: workspace.cwd,\n strict: true,\n separator,\n });\n};\n","import { syncBunLockFile } from \"../utils/bunLockUtils.ts\";\nimport { execCommand } from \"../utils/execCommand.ts\";\nimport type { Workspace } from \"../utils/packageUtils.ts\";\nimport type {\n PackageManager,\n PackageManagerPublishOptions,\n} from \"./PackageManager.ts\";\n\nexport const BunPackageManager: PackageManager = {\n async installOnPackageContentChange(rootWorkspace: Workspace) {\n // bun does not refresh the workspace versions recorded in bun.lock, and\n // `bun pm pack` / `bun publish` use them to replace `workspace:` ranges.\n // Without this, a dependent is published with the previous version of its workspace dependency.\n await syncBunLockFile(rootWorkspace.cwd);\n // update the dependency ranges of the lockfile\n await execCommand(\n rootWorkspace,\n [\"bun\", \"install\", \"--lockfile-only\"],\n \"inherit\",\n );\n },\n\n async runScript(workspace, scriptName) {\n await execCommand(workspace, [\"bun\", \"run\", scriptName], \"inherit\");\n },\n\n async publish(workspace, options?: PackageManagerPublishOptions) {\n if (options?.provenance) {\n // Use bun pack for provenance support\n // See: https://github.com/oven-sh/bun/issues/15601\n const packResult = await execCommand(workspace, [\"bun\", \"pm\", \"pack\"]);\n // Extract .tgz filename from output (find line ending with .tgz)\n const lines = packResult.stdout.trim().split(\"\\n\");\n const tgzPath =\n lines.find((line) => line.endsWith(\".tgz\")) ?? lines.at(-1);\n if (!tgzPath) {\n throw new Error(\"Failed to extract .tgz path from bun pack output\");\n }\n await execCommand(workspace, [\"npm\", \"publish\", \"--provenance\", tgzPath]);\n } else {\n await execCommand(workspace, [\"bun\", \"publish\"], \"inherit\");\n }\n },\n};\n","import { execCommand } from \"../utils/execCommand.ts\";\nimport type {\n PackageManager,\n PackageManagerPublishOptions,\n} from \"./PackageManager.ts\";\n\nexport const PnpmPackageManager: PackageManager = {\n async runScript(workspace, scriptName) {\n await execCommand(workspace, [\"pnpm\", \"run\", scriptName], \"inherit\");\n },\n\n async publish(workspace, options?: PackageManagerPublishOptions) {\n if (options?.provenance) {\n await execCommand(\n workspace,\n [\"pnpm\", \"publish\", \"--provenance\"],\n \"inherit\",\n );\n } else {\n await execCommand(workspace, [\"pnpm\", \"publish\"], \"inherit\");\n }\n },\n};\n","import { execCommand } from \"../utils/execCommand.ts\";\nimport type { Workspace } from \"../utils/packageUtils.ts\";\nimport type {\n PackageManager,\n PackageManagerPublishOptions,\n} from \"./PackageManager.ts\";\n\nexport const YarnPackageManager: PackageManager = {\n async installOnPackageContentChange(rootWorkspace: Workspace) {\n await execCommand(rootWorkspace, [\"yarn\", \"install\"], \"inherit\");\n },\n\n async runScript(workspace: Workspace, scriptName: string) {\n await execCommand(workspace, [\"yarn\", \"run\", scriptName], \"inherit\");\n },\n\n async publish(workspace: Workspace, options?: PackageManagerPublishOptions) {\n const publishArgs = [\"yarn\", \"npm\", \"publish\"];\n if (options?.provenance) {\n publishArgs.push(\"--provenance\");\n }\n await execCommand(workspace, publishArgs, \"inherit\");\n },\n\n async publishWorkspaces(\n rootWorkspace: Workspace,\n options?: PackageManagerPublishOptions,\n ) {\n const publishArgs = [\n \"yarn\",\n \"workspaces\",\n \"foreach\",\n \"--all\",\n \"--parallel\",\n \"--no-private\",\n \"npm\",\n \"publish\",\n ];\n if (options?.provenance) {\n publishArgs.push(\"--provenance\");\n }\n await execCommand(rootWorkspace, publishArgs, \"inherit\");\n },\n};\n","import { existsSync } from \"node:fs\";\nimport type { Workspace } from \"../utils/packageUtils.ts\";\nimport { BunPackageManager } from \"./BunPackageManager.ts\";\nimport { PnpmPackageManager } from \"./PnpmPackageManager.ts\";\nimport { YarnPackageManager } from \"./YarnPackageManager.ts\";\n\nexport interface PackageManagerPublishOptions {\n provenance?: boolean;\n}\n\nexport interface PackageManager {\n installOnPackageContentChange?: (rootWorkspace: Workspace) => Promise<void>;\n runScript: (workspace: Workspace, scriptName: string) => Promise<void>;\n publish: (\n workspace: Workspace,\n options?: PackageManagerPublishOptions,\n ) => Promise<void>;\n publishWorkspaces?: (\n rootWorkspace: Workspace,\n options?: PackageManagerPublishOptions,\n ) => Promise<void>;\n}\n\nexport const autoDetectPackageManager = (\n rootWorkspace: Workspace,\n): PackageManager => {\n const hasYarnLock = existsSync(`${rootWorkspace.cwd}/yarn.lock`);\n const hasBunLockLegacy = existsSync(`${rootWorkspace.cwd}/bun.lockb`);\n const hasBunLock = existsSync(`${rootWorkspace.cwd}/bun.lock`);\n const hasNpmPackageLock = existsSync(\n `${rootWorkspace.cwd}/package-lock.json`,\n );\n const hasPnpmLock = existsSync(`${rootWorkspace.cwd}/pnpm-lock.yaml`);\n\n if (\n [\n hasYarnLock,\n hasBunLockLegacy,\n hasBunLock,\n hasNpmPackageLock,\n hasPnpmLock,\n ].filter(Boolean).length > 1\n ) {\n throw new Error(\n `Multiple lock files detected in workspace at ${rootWorkspace.cwd}. Please ensure only one lock file is present, or pass --package-manager option to bypass auto-detection.`,\n );\n }\n\n if (hasYarnLock) {\n return YarnPackageManager;\n }\n\n if (hasBunLockLegacy || hasBunLock) {\n return BunPackageManager;\n }\n\n if (hasPnpmLock) {\n return PnpmPackageManager;\n }\n\n if (hasNpmPackageLock) {\n throw new Error(\n \"NPM is not currently supported as a package manager. Please migrate to Yarn or Bun, or open an issue to request support.\",\n );\n }\n\n throw new Error(\n `No lock file detected in workspace at ${rootWorkspace.cwd}. Please ensure a supported lock file is present, or pass --package-manager option to bypass auto-detection.`,\n );\n};\n\nexport const getPackageManager = (\n rootWorkspace: Workspace,\n specifiedPackageManager?: \"bun\" | \"pnpm\" | \"yarn\",\n): PackageManager => {\n switch (specifiedPackageManager) {\n case \"bun\":\n return BunPackageManager;\n case \"yarn\":\n return YarnPackageManager;\n case \"pnpm\":\n return PnpmPackageManager;\n case undefined:\n default: {\n throw new Error(\n \"Invalid package manager specified. Supported values are 'bun' and 'yarn'.\",\n );\n }\n }\n};\n","export class UsageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UsageError\";\n }\n}\n","export function getMapArrayItemForKey<K, V>(map: Map<K, V[]>, key: K): V[] {\n let value: V[] | undefined = map.get(key);\n if (value === undefined) {\n map.set(key, (value = [] as V[]));\n }\n return value;\n}\n","/**\n * Combination of an optional scope and name.\n *\n * eg `@npm/types`\n */\nexport interface PackageDescriptorName {\n scope?: string;\n name: string;\n}\n\ninterface DescriptorUtils<Descriptor> {\n parse: (value: string) => Descriptor;\n stringify: (descriptor: Descriptor) => string;\n}\n\nexport const PackageDescriptorNameUtils: DescriptorUtils<PackageDescriptorName> =\n {\n parse: (value) => {\n if (value.startsWith(\"@\")) {\n const [scope, name] = value.slice(1).split(\"/\", 2);\n if (!scope || !name) {\n throw new Error(`Invalid package descriptor name: ${value}`);\n }\n return { scope, name };\n }\n return { name: value };\n },\n stringify: (descriptor) => {\n return descriptor.scope === undefined\n ? descriptor.name\n : `@${descriptor.scope}/${descriptor.name}`;\n },\n };\n\nexport interface PackageDependencyDescriptor {\n key: string;\n name: PackageDescriptorName;\n selector: string; // can be npm tag or version or version range or git url or local folder path\n}\n\ninterface PackageDependencyDescriptorUtils<\n Descriptor = PackageDependencyDescriptor,\n> {\n make: (descriptor: Descriptor, selector: string) => Descriptor;\n parse: (dependencyKey: string, dependencyValue: string) => Descriptor;\n stringify: (descriptor: Descriptor) => [key: string, value: string];\n}\n\nexport const PackageDependencyDescriptorUtils: PackageDependencyDescriptorUtils =\n {\n make: (descriptor, selector) => {\n return { key: descriptor.key, name: descriptor.name, selector };\n },\n parse: (dependencyKey, dependencyValue) => {\n const [name, selector] = dependencyValue.startsWith(\"npm:\")\n ? (() => {\n const v = dependencyValue.slice(\"npm:\".length);\n if (!v.startsWith(\"@\")) return v.split(\"@\", 2) as [string, string];\n const [packageNameWithoutFirstChar, selector] = v\n .slice(1)\n .split(\"@\", 2);\n if (!packageNameWithoutFirstChar || !selector) {\n throw new Error(`Invalid package descriptor: ${dependencyValue}`);\n }\n return [`@${packageNameWithoutFirstChar}`, selector];\n })()\n : [dependencyKey, dependencyValue];\n\n return {\n key: dependencyKey,\n name: PackageDescriptorNameUtils.parse(name),\n selector,\n };\n },\n stringify: (descriptor) => {\n return [descriptor.key, descriptor.selector];\n },\n };\n\n// export const PackageDependencySelectorUtils;\n","import path from \"node:path\";\nimport { getMapArrayItemForKey } from \"./mapUtils.ts\";\nimport type { PackageDependencyDescriptor } from \"./packageDependenciesUtils.ts\";\nimport {\n PackageDependencyDescriptorUtils,\n PackageDescriptorNameUtils,\n} from \"./packageDependenciesUtils.ts\";\nimport type { ProjectWorkspace, Workspace } from \"./packageUtils.ts\";\n\nconst allDependenciesTypes = [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n] as const;\nexport type DependencyType = (typeof allDependenciesTypes)[number];\n\nexport const getWorkspaceName = (workspace: Workspace): string => {\n return (\n workspace.pkg.name ?? (path.basename(workspace.cwd) || \"unnamed-workspace\")\n );\n};\n\ntype WorkspacesDependenciesMap = Map<\n Workspace,\n [Workspace, DependencyType, PackageDependencyDescriptor][]\n>;\n\nexport const buildDependentsMaps = (\n project: ProjectWorkspace,\n): WorkspacesDependenciesMap => {\n const dependentsMap: WorkspacesDependenciesMap = new Map<\n Workspace,\n [Workspace, DependencyType, PackageDependencyDescriptor][]\n >();\n\n // Note that we need to do this before applying the new versions,\n // otherwise the `findWorkspacesByDescriptor` calls won't be able to\n // resolve the workspaces anymore (because the workspace versions will\n // have changed and won't match the outdated dependencies).\n\n for (const [, dependent] of project.children) {\n for (const set of allDependenciesTypes) {\n for (const [dependencyKey, dependencyValue] of Object.entries(\n dependent.pkg[set] || {},\n )) {\n if (!dependencyValue) continue;\n const descriptor = PackageDependencyDescriptorUtils.parse(\n dependencyKey,\n dependencyValue,\n );\n const workspace = project.children.get(\n PackageDescriptorNameUtils.stringify(descriptor.name),\n );\n if (!workspace) continue;\n\n const dependents = getMapArrayItemForKey(dependentsMap, workspace);\n dependents.push([dependent, set, descriptor]);\n }\n }\n }\n\n return dependentsMap;\n};\n\nexport const buildDependenciesMaps = (\n project: ProjectWorkspace,\n): WorkspacesDependenciesMap => {\n const dependenciesMap: WorkspacesDependenciesMap = new Map<\n Workspace,\n [Workspace, DependencyType, PackageDependencyDescriptor][]\n >();\n\n // Note that we need to do this before applying the new versions,\n // otherwise the `findWorkspacesByDescriptor` calls won't be able to\n // resolve the workspaces anymore (because the workspace versions will\n // have changed and won't match the outdated dependencies).\n\n for (const dependent of project.children.values()) {\n for (const set of allDependenciesTypes) {\n for (const [dependencyKey, dependencyValue] of Object.entries(\n dependent.pkg[set] || {},\n )) {\n if (!dependencyValue) continue;\n const descriptor = PackageDependencyDescriptorUtils.parse(\n dependencyKey,\n dependencyValue,\n );\n\n const workspace = project.children.get(\n PackageDescriptorNameUtils.stringify(descriptor.name),\n );\n if (!workspace) continue;\n\n const dependencies = getMapArrayItemForKey(dependenciesMap, dependent);\n dependencies.push([workspace, set, descriptor]);\n }\n }\n }\n\n return dependenciesMap;\n};\n\nexport const buildTopologicalOrderBatches = (\n project: ProjectWorkspace,\n dependenciesMap: WorkspacesDependenciesMap,\n): Workspace[][] => {\n const batches: Workspace[][] = [];\n\n const added = new Set<Workspace>();\n const toAdd = new Set<Workspace>([\n project.root,\n ...project.children.values(),\n ]);\n\n while (toAdd.size > 0) {\n const batch = new Set<Workspace>();\n for (const workspace of toAdd) {\n // make sure top level workspace is always in the last batch\n if (workspace === project.root && toAdd.size > 1) {\n continue;\n }\n\n const dependencies = dependenciesMap.get(workspace);\n if (!dependencies || dependencies.every((w) => added.has(w[0]))) {\n batch.add(workspace);\n }\n }\n\n for (const workspace of batch) {\n added.add(workspace);\n toAdd.delete(workspace);\n }\n\n if (batch.size === 0) {\n throw new Error(\"Circular dependency detected\");\n }\n batches.push([...batch]);\n }\n\n return batches;\n};\n","import semver from \"semver\";\nimport { UsageError } from \"./UsageError.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\nimport { getWorkspaceName } from \"./workspaceUtils.ts\";\n\nexport type BumpType = \"major\" | \"minor\" | \"patch\";\n\n// https://github.com/yarnpkg/berry/blob/506ded5f5f5a89553435940c74f1d857fd685a42/packages/plugin-version/sources/versionUtils.ts#L10\n// Basically we only support auto-upgrading the ranges that are very simple (^x.y.z, ~x.y.z, >=x.y.z, and of course x.y.z)\nconst SUPPORTED_UPGRADE_REGEXP =\n // oxlint-disable-next-line regexp/no-unused-capturing-group\n /^((?:>=|[~^])?)(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*)(\\.(0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*))*)?(\\+[0-9a-z-]+(\\.[0-9a-z-]+)*)?$/i;\n\nconst yarnWorkspaceProtocol = \"workspace:\";\n\nexport const calcBumpRange = (\n workspace: Workspace,\n range: string,\n newVersion: string,\n): string => {\n if (range === \"*\") {\n return range;\n }\n\n let useWorkspaceProtocol = false;\n\n if (range.startsWith(yarnWorkspaceProtocol)) {\n const slicedRange = range.slice(yarnWorkspaceProtocol.length);\n\n // Workspaces referenced through their path never get upgraded (\"workspace:packages/yarnpkg-core\")\n if (slicedRange === workspace.relativeCwd) {\n return range;\n }\n\n if (slicedRange === \"*\" || slicedRange === \"^\" || slicedRange === \"~\") {\n return range;\n }\n\n range = slicedRange;\n useWorkspaceProtocol = true;\n }\n\n const parsed = SUPPORTED_UPGRADE_REGEXP.exec(range);\n if (!parsed) {\n const workspaceName = getWorkspaceName(workspace);\n throw new Error(`Couldn't bump range ${range} in ${workspaceName}`);\n }\n\n return `${useWorkspaceProtocol ? yarnWorkspaceProtocol : \"\"}${parsed[1] ?? \"\"}${newVersion}`;\n};\n\nexport const getHighestBumpType = (bumpTypes: BumpType[]): BumpType => {\n if (bumpTypes.includes(\"major\")) {\n return \"major\";\n }\n\n if (bumpTypes.includes(\"minor\")) {\n return \"minor\";\n }\n\n return \"patch\";\n};\n\nexport const calcBumpType = (\n bumpType: BumpType,\n maxBumpType: BumpType,\n): BumpType => {\n if (maxBumpType === \"major\") {\n return bumpType;\n }\n\n if (maxBumpType === \"minor\") {\n return bumpType === \"major\" || bumpType === \"minor\" ? \"minor\" : \"patch\";\n }\n\n return \"patch\";\n};\n\nconst incVersion = (version: string, bumpType: BumpType): string | null => {\n // handle breaking of 0.x\n if (bumpType === \"major\" && semver.major(version) === 0) {\n bumpType = \"minor\";\n }\n return semver.inc(version, bumpType);\n};\n\nexport const incrementVersion = (\n workspace: Workspace,\n currentVersion: string,\n bumpType: BumpType,\n): string => {\n const newVersion = incVersion(currentVersion, bumpType);\n\n if (!newVersion) {\n throw new UsageError(\n `Could not determine next version for \"${getWorkspaceName(\n workspace,\n )}\" (currentVersion: ${currentVersion}, bumpType: ${bumpType}})`,\n );\n }\n\n return newVersion;\n};\n\n// const createPrerelease = (\n// version: string,\n// prereleaseType: ReleaseType,\n// prereleaseId: string,\n// ) => {\n// return semver.inc(version, prereleaseType, prereleaseId);\n// };\n","import { writeChangelogString } from \"conventional-changelog-writer\";\nimport { parseCommits as createConventionalCommitsParser } from \"conventional-commits-parser\";\nimport type { Commit, ParserStreamOptions } from \"conventional-commits-parser\";\nimport type { PackageJson } from \"type-fest\";\nimport type { ConventionalChangelogConfig } from \"./conventionalCommitConfigUtils.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport interface WhatBump {\n level: 0 | 1 | 2;\n reason: string;\n}\nexport type WhatBumpResult = WhatBump | null | undefined;\nexport interface BumperRecommendation extends WhatBump {\n releaseType: \"major\" | \"minor\" | \"patch\";\n commits: Commit[];\n}\nexport interface EmptyBumperRecommendation {\n commits: Commit[];\n}\nexport type BumperRecommendationResult =\n | BumperRecommendation\n | EmptyBumperRecommendation;\n\nexport interface Preset {\n whatBump: (commits: Commit[]) => Promise<WhatBumpResult> | WhatBumpResult;\n tags?: unknown;\n commits?: unknown;\n parser?: ParserStreamOptions;\n}\n\nconst versions: BumperRecommendation[\"releaseType\"][] = [\n \"major\",\n \"minor\",\n \"patch\",\n];\n\nexport const recommendBump = async (\n commits: Parameters<ConventionalChangelogConfig[\"whatBump\"]>[0],\n config: ConventionalChangelogConfig,\n): Promise<Partial<BumperRecommendation>> => {\n const whatBump = config.whatBump;\n if (!whatBump) {\n throw new Error(\"whatBump method is missing in config\");\n }\n const result = { ...(await whatBump(commits)) };\n\n return {\n ...result,\n releaseType: result.level != null ? versions[result.level] : undefined,\n };\n};\n\nexport type Commits = Parameters<ConventionalChangelogConfig[\"whatBump\"]>[0];\n\n// oxlint-disable-next-line max-params\nexport const generateChangelog = (\n workspace: Workspace,\n pkg: PackageJson,\n config: ConventionalChangelogConfig,\n previousTag: string | null,\n newTag: string | null,\n commits: Commits | undefined,\n date: string,\n): Promise<string> => {\n if (!newTag) {\n throw new Error(`Missing new tag for package \"${pkg.name ?? \"\"}\"`);\n }\n\n const originUrl =\n typeof pkg.repository === \"string\" ? pkg.repository : pkg.repository?.url;\n const match =\n originUrl &&\n typeof originUrl === \"string\" &&\n /^(?:git@|https?:\\/\\/)(?:([^./:]+(?:\\.com)?)[/:])?([^/:]+)\\/([^./:]+)(?:.git)?/.exec(\n originUrl,\n );\n const [, gitHost, gitAccount, repoName] = match || [\n undefined,\n undefined,\n undefined,\n undefined,\n ];\n\n return writeChangelogString(\n commits ?? [],\n {\n previousTag,\n currentTag: newTag,\n linkCompare: previousTag != null,\n version: pkg.version,\n host: gitHost ? `https://${gitHost}` : undefined,\n owner: gitAccount,\n repository: repoName,\n date,\n },\n // @ts-expect-error - missing types\n config.writer,\n );\n};\n\nexport const createCommitsParser = (config: ConventionalChangelogConfig) => {\n return createConventionalCommitsParser(config.parser);\n};\n","import { loadPreset } from \"conventional-changelog-preset-loader\";\nimport { UsageError } from \"./UsageError.ts\";\nimport type { Preset } from \"./conventionalChangelogUtils.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport type ConventionalChangelogConfig = Preset;\n\nexport const loadConventionalCommitConfig = async (\n rootWorkspace: Workspace,\n preset: string,\n): Promise<ConventionalChangelogConfig> => {\n try {\n return await loadPreset<ConventionalChangelogConfig>(preset);\n } catch (error: any) {\n throw new UsageError(\n `Failed to require preset \"${preset}\": ${error.message as string}`,\n );\n }\n};\n","export async function asyncIterableToArray<T>(\n asyncIterable: AsyncIterable<T>,\n): Promise<T[]> {\n const result: T[] = [];\n\n for await (const value of asyncIterable) {\n result.push(value);\n }\n\n return result;\n}\n","import semver from \"semver\";\nimport { UsageError } from \"./UsageError.ts\";\nimport { execCommand, execCommandStreamStdout } from \"./execCommand.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport const getGitCurrentBranch = async (\n workspace: Workspace,\n): Promise<string> => {\n const { stdout } = await execCommand(workspace, [\n \"git\",\n \"rev-parse\",\n \"--abbrev-ref\",\n \"HEAD\",\n ]);\n const currentBranch = stdout.trim();\n\n if (currentBranch === \"HEAD\") {\n throw new UsageError(\"HEAD is detached. Please checkout a branch.\");\n }\n\n return currentBranch;\n};\n\nexport const createGitCommit = async (\n workspace: Workspace,\n commitMessage: string,\n): Promise<void> => {\n await execCommand(workspace, [\"git\", \"add\", \"-A\"]);\n\n await execCommand(workspace, [\n \"git\",\n \"commit\",\n \"--no-verify\",\n \"-m\",\n commitMessage,\n ]);\n};\n\nexport const createGitTag = async (\n workspace: Workspace,\n newTag: string,\n): Promise<void> => {\n await execCommand(workspace, [\"git\", \"tag\", newTag, \"-m\", newTag]);\n};\n\nexport const pushCommitsAndTags = async (\n workspace: Workspace,\n gitRemote: string,\n currentBranch: string,\n): Promise<void> => {\n await execCommand(workspace, [\n \"git\",\n \"push\",\n \"--follow-tags\",\n \"--no-verify\",\n \"--atomic\",\n gitRemote,\n currentBranch,\n ]);\n};\n\nexport const isBehindRemote = async (\n workspace: Workspace,\n gitRemote: string,\n currentBranch: string,\n): Promise<boolean> => {\n await execCommand(workspace, [\"git\", \"remote\", \"update\", gitRemote]);\n const { stdout } = await execCommand(workspace, [\n \"git\",\n \"rev-list\",\n \"--left-right\",\n \"--count\",\n `${gitRemote}/${currentBranch}..${currentBranch}`,\n ]);\n\n const [behind] = stdout.split(\"\\t\").map((val) => parseInt(val, 10));\n\n return behind ? behind > 0 : false;\n};\n\nexport const getDirtyFiles = async (workspace: Workspace): Promise<string> => {\n const { stdout: dirtyFiles } = await execCommand(workspace, [\n \"git\",\n \"status\",\n \"--porcelain\",\n ]);\n return dirtyFiles;\n};\n\nconst toArray = <T>(input: T | T[]): T[] =>\n Array.isArray(input) ? input : [input];\n\nexport interface GitTagVersion {\n tag: string;\n version: string;\n}\n\nexport const getGitLatestTagVersion = async (\n workspace: Workspace,\n {\n prefix,\n skipUnstable,\n since,\n from = \"\",\n to = \"HEAD\",\n path,\n }: {\n prefix?: string;\n skipUnstable?: boolean;\n since?: Date | string;\n from?: string;\n to?: string;\n path?: string[] | string;\n } = {},\n): Promise<GitTagVersion | null> => {\n // oxlint-disable-next-line regexp/no-super-linear-backtracking\n const tagRegex = /tag:\\s*(.+?)[,)]/gi;\n for await (const chunk of execCommandStreamStdout(workspace, [\n \"git\",\n \"log\",\n \"--no-color\",\n \"--date-order\",\n \"--format=%d\",\n ...(since\n ? [`--since=${since instanceof Date ? since.toISOString() : since}`]\n : []),\n [from, to].filter(Boolean).join(\"..\"),\n ...(path ? [\"--\", ...toArray(path)] : []),\n ])) {\n const trimmed = chunk.trim();\n if (!trimmed) continue;\n const matches = trimmed.matchAll(tagRegex);\n for (const match of matches) {\n const tag = match[1];\n if (!tag) continue;\n if (prefix && !tag.startsWith(prefix)) {\n continue;\n }\n const version = prefix ? tag.slice(prefix.length) : tag;\n if (!semver.valid(version)) {\n continue;\n }\n if (skipUnstable && semver.prerelease(version)) {\n continue;\n }\n return { tag, version };\n }\n }\n\n return null;\n};\n\nconst GIT_COMMIT_SEPARATOR =\n \"------------------------ >8 ------------------------\";\n\nexport const getGitCommits = (\n workspace: Workspace,\n {\n path,\n from = \"\",\n to = \"HEAD\",\n format = \"%B\",\n reverse,\n merges,\n since,\n }: {\n format?: string;\n path?: string[] | string;\n from?: string;\n to?: string;\n reverse?: boolean;\n merges?: boolean;\n since?: Date | string;\n } = {},\n) => {\n return execCommandStreamStdout(\n workspace,\n [\n \"git\",\n \"log\",\n `--format=${format}%n${GIT_COMMIT_SEPARATOR}`,\n ...(since\n ? [`--since=${since instanceof Date ? since.toISOString() : since}`]\n : []),\n ...(reverse ? [\"--reverse\"] : []),\n ...(merges ? [\"--merges\"] : []),\n ...(merges === false ? [\"--no-merges\"] : []),\n [from, to].filter(Boolean).join(\"..\"),\n ...(path ? [\"--\", ...toArray(path)] : []),\n ],\n GIT_COMMIT_SEPARATOR,\n );\n};\n","import { UsageError } from \"./UsageError.ts\";\nimport { execCommandWithInput } from \"./execCommand.ts\";\nimport type { Workspace } from \"./packageUtils.ts\";\n\nexport async function ensureGhCliAvailable(\n workspace: Workspace,\n): Promise<void> {\n const { GH_TOKEN } = process.env;\n\n if (!GH_TOKEN) {\n throw new UsageError('\"GH_TOKEN\" environment variable required');\n }\n\n try {\n // Use existing execCommand helper pattern by spawning gh --version\n // We import execCommand lazily to avoid cycles when utils are used elsewhere\n const { execCommand } = await import(\"./execCommand.ts\");\n await execCommand(workspace, [\"gh\", \"--version\"]);\n } catch {\n throw new UsageError(\n 'The \"gh\" CLI is required. Please install GitHub CLI: https://cli.github.com/',\n );\n }\n}\n\ninterface ParsedGithubUrl {\n username: string;\n reponame: string;\n}\n\nconst githubRegex = /^https?:\\/\\/github.com\\/([^#/]+)\\/([^#/]+?)(?:\\.git)?$/;\nexport const parseGithubRepoUrl = (workspace: Workspace): ParsedGithubUrl => {\n const repository = workspace.pkg.repository;\n\n const url: string | undefined =\n typeof repository === \"string\" ? repository : repository?.url;\n\n if (!url) {\n throw new Error(\n \"No repository URL found in manifest. Please add one and try again. https://docs.npmjs.com/cli/v9/configuring-npm/package-json#repository\",\n );\n }\n const match = githubRegex.exec(url);\n\n if (!match) {\n throw new Error(`Invalid GitHub repository URL: \"${url}\"`);\n }\n const [, username, reponame] = match;\n if (!username || !reponame) {\n throw new Error(`Invalid GitHub repository URL: \"${url}\"`);\n }\n return { username, reponame };\n};\n\nconst extractHostnameFromGheApiUrl = (gheApiUrl: string): string | null => {\n try {\n const url = new URL(gheApiUrl);\n return url.hostname || null;\n } catch {\n // fallback: try to strip protocol and path\n const m = /^https?:\\/\\/([^/]+)/.exec(gheApiUrl);\n return m?.[1] || null;\n }\n};\n\nexport const createGhRelease = async (\n workspace: Workspace,\n opts: {\n parsedRepoUrl: ParsedGithubUrl;\n tag: string;\n title: string; // title is not necessary but slack release bot shows \"undefined\" if not provided\n body: string;\n prerelease: boolean;\n },\n): Promise<void> => {\n const { parsedRepoUrl, tag, title, body, prerelease } = opts;\n\n const { GH_TOKEN, GHE_API_URL } = process.env;\n\n if (!GH_TOKEN) {\n await ensureGhCliAvailable(workspace);\n return;\n }\n\n // Determine hostname for GHE if provided\n const args: string[] = [\n \"release\",\n \"create\",\n tag,\n \"--title\",\n title,\n \"--repo\",\n `${parsedRepoUrl.username}/${parsedRepoUrl.reponame}`,\n ];\n\n if (prerelease) {\n args.push(\"--prerelease\");\n }\n\n if (GHE_API_URL) {\n const hostname = extractHostnameFromGheApiUrl(GHE_API_URL);\n if (hostname) {\n args.push(\"--hostname\", hostname);\n }\n }\n\n try {\n await execCommandWithInput(\n workspace,\n [\"gh\", ...args, \"--notes-file\", \"-\"],\n body,\n );\n } catch (error) {\n // execCommandWithInput will include stdout/stderr in its error message when strict\n throw new Error(\n `gh release create failed: ${String(error instanceof Error ? error.message : error)}`,\n { cause: error },\n );\n }\n};\n","/* oxlint-disable no-use-before-define */\nimport fs, { glob } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { PackageJson } from \"type-fest\";\n\nexport interface Workspace {\n readonly cwd: string;\n readonly relativeCwd?: string;\n readonly pkg: PackageJson;\n}\n\nexport interface ProjectWorkspace {\n readonly root: Workspace;\n readonly children: Map<string, Workspace>;\n}\n\nasync function mapWorkspacesFromPkg({\n cwd,\n pkg,\n}: {\n cwd: string;\n pkg: PackageJson;\n}): Promise<Map<string, Workspace>> {\n const workspacesPatterns: string[] = Array.isArray(pkg.workspaces)\n ? pkg.workspaces\n : pkg.workspaces?.packages || [];\n\n const map = new Map<string, Workspace>();\n\n for (const pattern of workspacesPatterns) {\n const normalized = pattern.endsWith(\"package.json\")\n ? pattern\n : `${pattern.replace(/\\/*$/, \"\")}/package.json`;\n\n const files = glob(normalized, { cwd });\n for await (const file of files) {\n const packageDir = path.join(cwd, path.dirname(file));\n const packageJson: PackageJson = await readPkg(packageDir);\n const workspaceName = packageJson.name || path.basename(packageDir);\n if (map.has(workspaceName)) {\n const existingWorkspace = map.get(workspaceName);\n if (existingWorkspace && existingWorkspace.cwd !== packageDir) {\n throw new Error(\n `must not have multiple workspaces with the same name\\npackage '${workspaceName}' has conflicts in the following paths:\\n ${existingWorkspace.cwd}\\n ${packageDir}`,\n );\n }\n // if it's the same package dir, ignore duplicate match\n if (existingWorkspace?.cwd === packageDir) continue;\n }\n map.set(workspaceName, { cwd: packageDir, pkg: packageJson });\n }\n }\n return map;\n}\n\nexport const createProjectWorkspace = async (\n root: Workspace,\n): Promise<ProjectWorkspace> => {\n const map: Map<string, Workspace> = root.pkg.workspaces\n ? await mapWorkspacesFromPkg({ cwd: root.cwd, pkg: root.pkg })\n : new Map();\n\n const children = new Map<string, Workspace>(\n [...map.entries()].map(([packageName, workspace]) => {\n const w: Workspace = {\n ...workspace,\n relativeCwd: path.relative(root.cwd, workspace.cwd),\n };\n return [packageName, w] as const;\n }),\n );\n return { root, children };\n};\n\nconst isAccessible = (path: string): Promise<boolean> =>\n fs.access(path).then(\n () => true,\n () => false,\n );\n\nexport const findRootWorkspace = async (\n cwd: string,\n): Promise<Workspace | null> => {\n let currentPath = cwd;\n do {\n const isRootIfOneOfThesePathsExists = await Promise.all([\n isAccessible(path.join(currentPath, \".yarnrc.yml\")),\n isAccessible(path.join(currentPath, \"yarn.lock\")),\n isAccessible(path.join(currentPath, \"bun.lock\")),\n isAccessible(path.join(currentPath, \"pnpm-lock.yaml\")),\n ]);\n if (isRootIfOneOfThesePathsExists.some(Boolean)) {\n return createWorkspace(currentPath);\n }\n currentPath = path.dirname(currentPath);\n } while (currentPath && currentPath !== \"/\");\n return null;\n};\n\nconst getPackageJsonPath = (cwd: string): string =>\n path.join(cwd, \"package.json\");\n\nexport const createWorkspace = async (path: string): Promise<Workspace> => {\n const pkg = await readPkg(path);\n return { cwd: path, pkg };\n};\n\nexport async function writePkg(workspace: Workspace): Promise<void> {\n const string = `${JSON.stringify(workspace.pkg, null, 2)}\\n`;\n await fs.writeFile(getPackageJsonPath(workspace.cwd), string, \"utf8\");\n}\n\nexport async function readPkg(cwd: string): Promise<PackageJson> {\n const packagePath = getPackageJsonPath(cwd);\n // oxlint-disable-next-line typescript/use-unknown-in-catch-callback-variable\n const pkg = await fs.readFile(packagePath, \"utf8\").catch((error: Error) => {\n throw new Error(\n `Failed to read \"${packagePath}\": ${error instanceof Error ? error.message : String(error)}`,\n );\n });\n try {\n return JSON.parse(pkg);\n } catch (error: unknown) {\n throw new Error(\n `Failed to parse \"${packagePath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error },\n );\n }\n}\n","import fs from \"node:fs/promises\";\n\nconst COMMIT_GUIDELINE =\n \"See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\";\n\nconst CHANGELOG_HEADER = [\n \"# Changelog\",\n \"\",\n \"All notable changes to this project will be documented in this file.\",\n COMMIT_GUIDELINE,\n \"\",\n].join(\"\\n\");\n\nexport const updateChangelogFile = async (\n versionChangelogContent: string,\n tagPrefix: string,\n file = \"CHANGELOG.md\",\n): Promise<void> => {\n const START_OF_LAST_RELEASE_PATTERN = new RegExp(\n `(^#+ \\\\[?(?:${tagPrefix})?\\\\d+\\\\.\\\\d+\\\\.\\\\d+|<a name=)`,\n \"m\",\n );\n\n let oldContent = \"\";\n\n try {\n oldContent = await fs.readFile(file, \"utf8\");\n const oldContentStart = oldContent.search(START_OF_LAST_RELEASE_PATTERN);\n // find the position of the last release and remove header:\n if (oldContentStart !== -1) {\n oldContent = oldContent.slice(Math.max(0, oldContentStart));\n }\n } catch {}\n\n await fs.writeFile(\n file,\n `${CHANGELOG_HEADER}\\n${versionChangelogContent}\\n${oldContent}`,\n );\n};\n","/* oxlint-disable complexity */\n\nimport { Option, program } from \"commander\";\nimport { LoggerCLI } from \"nightingale\";\nimport { gt, satisfies } from \"semver\";\nimport {\n autoDetectPackageManager,\n getPackageManager,\n} from \"../pm/PackageManager.ts\";\nimport { UsageError } from \"../utils/UsageError.ts\";\nimport type { BumpType } from \"../utils/bumpTypeUtils.ts\";\nimport {\n calcBumpRange,\n calcBumpType,\n getHighestBumpType,\n incrementVersion,\n} from \"../utils/bumpTypeUtils.ts\";\nimport {\n createCommitsParser,\n generateChangelog,\n recommendBump,\n} from \"../utils/conventionalChangelogUtils.ts\";\nimport { loadConventionalCommitConfig } from \"../utils/conventionalCommitConfigUtils.ts\";\nimport { asyncIterableToArray } from \"../utils/generatorUtils.ts\";\nimport type { GitTagVersion } from \"../utils/gitUtils.ts\";\nimport {\n createGitCommit,\n createGitTag,\n getDirtyFiles,\n getGitCommits,\n getGitCurrentBranch,\n getGitLatestTagVersion,\n isBehindRemote,\n pushCommitsAndTags,\n} from \"../utils/gitUtils.ts\";\nimport {\n createGhRelease,\n ensureGhCliAvailable,\n parseGithubRepoUrl,\n} from \"../utils/githubUtils.ts\";\nimport {\n PackageDependencyDescriptorUtils,\n PackageDescriptorNameUtils,\n} from \"../utils/packageDependenciesUtils.ts\";\nimport type { PackageDependencyDescriptor } from \"../utils/packageDependenciesUtils.ts\";\nimport type { Workspace } from \"../utils/packageUtils.ts\";\nimport {\n createProjectWorkspace,\n createWorkspace,\n findRootWorkspace,\n writePkg,\n} from \"../utils/packageUtils.ts\";\nimport { updateChangelogFile } from \"../utils/updateChangelog.ts\";\nimport type { DependencyType } from \"../utils/workspaceUtils.ts\";\nimport {\n buildDependenciesMaps,\n buildTopologicalOrderBatches,\n getWorkspaceName,\n} from \"../utils/workspaceUtils.ts\";\n\nexport interface VersionCommandOptions {\n cwd: string;\n includesRoot: boolean;\n dryRun: boolean;\n force?: \"major\" | \"minor\" | \"patch\";\n prerelease?: string;\n json: boolean;\n preset: string;\n tagVersionPrefix: string;\n changelog: string;\n commitMessage: string;\n createRelease: boolean;\n bumpDependentsHighestAs: \"major\" | \"minor\" | \"patch\";\n alwaysBumpPeerDependencies: boolean;\n gitRemote: string;\n ignoreChanges?: string;\n verbose?: boolean;\n cwdIsRoot?: boolean;\n packageManager?: \"bun\" | \"yarn\";\n publish?: boolean;\n publishProvenance?: boolean;\n}\n\ninterface BumpableWorkspace {\n workspace: Workspace;\n previousTag?: string;\n workspaceName: string;\n isRoot: boolean;\n version: string;\n}\n\ninterface ChangedWorkspace {\n bumpReason?: string;\n bumpType: BumpType;\n}\n\ninterface NoVersionToUpdateWorkspace {\n // for legacy configuration not using workspaces ranges https://yarnpkg.com/features/workspaces#workspace-ranges-workspace\n dependenciesToBump: [DependencyType, PackageDependencyDescriptor, string][];\n}\n\ninterface BumpedWorkspace extends ChangedWorkspace, NoVersionToUpdateWorkspace {\n bumpForDependenciesReasons?: string[];\n hasChanged: boolean;\n currentVersion: string;\n newVersion: string;\n newTag: string | null;\n}\n\nconst todayInYYYYMMDD = (): string => {\n // sv-SEis used for yyyy-mm-dd format\n const dateFormatter = Intl.DateTimeFormat(\"sv-SE\", {\n timeZone: \"UTC\",\n });\n return dateFormatter.format(new Date());\n};\n\nexport const versionCommandAction = async (\n options: VersionCommandOptions,\n { logger = new LoggerCLI(\"@pob/version\", { json: options.json }) } = {},\n): Promise<void> => {\n const rootWorkspace = await (options.cwdIsRoot\n ? createWorkspace(options.cwd)\n : findRootWorkspace(options.cwd));\n\n if (!rootWorkspace) {\n throw new UsageError(\"Could not find root workspace from this path.\");\n }\n\n const packageManager = options.packageManager\n ? getPackageManager(rootWorkspace, options.packageManager)\n : autoDetectPackageManager(rootWorkspace);\n\n const project = await createProjectWorkspace(rootWorkspace);\n\n if (!options.dryRun) {\n const dirtyFiles = await getDirtyFiles(project.root);\n if (dirtyFiles) {\n throw new Error(\n `Dirty Files:\\n${dirtyFiles}\\n\\nThere are uncommitted changes in the git repository. Please commit or stash them first.`,\n );\n }\n }\n\n const rootWorkspaceChildren = [...project.children.values()];\n let rootNewVersion = \"\";\n let rootNewTag = \"\";\n const isMonorepo = rootWorkspaceChildren.length > 0;\n const isMonorepoVersionIndependent = isMonorepo && !rootWorkspace.pkg.version;\n const workspaces =\n !(isMonorepo && !rootWorkspaceChildren) || options.includesRoot\n ? [rootWorkspace, ...rootWorkspaceChildren]\n : rootWorkspaceChildren;\n\n if (options.prerelease) {\n throw new UsageError(\"--prerelease is not supported yet.\");\n }\n if (options.ignoreChanges) {\n throw new UsageError(\"--ignore-changes is not supported yet.\");\n }\n\n const [conventionalCommitConfig, parsedRepoUrl, gitCurrentBranch] =\n await Promise.all([\n loadConventionalCommitConfig(rootWorkspace, options.preset),\n options.createRelease\n ? parseGithubRepoUrl(rootWorkspace)\n : Promise.resolve(null),\n getGitCurrentBranch(rootWorkspace),\n // ensure gh CLI is available early to fail fast if necessary\n options.createRelease\n ? ensureGhCliAvailable(rootWorkspace)\n : Promise.resolve(undefined),\n ]);\n\n const rootPreviousVersionTagPromise =\n options.force || isMonorepoVersionIndependent\n ? null\n : getGitLatestTagVersion(rootWorkspace, {\n prefix: options.tagVersionPrefix,\n skipUnstable: true,\n });\n\n const buildTagName = (workspace: Workspace, version: string): string =>\n `${\n isMonorepo && workspace !== rootWorkspace\n ? `${getWorkspaceName(workspace)}@`\n : options.tagVersionPrefix\n }${version}`;\n\n const changedWorkspaces = new Map<Workspace, ChangedWorkspace>();\n const dependenciesMap = isMonorepo ? buildDependenciesMaps(project) : null;\n\n const bumpableWorkspaces: BumpableWorkspace[] = [];\n\n logger.group(\n options.force\n ? \"Check all workspaces (force option)\"\n : \"Finding changed workspaces\",\n () => {\n // check workspaces and create bumpableWorkspaces\n\n for (const workspace of workspaces) {\n const workspaceName = getWorkspaceName(workspace);\n const isRoot = workspace === rootWorkspace;\n if (isRoot && isMonorepo && isMonorepoVersionIndependent) continue;\n\n const version = workspace.pkg.version;\n\n if (!version || version === \"0.0.0\") {\n if (\n (isRoot || isMonorepoVersionIndependent) &&\n (!isMonorepo || !isMonorepoVersionIndependent)\n ) {\n throw new UsageError(\n 'package.json has no version in its manifest. For the first release, set to \"1.0.0-pre\" or \"0.1.0-pre\".',\n );\n }\n\n logger.info(`${workspaceName}: skipped (no version)`);\n continue;\n }\n\n bumpableWorkspaces.push({\n workspace,\n workspaceName,\n isRoot,\n version,\n });\n }\n\n if (bumpableWorkspaces.length > 0) {\n logger.info(\"Found bumpable workspaces\", {\n count: bumpableWorkspaces.length,\n });\n }\n },\n );\n\n const previousTagVersionByWorkspace = new Map<\n Workspace,\n GitTagVersion | null\n >(\n await Promise.all(\n bumpableWorkspaces.map(async ({ workspace, workspaceName, isRoot }) => {\n const packageOption =\n isMonorepo && isMonorepoVersionIndependent\n ? workspaceName\n : undefined;\n\n const tagPrefix = packageOption\n ? `${packageOption}@`\n : options.tagVersionPrefix;\n\n const previousTagAndVersion = await (isRoot ||\n !isMonorepoVersionIndependent\n ? rootPreviousVersionTagPromise\n : getGitLatestTagVersion(rootWorkspace, {\n path: workspace.relativeCwd,\n prefix: tagPrefix,\n skipUnstable: true,\n }));\n\n return [workspace, previousTagAndVersion] as const;\n }),\n ),\n );\n\n if (options.dryRun) {\n logger.info(\"Previous tags\", {\n previousTagByWorkspace: Object.fromEntries(\n [...previousTagVersionByWorkspace.entries()].map(\n ([workspace, previousTagVersion]) => [\n getWorkspaceName(workspace),\n previousTagVersion?.tag,\n ],\n ),\n ),\n });\n }\n\n const parseCommits = createCommitsParser(conventionalCommitConfig);\n\n const commitsByWorkspace = options.force\n ? undefined\n : new Map(\n await Promise.all(\n bumpableWorkspaces.map(async ({ workspace }) => {\n const previousTagVersion =\n previousTagVersionByWorkspace.get(workspace);\n\n const commits = await asyncIterableToArray(\n parseCommits(\n getGitCommits(rootWorkspace, {\n path: workspace.relativeCwd,\n from: previousTagVersion?.tag || undefined,\n }),\n ),\n );\n\n return [workspace, commits] as const;\n }),\n ),\n );\n\n await logger.group(\"Finding changed workspaces\", async () => {\n for (const { workspace, workspaceName } of bumpableWorkspaces) {\n let bumpType: BumpType | null = null;\n let bumpReason: string | undefined;\n\n if (options.force) {\n bumpType = options.force;\n bumpReason = \"forced by --force flag\";\n } else {\n const commits = commitsByWorkspace?.get(workspace);\n\n // No changes found for this package\n if (!commits || commits.length === 0) {\n logger.info(`${workspaceName}: skipped (no changes)`);\n continue;\n }\n\n const { releaseType, reason } = await recommendBump(\n commits,\n conventionalCommitConfig,\n );\n bumpReason = reason;\n\n if (releaseType) {\n bumpType = releaseType satisfies BumpType;\n }\n }\n\n if (bumpType) {\n if (isMonorepo && !workspace.pkg.name) {\n throw new Error(\"Workspace name is required\");\n }\n\n const currentVersion = workspace.pkg.version;\n\n if (!currentVersion) {\n throw new UsageError(\n `Invalid \"${getWorkspaceName(workspace)}\" version`,\n );\n }\n\n changedWorkspaces.set(workspace, {\n bumpType,\n bumpReason,\n });\n }\n }\n\n if (changedWorkspaces.size === 0) {\n logger.info(\"No changed workspaces\");\n }\n });\n\n const bumpedWorkspaces = new Map<Workspace, BumpedWorkspace>();\n const noVersionToUpdateWorkspaces = new Map<\n Workspace,\n NoVersionToUpdateWorkspace\n >();\n const batches = dependenciesMap\n ? buildTopologicalOrderBatches(project, dependenciesMap)\n : [[rootWorkspace]];\n\n logger.group(\"Preparing bumping\", () => {\n for (const batch of batches) {\n for (const workspace of batch) {\n const currentVersion = workspace.pkg.version;\n\n if (!currentVersion && !workspace.pkg.private) {\n throw new UsageError(\n `Invalid \"${getWorkspaceName(workspace)}\" version`,\n );\n }\n\n const changedWorkspace = changedWorkspaces.get(workspace);\n let bumpType: BumpType | null = null;\n const bumpReasons: string[] = [];\n const dependenciesToBump: BumpedWorkspace[\"dependenciesToBump\"] = [];\n\n if (changedWorkspace) {\n bumpType = changedWorkspace.bumpType;\n bumpReasons.push(changedWorkspace.bumpReason || \"by commits\");\n }\n\n const dependencies = dependenciesMap?.get(workspace);\n\n if (dependencies) {\n for (const [\n dependencyWorkspace,\n dependencyType,\n dependencyDescriptor,\n ] of dependencies) {\n const dependencyBumpedWorkspace =\n bumpedWorkspaces.get(dependencyWorkspace);\n\n if (!dependencyBumpedWorkspace) {\n continue;\n }\n\n if (\n dependencyType === \"peerDependencies\" &&\n !options.alwaysBumpPeerDependencies &&\n // skip when peerdependency with a new version satisfied by the existing range.\n satisfies(\n dependencyBumpedWorkspace.newVersion,\n dependencyDescriptor.selector,\n {\n includePrerelease: true,\n },\n )\n ) {\n continue;\n }\n\n const newRange = calcBumpRange(\n workspace,\n dependencyDescriptor.selector,\n dependencyBumpedWorkspace.newVersion,\n );\n\n if (\n dependencyDescriptor.selector === newRange &&\n newRange !== \"workspace:*\" &&\n newRange !== \"workspace:^\" &&\n newRange !== \"workspace:~\"\n ) {\n continue;\n }\n\n dependenciesToBump.push([\n dependencyType,\n dependencyDescriptor,\n newRange,\n ]);\n\n bumpType = getHighestBumpType([\n bumpType ?? \"patch\",\n calcBumpType(\n dependencyBumpedWorkspace.bumpType,\n options.bumpDependentsHighestAs,\n ),\n ]);\n\n bumpReasons.push(\n `Version bump for dependency: ${PackageDescriptorNameUtils.stringify(dependencyDescriptor.name)}`,\n );\n }\n }\n\n const workspaceName = getWorkspaceName(workspace);\n if (!currentVersion) {\n logger.info(`${workspaceName}: skipped (no version)`);\n if (workspace !== rootWorkspace) {\n noVersionToUpdateWorkspaces.set(workspace, {\n dependenciesToBump,\n });\n }\n } else if (!bumpType) {\n logger.info(\n `${workspaceName}: skipped (${\n changedWorkspace\n ? `no bump recommended by ${options.preset}`\n : \"no changes\"\n })`,\n );\n } else {\n const newVersion = incrementVersion(\n workspace,\n currentVersion,\n bumpType,\n );\n\n const tagName = buildTagName(workspace, newVersion);\n\n if (workspace === rootWorkspace) {\n rootNewVersion = newVersion;\n rootNewTag = tagName;\n }\n\n if (workspace !== rootWorkspace || !isMonorepo) {\n const bumpReason = bumpReasons.join(\"\\n\");\n bumpedWorkspaces.set(workspace, {\n currentVersion,\n bumpType,\n bumpReason,\n bumpForDependenciesReasons: changedWorkspace\n ? bumpReasons.slice(1)\n : bumpReasons,\n newVersion,\n newTag: tagName,\n hasChanged: changedWorkspace !== undefined,\n dependenciesToBump,\n });\n\n logger.info(\n `${workspaceName}: ${currentVersion} -> ${\n !isMonorepo || isMonorepoVersionIndependent\n ? newVersion\n : \"bump\"\n } (${bumpReason.replaceAll(\"\\n\", \" ; \")})`,\n );\n // TODO Json only:\n // logger.info({\n // cwd: npath.fromPortablePath(workspace.cwd),\n // ident: workspaceName,\n // oldVersion: currentVersion,\n // ...(isMonorepoVersionIndependent ? { newVersion } : {}),\n // bumpType,\n // bumpReasons,\n // });\n }\n }\n }\n }\n });\n\n // TODO ask for confirmation\n // if (!this.yes) {\n // }\n\n // TODO do this entire phase here, not override for not independent only\n if (isMonorepo && !isMonorepoVersionIndependent) {\n const currentVersion = rootWorkspace.pkg.version!;\n const highestBumpType = getHighestBumpType(\n [...bumpedWorkspaces.values()].map(({ bumpType }) => bumpType),\n );\n const newVersion = incrementVersion(\n rootWorkspace,\n currentVersion,\n highestBumpType,\n );\n rootNewVersion = newVersion;\n rootNewTag = buildTagName(rootWorkspace, newVersion);\n\n [...bumpedWorkspaces.entries()].forEach(([workspace, bumpedWorkspace]) => {\n const isRoot = workspace === rootWorkspace;\n if (isRoot) {\n throw new Error(\"Unexpected root found in bumped workspaces\");\n }\n if (gt(bumpedWorkspace.currentVersion, newVersion)) {\n throw new UsageError(\n `\"${getWorkspaceName(workspace)}\" is at ${bumpedWorkspace.currentVersion}, higher than the monorepo version ${newVersion} it would be set to.\\nRemove \"version\" from the root package.json for independent versioning, or align the versions.`,\n );\n }\n bumpedWorkspace.bumpType = highestBumpType;\n bumpedWorkspace.newVersion = newVersion;\n bumpedWorkspace.newTag = null;\n });\n\n [\n ...bumpedWorkspaces.entries(),\n ...noVersionToUpdateWorkspaces.entries(),\n ].forEach(([workspace, { dependenciesToBump }]) => {\n dependenciesToBump.forEach((dependencyToBump) => {\n dependencyToBump[2] = calcBumpRange(\n workspace,\n dependencyToBump[1].selector,\n newVersion,\n );\n });\n });\n\n bumpedWorkspaces.set(rootWorkspace, {\n currentVersion,\n bumpType: highestBumpType,\n hasChanged: true,\n newVersion: rootNewVersion,\n newTag: rootNewTag,\n dependenciesToBump: [],\n });\n\n logger.info(\n `${currentVersion} -> ${newVersion}`,\n // TODO Json only:\n // {\n // oldVersion: currentVersion,\n // newVersion, },\n );\n }\n\n await logger.group(\"Applying changes\", async () => {\n // Update lockfile ; must be done to make sure preversion script can be ran\n\n if (!options.dryRun) {\n if (packageManager.installOnPackageContentChange) {\n logger.info(`${getWorkspaceName(rootWorkspace)}: Running install`);\n await packageManager.installOnPackageContentChange(rootWorkspace);\n }\n\n logger.info(\"Lifecycle script: preversion\");\n\n if (\n isMonorepoVersionIndependent &&\n rootWorkspace.pkg.scripts?.preversion\n ) {\n await packageManager.runScript(rootWorkspace, \"preversion\");\n }\n\n // lifecycle: preversion\n for (const workspace of bumpedWorkspaces.keys()) {\n if (workspace.pkg.scripts?.preversion) {\n await packageManager.runScript(workspace, \"preversion\");\n }\n }\n\n logger.info(\"Modifying versions in package.json\");\n // update versions\n\n await Promise.all(\n [...bumpedWorkspaces.entries()].map(\n ([workspace, { newVersion, dependenciesToBump }]) => {\n workspace.pkg.version = newVersion;\n\n for (const [\n dependencyType,\n dependencyDescriptor,\n dependencyNewRange,\n ] of dependenciesToBump) {\n const newDescriptor = PackageDependencyDescriptorUtils.make(\n dependencyDescriptor,\n dependencyNewRange,\n );\n const [key, newValue] =\n PackageDependencyDescriptorUtils.stringify(newDescriptor);\n workspace.pkg[dependencyType]![key] = newValue;\n }\n\n return writePkg(workspace);\n },\n ),\n );\n\n if (packageManager.installOnPackageContentChange) {\n // Update lockfile ; must be done before running again lifecycle scripts\n logger.info(`${getWorkspaceName(rootWorkspace)}: Running install`);\n await packageManager.installOnPackageContentChange(rootWorkspace);\n }\n\n // lifecycle: version\n logger.info(\"Lifecycle script: version\");\n for (const workspace of bumpedWorkspaces.keys()) {\n if (workspace.pkg.scripts?.version) {\n await packageManager.runScript(workspace, \"version\");\n }\n }\n }\n\n if (isMonorepoVersionIndependent && rootWorkspace.pkg.scripts?.version) {\n await packageManager.runScript(rootWorkspace, \"version\");\n }\n });\n\n const changelogs = new Map<Workspace, string>();\n\n await Promise.all(\n [...bumpedWorkspaces.entries()].map(\n async ([\n workspace,\n { newTag, hasChanged, bumpReason, bumpForDependenciesReasons },\n ]) => {\n // const workspaceRelativePath =\n // rootWorkspace === workspace\n // ? undefined\n // : path.relative(rootWorkspace.cwd, workspace.cwd);\n\n const commits = commitsByWorkspace?.get(workspace);\n\n let changelog = await generateChangelog(\n rootWorkspace,\n workspace.pkg,\n conventionalCommitConfig,\n previousTagVersionByWorkspace.get(workspace)?.tag || null,\n isMonorepoVersionIndependent ? newTag : rootNewTag,\n commits,\n todayInYYYYMMDD(),\n // {\n // path: workspaceRelativePath,\n // previousTag: previousTagByWorkspace.get(workspace) || undefined,\n // verbose: options.verbose,\n // tagPrefix: options.tagVersionPrefix,\n // lernaPackage:\n // rootWorkspace === workspace\n // ? undefined\n // : getWorkspaceName(workspace),\n // },\n );\n\n if (bumpForDependenciesReasons && workspace !== rootWorkspace) {\n if (bumpForDependenciesReasons.length > 0) {\n changelog += `${!changelog.endsWith(\"\\n\\n\") ? \"\\n\" : \"\"}${bumpForDependenciesReasons.join(\"\\n\")}\\n\\n`;\n }\n }\n\n if (changelog.slice(changelog.indexOf(\"\\n\")).trim().length === 0) {\n changelog += `${!changelog.endsWith(\"\\n\\n\") ? \"\\n\" : \"\"}Note: no notable changes\\n\\n`;\n }\n\n if (!changelog && rootWorkspace === workspace) {\n throw new Error(\"No changelog found for root workspace\");\n }\n\n changelogs.set(workspace, changelog);\n\n if (options.changelog) {\n if (options.dryRun) {\n logger.info(\n `${getWorkspaceName(workspace)}: ${options.changelog}\\n${changelog}`,\n );\n } else {\n await updateChangelogFile(\n changelog,\n options.tagVersionPrefix,\n `${workspace.cwd}/${options.changelog}`,\n );\n }\n }\n },\n ),\n );\n\n if (!options.dryRun) {\n logger.separator();\n\n if (packageManager.installOnPackageContentChange) {\n // install to update versions in lock file\n logger.info(`${getWorkspaceName(rootWorkspace)}: Running install`);\n await packageManager.installOnPackageContentChange(rootWorkspace);\n }\n\n logger.separator();\n\n const changedFiles = await getDirtyFiles(project.root);\n\n if (changedFiles) {\n logger.info(\"Commit, tag and push\", {\n changedFiles,\n });\n\n const tagsSet = new Set<string>(\n [...bumpedWorkspaces.values()]\n .map(({ newTag }) => newTag)\n .filter((newTag) => newTag !== null),\n );\n\n const tagsInCommitMessage = [...tagsSet]\n .map((tag) => `- ${tag}`)\n .join(\"\\n\");\n const message = options.commitMessage\n .replace(/\\\\n/g, \"\\n\")\n .replace(\n /%a/g,\n isMonorepoVersionIndependent\n ? `\\n\\n${tagsInCommitMessage}`\n : rootNewVersion,\n )\n .replace(/%s/g, rootNewTag)\n .replace(/%v/g, rootNewVersion)\n .replace(/%t/g, tagsInCommitMessage);\n\n await createGitCommit(rootWorkspace, message);\n\n for (const [workspace, { newTag }] of bumpedWorkspaces.entries()) {\n if (newTag === null) continue;\n await createGitTag(workspace, newTag);\n }\n\n if (\n await isBehindRemote(rootWorkspace, options.gitRemote, gitCurrentBranch)\n ) {\n logger.error(\"Remote is ahead, aborting\");\n // oxlint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n }\n\n await pushCommitsAndTags(\n rootWorkspace,\n options.gitRemote,\n gitCurrentBranch,\n );\n\n // run postversion\n if (rootWorkspace.pkg.scripts?.postversion) {\n logger.info(\"Lifecycle script: postversion\");\n await packageManager.runScript(rootWorkspace, \"postversion\");\n }\n\n // TODO open github PR\n\n if (options.createRelease && parsedRepoUrl) {\n logger.info(\"Create git release\");\n\n await Promise.all(\n [...bumpedWorkspaces.entries()].map(([workspace, { newTag }]) => {\n if (newTag === null) return Promise.resolve(undefined);\n const changelog = changelogs.get(workspace);\n if (!changelog) {\n logger.warn(\n `No changelog found for workspace: ${getWorkspaceName(workspace)}`,\n );\n return Promise.resolve(undefined);\n }\n return createGhRelease(workspace, {\n parsedRepoUrl,\n title: newTag,\n tag: newTag,\n body: changelog,\n prerelease: !!options.prerelease,\n });\n }),\n );\n }\n\n if (!options.publish) {\n return;\n }\n await logger.group(\"Publishing packages\", async () => {\n if (packageManager.publishWorkspaces) {\n await packageManager.publishWorkspaces(rootWorkspace, {\n provenance: options.publishProvenance,\n });\n } else {\n for (const [workspace] of bumpedWorkspaces.entries()) {\n if (workspace.pkg.private) {\n logger.info(\n `Skipping private workspace ${getWorkspaceName(workspace)}`,\n );\n continue;\n }\n\n logger.info(`Publishing ${getWorkspaceName(workspace)}`);\n await packageManager.publish(workspace, {\n provenance: options.publishProvenance,\n });\n }\n }\n });\n } else {\n logger.warn(\"No changes made. Nothing to commit.\");\n }\n }\n};\n\nexport const Defaults: VersionCommandOptions = {\n cwd: process.cwd(),\n includesRoot: false,\n dryRun: false,\n json: false,\n preset: \"conventional-changelog-conventionalcommits\",\n tagVersionPrefix: \"v\",\n changelog: \"CHANGELOG.md\",\n commitMessage: \"chore: release %a\",\n createRelease: false,\n bumpDependentsHighestAs: \"major\",\n alwaysBumpPeerDependencies: false,\n gitRemote: \"origin\",\n verbose: false,\n publish: false,\n publishProvenance: false,\n};\n\nexport default program\n .command(\"version\", { isDefault: true })\n .usage(\"Bump package version using conventional commit\")\n .addOption(\n new Option(\"--includes-root\", \"Release root workspace [untested]\").default(\n Defaults.includesRoot,\n ),\n )\n .addOption(new Option(\"--cwd\", \"working directory\").default(process.cwd()))\n .addOption(\n new Option(\n \"--dry-run\",\n \"Print the versions without actually generating the package archive\",\n ).default(Defaults.dryRun),\n )\n .addOption(new Option(\"-v,--verbose\").default(Defaults.verbose))\n .addOption(\n new Option(\"--force <type>\", \"Specify the release type\").choices([\n \"major\",\n \"minor\",\n \"patch\",\n ]),\n )\n .addOption(\n new Option(\n \"--prerelease [releaseType]\",\n \"Add a prerelease identifier to new versions\",\n ),\n )\n .addOption(\n new Option(\n \"--preset <presetName>\",\n \"Conventional Changelog preset to require. Defaults to conventional-changelog-conventionalcommits.\",\n ).default(\"conventional-changelog-conventionalcommits\"),\n )\n .addOption(\n new Option(\"--tag-version-prefix <prefix>\", \"Tag version prefix\").default(\n Defaults.tagVersionPrefix,\n ),\n )\n .addOption(\n new Option(\n \"--changelog <path>\",\n \"Changelog path. Default to CHANGELOG.md.\",\n ).default(Defaults.changelog),\n )\n .addOption(\n new Option(\n \"-m,--commit-message <message>\",\n 'Commit message. Default to \"chore: release %a\". You can use %v for the version, %s for the version with prefix, %t to list tags, %a for auto best display.',\n ).default(Defaults.commitMessage),\n )\n .addOption(\n new Option(\"--create-release <type>\", \"Create a release\").choices([\n \"github\",\n ]),\n )\n .addOption(\n new Option(\n \"--bump-dependents-highest-as <type>\",\n \"Bump dependents highest version as major, minor or patch\",\n )\n .choices([\"major\", \"minor\", \"patch\"])\n .default(Defaults.bumpDependentsHighestAs),\n )\n .addOption(\n new Option(\n \"--always-bump-peer-dependencies\",\n \"Always bump peer dependencies. Default to bumping only if the version doesn't satisfies the peer dependency range.\",\n ).default(Defaults.alwaysBumpPeerDependencies),\n )\n .addOption(\n new Option(\n \"--git-remote <remote-name>\",\n \"Git remote to push commits and tags to\",\n ).default(Defaults.gitRemote),\n )\n .addOption(\n new Option(\n \"--ignore-changes <glob>\",\n 'Ignore changes in files matching the glob. Example: \"**/*.test.js\"',\n ),\n )\n .addOption(new Option(\"--json\", \"Logger json\"))\n .addOption(\n new Option(\n \"--package-manager <manager>\",\n \"Specify the package manager to use (bun or yarn). Autodetected if not specified.\",\n ).choices([\"bun\", \"yarn\"]),\n )\n .addOption(new Option(\"--publish\", \"Publish after versioning\").default(false))\n .addOption(\n new Option(\n \"--publish-provenance\",\n \"Generate provenance attestation when publishing (if supported by package manager)\",\n ).default(false),\n )\n .action((options) => versionCommandAction(options));\n","import fs from \"node:fs\";\nimport { program } from \"commander\";\n\nimport \"./commands/version.ts\";\n\n// relative to dist directory\nconst pkg = JSON.parse(\n // oxlint-disable-next-line unicorn-js/prefer-json-parse-buffer\n fs.readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\"),\n);\n\nprogram.name(pkg.name).description(pkg.description).version(pkg.version);\nprogram.parse();\n"],"names":["chunk","selector","createConventionalCommitsParser","path","fs"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pob/version",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "simple versioning using conventional commits",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"commander": "14.0.3",
|
|
48
|
-
"conventional-changelog-conventionalcommits": "
|
|
49
|
-
"conventional-changelog-preset-loader": "
|
|
50
|
-
"conventional-changelog-writer": "
|
|
51
|
-
"conventional-commits-parser": "
|
|
48
|
+
"conventional-changelog-conventionalcommits": "10.4.1",
|
|
49
|
+
"conventional-changelog-preset-loader": "6.0.1",
|
|
50
|
+
"conventional-changelog-writer": "9.3.0",
|
|
51
|
+
"conventional-commits-parser": "7.1.3",
|
|
52
52
|
"nightingale": "18.2.0",
|
|
53
53
|
"semver": "7.8.5"
|
|
54
54
|
},
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"@types/node": "24.19.1",
|
|
58
58
|
"@types/semver": "7.8.0",
|
|
59
59
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
60
|
-
"type-fest": "5.
|
|
60
|
+
"type-fest": "5.10.0",
|
|
61
61
|
"typescript": "npm:@typescript/typescript6@6.0.2"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
@@ -1,10 +1,25 @@
|
|
|
1
|
+
import { syncBunLockFile } from "../utils/bunLockUtils.ts";
|
|
1
2
|
import { execCommand } from "../utils/execCommand.ts";
|
|
3
|
+
import type { Workspace } from "../utils/packageUtils.ts";
|
|
2
4
|
import type {
|
|
3
5
|
PackageManager,
|
|
4
6
|
PackageManagerPublishOptions,
|
|
5
7
|
} from "./PackageManager.ts";
|
|
6
8
|
|
|
7
9
|
export const BunPackageManager: PackageManager = {
|
|
10
|
+
async installOnPackageContentChange(rootWorkspace: Workspace) {
|
|
11
|
+
// bun does not refresh the workspace versions recorded in bun.lock, and
|
|
12
|
+
// `bun pm pack` / `bun publish` use them to replace `workspace:` ranges.
|
|
13
|
+
// Without this, a dependent is published with the previous version of its workspace dependency.
|
|
14
|
+
await syncBunLockFile(rootWorkspace.cwd);
|
|
15
|
+
// update the dependency ranges of the lockfile
|
|
16
|
+
await execCommand(
|
|
17
|
+
rootWorkspace,
|
|
18
|
+
["bun", "install", "--lockfile-only"],
|
|
19
|
+
"inherit",
|
|
20
|
+
);
|
|
21
|
+
},
|
|
22
|
+
|
|
8
23
|
async runScript(workspace, scriptName) {
|
|
9
24
|
await execCommand(workspace, ["bun", "run", scriptName], "inherit");
|
|
10
25
|
},
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import {
|
|
3
|
+
mkdirSync,
|
|
4
|
+
mkdtempSync,
|
|
5
|
+
readFileSync,
|
|
6
|
+
rmSync,
|
|
7
|
+
writeFileSync,
|
|
8
|
+
} from "node:fs";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
import { describe, expect, it } from "vitest";
|
|
12
|
+
import { BunPackageManager } from "../pm/BunPackageManager.ts";
|
|
13
|
+
import {
|
|
14
|
+
syncBunLockFile,
|
|
15
|
+
syncBunLockWorkspaceVersions,
|
|
16
|
+
} from "./bunLockUtils.ts";
|
|
17
|
+
|
|
18
|
+
const lock = `{
|
|
19
|
+
"lockfileVersion": 1,
|
|
20
|
+
"workspaces": {
|
|
21
|
+
"": {
|
|
22
|
+
"name": "root",
|
|
23
|
+
},
|
|
24
|
+
"packages/app": {
|
|
25
|
+
"name": "app",
|
|
26
|
+
"version": "1.0.0",
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"core": "workspace:*",
|
|
29
|
+
"other": "1.0.0",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
"packages/core": {
|
|
33
|
+
"name": "core",
|
|
34
|
+
"version": "1.0.0",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
"packages": {
|
|
38
|
+
"other": ["other@1.0.0", "", {}, "sha512-x"],
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
|
|
43
|
+
describe("syncBunLockWorkspaceVersions", () => {
|
|
44
|
+
it("only rewrites workspace versions", () => {
|
|
45
|
+
const result = syncBunLockWorkspaceVersions(lock, (workspacePath) =>
|
|
46
|
+
workspacePath === "packages/core" ? "1.0.1" : undefined,
|
|
47
|
+
);
|
|
48
|
+
expect(result).toBe(
|
|
49
|
+
lock.replace(
|
|
50
|
+
`"name": "core",\n "version": "1.0.0"`,
|
|
51
|
+
`"name": "core",\n "version": "1.0.1"`,
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("is a no-op when versions match", () => {
|
|
57
|
+
expect(syncBunLockWorkspaceVersions(lock, () => "1.0.0")).toBe(lock);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const bunAvailable = (() => {
|
|
62
|
+
try {
|
|
63
|
+
execFileSync("bun", ["--version"], { stdio: "ignore" });
|
|
64
|
+
return true;
|
|
65
|
+
} catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
})();
|
|
69
|
+
|
|
70
|
+
const suite = bunAvailable ? describe : describe.skip;
|
|
71
|
+
|
|
72
|
+
suite("bun workspace with workspace:*", () => {
|
|
73
|
+
it("packs the bumped version of a workspace dependency", async () => {
|
|
74
|
+
const dir = mkdtempSync(path.join(tmpdir(), "pob-version-bun-"));
|
|
75
|
+
try {
|
|
76
|
+
const write = (file: string, content: object) => {
|
|
77
|
+
mkdirSync(path.dirname(path.join(dir, file)), { recursive: true });
|
|
78
|
+
writeFileSync(path.join(dir, file), JSON.stringify(content));
|
|
79
|
+
};
|
|
80
|
+
write("package.json", {
|
|
81
|
+
name: "root",
|
|
82
|
+
private: true,
|
|
83
|
+
workspaces: ["packages/*"],
|
|
84
|
+
});
|
|
85
|
+
write("packages/core/package.json", { name: "core", version: "1.0.0" });
|
|
86
|
+
write("packages/app/package.json", {
|
|
87
|
+
name: "app",
|
|
88
|
+
version: "1.0.0",
|
|
89
|
+
dependencies: { core: "workspace:*" },
|
|
90
|
+
});
|
|
91
|
+
execFileSync("bun", ["install"], { cwd: dir, stdio: "ignore" });
|
|
92
|
+
|
|
93
|
+
// release bump: package.json only
|
|
94
|
+
write("packages/core/package.json", { name: "core", version: "1.0.1" });
|
|
95
|
+
|
|
96
|
+
const packedDependency = (): string => {
|
|
97
|
+
const appDir = path.join(dir, "packages/app");
|
|
98
|
+
execFileSync("bun", ["pm", "pack"], { cwd: appDir, stdio: "ignore" });
|
|
99
|
+
const manifest = execFileSync(
|
|
100
|
+
"tar",
|
|
101
|
+
["xzOf", "app-1.0.0.tgz", "package/package.json"],
|
|
102
|
+
{ cwd: appDir },
|
|
103
|
+
).toString();
|
|
104
|
+
rmSync(path.join(appDir, "app-1.0.0.tgz"));
|
|
105
|
+
return JSON.parse(manifest).dependencies.core;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// reproduces the bug
|
|
109
|
+
expect(packedDependency()).toBe("1.0.0");
|
|
110
|
+
|
|
111
|
+
await BunPackageManager.installOnPackageContentChange!({
|
|
112
|
+
cwd: dir,
|
|
113
|
+
} as any);
|
|
114
|
+
expect(readFileSync(path.join(dir, "bun.lock"), "utf8")).toContain(
|
|
115
|
+
'"version": "1.0.1"',
|
|
116
|
+
);
|
|
117
|
+
expect(packedDependency()).toBe("1.0.1");
|
|
118
|
+
|
|
119
|
+
// idempotent
|
|
120
|
+
await syncBunLockFile(dir);
|
|
121
|
+
expect(packedDependency()).toBe("1.0.1");
|
|
122
|
+
} finally {
|
|
123
|
+
rmSync(dir, { recursive: true, force: true });
|
|
124
|
+
}
|
|
125
|
+
}, 60_000);
|
|
126
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Rewrite the `version` of each entry of the `workspaces` section of a bun.lock (JSONC).
|
|
6
|
+
*
|
|
7
|
+
* bun replaces `workspace:` ranges with the version recorded there when packing/publishing,
|
|
8
|
+
* not the one from the workspace package.json, and `bun install` never refreshes it.
|
|
9
|
+
*
|
|
10
|
+
* Only the text of the version values is changed, so the formatting is preserved.
|
|
11
|
+
*/
|
|
12
|
+
export const syncBunLockWorkspaceVersions = (
|
|
13
|
+
lockContent: string,
|
|
14
|
+
getVersion: (workspacePath: string) => string | undefined,
|
|
15
|
+
): string => {
|
|
16
|
+
const lines = lockContent.split("\n");
|
|
17
|
+
let inWorkspaces = false;
|
|
18
|
+
let currentPath: string | null = null;
|
|
19
|
+
|
|
20
|
+
return lines
|
|
21
|
+
.map((line) => {
|
|
22
|
+
if (!inWorkspaces) {
|
|
23
|
+
if (/^ {2}"workspaces": \{\s*$/.test(line)) inWorkspaces = true;
|
|
24
|
+
return line;
|
|
25
|
+
}
|
|
26
|
+
if (/^ {2}\}/.test(line)) {
|
|
27
|
+
inWorkspaces = false;
|
|
28
|
+
return line;
|
|
29
|
+
}
|
|
30
|
+
const pathMatch = /^ {4}("(?:[^"\\]|\\.)*"): \{\s*$/.exec(line);
|
|
31
|
+
if (pathMatch) {
|
|
32
|
+
currentPath = JSON.parse(pathMatch[1]!) as string;
|
|
33
|
+
return line;
|
|
34
|
+
}
|
|
35
|
+
if (currentPath === null) return line;
|
|
36
|
+
const versionMatch = /^( {6}"version": )"(?:[^"\\]|\\.)*"(,?\s*)$/.exec(
|
|
37
|
+
line,
|
|
38
|
+
);
|
|
39
|
+
if (!versionMatch) return line;
|
|
40
|
+
const newVersion = getVersion(currentPath);
|
|
41
|
+
if (newVersion === undefined) return line;
|
|
42
|
+
const [, prefix = "", suffix = ""] = versionMatch;
|
|
43
|
+
return prefix + JSON.stringify(newVersion) + suffix;
|
|
44
|
+
})
|
|
45
|
+
.join("\n");
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const syncBunLockFile = async (rootCwd: string): Promise<void> => {
|
|
49
|
+
const lockPath = path.join(rootCwd, "bun.lock");
|
|
50
|
+
let content: string;
|
|
51
|
+
try {
|
|
52
|
+
content = await readFile(lockPath, "utf8");
|
|
53
|
+
} catch (error) {
|
|
54
|
+
if ((error as NodeJS.ErrnoException).code === "ENOENT") return; // legacy bun.lockb: binary, not handled
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const workspacePaths = new Set<string>();
|
|
59
|
+
syncBunLockWorkspaceVersions(content, (workspacePath) => {
|
|
60
|
+
workspacePaths.add(workspacePath);
|
|
61
|
+
return undefined;
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
const versions = new Map<string, string>();
|
|
65
|
+
await Promise.all(
|
|
66
|
+
[...workspacePaths].map(async (workspacePath) => {
|
|
67
|
+
const pkg = JSON.parse(
|
|
68
|
+
await readFile(
|
|
69
|
+
path.join(rootCwd, workspacePath, "package.json"),
|
|
70
|
+
"utf8",
|
|
71
|
+
),
|
|
72
|
+
) as { version?: string };
|
|
73
|
+
if (pkg.version !== undefined) versions.set(workspacePath, pkg.version);
|
|
74
|
+
}),
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const newContent = syncBunLockWorkspaceVersions(content, (workspacePath) =>
|
|
78
|
+
versions.get(workspacePath),
|
|
79
|
+
);
|
|
80
|
+
if (newContent !== content) await writeFile(lockPath, newContent);
|
|
81
|
+
};
|
|
@@ -231,7 +231,7 @@ describe("recommendBump", () => {
|
|
|
231
231
|
});
|
|
232
232
|
|
|
233
233
|
describe("no bump scenarios", () => {
|
|
234
|
-
it("should recommend
|
|
234
|
+
it("should not recommend a bump for chore commits", async () => {
|
|
235
235
|
const commits = [
|
|
236
236
|
createMockCommit("chore", "update dependencies"),
|
|
237
237
|
createMockCommit("chore", "update config"),
|
|
@@ -239,50 +239,50 @@ describe("recommendBump", () => {
|
|
|
239
239
|
|
|
240
240
|
const result = await recommendBump(commits, config);
|
|
241
241
|
|
|
242
|
-
expect(result.releaseType).
|
|
242
|
+
expect(result.releaseType).toBeUndefined();
|
|
243
243
|
});
|
|
244
244
|
|
|
245
|
-
it("should recommend
|
|
245
|
+
it("should not recommend a bump for docs commits", async () => {
|
|
246
246
|
const commits = [createMockCommit("docs", "update documentation")];
|
|
247
247
|
|
|
248
248
|
const result = await recommendBump(commits, config);
|
|
249
249
|
|
|
250
|
-
expect(result.releaseType).
|
|
250
|
+
expect(result.releaseType).toBeUndefined();
|
|
251
251
|
});
|
|
252
252
|
|
|
253
|
-
it("should recommend
|
|
253
|
+
it("should not recommend a bump for style commits", async () => {
|
|
254
254
|
const commits = [createMockCommit("style", "format code")];
|
|
255
255
|
|
|
256
256
|
const result = await recommendBump(commits, config);
|
|
257
257
|
|
|
258
|
-
expect(result.releaseType).
|
|
258
|
+
expect(result.releaseType).toBeUndefined();
|
|
259
259
|
});
|
|
260
260
|
|
|
261
|
-
it("should recommend
|
|
261
|
+
it("should not recommend a bump for test commits", async () => {
|
|
262
262
|
const commits = [createMockCommit("test", "add unit tests")];
|
|
263
263
|
|
|
264
264
|
const result = await recommendBump(commits, config);
|
|
265
265
|
|
|
266
|
-
expect(result.releaseType).
|
|
266
|
+
expect(result.releaseType).toBeUndefined();
|
|
267
267
|
});
|
|
268
268
|
|
|
269
|
-
it("should recommend
|
|
269
|
+
it("should not recommend a bump for build commits", async () => {
|
|
270
270
|
const commits = [createMockCommit("build", "update build script")];
|
|
271
271
|
|
|
272
272
|
const result = await recommendBump(commits, config);
|
|
273
273
|
|
|
274
|
-
expect(result.releaseType).
|
|
274
|
+
expect(result.releaseType).toBeUndefined();
|
|
275
275
|
});
|
|
276
276
|
|
|
277
|
-
it("should recommend
|
|
277
|
+
it("should not recommend a bump for ci commits", async () => {
|
|
278
278
|
const commits = [createMockCommit("ci", "update CI configuration")];
|
|
279
279
|
|
|
280
280
|
const result = await recommendBump(commits, config);
|
|
281
281
|
|
|
282
|
-
expect(result.releaseType).
|
|
282
|
+
expect(result.releaseType).toBeUndefined();
|
|
283
283
|
});
|
|
284
284
|
|
|
285
|
-
it("should recommend
|
|
285
|
+
it("should not recommend a bump for mixed non-feature commits", async () => {
|
|
286
286
|
const commits = [
|
|
287
287
|
createMockCommit("chore", "update deps"),
|
|
288
288
|
createMockCommit("docs", "update docs"),
|
|
@@ -292,15 +292,15 @@ describe("recommendBump", () => {
|
|
|
292
292
|
|
|
293
293
|
const result = await recommendBump(commits, config);
|
|
294
294
|
|
|
295
|
-
expect(result.releaseType).
|
|
295
|
+
expect(result.releaseType).toBeUndefined();
|
|
296
296
|
});
|
|
297
297
|
|
|
298
|
-
it("should recommend
|
|
298
|
+
it("should not recommend a bump for empty commit list", async () => {
|
|
299
299
|
const commits: Commit[] = [];
|
|
300
300
|
|
|
301
301
|
const result = await recommendBump(commits, config);
|
|
302
302
|
|
|
303
|
-
expect(result.releaseType).
|
|
303
|
+
expect(result.releaseType).toBeUndefined();
|
|
304
304
|
});
|
|
305
305
|
});
|
|
306
306
|
});
|
|
@@ -438,7 +438,7 @@ describe("generateChangelog", () => {
|
|
|
438
438
|
const commits = await createMockCommits(rawCommits);
|
|
439
439
|
|
|
440
440
|
const expectedChangelog =
|
|
441
|
-
"## [1.1.0](https://github.com/org/repo/compare
|
|
441
|
+
"## [1.1.0](https://github.com/org/repo/compare/%40test%2Fpackage-a%401.0.0...%40test%2Fpackage-a%401.1.0) (2025-01-15)\n\n### Bug Fixes\n\n* **package-a:** fix issue\n";
|
|
442
442
|
|
|
443
443
|
const changelog = await generateChangelog(
|
|
444
444
|
workspace,
|
|
@@ -471,7 +471,7 @@ describe("generateChangelog", () => {
|
|
|
471
471
|
const commits = await createMockCommits(rawCommits);
|
|
472
472
|
|
|
473
473
|
const expectedChangelog =
|
|
474
|
-
"## [2.0.0](https://github.com/org/repo/compare
|
|
474
|
+
"## [2.0.0](https://github.com/org/repo/compare/%40test%2Fpackage-b%401.0.0...%40test%2Fpackage-b%402.0.0) (2025-01-15)\n\n### ⚠ BREAKING CHANGES\n\n* **package-b:** API changed\n\n### Features\n\n* **package-b:** API changed\n";
|
|
475
475
|
|
|
476
476
|
const changelog = await generateChangelog(
|
|
477
477
|
workspace,
|