@ontrails/trails 1.0.0-beta.12 → 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 +40 -12
- 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__/create.test.ts +35 -33
- package/src/__tests__/draft-promote.test.ts +144 -0
- package/src/__tests__/guide.test.ts +4 -4
- package/src/__tests__/load-app.test.ts +43 -0
- package/src/__tests__/survey.test.ts +140 -55
- package/src/__tests__/topo-dev.test.ts +424 -0
- package/src/__tests__/warden.test.ts +2 -2
- package/src/app.ts +24 -2
- package/src/clack.ts +1 -1
- package/src/cli.ts +2 -2
- package/src/trails/add-trail.ts +13 -13
- package/src/trails/{add-surface.ts → add-trailhead.ts} +39 -37
- package/src/trails/add-verify.ts +10 -10
- package/src/trails/create-scaffold.ts +28 -28
- package/src/trails/create.ts +42 -42
- 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 +29 -44
- package/src/trails/load-app.ts +76 -13
- package/src/trails/project.ts +17 -3
- package/src/trails/survey.ts +80 -279
- 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 +33 -32
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `create` route -- Create a new Trails project.
|
|
3
3
|
*
|
|
4
|
-
* Composes create.scaffold, add.
|
|
5
|
-
* via ctx.
|
|
4
|
+
* Composes create.scaffold, add.trailhead, and add.verify sub-trails
|
|
5
|
+
* via ctx.cross().
|
|
6
6
|
*/
|
|
7
7
|
import { Result, trail } from '@ontrails/core';
|
|
8
8
|
import { z } from 'zod';
|
|
@@ -11,19 +11,19 @@ const buildScaffoldInput = (input) => ({
|
|
|
11
11
|
name: input.name,
|
|
12
12
|
starter: input.starter,
|
|
13
13
|
});
|
|
14
|
-
const
|
|
14
|
+
const buildTrailheadInput = (dir, trailhead) => ({
|
|
15
15
|
dir,
|
|
16
|
-
|
|
16
|
+
trailhead,
|
|
17
17
|
});
|
|
18
18
|
const buildVerifyInput = (input) => ({
|
|
19
19
|
...(input.dir === undefined ? {} : { dir: input.dir }),
|
|
20
20
|
name: input.name,
|
|
21
21
|
});
|
|
22
|
-
const scaffoldProject = (
|
|
23
|
-
const
|
|
22
|
+
const scaffoldProject = (cross, input) => cross('create.scaffold', buildScaffoldInput(input));
|
|
23
|
+
const addTrailheadFiles = async (cross, dir, trailheads) => {
|
|
24
24
|
const created = [];
|
|
25
|
-
for (const
|
|
26
|
-
const result = await
|
|
25
|
+
for (const trailhead of trailheads) {
|
|
26
|
+
const result = await cross('add.trailhead', buildTrailheadInput(dir, trailhead));
|
|
27
27
|
if (result.isErr()) {
|
|
28
28
|
return Result.err(result.error);
|
|
29
29
|
}
|
|
@@ -31,31 +31,31 @@ const addSurfaceFiles = async (follow, dir, surfaces) => {
|
|
|
31
31
|
}
|
|
32
32
|
return Result.ok(created);
|
|
33
33
|
};
|
|
34
|
-
const collectVerifyFiles = async (
|
|
34
|
+
const collectVerifyFiles = async (cross, input) => {
|
|
35
35
|
if (!input.verify) {
|
|
36
36
|
return Result.ok([]);
|
|
37
37
|
}
|
|
38
|
-
const result = await
|
|
38
|
+
const result = await cross('add.verify', buildVerifyInput(input));
|
|
39
39
|
return result.isErr()
|
|
40
40
|
? Result.err(result.error)
|
|
41
41
|
: Result.ok(result.value.created);
|
|
42
42
|
};
|
|
43
|
-
const collectCreatedFiles = (scaffolded,
|
|
44
|
-
const runCreate = async (
|
|
45
|
-
const scaffolded = await scaffoldProject(
|
|
43
|
+
const collectCreatedFiles = (scaffolded, trailheads, verify) => [...scaffolded, ...trailheads, ...verify];
|
|
44
|
+
const runCreate = async (cross, input) => {
|
|
45
|
+
const scaffolded = await scaffoldProject(cross, input);
|
|
46
46
|
if (scaffolded.isErr()) {
|
|
47
47
|
return Result.err(scaffolded.error);
|
|
48
48
|
}
|
|
49
|
-
const
|
|
50
|
-
if (
|
|
51
|
-
return Result.err(
|
|
49
|
+
const trailheadResults = await addTrailheadFiles(cross, scaffolded.value.dir, input.trailheads);
|
|
50
|
+
if (trailheadResults.isErr()) {
|
|
51
|
+
return Result.err(trailheadResults.error);
|
|
52
52
|
}
|
|
53
|
-
const verifyFiles = await collectVerifyFiles(
|
|
53
|
+
const verifyFiles = await collectVerifyFiles(cross, input);
|
|
54
54
|
if (verifyFiles.isErr()) {
|
|
55
55
|
return Result.err(verifyFiles.error);
|
|
56
56
|
}
|
|
57
57
|
return Result.ok({
|
|
58
|
-
created: collectCreatedFiles(scaffolded.value.created,
|
|
58
|
+
created: collectCreatedFiles(scaffolded.value.created, trailheadResults.value, verifyFiles.value),
|
|
59
59
|
dir: scaffolded.value.dir,
|
|
60
60
|
name: input.name,
|
|
61
61
|
});
|
|
@@ -64,6 +64,13 @@ const runCreate = async (follow, input) => {
|
|
|
64
64
|
// Route definition
|
|
65
65
|
// ---------------------------------------------------------------------------
|
|
66
66
|
export const createRoute = trail('create', {
|
|
67
|
+
blaze: async (input, ctx) => {
|
|
68
|
+
if (!ctx.cross) {
|
|
69
|
+
return Result.err(new Error('create route requires ctx.cross'));
|
|
70
|
+
}
|
|
71
|
+
return await runCreate(ctx.cross, input);
|
|
72
|
+
},
|
|
73
|
+
crosses: ['create.scaffold', 'add.trailhead', 'add.verify'],
|
|
67
74
|
description: 'Create a new Trails project',
|
|
68
75
|
fields: {
|
|
69
76
|
starter: {
|
|
@@ -74,14 +81,14 @@ export const createRoute = trail('create', {
|
|
|
74
81
|
value: 'hello',
|
|
75
82
|
},
|
|
76
83
|
{
|
|
77
|
-
hint: '4 trails,
|
|
84
|
+
hint: '4 trails, signal, store',
|
|
78
85
|
label: 'Entity CRUD',
|
|
79
86
|
value: 'entity',
|
|
80
87
|
},
|
|
81
88
|
{ hint: 'Just the structure', label: 'Empty', value: 'empty' },
|
|
82
89
|
],
|
|
83
90
|
},
|
|
84
|
-
|
|
91
|
+
trailheads: {
|
|
85
92
|
options: [
|
|
86
93
|
{ hint: 'Commander-based command line', label: 'CLI', value: 'cli' },
|
|
87
94
|
{
|
|
@@ -92,7 +99,6 @@ export const createRoute = trail('create', {
|
|
|
92
99
|
],
|
|
93
100
|
},
|
|
94
101
|
},
|
|
95
|
-
follow: ['create.scaffold', 'add.surface', 'add.verify'],
|
|
96
102
|
input: z.object({
|
|
97
103
|
dir: z.string().optional().describe('Parent directory'),
|
|
98
104
|
name: z.string().describe('Project name'),
|
|
@@ -100,10 +106,10 @@ export const createRoute = trail('create', {
|
|
|
100
106
|
.enum(['hello', 'entity', 'empty'])
|
|
101
107
|
.default('hello')
|
|
102
108
|
.describe('Starter trail'),
|
|
103
|
-
|
|
109
|
+
trailheads: z
|
|
104
110
|
.array(z.enum(['cli', 'mcp']))
|
|
105
111
|
.default(['cli'])
|
|
106
|
-
.describe('
|
|
112
|
+
.describe('Trailheads'),
|
|
107
113
|
verify: z.boolean().default(true).describe('Include testing + warden'),
|
|
108
114
|
}),
|
|
109
115
|
output: z.object({
|
|
@@ -111,11 +117,5 @@ export const createRoute = trail('create', {
|
|
|
111
117
|
dir: z.string(),
|
|
112
118
|
name: z.string(),
|
|
113
119
|
}),
|
|
114
|
-
run: async (input, ctx) => {
|
|
115
|
-
if (!ctx.follow) {
|
|
116
|
-
return Result.err(new Error('create route requires ctx.follow'));
|
|
117
|
-
}
|
|
118
|
-
return await runCreate(ctx.follow, input);
|
|
119
|
-
},
|
|
120
120
|
});
|
|
121
121
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmCxB,MAAM,kBAAkB,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,CAAC;IACtD,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,OAAO,EAAE,KAAK,CAAC,OAAO;CACvB,CAAC,CAAC;AAEH,MAAM,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const devCleanTrail: import("@ontrails/core").Trail<{
|
|
2
|
+
dryRun: boolean;
|
|
3
|
+
saves: number;
|
|
4
|
+
trackAgeMs: number;
|
|
5
|
+
tracks: number;
|
|
6
|
+
yes: boolean;
|
|
7
|
+
rootDir?: string | undefined;
|
|
8
|
+
}, import("./dev-support.js").DevCleanReport>;
|
|
9
|
+
//# sourceMappingURL=dev-clean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-clean.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-clean.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;;;6CAkExB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Result, ValidationError, trail } from '@ontrails/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { cleanDevState, DEFAULT_TOPO_SAVE_RETENTION } from './dev-support.js';
|
|
4
|
+
import { isolatedExampleInput } from './topo-support.js';
|
|
5
|
+
export const devCleanTrail = trail('dev.clean', {
|
|
6
|
+
blaze: (input, ctx) => {
|
|
7
|
+
if (input.dryRun !== true && input.yes !== true) {
|
|
8
|
+
return Result.err(new ValidationError('Refusing to clean local state without `--yes` or `--dry-run`.'));
|
|
9
|
+
}
|
|
10
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
11
|
+
return Result.ok(cleanDevState({
|
|
12
|
+
dryRun: input.dryRun,
|
|
13
|
+
maxAge: input.trackAgeMs,
|
|
14
|
+
maxRecords: input.tracks,
|
|
15
|
+
rootDir,
|
|
16
|
+
saveRetention: input.saves,
|
|
17
|
+
}));
|
|
18
|
+
},
|
|
19
|
+
description: 'Prune unpinned topo saves and old track records',
|
|
20
|
+
examples: [
|
|
21
|
+
{
|
|
22
|
+
input: {
|
|
23
|
+
dryRun: true,
|
|
24
|
+
rootDir: isolatedExampleInput('dev-clean').rootDir,
|
|
25
|
+
},
|
|
26
|
+
name: 'Preview local cleanup',
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
input: z.object({
|
|
30
|
+
dryRun: z
|
|
31
|
+
.boolean()
|
|
32
|
+
.default(true)
|
|
33
|
+
.describe('Preview cleanup without changing state'),
|
|
34
|
+
rootDir: z.string().optional().describe('Workspace root directory'),
|
|
35
|
+
saves: z
|
|
36
|
+
.number()
|
|
37
|
+
.default(DEFAULT_TOPO_SAVE_RETENTION)
|
|
38
|
+
.describe('Unpinned topo saves to retain'),
|
|
39
|
+
trackAgeMs: z
|
|
40
|
+
.number()
|
|
41
|
+
.default(7 * 24 * 60 * 60 * 1000)
|
|
42
|
+
.describe('Maximum retained track age in milliseconds'),
|
|
43
|
+
tracks: z.number().default(10_000).describe('Maximum retained track count'),
|
|
44
|
+
yes: z.boolean().default(false).describe('Confirm destructive changes'),
|
|
45
|
+
}),
|
|
46
|
+
intent: 'destroy',
|
|
47
|
+
output: z.object({
|
|
48
|
+
dryRun: z.boolean(),
|
|
49
|
+
remaining: z.object({
|
|
50
|
+
pinCount: z.number(),
|
|
51
|
+
saveCount: z.number(),
|
|
52
|
+
trackCount: z.number(),
|
|
53
|
+
}),
|
|
54
|
+
removed: z.object({
|
|
55
|
+
topoSaves: z.number(),
|
|
56
|
+
trackRecords: z.number(),
|
|
57
|
+
}),
|
|
58
|
+
retention: z.object({
|
|
59
|
+
saves: z.number(),
|
|
60
|
+
trackAgeMs: z.number(),
|
|
61
|
+
tracks: z.number(),
|
|
62
|
+
}),
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=dev-clean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-clean.js","sourceRoot":"","sources":["../../../src/trails/dev-clean.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,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE;IAC9C,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,+DAA+D,CAChE,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;YACZ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO;YACP,aAAa,EAAE,KAAK,CAAC,KAAK;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,WAAW,EAAE,iDAAiD;IAC9D,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,OAAO;aACnD;YACD,IAAI,EAAE,uBAAuB;SAC9B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,wCAAwC,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACnE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,OAAO,CAAC,2BAA2B,CAAC;aACpC,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;aAChC,QAAQ,CAAC,4CAA4C,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3E,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,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;SACvB,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;SACzB,CAAC;QACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-reset.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-reset.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;6CAqCxB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Result, ValidationError, trail } from '@ontrails/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { resetDevState } from './dev-support.js';
|
|
4
|
+
import { isolatedExampleInput } from './topo-support.js';
|
|
5
|
+
export const devResetTrail = trail('dev.reset', {
|
|
6
|
+
blaze: (input, ctx) => {
|
|
7
|
+
if (input.dryRun !== true && input.yes !== true) {
|
|
8
|
+
return Result.err(new ValidationError('Refusing to reset local state without `--yes` or `--dry-run`.'));
|
|
9
|
+
}
|
|
10
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
11
|
+
return Result.ok(resetDevState({ dryRun: input.dryRun, rootDir }));
|
|
12
|
+
},
|
|
13
|
+
description: 'Remove local Trails database artifacts',
|
|
14
|
+
examples: [
|
|
15
|
+
{
|
|
16
|
+
input: {
|
|
17
|
+
dryRun: true,
|
|
18
|
+
rootDir: isolatedExampleInput('dev-reset').rootDir,
|
|
19
|
+
},
|
|
20
|
+
name: 'Preview local reset',
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
input: z.object({
|
|
24
|
+
dryRun: z
|
|
25
|
+
.boolean()
|
|
26
|
+
.default(true)
|
|
27
|
+
.describe('Preview reset without changing state'),
|
|
28
|
+
rootDir: z.string().optional().describe('Workspace root directory'),
|
|
29
|
+
yes: z.boolean().default(false).describe('Confirm destructive changes'),
|
|
30
|
+
}),
|
|
31
|
+
intent: 'destroy',
|
|
32
|
+
output: z.object({
|
|
33
|
+
dryRun: z.boolean(),
|
|
34
|
+
removedCount: z.number(),
|
|
35
|
+
removedFiles: z.array(z.string()),
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=dev-reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-reset.js","sourceRoot":"","sources":["../../../src/trails/dev-reset.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,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE;IAC9C,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,+DAA+D,CAChE,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,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,WAAW,EAAE,wCAAwC;IACrD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,OAAO;aACnD;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,sCAAsC,CAAC;QACnD,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,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAClC,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-stats.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-stats.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;6CAyDxB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Result, trail } from '@ontrails/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { buildDevStats, DEFAULT_TOPO_SAVE_RETENTION } from './dev-support.js';
|
|
4
|
+
import { isolatedExampleInput } from './topo-support.js';
|
|
5
|
+
export const devStatsTrail = trail('dev.stats', {
|
|
6
|
+
blaze: (input, ctx) => {
|
|
7
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
8
|
+
return Result.ok(buildDevStats({
|
|
9
|
+
maxAge: input.trackAgeMs,
|
|
10
|
+
maxRecords: input.tracks,
|
|
11
|
+
rootDir,
|
|
12
|
+
saveRetention: input.saves,
|
|
13
|
+
}));
|
|
14
|
+
},
|
|
15
|
+
description: 'Show local Trails workspace state and retention',
|
|
16
|
+
examples: [
|
|
17
|
+
{
|
|
18
|
+
input: { rootDir: isolatedExampleInput('dev-stats').rootDir },
|
|
19
|
+
name: 'Show local dev state',
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
input: z.object({
|
|
23
|
+
rootDir: z.string().optional().describe('Workspace root directory'),
|
|
24
|
+
saves: z
|
|
25
|
+
.number()
|
|
26
|
+
.default(DEFAULT_TOPO_SAVE_RETENTION)
|
|
27
|
+
.describe('Unpinned topo saves to retain'),
|
|
28
|
+
trackAgeMs: z
|
|
29
|
+
.number()
|
|
30
|
+
.default(7 * 24 * 60 * 60 * 1000)
|
|
31
|
+
.describe('Maximum retained track age in milliseconds'),
|
|
32
|
+
tracks: z.number().default(10_000).describe('Maximum retained track count'),
|
|
33
|
+
}),
|
|
34
|
+
intent: 'read',
|
|
35
|
+
output: z.object({
|
|
36
|
+
db: z.object({
|
|
37
|
+
exists: z.boolean(),
|
|
38
|
+
fileSizeBytes: z.number(),
|
|
39
|
+
path: z.string(),
|
|
40
|
+
}),
|
|
41
|
+
lock: z.object({
|
|
42
|
+
exists: z.boolean(),
|
|
43
|
+
fileSizeBytes: z.number(),
|
|
44
|
+
path: z.string(),
|
|
45
|
+
}),
|
|
46
|
+
retention: z.object({
|
|
47
|
+
saves: z.number(),
|
|
48
|
+
trackAgeMs: z.number(),
|
|
49
|
+
tracks: z.number(),
|
|
50
|
+
}),
|
|
51
|
+
topo: z.object({
|
|
52
|
+
pinCount: z.number(),
|
|
53
|
+
prunableSaveCount: z.number(),
|
|
54
|
+
saveCount: z.number(),
|
|
55
|
+
}),
|
|
56
|
+
tracker: z.object({
|
|
57
|
+
recordCount: z.number(),
|
|
58
|
+
}),
|
|
59
|
+
}),
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=dev-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-stats.js","sourceRoot":"","sources":["../../../src/trails/dev-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE;IAC9C,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,EAAE,CACd,aAAa,CAAC;YACZ,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO;YACP,aAAa,EAAE,KAAK,CAAC,KAAK;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,WAAW,EAAE,iDAAiD;IAC9D,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;YAC7D,IAAI,EAAE,sBAAsB;SAC7B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACnE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,OAAO,CAAC,2BAA2B,CAAC;aACpC,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;aAChC,QAAQ,CAAC,4CAA4C,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC5E,CAAC;IACF,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;YACX,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,CAAC;QACF,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,CAAC;QACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;QACF,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;YAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;SACtB,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;SACxB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export declare const DEFAULT_TOPO_SAVE_RETENTION = 50;
|
|
2
|
+
export interface DevStatsReport {
|
|
3
|
+
readonly db: {
|
|
4
|
+
readonly exists: boolean;
|
|
5
|
+
readonly fileSizeBytes: number;
|
|
6
|
+
readonly path: string;
|
|
7
|
+
};
|
|
8
|
+
readonly lock: {
|
|
9
|
+
readonly exists: boolean;
|
|
10
|
+
readonly fileSizeBytes: number;
|
|
11
|
+
readonly path: string;
|
|
12
|
+
};
|
|
13
|
+
readonly retention: {
|
|
14
|
+
readonly saves: number;
|
|
15
|
+
readonly trackAgeMs: number;
|
|
16
|
+
readonly tracks: number;
|
|
17
|
+
};
|
|
18
|
+
readonly topo: {
|
|
19
|
+
readonly pinCount: number;
|
|
20
|
+
readonly prunableSaveCount: number;
|
|
21
|
+
readonly saveCount: number;
|
|
22
|
+
};
|
|
23
|
+
readonly tracker: {
|
|
24
|
+
readonly recordCount: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface DevCleanReport {
|
|
28
|
+
readonly dryRun: boolean;
|
|
29
|
+
readonly remaining: {
|
|
30
|
+
readonly pinCount: number;
|
|
31
|
+
readonly saveCount: number;
|
|
32
|
+
readonly trackCount: number;
|
|
33
|
+
};
|
|
34
|
+
readonly removed: {
|
|
35
|
+
readonly topoSaves: number;
|
|
36
|
+
readonly trackRecords: number;
|
|
37
|
+
};
|
|
38
|
+
readonly retention: {
|
|
39
|
+
readonly saves: number;
|
|
40
|
+
readonly trackAgeMs: number;
|
|
41
|
+
readonly tracks: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface DevResetReport {
|
|
45
|
+
readonly dryRun: boolean;
|
|
46
|
+
readonly removedCount: number;
|
|
47
|
+
readonly removedFiles: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
interface DevRetentionOptions {
|
|
50
|
+
readonly maxAge?: number;
|
|
51
|
+
readonly maxRecords?: number;
|
|
52
|
+
readonly rootDir?: string;
|
|
53
|
+
readonly saveRetention?: number;
|
|
54
|
+
}
|
|
55
|
+
export declare const buildDevStats: (options?: DevRetentionOptions) => DevStatsReport;
|
|
56
|
+
export declare const cleanDevState: (options?: DevRetentionOptions & {
|
|
57
|
+
readonly dryRun?: boolean;
|
|
58
|
+
}) => DevCleanReport;
|
|
59
|
+
export declare const resetDevState: (options?: {
|
|
60
|
+
readonly dryRun?: boolean;
|
|
61
|
+
readonly rootDir?: string;
|
|
62
|
+
}) => DevResetReport;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=dev-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-support.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-support.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAY9C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE;QACX,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AA2KD,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,KAC5B,cAeF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,GAAG;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KAC5D,cAeF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,UAAU;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,KAAG,cAqBH,CAAC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { existsSync, rmSync, statSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { countPrunableTopoSaves, countTopoPins, countTopoSaves, pruneUnpinnedTopoSaves, } from '@ontrails/core/internal/topo-saves';
|
|
4
|
+
import { openReadTrailsDb, openWriteTrailsDb, resolveTrailsDbPath, resolveTrailsDir, } from '@ontrails/core/internal/trails-db';
|
|
5
|
+
import { DEFAULT_MAX_AGE, DEFAULT_MAX_RECORDS, applyTrackCleanup, countTrackRecords, previewTrackCleanup, } from '@ontrails/tracker/internal/dev-state';
|
|
6
|
+
import { resolveLockPath } from './topo-support.js';
|
|
7
|
+
export const DEFAULT_TOPO_SAVE_RETENTION = 50;
|
|
8
|
+
const resolveRootDir = (cwd) => cwd ?? process.cwd();
|
|
9
|
+
const removeIfPresent = (filePath) => {
|
|
10
|
+
if (!existsSync(filePath)) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
rmSync(filePath, { force: true });
|
|
14
|
+
return true;
|
|
15
|
+
};
|
|
16
|
+
const buildRetention = (options) => ({
|
|
17
|
+
saves: options?.saveRetention ?? DEFAULT_TOPO_SAVE_RETENTION,
|
|
18
|
+
trackAgeMs: options?.maxAge ?? DEFAULT_MAX_AGE,
|
|
19
|
+
tracks: options?.maxRecords ?? DEFAULT_MAX_RECORDS,
|
|
20
|
+
});
|
|
21
|
+
const emptyDevClean = (retention, dryRun) => ({
|
|
22
|
+
dryRun,
|
|
23
|
+
remaining: {
|
|
24
|
+
pinCount: 0,
|
|
25
|
+
saveCount: 0,
|
|
26
|
+
trackCount: 0,
|
|
27
|
+
},
|
|
28
|
+
removed: {
|
|
29
|
+
topoSaves: 0,
|
|
30
|
+
trackRecords: 0,
|
|
31
|
+
},
|
|
32
|
+
retention,
|
|
33
|
+
});
|
|
34
|
+
const buildLockStats = (lockPath) => ({
|
|
35
|
+
exists: existsSync(lockPath),
|
|
36
|
+
fileSizeBytes: existsSync(lockPath) ? statSync(lockPath).size : 0,
|
|
37
|
+
path: lockPath,
|
|
38
|
+
});
|
|
39
|
+
const buildDbStats = (dbPath, exists) => ({
|
|
40
|
+
exists,
|
|
41
|
+
fileSizeBytes: exists ? statSync(dbPath).size : 0,
|
|
42
|
+
path: '.trails/trails.db',
|
|
43
|
+
});
|
|
44
|
+
const emptyDevStats = (dbPath, lockPath, retention) => ({
|
|
45
|
+
db: buildDbStats(dbPath, false),
|
|
46
|
+
lock: buildLockStats(lockPath),
|
|
47
|
+
retention,
|
|
48
|
+
topo: {
|
|
49
|
+
pinCount: 0,
|
|
50
|
+
prunableSaveCount: 0,
|
|
51
|
+
saveCount: 0,
|
|
52
|
+
},
|
|
53
|
+
tracker: {
|
|
54
|
+
recordCount: 0,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const liveDevStats = (db, dbPath, lockPath, retention) => ({
|
|
58
|
+
db: buildDbStats(dbPath, true),
|
|
59
|
+
lock: buildLockStats(lockPath),
|
|
60
|
+
retention,
|
|
61
|
+
topo: {
|
|
62
|
+
pinCount: countTopoPins(db),
|
|
63
|
+
prunableSaveCount: countPrunableTopoSaves(db, { keep: retention.saves }),
|
|
64
|
+
saveCount: countTopoSaves(db),
|
|
65
|
+
},
|
|
66
|
+
tracker: {
|
|
67
|
+
recordCount: countTrackRecords(db),
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
const resolveDevStatsContext = (options) => {
|
|
71
|
+
const rootDir = resolveRootDir(options?.rootDir);
|
|
72
|
+
const dbPath = resolveTrailsDbPath({ rootDir });
|
|
73
|
+
const trailsDir = resolveTrailsDir({ rootDir });
|
|
74
|
+
const lockPath = resolveLockPath(trailsDir);
|
|
75
|
+
return {
|
|
76
|
+
dbExists: existsSync(dbPath),
|
|
77
|
+
dbPath,
|
|
78
|
+
lockPath,
|
|
79
|
+
retention: buildRetention(options),
|
|
80
|
+
rootDir,
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
const resolveDevCleanupContext = (options) => {
|
|
84
|
+
const rootDir = resolveRootDir(options?.rootDir);
|
|
85
|
+
return {
|
|
86
|
+
dbPath: resolveTrailsDbPath({ rootDir }),
|
|
87
|
+
dryRun: options?.dryRun ?? false,
|
|
88
|
+
retention: buildRetention(options),
|
|
89
|
+
rootDir,
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
const cleanupTracks = (db, context) => context.dryRun
|
|
93
|
+
? previewTrackCleanup(db, {
|
|
94
|
+
maxAge: context.retention.trackAgeMs,
|
|
95
|
+
maxRecords: context.retention.tracks,
|
|
96
|
+
})
|
|
97
|
+
: applyTrackCleanup(db, {
|
|
98
|
+
maxAge: context.retention.trackAgeMs,
|
|
99
|
+
maxRecords: context.retention.tracks,
|
|
100
|
+
});
|
|
101
|
+
const cleanupTopoSaves = (db, context) => context.dryRun
|
|
102
|
+
? countPrunableTopoSaves(db, { keep: context.retention.saves })
|
|
103
|
+
: pruneUnpinnedTopoSaves(db, { keep: context.retention.saves });
|
|
104
|
+
const buildCleanReport = (db, context) => {
|
|
105
|
+
const trackReport = cleanupTracks(db, context);
|
|
106
|
+
const topoRemoved = cleanupTopoSaves(db, context);
|
|
107
|
+
const saveCount = countTopoSaves(db);
|
|
108
|
+
return {
|
|
109
|
+
dryRun: context.dryRun,
|
|
110
|
+
remaining: {
|
|
111
|
+
pinCount: countTopoPins(db),
|
|
112
|
+
saveCount: context.dryRun ? saveCount - topoRemoved : saveCount,
|
|
113
|
+
trackCount: context.dryRun
|
|
114
|
+
? trackReport.remaining - trackReport.removedTotal
|
|
115
|
+
: trackReport.remaining,
|
|
116
|
+
},
|
|
117
|
+
removed: {
|
|
118
|
+
topoSaves: topoRemoved,
|
|
119
|
+
trackRecords: trackReport.removedTotal,
|
|
120
|
+
},
|
|
121
|
+
retention: context.retention,
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
const RESET_FILES = [
|
|
125
|
+
'.trails/trails.db',
|
|
126
|
+
'.trails/trails.db-shm',
|
|
127
|
+
'.trails/trails.db-wal',
|
|
128
|
+
'.trails/dev/tracker.db',
|
|
129
|
+
'.trails/dev/tracker.db-shm',
|
|
130
|
+
'.trails/dev/tracker.db-wal',
|
|
131
|
+
];
|
|
132
|
+
const presentResetFiles = (rootDir) => RESET_FILES.filter((relativePath) => existsSync(join(rootDir, relativePath)));
|
|
133
|
+
export const buildDevStats = (options) => {
|
|
134
|
+
const { dbExists, dbPath, lockPath, retention, rootDir } = resolveDevStatsContext(options);
|
|
135
|
+
if (!dbExists) {
|
|
136
|
+
return emptyDevStats(dbPath, lockPath, retention);
|
|
137
|
+
}
|
|
138
|
+
const db = openReadTrailsDb({ rootDir });
|
|
139
|
+
try {
|
|
140
|
+
return liveDevStats(db, dbPath, lockPath, retention);
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
db.close();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
export const cleanDevState = (options) => {
|
|
147
|
+
const context = resolveDevCleanupContext(options);
|
|
148
|
+
if (!existsSync(context.dbPath)) {
|
|
149
|
+
return emptyDevClean(context.retention, context.dryRun);
|
|
150
|
+
}
|
|
151
|
+
const db = context.dryRun
|
|
152
|
+
? openReadTrailsDb({ rootDir: context.rootDir })
|
|
153
|
+
: openWriteTrailsDb({ rootDir: context.rootDir });
|
|
154
|
+
try {
|
|
155
|
+
return buildCleanReport(db, context);
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
db.close();
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
export const resetDevState = (options) => {
|
|
162
|
+
const rootDir = resolveRootDir(options?.rootDir);
|
|
163
|
+
const files = presentResetFiles(rootDir);
|
|
164
|
+
if (options?.dryRun === true) {
|
|
165
|
+
return {
|
|
166
|
+
dryRun: true,
|
|
167
|
+
removedCount: files.length,
|
|
168
|
+
removedFiles: files,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const removedFiles = files.filter((relativePath) => removeIfPresent(join(rootDir, relativePath)));
|
|
172
|
+
return {
|
|
173
|
+
dryRun: false,
|
|
174
|
+
removedCount: removedFiles.length,
|
|
175
|
+
removedFiles,
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=dev-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-support.js","sourceRoot":"","sources":["../../../src/trails/dev-support.ts"],"names":[],"mappings":"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"}
|