@ontrails/trails 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1906 -0
- package/README.md +48 -0
- package/bin/trails.ts +3 -0
- package/package.json +57 -0
- package/src/app.ts +167 -0
- package/src/clack.ts +111 -0
- package/src/cli.ts +308 -0
- package/src/completions.ts +431 -0
- package/src/lifecycle-source-io.ts +33 -0
- package/src/load-app-mirror.ts +202 -0
- package/src/local-state-io.ts +129 -0
- package/src/mcp-app.ts +42 -0
- package/src/mcp-options.ts +92 -0
- package/src/mcp.ts +8 -0
- package/src/project-writes.ts +377 -0
- package/src/regrade/audit.ts +571 -0
- package/src/regrade/config.ts +152 -0
- package/src/regrade/history.ts +636 -0
- package/src/regrade/lifecycle.ts +76 -0
- package/src/regrade/live-api-preserve.ts +123 -0
- package/src/regrade/plan-artifact.ts +515 -0
- package/src/regrade/plan-derivation.ts +301 -0
- package/src/regrade/prepared-run.ts +259 -0
- package/src/regrade/receipt-history.ts +446 -0
- package/src/regrade/source-transaction.ts +185 -0
- package/src/release/bindings.ts +58 -0
- package/src/release/changeset-packages.ts +99 -0
- package/src/release/check.ts +1191 -0
- package/src/release/cli-bundle.ts +575 -0
- package/src/release/config.ts +73 -0
- package/src/release/contract-facts.ts +425 -0
- package/src/release/homebrew.ts +221 -0
- package/src/release/index.ts +180 -0
- package/src/release/lock-roundtrip-smoke.ts +255 -0
- package/src/release/lock-roundtrip-workspace.ts +107 -0
- package/src/release/native-bun-publish.ts +964 -0
- package/src/release/native-bun-registry.ts +848 -0
- package/src/release/notes-cli.ts +171 -0
- package/src/release/notes.ts +390 -0
- package/src/release/pack-coherence.ts +455 -0
- package/src/release/package-route-facts.ts +146 -0
- package/src/release/packed-artifacts-smoke.ts +236 -0
- package/src/release/policy.ts +1780 -0
- package/src/release/semver.ts +104 -0
- package/src/release/smoke.ts +56 -0
- package/src/release/stable-version-release.ts +80 -0
- package/src/release/wayfinder-dogfood-smoke.ts +762 -0
- package/src/release/zero-line-transition.ts +68 -0
- package/src/retired-topo-command.ts +36 -0
- package/src/run-adapter-check.ts +76 -0
- package/src/run-argv.ts +133 -0
- package/src/run-collision.ts +126 -0
- package/src/run-completions-install.ts +179 -0
- package/src/run-example.ts +149 -0
- package/src/run-examples.ts +148 -0
- package/src/run-quiet.ts +75 -0
- package/src/run-regrade-progress.ts +47 -0
- package/src/run-release-check.ts +74 -0
- package/src/run-schema.ts +74 -0
- package/src/run-trace.ts +273 -0
- package/src/run-warden.ts +39 -0
- package/src/run-watch-project.ts +52 -0
- package/src/run-watch.ts +381 -0
- package/src/run-wayfind-outline.ts +170 -0
- package/src/scaffold-version-sync.ts +183 -0
- package/src/scaffold-versions.generated.ts +12 -0
- package/src/trails/adapter-check.ts +244 -0
- package/src/trails/add-surface.ts +816 -0
- package/src/trails/add-trail.ts +141 -0
- package/src/trails/add-verify.ts +252 -0
- package/src/trails/compile.ts +118 -0
- package/src/trails/completions-complete.ts +236 -0
- package/src/trails/completions.ts +47 -0
- package/src/trails/config-explain.ts +43 -0
- package/src/trails/create-adapter.ts +785 -0
- package/src/trails/create-scaffold.ts +1215 -0
- package/src/trails/create-versions.ts +62 -0
- package/src/trails/create.ts +652 -0
- package/src/trails/deprecate.ts +59 -0
- package/src/trails/dev-clean.ts +80 -0
- package/src/trails/dev-reset.ts +48 -0
- package/src/trails/dev-stats.ts +71 -0
- package/src/trails/dev-support.ts +360 -0
- package/src/trails/doctor.ts +77 -0
- package/src/trails/draft-promote.ts +949 -0
- package/src/trails/guide.ts +106 -0
- package/src/trails/load-app.ts +1145 -0
- package/src/trails/operator-context.ts +66 -0
- package/src/trails/project-context-output.ts +304 -0
- package/src/trails/project-context.ts +613 -0
- package/src/trails/project.ts +65 -0
- package/src/trails/regrade.ts +4951 -0
- package/src/trails/release-check.ts +113 -0
- package/src/trails/release-smoke.ts +49 -0
- package/src/trails/revise.ts +53 -0
- package/src/trails/root-dir.ts +21 -0
- package/src/trails/run-example.ts +592 -0
- package/src/trails/run-examples.ts +149 -0
- package/src/trails/run.ts +496 -0
- package/src/trails/scaffold-json.ts +60 -0
- package/src/trails/scaffold-topo-identity.ts +479 -0
- package/src/trails/survey.ts +990 -0
- package/src/trails/topo-activation.ts +14 -0
- package/src/trails/topo-constants.ts +2 -0
- package/src/trails/topo-history.ts +47 -0
- package/src/trails/topo-output-schemas.ts +259 -0
- package/src/trails/topo-pin.ts +38 -0
- package/src/trails/topo-read-support.ts +368 -0
- package/src/trails/topo-reports.ts +809 -0
- package/src/trails/topo-store-support.ts +323 -0
- package/src/trails/topo-support.ts +247 -0
- package/src/trails/topo-unpin.ts +61 -0
- package/src/trails/topo.ts +92 -0
- package/src/trails/validate.ts +348 -0
- package/src/trails/version-lifecycle-support.ts +936 -0
- package/src/trails/warden-guide.ts +134 -0
- package/src/trails/warden.ts +598 -0
- package/src/trails/wayfind-diff.ts +716 -0
- package/src/trails/wayfind-outline.ts +876 -0
- package/src/trails/wayfind.ts +1319 -0
- package/src/versions.ts +31 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { getPackagesSync } from '@manypkg/get-packages';
|
|
5
|
+
import { isPlainObject } from '@ontrails/core';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
|
|
8
|
+
const FRONTMATTER = /\s*---([^]*?)\n\s*---(\s*(?:\n|$)[^]*)/u;
|
|
9
|
+
const legacyChangeset = z.object({
|
|
10
|
+
releases: z.array(z.object({ name: z.string() })),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const packageNames = (content: string): readonly string[] => {
|
|
14
|
+
const frontmatter = FRONTMATTER.exec(content)?.[1];
|
|
15
|
+
if (frontmatter === undefined) {
|
|
16
|
+
throw new Error('Missing changeset YAML frontmatter.');
|
|
17
|
+
}
|
|
18
|
+
const parsed: unknown = Bun.YAML.parse(frontmatter);
|
|
19
|
+
if (parsed === null || parsed === undefined) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
if (!isPlainObject(parsed)) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
'Changeset frontmatter must map package names to release types.'
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
return Object.keys(parsed).toSorted();
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Validate package ownership before Changesets calculates a release.
|
|
32
|
+
*
|
|
33
|
+
* Mirrors @changesets/read 0.6.7 getChangesets and getOldChangesets
|
|
34
|
+
* (dist/changesets-read.esm.js:61,115), including retained v1 directories,
|
|
35
|
+
* and @changesets/assemble-release-plan 6.0.9 getRelevantChangesets
|
|
36
|
+
* (dist/changesets-assemble-release-plan.esm.js:544): workspace-name validation
|
|
37
|
+
* precedes consumed prerelease filtering. Valid consumed rows remain untouched;
|
|
38
|
+
* removed package names must be cleaned up even in retained prerelease files.
|
|
39
|
+
* Empty inventories use Changesets' pinned package reader for root-only and
|
|
40
|
+
* alternate workspace layouts instead of duplicating workspace-manager rules.
|
|
41
|
+
* Bun parses the YAML boundary here so the public operator does not depend on
|
|
42
|
+
* the repository's development-only Changesets CLI installation.
|
|
43
|
+
*/
|
|
44
|
+
export const findChangesetPackageErrors = (
|
|
45
|
+
repoRoot: string,
|
|
46
|
+
workspaceNames: ReadonlySet<string>
|
|
47
|
+
): readonly string[] => {
|
|
48
|
+
const dir = join(repoRoot, '.changeset');
|
|
49
|
+
if (!existsSync(dir)) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
const knownNames = new Set(workspaceNames);
|
|
53
|
+
const rootManifest = join(repoRoot, 'package.json');
|
|
54
|
+
if (knownNames.size === 0 && existsSync(rootManifest)) {
|
|
55
|
+
try {
|
|
56
|
+
for (const pkg of getPackagesSync(repoRoot).packages) {
|
|
57
|
+
knownNames.add(pkg.packageJson.name);
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
return [
|
|
61
|
+
`Cannot validate changeset package inventory in '${repoRoot}': ${error instanceof Error ? error.message : String(error)}`,
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const files = readdirSync(dir, { withFileTypes: true })
|
|
66
|
+
.flatMap((entry) => {
|
|
67
|
+
if (entry.isDirectory()) {
|
|
68
|
+
return [`${entry.name}/changes.json`];
|
|
69
|
+
}
|
|
70
|
+
return !entry.name.startsWith('.') &&
|
|
71
|
+
entry.name.endsWith('.md') &&
|
|
72
|
+
!/^README\.md$/iu.test(entry.name)
|
|
73
|
+
? [entry.name]
|
|
74
|
+
: [];
|
|
75
|
+
})
|
|
76
|
+
.toSorted();
|
|
77
|
+
return files.flatMap((name) => {
|
|
78
|
+
const path = `.changeset/${name}`;
|
|
79
|
+
try {
|
|
80
|
+
const content = readFileSync(join(dir, name), 'utf8');
|
|
81
|
+
const names = name.endsWith('/changes.json')
|
|
82
|
+
? legacyChangeset
|
|
83
|
+
.parse(JSON.parse(content))
|
|
84
|
+
.releases.map((release) => release.name)
|
|
85
|
+
: packageNames(content);
|
|
86
|
+
return [...new Set(names)]
|
|
87
|
+
.toSorted()
|
|
88
|
+
.filter((packageName) => !knownNames.has(packageName))
|
|
89
|
+
.map(
|
|
90
|
+
(packageName) =>
|
|
91
|
+
`Changeset '${path}' references unknown workspace package '${packageName}'.`
|
|
92
|
+
);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
return [
|
|
95
|
+
`Cannot validate changeset '${path}': ${error instanceof Error ? error.message : String(error)}`,
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
};
|