@ontrails/trails 1.0.0-beta.13 → 1.0.0-beta.14
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/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +16 -0
- package/__tests__/examples.test.ts +14 -0
- package/dist/src/app.d.ts.map +1 -1
- package/dist/src/app.js +13 -2
- package/dist/src/app.js.map +1 -1
- package/dist/src/clack.d.ts +1 -1
- package/dist/src/clack.js +1 -1
- package/dist/src/cli.js +2 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/trails/add-trail.js +13 -13
- package/dist/src/trails/add-trail.js.map +1 -1
- package/dist/src/trails/add-trailhead.d.ts +13 -0
- package/dist/src/trails/add-trailhead.d.ts.map +1 -0
- package/dist/src/trails/add-trailhead.js +88 -0
- package/dist/src/trails/add-trailhead.js.map +1 -0
- package/dist/src/trails/add-verify.js +10 -10
- package/dist/src/trails/add-verify.js.map +1 -1
- package/dist/src/trails/create-scaffold.js +26 -26
- package/dist/src/trails/create-scaffold.js.map +1 -1
- package/dist/src/trails/create.d.ts +6 -6
- package/dist/src/trails/create.d.ts.map +1 -1
- package/dist/src/trails/create.js +29 -29
- package/dist/src/trails/create.js.map +1 -1
- package/dist/src/trails/dev-clean.d.ts +9 -0
- package/dist/src/trails/dev-clean.d.ts.map +1 -0
- package/dist/src/trails/dev-clean.js +65 -0
- package/dist/src/trails/dev-clean.js.map +1 -0
- package/dist/src/trails/dev-reset.d.ts +6 -0
- package/dist/src/trails/dev-reset.d.ts.map +1 -0
- package/dist/src/trails/dev-reset.js +38 -0
- package/dist/src/trails/dev-reset.js.map +1 -0
- package/dist/src/trails/dev-stats.d.ts +7 -0
- package/dist/src/trails/dev-stats.d.ts.map +1 -0
- package/dist/src/trails/dev-stats.js +61 -0
- package/dist/src/trails/dev-stats.js.map +1 -0
- package/dist/src/trails/dev-support.d.ts +64 -0
- package/dist/src/trails/dev-support.d.ts.map +1 -0
- package/dist/src/trails/dev-support.js +178 -0
- package/dist/src/trails/dev-support.js.map +1 -0
- package/dist/src/trails/draft-promote.d.ts +18 -0
- package/dist/src/trails/draft-promote.d.ts.map +1 -0
- package/dist/src/trails/draft-promote.js +386 -0
- package/dist/src/trails/draft-promote.js.map +1 -0
- package/dist/src/trails/guide.d.ts +13 -3
- package/dist/src/trails/guide.d.ts.map +1 -1
- package/dist/src/trails/guide.js +21 -37
- package/dist/src/trails/guide.js.map +1 -1
- package/dist/src/trails/load-app.d.ts +3 -1
- package/dist/src/trails/load-app.d.ts.map +1 -1
- package/dist/src/trails/load-app.js +53 -10
- package/dist/src/trails/load-app.js.map +1 -1
- package/dist/src/trails/project.d.ts.map +1 -1
- package/dist/src/trails/project.js +14 -3
- package/dist/src/trails/project.js.map +1 -1
- package/dist/src/trails/survey.d.ts +4 -58
- package/dist/src/trails/survey.d.ts.map +1 -1
- package/dist/src/trails/survey.js +52 -173
- package/dist/src/trails/survey.js.map +1 -1
- package/dist/src/trails/topo-constants.d.ts +3 -0
- package/dist/src/trails/topo-constants.d.ts.map +1 -0
- package/dist/src/trails/topo-constants.js +3 -0
- package/dist/src/trails/topo-constants.js.map +1 -0
- package/dist/src/trails/topo-export.d.ts +18 -0
- package/dist/src/trails/topo-export.d.ts.map +1 -0
- package/dist/src/trails/topo-export.js +34 -0
- package/dist/src/trails/topo-export.js.map +1 -0
- package/dist/src/trails/topo-history.d.ts +24 -0
- package/dist/src/trails/topo-history.d.ts.map +1 -0
- package/dist/src/trails/topo-history.js +33 -0
- package/dist/src/trails/topo-history.js.map +1 -0
- package/dist/src/trails/topo-pin.d.ts +21 -0
- package/dist/src/trails/topo-pin.d.ts.map +1 -0
- package/dist/src/trails/topo-pin.js +35 -0
- package/dist/src/trails/topo-pin.js.map +1 -0
- package/dist/src/trails/topo-read-support.d.ts +54 -0
- package/dist/src/trails/topo-read-support.d.ts.map +1 -0
- package/dist/src/trails/topo-read-support.js +178 -0
- package/dist/src/trails/topo-read-support.js.map +1 -0
- package/dist/src/trails/topo-reports.d.ts +50 -0
- package/dist/src/trails/topo-reports.d.ts.map +1 -0
- package/dist/src/trails/topo-reports.js +122 -0
- package/dist/src/trails/topo-reports.js.map +1 -0
- package/dist/src/trails/topo-show.d.ts +23 -0
- package/dist/src/trails/topo-show.d.ts.map +1 -0
- package/dist/src/trails/topo-show.js +53 -0
- package/dist/src/trails/topo-show.js.map +1 -0
- package/dist/src/trails/topo-store-support.d.ts +13 -0
- package/dist/src/trails/topo-store-support.d.ts.map +1 -0
- package/dist/src/trails/topo-store-support.js +55 -0
- package/dist/src/trails/topo-store-support.js.map +1 -0
- package/dist/src/trails/topo-support.d.ts +87 -0
- package/dist/src/trails/topo-support.d.ts.map +1 -0
- package/dist/src/trails/topo-support.js +165 -0
- package/dist/src/trails/topo-support.js.map +1 -0
- package/dist/src/trails/topo-unpin.d.ts +15 -0
- package/dist/src/trails/topo-unpin.d.ts.map +1 -0
- package/dist/src/trails/topo-unpin.js +39 -0
- package/dist/src/trails/topo-unpin.js.map +1 -0
- package/dist/src/trails/topo-verify.d.ts +5 -0
- package/dist/src/trails/topo-verify.d.ts.map +1 -0
- package/dist/src/trails/topo-verify.js +28 -0
- package/dist/src/trails/topo-verify.js.map +1 -0
- package/dist/src/trails/topo.d.ts +5 -0
- package/dist/src/trails/topo.d.ts.map +1 -0
- package/dist/src/trails/topo.js +67 -0
- package/dist/src/trails/topo.js.map +1 -0
- package/dist/src/trails/warden.d.ts +1 -1
- package/dist/src/trails/warden.d.ts.map +1 -1
- package/dist/src/trails/warden.js +28 -27
- package/dist/src/trails/warden.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
- package/src/__tests__/draft-promote.test.ts +144 -0
- package/src/__tests__/load-app.test.ts +43 -0
- package/src/__tests__/survey.test.ts +85 -0
- package/src/__tests__/topo-dev.test.ts +424 -0
- package/src/app.ts +22 -0
- package/src/trails/dev-clean.ts +73 -0
- package/src/trails/dev-reset.ts +44 -0
- package/src/trails/dev-stats.ts +64 -0
- package/src/trails/dev-support.ts +326 -0
- package/src/trails/draft-promote.ts +704 -0
- package/src/trails/guide.ts +22 -37
- package/src/trails/load-app.ts +76 -13
- package/src/trails/project.ts +17 -3
- package/src/trails/survey.ts +56 -256
- package/src/trails/topo-constants.ts +2 -0
- package/src/trails/topo-export.ts +39 -0
- package/src/trails/topo-history.ts +40 -0
- package/src/trails/topo-pin.ts +42 -0
- package/src/trails/topo-read-support.ts +332 -0
- package/src/trails/topo-reports.ts +221 -0
- package/src/trails/topo-show.ts +58 -0
- package/src/trails/topo-store-support.ts +96 -0
- package/src/trails/topo-support.ts +274 -0
- package/src/trails/topo-unpin.ts +51 -0
- package/src/trails/topo-verify.ts +29 -0
- package/src/trails/topo.ts +73 -0
- package/src/trails/warden.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-store-support.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-store-support.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAiB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAcvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAmD1D,eAAO,MAAM,iBAAiB,GAC5B,KAAK,IAAI,EACT,UAAU;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KACtC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAmBzC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stored-export pipeline for topo persistence.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from topo-support.ts so this branch (trl-131) owns its own file,
|
|
5
|
+
* keeping absorb routing clean across the stack.
|
|
6
|
+
*/
|
|
7
|
+
import { InternalError, Result } from '@ontrails/core';
|
|
8
|
+
import { getStoredTopoExport, persistEstablishedTopoSave, } from '@ontrails/core/internal/topo-store';
|
|
9
|
+
import { openWriteTrailsDb, resolveTrailsDir, } from '@ontrails/core/internal/trails-db';
|
|
10
|
+
import { writeTrailheadLock, writeTrailheadMap } from '@ontrails/schema';
|
|
11
|
+
import { currentGitState, resolveRootDir, topoCounts } from './topo-support.js';
|
|
12
|
+
const persistAndReadStoredExport = (app, db, rootDir) => {
|
|
13
|
+
const saveResult = persistEstablishedTopoSave(db, app, {
|
|
14
|
+
...currentGitState(rootDir),
|
|
15
|
+
...topoCounts(app),
|
|
16
|
+
});
|
|
17
|
+
if (saveResult.isErr()) {
|
|
18
|
+
return saveResult;
|
|
19
|
+
}
|
|
20
|
+
const save = saveResult.value;
|
|
21
|
+
const storedExport = getStoredTopoExport(db, save.id);
|
|
22
|
+
if (storedExport === undefined) {
|
|
23
|
+
return Result.err(new InternalError(`Missing stored topo export for save "${save.id}"`));
|
|
24
|
+
}
|
|
25
|
+
return Result.ok({
|
|
26
|
+
save,
|
|
27
|
+
storedExport,
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
const writeStoredExportArtifacts = async (storedExport, trailsDir) => {
|
|
31
|
+
const mapPath = await writeTrailheadMap(JSON.parse(storedExport.trailheadMapJson), { dir: trailsDir });
|
|
32
|
+
const lockPath = await writeTrailheadLock(JSON.parse(storedExport.lockContent), { dir: trailsDir });
|
|
33
|
+
return {
|
|
34
|
+
hash: storedExport.trailheadHash,
|
|
35
|
+
lockPath,
|
|
36
|
+
mapPath,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export const exportCurrentTopo = async (app, options) => {
|
|
40
|
+
const rootDir = resolveRootDir(options?.rootDir);
|
|
41
|
+
const db = openWriteTrailsDb({ rootDir });
|
|
42
|
+
try {
|
|
43
|
+
const persisted = persistAndReadStoredExport(app, db, rootDir);
|
|
44
|
+
if (persisted.isErr()) {
|
|
45
|
+
return persisted;
|
|
46
|
+
}
|
|
47
|
+
const { save, storedExport } = persisted.value;
|
|
48
|
+
const artifacts = await writeStoredExportArtifacts(storedExport, resolveTrailsDir({ rootDir }));
|
|
49
|
+
return Result.ok({ ...artifacts, save });
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
db.close();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=topo-store-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-store-support.js","sourceRoot":"","sources":["../../../src/trails/topo-store-support.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEhF,MAAM,0BAA0B,GAAG,CACjC,GAAS,EACT,EAAwC,EACxC,OAAe,EAC0D,EAAE;IAC3E,MAAM,UAAU,GAAG,0BAA0B,CAAC,EAAE,EAAE,GAAG,EAAE;QACrD,GAAG,eAAe,CAAC,OAAO,CAAC;QAC3B,GAAG,UAAU,CAAC,GAAG,CAAC;KACnB,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;IAC9B,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEtD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,aAAa,CAAC,wCAAwC,IAAI,CAAC,EAAE,GAAG,CAAC,CACtE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,IAAI;QACJ,YAAY;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,KAAK,EACtC,YAA8B,EAC9B,SAAiB,EACiD,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACrC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAiB,EACzD,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAkB,EACrD,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,YAAY,CAAC,aAAa;QAChC,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,GAAS,EACT,OAAuC,EACG,EAAE;IAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,0BAA0B,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAChD,YAAY,EACZ,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,CAC9B,CAAC;QACF,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Topo } from '@ontrails/core';
|
|
2
|
+
import type { TopoPinRecord, TopoSaveRecord } from '@ontrails/core/internal/topo-saves';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import type { BriefReport, SurveyListReport } from './topo-reports.js';
|
|
5
|
+
/** Output schema for a topo save record. Shared across topo trails. */
|
|
6
|
+
export declare const topoSaveOutput: z.ZodObject<{
|
|
7
|
+
createdAt: z.ZodString;
|
|
8
|
+
gitDirty: z.ZodBoolean;
|
|
9
|
+
gitSha: z.ZodOptional<z.ZodString>;
|
|
10
|
+
id: z.ZodString;
|
|
11
|
+
provisionCount: z.ZodNumber;
|
|
12
|
+
signalCount: z.ZodNumber;
|
|
13
|
+
trailCount: z.ZodNumber;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
/** Output schema for a topo pin record. Shared across topo trails. */
|
|
16
|
+
export declare const topoPinOutput: z.ZodObject<{
|
|
17
|
+
createdAt: z.ZodString;
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
saveId: z.ZodString;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
export declare const DEFAULT_APP_MODULE = "./src/app.ts";
|
|
22
|
+
export declare const DEFAULT_TOPO_HISTORY_LIMIT = 10;
|
|
23
|
+
export declare const LOCK_PATH = ".trails/trails.lock";
|
|
24
|
+
export declare const LEGACY_LOCK_PATH = ".trails/trailhead.lock";
|
|
25
|
+
/** Resolve the lockfile path, preferring the current name with legacy fallback. */
|
|
26
|
+
export declare const resolveLockPath: (trailsDir: string) => string;
|
|
27
|
+
export interface TopoSummaryReport {
|
|
28
|
+
readonly app: BriefReport;
|
|
29
|
+
readonly dbPath: string;
|
|
30
|
+
readonly list: SurveyListReport;
|
|
31
|
+
readonly lockExists: boolean;
|
|
32
|
+
readonly lockPath: string;
|
|
33
|
+
}
|
|
34
|
+
export interface TopoHistoryReport {
|
|
35
|
+
readonly dbPath: string;
|
|
36
|
+
readonly limit: number;
|
|
37
|
+
readonly pinCount: number;
|
|
38
|
+
readonly pins: TopoPinRecord[];
|
|
39
|
+
readonly saveCount: number;
|
|
40
|
+
readonly saves: TopoSaveRecord[];
|
|
41
|
+
}
|
|
42
|
+
export interface TopoExportReport {
|
|
43
|
+
readonly hash: string;
|
|
44
|
+
readonly lockPath: string;
|
|
45
|
+
readonly mapPath: string;
|
|
46
|
+
readonly save: TopoSaveRecord;
|
|
47
|
+
}
|
|
48
|
+
export interface TopoVerifyReport {
|
|
49
|
+
readonly committedHash: string;
|
|
50
|
+
readonly currentHash: string;
|
|
51
|
+
readonly lockPath: string;
|
|
52
|
+
readonly stale: false;
|
|
53
|
+
}
|
|
54
|
+
export declare const resolveRootDir: (cwd?: string) => string;
|
|
55
|
+
export declare const currentGitState: (rootDir: string) => {
|
|
56
|
+
readonly gitDirty: boolean;
|
|
57
|
+
readonly gitSha?: string;
|
|
58
|
+
};
|
|
59
|
+
export declare const topoCounts: (app: Topo) => Pick<TopoSaveRecord, "provisionCount" | "signalCount" | "trailCount">;
|
|
60
|
+
export declare const isolatedExampleInput: (name: string) => {
|
|
61
|
+
readonly module: string;
|
|
62
|
+
readonly rootDir: string;
|
|
63
|
+
};
|
|
64
|
+
export declare const createCurrentTopoSave: (app: Topo, options?: {
|
|
65
|
+
readonly rootDir?: string;
|
|
66
|
+
}) => TopoSaveRecord;
|
|
67
|
+
export declare const listTopoHistory: (options?: {
|
|
68
|
+
readonly limit?: number;
|
|
69
|
+
readonly rootDir?: string;
|
|
70
|
+
}) => TopoHistoryReport;
|
|
71
|
+
export declare const pinCurrentTopo: (app: Topo, input: {
|
|
72
|
+
readonly name: string;
|
|
73
|
+
readonly rootDir?: string;
|
|
74
|
+
}) => {
|
|
75
|
+
readonly pin: TopoPinRecord;
|
|
76
|
+
readonly save: TopoSaveRecord;
|
|
77
|
+
};
|
|
78
|
+
export declare const removeTopoPin: (input: {
|
|
79
|
+
readonly dryRun: boolean;
|
|
80
|
+
readonly name: string;
|
|
81
|
+
readonly rootDir?: string;
|
|
82
|
+
}) => {
|
|
83
|
+
readonly dryRun: boolean;
|
|
84
|
+
readonly pin?: TopoPinRecord;
|
|
85
|
+
readonly removed: boolean;
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=topo-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-support.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, rmSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { getTopoPin, listTopoPins, listTopoSaves, pinTopoSave, unpinTopoSave, } from '@ontrails/core/internal/topo-saves';
|
|
6
|
+
import { persistEstablishedTopoSave } from '@ontrails/core/internal/topo-store';
|
|
7
|
+
import { openReadTrailsDb, openWriteTrailsDb, resolveTrailsDbPath, } from '@ontrails/core/internal/trails-db';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
/** Output schema for a topo save record. Shared across topo trails. */
|
|
10
|
+
export const topoSaveOutput = z.object({
|
|
11
|
+
createdAt: z.string(),
|
|
12
|
+
gitDirty: z.boolean(),
|
|
13
|
+
gitSha: z.string().optional(),
|
|
14
|
+
id: z.string(),
|
|
15
|
+
provisionCount: z.number(),
|
|
16
|
+
signalCount: z.number(),
|
|
17
|
+
trailCount: z.number(),
|
|
18
|
+
});
|
|
19
|
+
/** Output schema for a topo pin record. Shared across topo trails. */
|
|
20
|
+
export const topoPinOutput = z.object({
|
|
21
|
+
createdAt: z.string(),
|
|
22
|
+
name: z.string(),
|
|
23
|
+
saveId: z.string(),
|
|
24
|
+
});
|
|
25
|
+
export const DEFAULT_APP_MODULE = './src/app.ts';
|
|
26
|
+
export const DEFAULT_TOPO_HISTORY_LIMIT = 10;
|
|
27
|
+
export const LOCK_PATH = '.trails/trails.lock';
|
|
28
|
+
export const LEGACY_LOCK_PATH = '.trails/trailhead.lock';
|
|
29
|
+
/** Resolve the lockfile path, preferring the current name with legacy fallback. */
|
|
30
|
+
export const resolveLockPath = (trailsDir) => {
|
|
31
|
+
const primary = join(trailsDir, 'trails.lock');
|
|
32
|
+
if (existsSync(primary)) {
|
|
33
|
+
return primary;
|
|
34
|
+
}
|
|
35
|
+
const legacy = join(trailsDir, 'trailhead.lock');
|
|
36
|
+
return existsSync(legacy) ? legacy : primary;
|
|
37
|
+
};
|
|
38
|
+
const EXAMPLE_APP_MODULE = fileURLToPath(new URL('../app.ts', import.meta.url));
|
|
39
|
+
export const resolveRootDir = (cwd) => cwd ?? process.cwd();
|
|
40
|
+
const safeGit = (cwd, args) => {
|
|
41
|
+
const proc = Bun.spawnSync({
|
|
42
|
+
cmd: ['git', '-C', cwd, ...args],
|
|
43
|
+
stderr: 'ignore',
|
|
44
|
+
stdout: 'pipe',
|
|
45
|
+
});
|
|
46
|
+
if (!proc.success) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const text = Buffer.from(proc.stdout).toString('utf8').trim();
|
|
50
|
+
return text.length === 0 ? undefined : text;
|
|
51
|
+
};
|
|
52
|
+
export const currentGitState = (rootDir) => {
|
|
53
|
+
const gitSha = safeGit(rootDir, ['rev-parse', 'HEAD']);
|
|
54
|
+
const status = safeGit(rootDir, ['status', '--porcelain']);
|
|
55
|
+
return {
|
|
56
|
+
gitDirty: (status?.length ?? 0) > 0,
|
|
57
|
+
...(gitSha === undefined ? {} : { gitSha }),
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export const topoCounts = (app) => ({
|
|
61
|
+
provisionCount: app.provisions.size,
|
|
62
|
+
signalCount: app.signals.size,
|
|
63
|
+
trailCount: app.trails.size,
|
|
64
|
+
});
|
|
65
|
+
const emptyTopoHistory = (dbPath, limit) => ({
|
|
66
|
+
dbPath,
|
|
67
|
+
limit,
|
|
68
|
+
pinCount: 0,
|
|
69
|
+
pins: [],
|
|
70
|
+
saveCount: 0,
|
|
71
|
+
saves: [],
|
|
72
|
+
});
|
|
73
|
+
const collectedTopoHistory = (dbPath, limit, pins, allSaves) => ({
|
|
74
|
+
dbPath,
|
|
75
|
+
limit,
|
|
76
|
+
pinCount: pins.length,
|
|
77
|
+
pins: [...pins],
|
|
78
|
+
saveCount: allSaves.length,
|
|
79
|
+
saves: allSaves.slice(0, limit),
|
|
80
|
+
});
|
|
81
|
+
const removeTopoPinWithDb = (input, pin, db) => input.dryRun
|
|
82
|
+
? { dryRun: true, pin, removed: false }
|
|
83
|
+
: { dryRun: false, pin, removed: unpinTopoSave(db, input.name) };
|
|
84
|
+
export const isolatedExampleInput = (name) => {
|
|
85
|
+
const rootDir = join(tmpdir(), 'ontrails-trails-examples', name);
|
|
86
|
+
rmSync(rootDir, { force: true, recursive: true });
|
|
87
|
+
mkdirSync(rootDir, { recursive: true });
|
|
88
|
+
return {
|
|
89
|
+
module: EXAMPLE_APP_MODULE,
|
|
90
|
+
rootDir,
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
export const createCurrentTopoSave = (app, options) => {
|
|
94
|
+
const rootDir = resolveRootDir(options?.rootDir);
|
|
95
|
+
const db = openWriteTrailsDb({ rootDir });
|
|
96
|
+
try {
|
|
97
|
+
const result = persistEstablishedTopoSave(db, app, {
|
|
98
|
+
...currentGitState(rootDir),
|
|
99
|
+
...topoCounts(app),
|
|
100
|
+
});
|
|
101
|
+
if (result.isErr()) {
|
|
102
|
+
throw result.error;
|
|
103
|
+
}
|
|
104
|
+
return result.value;
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
db.close();
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
export const listTopoHistory = (options) => {
|
|
111
|
+
const rootDir = resolveRootDir(options?.rootDir);
|
|
112
|
+
const limit = options?.limit ?? DEFAULT_TOPO_HISTORY_LIMIT;
|
|
113
|
+
const dbPath = resolveTrailsDbPath({ rootDir });
|
|
114
|
+
if (!existsSync(dbPath)) {
|
|
115
|
+
return emptyTopoHistory(dbPath, limit);
|
|
116
|
+
}
|
|
117
|
+
const db = openReadTrailsDb({ rootDir });
|
|
118
|
+
try {
|
|
119
|
+
return collectedTopoHistory(dbPath, limit, listTopoPins(db), listTopoSaves(db));
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
db.close();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
export const pinCurrentTopo = (app, input) => {
|
|
126
|
+
const rootDir = resolveRootDir(input.rootDir);
|
|
127
|
+
const db = openWriteTrailsDb({ rootDir });
|
|
128
|
+
try {
|
|
129
|
+
const result = persistEstablishedTopoSave(db, app, {
|
|
130
|
+
...currentGitState(rootDir),
|
|
131
|
+
...topoCounts(app),
|
|
132
|
+
});
|
|
133
|
+
if (result.isErr()) {
|
|
134
|
+
throw result.error;
|
|
135
|
+
}
|
|
136
|
+
const pin = pinTopoSave(db, {
|
|
137
|
+
name: input.name,
|
|
138
|
+
saveId: result.value.id,
|
|
139
|
+
});
|
|
140
|
+
return { pin, save: result.value };
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
db.close();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
export const removeTopoPin = (input) => {
|
|
147
|
+
const rootDir = resolveRootDir(input.rootDir);
|
|
148
|
+
if (!existsSync(resolveTrailsDbPath({ rootDir }))) {
|
|
149
|
+
return { dryRun: input.dryRun, removed: false };
|
|
150
|
+
}
|
|
151
|
+
const db = input.dryRun
|
|
152
|
+
? openReadTrailsDb({ rootDir })
|
|
153
|
+
: openWriteTrailsDb({ rootDir });
|
|
154
|
+
try {
|
|
155
|
+
const pin = getTopoPin(db, input.name);
|
|
156
|
+
if (pin === undefined) {
|
|
157
|
+
return { dryRun: input.dryRun, removed: false };
|
|
158
|
+
}
|
|
159
|
+
return removeTopoPinWithDb(input, pin, db);
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
db.close();
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=topo-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-support.js","sourceRoot":"","sources":["../../../src/trails/topo-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const topoUnpinTrail: import("@ontrails/core").Trail<{
|
|
2
|
+
dryRun: boolean;
|
|
3
|
+
name: string;
|
|
4
|
+
yes: boolean;
|
|
5
|
+
rootDir?: string | undefined;
|
|
6
|
+
}, {
|
|
7
|
+
dryRun: boolean;
|
|
8
|
+
removed: boolean;
|
|
9
|
+
pin?: {
|
|
10
|
+
createdAt: string;
|
|
11
|
+
name: string;
|
|
12
|
+
saveId: string;
|
|
13
|
+
} | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=topo-unpin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-unpin.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-unpin.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc;;;;;;;;;;;;;EAyCzB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Result, ValidationError, trail } from '@ontrails/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { isolatedExampleInput, removeTopoPin, topoPinOutput, } from './topo-support.js';
|
|
4
|
+
export const topoUnpinTrail = trail('topo.unpin', {
|
|
5
|
+
blaze: (input, ctx) => {
|
|
6
|
+
if (input.dryRun !== true && input.yes !== true) {
|
|
7
|
+
return Result.err(new ValidationError('Refusing to remove a pin without `--yes` or `--dry-run`.'));
|
|
8
|
+
}
|
|
9
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
10
|
+
return Result.ok(removeTopoPin({ dryRun: input.dryRun, name: input.name, rootDir }));
|
|
11
|
+
},
|
|
12
|
+
description: 'Remove a named topo pin',
|
|
13
|
+
examples: [
|
|
14
|
+
{
|
|
15
|
+
input: {
|
|
16
|
+
...isolatedExampleInput('topo-unpin'),
|
|
17
|
+
dryRun: true,
|
|
18
|
+
name: 'before-auth-refactor',
|
|
19
|
+
},
|
|
20
|
+
name: 'Preview pin removal',
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
input: z.object({
|
|
24
|
+
dryRun: z
|
|
25
|
+
.boolean()
|
|
26
|
+
.default(true)
|
|
27
|
+
.describe('Preview the removal without changing state'),
|
|
28
|
+
name: z.string().describe('Pin name'),
|
|
29
|
+
rootDir: z.string().optional().describe('Workspace root directory'),
|
|
30
|
+
yes: z.boolean().default(false).describe('Confirm destructive changes'),
|
|
31
|
+
}),
|
|
32
|
+
intent: 'destroy',
|
|
33
|
+
output: z.object({
|
|
34
|
+
dryRun: z.boolean(),
|
|
35
|
+
pin: topoPinOutput.optional(),
|
|
36
|
+
removed: z.boolean(),
|
|
37
|
+
}),
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=topo-unpin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-unpin.js","sourceRoot":"","sources":["../../../src/trails/topo-unpin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,EAAE;IAChD,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,eAAe,CACjB,0DAA0D,CAC3D,CACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,EAAE,CACd,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC;IACD,WAAW,EAAE,yBAAyB;IACtC,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,GAAG,oBAAoB,CAAC,YAAY,CAAC;gBACrC,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,sBAAsB;aAC7B;YACD,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,4CAA4C,CAAC;QACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACnE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-verify.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-verify.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe;;;gDAqB1B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { trail } from '@ontrails/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { loadApp } from './load-app.js';
|
|
4
|
+
import { verifyCurrentTopo } from './topo-read-support.js';
|
|
5
|
+
import { DEFAULT_APP_MODULE } from './topo-support.js';
|
|
6
|
+
export const topoVerifyTrail = trail('topo.verify', {
|
|
7
|
+
blaze: async (input, ctx) => {
|
|
8
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
9
|
+
const app = await loadApp(input.module, rootDir);
|
|
10
|
+
return verifyCurrentTopo(app, { rootDir });
|
|
11
|
+
},
|
|
12
|
+
description: 'Verify that the committed lockfile matches the current topo',
|
|
13
|
+
input: z.object({
|
|
14
|
+
module: z
|
|
15
|
+
.string()
|
|
16
|
+
.default(DEFAULT_APP_MODULE)
|
|
17
|
+
.describe('Path to the app module'),
|
|
18
|
+
rootDir: z.string().optional().describe('Workspace root directory'),
|
|
19
|
+
}),
|
|
20
|
+
intent: 'read',
|
|
21
|
+
output: z.object({
|
|
22
|
+
committedHash: z.string(),
|
|
23
|
+
currentHash: z.string(),
|
|
24
|
+
lockPath: z.string(),
|
|
25
|
+
stale: z.literal(false),
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=topo-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-verify.js","sourceRoot":"","sources":["../../../src/trails/topo-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;IAClD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,WAAW,EAAE,6DAA6D;IAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,OAAO,CAAC,kBAAkB,CAAC;aAC3B,QAAQ,CAAC,wBAAwB,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACpE,CAAC;IACF,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;KACxB,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo.d.ts","sourceRoot":"","sources":["../../../src/trails/topo.ts"],"names":[],"mappings":"AAkDA,eAAO,MAAM,SAAS;;;iDAsBpB,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Result, trail } from '@ontrails/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { loadApp } from './load-app.js';
|
|
4
|
+
import { buildTopoSummary } from './topo-read-support.js';
|
|
5
|
+
import { DEFAULT_APP_MODULE } from './topo-support.js';
|
|
6
|
+
const summaryOutput = z.object({
|
|
7
|
+
app: z.object({
|
|
8
|
+
contractVersion: z.string(),
|
|
9
|
+
features: z.object({
|
|
10
|
+
detours: z.boolean(),
|
|
11
|
+
examples: z.boolean(),
|
|
12
|
+
outputSchemas: z.boolean(),
|
|
13
|
+
provisions: z.boolean(),
|
|
14
|
+
signals: z.boolean(),
|
|
15
|
+
}),
|
|
16
|
+
name: z.string(),
|
|
17
|
+
provisions: z.number(),
|
|
18
|
+
signals: z.number(),
|
|
19
|
+
trails: z.number(),
|
|
20
|
+
version: z.string(),
|
|
21
|
+
}),
|
|
22
|
+
dbPath: z.string(),
|
|
23
|
+
list: z.object({
|
|
24
|
+
count: z.number(),
|
|
25
|
+
entries: z.array(z.object({
|
|
26
|
+
examples: z.number(),
|
|
27
|
+
id: z.string(),
|
|
28
|
+
kind: z.string(),
|
|
29
|
+
safety: z.string(),
|
|
30
|
+
})),
|
|
31
|
+
provisionCount: z.number(),
|
|
32
|
+
provisions: z.array(z.object({
|
|
33
|
+
description: z.string().nullable(),
|
|
34
|
+
health: z.enum(['available', 'none']),
|
|
35
|
+
id: z.string(),
|
|
36
|
+
kind: z.literal('provision'),
|
|
37
|
+
lifetime: z.literal('singleton'),
|
|
38
|
+
usedBy: z.array(z.string()),
|
|
39
|
+
})),
|
|
40
|
+
}),
|
|
41
|
+
lockExists: z.boolean(),
|
|
42
|
+
lockPath: z.string(),
|
|
43
|
+
});
|
|
44
|
+
export const topoTrail = trail('topo', {
|
|
45
|
+
blaze: async (input, ctx) => {
|
|
46
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
47
|
+
const app = await loadApp(input.module, rootDir);
|
|
48
|
+
return Result.ok(buildTopoSummary(app, { rootDir }));
|
|
49
|
+
},
|
|
50
|
+
description: 'Show the current topo summary and entry list',
|
|
51
|
+
examples: [
|
|
52
|
+
{
|
|
53
|
+
input: {},
|
|
54
|
+
name: 'Show the current topo summary',
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
input: z.object({
|
|
58
|
+
module: z
|
|
59
|
+
.string()
|
|
60
|
+
.default(DEFAULT_APP_MODULE)
|
|
61
|
+
.describe('Path to the app module'),
|
|
62
|
+
rootDir: z.string().optional().describe('Workspace root directory'),
|
|
63
|
+
}),
|
|
64
|
+
intent: 'read',
|
|
65
|
+
output: summaryOutput,
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=topo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo.js","sourceRoot":"","sources":["../../../src/trails/topo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warden.d.ts","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,eAAO,MAAM,WAAW;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"warden.d.ts","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,eAAO,MAAM,WAAW;;;;;;;;;;;;EAkFtB,CAAC"}
|
|
@@ -11,6 +11,33 @@ import { loadApp } from './load-app.js';
|
|
|
11
11
|
// Trail definition
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
export const wardenTrail = trail('warden', {
|
|
14
|
+
blaze: async (input, ctx) => {
|
|
15
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
16
|
+
// oxlint-disable-next-line prefer-await-to-then -- catch converts rejection to undefined cleanly
|
|
17
|
+
const topo = await loadApp('./src/app.ts', rootDir).catch(() => undefined);
|
|
18
|
+
const report = await runWarden({
|
|
19
|
+
driftOnly: input.driftOnly,
|
|
20
|
+
lintOnly: input.lintOnly,
|
|
21
|
+
rootDir,
|
|
22
|
+
topo,
|
|
23
|
+
});
|
|
24
|
+
const formatters = {
|
|
25
|
+
github: formatGitHubAnnotations,
|
|
26
|
+
json: formatJson,
|
|
27
|
+
summary: formatSummary,
|
|
28
|
+
text: formatWardenReport,
|
|
29
|
+
};
|
|
30
|
+
const formatter = formatters[input.format] ?? formatWardenReport;
|
|
31
|
+
const formatted = formatter(report);
|
|
32
|
+
return Result.ok({
|
|
33
|
+
diagnostics: report.diagnostics,
|
|
34
|
+
drift: report.drift,
|
|
35
|
+
errorCount: report.errorCount,
|
|
36
|
+
formatted,
|
|
37
|
+
passed: report.passed,
|
|
38
|
+
warnCount: report.warnCount,
|
|
39
|
+
});
|
|
40
|
+
},
|
|
14
41
|
description: 'Run governance checks (lint + drift)',
|
|
15
42
|
examples: [
|
|
16
43
|
{
|
|
@@ -47,6 +74,7 @@ export const wardenTrail = trail('warden', {
|
|
|
47
74
|
})),
|
|
48
75
|
drift: z
|
|
49
76
|
.object({
|
|
77
|
+
blockedReason: z.string().optional(),
|
|
50
78
|
committedHash: z.string().nullable(),
|
|
51
79
|
currentHash: z.string(),
|
|
52
80
|
stale: z.boolean(),
|
|
@@ -57,32 +85,5 @@ export const wardenTrail = trail('warden', {
|
|
|
57
85
|
passed: z.boolean(),
|
|
58
86
|
warnCount: z.number(),
|
|
59
87
|
}),
|
|
60
|
-
run: async (input, ctx) => {
|
|
61
|
-
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
62
|
-
// oxlint-disable-next-line prefer-await-to-then -- catch converts rejection to undefined cleanly
|
|
63
|
-
const topo = await loadApp('./src/app.ts', rootDir).catch(() => undefined);
|
|
64
|
-
const report = await runWarden({
|
|
65
|
-
driftOnly: input.driftOnly,
|
|
66
|
-
lintOnly: input.lintOnly,
|
|
67
|
-
rootDir,
|
|
68
|
-
topo,
|
|
69
|
-
});
|
|
70
|
-
const formatters = {
|
|
71
|
-
github: formatGitHubAnnotations,
|
|
72
|
-
json: formatJson,
|
|
73
|
-
summary: formatSummary,
|
|
74
|
-
text: formatWardenReport,
|
|
75
|
-
};
|
|
76
|
-
const formatter = formatters[input.format] ?? formatWardenReport;
|
|
77
|
-
const formatted = formatter(report);
|
|
78
|
-
return Result.ok({
|
|
79
|
-
diagnostics: report.diagnostics,
|
|
80
|
-
drift: report.drift,
|
|
81
|
-
errorCount: report.errorCount,
|
|
82
|
-
formatted,
|
|
83
|
-
passed: report.passed,
|
|
84
|
-
warnCount: report.warnCount,
|
|
85
|
-
});
|
|
86
|
-
},
|
|
87
88
|
});
|
|
88
89
|
//# sourceMappingURL=warden.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warden.js","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,sCAAsC;IACnD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;aAChB;YACD,IAAI,EAAE,oBAAoB;SAC3B;QACD;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,QAAQ;aACjB;YACD,IAAI,EAAE,4BAA4B;SACnC;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC1E,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aAC3C,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CAAC,+CAA+C,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAClE,CAAC;IACF,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,KAAK,CAClB,CAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACpC,CAAC,CACH;QACD,KAAK,EAAE,CAAC;aACL,MAAM,CAAC;YACN,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACpC,
|
|
1
|
+
{"version":3,"file":"warden.js","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,iGAAiG;QACjG,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CACvD,GAAc,EAAE,CAAC,SAAS,CAC3B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO;YACP,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,UAAU,GAAiD;YAC/D,MAAM,EAAE,uBAAuB;YAC/B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,kBAAkB;SACzB,CAAC;QACF,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC;QACjE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,MAAM,CAAC,EAAE,CAAC;YACf,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,WAAW,EAAE,sCAAsC;IACnD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;aAChB;YACD,IAAI,EAAE,oBAAoB;SAC3B;QACD;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,QAAQ;aACjB;YACD,IAAI,EAAE,4BAA4B;SACnC;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC1E,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aAC3C,OAAO,CAAC,MAAM,CAAC;aACf,QAAQ,CAAC,+CAA+C,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAClE,CAAC;IACF,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,KAAK,CAClB,CAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACpC,CAAC,CACH;QACD,KAAK,EAAE,CAAC;aACL,MAAM,CAAC;YACN,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACpC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACvB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;SACnB,CAAC;aACD,QAAQ,EAAE;QACb,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/app.ts","../src/clack.ts","../src/cli.ts","../src/trails/add-
|
|
1
|
+
{"root":["../src/app.ts","../src/clack.ts","../src/cli.ts","../src/trails/add-trail.ts","../src/trails/add-trailhead.ts","../src/trails/add-verify.ts","../src/trails/create-scaffold.ts","../src/trails/create.ts","../src/trails/dev-clean.ts","../src/trails/dev-reset.ts","../src/trails/dev-stats.ts","../src/trails/dev-support.ts","../src/trails/draft-promote.ts","../src/trails/guide.ts","../src/trails/load-app.ts","../src/trails/project.ts","../src/trails/survey.ts","../src/trails/topo-constants.ts","../src/trails/topo-export.ts","../src/trails/topo-history.ts","../src/trails/topo-pin.ts","../src/trails/topo-read-support.ts","../src/trails/topo-reports.ts","../src/trails/topo-show.ts","../src/trails/topo-store-support.ts","../src/trails/topo-support.ts","../src/trails/topo-unpin.ts","../src/trails/topo-verify.ts","../src/trails/topo.ts","../src/trails/warden.ts","../bin/trails.ts"],"version":"5.9.3"}
|