@absolutejs/changelog 0.5.1 → 0.7.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/CHANGELOG.md CHANGED
@@ -6,6 +6,22 @@ This file is generated by `absolute-changelog` from the entries in
6
6
  `changelog/`. Edit an entry, not this file — and add new ones under
7
7
  `changelog/unreleased/`.
8
8
 
9
+ ## 0.7.0 — 2026-09-10
10
+
11
+ ### Added
12
+
13
+ - **Say when the build is older than the source it was built from, because the gate compares what is on disk** (`buildIsStale`)
14
+
15
+ ## 0.6.0 — 2026-09-10
16
+
17
+ ### Added
18
+
19
+ - **The publish gate runs the whole check:package chain, not the changelog check alone**
20
+
21
+ ### Fixed
22
+
23
+ - **Write a publish gate that bun publish can actually run — the bare binary is not on its PATH**
24
+
9
25
  ## 0.5.1 — 2026-09-10
10
26
 
11
27
  ### Fixed
package/changelog.json CHANGED
@@ -2,6 +2,33 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/changelog",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "kind": "added",
9
+ "summary": "Say when the build is older than the source it was built from, because the gate compares what is on disk",
10
+ "symbols": [
11
+ "buildIsStale"
12
+ ]
13
+ }
14
+ ],
15
+ "date": "2026-09-10",
16
+ "version": "0.7.0"
17
+ },
18
+ {
19
+ "changes": [
20
+ {
21
+ "kind": "added",
22
+ "summary": "The publish gate runs the whole check:package chain, not the changelog check alone"
23
+ },
24
+ {
25
+ "kind": "fixed",
26
+ "summary": "Write a publish gate that bun publish can actually run — the bare binary is not on its PATH"
27
+ }
28
+ ],
29
+ "date": "2026-09-10",
30
+ "version": "0.6.0"
31
+ },
5
32
  {
6
33
  "changes": [
7
34
  {
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import { mkdir, readFile as readFile3, rm, writeFile as writeFile2 } from "fs/pr
8
8
  import { join as join2 } from "path";
9
9
 
10
10
  // src/entries.ts
11
- import { readdir, readFile } from "fs/promises";
11
+ import { readdir, readFile, stat } from "fs/promises";
12
12
  import { join } from "path";
13
13
  import { pathToFileURL } from "url";
14
14
 
@@ -598,6 +598,23 @@ var loadEntry = async (path2) => {
598
598
  var ENTRY = /\.[cm]?ts$/u;
599
599
  var DECLARATION2 = /\.d\.[cm]?ts$/u;
600
600
  var OUTPUT_DIRECTORIES = ["dist", "build", "lib", "types", "out"];
601
+ var newestUnder = async (root) => {
602
+ const found = await readdir(root, { withFileTypes: true }).catch(() => []);
603
+ const times = await Promise.all(found.map(async (entry) => {
604
+ const path2 = join(root, entry.name);
605
+ if (entry.isDirectory())
606
+ return newestUnder(path2);
607
+ return stat(path2).then((stats) => stats.mtimeMs, () => 0);
608
+ }));
609
+ return Math.max(0, ...times);
610
+ };
611
+ var buildIsStale = async (packageRoot) => {
612
+ const [source, built] = await Promise.all([
613
+ newestUnder(join(packageRoot, "src")),
614
+ Promise.all(OUTPUT_DIRECTORIES.map((directory) => newestUnder(join(packageRoot, directory)))).then((times) => Math.max(0, ...times))
615
+ ]);
616
+ return source > 0 && built > 0 && source > built;
617
+ };
601
618
  var builtSurface = async (packageRoot) => {
602
619
  const manifest = await readJsonFile(join(packageRoot, "package.json"));
603
620
  const files = new Map;
@@ -1164,6 +1181,8 @@ var check = async (root, flags) => {
1164
1181
  const offline = flags.offline === true;
1165
1182
  const built = await builtSurface(root);
1166
1183
  const shipsTypes = declaresTypes(await readJsonFile(join2(root, "package.json")));
1184
+ if (await buildIsStale(root))
1185
+ console.warn(" (the build is older than the source it was built from, so this compared yesterday's package \u2014 run the build first)");
1167
1186
  if (built === undefined && shipsTypes)
1168
1187
  failures.push("there are no declaration files where package.json says its types are \u2014 build before the gate, or nothing compares them");
1169
1188
  if (!shipsTypes)
@@ -1254,14 +1273,17 @@ var ignoreGenerated = async (root) => {
1254
1273
  `)}
1255
1274
  `);
1256
1275
  };
1257
- var PUBLISH_GATE = "absolute-changelog check";
1276
+ var PUBLISH_GATE = "bunx absolute-changelog check";
1277
+ var publishGateFor = (scripts) => typeof scripts["check:package"] === "string" ? "bun run check:package" : PUBLISH_GATE;
1258
1278
  var withPublishGate = (scripts) => {
1279
+ const wanted = publishGateFor(scripts);
1259
1280
  const existing = scripts.prepublishOnly;
1260
- if (typeof existing === "string" && existing.includes(PUBLISH_GATE))
1281
+ if (typeof existing === "string" && existing.includes(wanted))
1261
1282
  return;
1283
+ const replaceable = typeof existing !== "string" || existing.trim() === "" || existing.trim() === PUBLISH_GATE || existing.trim() === "absolute-changelog check";
1262
1284
  return {
1263
1285
  ...scripts,
1264
- prepublishOnly: typeof existing === "string" && existing.trim() !== "" ? `${existing} && ${PUBLISH_GATE}` : PUBLISH_GATE
1286
+ prepublishOnly: replaceable ? wanted : `${existing} && ${wanted}`
1265
1287
  };
1266
1288
  };
1267
1289
  var adopt = async (root) => {
@@ -1311,5 +1333,5 @@ await main().catch((error) => {
1311
1333
  process.exit(1);
1312
1334
  });
1313
1335
 
1314
- //# debugId=3D35EBE83A76D8A664756E2164756E21
1336
+ //# debugId=D18444F7EA93A50564756E2164756E21
1315
1337
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -2,8 +2,8 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/cli.ts", "../src/entries.ts", "../src/types.ts", "../src/versioning.ts", "../src/read.ts", "../src/surface.ts", "../src/tarball.ts", "../src/json.ts", "../src/reconcile.ts", "../src/registry.ts", "../src/write.ts"],
4
4
  "sourcesContent": [
5
- "#!/usr/bin/env bun\n/* absolute-changelog — the release-time companion for every package that\n * keeps a changelog.\n *\n * absolute-changelog add --kind added --summary \"…\"\n * Write a pending entry under changelog/unreleased/.\n *\n * absolute-changelog release [--as major|minor|patch|prerelease]\n * [--version x.y.z] [--date YYYY-MM-DD] [--dry]\n * Turn the pending entries into a release: work out the version, write\n * changelog.json and CHANGELOG.md, bump package.json, and clear the\n * entries it consumed.\n *\n * absolute-changelog check [--offline]\n * The gate. Entries parse; the generated files are what the entries say\n * they should be; the version lines up; and the exports that moved since\n * the last published version are the exports the entries name.\n *\n * absolute-changelog adopt\n * One-time: create the entry directory, keep whatever CHANGELOG.md\n * already said as history, and wire the package's files list.\n */\nimport { existsSync } from \"node:fs\";\nimport ts from \"typescript\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n builtSurface,\n changelogPaths,\n loadUnreleased,\n readJsonFile,\n strayEntries,\n} from \"./entries\";\nimport { writeJsonLike } from \"./json\";\nimport { parseChangelog } from \"./read\";\nimport { describeReconciliation, reconcile } from \"./reconcile\";\nimport { packageVersions, publishedSurface } from \"./registry\";\nimport { declaresTypes, diffSurface } from \"./surface\";\nimport {\n CHANGELOG_CONTRACT,\n CHANGELOG_FILE,\n CHANGELOG_MARKDOWN,\n CHANGE_KINDS,\n UNRELEASED_DIRECTORY,\n type Changelog,\n type ChangeKind,\n type Release,\n} from \"./types\";\nimport { compareVersions, nextVersion, type ReleaseKind } from \"./versioning\";\nimport { GENERATED_MARKER, renderChangelogJson, renderMarkdown } from \"./write\";\n\nclass CliError extends Error {}\n\nconst isChangeKind = (value: unknown): value is ChangeKind =>\n CHANGE_KINDS.some((kind) => kind === value);\n\nconst isReleaseKind = (value: unknown): value is ReleaseKind =>\n RELEASE_KINDS.some((kind) => kind === value);\n\nconst RELEASE_KINDS = [\"major\", \"minor\", \"patch\", \"prerelease\"] as const;\n/** Long enough to recognise the change in a file listing, short enough to\n * read. */\nconst SLUG_MAX_LENGTH = 48;\n/** `2026-09-10`. */\nconst ISO_DATE_LENGTH = 10;\n/** Enough of a dry run to see the release taking shape. */\nconst PREVIEW_LINES = 40;\n\ntype Flags = Record<string, string | true>;\n\nconst readFlags = (argv: readonly string[]) => {\n const flags: Flags = {};\n let skip = false;\n for (const [index, argument] of argv.entries()) {\n const consumed = skip;\n skip = false;\n if (consumed || !argument.startsWith(\"--\")) continue;\n const [name, inline] = argument.slice(2).split(\"=\");\n if (name === undefined || name === \"\") continue;\n const next = argv[index + 1];\n const takesNext =\n inline === undefined && next !== undefined && !next.startsWith(\"--\");\n skip = takesNext;\n flags[name] = inline ?? (takesNext && next !== undefined ? next : true);\n }\n\n return flags;\n};\n\nconst text = (flags: Flags, name: string) => {\n const value = flags[name];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst list = (flags: Flags, name: string) => {\n const value = text(flags, name);\n\n return value === undefined\n ? []\n : value\n .split(\",\")\n .map((part) => part.trim())\n .filter((part) => part !== \"\");\n};\n\ntype PackageShape = {\n exports?: unknown;\n scripts?: Record<string, unknown>;\n files?: string[];\n include?: unknown[];\n name?: string;\n version?: string;\n};\n\nconst isPackage = (value: unknown): value is PackageShape =>\n typeof value === \"object\" && value !== null;\n\nconst readPackage = async (root: string) => {\n const document = await readJsonFile(join(root, \"package.json\"));\n if (\n !isPackage(document) ||\n typeof document.name !== \"string\" ||\n typeof document.version !== \"string\"\n )\n throw new CliError(\n \"No package.json with a name and a version here. Run this from a package root.\",\n );\n const manifest: PackageShape & { name: string; version: string } = {\n ...document,\n name: document.name,\n version: document.version,\n };\n\n return manifest;\n};\n\nconst readChangelog = async (root: string, name: string) => {\n const document = await readJsonFile(changelogPaths(root).json);\n if (document === undefined) {\n const empty: Changelog = {\n contract: CHANGELOG_CONTRACT,\n name,\n releases: [],\n };\n\n return empty;\n }\n const read = parseChangelog(document);\n if (read.problems)\n throw new CliError(\n [`${CHANGELOG_FILE} is not a changelog:`, ...read.problems].join(\"\\n \"),\n );\n\n return read.changelog;\n};\n\nconst historyOf = async (root: string) =>\n readFile(changelogPaths(root).history, \"utf8\").catch(() => undefined);\n\nconst writeBoth = async (root: string, changelog: Changelog) => {\n const paths = changelogPaths(root);\n const history = await historyOf(root);\n await writeFile(paths.json, renderChangelogJson(changelog));\n await writeFile(\n paths.markdown,\n renderMarkdown(changelog, history === undefined ? {} : { history }),\n );\n};\n\nconst slug = (summary: string) =>\n summary\n .toLowerCase()\n .replace(/[^a-z0-9]+/gu, \"-\")\n .replace(/^-|-$/gu, \"\")\n .slice(0, SLUG_MAX_LENGTH) || \"change\";\n\n/**\n * Where the package's public API is declared, if it is where it usually is.\n *\n * An entry that imports it gets its symbols checked by the compiler at the\n * moment somebody types them, which is the difference between a typo caught\n * in an editor and a typo caught by a release gate a fortnight later.\n */\nconst sourceEntryOf = (root: string) => {\n for (const candidate of [\"src/index.ts\", \"src/index.tsx\", \"index.ts\"])\n if (existsSync(join(root, candidate)))\n return `../../${candidate.replace(/\\.tsx?$/u, \"\")}`;\n\n return undefined;\n};\n\nconst add = async (root: string, flags: Flags) => {\n const kind = text(flags, \"kind\");\n const summary = text(flags, \"summary\");\n if (!isChangeKind(kind))\n throw new CliError(`--kind must be one of: ${CHANGE_KINDS.join(\", \")}`);\n if (summary === undefined)\n throw new CliError(\"--summary is what the change is, in one line\");\n const symbols = list(flags, \"symbol\");\n const disruptive = kind === \"breaking\" || kind === \"removed\";\n if (disruptive && symbols.length === 0)\n throw new CliError(\n `a ${kind} change must name the exports it affects: --symbol serve,createServer`,\n );\n const instruction = text(flags, \"instruction\");\n if (disruptive && instruction === undefined)\n throw new CliError(\n `a ${kind} change must say how to migrate: --instruction \"…\"`,\n );\n const renameTo = text(flags, \"rename-to\");\n const migration =\n renameTo !== undefined && symbols[0] !== undefined\n ? [\n \"\\tmigration: {\",\n `\\t\\tinstruction: ${JSON.stringify(instruction)},`,\n `\\t\\trename: { from: ${JSON.stringify(\n symbols[0],\n )}, to: ${JSON.stringify(renameTo)} }`,\n \"\\t},\",\n ]\n : [\n `\\tmigration: { instruction: ${JSON.stringify(\n instruction,\n )}, manual: true },`,\n ];\n /* A type-only import, so the entry has nothing to resolve at run time.\n * The release gate reads these files back, and a gate that only works\n * where the dev dependencies are installed is a gate that fails in the\n * one place it matters.\n *\n * A named export rather than a default one: the ecosystem's lint config\n * restricts default exports, and an entry that trips the linter of every\n * package that writes one is a contract nobody keeps. */\n const api = sourceEntryOf(root);\n const body = [\n ...(api === undefined ? [] : [`import type * as Api from '${api}';`]),\n \"import type { Change } from '@absolutejs/changelog';\",\n \"\",\n `export const change: Change${api === undefined ? \"\" : \"<typeof Api>\"} = {`,\n `\\tkind: ${JSON.stringify(kind)},`,\n ...(disruptive ? migration : []),\n `\\tsummary: ${JSON.stringify(summary)}${symbols.length > 0 ? \",\" : \"\"}`,\n ...(symbols.length > 0 ? [`\\tsymbols: ${JSON.stringify(symbols)}`] : []),\n \"};\",\n \"\",\n ].join(\"\\n\");\n const directory = join(root, UNRELEASED_DIRECTORY);\n await mkdir(directory, { recursive: true });\n const file = join(directory, `${slug(summary)}.ts`);\n await writeFile(file, body);\n console.log(`wrote ${file}`);\n};\n\nconst release = async (root: string, flags: Flags) => {\n const manifest = await readPackage(root);\n const { entries, problems } = await loadUnreleased(root);\n if (problems.length > 0)\n throw new CliError(\n [\"These entries are not usable:\", ...problems].join(\"\\n \"),\n );\n if (entries.length === 0)\n throw new CliError(\n `Nothing to release: ${UNRELEASED_DIRECTORY} is empty. Add a change first.`,\n );\n const asked = text(flags, \"as\");\n if (asked !== undefined && !isReleaseKind(asked))\n throw new CliError(`--as must be one of: ${RELEASE_KINDS.join(\", \")}`);\n const changes = entries.map((entry) => entry.change);\n const version =\n text(flags, \"version\") ??\n nextVersion({\n ...(isReleaseKind(asked) ? { asked } : {}),\n changes,\n current: manifest.version ?? \"0.0.0\",\n });\n if (version === undefined)\n throw new CliError(\n `Could not work out the next version from ${manifest.version}.`,\n );\n const changelog = await readChangelog(root, manifest.name ?? \"\");\n if (changelog.releases.some((entry) => entry.version === version))\n throw new CliError(`${version} is already in the changelog.`);\n const [first, ...rest] = changes;\n if (first === undefined)\n throw new CliError(`Nothing to release: ${UNRELEASED_DIRECTORY} is empty.`);\n const next: Release = {\n changes: [first, ...rest],\n date:\n text(flags, \"date\") ?? new Date().toISOString().slice(0, ISO_DATE_LENGTH),\n version,\n };\n const written: Changelog = {\n ...changelog,\n releases: [next, ...changelog.releases],\n };\n if (flags.dry === true) {\n console.log(\n renderMarkdown(written).split(\"\\n\").slice(0, PREVIEW_LINES).join(\"\\n\"),\n );\n console.log(`\\n(dry run: ${manifest.version} → ${version})`);\n\n return;\n }\n await writeBoth(root, written);\n await writeJsonLike(join(root, \"package.json\"), { ...manifest, version });\n await Promise.all(\n entries.map((entry) => rm(join(root, entry.file), { force: true })),\n );\n console.log(\n `${manifest.name} ${manifest.version} → ${version} (${entries.length} change${\n entries.length === 1 ? \"\" : \"s\"\n })`,\n );\n};\n\nconst check = async (root: string, flags: Flags) => {\n const manifest = await readPackage(root);\n const failures: string[] = [];\n const { entries, problems } = await loadUnreleased(root);\n failures.push(...problems);\n const document = await readJsonFile(changelogPaths(root).json);\n const read = document === undefined ? undefined : parseChangelog(document);\n if (read?.problems)\n throw new CliError(\n [`${CHANGELOG_FILE} is not a changelog:`, ...read.problems].join(\"\\n \"),\n );\n /* A package that has adopted this and not released yet has no document,\n * which is a state to check rather than a failure: the entries are still\n * checked, and so is everything that does not need a release to compare\n * against. */\n const current: Changelog = read?.changelog ?? {\n contract: CHANGELOG_CONTRACT,\n name: manifest.name ?? \"\",\n releases: [],\n };\n const [newest] = current.releases;\n /* The version in the manifest is the version that was last released, and\n * the newest release in the changelog is the same thing said twice.\n * Whenever the two disagree, one of them was edited by hand. */\n if (newest !== undefined && newest.version !== manifest.version)\n failures.push(\n `package.json is ${manifest.version} and the newest release in ${CHANGELOG_FILE} is ${newest.version}`,\n );\n if (newest !== undefined && current.name !== manifest.name)\n failures.push(\n `${CHANGELOG_FILE} is for ${current.name}, not ${manifest.name}`,\n );\n /* The markdown is generated. If it does not match what the entries say it\n * should be, somebody edited the copy rather than the original. */\n const history = await historyOf(root);\n const expected = renderMarkdown(\n current,\n history === undefined ? {} : { history },\n );\n const actual = await readFile(changelogPaths(root).markdown, \"utf8\").catch(\n () => undefined,\n );\n /* Checked whether or not anything has been released. It used to wait for a\n * first release, which meant every package in a freshly adopted ecosystem\n * had a generated file nothing was watching -- and a second adoption\n * quietly rewrote 65 of them. */\n if (actual !== expected)\n failures.push(\n `${CHANGELOG_MARKDOWN} is not what the entries say it should be — it is generated; run \\`absolute-changelog release\\` or restore it`,\n );\n const tsconfig = await readTsconfig(join(root, \"tsconfig.json\"));\n const include = includeOf(tsconfig?.config);\n if (Array.isArray(include) && !coversEntries(include))\n failures.push(\n 'tsconfig.json does not compile changelog/, so nothing is checking the entries — add \"changelog/**/*\" to its include list',\n );\n for (const stray of await strayEntries(root))\n failures.push(\n `${UNRELEASED_DIRECTORY}/${stray} is not an entry, so no release will ever read it`,\n );\n /* Both documents have to ship, or a consumer that reads them gets a\n * package that quietly has none. */\n const shipped = Array.isArray(manifest.files) ? manifest.files : [];\n for (const file of [CHANGELOG_FILE, CHANGELOG_MARKDOWN])\n if (shipped.length > 0 && !shipped.includes(file))\n failures.push(`package.json does not ship ${file}`);\n /* And the part nobody can do by remembering: what the types say happened\n * against what the entries say happened.\n *\n * The baseline is the newest version the registry actually has, which is\n * not always the version in package.json -- between `release` and `publish`\n * the manifest names a version nobody can fetch. Comparing against that\n * asks the registry for something that is not there, gets nothing, and\n * passes: the gate would go quiet at the one moment it exists for.\n *\n * So the entries that speak are every entry newer than what is published:\n * the ones still waiting, and the ones a release has already folded in. */\n const offline = flags.offline === true;\n const built = await builtSurface(root);\n /* A package about to publish types it has not built. The old gate warned\n * and passed, which is the same thing as not having a gate on a clean\n * checkout -- and `prepublishOnly` runs before `prepack`, so a package that\n * builds there arrives here with nothing on disk every time.\n *\n * A package that ships no types at all has no promise of this kind to\n * check, and is left alone. */\n const shipsTypes = declaresTypes(\n await readJsonFile(join(root, \"package.json\")),\n );\n if (built === undefined && shipsTypes)\n failures.push(\n \"there are no declaration files where package.json says its types are — build before the gate, or nothing compares them\",\n );\n if (!shipsTypes)\n console.warn(\" (this package ships no types, so none were compared)\");\n const versions = offline\n ? undefined\n : await packageVersions(manifest.name ?? \"\");\n /* The registry did not answer. Every reason for that -- an outage, a rate\n * limit, a private registry this does not know about, a scoped package\n * needing auth -- ends with the types unchecked, and a gate that passes\n * when it could not check is a gate that disarms itself on a bad afternoon.\n * `--offline` is how somebody says they meant it. */\n if (!offline && versions === undefined)\n failures.push(\n `the registry did not answer for ${manifest.name}, so nothing was compared — pass --offline to skip the comparison deliberately`,\n );\n /* Answered, with nothing on it. A first release has no previous version to\n * be checked against, and refusing it would mean no package could ever have\n * one. */\n if (versions !== undefined && versions.published.length === 0)\n console.warn(\n ` (${manifest.name} has never been published, so there was nothing to compare)`,\n );\n const baseline = (versions?.published ?? [])\n .filter((version) => compareVersions(version, manifest.version) <= 0)\n .sort(compareVersions)\n .at(LAST);\n /* Published versions exist and none of them is at or below this one: the\n * manifest is behind the registry, which is its own problem. */\n if (\n versions !== undefined &&\n versions.published.length > 0 &&\n baseline === undefined &&\n !offline\n )\n console.warn(\n ` (nothing published at or below ${manifest.version}, so there was nothing to compare)`,\n );\n if (built !== undefined && baseline !== undefined) {\n const published = await publishedSurface(manifest.name ?? \"\", baseline);\n if (published === undefined)\n failures.push(\n `could not read the published types of ${manifest.name}@${baseline}, so nothing was compared`,\n );\n const speaking = [\n ...entries.map((entry) => entry.change),\n ...current.releases\n .filter((entry) => compareVersions(entry.version, baseline) > 0)\n .flatMap((entry) => [...entry.changes]),\n ];\n failures.push(\n ...(published === undefined\n ? []\n : describeReconciliation(\n reconcile({\n after: new Set(built.keys()),\n changes: speaking,\n diff: diffSurface(published, built),\n known: new Set([...published.keys(), ...built.keys()]),\n subpaths: subpathsOf(manifest),\n }),\n )),\n );\n }\n if (failures.length > 0)\n throw new CliError(\n [\"This package’s changelog does not hold:\", ...failures].join(\"\\n \"),\n );\n console.log(\n `${manifest.name}@${manifest.version}: changelog holds (${entries.length} pending, ${current.releases.length} released)`,\n );\n};\n\n/**\n * Make sure the entries are compiled by whatever compiles this package.\n *\n * The whole claim of the contract is that the compiler reviews every entry --\n * which it does not, if the package's `include` only names `src`. Nothing\n * else about the setup gives that away: entries would sit there looking\n * checked and be checked by nobody.\n */\n/** The last of a sorted list. */\nconst LAST = -1;\n\n/**\n * The entry points a package offers, as the specifiers somebody would import.\n *\n * Taken from the exports map, so a migration cannot point at a subpath that\n * does not exist -- the kind of typo that is invisible in a changelog and\n * fatal in a codemod.\n */\nconst subpathsOf = (manifest: PackageShape) => {\n const { exports } = manifest;\n if (typeof exports !== \"object\" || exports === null) return new Set<string>();\n\n return new Set(\n Object.keys(exports).map((key) =>\n key === \".\" ? (manifest.name ?? \"\") : `${manifest.name}${key.slice(1)}`,\n ),\n );\n};\n\nconst CHECKING_CONFIGS = [\"tsconfig.json\", \"tsconfig.eslint.json\"] as const;\n\n/** A tsconfig is JSON with comments, which `JSON.parse` refuses. TypeScript's\n * own reader takes it, and this package already depends on it. */\nconst readTsconfig = async (path: string) => {\n const source = await readFile(path, \"utf8\").catch(() => undefined);\n if (source === undefined) return undefined;\n const read = ts.parseConfigFileTextToJson(path, source);\n\n if (read.error !== undefined) return undefined;\n const { config } = read;\n const parsed: unknown = config;\n\n return { config: parsed, source };\n};\n\nconst coversEntries = (include: unknown) =>\n Array.isArray(include) &&\n include.some(\n (entry) => typeof entry === \"string\" && entry.startsWith(\"changelog\"),\n );\n\nconst includeOf = (config: unknown) =>\n typeof config === \"object\" && config !== null\n ? new Map(Object.entries(config)).get(\"include\")\n : undefined;\n\n/**\n * Add the entries to an include list without reformatting the file.\n *\n * A surgical insertion rather than a re-serialisation, because a tsconfig\n * carries comments -- the framework's own explains why `src/build/` is not\n * excluded -- and rewriting it as JSON would delete them.\n */\nconst includeEntriesIn = async (root: string, file: string) => {\n const path = join(root, file);\n const read = await readTsconfig(path);\n if (read === undefined) return false;\n const include = includeOf(read.config);\n if (!Array.isArray(include) || coversEntries(include)) return false;\n const opened = /\"include\"\\s*:\\s*\\[/u.exec(read.source);\n if (opened === null) return false;\n const opens = opened.index + opened[0].length;\n await writeFile(\n path,\n `${read.source.slice(0, opens)}\\n\\t\\t\"changelog/**/*\",${read.source.slice(opens)}`,\n );\n\n return true;\n};\n\nconst includeEntries = async (root: string) => {\n const wired = await Promise.all(\n CHECKING_CONFIGS.map((file) => includeEntriesIn(root, file)),\n );\n\n return wired.some(Boolean)\n ? undefined\n : \"no tsconfig include list to wire — make sure changelog/ is compiled by something\";\n};\n\n/**\n * Keep the formatter off the generated copies.\n *\n * Every package here runs prettier over `**\\/*.{ts,json,md}`, which is both of\n * these -- and the gate compares `CHANGELOG.md` byte for byte against what the\n * entries say it should be. A formatter rewrapping a line would fail a release\n * for a reason nobody could see.\n */\nconst ignoreGenerated = async (root: string) => {\n const path = join(root, \".prettierignore\");\n const existing = await readFile(path, \"utf8\").catch(() => \"\");\n const wanted = [CHANGELOG_FILE, CHANGELOG_MARKDOWN].filter(\n (name) => !existing.split(\"\\n\").includes(name),\n );\n if (wanted.length === 0) return;\n const head =\n existing.trim() === \"\"\n ? \"# Generated by absolute-changelog. Edit the entries, not these.\\n\"\n : `${existing.trimEnd()}\\n`;\n await writeFile(path, `${head}${wanted.join(\"\\n\")}\\n`);\n};\n\n/**\n * The gate on the way out, not only on the way to it.\n *\n * `check:package` is a chain somebody chose to run. `prepublishOnly` is one\n * npm and bun run themselves, whatever the publish was started by -- a\n * release script, a bare `npm publish`, a CI job, a person in a hurry at the\n * end of a day. A rule that can be walked around is a rule that eventually\n * is.\n */\nconst PUBLISH_GATE = \"absolute-changelog check\";\n\nconst withPublishGate = (scripts: Record<string, unknown>) => {\n const existing = scripts.prepublishOnly;\n if (typeof existing === \"string\" && existing.includes(PUBLISH_GATE))\n return undefined;\n\n return {\n ...scripts,\n prepublishOnly:\n typeof existing === \"string\" && existing.trim() !== \"\"\n ? `${existing} && ${PUBLISH_GATE}`\n : PUBLISH_GATE,\n };\n};\n\nconst adopt = async (root: string) => {\n const manifest = await readPackage(root);\n const paths = changelogPaths(root);\n await mkdir(paths.unreleased, { recursive: true });\n await writeFile(\n join(paths.unreleased, \".gitkeep\"),\n \"# Entries wait here. One file per change; `absolute-changelog release` consumes them.\\n\",\n );\n /* Whatever the package said before this takes over. It is kept rather\n * than parsed: prose written by hand over two years is history, and\n * guessing structure out of it would invent facts.\n *\n * Except our own output, which is what a second adoption finds. Filing that\n * as history prints the header underneath itself, and a third run would\n * nest it again -- adopting has to be a thing you can run twice. */\n const previous = existsSync(paths.markdown)\n ? await readFile(paths.markdown, \"utf8\")\n : undefined;\n if (\n previous !== undefined &&\n !previous.includes(GENERATED_MARKER) &&\n !existsSync(paths.history)\n ) {\n await mkdir(join(root, \"changelog\"), { recursive: true });\n await writeFile(\n paths.history,\n previous.replace(/^#\\s+Changelog\\s*/u, \"\").trimStart(),\n );\n await rm(paths.markdown, { force: true });\n }\n const files = manifest.files ?? [];\n const wanted = [CHANGELOG_FILE, CHANGELOG_MARKDOWN].filter(\n (entry) => !files.includes(entry),\n );\n const scripts =\n typeof manifest.scripts === \"object\" && manifest.scripts !== null\n ? withPublishGate(manifest.scripts)\n : undefined;\n if (wanted.length > 0 || scripts !== undefined)\n await writeJsonLike(join(root, \"package.json\"), {\n ...manifest,\n ...(scripts === undefined ? {} : { scripts }),\n files: [...files, ...wanted].sort(),\n });\n await ignoreGenerated(root);\n const note = await includeEntries(root);\n if (note !== undefined) console.warn(` (${note})`);\n const changelog = await readChangelog(root, manifest.name ?? \"\");\n await writeBoth(root, changelog);\n console.log(\n `${manifest.name}: ready. Add changes with \\`absolute-changelog add\\`, release with \\`absolute-changelog release\\`.`,\n );\n};\n\nconst main = async () => {\n const [command = \"\", ...argv] = process.argv.slice(2);\n const flags = readFlags(argv);\n const root = process.cwd();\n if (command === \"add\") return add(root, flags);\n if (command === \"release\") return release(root, flags);\n if (command === \"check\") return check(root, flags);\n if (command === \"adopt\") return adopt(root);\n\n throw new CliError(\n \"Usage: absolute-changelog <add|release|check|adopt> [options]\",\n );\n};\n\nawait main().catch((error: unknown) => {\n console.error(\n error instanceof CliError\n ? error.message\n : `absolute-changelog failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n process.exit(1);\n});\n",
6
- "import { readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { validateChange } from \"./read\";\nimport { surfaceOfFiles, typeEntriesOf } from \"./surface\";\nimport {\n CHANGELOG_FILE,\n CHANGELOG_MARKDOWN,\n UNRELEASED_DIRECTORY,\n type Change,\n} from \"./types\";\n\n/*\n * The package on disk: its pending entries, its history, and the types it is\n * about to publish.\n *\n * Entries are TypeScript modules rather than data files, so an author writing\n * one is typing against the contract with the compiler watching. Reading them\n * back is an import, which is the same thing the compiler did, so a file that\n * would not build is a file that does not release.\n */\n\nexport type LoadedEntry = {\n change: Change;\n /** Relative, because it is printed at somebody who has to go and fix it. */\n file: string;\n};\n\n/**\n * Import one entry file, and say what went wrong rather than throwing.\n *\n * An entry that will not import is a problem to report beside the others --\n * a release that stops at the first bad file makes somebody fix them one at a\n * time.\n */\nconst loadEntry = async (path: string) => {\n try {\n const module: unknown = await import(pathToFileURL(path).href);\n /* `change` is what the template writes; `default` is accepted because a\n * default export is the shape somebody reaches for by habit, and\n * refusing it would be pedantry rather than a check. */\n const named =\n typeof module === \"object\" && module !== null && \"change\" in module\n ? module.change\n : undefined;\n const exported =\n named ??\n (typeof module === \"object\" && module !== null && \"default\" in module\n ? module.default\n : undefined);\n const read: { exported: unknown; failure?: string } = { exported };\n\n return read;\n } catch (error) {\n const failed: { exported?: undefined; failure: string } = {\n failure: error instanceof Error ? error.message : String(error),\n };\n\n return failed;\n }\n};\n\nexport type LoadedEntries = {\n entries: LoadedEntry[];\n problems: string[];\n};\n\nconst ENTRY = /\\.[cm]?ts$/u;\n\nconst DECLARATION = /\\.d\\.[cm]?ts$/u;\n/** Where a build puts its declaration files. Which of them a package actually\n * publishes comes from its manifest; this is only where to look. */\nconst OUTPUT_DIRECTORIES = [\"dist\", \"build\", \"lib\", \"types\", \"out\"];\n\n/**\n * The public surface a build produced, read the way a consumer would.\n *\n * From the entry points the manifest declares, following the export graph --\n * not by heaping every declaration file together, which counts names no\n * consumer can import and cannot see one being withdrawn.\n *\n * Nothing when the manifest's entry points are not on disk: that is a package\n * about to publish types it has not built, and passing it would be the gate\n * going quiet at the worst possible moment.\n */\nexport const builtSurface = async (packageRoot: string) => {\n const manifest = await readJsonFile(join(packageRoot, \"package.json\"));\n const files = new Map<string, string>();\n const walk = async (directory: string): Promise<void> => {\n const found = await readdir(join(packageRoot, directory), {\n withFileTypes: true,\n }).catch(() => []);\n await Promise.all(\n found.map(async (entry) => {\n const relative = `${directory}/${entry.name}`;\n if (entry.isDirectory()) return walk(relative);\n if (!DECLARATION.test(entry.name)) return undefined;\n files.set(\n relative,\n await readFile(join(packageRoot, relative), \"utf8\").catch(() => \"\"),\n );\n\n return undefined;\n }),\n );\n };\n await Promise.all(OUTPUT_DIRECTORIES.map((directory) => walk(directory)));\n const entries = typeEntriesOf(manifest, files);\n\n return entries.length === 0 ? undefined : surfaceOfFiles(files, entries);\n};\n\nexport const changelogPaths = (packageRoot: string) => ({\n history: join(packageRoot, \"changelog\", \"history.md\"),\n json: join(packageRoot, CHANGELOG_FILE),\n markdown: join(packageRoot, CHANGELOG_MARKDOWN),\n unreleased: join(packageRoot, UNRELEASED_DIRECTORY),\n});\n/** Every pending entry, in a stable order so a release reads the same twice. */\nexport const loadUnreleased = async (packageRoot: string) => {\n const directory = join(packageRoot, UNRELEASED_DIRECTORY);\n const names = await readdir(directory).catch(() => []);\n const entries: LoadedEntry[] = [];\n const problems: string[] = [];\n for (const name of names.filter((file) => ENTRY.test(file)).sort()) {\n const file = join(UNRELEASED_DIRECTORY, name);\n // Serial on purpose: the count is small and the failure messages read\n // in file order.\n // eslint-disable-next-line no-await-in-loop\n const loaded = await loadEntry(join(directory, name));\n if (loaded.failure !== undefined)\n problems.push(`${file}: ${loaded.failure}`);\n const checked =\n loaded.failure === undefined\n ? validateChange(loaded.exported, file)\n : undefined;\n if (checked?.problems) problems.push(...checked.problems);\n if (checked?.change !== undefined)\n entries.push({ change: checked.change, file });\n }\n\n return { entries, problems };\n};\nexport const readJsonFile = async (path: string) => {\n const source = await readFile(path, \"utf8\").catch(() => undefined);\n if (source === undefined) return undefined;\n try {\n const document: unknown = JSON.parse(source);\n\n return document;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Anything in the entry directory that is not an entry.\n *\n * A `.md` note dropped in here, or a `.txt` somebody meant as a placeholder,\n * is read by nothing and consumed by nothing -- it sits there through every\n * release looking like a change that was recorded.\n */\nexport const strayEntries = async (packageRoot: string) => {\n const names = await readdir(join(packageRoot, UNRELEASED_DIRECTORY)).catch(\n () => [],\n );\n\n return names.filter(\n (name) => !ENTRY.test(name) && name !== \".gitkeep\" && !name.startsWith(\".\"),\n );\n};\n",
5
+ "#!/usr/bin/env bun\n/* absolute-changelog — the release-time companion for every package that\n * keeps a changelog.\n *\n * absolute-changelog add --kind added --summary \"…\"\n * Write a pending entry under changelog/unreleased/.\n *\n * absolute-changelog release [--as major|minor|patch|prerelease]\n * [--version x.y.z] [--date YYYY-MM-DD] [--dry]\n * Turn the pending entries into a release: work out the version, write\n * changelog.json and CHANGELOG.md, bump package.json, and clear the\n * entries it consumed.\n *\n * absolute-changelog check [--offline]\n * The gate. Entries parse; the generated files are what the entries say\n * they should be; the version lines up; and the exports that moved since\n * the last published version are the exports the entries name.\n *\n * absolute-changelog adopt\n * One-time: create the entry directory, keep whatever CHANGELOG.md\n * already said as history, and wire the package's files list.\n */\nimport { existsSync } from \"node:fs\";\nimport ts from \"typescript\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n buildIsStale,\n builtSurface,\n changelogPaths,\n loadUnreleased,\n readJsonFile,\n strayEntries,\n} from \"./entries\";\nimport { writeJsonLike } from \"./json\";\nimport { parseChangelog } from \"./read\";\nimport { describeReconciliation, reconcile } from \"./reconcile\";\nimport { packageVersions, publishedSurface } from \"./registry\";\nimport { declaresTypes, diffSurface } from \"./surface\";\nimport {\n CHANGELOG_CONTRACT,\n CHANGELOG_FILE,\n CHANGELOG_MARKDOWN,\n CHANGE_KINDS,\n UNRELEASED_DIRECTORY,\n type Changelog,\n type ChangeKind,\n type Release,\n} from \"./types\";\nimport { compareVersions, nextVersion, type ReleaseKind } from \"./versioning\";\nimport { GENERATED_MARKER, renderChangelogJson, renderMarkdown } from \"./write\";\n\nclass CliError extends Error {}\n\nconst isChangeKind = (value: unknown): value is ChangeKind =>\n CHANGE_KINDS.some((kind) => kind === value);\n\nconst isReleaseKind = (value: unknown): value is ReleaseKind =>\n RELEASE_KINDS.some((kind) => kind === value);\n\nconst RELEASE_KINDS = [\"major\", \"minor\", \"patch\", \"prerelease\"] as const;\n/** Long enough to recognise the change in a file listing, short enough to\n * read. */\nconst SLUG_MAX_LENGTH = 48;\n/** `2026-09-10`. */\nconst ISO_DATE_LENGTH = 10;\n/** Enough of a dry run to see the release taking shape. */\nconst PREVIEW_LINES = 40;\n\ntype Flags = Record<string, string | true>;\n\nconst readFlags = (argv: readonly string[]) => {\n const flags: Flags = {};\n let skip = false;\n for (const [index, argument] of argv.entries()) {\n const consumed = skip;\n skip = false;\n if (consumed || !argument.startsWith(\"--\")) continue;\n const [name, inline] = argument.slice(2).split(\"=\");\n if (name === undefined || name === \"\") continue;\n const next = argv[index + 1];\n const takesNext =\n inline === undefined && next !== undefined && !next.startsWith(\"--\");\n skip = takesNext;\n flags[name] = inline ?? (takesNext && next !== undefined ? next : true);\n }\n\n return flags;\n};\n\nconst text = (flags: Flags, name: string) => {\n const value = flags[name];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst list = (flags: Flags, name: string) => {\n const value = text(flags, name);\n\n return value === undefined\n ? []\n : value\n .split(\",\")\n .map((part) => part.trim())\n .filter((part) => part !== \"\");\n};\n\ntype PackageShape = {\n exports?: unknown;\n scripts?: Record<string, unknown>;\n files?: string[];\n include?: unknown[];\n name?: string;\n version?: string;\n};\n\nconst isPackage = (value: unknown): value is PackageShape =>\n typeof value === \"object\" && value !== null;\n\nconst readPackage = async (root: string) => {\n const document = await readJsonFile(join(root, \"package.json\"));\n if (\n !isPackage(document) ||\n typeof document.name !== \"string\" ||\n typeof document.version !== \"string\"\n )\n throw new CliError(\n \"No package.json with a name and a version here. Run this from a package root.\",\n );\n const manifest: PackageShape & { name: string; version: string } = {\n ...document,\n name: document.name,\n version: document.version,\n };\n\n return manifest;\n};\n\nconst readChangelog = async (root: string, name: string) => {\n const document = await readJsonFile(changelogPaths(root).json);\n if (document === undefined) {\n const empty: Changelog = {\n contract: CHANGELOG_CONTRACT,\n name,\n releases: [],\n };\n\n return empty;\n }\n const read = parseChangelog(document);\n if (read.problems)\n throw new CliError(\n [`${CHANGELOG_FILE} is not a changelog:`, ...read.problems].join(\"\\n \"),\n );\n\n return read.changelog;\n};\n\nconst historyOf = async (root: string) =>\n readFile(changelogPaths(root).history, \"utf8\").catch(() => undefined);\n\nconst writeBoth = async (root: string, changelog: Changelog) => {\n const paths = changelogPaths(root);\n const history = await historyOf(root);\n await writeFile(paths.json, renderChangelogJson(changelog));\n await writeFile(\n paths.markdown,\n renderMarkdown(changelog, history === undefined ? {} : { history }),\n );\n};\n\nconst slug = (summary: string) =>\n summary\n .toLowerCase()\n .replace(/[^a-z0-9]+/gu, \"-\")\n .replace(/^-|-$/gu, \"\")\n .slice(0, SLUG_MAX_LENGTH) || \"change\";\n\n/**\n * Where the package's public API is declared, if it is where it usually is.\n *\n * An entry that imports it gets its symbols checked by the compiler at the\n * moment somebody types them, which is the difference between a typo caught\n * in an editor and a typo caught by a release gate a fortnight later.\n */\nconst sourceEntryOf = (root: string) => {\n for (const candidate of [\"src/index.ts\", \"src/index.tsx\", \"index.ts\"])\n if (existsSync(join(root, candidate)))\n return `../../${candidate.replace(/\\.tsx?$/u, \"\")}`;\n\n return undefined;\n};\n\nconst add = async (root: string, flags: Flags) => {\n const kind = text(flags, \"kind\");\n const summary = text(flags, \"summary\");\n if (!isChangeKind(kind))\n throw new CliError(`--kind must be one of: ${CHANGE_KINDS.join(\", \")}`);\n if (summary === undefined)\n throw new CliError(\"--summary is what the change is, in one line\");\n const symbols = list(flags, \"symbol\");\n const disruptive = kind === \"breaking\" || kind === \"removed\";\n if (disruptive && symbols.length === 0)\n throw new CliError(\n `a ${kind} change must name the exports it affects: --symbol serve,createServer`,\n );\n const instruction = text(flags, \"instruction\");\n if (disruptive && instruction === undefined)\n throw new CliError(\n `a ${kind} change must say how to migrate: --instruction \"…\"`,\n );\n const renameTo = text(flags, \"rename-to\");\n const migration =\n renameTo !== undefined && symbols[0] !== undefined\n ? [\n \"\\tmigration: {\",\n `\\t\\tinstruction: ${JSON.stringify(instruction)},`,\n `\\t\\trename: { from: ${JSON.stringify(\n symbols[0],\n )}, to: ${JSON.stringify(renameTo)} }`,\n \"\\t},\",\n ]\n : [\n `\\tmigration: { instruction: ${JSON.stringify(\n instruction,\n )}, manual: true },`,\n ];\n /* A type-only import, so the entry has nothing to resolve at run time.\n * The release gate reads these files back, and a gate that only works\n * where the dev dependencies are installed is a gate that fails in the\n * one place it matters.\n *\n * A named export rather than a default one: the ecosystem's lint config\n * restricts default exports, and an entry that trips the linter of every\n * package that writes one is a contract nobody keeps. */\n const api = sourceEntryOf(root);\n const body = [\n ...(api === undefined ? [] : [`import type * as Api from '${api}';`]),\n \"import type { Change } from '@absolutejs/changelog';\",\n \"\",\n `export const change: Change${api === undefined ? \"\" : \"<typeof Api>\"} = {`,\n `\\tkind: ${JSON.stringify(kind)},`,\n ...(disruptive ? migration : []),\n `\\tsummary: ${JSON.stringify(summary)}${symbols.length > 0 ? \",\" : \"\"}`,\n ...(symbols.length > 0 ? [`\\tsymbols: ${JSON.stringify(symbols)}`] : []),\n \"};\",\n \"\",\n ].join(\"\\n\");\n const directory = join(root, UNRELEASED_DIRECTORY);\n await mkdir(directory, { recursive: true });\n const file = join(directory, `${slug(summary)}.ts`);\n await writeFile(file, body);\n console.log(`wrote ${file}`);\n};\n\nconst release = async (root: string, flags: Flags) => {\n const manifest = await readPackage(root);\n const { entries, problems } = await loadUnreleased(root);\n if (problems.length > 0)\n throw new CliError(\n [\"These entries are not usable:\", ...problems].join(\"\\n \"),\n );\n if (entries.length === 0)\n throw new CliError(\n `Nothing to release: ${UNRELEASED_DIRECTORY} is empty. Add a change first.`,\n );\n const asked = text(flags, \"as\");\n if (asked !== undefined && !isReleaseKind(asked))\n throw new CliError(`--as must be one of: ${RELEASE_KINDS.join(\", \")}`);\n const changes = entries.map((entry) => entry.change);\n const version =\n text(flags, \"version\") ??\n nextVersion({\n ...(isReleaseKind(asked) ? { asked } : {}),\n changes,\n current: manifest.version ?? \"0.0.0\",\n });\n if (version === undefined)\n throw new CliError(\n `Could not work out the next version from ${manifest.version}.`,\n );\n const changelog = await readChangelog(root, manifest.name ?? \"\");\n if (changelog.releases.some((entry) => entry.version === version))\n throw new CliError(`${version} is already in the changelog.`);\n const [first, ...rest] = changes;\n if (first === undefined)\n throw new CliError(`Nothing to release: ${UNRELEASED_DIRECTORY} is empty.`);\n const next: Release = {\n changes: [first, ...rest],\n date:\n text(flags, \"date\") ?? new Date().toISOString().slice(0, ISO_DATE_LENGTH),\n version,\n };\n const written: Changelog = {\n ...changelog,\n releases: [next, ...changelog.releases],\n };\n if (flags.dry === true) {\n console.log(\n renderMarkdown(written).split(\"\\n\").slice(0, PREVIEW_LINES).join(\"\\n\"),\n );\n console.log(`\\n(dry run: ${manifest.version} → ${version})`);\n\n return;\n }\n await writeBoth(root, written);\n await writeJsonLike(join(root, \"package.json\"), { ...manifest, version });\n await Promise.all(\n entries.map((entry) => rm(join(root, entry.file), { force: true })),\n );\n console.log(\n `${manifest.name} ${manifest.version} → ${version} (${entries.length} change${\n entries.length === 1 ? \"\" : \"s\"\n })`,\n );\n};\n\nconst check = async (root: string, flags: Flags) => {\n const manifest = await readPackage(root);\n const failures: string[] = [];\n const { entries, problems } = await loadUnreleased(root);\n failures.push(...problems);\n const document = await readJsonFile(changelogPaths(root).json);\n const read = document === undefined ? undefined : parseChangelog(document);\n if (read?.problems)\n throw new CliError(\n [`${CHANGELOG_FILE} is not a changelog:`, ...read.problems].join(\"\\n \"),\n );\n /* A package that has adopted this and not released yet has no document,\n * which is a state to check rather than a failure: the entries are still\n * checked, and so is everything that does not need a release to compare\n * against. */\n const current: Changelog = read?.changelog ?? {\n contract: CHANGELOG_CONTRACT,\n name: manifest.name ?? \"\",\n releases: [],\n };\n const [newest] = current.releases;\n /* The version in the manifest is the version that was last released, and\n * the newest release in the changelog is the same thing said twice.\n * Whenever the two disagree, one of them was edited by hand. */\n if (newest !== undefined && newest.version !== manifest.version)\n failures.push(\n `package.json is ${manifest.version} and the newest release in ${CHANGELOG_FILE} is ${newest.version}`,\n );\n if (newest !== undefined && current.name !== manifest.name)\n failures.push(\n `${CHANGELOG_FILE} is for ${current.name}, not ${manifest.name}`,\n );\n /* The markdown is generated. If it does not match what the entries say it\n * should be, somebody edited the copy rather than the original. */\n const history = await historyOf(root);\n const expected = renderMarkdown(\n current,\n history === undefined ? {} : { history },\n );\n const actual = await readFile(changelogPaths(root).markdown, \"utf8\").catch(\n () => undefined,\n );\n /* Checked whether or not anything has been released. It used to wait for a\n * first release, which meant every package in a freshly adopted ecosystem\n * had a generated file nothing was watching -- and a second adoption\n * quietly rewrote 65 of them. */\n if (actual !== expected)\n failures.push(\n `${CHANGELOG_MARKDOWN} is not what the entries say it should be — it is generated; run \\`absolute-changelog release\\` or restore it`,\n );\n const tsconfig = await readTsconfig(join(root, \"tsconfig.json\"));\n const include = includeOf(tsconfig?.config);\n if (Array.isArray(include) && !coversEntries(include))\n failures.push(\n 'tsconfig.json does not compile changelog/, so nothing is checking the entries — add \"changelog/**/*\" to its include list',\n );\n for (const stray of await strayEntries(root))\n failures.push(\n `${UNRELEASED_DIRECTORY}/${stray} is not an entry, so no release will ever read it`,\n );\n /* Both documents have to ship, or a consumer that reads them gets a\n * package that quietly has none. */\n const shipped = Array.isArray(manifest.files) ? manifest.files : [];\n for (const file of [CHANGELOG_FILE, CHANGELOG_MARKDOWN])\n if (shipped.length > 0 && !shipped.includes(file))\n failures.push(`package.json does not ship ${file}`);\n /* And the part nobody can do by remembering: what the types say happened\n * against what the entries say happened.\n *\n * The baseline is the newest version the registry actually has, which is\n * not always the version in package.json -- between `release` and `publish`\n * the manifest names a version nobody can fetch. Comparing against that\n * asks the registry for something that is not there, gets nothing, and\n * passes: the gate would go quiet at the one moment it exists for.\n *\n * So the entries that speak are every entry newer than what is published:\n * the ones still waiting, and the ones a release has already folded in. */\n const offline = flags.offline === true;\n const built = await builtSurface(root);\n /* A package about to publish types it has not built. The old gate warned\n * and passed, which is the same thing as not having a gate on a clean\n * checkout -- and `prepublishOnly` runs before `prepack`, so a package that\n * builds there arrives here with nothing on disk every time.\n *\n * A package that ships no types at all has no promise of this kind to\n * check, and is left alone. */\n const shipsTypes = declaresTypes(\n await readJsonFile(join(root, \"package.json\")),\n );\n if (await buildIsStale(root))\n console.warn(\n \" (the build is older than the source it was built from, so this compared yesterday's package — run the build first)\",\n );\n if (built === undefined && shipsTypes)\n failures.push(\n \"there are no declaration files where package.json says its types are — build before the gate, or nothing compares them\",\n );\n if (!shipsTypes)\n console.warn(\" (this package ships no types, so none were compared)\");\n const versions = offline\n ? undefined\n : await packageVersions(manifest.name ?? \"\");\n /* The registry did not answer. Every reason for that -- an outage, a rate\n * limit, a private registry this does not know about, a scoped package\n * needing auth -- ends with the types unchecked, and a gate that passes\n * when it could not check is a gate that disarms itself on a bad afternoon.\n * `--offline` is how somebody says they meant it. */\n if (!offline && versions === undefined)\n failures.push(\n `the registry did not answer for ${manifest.name}, so nothing was compared — pass --offline to skip the comparison deliberately`,\n );\n /* Answered, with nothing on it. A first release has no previous version to\n * be checked against, and refusing it would mean no package could ever have\n * one. */\n if (versions !== undefined && versions.published.length === 0)\n console.warn(\n ` (${manifest.name} has never been published, so there was nothing to compare)`,\n );\n const baseline = (versions?.published ?? [])\n .filter((version) => compareVersions(version, manifest.version) <= 0)\n .sort(compareVersions)\n .at(LAST);\n /* Published versions exist and none of them is at or below this one: the\n * manifest is behind the registry, which is its own problem. */\n if (\n versions !== undefined &&\n versions.published.length > 0 &&\n baseline === undefined &&\n !offline\n )\n console.warn(\n ` (nothing published at or below ${manifest.version}, so there was nothing to compare)`,\n );\n if (built !== undefined && baseline !== undefined) {\n const published = await publishedSurface(manifest.name ?? \"\", baseline);\n if (published === undefined)\n failures.push(\n `could not read the published types of ${manifest.name}@${baseline}, so nothing was compared`,\n );\n const speaking = [\n ...entries.map((entry) => entry.change),\n ...current.releases\n .filter((entry) => compareVersions(entry.version, baseline) > 0)\n .flatMap((entry) => [...entry.changes]),\n ];\n failures.push(\n ...(published === undefined\n ? []\n : describeReconciliation(\n reconcile({\n after: new Set(built.keys()),\n changes: speaking,\n diff: diffSurface(published, built),\n known: new Set([...published.keys(), ...built.keys()]),\n subpaths: subpathsOf(manifest),\n }),\n )),\n );\n }\n if (failures.length > 0)\n throw new CliError(\n [\"This package’s changelog does not hold:\", ...failures].join(\"\\n \"),\n );\n console.log(\n `${manifest.name}@${manifest.version}: changelog holds (${entries.length} pending, ${current.releases.length} released)`,\n );\n};\n\n/**\n * Make sure the entries are compiled by whatever compiles this package.\n *\n * The whole claim of the contract is that the compiler reviews every entry --\n * which it does not, if the package's `include` only names `src`. Nothing\n * else about the setup gives that away: entries would sit there looking\n * checked and be checked by nobody.\n */\n/** The last of a sorted list. */\nconst LAST = -1;\n\n/**\n * The entry points a package offers, as the specifiers somebody would import.\n *\n * Taken from the exports map, so a migration cannot point at a subpath that\n * does not exist -- the kind of typo that is invisible in a changelog and\n * fatal in a codemod.\n */\nconst subpathsOf = (manifest: PackageShape) => {\n const { exports } = manifest;\n if (typeof exports !== \"object\" || exports === null) return new Set<string>();\n\n return new Set(\n Object.keys(exports).map((key) =>\n key === \".\" ? (manifest.name ?? \"\") : `${manifest.name}${key.slice(1)}`,\n ),\n );\n};\n\nconst CHECKING_CONFIGS = [\"tsconfig.json\", \"tsconfig.eslint.json\"] as const;\n\n/** A tsconfig is JSON with comments, which `JSON.parse` refuses. TypeScript's\n * own reader takes it, and this package already depends on it. */\nconst readTsconfig = async (path: string) => {\n const source = await readFile(path, \"utf8\").catch(() => undefined);\n if (source === undefined) return undefined;\n const read = ts.parseConfigFileTextToJson(path, source);\n\n if (read.error !== undefined) return undefined;\n const { config } = read;\n const parsed: unknown = config;\n\n return { config: parsed, source };\n};\n\nconst coversEntries = (include: unknown) =>\n Array.isArray(include) &&\n include.some(\n (entry) => typeof entry === \"string\" && entry.startsWith(\"changelog\"),\n );\n\nconst includeOf = (config: unknown) =>\n typeof config === \"object\" && config !== null\n ? new Map(Object.entries(config)).get(\"include\")\n : undefined;\n\n/**\n * Add the entries to an include list without reformatting the file.\n *\n * A surgical insertion rather than a re-serialisation, because a tsconfig\n * carries comments -- the framework's own explains why `src/build/` is not\n * excluded -- and rewriting it as JSON would delete them.\n */\nconst includeEntriesIn = async (root: string, file: string) => {\n const path = join(root, file);\n const read = await readTsconfig(path);\n if (read === undefined) return false;\n const include = includeOf(read.config);\n if (!Array.isArray(include) || coversEntries(include)) return false;\n const opened = /\"include\"\\s*:\\s*\\[/u.exec(read.source);\n if (opened === null) return false;\n const opens = opened.index + opened[0].length;\n await writeFile(\n path,\n `${read.source.slice(0, opens)}\\n\\t\\t\"changelog/**/*\",${read.source.slice(opens)}`,\n );\n\n return true;\n};\n\nconst includeEntries = async (root: string) => {\n const wired = await Promise.all(\n CHECKING_CONFIGS.map((file) => includeEntriesIn(root, file)),\n );\n\n return wired.some(Boolean)\n ? undefined\n : \"no tsconfig include list to wire — make sure changelog/ is compiled by something\";\n};\n\n/**\n * Keep the formatter off the generated copies.\n *\n * Every package here runs prettier over `**\\/*.{ts,json,md}`, which is both of\n * these -- and the gate compares `CHANGELOG.md` byte for byte against what the\n * entries say it should be. A formatter rewrapping a line would fail a release\n * for a reason nobody could see.\n */\nconst ignoreGenerated = async (root: string) => {\n const path = join(root, \".prettierignore\");\n const existing = await readFile(path, \"utf8\").catch(() => \"\");\n const wanted = [CHANGELOG_FILE, CHANGELOG_MARKDOWN].filter(\n (name) => !existing.split(\"\\n\").includes(name),\n );\n if (wanted.length === 0) return;\n const head =\n existing.trim() === \"\"\n ? \"# Generated by absolute-changelog. Edit the entries, not these.\\n\"\n : `${existing.trimEnd()}\\n`;\n await writeFile(path, `${head}${wanted.join(\"\\n\")}\\n`);\n};\n\n/**\n * The gate on the way out, not only on the way to it.\n *\n * `check:package` is a chain somebody chooses to run. `prepublishOnly` is one\n * npm and bun run themselves, whatever the publish was started by -- a release\n * script, a bare `npm publish`, a CI job, somebody in a hurry at the end of a\n * day. A rule that can be walked around eventually is.\n *\n * It runs the whole chain rather than the changelog check alone, because the\n * weaker version had a hole this package fell into itself: a publish that\n * skipped `check:package` skipped the typecheck, the lint, the tests and the\n * build with it. Running the build here settles a subtler thing too --\n * `prepublishOnly` fires before `prepack`, so a package that builds in\n * `prepack` used to reach the gate with whatever `dist` was lying about, or\n * with none at all.\n */\n/* Never the bare binary. `bun publish` runs lifecycle scripts without\n * `node_modules/.bin` on the PATH, so `absolute-changelog check` written\n * plainly is `command not found` and every publish fails -- which is what\n * ninety-five packages were quietly set up to do. `bun run` and `bunx` both\n * resolve it; the bare name is the one spelling that does not. */\nconst PUBLISH_GATE = \"bunx absolute-changelog check\";\n\nconst publishGateFor = (scripts: Record<string, unknown>) =>\n typeof scripts[\"check:package\"] === \"string\"\n ? \"bun run check:package\"\n : PUBLISH_GATE;\n\nconst withPublishGate = (scripts: Record<string, unknown>) => {\n const wanted = publishGateFor(scripts);\n const existing = scripts.prepublishOnly;\n if (typeof existing === \"string\" && existing.includes(wanted))\n return undefined;\n /* A gate that runs only the changelog check is replaced by the chain that\n * contains it, rather than run twice. */\n const replaceable =\n typeof existing !== \"string\" ||\n existing.trim() === \"\" ||\n existing.trim() === PUBLISH_GATE ||\n existing.trim() === \"absolute-changelog check\";\n\n return {\n ...scripts,\n prepublishOnly: replaceable ? wanted : `${existing} && ${wanted}`,\n };\n};\n\nconst adopt = async (root: string) => {\n const manifest = await readPackage(root);\n const paths = changelogPaths(root);\n await mkdir(paths.unreleased, { recursive: true });\n await writeFile(\n join(paths.unreleased, \".gitkeep\"),\n \"# Entries wait here. One file per change; `absolute-changelog release` consumes them.\\n\",\n );\n /* Whatever the package said before this takes over. It is kept rather\n * than parsed: prose written by hand over two years is history, and\n * guessing structure out of it would invent facts.\n *\n * Except our own output, which is what a second adoption finds. Filing that\n * as history prints the header underneath itself, and a third run would\n * nest it again -- adopting has to be a thing you can run twice. */\n const previous = existsSync(paths.markdown)\n ? await readFile(paths.markdown, \"utf8\")\n : undefined;\n if (\n previous !== undefined &&\n !previous.includes(GENERATED_MARKER) &&\n !existsSync(paths.history)\n ) {\n await mkdir(join(root, \"changelog\"), { recursive: true });\n await writeFile(\n paths.history,\n previous.replace(/^#\\s+Changelog\\s*/u, \"\").trimStart(),\n );\n await rm(paths.markdown, { force: true });\n }\n const files = manifest.files ?? [];\n const wanted = [CHANGELOG_FILE, CHANGELOG_MARKDOWN].filter(\n (entry) => !files.includes(entry),\n );\n const scripts =\n typeof manifest.scripts === \"object\" && manifest.scripts !== null\n ? withPublishGate(manifest.scripts)\n : undefined;\n if (wanted.length > 0 || scripts !== undefined)\n await writeJsonLike(join(root, \"package.json\"), {\n ...manifest,\n ...(scripts === undefined ? {} : { scripts }),\n files: [...files, ...wanted].sort(),\n });\n await ignoreGenerated(root);\n const note = await includeEntries(root);\n if (note !== undefined) console.warn(` (${note})`);\n const changelog = await readChangelog(root, manifest.name ?? \"\");\n await writeBoth(root, changelog);\n console.log(\n `${manifest.name}: ready. Add changes with \\`absolute-changelog add\\`, release with \\`absolute-changelog release\\`.`,\n );\n};\n\nconst main = async () => {\n const [command = \"\", ...argv] = process.argv.slice(2);\n const flags = readFlags(argv);\n const root = process.cwd();\n if (command === \"add\") return add(root, flags);\n if (command === \"release\") return release(root, flags);\n if (command === \"check\") return check(root, flags);\n if (command === \"adopt\") return adopt(root);\n\n throw new CliError(\n \"Usage: absolute-changelog <add|release|check|adopt> [options]\",\n );\n};\n\nawait main().catch((error: unknown) => {\n console.error(\n error instanceof CliError\n ? error.message\n : `absolute-changelog failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n process.exit(1);\n});\n",
6
+ "import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { validateChange } from \"./read\";\nimport { surfaceOfFiles, typeEntriesOf } from \"./surface\";\nimport {\n CHANGELOG_FILE,\n CHANGELOG_MARKDOWN,\n UNRELEASED_DIRECTORY,\n type Change,\n} from \"./types\";\n\n/*\n * The package on disk: its pending entries, its history, and the types it is\n * about to publish.\n *\n * Entries are TypeScript modules rather than data files, so an author writing\n * one is typing against the contract with the compiler watching. Reading them\n * back is an import, which is the same thing the compiler did, so a file that\n * would not build is a file that does not release.\n */\n\nexport type LoadedEntry = {\n change: Change;\n /** Relative, because it is printed at somebody who has to go and fix it. */\n file: string;\n};\n\n/**\n * Import one entry file, and say what went wrong rather than throwing.\n *\n * An entry that will not import is a problem to report beside the others --\n * a release that stops at the first bad file makes somebody fix them one at a\n * time.\n */\nconst loadEntry = async (path: string) => {\n try {\n const module: unknown = await import(pathToFileURL(path).href);\n /* `change` is what the template writes; `default` is accepted because a\n * default export is the shape somebody reaches for by habit, and\n * refusing it would be pedantry rather than a check. */\n const named =\n typeof module === \"object\" && module !== null && \"change\" in module\n ? module.change\n : undefined;\n const exported =\n named ??\n (typeof module === \"object\" && module !== null && \"default\" in module\n ? module.default\n : undefined);\n const read: { exported: unknown; failure?: string } = { exported };\n\n return read;\n } catch (error) {\n const failed: { exported?: undefined; failure: string } = {\n failure: error instanceof Error ? error.message : String(error),\n };\n\n return failed;\n }\n};\n\nexport type LoadedEntries = {\n entries: LoadedEntry[];\n problems: string[];\n};\n\nconst ENTRY = /\\.[cm]?ts$/u;\n\nconst DECLARATION = /\\.d\\.[cm]?ts$/u;\n/** Where a build puts its declaration files. Which of them a package actually\n * publishes comes from its manifest; this is only where to look. */\nconst OUTPUT_DIRECTORIES = [\"dist\", \"build\", \"lib\", \"types\", \"out\"];\n\n/** The newest thing under a directory, by modification time. */\nconst newestUnder = async (root: string): Promise<number> => {\n const found = await readdir(root, { withFileTypes: true }).catch(() => []);\n const times = await Promise.all(\n found.map(async (entry) => {\n const path = join(root, entry.name);\n if (entry.isDirectory()) return newestUnder(path);\n\n return stat(path).then(\n (stats) => stats.mtimeMs,\n () => 0,\n );\n }),\n );\n\n return Math.max(0, ...times);\n};\n\n/**\n * Whether the build is older than the source it was built from.\n *\n * The gate compares what is on disk against what was published, so a `dist`\n * from yesterday reports yesterday's package. It cost an afternoon once: six\n * exports reported as withdrawn from a package that had withdrawn nothing,\n * because the build predated the source by a day.\n *\n * A warning rather than a failure -- a fresh checkout has every file at the\n * same moment, and the publish path builds first anyway.\n */\nexport const buildIsStale = async (packageRoot: string) => {\n const [source, built] = await Promise.all([\n newestUnder(join(packageRoot, \"src\")),\n Promise.all(\n OUTPUT_DIRECTORIES.map((directory) =>\n newestUnder(join(packageRoot, directory)),\n ),\n ).then((times) => Math.max(0, ...times)),\n ]);\n\n return source > 0 && built > 0 && source > built;\n};\n\n/**\n * The public surface a build produced, read the way a consumer would.\n *\n * From the entry points the manifest declares, following the export graph --\n * not by heaping every declaration file together, which counts names no\n * consumer can import and cannot see one being withdrawn.\n *\n * Nothing when the manifest's entry points are not on disk: that is a package\n * about to publish types it has not built, and passing it would be the gate\n * going quiet at the worst possible moment.\n */\nexport const builtSurface = async (packageRoot: string) => {\n const manifest = await readJsonFile(join(packageRoot, \"package.json\"));\n const files = new Map<string, string>();\n const walk = async (directory: string): Promise<void> => {\n const found = await readdir(join(packageRoot, directory), {\n withFileTypes: true,\n }).catch(() => []);\n await Promise.all(\n found.map(async (entry) => {\n const relative = `${directory}/${entry.name}`;\n if (entry.isDirectory()) return walk(relative);\n if (!DECLARATION.test(entry.name)) return undefined;\n files.set(\n relative,\n await readFile(join(packageRoot, relative), \"utf8\").catch(() => \"\"),\n );\n\n return undefined;\n }),\n );\n };\n await Promise.all(OUTPUT_DIRECTORIES.map((directory) => walk(directory)));\n const entries = typeEntriesOf(manifest, files);\n\n return entries.length === 0 ? undefined : surfaceOfFiles(files, entries);\n};\n\nexport const changelogPaths = (packageRoot: string) => ({\n history: join(packageRoot, \"changelog\", \"history.md\"),\n json: join(packageRoot, CHANGELOG_FILE),\n markdown: join(packageRoot, CHANGELOG_MARKDOWN),\n unreleased: join(packageRoot, UNRELEASED_DIRECTORY),\n});\n/** Every pending entry, in a stable order so a release reads the same twice. */\nexport const loadUnreleased = async (packageRoot: string) => {\n const directory = join(packageRoot, UNRELEASED_DIRECTORY);\n const names = await readdir(directory).catch(() => []);\n const entries: LoadedEntry[] = [];\n const problems: string[] = [];\n for (const name of names.filter((file) => ENTRY.test(file)).sort()) {\n const file = join(UNRELEASED_DIRECTORY, name);\n // Serial on purpose: the count is small and the failure messages read\n // in file order.\n // eslint-disable-next-line no-await-in-loop\n const loaded = await loadEntry(join(directory, name));\n if (loaded.failure !== undefined)\n problems.push(`${file}: ${loaded.failure}`);\n const checked =\n loaded.failure === undefined\n ? validateChange(loaded.exported, file)\n : undefined;\n if (checked?.problems) problems.push(...checked.problems);\n if (checked?.change !== undefined)\n entries.push({ change: checked.change, file });\n }\n\n return { entries, problems };\n};\nexport const readJsonFile = async (path: string) => {\n const source = await readFile(path, \"utf8\").catch(() => undefined);\n if (source === undefined) return undefined;\n try {\n const document: unknown = JSON.parse(source);\n\n return document;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Anything in the entry directory that is not an entry.\n *\n * A `.md` note dropped in here, or a `.txt` somebody meant as a placeholder,\n * is read by nothing and consumed by nothing -- it sits there through every\n * release looking like a change that was recorded.\n */\nexport const strayEntries = async (packageRoot: string) => {\n const names = await readdir(join(packageRoot, UNRELEASED_DIRECTORY)).catch(\n () => [],\n );\n\n return names.filter(\n (name) => !ENTRY.test(name) && name !== \".gitkeep\" && !name.startsWith(\".\"),\n );\n};\n",
7
7
  "/*\n * What a change is, said in types strict enough that the important ones cannot\n * be written badly.\n *\n * A changelog is only worth having if the entries that matter carry what a\n * reader needs to act. Prose changelogs fail at exactly that: \"refactored the\n * server options\" is a true sentence and a useless one, because it does not\n * say which export moved or what to write instead. Nothing here can stop a\n * summary being vague, but the compiler can insist that a breaking change\n * names the exports it breaks and says how to migrate -- so the entries that\n * cost somebody an afternoon are the ones that cannot be filed empty.\n *\n * That is also what makes the machine half possible. `symbols` is the join\n * between an entry and the package's own type surface, so a release can be\n * checked against what actually changed; `migration` is the join between an\n * entry and the edit a project needs, so most upgrades can be applied rather\n * than described.\n */\n\n/** At least one, so a type says \"named\" rather than hoping a list is not\n * empty. */\nexport type NonEmpty<T> = readonly [T, ...T[]];\n\nexport const CHANGE_KINDS = [\n \"breaking\",\n \"removed\",\n \"added\",\n \"changed\",\n \"deprecated\",\n \"fixed\",\n \"security\",\n \"internal\",\n] as const;\n\nexport type ChangeKind = (typeof CHANGE_KINDS)[number];\n\n/** The kinds that cost a consumer work, and so must say what work. */\nexport const DISRUPTIVE_KINDS = [\"breaking\", \"removed\"] as const;\n\nexport type DisruptiveKind = (typeof DISRUPTIVE_KINDS)[number];\n\n/**\n * How to move code from before to after.\n *\n * Three of these are data rather than instructions, and that is the point: a\n * rename and a move are the overwhelming majority of real breaking changes,\n * and both are mechanical. Described as data they can be applied by anything\n * -- a CLI, an editor, a hosted upgrade button -- without running code that\n * arrived from a registry, which is the difference between an upgrade that\n * happens and an upgrade somebody schedules for a quiet week.\n *\n * `manual` is the honest escape hatch. A changed meaning is not a rewrite\n * anybody should automate, and pretending otherwise is worse than saying so.\n */\nexport type Migration<TSymbol extends string = string> =\n /** An export kept its meaning and changed its name. */\n | {\n readonly instruction: string;\n readonly rename: { readonly from: TSymbol; readonly to: string };\n }\n /** An export kept its name and moved to another entry point. */\n | {\n readonly instruction: string;\n readonly moved: {\n readonly symbol: TSymbol;\n readonly from: string;\n readonly to: string;\n };\n }\n /** A whole entry point moved; every import of it is rewritten. */\n | {\n readonly instruction: string;\n readonly resubpath: { readonly from: string; readonly to: string };\n }\n /** Neither a rename nor a move: somebody has to read the call. */\n | { readonly instruction: string; readonly manual: true };\n\n/**\n * The names a package exports, for an entry that wants them checked.\n *\n * An entry can be written against the package's own public API:\n *\n * ```ts\n * import type * as Api from \"../../src/index\";\n * import type { Change } from \"@absolutejs/changelog\";\n *\n * export const change: Change<typeof Api> = {\n * kind: \"fixed\",\n * summary: \"stops throwing on an empty list\",\n * symbols: [\"listen\"] // an export, or the compiler says so\n * };\n * ```\n *\n * Suggested rather than required, for two reasons that both matter. A\n * disruptive change is usually about something that has just stopped\n * existing -- the release that removes `start` is the release that writes the\n * entry about it -- and `typeof Api` cannot see type-only exports at all, so\n * insisting would reject an entry about `Change` or `Release` for being\n * something this package definitely exports.\n *\n * What that leaves is an editor that completes the name and a gate that is\n * certain: the release check reads the published `.d.ts`, which does carry\n * the type exports, and refuses an entry naming something the package has\n * never exported.\n */\ntype Exported<TApi> = TApi extends object\n ? Extract<keyof TApi, string>\n : string;\n\n/** Autocompleted, not restricted: an entry may name an export that has just\n * stopped being one. */\ntype Suggested<TApi> = Exported<TApi> | (string & {});\n\ntype ChangeBase = {\n /** One line, imperative, in the reader's terms rather than the\n * implementation's. */\n readonly summary: string;\n /** The why, when the summary cannot carry it. */\n readonly detail?: string;\n /** Where the discussion is. */\n readonly reference?: string;\n};\n\n/**\n * A change that costs a consumer work.\n *\n * `symbols` is not decoration: it is what lets a release be checked against\n * the package's published types, and what lets a project be told whether the\n * change reaches any of its files. An entry without it can only ever be read.\n */\nexport type DisruptiveChange<TApi = unknown> = ChangeBase & {\n readonly kind: DisruptiveKind;\n readonly symbols: NonEmpty<Suggested<TApi>>;\n readonly migration: Migration<Suggested<TApi>>;\n};\n\nexport type OrdinaryChange<TApi = unknown> = ChangeBase & {\n readonly kind: Exclude<ChangeKind, DisruptiveKind>;\n /** Optional here, and still worth filling in: it is what connects a fix\n * to the export somebody is looking at. */\n readonly symbols?: readonly Suggested<TApi>[];\n readonly migration?: never;\n};\n\nexport type Change<TApi = unknown> =\n DisruptiveChange<TApi> | OrdinaryChange<TApi>;\n\nexport type Release = {\n readonly version: string;\n /** ISO date, the day it was published. */\n readonly date: string;\n readonly changes: NonEmpty<Change>;\n /** Anything that is true of the release rather than of one change. */\n readonly note?: string;\n};\n\n/**\n * A package's history, newest first.\n *\n * Published alongside the package so that upgrading is a question anybody can\n * answer offline: what changed between the version I have and the version I\n * am being offered, and which of it reaches me.\n */\nexport type Changelog = {\n readonly name: string;\n /** The shape of this document, so a reader written today can refuse a\n * document written against a later contract instead of misreading it. */\n readonly contract: 1;\n readonly releases: readonly Release[];\n};\n\nexport const CHANGELOG_CONTRACT = 1;\n\n/** Where the machine-readable copy lives in a published package. */\nexport const CHANGELOG_FILE = \"changelog.json\";\n\n/** Where the human-readable copy lives. */\nexport const CHANGELOG_MARKDOWN = \"CHANGELOG.md\";\n\n/** Where entries wait between releases, one file each so two branches adding\n * a change do not conflict over the same line. */\nexport const UNRELEASED_DIRECTORY = \"changelog/unreleased\";\n\nexport const isDisruptive = (change: Change): change is DisruptiveChange =>\n change.kind === \"breaking\" || change.kind === \"removed\";\n\n/** Whether a migration can be applied rather than read. */\nexport const isMechanical = (\n migration: Migration,\n): migration is Exclude<Migration, { manual: true }> =>\n !(\"manual\" in migration);\n",
8
8
  "import { isDisruptive, type Change } from \"./types\";\n\n/*\n * Which version a set of changes adds up to.\n *\n * Written out rather than pulled in, for the same reason the rest of this\n * package has no dependencies: forty lines of arithmetic is not worth a\n * supply chain, and every consumer of a changelog -- a CLI, an editor, a\n * control plane deciding what to offer -- needs the comparison as much as the\n * bumping.\n *\n * The rules that are not the textbook ones are the two that match how these\n * packages are actually versioned:\n *\n * - Below 1.0.0 a breaking change moves the minor. The major is reserved\n * for the release that means it, and `0.x` is the place the ecosystem\n * lives.\n * - A version already on a prerelease line moves along that line by\n * default, whatever the changes are. Somebody publishing `beta.88` is not\n * asking to be moved to `1.0.0` because they fixed a bug.\n */\n\nexport type ReleaseKind = \"major\" | \"minor\" | \"patch\" | \"prerelease\";\n\ntype Parsed = {\n prerelease: string[];\n release: [number, number, number];\n};\n\n/** What a comparator returns: the left one is older, or it is newer. */\nconst OLDER = -1;\n/** The last element, and everything but it. */\nconst LAST = -1;\nconst NEWER = 1;\n\nconst VERSION =\n /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/u;\n\nexport const parseVersion = (version: string) => {\n const found = VERSION.exec(version.trim());\n if (!found) return undefined;\n const [, major, minor, patch, prerelease] = found;\n\n return {\n prerelease: prerelease === undefined ? [] : prerelease.split(\".\"),\n release: [Number(major), Number(minor), Number(patch)],\n } satisfies Parsed;\n};\n\nconst isNumeric = (value: string) => /^\\d+$/u.test(value);\n\nconst comparePrerelease = (left: string[], right: string[]) => {\n // A release outranks any prerelease of the same numbers.\n if (left.length === 0 || right.length === 0)\n return right.length - left.length;\n for (const [index, mine] of left.entries()) {\n const theirs = right[index];\n if (theirs === undefined) return NEWER;\n if (mine === theirs) continue;\n if (isNumeric(mine) && isNumeric(theirs))\n return Number(mine) - Number(theirs);\n // Numeric identifiers rank below alphanumeric ones.\n if (isNumeric(mine)) return OLDER;\n if (isNumeric(theirs)) return NEWER;\n\n return mine < theirs ? OLDER : NEWER;\n }\n\n return left.length - right.length;\n};\n\n/** Semver order. Negative when the left version is the older one. */\nexport const compareVersions = (left: string, right: string) => {\n const mine = parseVersion(left);\n const theirs = parseVersion(right);\n if (!mine || !theirs) return 0;\n for (const [index, part] of mine.release.entries()) {\n const other = theirs.release[index] ?? 0;\n if (part !== other) return part - other;\n }\n\n return comparePrerelease(mine.prerelease, theirs.prerelease);\n};\n\nexport const isPrerelease = (version: string) =>\n (parseVersion(version)?.prerelease.length ?? 0) > 0;\n\n/** The largest step any of these changes asks for. */\nexport const releaseKindFor = (changes: readonly Change[]) => {\n if (changes.some(isDisruptive)) {\n const major: ReleaseKind = \"major\";\n\n return major;\n }\n const asked: ReleaseKind = changes.some((entry) => entry.kind === \"added\")\n ? \"minor\"\n : \"patch\";\n\n return asked;\n};\n\nconst bumpPrerelease = (parsed: Parsed) => {\n const { prerelease, release } = parsed;\n const last = prerelease.at(LAST);\n const counted =\n last !== undefined && isNumeric(last)\n ? [...prerelease.slice(0, LAST), String(Number(last) + 1)]\n : [...prerelease, \"1\"];\n\n return `${release.join(\".\")}-${counted.join(\".\")}`;\n};\n\n/**\n * The version these changes make of this one.\n *\n * `asked` overrides the changes: a release that means to leave a prerelease\n * line, or to cut the major it has been putting off, says so rather than\n * being inferred into it.\n */\nexport const nextVersion = (input: {\n asked?: ReleaseKind;\n changes: readonly Change[];\n current: string;\n /** The identifier a first prerelease uses: `beta` gives `1.0.0-beta.1`. */\n prereleaseIdentifier?: string;\n}) => {\n const parsed = parseVersion(input.current);\n if (!parsed) return undefined;\n const [major, minor, patch] = parsed.release;\n /* A prerelease line moves along itself unless told otherwise -- including\n * for a breaking change, which is what a prerelease line is for. */\n const kind =\n input.asked ??\n (parsed.prerelease.length > 0\n ? \"prerelease\"\n : releaseKindFor(input.changes));\n if (kind === \"prerelease\")\n return parsed.prerelease.length > 0\n ? bumpPrerelease(parsed)\n : `${major}.${minor}.${patch + 1}-${\n input.prereleaseIdentifier ?? \"beta\"\n }.1`;\n /* Leaving a prerelease line for the release it was leading up to: the\n * numbers are already right, the suffix is what goes. */\n if (parsed.prerelease.length > 0 && kind === \"patch\")\n return `${major}.${minor}.${patch}`;\n /* Below 1.0.0 the major is reserved for the release that means it, so a\n * breaking change moves the minor instead. */\n if (kind === \"major\")\n return major === 0 ? `${major}.${minor + 1}.0` : `${major + 1}.0.0`;\n\n return kind === \"minor\"\n ? `${major}.${minor + 1}.0`\n : `${major}.${minor}.${patch + 1}`;\n};\n",
9
9
  "import {\n CHANGELOG_CONTRACT,\n CHANGE_KINDS,\n isDisruptive,\n isMechanical,\n type Change,\n type ChangeKind,\n type Changelog,\n type DisruptiveChange,\n type Migration,\n type NonEmpty,\n type Release,\n} from \"./types\";\nimport { compareVersions, parseVersion } from \"./versioning\";\n\n/*\n * Reading a changelog somebody else wrote.\n *\n * The document arrives from a registry, which means it arrives from the\n * internet: nothing here trusts a field until it has looked at it, and a\n * document that is wrong is refused with the reasons rather than half-read\n * into a shape the rest of the program will misuse. That matters more than it\n * usually would, because the thing on the other end of this is a program\n * deciding whether an upgrade is safe -- a changelog that parses loosely is\n * how \"no breaking changes\" gets said about a release that had them.\n *\n * Every query below answers oldest-first. An upgrade is walked forwards: the\n * changes are read in the order they happened and the migrations are applied\n * in that order, because two of them may touch the same name.\n */\n\ntype Problem = string;\n\nconst isKind = (value: unknown): value is ChangeKind =>\n typeof value === \"string\" && CHANGE_KINDS.some((known) => known === value);\n\n/** Narrowing that keeps the ordinary branch's `kind` out of the disruptive\n * union without an assertion. */\nconst isDisruptiveKind = (kind: ChangeKind): kind is \"breaking\" | \"removed\" =>\n kind === \"breaking\" || kind === \"removed\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isText = (value: unknown): value is string =>\n typeof value === \"string\" && value.trim().length > 0;\n\n/** A list of names, or nothing -- and `nothing` is reported rather than\n * quietly dropped. An entry whose `symbols` is `[123, \"serve\"]` used to be\n * accepted with no symbols at all, so a consumer asking \"does this release\n * touch me?\" was told no about a change that named `serve`. */\nconst textList = (value: unknown, where: string, problems: Problem[]) => {\n if (value === undefined) return undefined;\n if (Array.isArray(value) && value.length > 0 && value.every(isText))\n return value.filter((entry) => typeof entry === \"string\");\n problems.push(`${where}: symbols is not a list of names`);\n\n return undefined;\n};\n\nconst readMigration = (value: unknown, where: string, problems: Problem[]) => {\n if (!isRecord(value) || !isText(value.instruction)) {\n problems.push(`${where}: migration needs an instruction`);\n\n return undefined;\n }\n const { instruction } = value;\n const { rename } = value;\n if (isRecord(rename) && isText(rename.from) && isText(rename.to))\n return {\n instruction,\n rename: { from: rename.from, to: rename.to },\n } satisfies Migration;\n const { moved } = value;\n if (\n isRecord(moved) &&\n isText(moved.symbol) &&\n isText(moved.from) &&\n isText(moved.to)\n )\n return {\n instruction,\n moved: { from: moved.from, symbol: moved.symbol, to: moved.to },\n } satisfies Migration;\n const { resubpath } = value;\n if (isRecord(resubpath) && isText(resubpath.from) && isText(resubpath.to))\n return {\n instruction,\n resubpath: { from: resubpath.from, to: resubpath.to },\n } satisfies Migration;\n if (value.manual === true) return { instruction, manual: true } as const;\n problems.push(\n `${where}: migration says neither rename, moved, resubpath nor manual`,\n );\n\n return undefined;\n};\n\nconst readChange = (value: unknown, where: string, problems: Problem[]) => {\n if (!isRecord(value)) {\n problems.push(`${where}: not an object`);\n\n return undefined;\n }\n const { kind } = value;\n if (!isKind(kind)) {\n problems.push(`${where}: unknown kind ${JSON.stringify(kind)}`);\n\n return undefined;\n }\n if (!isText(value.summary)) {\n problems.push(`${where}: needs a summary`);\n\n return undefined;\n }\n const shared: Pick<Change, \"detail\" | \"reference\" | \"summary\"> = {\n ...(isText(value.detail) ? { detail: value.detail } : {}),\n ...(isText(value.reference) ? { reference: value.reference } : {}),\n summary: value.summary,\n };\n const symbols = textList(value.symbols, where, problems);\n const [first, ...rest] = symbols ?? [];\n /* The rule the whole document exists to enforce: a change that costs a\n * consumer work says which exports it costs them and what to do. */\n if (kind === \"breaking\" || kind === \"removed\") {\n const migration = readMigration(value.migration, where, problems);\n if (first === undefined)\n problems.push(`${where}: a ${kind} change must name symbols`);\n if (!migration || first === undefined) return undefined;\n const named: NonEmpty<string> = [first, ...rest];\n const disruptive: Change = {\n ...shared,\n kind,\n migration,\n symbols: named,\n };\n\n return disruptive;\n }\n if (isDisruptiveKind(kind)) return undefined;\n const ordinary: Change = {\n ...shared,\n kind,\n ...(symbols ? { symbols } : {}),\n };\n\n return ordinary;\n};\n\nconst readRelease = (value: unknown, where: string, problems: Problem[]) => {\n if (!isRecord(value)) {\n problems.push(`${where}: not an object`);\n\n return undefined;\n }\n const version = isText(value.version) ? value.version.trim() : undefined;\n /* Trimmed where it is read as well as where it is parsed: `\" 1.0.0 \"`\n * parsed fine, was stored with its spaces, and then failed a string\n * comparison against the manifest's version for a reason nobody could\n * see. */\n if (version === undefined || parseVersion(version) === undefined) {\n problems.push(`${where}: version is not a version`);\n\n return undefined;\n }\n if (!isText(value.date)) {\n problems.push(`${where}: needs a date`);\n\n return undefined;\n }\n const raw = value.changes;\n if (!Array.isArray(raw) || raw.length === 0) {\n problems.push(`${where}: a release with no changes is not a release`);\n\n return undefined;\n }\n const changes = raw\n .map((entry, index) =>\n readChange(entry, `${where}.changes[${index}]`, problems),\n )\n .filter((entry): entry is Change => entry !== undefined);\n if (changes.length !== raw.length) return undefined;\n\n const [head, ...tail] = changes;\n if (head === undefined) return undefined;\n const release: Release = {\n changes: [head, ...tail],\n date: value.date,\n ...(isText(value.note) ? { note: value.note } : {}),\n version,\n };\n\n return release;\n};\n\n/**\n * Read one entry on its own, the way the authoring files are checked.\n *\n * The compiler already refused the shapes it can see; this is for the moment\n * the file is read back as data, where a `kind` typed into a string and a\n * migration deleted in a merge are both still possible.\n */\nexport const validateChange = (value: unknown, where = \"entry\") => {\n const problems: Problem[] = [];\n const change = readChange(value, where, problems);\n\n if (change === undefined) {\n const failed: { change?: undefined; problems: Problem[] } = { problems };\n\n return failed;\n }\n const read: { change: Change; problems?: undefined } = { change };\n\n return read;\n};\n\nexport type ChangelogRead =\n | { changelog: Changelog; problems?: undefined }\n | { changelog?: undefined; problems: Problem[] };\n\n/**\n * Read a changelog document, or say why it is not one.\n *\n * A later contract is refused rather than read: a reader written today cannot\n * know what a field added tomorrow means, and guessing is how a document that\n * grew a \"this one is worse than it looks\" flag gets summarised without it.\n */\nexport const parseChangelog = (value: unknown): ChangelogRead => {\n const problems: Problem[] = [];\n if (!isRecord(value)) return { problems: [\"not an object\"] };\n if (!isText(value.name)) problems.push(\"needs a package name\");\n /* A document from an older contract is one this reader was written after\n * and still understands. A newer one is not: a field added tomorrow could\n * be the one that says \"this release is worse than it looks\", and a reader\n * that skips it summarises the release without it. */\n if (\n !Number.isInteger(value.contract) ||\n Number(value.contract) > CHANGELOG_CONTRACT\n )\n problems.push(\n `contract ${JSON.stringify(value.contract)} is newer than ${CHANGELOG_CONTRACT}, which this reader understands`,\n );\n const raw = value.releases;\n if (!Array.isArray(raw)) problems.push(\"releases is not a list\");\n const releases = (Array.isArray(raw) ? raw : [])\n .map((entry, index) => readRelease(entry, `releases[${index}]`, problems))\n .filter((entry) => entry !== undefined);\n if (problems.length > 0) return { problems };\n\n return {\n changelog: {\n contract: CHANGELOG_CONTRACT,\n name: String(value.name),\n // Newest first is how it is read; the queries below reverse it.\n releases: [...releases].sort((left, right) =>\n compareVersions(right.version, left.version),\n ),\n },\n };\n};\n\n/** The releases strictly after `from` and up to and including `to`, oldest\n * first -- the order an upgrade happens in. */\nexport const releasesBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n [...changelog.releases]\n .filter(\n (release) =>\n compareVersions(release.version, from) > 0 &&\n compareVersions(release.version, upto) <= 0,\n )\n .sort((left, right) => compareVersions(left.version, right.version));\n\nexport type ChangeAt = { change: Change; version: string };\n\nexport const changesBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n releasesBetween(changelog, from, upto).flatMap((release) =>\n release.changes.map((change) => {\n const found: ChangeAt = { change, version: release.version };\n\n return found;\n }),\n );\n\nexport type DisruptiveAt = { change: DisruptiveChange; version: string };\n\nconst isDisruptiveAt = (found: ChangeAt): found is DisruptiveAt =>\n isDisruptive(found.change);\n\n/** Only the ones that cost a consumer work. */\nexport const disruptiveBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) => changesBetween(changelog, from, upto).filter(isDisruptiveAt);\n\nexport type MigrationAt = {\n migration: Migration;\n symbols: readonly string[];\n version: string;\n};\n\n/** The ones that can be applied rather than read. */\nexport const mechanicalMigrations = (migrations: readonly MigrationAt[]) =>\n migrations.filter((found) => isMechanical(found.migration));\n/**\n * The migrations an upgrade needs, in the order they happened.\n *\n * Order is not a nicety: a symbol renamed in one release and moved in the next\n * has to be renamed first, or the move looks for a name that is no longer\n * there.\n */\nexport const migrationsBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n disruptiveBetween(changelog, from, upto).map(({ change, version }) => {\n const found: MigrationAt = {\n migration: change.migration,\n symbols: change.symbols,\n version,\n };\n\n return found;\n });\n/** Every export named by a disruptive change in the window. */\nexport const symbolsDisturbedBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n new Set(\n disruptiveBetween(changelog, from, upto).flatMap(\n ({ change }) => change.symbols,\n ),\n );\n",
@@ -14,7 +14,7 @@
14
14
  "import { gunzipSync } from \"node:zlib\";\nimport { parseChangelog } from \"./read\";\nimport { surfaceOfArchive } from \"./surface\";\nimport { asText, readTar } from \"./tarball\";\nimport { CHANGELOG_FILE } from \"./types\";\n\n/*\n * What the registry can tell us about a package.\n *\n * Two documents and no more: the abbreviated packument, which says which\n * versions exist and where their tarballs are, and the tarballs themselves,\n * which hold the types and the changelog.\n *\n * The abbreviated form is asked for by name. The full packument for a package\n * that publishes daily is tens of megabytes of README and maintainer history\n * for the two fields below.\n */\n\nconst ABBREVIATED = \"application/vnd.npm.install-v1+json\";\nconst DEFAULT_REGISTRY = \"https://registry.npmjs.org\";\nconst KIBIBYTE = 1024;\nconst MEBIBYTE = KIBIBYTE * KIBIBYTE;\n/** A published package past this is not one anybody is upgrading through a\n * changelog, and the bytes are a stranger's. */\nconst MAX_ARCHIVE_MEBIBYTES = 96;\nconst MAX_ARCHIVE_BYTES = MAX_ARCHIVE_MEBIBYTES * MEBIBYTE;\nconst MAX_DOWNLOAD_MEBIBYTES = 32;\nconst MAX_DOWNLOAD_BYTES = MAX_DOWNLOAD_MEBIBYTES * MEBIBYTE;\n/** Long enough for a slow registry, short enough that a hung connection does\n * not hold a release open. */\nexport type PackageVersions = {\n latest?: string;\n published: string[];\n tarballs: Record<string, string>;\n};\n\nconst TIMEOUT_MS = 20_000;\nconst NOT_FOUND = 404;\n\n/** The registry answered, and the answer is that this name has nothing on it\n * -- which a first release is, and an outage is not. */\nconst NOTHING_PUBLISHED: PackageVersions = { published: [], tarballs: {} };\n\n/** npm's own grammar, near enough: no path segments, no traversal. A name\n * from a customer's manifest reaches this, and `@scope/../../thing`\n * normalises to somebody else's package. */\nconst PACKAGE_NAME = /^(?:@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*$/u;\n\n/** npm's own limit. */\nconst MAX_NAME_LENGTH = 214;\n\nexport const isPackageName = (name: string) =>\n name.length <= MAX_NAME_LENGTH && PACKAGE_NAME.test(name);\n\nexport type RegistryOptions = {\n fetch?: typeof fetch;\n /** For a private registry, or a test. */\n registry?: string;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst readPackument = (body: unknown): PackageVersions | undefined => {\n if (!isRecord(body) || !isRecord(body.versions)) return undefined;\n const tarballs: Record<string, string> = {};\n for (const [version, entry] of Object.entries(body.versions)) {\n if (!isRecord(entry) || !isRecord(entry.dist)) continue;\n const { tarball } = entry.dist;\n if (typeof tarball === \"string\") tarballs[version] = tarball;\n }\n const tags = body[\"dist-tags\"];\n const latest = isRecord(tags) ? tags.latest : undefined;\n\n return {\n ...(typeof latest === \"string\" ? { latest } : {}),\n published: Object.keys(body.versions),\n tarballs,\n };\n};\n\n/** One version's tarball, gunzipped. */\n/**\n * One version's tarball, gunzipped.\n *\n * A failure is not remembered. Callers cache the promise this returns, and a\n * transient 503 stored as \"there is no archive\" sticks for the life of the\n * process -- the registry recovers and the answer does not.\n */\nexport const packageArchive = async (\n name: string,\n version: string,\n options: RegistryOptions = {},\n) => {\n const call = options.fetch ?? fetch;\n const versions = await packageVersions(name, options);\n const url = versions?.tarballs[version];\n if (url === undefined) return undefined;\n try {\n const response = await call(url, {\n signal: AbortSignal.timeout(TIMEOUT_MS),\n });\n if (!response.ok) return undefined;\n const compressed = new Uint8Array(await response.arrayBuffer());\n /* Both ends bounded. Half a megabyte of gzip expands to half a gigabyte\n * if you let it, and the thing doing the expanding here is a control\n * plane holding other people's secrets. */\n if (compressed.byteLength > MAX_DOWNLOAD_BYTES) return undefined;\n\n return new Uint8Array(\n gunzipSync(compressed, { maxOutputLength: MAX_ARCHIVE_BYTES }),\n );\n } catch {\n return undefined;\n }\n};\n/**\n * Every version published under a name, or nothing when the registry could not\n * say.\n *\n * Nothing is not an error to throw: a caller deciding what to offer somebody\n * can say \"we could not check\", and that is a better answer than a failed\n * page.\n */\nconst packuments = new Map<\n string,\n { asked: number; value: Promise<PackageVersions | undefined> }\n>();\n\n/** Long enough that a page asking about twenty packages asks once each, short\n * enough that a release published while somebody reads is offered to them. */\nconst SECONDS_PER_MINUTE = 60;\nconst MILLISECONDS_PER_SECOND = 1000;\nconst PACKUMENT_MINUTES = 5;\nconst PACKUMENT_TTL_MS =\n PACKUMENT_MINUTES * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND;\n\n/** Forget what the registry said, for a test that means to say it again. */\nexport const forgetRegistry = () => packuments.clear();\n\nexport const packageVersions = async (\n name: string,\n options: RegistryOptions = {},\n) => {\n if (!isPackageName(name)) return undefined;\n /* Cached, because the alternative is what the consumer of this library was\n * doing: one request per package per page load, from a control plane, to\n * somebody else's registry, for an answer that changes daily.\n *\n * Only when nobody passed their own `fetch` -- a caller with a fetch double\n * means to control the answers, and a cache shared with the real registry\n * would hand them somebody else's. */\n const cacheable =\n options.fetch === undefined && options.registry === undefined;\n const known = cacheable ? packuments.get(name) : undefined;\n if (known !== undefined && Date.now() - known.asked < PACKUMENT_TTL_MS)\n return known.value;\n const value = askRegistry(name, options);\n if (cacheable) packuments.set(name, { asked: Date.now(), value });\n\n return value;\n};\n\nconst askRegistry = async (name: string, options: RegistryOptions) => {\n const call = options.fetch ?? fetch;\n const url = `${options.registry ?? DEFAULT_REGISTRY}/${name.replace(\"/\", \"%2f\")}`;\n try {\n const abbreviated = await call(url, {\n headers: { accept: ABBREVIATED },\n signal: AbortSignal.timeout(TIMEOUT_MS),\n });\n /* A package published minutes ago answers the full document and 404s the\n * abbreviated one -- the registry builds that form on its own schedule.\n * Taking the 404 at face value says \"no such package\" about a package\n * that is right there, which is a confusing few minutes for whoever just\n * published it. */\n const response = abbreviated.ok\n ? abbreviated\n : await call(url, { signal: AbortSignal.timeout(TIMEOUT_MS) });\n if (response.ok) return readPackument(await response.json());\n\n /* A definite 404 is an answer: this name has never been published. That\n * is not the same as the registry being unreachable, and a caller that\n * cannot tell them apart refuses a package's first release forever. */\n return response.status === NOT_FOUND ? NOTHING_PUBLISHED : undefined;\n } catch {\n return undefined;\n }\n};\n/**\n * A published version's changelog, when it ships one.\n *\n * Nothing is the ordinary answer for a package that has not adopted this yet,\n * and callers are expected to fall back to comparing type surfaces rather than\n * to give up: an unannotated release is still a release somebody has to\n * decide about.\n */\nexport const publishedChangelog = async (\n name: string,\n version: string,\n options: RegistryOptions = {},\n) => {\n const archive = await packageArchive(name, version, options);\n if (!archive) return undefined;\n const file = readTar(archive, (path) => path === CHANGELOG_FILE).get(\n CHANGELOG_FILE,\n );\n if (!file) return undefined;\n try {\n return parseChangelog(JSON.parse(asText(file))).changelog;\n } catch {\n return undefined;\n }\n};\n/** A published version's type surface, for comparing against another. */\nexport const publishedSurface = async (\n name: string,\n version: string,\n options: RegistryOptions = {},\n) => {\n const archive = await packageArchive(name, version, options);\n\n return archive === undefined ? undefined : surfaceOfArchive(archive);\n};\n",
15
15
  "import {\n CHANGELOG_CONTRACT,\n isDisruptive,\n type Change,\n type ChangeKind,\n type Changelog,\n type Migration,\n type Release,\n} from \"./types\";\nimport { compareVersions } from \"./versioning\";\n\n/*\n * Writing the two copies.\n *\n * `changelog.json` is the document programs read and the one that ships in the\n * package. `CHANGELOG.md` is the same content for people, generated from it\n * rather than written beside it -- two files kept in step by hand is one file\n * and a lie.\n *\n * Both are produced from the entries, so the markdown is never edited: a\n * change to it is a change to an entry, and the file says so at the top for\n * whoever arrives with a fix.\n */\n\nconst HEADING: Record<ChangeKind, string> = {\n added: \"Added\",\n breaking: \"Breaking\",\n changed: \"Changed\",\n deprecated: \"Deprecated\",\n fixed: \"Fixed\",\n internal: \"Internal\",\n removed: \"Removed\",\n security: \"Security\",\n};\n\n/* Read in the order somebody cares about them: what will cost me an\n * afternoon, then what I can now do, then what stopped being wrong. */\nconst ORDER: readonly ChangeKind[] = [\n \"breaking\",\n \"removed\",\n \"deprecated\",\n \"security\",\n \"added\",\n \"changed\",\n \"fixed\",\n \"internal\",\n];\n\nconst migrationLine = (migration: Migration) => {\n if (\"rename\" in migration)\n return `Rename \\`${migration.rename.from}\\` to \\`${migration.rename.to}\\`.`;\n if (\"moved\" in migration)\n return `Import \\`${migration.moved.symbol}\\` from \\`${migration.moved.to}\\` instead of \\`${migration.moved.from}\\`.`;\n if (\"resubpath\" in migration)\n return `Import from \\`${migration.resubpath.to}\\` instead of \\`${migration.resubpath.from}\\`.`;\n\n return migration.instruction;\n};\n\nconst renderChange = (change: Change) => {\n const symbols =\n change.symbols && change.symbols.length > 0\n ? ` (${change.symbols.map((name) => `\\`${name}\\``).join(\", \")})`\n : \"\";\n const lines = [`- **${change.summary}**${symbols}`];\n if (change.detail !== undefined) lines.push(` ${change.detail}`);\n if (isDisruptive(change)) {\n lines.push(` _Migration:_ ${change.migration.instruction}`);\n const mechanical = migrationLine(change.migration);\n if (mechanical !== change.migration.instruction)\n lines.push(` _Applied automatically:_ ${mechanical}`);\n }\n if (change.reference !== undefined) lines.push(` See ${change.reference}.`);\n\n return lines.join(\"\\n\");\n};\n\nconst renderRelease = (release: Release) => {\n const sections = ORDER.map((kind) => {\n const changes = release.changes.filter((entry) => entry.kind === kind);\n if (changes.length === 0) return null;\n\n return [`### ${HEADING[kind]}`, \"\", ...changes.map(renderChange)].join(\n \"\\n\",\n );\n }).filter((section): section is string => section !== null);\n\n return [\n `## ${release.version} — ${release.date}`,\n ...(release.note === undefined ? [] : [\"\", release.note]),\n \"\",\n sections.join(\"\\n\\n\"),\n ].join(\"\\n\");\n};\n\n/**\n * The line that says this file was generated.\n *\n * Load-bearing: adopting a package reads whatever `CHANGELOG.md` said before\n * and keeps it as history, and on a second adoption the file it generated the\n * first time is what it finds. Without a way to recognise its own output it\n * files that as history and prints the header underneath itself.\n */\nexport const GENERATED_MARKER =\n \"This file is generated by `absolute-changelog`\";\n\nexport type MarkdownOptions = {\n /** Whatever the package's changelog said before it was generated, kept\n * under the releases that came after it. History is not noise. */\n history?: string;\n};\n\n/** The document that ships in the package: stable key order, so a release\n * that changed nothing produces no diff. */\nexport const renderChangelogJson = (changelog: Changelog) =>\n `${JSON.stringify(\n {\n contract: CHANGELOG_CONTRACT,\n name: changelog.name,\n releases: [...changelog.releases]\n .sort((left, right) => compareVersions(right.version, left.version))\n .map((release) => ({\n changes: release.changes.map((change) => ({\n ...(change.detail === undefined ? {} : { detail: change.detail }),\n kind: change.kind,\n ...(isDisruptive(change) ? { migration: change.migration } : {}),\n ...(change.reference === undefined\n ? {}\n : { reference: change.reference }),\n summary: change.summary,\n ...(change.symbols && change.symbols.length > 0\n ? { symbols: change.symbols }\n : {}),\n })),\n date: release.date,\n ...(release.note === undefined ? {} : { note: release.note }),\n version: release.version,\n })),\n },\n null,\n \"\\t\",\n )}\\n`;\nexport const renderMarkdown = (\n changelog: Changelog,\n options: MarkdownOptions = {},\n) => {\n const releases = [...changelog.releases].sort((left, right) =>\n compareVersions(right.version, left.version),\n );\n const head = [\n \"# Changelog\",\n \"\",\n `All notable changes to \\`${changelog.name}\\`.`,\n \"\",\n `${GENERATED_MARKER} from the entries in`,\n \"`changelog/`. Edit an entry, not this file — and add new ones under\",\n \"`changelog/unreleased/`.\",\n ].join(\"\\n\");\n const body = releases.map(renderRelease).join(\"\\n\\n\");\n const tail =\n options.history === undefined || options.history.trim() === \"\"\n ? \"\"\n : [\"---\", \"\", \"## Earlier releases\", \"\", options.history.trim()].join(\n \"\\n\",\n );\n\n return `${[head, body, tail].filter((part) => part !== \"\").join(\"\\n\\n\")}\\n`;\n};\n"
16
16
  ],
17
- "mappings": "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",
18
- "debugId": "3D35EBE83A76D8A664756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "D18444F7EA93A50564756E2164756E21",
19
19
  "names": []
20
20
  }
package/dist/entries.d.ts CHANGED
@@ -8,6 +8,18 @@ export type LoadedEntries = {
8
8
  entries: LoadedEntry[];
9
9
  problems: string[];
10
10
  };
11
+ /**
12
+ * Whether the build is older than the source it was built from.
13
+ *
14
+ * The gate compares what is on disk against what was published, so a `dist`
15
+ * from yesterday reports yesterday's package. It cost an afternoon once: six
16
+ * exports reported as withdrawn from a package that had withdrawn nothing,
17
+ * because the build predated the source by a day.
18
+ *
19
+ * A warning rather than a failure -- a fresh checkout has every file at the
20
+ * same moment, and the publish path builds first anyway.
21
+ */
22
+ export declare const buildIsStale: (packageRoot: string) => Promise<boolean>;
11
23
  /**
12
24
  * The public surface a build produced, read the way a consumer would.
13
25
  *
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { applyMigration, applyMigrations, type MigrationResult } from "./apply";
2
2
  export { change, manual, moved, renamed } from "./authoring";
3
- export { builtSurface, changelogPaths, loadUnreleased, readJsonFile, type LoadedEntries, type LoadedEntry, } from "./entries";
3
+ export { buildIsStale, builtSurface, changelogPaths, loadUnreleased, readJsonFile, type LoadedEntries, type LoadedEntry, } from "./entries";
4
4
  export { changesBetween, disruptiveBetween, mechanicalMigrations, migrationsBetween, parseChangelog, releasesBetween, symbolsDisturbedBetween, validateChange, type ChangeAt, type ChangelogRead, type MigrationAt, } from "./read";
5
5
  export { describeReconciliation, reconcile, type Reconciliation, type Unannounced, } from "./reconcile";
6
6
  export { forgetRegistry, isPackageName, packageArchive, packageVersions, publishedChangelog, publishedSurface, type PackageVersions, type RegistryOptions, } from "./registry";
package/dist/index.js CHANGED
@@ -324,7 +324,7 @@ var renamed = (input) => change({
324
324
  symbols: [input.from]
325
325
  });
326
326
  // src/entries.ts
327
- import { readdir, readFile } from "fs/promises";
327
+ import { readdir, readFile, stat } from "fs/promises";
328
328
  import { join } from "path";
329
329
  import { pathToFileURL } from "url";
330
330
 
@@ -895,6 +895,23 @@ var loadEntry = async (path2) => {
895
895
  var ENTRY = /\.[cm]?ts$/u;
896
896
  var DECLARATION2 = /\.d\.[cm]?ts$/u;
897
897
  var OUTPUT_DIRECTORIES = ["dist", "build", "lib", "types", "out"];
898
+ var newestUnder = async (root) => {
899
+ const found = await readdir(root, { withFileTypes: true }).catch(() => []);
900
+ const times = await Promise.all(found.map(async (entry) => {
901
+ const path2 = join(root, entry.name);
902
+ if (entry.isDirectory())
903
+ return newestUnder(path2);
904
+ return stat(path2).then((stats) => stats.mtimeMs, () => 0);
905
+ }));
906
+ return Math.max(0, ...times);
907
+ };
908
+ var buildIsStale = async (packageRoot) => {
909
+ const [source, built] = await Promise.all([
910
+ newestUnder(join(packageRoot, "src")),
911
+ Promise.all(OUTPUT_DIRECTORIES.map((directory) => newestUnder(join(packageRoot, directory)))).then((times) => Math.max(0, ...times))
912
+ ]);
913
+ return source > 0 && built > 0 && source > built;
914
+ };
898
915
  var builtSurface = async (packageRoot) => {
899
916
  const manifest = await readJsonFile(join(packageRoot, "package.json"));
900
917
  const files = new Map;
@@ -1246,6 +1263,7 @@ export {
1246
1263
  applyMigration,
1247
1264
  applyMigrations,
1248
1265
  asText,
1266
+ buildIsStale,
1249
1267
  builtSurface,
1250
1268
  change,
1251
1269
  changeShape,
@@ -1289,5 +1307,5 @@ export {
1289
1307
  validateChange
1290
1308
  };
1291
1309
 
1292
- //# debugId=C07818292D22AD6164756E2164756E21
1310
+ //# debugId=2BE6EC2364C69ED864756E2164756E21
1293
1311
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -5,7 +5,7 @@
5
5
  "import ts from \"typescript\";\nimport { isMechanical, type Migration } from \"./types\";\n\n/*\n * Doing the migration rather than describing it.\n *\n * Most breaking changes in practice are a rename or a move, and both are\n * mechanical -- which is why the migration types carry them as data. The edit\n * here is the payoff: an upgrade that would have been an afternoon of\n * following a changelog becomes a diff to read.\n *\n * This reads the file with TypeScript's own parser, and the reason is worth\n * writing down, because the first version did not.\n *\n * It scanned text. Scanning text for imports and identifiers means answering,\n * with regular expressions, questions the language does not answer that way:\n * is this `import` a keyword or a word in a comment; is this quote a string,\n * an apostrophe in JSX text, or a character class in a regular expression; is\n * this `start` a reference to the import or the key of an object literal.\n * Every one of those was wrong, and the failures were not cosmetic -- a\n * comment reading \"import the plugin first\" above an import was enough to\n * make the edit swallow the import below it and leave the file unbuildable.\n *\n * A parser answers all of them by construction. An `Identifier` node is a\n * reference or it is not; text inside a comment or a string is not a node at\n * all. What is left for this file is deciding which nodes to edit, and the\n * decisions are the interesting part.\n *\n * Nothing loaded from a registry runs. A migration is a description, this is\n * the only code that acts on it, and it lives in the tool the developer chose\n * to run. Every value that reaches the output is checked against what it is\n * allowed to be first.\n */\n\nexport type MigrationResult = {\n /** Whether anything in this file changed. */\n changed: boolean;\n /** Anything the reader of the diff should know. */\n notes: string[];\n source: string;\n};\n\n/** A name a rename may produce. Anything else is not a name. */\nconst IDENTIFIER = /^[A-Za-z_$][\\w$]*$/u;\n/** A module specifier a migration may point at. Deliberately narrow: this\n * string is written into somebody's source, and the set of things a package\n * name can be is small. */\nconst SPECIFIER = /^[@a-zA-Z0-9._~-][a-zA-Z0-9._~/-]*$/u;\n\ntype Edit = { end: number; start: number; text: string };\n\n/** Applied back to front, so an earlier edit cannot move a later one. */\nconst applyEdits = (source: string, edits: readonly Edit[]) =>\n [...edits]\n .sort((left, right) => right.start - left.start)\n .reduce(\n (out, edit) => out.slice(0, edit.start) + edit.text + out.slice(edit.end),\n source,\n );\n\n/** JSX is a superset for parsing purposes; `.ts` is the one dialect where a\n * `<T>value` assertion means something else. */\nconst kindOf = (path: string) =>\n /\\.[cm]?ts$/u.test(path) ? ts.ScriptKind.TS : ts.ScriptKind.TSX;\n\nconst parse = (source: string, path: string) =>\n ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true, kindOf(path));\n\n/** Whether a module specifier is this package or a path inside it. */\nconst belongsTo = (specifier: string, name: string) =>\n specifier === name || specifier.startsWith(`${name}/`);\n\ntype Ported = ts.ImportDeclaration | ts.ExportDeclaration;\n\nconst moduleTextOf = (statement: Ported) =>\n statement.moduleSpecifier !== undefined &&\n ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : undefined;\n\n/** Every import and re-export in the file, with the module they name. */\nconst portsOf = (file: ts.SourceFile) => {\n const found: Array<{ module: string; statement: Ported }> = [];\n for (const statement of file.statements) {\n if (\n !ts.isImportDeclaration(statement) &&\n !ts.isExportDeclaration(statement)\n )\n continue;\n const module = moduleTextOf(statement);\n if (module !== undefined) found.push({ module, statement });\n }\n\n return found;\n};\n\nconst namedElementsOf = (statement: Ported) => {\n const clause = ts.isImportDeclaration(statement)\n ? statement.importClause?.namedBindings\n : statement.exportClause;\n if (clause === undefined) return undefined;\n if (ts.isNamedImports(clause) || ts.isNamedExports(clause)) return clause;\n\n return undefined;\n};\n\n/** The name the package knows a specifier by, which is the left of any `as`. */\nconst exportedNameOf = (element: ts.ImportSpecifier | ts.ExportSpecifier) =>\n (element.propertyName ?? element.name).text;\n\n/**\n * Whether this file gives the name its own meaning somewhere.\n *\n * If it does, renaming every reference would rename theirs too, so the import\n * is aliased back instead and the call sites are left alone -- correct, and\n * visible in the diff for anybody who would rather tidy it.\n *\n * Asked of the syntax rather than of a scope resolver: a declaration anywhere\n * in the file is enough to make the rename unsafe, and being sure would mean\n * type-checking the whole project to save one alias.\n */\nconst declaresLocally = (file: ts.SourceFile, name: string) => {\n let found = false;\n const visit = (node: ts.Node) => {\n if (found) return;\n const declares =\n (ts.isVariableDeclaration(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isClassDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isEnumDeclaration(node) ||\n ts.isParameter(node) ||\n ts.isBindingElement(node)) &&\n node.name !== undefined &&\n ts.isIdentifier(node.name) &&\n node.name.text === name;\n if (declares) found = true;\n else ts.forEachChild(node, visit);\n };\n ts.forEachChild(file, visit);\n\n return found;\n};\n\n/**\n * Whether an identifier is a reference to a binding, or the name of something.\n *\n * The distinction the text scanner could not make. `thing.start` names a\n * property; `{ start: 1 }` names a key; `class E { start() {} }` names a\n * method. None of them is the import, and renaming them changes what the\n * program does while leaving it compiling -- the worst outcome available.\n */\nconst isReference = (node: ts.Identifier) => {\n const { parent } = node;\n if (parent === undefined) return false;\n if (ts.isPropertyAccessExpression(parent) && parent.name === node)\n return false;\n if (ts.isQualifiedName(parent) && parent.right === node) return false;\n if (ts.isPropertyAssignment(parent) && parent.name === node) return false;\n if (ts.isBindingElement(parent) && parent.propertyName === node) return false;\n if (ts.isJsxAttribute(parent) && parent.name === node) return false;\n if (\n (ts.isMethodDeclaration(parent) ||\n ts.isPropertyDeclaration(parent) ||\n ts.isPropertySignature(parent) ||\n ts.isMethodSignature(parent) ||\n ts.isEnumMember(parent)) &&\n parent.name === node\n )\n return false;\n if (\n (ts.isImportSpecifier(parent) ||\n ts.isExportSpecifier(parent) ||\n ts.isImportClause(parent) ||\n ts.isNamespaceImport(parent)) &&\n true\n )\n return false;\n\n return !ts.isDeclarationStatement(parent);\n};\n\nconst referencesTo = (file: ts.SourceFile, name: string) => {\n const found: ts.Identifier[] = [];\n const shorthand: ts.ShorthandPropertyAssignment[] = [];\n const visit = (node: ts.Node) => {\n /* `{ start }` is a key and a reference at once. Renaming it whole would\n * rename the key; the edit that keeps the meaning is `{ start: listen }`. */\n if (ts.isShorthandPropertyAssignment(node) && node.name.text === name)\n shorthand.push(node);\n else if (ts.isIdentifier(node) && node.text === name && isReference(node))\n found.push(node);\n ts.forEachChild(node, visit);\n };\n ts.forEachChild(file, visit);\n\n return { references: found, shorthand };\n};\n\n/** The text of a named clause with one element taken out, or nothing when\n * that element was the only one. */\nconst withoutElement = (\n elements: ts.NodeArray<ts.ImportSpecifier | ts.ExportSpecifier>,\n dropped: ts.ImportSpecifier | ts.ExportSpecifier,\n file: ts.SourceFile,\n) => {\n const kept = elements.filter((element) => element !== dropped);\n\n return kept.length === 0\n ? undefined\n : kept.map((element) => element.getText(file)).join(\", \");\n};\n\nconst isTypeOnly = (\n statement: Ported,\n element: ts.ImportSpecifier | ts.ExportSpecifier,\n) => {\n if (element.isTypeOnly) return true;\n\n return ts.isImportDeclaration(statement)\n ? statement.importClause?.isTypeOnly === true\n : statement.isTypeOnly;\n};\n\nconst quoteOf = (statement: Ported, file: ts.SourceFile) =>\n statement.moduleSpecifier?.getText(file).startsWith('\"') === true ? '\"' : \"'\";\n\ntype RenameTarget = {\n clause: ts.NamedImports | ts.NamedExports;\n element: ts.ImportSpecifier | ts.ExportSpecifier;\n};\n\n/** Every place this package's names are imported under the old name. */\nconst renameTargetsIn = (input: {\n file: ts.SourceFile;\n from: string;\n packageName: string;\n}) =>\n portsOf(input.file)\n .filter(({ module }) => belongsTo(module, input.packageName))\n .flatMap(({ statement }) => {\n const clause = namedElementsOf(statement);\n if (clause === undefined) return [];\n\n return clause.elements\n .filter((element) => exportedNameOf(element) === input.from)\n .map((element) => ({ clause, element }));\n });\n\n/** What one import specifier needs, and whether the file's uses move with\n * it. */\nconst renameOneImport = (input: {\n file: ts.SourceFile;\n rename: { from: string; to: string };\n target: RenameTarget;\n}) => {\n const { clause, element } = input.target;\n const { file, rename } = input;\n /* Already imported under the new name as well: this file used both during\n * a deprecation window, and adding a second `listen` would be a duplicate\n * binding. The old specifier goes instead. */\n const already =\n element.propertyName === undefined &&\n clause.elements.some(\n (other) => other !== element && exportedNameOf(other) === rename.to,\n );\n if (already) {\n const kept = withoutElement(clause.elements, element, file);\n\n return {\n edits:\n kept === undefined\n ? []\n : [\n {\n end: clause.getEnd() - 1,\n start: clause.getStart(file) + 1,\n text: ` ${kept} `,\n },\n ],\n moves: true,\n };\n }\n // Imported under another name: only the left of the `as` moves.\n if (element.propertyName !== undefined)\n return {\n edits: [\n {\n end: element.propertyName.getEnd(),\n start: element.propertyName.getStart(file),\n text: rename.to,\n },\n ],\n moves: false,\n };\n const shadowed = declaresLocally(file, rename.from);\n\n return {\n edits: [\n {\n end: element.getEnd(),\n start: element.getStart(file),\n text: shadowed ? `${rename.to} as ${rename.from}` : rename.to,\n },\n ],\n moves: !shadowed,\n ...(shadowed\n ? {\n note: `\\`${rename.from}\\` is also declared in this file, so the import was aliased instead of the uses being renamed`,\n }\n : {}),\n };\n};\n\nconst applyRename = (input: {\n file: ts.SourceFile;\n packageName: string;\n rename: { from: string; to: string };\n source: string;\n}): MigrationResult => {\n const { file, packageName, rename, source } = input;\n if (!IDENTIFIER.test(rename.to))\n return {\n changed: false,\n notes: [`\\`${rename.to}\\` is not a name, so this rename was not applied`],\n source,\n };\n const done = renameTargetsIn({ file, from: rename.from, packageName }).map(\n (target) => renameOneImport({ file, rename, target }),\n );\n const edits: Edit[] = done.flatMap((one) => one.edits);\n if (edits.length === 0) return { changed: false, notes: [], source };\n if (done.some((one) => one.moves)) {\n const { references, shorthand } = referencesTo(file, rename.from);\n for (const reference of references)\n edits.push({\n end: reference.getEnd(),\n start: reference.getStart(file),\n text: rename.to,\n });\n for (const property of shorthand)\n edits.push({\n end: property.getEnd(),\n start: property.getStart(file),\n text: `${rename.from}: ${rename.to}`,\n });\n }\n\n return {\n changed: true,\n notes: done.flatMap((one) => (\"note\" in one && one.note ? [one.note] : [])),\n source: applyEdits(source, edits),\n };\n};\n\nconst applyMoved = (input: {\n file: ts.SourceFile;\n moved: { from: string; symbol: string; to: string };\n source: string;\n}): MigrationResult => {\n const { file, moved, source } = input;\n if (!SPECIFIER.test(moved.to))\n return {\n changed: false,\n notes: [\n `\\`${moved.to}\\` is not a module specifier, so this move was not applied`,\n ],\n source,\n };\n const edits: Edit[] = [];\n for (const { module, statement } of portsOf(file)) {\n if (module !== moved.from) continue;\n const clause = namedElementsOf(statement);\n if (clause === undefined) continue;\n const element = clause.elements.find(\n (candidate) => exportedNameOf(candidate) === moved.symbol,\n );\n if (element === undefined) continue;\n const quote = quoteOf(statement, file);\n const kept = withoutElement(clause.elements, element, file);\n const carriesDefault =\n ts.isImportDeclaration(statement) &&\n (statement.importClause?.name !== undefined ||\n statement.importClause?.isTypeOnly === true);\n /* Nothing else came from here and no default rides along: the statement\n * moves whole, which keeps the file's import list the length it was. */\n const whole =\n kept === undefined && !carriesDefault && statement.moduleSpecifier;\n if (whole)\n edits.push({\n end: whole.getEnd(),\n start: whole.getStart(file),\n text: `${quote}${moved.to}${quote}`,\n });\n if (whole) continue;\n /* Otherwise the one name leaves and the rest stay. A type-only import\n * stays type-only: emitting a value import of a type is a build error\n * under `verbatimModuleSyntax` and a runtime import of nothing without\n * it. */\n const keyword = ts.isExportDeclaration(statement) ? \"export\" : \"import\";\n const typed = isTypeOnly(statement, element) ? \"type \" : \"\";\n const carried = element.propertyName\n ? `${moved.symbol} as ${element.name.text}`\n : element.name.text;\n const carrier =\n ts.isImportDeclaration(statement) && statement.importClause?.name;\n /* The last name leaves a statement that still has a default. `import\n * Absolute, {} from` is valid and reads like a mistake, so the empty\n * clause goes with it. */\n const emptied: Edit | undefined =\n kept === undefined && carrier\n ? { end: clause.getEnd(), start: carrier.getEnd(), text: \"\" }\n : undefined;\n const trimmed: Edit | undefined =\n kept === undefined\n ? undefined\n : {\n end: clause.getEnd() - 1,\n start: clause.getStart(file) + 1,\n text: ` ${kept} `,\n };\n edits.push(...[emptied, trimmed].filter((edit) => edit !== undefined));\n edits.push({\n end: statement.getEnd(),\n start: statement.getEnd(),\n text: `\\n${keyword} ${typed}{ ${carried} } from ${quote}${moved.to}${quote};`,\n });\n }\n if (edits.length === 0) return { changed: false, notes: [], source };\n\n return { changed: true, notes: [], source: applyEdits(source, edits) };\n};\n\nconst applyResubpath = (input: {\n file: ts.SourceFile;\n resubpath: { from: string; to: string };\n source: string;\n}): MigrationResult => {\n const { file, resubpath, source } = input;\n if (!SPECIFIER.test(resubpath.to))\n return {\n changed: false,\n notes: [\n `\\`${resubpath.to}\\` is not a module specifier, so this move was not applied`,\n ],\n source,\n };\n const edits: Edit[] = [];\n for (const { module, statement } of portsOf(file)) {\n if (module !== resubpath.from || !statement.moduleSpecifier) continue;\n const quote = quoteOf(statement, file);\n edits.push({\n end: statement.moduleSpecifier.getEnd(),\n start: statement.moduleSpecifier.getStart(file),\n text: `${quote}${resubpath.to}${quote}`,\n });\n }\n if (edits.length === 0) return { changed: false, notes: [], source };\n\n return { changed: true, notes: [], source: applyEdits(source, edits) };\n};\n\n/**\n * Apply one migration to one file.\n *\n * A file the migration does not touch comes back unchanged, which is the\n * ordinary case: a project imports a dozen names from a package that moved a\n * hundred.\n */\nexport const applyMigration = (\n source: string,\n input: { migration: Migration; packageName: string; path?: string },\n) => {\n const { migration, packageName } = input;\n if (!isMechanical(migration))\n return { changed: false, notes: [migration.instruction], source };\n const file = parse(source, input.path ?? \"file.tsx\");\n if (\"rename\" in migration)\n return applyRename({\n file,\n packageName,\n rename: migration.rename,\n source,\n });\n if (\"resubpath\" in migration)\n return applyResubpath({ file, resubpath: migration.resubpath, source });\n\n return applyMoved({ file, moved: migration.moved, source });\n};\n\n/**\n * Apply migrations in order.\n *\n * Order matters: a symbol renamed in one release and moved in the next has to\n * be renamed first, or the move goes looking for a name that is no longer\n * there.\n */\nexport const applyMigrations = (\n source: string,\n input: {\n migrations: readonly Migration[];\n packageName: string;\n path?: string;\n },\n) =>\n input.migrations.reduce<MigrationResult>(\n (carried, migration) => {\n const result = applyMigration(carried.source, {\n migration,\n packageName: input.packageName,\n ...(input.path === undefined ? {} : { path: input.path }),\n });\n\n return {\n changed: carried.changed || result.changed,\n notes: [...carried.notes, ...result.notes],\n source: result.source,\n };\n },\n { changed: false, notes: [], source },\n );\n",
6
6
  "/*\n * What a change is, said in types strict enough that the important ones cannot\n * be written badly.\n *\n * A changelog is only worth having if the entries that matter carry what a\n * reader needs to act. Prose changelogs fail at exactly that: \"refactored the\n * server options\" is a true sentence and a useless one, because it does not\n * say which export moved or what to write instead. Nothing here can stop a\n * summary being vague, but the compiler can insist that a breaking change\n * names the exports it breaks and says how to migrate -- so the entries that\n * cost somebody an afternoon are the ones that cannot be filed empty.\n *\n * That is also what makes the machine half possible. `symbols` is the join\n * between an entry and the package's own type surface, so a release can be\n * checked against what actually changed; `migration` is the join between an\n * entry and the edit a project needs, so most upgrades can be applied rather\n * than described.\n */\n\n/** At least one, so a type says \"named\" rather than hoping a list is not\n * empty. */\nexport type NonEmpty<T> = readonly [T, ...T[]];\n\nexport const CHANGE_KINDS = [\n \"breaking\",\n \"removed\",\n \"added\",\n \"changed\",\n \"deprecated\",\n \"fixed\",\n \"security\",\n \"internal\",\n] as const;\n\nexport type ChangeKind = (typeof CHANGE_KINDS)[number];\n\n/** The kinds that cost a consumer work, and so must say what work. */\nexport const DISRUPTIVE_KINDS = [\"breaking\", \"removed\"] as const;\n\nexport type DisruptiveKind = (typeof DISRUPTIVE_KINDS)[number];\n\n/**\n * How to move code from before to after.\n *\n * Three of these are data rather than instructions, and that is the point: a\n * rename and a move are the overwhelming majority of real breaking changes,\n * and both are mechanical. Described as data they can be applied by anything\n * -- a CLI, an editor, a hosted upgrade button -- without running code that\n * arrived from a registry, which is the difference between an upgrade that\n * happens and an upgrade somebody schedules for a quiet week.\n *\n * `manual` is the honest escape hatch. A changed meaning is not a rewrite\n * anybody should automate, and pretending otherwise is worse than saying so.\n */\nexport type Migration<TSymbol extends string = string> =\n /** An export kept its meaning and changed its name. */\n | {\n readonly instruction: string;\n readonly rename: { readonly from: TSymbol; readonly to: string };\n }\n /** An export kept its name and moved to another entry point. */\n | {\n readonly instruction: string;\n readonly moved: {\n readonly symbol: TSymbol;\n readonly from: string;\n readonly to: string;\n };\n }\n /** A whole entry point moved; every import of it is rewritten. */\n | {\n readonly instruction: string;\n readonly resubpath: { readonly from: string; readonly to: string };\n }\n /** Neither a rename nor a move: somebody has to read the call. */\n | { readonly instruction: string; readonly manual: true };\n\n/**\n * The names a package exports, for an entry that wants them checked.\n *\n * An entry can be written against the package's own public API:\n *\n * ```ts\n * import type * as Api from \"../../src/index\";\n * import type { Change } from \"@absolutejs/changelog\";\n *\n * export const change: Change<typeof Api> = {\n * kind: \"fixed\",\n * summary: \"stops throwing on an empty list\",\n * symbols: [\"listen\"] // an export, or the compiler says so\n * };\n * ```\n *\n * Suggested rather than required, for two reasons that both matter. A\n * disruptive change is usually about something that has just stopped\n * existing -- the release that removes `start` is the release that writes the\n * entry about it -- and `typeof Api` cannot see type-only exports at all, so\n * insisting would reject an entry about `Change` or `Release` for being\n * something this package definitely exports.\n *\n * What that leaves is an editor that completes the name and a gate that is\n * certain: the release check reads the published `.d.ts`, which does carry\n * the type exports, and refuses an entry naming something the package has\n * never exported.\n */\ntype Exported<TApi> = TApi extends object\n ? Extract<keyof TApi, string>\n : string;\n\n/** Autocompleted, not restricted: an entry may name an export that has just\n * stopped being one. */\ntype Suggested<TApi> = Exported<TApi> | (string & {});\n\ntype ChangeBase = {\n /** One line, imperative, in the reader's terms rather than the\n * implementation's. */\n readonly summary: string;\n /** The why, when the summary cannot carry it. */\n readonly detail?: string;\n /** Where the discussion is. */\n readonly reference?: string;\n};\n\n/**\n * A change that costs a consumer work.\n *\n * `symbols` is not decoration: it is what lets a release be checked against\n * the package's published types, and what lets a project be told whether the\n * change reaches any of its files. An entry without it can only ever be read.\n */\nexport type DisruptiveChange<TApi = unknown> = ChangeBase & {\n readonly kind: DisruptiveKind;\n readonly symbols: NonEmpty<Suggested<TApi>>;\n readonly migration: Migration<Suggested<TApi>>;\n};\n\nexport type OrdinaryChange<TApi = unknown> = ChangeBase & {\n readonly kind: Exclude<ChangeKind, DisruptiveKind>;\n /** Optional here, and still worth filling in: it is what connects a fix\n * to the export somebody is looking at. */\n readonly symbols?: readonly Suggested<TApi>[];\n readonly migration?: never;\n};\n\nexport type Change<TApi = unknown> =\n DisruptiveChange<TApi> | OrdinaryChange<TApi>;\n\nexport type Release = {\n readonly version: string;\n /** ISO date, the day it was published. */\n readonly date: string;\n readonly changes: NonEmpty<Change>;\n /** Anything that is true of the release rather than of one change. */\n readonly note?: string;\n};\n\n/**\n * A package's history, newest first.\n *\n * Published alongside the package so that upgrading is a question anybody can\n * answer offline: what changed between the version I have and the version I\n * am being offered, and which of it reaches me.\n */\nexport type Changelog = {\n readonly name: string;\n /** The shape of this document, so a reader written today can refuse a\n * document written against a later contract instead of misreading it. */\n readonly contract: 1;\n readonly releases: readonly Release[];\n};\n\nexport const CHANGELOG_CONTRACT = 1;\n\n/** Where the machine-readable copy lives in a published package. */\nexport const CHANGELOG_FILE = \"changelog.json\";\n\n/** Where the human-readable copy lives. */\nexport const CHANGELOG_MARKDOWN = \"CHANGELOG.md\";\n\n/** Where entries wait between releases, one file each so two branches adding\n * a change do not conflict over the same line. */\nexport const UNRELEASED_DIRECTORY = \"changelog/unreleased\";\n\nexport const isDisruptive = (change: Change): change is DisruptiveChange =>\n change.kind === \"breaking\" || change.kind === \"removed\";\n\n/** Whether a migration can be applied rather than read. */\nexport const isMechanical = (\n migration: Migration,\n): migration is Exclude<Migration, { manual: true }> =>\n !(\"manual\" in migration);\n",
7
7
  "import type { Change, Migration } from \"./types\";\n\n/*\n * How an entry is written.\n *\n * A file per change, in TypeScript rather than markdown, for one reason: the\n * compiler is the only reviewer who reads every entry. A markdown changelog\n * gets a heading wrong, an entry with no migration, a symbol that was renamed\n * three versions ago -- and nothing says a word until somebody upgrades. Here\n * the shape is checked where it is written, and a breaking change with no\n * migration is a red squiggle rather than a bad afternoon in six months.\n *\n * `change` is identity at runtime. All it does is put the type where the\n * author is typing.\n */\n\n/**\n * Record one change.\n *\n * Written as its own file under `changelog/unreleased/`, so two branches each\n * adding a change do not meet over the same line of the same file. The file\n * name is yours; something short and about the change reads best in a diff.\n *\n * ```ts\n * import { change } from '@absolutejs/changelog';\n *\n * export default change({\n * kind: 'breaking',\n * summary: 'serve() takes an options object',\n * symbols: ['serve'],\n * migration: {\n * instruction: 'Pass { port } instead of a bare port.',\n * manual: true\n * }\n * });\n * ```\n */\nexport const change = <const T extends Change>(entry: T) => entry;\n/** A migration nobody should automate, said as such rather than left off. */\nexport const manual = (instruction: string): Migration => ({\n instruction,\n manual: true,\n});\n/**\n * Record an export moving between entry points.\n *\n * The second most common, and the one people most often discover by way of a\n * failed build with no explanation in it.\n */\nexport const moved = (input: {\n symbol: string;\n from: string;\n to: string;\n detail?: string;\n reference?: string;\n}) =>\n change({\n ...(input.detail === undefined ? {} : { detail: input.detail }),\n kind: \"breaking\",\n migration: {\n instruction: `Import \\`${input.symbol}\\` from \\`${input.to}\\`.`,\n moved: { from: input.from, symbol: input.symbol, to: input.to },\n },\n ...(input.reference === undefined ? {} : { reference: input.reference }),\n summary: `\\`${input.symbol}\\` moved to \\`${input.to}\\``,\n symbols: [input.symbol] as const,\n });\n/**\n * Record a rename.\n *\n * The most common breaking change there is, and the one worth having a\n * shorthand for -- both because it is written often and because writing it\n * this way is what makes it applicable rather than readable.\n */\nexport const renamed = (input: {\n from: string;\n to: string;\n /** Anything a reader needs beyond \"it is called this now\". */\n detail?: string;\n reference?: string;\n}) =>\n change({\n ...(input.detail === undefined ? {} : { detail: input.detail }),\n kind: \"breaking\",\n migration: {\n instruction: `Import \\`${input.to}\\` instead of \\`${input.from}\\`.`,\n rename: { from: input.from, to: input.to },\n },\n ...(input.reference === undefined ? {} : { reference: input.reference }),\n summary: `\\`${input.from}\\` is now \\`${input.to}\\``,\n symbols: [input.from] as const,\n });\n",
8
- "import { readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { validateChange } from \"./read\";\nimport { surfaceOfFiles, typeEntriesOf } from \"./surface\";\nimport {\n CHANGELOG_FILE,\n CHANGELOG_MARKDOWN,\n UNRELEASED_DIRECTORY,\n type Change,\n} from \"./types\";\n\n/*\n * The package on disk: its pending entries, its history, and the types it is\n * about to publish.\n *\n * Entries are TypeScript modules rather than data files, so an author writing\n * one is typing against the contract with the compiler watching. Reading them\n * back is an import, which is the same thing the compiler did, so a file that\n * would not build is a file that does not release.\n */\n\nexport type LoadedEntry = {\n change: Change;\n /** Relative, because it is printed at somebody who has to go and fix it. */\n file: string;\n};\n\n/**\n * Import one entry file, and say what went wrong rather than throwing.\n *\n * An entry that will not import is a problem to report beside the others --\n * a release that stops at the first bad file makes somebody fix them one at a\n * time.\n */\nconst loadEntry = async (path: string) => {\n try {\n const module: unknown = await import(pathToFileURL(path).href);\n /* `change` is what the template writes; `default` is accepted because a\n * default export is the shape somebody reaches for by habit, and\n * refusing it would be pedantry rather than a check. */\n const named =\n typeof module === \"object\" && module !== null && \"change\" in module\n ? module.change\n : undefined;\n const exported =\n named ??\n (typeof module === \"object\" && module !== null && \"default\" in module\n ? module.default\n : undefined);\n const read: { exported: unknown; failure?: string } = { exported };\n\n return read;\n } catch (error) {\n const failed: { exported?: undefined; failure: string } = {\n failure: error instanceof Error ? error.message : String(error),\n };\n\n return failed;\n }\n};\n\nexport type LoadedEntries = {\n entries: LoadedEntry[];\n problems: string[];\n};\n\nconst ENTRY = /\\.[cm]?ts$/u;\n\nconst DECLARATION = /\\.d\\.[cm]?ts$/u;\n/** Where a build puts its declaration files. Which of them a package actually\n * publishes comes from its manifest; this is only where to look. */\nconst OUTPUT_DIRECTORIES = [\"dist\", \"build\", \"lib\", \"types\", \"out\"];\n\n/**\n * The public surface a build produced, read the way a consumer would.\n *\n * From the entry points the manifest declares, following the export graph --\n * not by heaping every declaration file together, which counts names no\n * consumer can import and cannot see one being withdrawn.\n *\n * Nothing when the manifest's entry points are not on disk: that is a package\n * about to publish types it has not built, and passing it would be the gate\n * going quiet at the worst possible moment.\n */\nexport const builtSurface = async (packageRoot: string) => {\n const manifest = await readJsonFile(join(packageRoot, \"package.json\"));\n const files = new Map<string, string>();\n const walk = async (directory: string): Promise<void> => {\n const found = await readdir(join(packageRoot, directory), {\n withFileTypes: true,\n }).catch(() => []);\n await Promise.all(\n found.map(async (entry) => {\n const relative = `${directory}/${entry.name}`;\n if (entry.isDirectory()) return walk(relative);\n if (!DECLARATION.test(entry.name)) return undefined;\n files.set(\n relative,\n await readFile(join(packageRoot, relative), \"utf8\").catch(() => \"\"),\n );\n\n return undefined;\n }),\n );\n };\n await Promise.all(OUTPUT_DIRECTORIES.map((directory) => walk(directory)));\n const entries = typeEntriesOf(manifest, files);\n\n return entries.length === 0 ? undefined : surfaceOfFiles(files, entries);\n};\n\nexport const changelogPaths = (packageRoot: string) => ({\n history: join(packageRoot, \"changelog\", \"history.md\"),\n json: join(packageRoot, CHANGELOG_FILE),\n markdown: join(packageRoot, CHANGELOG_MARKDOWN),\n unreleased: join(packageRoot, UNRELEASED_DIRECTORY),\n});\n/** Every pending entry, in a stable order so a release reads the same twice. */\nexport const loadUnreleased = async (packageRoot: string) => {\n const directory = join(packageRoot, UNRELEASED_DIRECTORY);\n const names = await readdir(directory).catch(() => []);\n const entries: LoadedEntry[] = [];\n const problems: string[] = [];\n for (const name of names.filter((file) => ENTRY.test(file)).sort()) {\n const file = join(UNRELEASED_DIRECTORY, name);\n // Serial on purpose: the count is small and the failure messages read\n // in file order.\n // eslint-disable-next-line no-await-in-loop\n const loaded = await loadEntry(join(directory, name));\n if (loaded.failure !== undefined)\n problems.push(`${file}: ${loaded.failure}`);\n const checked =\n loaded.failure === undefined\n ? validateChange(loaded.exported, file)\n : undefined;\n if (checked?.problems) problems.push(...checked.problems);\n if (checked?.change !== undefined)\n entries.push({ change: checked.change, file });\n }\n\n return { entries, problems };\n};\nexport const readJsonFile = async (path: string) => {\n const source = await readFile(path, \"utf8\").catch(() => undefined);\n if (source === undefined) return undefined;\n try {\n const document: unknown = JSON.parse(source);\n\n return document;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Anything in the entry directory that is not an entry.\n *\n * A `.md` note dropped in here, or a `.txt` somebody meant as a placeholder,\n * is read by nothing and consumed by nothing -- it sits there through every\n * release looking like a change that was recorded.\n */\nexport const strayEntries = async (packageRoot: string) => {\n const names = await readdir(join(packageRoot, UNRELEASED_DIRECTORY)).catch(\n () => [],\n );\n\n return names.filter(\n (name) => !ENTRY.test(name) && name !== \".gitkeep\" && !name.startsWith(\".\"),\n );\n};\n",
8
+ "import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { validateChange } from \"./read\";\nimport { surfaceOfFiles, typeEntriesOf } from \"./surface\";\nimport {\n CHANGELOG_FILE,\n CHANGELOG_MARKDOWN,\n UNRELEASED_DIRECTORY,\n type Change,\n} from \"./types\";\n\n/*\n * The package on disk: its pending entries, its history, and the types it is\n * about to publish.\n *\n * Entries are TypeScript modules rather than data files, so an author writing\n * one is typing against the contract with the compiler watching. Reading them\n * back is an import, which is the same thing the compiler did, so a file that\n * would not build is a file that does not release.\n */\n\nexport type LoadedEntry = {\n change: Change;\n /** Relative, because it is printed at somebody who has to go and fix it. */\n file: string;\n};\n\n/**\n * Import one entry file, and say what went wrong rather than throwing.\n *\n * An entry that will not import is a problem to report beside the others --\n * a release that stops at the first bad file makes somebody fix them one at a\n * time.\n */\nconst loadEntry = async (path: string) => {\n try {\n const module: unknown = await import(pathToFileURL(path).href);\n /* `change` is what the template writes; `default` is accepted because a\n * default export is the shape somebody reaches for by habit, and\n * refusing it would be pedantry rather than a check. */\n const named =\n typeof module === \"object\" && module !== null && \"change\" in module\n ? module.change\n : undefined;\n const exported =\n named ??\n (typeof module === \"object\" && module !== null && \"default\" in module\n ? module.default\n : undefined);\n const read: { exported: unknown; failure?: string } = { exported };\n\n return read;\n } catch (error) {\n const failed: { exported?: undefined; failure: string } = {\n failure: error instanceof Error ? error.message : String(error),\n };\n\n return failed;\n }\n};\n\nexport type LoadedEntries = {\n entries: LoadedEntry[];\n problems: string[];\n};\n\nconst ENTRY = /\\.[cm]?ts$/u;\n\nconst DECLARATION = /\\.d\\.[cm]?ts$/u;\n/** Where a build puts its declaration files. Which of them a package actually\n * publishes comes from its manifest; this is only where to look. */\nconst OUTPUT_DIRECTORIES = [\"dist\", \"build\", \"lib\", \"types\", \"out\"];\n\n/** The newest thing under a directory, by modification time. */\nconst newestUnder = async (root: string): Promise<number> => {\n const found = await readdir(root, { withFileTypes: true }).catch(() => []);\n const times = await Promise.all(\n found.map(async (entry) => {\n const path = join(root, entry.name);\n if (entry.isDirectory()) return newestUnder(path);\n\n return stat(path).then(\n (stats) => stats.mtimeMs,\n () => 0,\n );\n }),\n );\n\n return Math.max(0, ...times);\n};\n\n/**\n * Whether the build is older than the source it was built from.\n *\n * The gate compares what is on disk against what was published, so a `dist`\n * from yesterday reports yesterday's package. It cost an afternoon once: six\n * exports reported as withdrawn from a package that had withdrawn nothing,\n * because the build predated the source by a day.\n *\n * A warning rather than a failure -- a fresh checkout has every file at the\n * same moment, and the publish path builds first anyway.\n */\nexport const buildIsStale = async (packageRoot: string) => {\n const [source, built] = await Promise.all([\n newestUnder(join(packageRoot, \"src\")),\n Promise.all(\n OUTPUT_DIRECTORIES.map((directory) =>\n newestUnder(join(packageRoot, directory)),\n ),\n ).then((times) => Math.max(0, ...times)),\n ]);\n\n return source > 0 && built > 0 && source > built;\n};\n\n/**\n * The public surface a build produced, read the way a consumer would.\n *\n * From the entry points the manifest declares, following the export graph --\n * not by heaping every declaration file together, which counts names no\n * consumer can import and cannot see one being withdrawn.\n *\n * Nothing when the manifest's entry points are not on disk: that is a package\n * about to publish types it has not built, and passing it would be the gate\n * going quiet at the worst possible moment.\n */\nexport const builtSurface = async (packageRoot: string) => {\n const manifest = await readJsonFile(join(packageRoot, \"package.json\"));\n const files = new Map<string, string>();\n const walk = async (directory: string): Promise<void> => {\n const found = await readdir(join(packageRoot, directory), {\n withFileTypes: true,\n }).catch(() => []);\n await Promise.all(\n found.map(async (entry) => {\n const relative = `${directory}/${entry.name}`;\n if (entry.isDirectory()) return walk(relative);\n if (!DECLARATION.test(entry.name)) return undefined;\n files.set(\n relative,\n await readFile(join(packageRoot, relative), \"utf8\").catch(() => \"\"),\n );\n\n return undefined;\n }),\n );\n };\n await Promise.all(OUTPUT_DIRECTORIES.map((directory) => walk(directory)));\n const entries = typeEntriesOf(manifest, files);\n\n return entries.length === 0 ? undefined : surfaceOfFiles(files, entries);\n};\n\nexport const changelogPaths = (packageRoot: string) => ({\n history: join(packageRoot, \"changelog\", \"history.md\"),\n json: join(packageRoot, CHANGELOG_FILE),\n markdown: join(packageRoot, CHANGELOG_MARKDOWN),\n unreleased: join(packageRoot, UNRELEASED_DIRECTORY),\n});\n/** Every pending entry, in a stable order so a release reads the same twice. */\nexport const loadUnreleased = async (packageRoot: string) => {\n const directory = join(packageRoot, UNRELEASED_DIRECTORY);\n const names = await readdir(directory).catch(() => []);\n const entries: LoadedEntry[] = [];\n const problems: string[] = [];\n for (const name of names.filter((file) => ENTRY.test(file)).sort()) {\n const file = join(UNRELEASED_DIRECTORY, name);\n // Serial on purpose: the count is small and the failure messages read\n // in file order.\n // eslint-disable-next-line no-await-in-loop\n const loaded = await loadEntry(join(directory, name));\n if (loaded.failure !== undefined)\n problems.push(`${file}: ${loaded.failure}`);\n const checked =\n loaded.failure === undefined\n ? validateChange(loaded.exported, file)\n : undefined;\n if (checked?.problems) problems.push(...checked.problems);\n if (checked?.change !== undefined)\n entries.push({ change: checked.change, file });\n }\n\n return { entries, problems };\n};\nexport const readJsonFile = async (path: string) => {\n const source = await readFile(path, \"utf8\").catch(() => undefined);\n if (source === undefined) return undefined;\n try {\n const document: unknown = JSON.parse(source);\n\n return document;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Anything in the entry directory that is not an entry.\n *\n * A `.md` note dropped in here, or a `.txt` somebody meant as a placeholder,\n * is read by nothing and consumed by nothing -- it sits there through every\n * release looking like a change that was recorded.\n */\nexport const strayEntries = async (packageRoot: string) => {\n const names = await readdir(join(packageRoot, UNRELEASED_DIRECTORY)).catch(\n () => [],\n );\n\n return names.filter(\n (name) => !ENTRY.test(name) && name !== \".gitkeep\" && !name.startsWith(\".\"),\n );\n};\n",
9
9
  "import { isDisruptive, type Change } from \"./types\";\n\n/*\n * Which version a set of changes adds up to.\n *\n * Written out rather than pulled in, for the same reason the rest of this\n * package has no dependencies: forty lines of arithmetic is not worth a\n * supply chain, and every consumer of a changelog -- a CLI, an editor, a\n * control plane deciding what to offer -- needs the comparison as much as the\n * bumping.\n *\n * The rules that are not the textbook ones are the two that match how these\n * packages are actually versioned:\n *\n * - Below 1.0.0 a breaking change moves the minor. The major is reserved\n * for the release that means it, and `0.x` is the place the ecosystem\n * lives.\n * - A version already on a prerelease line moves along that line by\n * default, whatever the changes are. Somebody publishing `beta.88` is not\n * asking to be moved to `1.0.0` because they fixed a bug.\n */\n\nexport type ReleaseKind = \"major\" | \"minor\" | \"patch\" | \"prerelease\";\n\ntype Parsed = {\n prerelease: string[];\n release: [number, number, number];\n};\n\n/** What a comparator returns: the left one is older, or it is newer. */\nconst OLDER = -1;\n/** The last element, and everything but it. */\nconst LAST = -1;\nconst NEWER = 1;\n\nconst VERSION =\n /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/u;\n\nexport const parseVersion = (version: string) => {\n const found = VERSION.exec(version.trim());\n if (!found) return undefined;\n const [, major, minor, patch, prerelease] = found;\n\n return {\n prerelease: prerelease === undefined ? [] : prerelease.split(\".\"),\n release: [Number(major), Number(minor), Number(patch)],\n } satisfies Parsed;\n};\n\nconst isNumeric = (value: string) => /^\\d+$/u.test(value);\n\nconst comparePrerelease = (left: string[], right: string[]) => {\n // A release outranks any prerelease of the same numbers.\n if (left.length === 0 || right.length === 0)\n return right.length - left.length;\n for (const [index, mine] of left.entries()) {\n const theirs = right[index];\n if (theirs === undefined) return NEWER;\n if (mine === theirs) continue;\n if (isNumeric(mine) && isNumeric(theirs))\n return Number(mine) - Number(theirs);\n // Numeric identifiers rank below alphanumeric ones.\n if (isNumeric(mine)) return OLDER;\n if (isNumeric(theirs)) return NEWER;\n\n return mine < theirs ? OLDER : NEWER;\n }\n\n return left.length - right.length;\n};\n\n/** Semver order. Negative when the left version is the older one. */\nexport const compareVersions = (left: string, right: string) => {\n const mine = parseVersion(left);\n const theirs = parseVersion(right);\n if (!mine || !theirs) return 0;\n for (const [index, part] of mine.release.entries()) {\n const other = theirs.release[index] ?? 0;\n if (part !== other) return part - other;\n }\n\n return comparePrerelease(mine.prerelease, theirs.prerelease);\n};\n\nexport const isPrerelease = (version: string) =>\n (parseVersion(version)?.prerelease.length ?? 0) > 0;\n\n/** The largest step any of these changes asks for. */\nexport const releaseKindFor = (changes: readonly Change[]) => {\n if (changes.some(isDisruptive)) {\n const major: ReleaseKind = \"major\";\n\n return major;\n }\n const asked: ReleaseKind = changes.some((entry) => entry.kind === \"added\")\n ? \"minor\"\n : \"patch\";\n\n return asked;\n};\n\nconst bumpPrerelease = (parsed: Parsed) => {\n const { prerelease, release } = parsed;\n const last = prerelease.at(LAST);\n const counted =\n last !== undefined && isNumeric(last)\n ? [...prerelease.slice(0, LAST), String(Number(last) + 1)]\n : [...prerelease, \"1\"];\n\n return `${release.join(\".\")}-${counted.join(\".\")}`;\n};\n\n/**\n * The version these changes make of this one.\n *\n * `asked` overrides the changes: a release that means to leave a prerelease\n * line, or to cut the major it has been putting off, says so rather than\n * being inferred into it.\n */\nexport const nextVersion = (input: {\n asked?: ReleaseKind;\n changes: readonly Change[];\n current: string;\n /** The identifier a first prerelease uses: `beta` gives `1.0.0-beta.1`. */\n prereleaseIdentifier?: string;\n}) => {\n const parsed = parseVersion(input.current);\n if (!parsed) return undefined;\n const [major, minor, patch] = parsed.release;\n /* A prerelease line moves along itself unless told otherwise -- including\n * for a breaking change, which is what a prerelease line is for. */\n const kind =\n input.asked ??\n (parsed.prerelease.length > 0\n ? \"prerelease\"\n : releaseKindFor(input.changes));\n if (kind === \"prerelease\")\n return parsed.prerelease.length > 0\n ? bumpPrerelease(parsed)\n : `${major}.${minor}.${patch + 1}-${\n input.prereleaseIdentifier ?? \"beta\"\n }.1`;\n /* Leaving a prerelease line for the release it was leading up to: the\n * numbers are already right, the suffix is what goes. */\n if (parsed.prerelease.length > 0 && kind === \"patch\")\n return `${major}.${minor}.${patch}`;\n /* Below 1.0.0 the major is reserved for the release that means it, so a\n * breaking change moves the minor instead. */\n if (kind === \"major\")\n return major === 0 ? `${major}.${minor + 1}.0` : `${major + 1}.0.0`;\n\n return kind === \"minor\"\n ? `${major}.${minor + 1}.0`\n : `${major}.${minor}.${patch + 1}`;\n};\n",
10
10
  "import {\n CHANGELOG_CONTRACT,\n CHANGE_KINDS,\n isDisruptive,\n isMechanical,\n type Change,\n type ChangeKind,\n type Changelog,\n type DisruptiveChange,\n type Migration,\n type NonEmpty,\n type Release,\n} from \"./types\";\nimport { compareVersions, parseVersion } from \"./versioning\";\n\n/*\n * Reading a changelog somebody else wrote.\n *\n * The document arrives from a registry, which means it arrives from the\n * internet: nothing here trusts a field until it has looked at it, and a\n * document that is wrong is refused with the reasons rather than half-read\n * into a shape the rest of the program will misuse. That matters more than it\n * usually would, because the thing on the other end of this is a program\n * deciding whether an upgrade is safe -- a changelog that parses loosely is\n * how \"no breaking changes\" gets said about a release that had them.\n *\n * Every query below answers oldest-first. An upgrade is walked forwards: the\n * changes are read in the order they happened and the migrations are applied\n * in that order, because two of them may touch the same name.\n */\n\ntype Problem = string;\n\nconst isKind = (value: unknown): value is ChangeKind =>\n typeof value === \"string\" && CHANGE_KINDS.some((known) => known === value);\n\n/** Narrowing that keeps the ordinary branch's `kind` out of the disruptive\n * union without an assertion. */\nconst isDisruptiveKind = (kind: ChangeKind): kind is \"breaking\" | \"removed\" =>\n kind === \"breaking\" || kind === \"removed\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isText = (value: unknown): value is string =>\n typeof value === \"string\" && value.trim().length > 0;\n\n/** A list of names, or nothing -- and `nothing` is reported rather than\n * quietly dropped. An entry whose `symbols` is `[123, \"serve\"]` used to be\n * accepted with no symbols at all, so a consumer asking \"does this release\n * touch me?\" was told no about a change that named `serve`. */\nconst textList = (value: unknown, where: string, problems: Problem[]) => {\n if (value === undefined) return undefined;\n if (Array.isArray(value) && value.length > 0 && value.every(isText))\n return value.filter((entry) => typeof entry === \"string\");\n problems.push(`${where}: symbols is not a list of names`);\n\n return undefined;\n};\n\nconst readMigration = (value: unknown, where: string, problems: Problem[]) => {\n if (!isRecord(value) || !isText(value.instruction)) {\n problems.push(`${where}: migration needs an instruction`);\n\n return undefined;\n }\n const { instruction } = value;\n const { rename } = value;\n if (isRecord(rename) && isText(rename.from) && isText(rename.to))\n return {\n instruction,\n rename: { from: rename.from, to: rename.to },\n } satisfies Migration;\n const { moved } = value;\n if (\n isRecord(moved) &&\n isText(moved.symbol) &&\n isText(moved.from) &&\n isText(moved.to)\n )\n return {\n instruction,\n moved: { from: moved.from, symbol: moved.symbol, to: moved.to },\n } satisfies Migration;\n const { resubpath } = value;\n if (isRecord(resubpath) && isText(resubpath.from) && isText(resubpath.to))\n return {\n instruction,\n resubpath: { from: resubpath.from, to: resubpath.to },\n } satisfies Migration;\n if (value.manual === true) return { instruction, manual: true } as const;\n problems.push(\n `${where}: migration says neither rename, moved, resubpath nor manual`,\n );\n\n return undefined;\n};\n\nconst readChange = (value: unknown, where: string, problems: Problem[]) => {\n if (!isRecord(value)) {\n problems.push(`${where}: not an object`);\n\n return undefined;\n }\n const { kind } = value;\n if (!isKind(kind)) {\n problems.push(`${where}: unknown kind ${JSON.stringify(kind)}`);\n\n return undefined;\n }\n if (!isText(value.summary)) {\n problems.push(`${where}: needs a summary`);\n\n return undefined;\n }\n const shared: Pick<Change, \"detail\" | \"reference\" | \"summary\"> = {\n ...(isText(value.detail) ? { detail: value.detail } : {}),\n ...(isText(value.reference) ? { reference: value.reference } : {}),\n summary: value.summary,\n };\n const symbols = textList(value.symbols, where, problems);\n const [first, ...rest] = symbols ?? [];\n /* The rule the whole document exists to enforce: a change that costs a\n * consumer work says which exports it costs them and what to do. */\n if (kind === \"breaking\" || kind === \"removed\") {\n const migration = readMigration(value.migration, where, problems);\n if (first === undefined)\n problems.push(`${where}: a ${kind} change must name symbols`);\n if (!migration || first === undefined) return undefined;\n const named: NonEmpty<string> = [first, ...rest];\n const disruptive: Change = {\n ...shared,\n kind,\n migration,\n symbols: named,\n };\n\n return disruptive;\n }\n if (isDisruptiveKind(kind)) return undefined;\n const ordinary: Change = {\n ...shared,\n kind,\n ...(symbols ? { symbols } : {}),\n };\n\n return ordinary;\n};\n\nconst readRelease = (value: unknown, where: string, problems: Problem[]) => {\n if (!isRecord(value)) {\n problems.push(`${where}: not an object`);\n\n return undefined;\n }\n const version = isText(value.version) ? value.version.trim() : undefined;\n /* Trimmed where it is read as well as where it is parsed: `\" 1.0.0 \"`\n * parsed fine, was stored with its spaces, and then failed a string\n * comparison against the manifest's version for a reason nobody could\n * see. */\n if (version === undefined || parseVersion(version) === undefined) {\n problems.push(`${where}: version is not a version`);\n\n return undefined;\n }\n if (!isText(value.date)) {\n problems.push(`${where}: needs a date`);\n\n return undefined;\n }\n const raw = value.changes;\n if (!Array.isArray(raw) || raw.length === 0) {\n problems.push(`${where}: a release with no changes is not a release`);\n\n return undefined;\n }\n const changes = raw\n .map((entry, index) =>\n readChange(entry, `${where}.changes[${index}]`, problems),\n )\n .filter((entry): entry is Change => entry !== undefined);\n if (changes.length !== raw.length) return undefined;\n\n const [head, ...tail] = changes;\n if (head === undefined) return undefined;\n const release: Release = {\n changes: [head, ...tail],\n date: value.date,\n ...(isText(value.note) ? { note: value.note } : {}),\n version,\n };\n\n return release;\n};\n\n/**\n * Read one entry on its own, the way the authoring files are checked.\n *\n * The compiler already refused the shapes it can see; this is for the moment\n * the file is read back as data, where a `kind` typed into a string and a\n * migration deleted in a merge are both still possible.\n */\nexport const validateChange = (value: unknown, where = \"entry\") => {\n const problems: Problem[] = [];\n const change = readChange(value, where, problems);\n\n if (change === undefined) {\n const failed: { change?: undefined; problems: Problem[] } = { problems };\n\n return failed;\n }\n const read: { change: Change; problems?: undefined } = { change };\n\n return read;\n};\n\nexport type ChangelogRead =\n | { changelog: Changelog; problems?: undefined }\n | { changelog?: undefined; problems: Problem[] };\n\n/**\n * Read a changelog document, or say why it is not one.\n *\n * A later contract is refused rather than read: a reader written today cannot\n * know what a field added tomorrow means, and guessing is how a document that\n * grew a \"this one is worse than it looks\" flag gets summarised without it.\n */\nexport const parseChangelog = (value: unknown): ChangelogRead => {\n const problems: Problem[] = [];\n if (!isRecord(value)) return { problems: [\"not an object\"] };\n if (!isText(value.name)) problems.push(\"needs a package name\");\n /* A document from an older contract is one this reader was written after\n * and still understands. A newer one is not: a field added tomorrow could\n * be the one that says \"this release is worse than it looks\", and a reader\n * that skips it summarises the release without it. */\n if (\n !Number.isInteger(value.contract) ||\n Number(value.contract) > CHANGELOG_CONTRACT\n )\n problems.push(\n `contract ${JSON.stringify(value.contract)} is newer than ${CHANGELOG_CONTRACT}, which this reader understands`,\n );\n const raw = value.releases;\n if (!Array.isArray(raw)) problems.push(\"releases is not a list\");\n const releases = (Array.isArray(raw) ? raw : [])\n .map((entry, index) => readRelease(entry, `releases[${index}]`, problems))\n .filter((entry) => entry !== undefined);\n if (problems.length > 0) return { problems };\n\n return {\n changelog: {\n contract: CHANGELOG_CONTRACT,\n name: String(value.name),\n // Newest first is how it is read; the queries below reverse it.\n releases: [...releases].sort((left, right) =>\n compareVersions(right.version, left.version),\n ),\n },\n };\n};\n\n/** The releases strictly after `from` and up to and including `to`, oldest\n * first -- the order an upgrade happens in. */\nexport const releasesBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n [...changelog.releases]\n .filter(\n (release) =>\n compareVersions(release.version, from) > 0 &&\n compareVersions(release.version, upto) <= 0,\n )\n .sort((left, right) => compareVersions(left.version, right.version));\n\nexport type ChangeAt = { change: Change; version: string };\n\nexport const changesBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n releasesBetween(changelog, from, upto).flatMap((release) =>\n release.changes.map((change) => {\n const found: ChangeAt = { change, version: release.version };\n\n return found;\n }),\n );\n\nexport type DisruptiveAt = { change: DisruptiveChange; version: string };\n\nconst isDisruptiveAt = (found: ChangeAt): found is DisruptiveAt =>\n isDisruptive(found.change);\n\n/** Only the ones that cost a consumer work. */\nexport const disruptiveBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) => changesBetween(changelog, from, upto).filter(isDisruptiveAt);\n\nexport type MigrationAt = {\n migration: Migration;\n symbols: readonly string[];\n version: string;\n};\n\n/** The ones that can be applied rather than read. */\nexport const mechanicalMigrations = (migrations: readonly MigrationAt[]) =>\n migrations.filter((found) => isMechanical(found.migration));\n/**\n * The migrations an upgrade needs, in the order they happened.\n *\n * Order is not a nicety: a symbol renamed in one release and moved in the next\n * has to be renamed first, or the move looks for a name that is no longer\n * there.\n */\nexport const migrationsBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n disruptiveBetween(changelog, from, upto).map(({ change, version }) => {\n const found: MigrationAt = {\n migration: change.migration,\n symbols: change.symbols,\n version,\n };\n\n return found;\n });\n/** Every export named by a disruptive change in the window. */\nexport const symbolsDisturbedBetween = (\n changelog: Changelog,\n from: string,\n upto: string,\n) =>\n new Set(\n disruptiveBetween(changelog, from, upto).flatMap(\n ({ change }) => change.symbols,\n ),\n );\n",
11
11
  "import path from \"node:path\";\nimport ts from \"typescript\";\nimport { asText, readTar } from \"./tarball\";\n\n/*\n * What a package promises, and what moved between two versions of it.\n *\n * This exists to check a changelog against reality. An entry says a release\n * broke `serve`; the types say what the release actually did to `serve`, and\n * to the nine other exports nobody wrote an entry for.\n *\n * Two things about how it reads them are load-bearing, and the first version\n * of this file got both wrong.\n *\n * **It follows the entry points.** The promise a package makes is what you can\n * import from it, not every name declared somewhere under `dist`. Reading the\n * declaration files as a heap made the two differ by a factor of three on a\n * real package -- 1,103 names tracked against 377 actually exported -- and,\n * far worse, made the most ordinary breaking change of all invisible:\n * withdrawing a name from the entry point while its module file stays where it\n * was. So the surface is built by walking the export graph from the entry\n * points the manifest declares, the way a consumer's compiler does.\n *\n * **It parses.** A `.d.ts` read with regular expressions cannot tell a\n * declaration from a sentence about one: the phrase \"reads as\n * `export { syncSocket }` in one version\", written in a comment in this very\n * package, became an export in its published surface -- and, because two files\n * then claimed the same name, made this package's own release gate fail two\n * runs in three. Comments are not nodes. Parsing ends the whole class.\n */\n\n/** One exported name: what it is declared as, and which entry points of the\n * package offer it. */\nexport type SurfaceName = {\n declaration: string;\n /** Import specifiers, so `@absolutejs/auth` and `@absolutejs/auth/server`\n * are the two different promises they are. */\n entries: string[];\n};\n\nexport type PackageSurface = Map<string, SurfaceName>;\n\n/** An entry point, as a file inside the package and as the specifier somebody\n * writes to import from it. */\nexport type TypeEntry = { path: string; specifier: string };\n\n/** What one declaration file exports: a name, and the text it stands for.\n * A module's own view, before the entry points are merged into a surface. */\ntype ModuleExports = Map<string, string>;\n\n/** Declaration files, in every spelling a build might emit. */\nconst DECLARATION = /\\.d\\.[cm]?ts$/u;\n\nconst parse = (source: string, name: string) =>\n ts.createSourceFile(\n name,\n source,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\nconst normalize = (text: string) => text.replace(/\\s+/gu, \" \").trim();\n\n/**\n * Where a relative specifier lands among a package's files.\n *\n * A declaration file names its neighbours the way source does -- `./read` --\n * and the file is `read.d.ts`, or `read/index.d.ts`, or the `.mts` spelling of\n * either.\n */\nconst resolveFrom = (\n files: ReadonlyMap<string, string>,\n from: string,\n specifier: string,\n) => {\n if (!specifier.startsWith(\".\")) return undefined;\n const base = path.posix.join(path.posix.dirname(from), specifier);\n const candidates = [\n base,\n `${base.replace(/\\.js$/u, \"\")}.d.ts`,\n `${base.replace(/\\.js$/u, \"\")}.d.mts`,\n `${base.replace(/\\.js$/u, \"\")}.d.cts`,\n `${base}/index.d.ts`,\n `${base}/index.d.mts`,\n `${base}/index.d.cts`,\n ];\n\n return candidates.find((candidate) => files.has(candidate));\n};\n\nconst declaredNameOf = (statement: ts.Statement) => {\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEnumDeclaration(statement) ||\n ts.isModuleDeclaration(statement)\n )\n return statement.name !== undefined && ts.isIdentifier(statement.name)\n ? statement.name.text\n : undefined;\n\n return undefined;\n};\n\nconst isExported = (statement: ts.Statement) =>\n ts.canHaveModifiers(statement) &&\n ts\n .getModifiers(statement)\n ?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ===\n true;\n\nconst variableNamesOf = (statement: ts.VariableStatement) =>\n statement.declarationList.declarations\n .map((declaration) => declaration.name)\n .filter((name) => ts.isIdentifier(name))\n .map((name) => name.text);\n\n/** Everything a module declares, exported or not, so `export { a }` can find\n * what `a` is. */\nconst declarationsIn = (file: ts.SourceFile) => {\n const found = new Map<string, string>();\n for (const statement of file.statements) {\n const text = normalize(statement.getText(file));\n const named = declaredNameOf(statement);\n if (named !== undefined) found.set(named, text);\n if (!ts.isVariableStatement(statement)) continue;\n for (const name of variableNamesOf(statement)) found.set(name, text);\n }\n\n return found;\n};\n\n/** Whether a manifest claims to ship types at all. A package that ships none\n * has no promise of this kind to check; one that claims some and has none is\n * a package about to publish types it did not build. */\nexport const declaresTypes = (manifest: unknown) => {\n if (typeof manifest !== \"object\" || manifest === null) return false;\n const record = new Map(Object.entries(manifest));\n if (typeof record.get(\"types\") === \"string\") return true;\n if (typeof record.get(\"typings\") === \"string\") return true;\n\n return JSON.stringify(record.get(\"exports\") ?? {}).includes('\"types\"');\n};\n\n/** What one statement of a declaration file contributes to its module's\n * exports. Split out so the walk over a file is one loop rather than three\n * levels of them. */\nconst contributionOf = (input: {\n file: ts.SourceFile;\n files: ReadonlyMap<string, string>;\n from: string;\n local: ReadonlyMap<string, string>;\n seen: ReadonlySet<string>;\n statement: ts.Statement;\n}) => {\n const { file, files, from, local, seen, statement } = input;\n const nothing: ReadonlyArray<readonly [string, string]> = [];\n // `export default x` and `export = x`.\n if (ts.isExportAssignment(statement))\n return [\n [\n statement.isExportEquals === true ? \"export=\" : \"default\",\n normalize(statement.getText(file)),\n ] as const,\n ];\n const named = declaredNameOf(statement);\n if (named !== undefined && isExported(statement))\n return [\n [named, local.get(named) ?? normalize(statement.getText(file))] as const,\n ];\n if (ts.isVariableStatement(statement) && isExported(statement)) {\n const text = normalize(statement.getText(file));\n\n return variableNamesOf(statement).map((name) => [name, text] as const);\n }\n if (!ts.isExportDeclaration(statement)) return nothing;\n const specifier =\n statement.moduleSpecifier !== undefined &&\n ts.isStringLiteral(statement.moduleSpecifier)\n ? statement.moduleSpecifier.text\n : undefined;\n const target =\n specifier === undefined ? undefined : resolveFrom(files, from, specifier);\n /* A re-export of a package we do not have the files for -- a dependency --\n * contributes names we cannot describe. They are still exports, so they are\n * recorded as such rather than dropped. */\n const theirs =\n target === undefined\n ? new Map<string, string>()\n : exportsOf(files, target, new Set(seen));\n const clause = statement.exportClause;\n // `export * from './m'` -- everything but the default.\n if (clause === undefined)\n return [...theirs].filter(\n ([name]) => name !== \"default\" && name !== \"export=\",\n );\n if (ts.isNamespaceExport(clause))\n return [[clause.name.text, `export * as ${clause.name.text}`] as const];\n\n return clause.elements.map((element) => {\n const sourceName = (element.propertyName ?? element.name).text;\n const text =\n (specifier === undefined\n ? local.get(sourceName)\n : theirs.get(sourceName)) ?? `export { ${sourceName} }`;\n\n return [element.name.text, text] as const;\n });\n};\n\n/**\n * The names a module exports, following re-exports to where they are declared.\n *\n * `seen` is the cycle guard: a package whose entry point re-exports a module\n * that re-exports the entry point is unusual and not impossible, and reading\n * it must terminate.\n */\nconst exportsOf = (\n files: ReadonlyMap<string, string>,\n from: string,\n seen: Set<string>,\n) => {\n const surface: ModuleExports = new Map();\n const source = files.get(from);\n if (source === undefined || seen.has(from)) return surface;\n seen.add(from);\n const file = parse(source, from);\n const local = declarationsIn(file);\n const contributed = file.statements.flatMap((statement) =>\n contributionOf({ file, files, from, local, seen, statement }),\n );\n for (const [name, text] of contributed) surface.set(name, text);\n\n return surface;\n};\n\n/** The surface of a package tarball, already gunzipped. */\nexport const surfaceOfArchive = (archive: Uint8Array) => {\n const held = readTar(\n archive,\n (name) => DECLARATION.test(name) || name === \"package.json\",\n );\n const files = new Map(\n [...held].map(([name, bytes]) => [name, asText(bytes)] as const),\n );\n const manifest = files.get(\"package.json\");\n let parsed: unknown;\n try {\n parsed = manifest === undefined ? undefined : JSON.parse(manifest);\n } catch {\n parsed = undefined;\n }\n const entries = typeEntriesOf(parsed, files);\n\n return entries.length === 0 ? undefined : surfaceOfFiles(files, entries);\n};\n\n/**\n * The public surface of a package: what its entry points export, and what\n * each of those names is declared as.\n */\nexport const surfaceOfFiles = (\n files: ReadonlyMap<string, string>,\n entries: readonly TypeEntry[],\n) => {\n const surface: PackageSurface = new Map();\n /* A name offered by two entry points is one name with two ways in. The\n * declaration is whichever was read first -- they agree in every case that\n * is not already a bug in the package -- and both specifiers are kept,\n * because losing one of them is a break for everybody importing through\n * it. */\n const offered = entries.flatMap((entry) =>\n [...exportsOf(files, entry.path, new Set())].map(\n ([name, declaration]) =>\n ({ declaration, name, specifier: entry.specifier }) as const,\n ),\n );\n for (const { declaration, name, specifier } of offered) {\n const known = surface.get(name);\n if (known === undefined)\n surface.set(name, { declaration, entries: [specifier] });\n else if (!known.entries.includes(specifier)) known.entries.push(specifier);\n }\n for (const value of surface.values()) value.entries.sort();\n\n return surface;\n};\n\n/**\n * Every candidate declaration file in an exports map, paired with the\n * specifier it would be imported by.\n *\n * The subpath matters: an export that leaves `@pkg` and stays on\n * `@pkg/server` is gone for everybody importing it from the root, and a\n * surface that knows only names cannot see that at all.\n */\nconst exportEntries = (\n value: unknown,\n packageName: string,\n specifier?: string,\n): Array<{ specifier: string; value: unknown }> => {\n const here = specifier ?? packageName;\n if (typeof value === \"string\") return [{ specifier: here, value }];\n if (typeof value !== \"object\" || value === null) return [];\n\n return Object.entries(value).flatMap(([key, nested]) =>\n key.startsWith(\".\")\n ? exportEntries(\n nested,\n packageName,\n key === \".\" ? packageName : `${packageName}${key.slice(1)}`,\n )\n : exportEntries(nested, packageName, here),\n );\n};\n\n/** The declaration files a manifest points at, with the specifier each one is\n * imported by. */\nexport const typeEntriesOf = (\n manifest: unknown,\n files: ReadonlyMap<string, string>,\n) => {\n const record =\n typeof manifest === \"object\" && manifest !== null\n ? new Map(Object.entries(manifest))\n : new Map<string, unknown>();\n const named = record.get(\"name\");\n const packageName = typeof named === \"string\" ? named : \"\";\n const resolved = (value: unknown, specifier: string) => {\n if (typeof value !== \"string\") return [];\n const cleaned = value.replace(/^\\.\\//u, \"\");\n const candidates = DECLARATION.test(cleaned)\n ? [cleaned]\n : [\n cleaned.replace(/\\.[cm]?js$/u, \".d.ts\"),\n cleaned.replace(/\\.[cm]?js$/u, \".d.mts\"),\n cleaned.replace(/\\.[cm]?js$/u, \".d.cts\"),\n ];\n\n return candidates\n .filter((candidate) => files.has(candidate))\n .map((resolvedPath) => ({ path: resolvedPath, specifier }));\n };\n const found = [\n ...resolved(record.get(\"types\"), packageName),\n ...resolved(record.get(\"typings\"), packageName),\n ...exportEntries(record.get(\"exports\"), packageName).flatMap((entry) =>\n resolved(entry.value, entry.specifier),\n ),\n ];\n /* Nothing declared, or nothing that resolved. `dist/index.d.ts` is where\n * every package in this ecosystem puts it; a package that declares types\n * and has none is one the gate refuses rather than passes. */\n const fallback =\n found.length === 0 && files.has(\"dist/index.d.ts\")\n ? [{ path: \"dist/index.d.ts\", specifier: packageName }]\n : [];\n const seen = new Set<string>();\n\n return [...found, ...fallback].filter((entry) => {\n const key = `${entry.specifier}\\u0000${entry.path}`;\n if (seen.has(key)) return false;\n seen.add(key);\n\n return true;\n });\n};\n\n/*\n * How much of a change a change is.\n *\n * Two declarations differing is not the same as a caller having to do\n * anything. Generated types carry inference all the way down, so a version\n * bump can move the innards of a return type -- `store: {}` becoming\n * `store: {} | {}` -- while everything anybody wrote at the call site is\n * exactly as valid as it was.\n *\n * This is information, not a filter, and the difference matters. The release\n * gate reports every change and lets the shape describe it, because the person\n * who made the change knows what they did and writing one line is cheap. A\n * consumer's upgrade advisor leans on the shape to sort sixty inference\n * wobbles behind the two things that will actually break them. Using it as a\n * filter in both places is how a constructor gaining a required argument went\n * unreported.\n */\nconst SHAPE = {\n members: \"members\",\n parameters: \"parameters\",\n types: \"types\",\n unknown: \"unknown\",\n} as const;\n\nexport type ChangeShape = (typeof SHAPE)[keyof typeof SHAPE];\n\n/** A name a file only passes along: it says the export exists and nothing\n * about what it is. */\nconst isStub = (declaration: string) => declaration.startsWith(\"export {\");\n\nconst signatureOf = (declaration: string) => {\n const file = parse(`${declaration}\\n`, \"declaration.d.ts\");\n const [statement] = file.statements;\n if (statement === undefined) return undefined;\n\n return statement;\n};\n\n/** What a caller passes, as text, for every declaration that takes anything. */\nconst parametersOf = (declaration: string) => {\n const statement = signatureOf(declaration);\n if (statement === undefined) return \"\";\n const found: string[] = [];\n const visit = (node: ts.Node) => {\n if (\n ts.isFunctionTypeNode(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isMethodSignature(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isConstructSignatureDeclaration(node) ||\n ts.isConstructorDeclaration(node)\n )\n found.push(\n node.parameters\n .map((parameter) => normalize(parameter.getText()))\n .join(\", \"),\n );\n ts.forEachChild(node, visit);\n };\n visit(statement);\n\n return found.join(\" | \");\n};\n\n/** What a caller reaches for. */\nconst membersOf = (declaration: string) => {\n const statement = signatureOf(declaration);\n const members = new Set<string>();\n if (statement === undefined) return members;\n const visit = (node: ts.Node) => {\n if (\n (ts.isPropertySignature(node) ||\n ts.isMethodSignature(node) ||\n ts.isPropertyDeclaration(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isEnumMember(node)) &&\n node.name !== undefined &&\n (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name))\n )\n members.add(node.name.text);\n ts.forEachChild(node, visit);\n };\n visit(statement);\n\n return members;\n};\n\nconst sameNames = (left: ReadonlySet<string>, right: ReadonlySet<string>) =>\n left.size === right.size && [...left].every((name) => right.has(name));\n\nexport const changeShape = (change: { after: string; before: string }) => {\n /* One side is a re-export and the other is the declaration behind it. That\n * is this reader finding the name in a different file, not the package\n * changing anything. */\n if (isStub(change.before) !== isStub(change.after)) return SHAPE.unknown;\n if (parametersOf(change.before) !== parametersOf(change.after))\n return SHAPE.parameters;\n if (!sameNames(membersOf(change.before), membersOf(change.after)))\n return SHAPE.members;\n\n return SHAPE.types;\n};\n\nexport type SurfaceChange = {\n after: string;\n before: string;\n name: string;\n shape: ChangeShape;\n};\n\n/** A name that is still exported, but not from every entry point it was. */\nexport type Withdrawal = { from: string[]; name: string };\n\nexport type SurfaceDiff = {\n added: string[];\n changed: SurfaceChange[];\n removed: string[];\n withdrawn: Withdrawal[];\n};\n\n/**\n * What moved between two surfaces.\n *\n * Removed is the one that breaks a build outright. Changed is the one that\n * may: a widened parameter is not a break and a narrowed one is, and telling\n * them apart is a job for whoever reads the two declarations -- so both are\n * carried rather than judged here.\n */\nexport const diffSurface = (\n before: PackageSurface,\n after: PackageSurface,\n): SurfaceDiff => {\n const removed: string[] = [];\n const withdrawn: Withdrawal[] = [];\n const changed: SurfaceChange[] = [];\n for (const [name, was] of before) {\n const now = after.get(name);\n if (now === undefined) removed.push(name);\n if (now === undefined) continue;\n /* Still exported, and not from everywhere it was. An export that leaves\n * `@pkg` and stays on `@pkg/server` is gone for everybody importing it\n * from the root -- which a surface keyed only by name cannot see, and\n * which this package has a migration kind for. */\n const lost = was.entries.filter((entry) => !now.entries.includes(entry));\n if (lost.length > 0) withdrawn.push({ from: lost, name });\n if (now.declaration !== was.declaration)\n changed.push({\n after: now.declaration,\n before: was.declaration,\n name,\n shape: changeShape({\n after: now.declaration,\n before: was.declaration,\n }),\n });\n }\n\n return {\n added: [...after.keys()].filter((name) => !before.has(name)),\n changed,\n removed,\n withdrawn,\n };\n};\n\n/**\n * The changes a consumer would notice, for an advisor deciding what to put in\n * front of somebody.\n *\n * Not for the gate: `types` changes are still changes, and the package that\n * made one is the party that can say in one line whether it matters.\n */\nexport const notable = (diff: SurfaceDiff) =>\n diff.changed.filter(\n (change) => change.shape === \"parameters\" || change.shape === \"members\",\n );\n",
@@ -14,7 +14,7 @@
14
14
  "import { gunzipSync } from \"node:zlib\";\nimport { parseChangelog } from \"./read\";\nimport { surfaceOfArchive } from \"./surface\";\nimport { asText, readTar } from \"./tarball\";\nimport { CHANGELOG_FILE } from \"./types\";\n\n/*\n * What the registry can tell us about a package.\n *\n * Two documents and no more: the abbreviated packument, which says which\n * versions exist and where their tarballs are, and the tarballs themselves,\n * which hold the types and the changelog.\n *\n * The abbreviated form is asked for by name. The full packument for a package\n * that publishes daily is tens of megabytes of README and maintainer history\n * for the two fields below.\n */\n\nconst ABBREVIATED = \"application/vnd.npm.install-v1+json\";\nconst DEFAULT_REGISTRY = \"https://registry.npmjs.org\";\nconst KIBIBYTE = 1024;\nconst MEBIBYTE = KIBIBYTE * KIBIBYTE;\n/** A published package past this is not one anybody is upgrading through a\n * changelog, and the bytes are a stranger's. */\nconst MAX_ARCHIVE_MEBIBYTES = 96;\nconst MAX_ARCHIVE_BYTES = MAX_ARCHIVE_MEBIBYTES * MEBIBYTE;\nconst MAX_DOWNLOAD_MEBIBYTES = 32;\nconst MAX_DOWNLOAD_BYTES = MAX_DOWNLOAD_MEBIBYTES * MEBIBYTE;\n/** Long enough for a slow registry, short enough that a hung connection does\n * not hold a release open. */\nexport type PackageVersions = {\n latest?: string;\n published: string[];\n tarballs: Record<string, string>;\n};\n\nconst TIMEOUT_MS = 20_000;\nconst NOT_FOUND = 404;\n\n/** The registry answered, and the answer is that this name has nothing on it\n * -- which a first release is, and an outage is not. */\nconst NOTHING_PUBLISHED: PackageVersions = { published: [], tarballs: {} };\n\n/** npm's own grammar, near enough: no path segments, no traversal. A name\n * from a customer's manifest reaches this, and `@scope/../../thing`\n * normalises to somebody else's package. */\nconst PACKAGE_NAME = /^(?:@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*$/u;\n\n/** npm's own limit. */\nconst MAX_NAME_LENGTH = 214;\n\nexport const isPackageName = (name: string) =>\n name.length <= MAX_NAME_LENGTH && PACKAGE_NAME.test(name);\n\nexport type RegistryOptions = {\n fetch?: typeof fetch;\n /** For a private registry, or a test. */\n registry?: string;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst readPackument = (body: unknown): PackageVersions | undefined => {\n if (!isRecord(body) || !isRecord(body.versions)) return undefined;\n const tarballs: Record<string, string> = {};\n for (const [version, entry] of Object.entries(body.versions)) {\n if (!isRecord(entry) || !isRecord(entry.dist)) continue;\n const { tarball } = entry.dist;\n if (typeof tarball === \"string\") tarballs[version] = tarball;\n }\n const tags = body[\"dist-tags\"];\n const latest = isRecord(tags) ? tags.latest : undefined;\n\n return {\n ...(typeof latest === \"string\" ? { latest } : {}),\n published: Object.keys(body.versions),\n tarballs,\n };\n};\n\n/** One version's tarball, gunzipped. */\n/**\n * One version's tarball, gunzipped.\n *\n * A failure is not remembered. Callers cache the promise this returns, and a\n * transient 503 stored as \"there is no archive\" sticks for the life of the\n * process -- the registry recovers and the answer does not.\n */\nexport const packageArchive = async (\n name: string,\n version: string,\n options: RegistryOptions = {},\n) => {\n const call = options.fetch ?? fetch;\n const versions = await packageVersions(name, options);\n const url = versions?.tarballs[version];\n if (url === undefined) return undefined;\n try {\n const response = await call(url, {\n signal: AbortSignal.timeout(TIMEOUT_MS),\n });\n if (!response.ok) return undefined;\n const compressed = new Uint8Array(await response.arrayBuffer());\n /* Both ends bounded. Half a megabyte of gzip expands to half a gigabyte\n * if you let it, and the thing doing the expanding here is a control\n * plane holding other people's secrets. */\n if (compressed.byteLength > MAX_DOWNLOAD_BYTES) return undefined;\n\n return new Uint8Array(\n gunzipSync(compressed, { maxOutputLength: MAX_ARCHIVE_BYTES }),\n );\n } catch {\n return undefined;\n }\n};\n/**\n * Every version published under a name, or nothing when the registry could not\n * say.\n *\n * Nothing is not an error to throw: a caller deciding what to offer somebody\n * can say \"we could not check\", and that is a better answer than a failed\n * page.\n */\nconst packuments = new Map<\n string,\n { asked: number; value: Promise<PackageVersions | undefined> }\n>();\n\n/** Long enough that a page asking about twenty packages asks once each, short\n * enough that a release published while somebody reads is offered to them. */\nconst SECONDS_PER_MINUTE = 60;\nconst MILLISECONDS_PER_SECOND = 1000;\nconst PACKUMENT_MINUTES = 5;\nconst PACKUMENT_TTL_MS =\n PACKUMENT_MINUTES * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND;\n\n/** Forget what the registry said, for a test that means to say it again. */\nexport const forgetRegistry = () => packuments.clear();\n\nexport const packageVersions = async (\n name: string,\n options: RegistryOptions = {},\n) => {\n if (!isPackageName(name)) return undefined;\n /* Cached, because the alternative is what the consumer of this library was\n * doing: one request per package per page load, from a control plane, to\n * somebody else's registry, for an answer that changes daily.\n *\n * Only when nobody passed their own `fetch` -- a caller with a fetch double\n * means to control the answers, and a cache shared with the real registry\n * would hand them somebody else's. */\n const cacheable =\n options.fetch === undefined && options.registry === undefined;\n const known = cacheable ? packuments.get(name) : undefined;\n if (known !== undefined && Date.now() - known.asked < PACKUMENT_TTL_MS)\n return known.value;\n const value = askRegistry(name, options);\n if (cacheable) packuments.set(name, { asked: Date.now(), value });\n\n return value;\n};\n\nconst askRegistry = async (name: string, options: RegistryOptions) => {\n const call = options.fetch ?? fetch;\n const url = `${options.registry ?? DEFAULT_REGISTRY}/${name.replace(\"/\", \"%2f\")}`;\n try {\n const abbreviated = await call(url, {\n headers: { accept: ABBREVIATED },\n signal: AbortSignal.timeout(TIMEOUT_MS),\n });\n /* A package published minutes ago answers the full document and 404s the\n * abbreviated one -- the registry builds that form on its own schedule.\n * Taking the 404 at face value says \"no such package\" about a package\n * that is right there, which is a confusing few minutes for whoever just\n * published it. */\n const response = abbreviated.ok\n ? abbreviated\n : await call(url, { signal: AbortSignal.timeout(TIMEOUT_MS) });\n if (response.ok) return readPackument(await response.json());\n\n /* A definite 404 is an answer: this name has never been published. That\n * is not the same as the registry being unreachable, and a caller that\n * cannot tell them apart refuses a package's first release forever. */\n return response.status === NOT_FOUND ? NOTHING_PUBLISHED : undefined;\n } catch {\n return undefined;\n }\n};\n/**\n * A published version's changelog, when it ships one.\n *\n * Nothing is the ordinary answer for a package that has not adopted this yet,\n * and callers are expected to fall back to comparing type surfaces rather than\n * to give up: an unannotated release is still a release somebody has to\n * decide about.\n */\nexport const publishedChangelog = async (\n name: string,\n version: string,\n options: RegistryOptions = {},\n) => {\n const archive = await packageArchive(name, version, options);\n if (!archive) return undefined;\n const file = readTar(archive, (path) => path === CHANGELOG_FILE).get(\n CHANGELOG_FILE,\n );\n if (!file) return undefined;\n try {\n return parseChangelog(JSON.parse(asText(file))).changelog;\n } catch {\n return undefined;\n }\n};\n/** A published version's type surface, for comparing against another. */\nexport const publishedSurface = async (\n name: string,\n version: string,\n options: RegistryOptions = {},\n) => {\n const archive = await packageArchive(name, version, options);\n\n return archive === undefined ? undefined : surfaceOfArchive(archive);\n};\n",
15
15
  "import {\n CHANGELOG_CONTRACT,\n isDisruptive,\n type Change,\n type ChangeKind,\n type Changelog,\n type Migration,\n type Release,\n} from \"./types\";\nimport { compareVersions } from \"./versioning\";\n\n/*\n * Writing the two copies.\n *\n * `changelog.json` is the document programs read and the one that ships in the\n * package. `CHANGELOG.md` is the same content for people, generated from it\n * rather than written beside it -- two files kept in step by hand is one file\n * and a lie.\n *\n * Both are produced from the entries, so the markdown is never edited: a\n * change to it is a change to an entry, and the file says so at the top for\n * whoever arrives with a fix.\n */\n\nconst HEADING: Record<ChangeKind, string> = {\n added: \"Added\",\n breaking: \"Breaking\",\n changed: \"Changed\",\n deprecated: \"Deprecated\",\n fixed: \"Fixed\",\n internal: \"Internal\",\n removed: \"Removed\",\n security: \"Security\",\n};\n\n/* Read in the order somebody cares about them: what will cost me an\n * afternoon, then what I can now do, then what stopped being wrong. */\nconst ORDER: readonly ChangeKind[] = [\n \"breaking\",\n \"removed\",\n \"deprecated\",\n \"security\",\n \"added\",\n \"changed\",\n \"fixed\",\n \"internal\",\n];\n\nconst migrationLine = (migration: Migration) => {\n if (\"rename\" in migration)\n return `Rename \\`${migration.rename.from}\\` to \\`${migration.rename.to}\\`.`;\n if (\"moved\" in migration)\n return `Import \\`${migration.moved.symbol}\\` from \\`${migration.moved.to}\\` instead of \\`${migration.moved.from}\\`.`;\n if (\"resubpath\" in migration)\n return `Import from \\`${migration.resubpath.to}\\` instead of \\`${migration.resubpath.from}\\`.`;\n\n return migration.instruction;\n};\n\nconst renderChange = (change: Change) => {\n const symbols =\n change.symbols && change.symbols.length > 0\n ? ` (${change.symbols.map((name) => `\\`${name}\\``).join(\", \")})`\n : \"\";\n const lines = [`- **${change.summary}**${symbols}`];\n if (change.detail !== undefined) lines.push(` ${change.detail}`);\n if (isDisruptive(change)) {\n lines.push(` _Migration:_ ${change.migration.instruction}`);\n const mechanical = migrationLine(change.migration);\n if (mechanical !== change.migration.instruction)\n lines.push(` _Applied automatically:_ ${mechanical}`);\n }\n if (change.reference !== undefined) lines.push(` See ${change.reference}.`);\n\n return lines.join(\"\\n\");\n};\n\nconst renderRelease = (release: Release) => {\n const sections = ORDER.map((kind) => {\n const changes = release.changes.filter((entry) => entry.kind === kind);\n if (changes.length === 0) return null;\n\n return [`### ${HEADING[kind]}`, \"\", ...changes.map(renderChange)].join(\n \"\\n\",\n );\n }).filter((section): section is string => section !== null);\n\n return [\n `## ${release.version} — ${release.date}`,\n ...(release.note === undefined ? [] : [\"\", release.note]),\n \"\",\n sections.join(\"\\n\\n\"),\n ].join(\"\\n\");\n};\n\n/**\n * The line that says this file was generated.\n *\n * Load-bearing: adopting a package reads whatever `CHANGELOG.md` said before\n * and keeps it as history, and on a second adoption the file it generated the\n * first time is what it finds. Without a way to recognise its own output it\n * files that as history and prints the header underneath itself.\n */\nexport const GENERATED_MARKER =\n \"This file is generated by `absolute-changelog`\";\n\nexport type MarkdownOptions = {\n /** Whatever the package's changelog said before it was generated, kept\n * under the releases that came after it. History is not noise. */\n history?: string;\n};\n\n/** The document that ships in the package: stable key order, so a release\n * that changed nothing produces no diff. */\nexport const renderChangelogJson = (changelog: Changelog) =>\n `${JSON.stringify(\n {\n contract: CHANGELOG_CONTRACT,\n name: changelog.name,\n releases: [...changelog.releases]\n .sort((left, right) => compareVersions(right.version, left.version))\n .map((release) => ({\n changes: release.changes.map((change) => ({\n ...(change.detail === undefined ? {} : { detail: change.detail }),\n kind: change.kind,\n ...(isDisruptive(change) ? { migration: change.migration } : {}),\n ...(change.reference === undefined\n ? {}\n : { reference: change.reference }),\n summary: change.summary,\n ...(change.symbols && change.symbols.length > 0\n ? { symbols: change.symbols }\n : {}),\n })),\n date: release.date,\n ...(release.note === undefined ? {} : { note: release.note }),\n version: release.version,\n })),\n },\n null,\n \"\\t\",\n )}\\n`;\nexport const renderMarkdown = (\n changelog: Changelog,\n options: MarkdownOptions = {},\n) => {\n const releases = [...changelog.releases].sort((left, right) =>\n compareVersions(right.version, left.version),\n );\n const head = [\n \"# Changelog\",\n \"\",\n `All notable changes to \\`${changelog.name}\\`.`,\n \"\",\n `${GENERATED_MARKER} from the entries in`,\n \"`changelog/`. Edit an entry, not this file — and add new ones under\",\n \"`changelog/unreleased/`.\",\n ].join(\"\\n\");\n const body = releases.map(renderRelease).join(\"\\n\\n\");\n const tail =\n options.history === undefined || options.history.trim() === \"\"\n ? \"\"\n : [\"---\", \"\", \"## Earlier releases\", \"\", options.history.trim()].join(\n \"\\n\",\n );\n\n return `${[head, body, tail].filter((part) => part !== \"\").join(\"\\n\\n\")}\\n`;\n};\n"
16
16
  ],
17
- "mappings": "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",
18
- "debugId": "C07818292D22AD6164756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "2BE6EC2364C69ED864756E2164756E21",
19
19
  "names": []
20
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/changelog",
3
- "version": "0.5.1",
3
+ "version": "0.7.0",
4
4
  "description": "The changelog contract for the AbsoluteJS packages. Changes are written as typed entries the compiler checks, the release gate reconciles them against the package's own published types so a change nobody wrote down cannot ship, and migrations are data rather than prose so an upgrade can be applied instead of read.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,7 +45,7 @@
45
45
  "changelog": "bun src/cli.ts",
46
46
  "check:package": "bun run typecheck && bun run lint && bun run test && bun run build && bun src/cli.ts check",
47
47
  "release": "bun run format && bun run check:package && bun publish",
48
- "prepublishOnly": "bun src/cli.ts check"
48
+ "prepublishOnly": "bun run check:package"
49
49
  },
50
50
  "keywords": [
51
51
  "absolutejs",