@plexus-ms/lib 0.1.0 → 0.3.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/LICENSE +674 -0
- package/dist/bookkeeping.d.ts +26 -0
- package/dist/bookkeeping.d.ts.map +1 -0
- package/dist/bookkeeping.js +51 -0
- package/dist/bookkeeping.js.map +1 -0
- package/dist/catalog.d.ts +23 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +38 -0
- package/dist/catalog.js.map +1 -0
- package/dist/consumers.d.ts +31 -0
- package/dist/consumers.d.ts.map +1 -0
- package/dist/consumers.js +70 -0
- package/dist/consumers.js.map +1 -0
- package/dist/context.d.ts +7 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +19 -3
- package/dist/context.js.map +1 -1
- package/dist/doctor.d.ts +19 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +79 -0
- package/dist/doctor.js.map +1 -0
- package/dist/frontmatter.d.ts +9 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +42 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts +5 -1
- package/dist/io.d.ts.map +1 -1
- package/dist/io.js +5 -1
- package/dist/io.js.map +1 -1
- package/dist/overview.d.ts +5 -1
- package/dist/overview.d.ts.map +1 -1
- package/dist/overview.js +6 -7
- package/dist/overview.js.map +1 -1
- package/dist/plan.d.ts +2 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js.map +1 -1
- package/dist/propagate.d.ts +20 -0
- package/dist/propagate.d.ts.map +1 -0
- package/dist/propagate.js +226 -0
- package/dist/propagate.js.map +1 -0
- package/dist/requirements.d.ts +27 -0
- package/dist/requirements.d.ts.map +1 -0
- package/dist/requirements.js +188 -0
- package/dist/requirements.js.map +1 -0
- package/dist/ship.d.ts +18 -0
- package/dist/ship.d.ts.map +1 -0
- package/dist/ship.js +131 -0
- package/dist/ship.js.map +1 -0
- package/dist/train.d.ts +45 -0
- package/dist/train.d.ts.map +1 -0
- package/dist/train.js +102 -0
- package/dist/train.js.map +1 -0
- package/package.json +9 -10
package/dist/io.d.ts
CHANGED
|
@@ -4,7 +4,11 @@ export interface ExecOptions {
|
|
|
4
4
|
env?: NodeJS.ProcessEnv;
|
|
5
5
|
/** Fed to the process's stdin, then closed. */
|
|
6
6
|
input?: string;
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Pass the process's output through to the terminal instead of capturing it,
|
|
9
|
+
* and, when nothing is fed in, its input too: a program that asks questions
|
|
10
|
+
* (copier) gets to ask them.
|
|
11
|
+
*/
|
|
8
12
|
inherit?: boolean;
|
|
9
13
|
}
|
|
10
14
|
export interface Io {
|
package/dist/io.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,EAAE;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,qGAAqG;IACrG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,0DAA0D;IAC1D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM;CAMjE;AAED,yDAAyD;AACzD,eAAO,MAAM,aAAa,QAAO,OAAwE,CAAC;AAE1G,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAqChD;AAED,sFAAsF;AACtF,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAE9D"}
|
package/dist/io.js
CHANGED
|
@@ -25,7 +25,11 @@ export function realIo(prompt) {
|
|
|
25
25
|
const child = spawn(command, args, {
|
|
26
26
|
cwd: options.cwd,
|
|
27
27
|
env: options.env,
|
|
28
|
-
stdio: [
|
|
28
|
+
stdio: [
|
|
29
|
+
options.input !== undefined ? 'pipe' : options.inherit ? 'inherit' : 'ignore',
|
|
30
|
+
options.inherit ? 'inherit' : 'pipe',
|
|
31
|
+
'pipe',
|
|
32
|
+
],
|
|
29
33
|
});
|
|
30
34
|
let stdout = '';
|
|
31
35
|
let stderr = '';
|
package/dist/io.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4EAA4E;AAC5E,sEAAsE;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}
|
package/dist/overview.d.ts
CHANGED
|
@@ -2,5 +2,9 @@ import type { Context } from './context.ts';
|
|
|
2
2
|
import { type Directory } from './model.ts';
|
|
3
3
|
/** Heavy or generated directories never descended into. `.git` is the repo marker and is handled apart. */
|
|
4
4
|
export declare const PRUNED: Set<string>;
|
|
5
|
-
export
|
|
5
|
+
export interface ScanOptions {
|
|
6
|
+
/** Read the git facets (four git calls per repo); off for verbs that only need markers. */
|
|
7
|
+
git?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function overview(ctx: Context, root: string, options?: ScanOptions): Promise<Directory>;
|
|
6
10
|
//# sourceMappingURL=overview.d.ts.map
|
package/dist/overview.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../src/overview.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,KAAK,SAAS,EAA6D,MAAM,YAAY,CAAC;AAEvG,2GAA2G;AAC3G,eAAO,MAAM,MAAM,aAsBjB,CAAC;AAEH,
|
|
1
|
+
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../src/overview.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,KAAK,SAAS,EAA6D,MAAM,YAAY,CAAC;AAEvG,2GAA2G;AAC3G,eAAO,MAAM,MAAM,aAsBjB,CAAC;AAEH,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAElG"}
|
package/dist/overview.js
CHANGED
|
@@ -35,20 +35,19 @@ export const PRUNED = new Set([
|
|
|
35
35
|
'.terraform',
|
|
36
36
|
'.gradle',
|
|
37
37
|
]);
|
|
38
|
-
export
|
|
39
|
-
|
|
40
|
-
return dir;
|
|
38
|
+
export function overview(ctx, root, options = {}) {
|
|
39
|
+
return walk(ctx, root, root.replace(/\/+$/, '').split('/').pop() || root, { git: true, ...options });
|
|
41
40
|
}
|
|
42
|
-
async function walk(ctx, path, name) {
|
|
41
|
+
async function walk(ctx, path, name, options) {
|
|
43
42
|
const entries = await ctx.readDir(path);
|
|
44
43
|
const files = new Set(entries.filter((e) => !e.directory).map((e) => e.name));
|
|
45
44
|
const names = new Set(entries.map((e) => e.name));
|
|
46
45
|
const dir = { name, path, children: [] };
|
|
47
46
|
// `.git` is a directory for a checkout and a file for a worktree or submodule.
|
|
48
|
-
if (names.has('.git'))
|
|
47
|
+
if (names.has('.git') && options.git)
|
|
49
48
|
dir.git = await gitFacet(ctx, path);
|
|
50
49
|
if (TEMPLATE_FILES.some((f) => files.has(f)))
|
|
51
|
-
dir.template = await templateFacet(ctx, path);
|
|
50
|
+
dir.template = options.git ? await templateFacet(ctx, path) : {};
|
|
52
51
|
if (files.has(ANSWERS_FILE)) {
|
|
53
52
|
await facet(ctx, dir, ANSWERS_FILE, (text) => {
|
|
54
53
|
dir.copier = parseAnswers(text);
|
|
@@ -64,7 +63,7 @@ async function walk(ctx, path, name) {
|
|
|
64
63
|
.map((e) => e.name)
|
|
65
64
|
.sort();
|
|
66
65
|
for (const sub of subdirs) {
|
|
67
|
-
const child = await walk(ctx, join(path, sub), sub);
|
|
66
|
+
const child = await walk(ctx, join(path, sub), sub, options);
|
|
68
67
|
if (isNotable(child) || child.children.length > 0)
|
|
69
68
|
dir.children.push(child);
|
|
70
69
|
}
|
package/dist/overview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../src/overview.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,6EAA6E;AAC7E,uEAAuE;AACvE,EAAE;AACF,wDAAwD;AACxD,iDAAiD;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAiC,SAAS,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAC;AAEvG,2GAA2G;AAC3G,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;IAC5B,cAAc;IACd,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,aAAa;IACb,MAAM;IACN,OAAO;IACP,KAAK;IACL,SAAS;IACT,OAAO;IACP,MAAM;IACN,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,SAAS;CACV,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../src/overview.ts"],"names":[],"mappings":"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"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type Step = {
|
|
|
4
4
|
args: string[];
|
|
5
5
|
cwd?: string;
|
|
6
6
|
input?: string;
|
|
7
|
+
interactive?: boolean;
|
|
7
8
|
} | {
|
|
8
9
|
kind: 'ssh';
|
|
9
10
|
host: string;
|
|
@@ -17,6 +18,7 @@ export type Plan = Step[];
|
|
|
17
18
|
export declare const run: (command: string, args?: string[], options?: {
|
|
18
19
|
cwd?: string;
|
|
19
20
|
input?: string;
|
|
21
|
+
interactive?: boolean;
|
|
20
22
|
}) => Step;
|
|
21
23
|
/** Feed a bash script to a host: the remote half of a verb stays bash, carried verbatim. */
|
|
22
24
|
export declare const ssh: (host: string, script: string) => Step;
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACrG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;AAE1B,eAAO,MAAM,GAAG,GACd,SAAS,MAAM,EACf,OAAM,MAAM,EAAO,EACnB,UAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,KACpE,IAKD,CAAC;AAEH,4FAA4F;AAC5F,eAAO,MAAM,GAAG,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,IAAuC,CAAC;AAE3F,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,IAA0C,CAAC;AAEjG,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAS3C;AAED,6EAA6E;AAC7E,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CASnD"}
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,4EAA4E;AAC5E,wEAAwE;AACxE,+BAA+B;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AASjC,MAAM,CAAC,MAAM,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,4EAA4E;AAC5E,wEAAwE;AACxE,+BAA+B;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AASjC,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,OAAe,EACf,OAAiB,EAAE,EACnB,UAAmE,EAAE,EAC/D,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,KAAK;IACX,OAAO;IACP,IAAI;IACJ,GAAG,OAAO;CACX,CAAC,CAAC;AAEH,4FAA4F;AAC5F,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,MAAc,EAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjG,kDAAkD;AAClD,MAAM,UAAU,QAAQ,CAAC,IAAU;IACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC9G,KAAK,KAAK;YACR,OAAO,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC;QACjE,KAAK,OAAO;YACV,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACvE,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,IAAI,CAAC,IAAU;IAC7B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,KAAK,KAAK;YACR,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Context } from './context.ts';
|
|
2
|
+
export interface Summary {
|
|
3
|
+
train: string;
|
|
4
|
+
/** True for a dry run: nothing in the workspace changed. */
|
|
5
|
+
preview: boolean;
|
|
6
|
+
/** Sites, relative to the workspace. */
|
|
7
|
+
clean: string[];
|
|
8
|
+
conflicted: string[];
|
|
9
|
+
/** Sites whose update exited nonzero, and lockfiles that failed to refresh. */
|
|
10
|
+
failed: string[];
|
|
11
|
+
/** Consumers left untouched, with the reason. */
|
|
12
|
+
skipped: {
|
|
13
|
+
path: string;
|
|
14
|
+
reason: string;
|
|
15
|
+
}[];
|
|
16
|
+
}
|
|
17
|
+
/** True when nothing in the summary needs a human. */
|
|
18
|
+
export declare const isClean: (s: Summary) => boolean;
|
|
19
|
+
export declare function propagate(ctx: Context, workspace: string, train: string): Promise<Summary>;
|
|
20
|
+
//# sourceMappingURL=propagate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagate.d.ts","sourceRoot":"","sources":["../src/propagate.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAO5C,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iDAAiD;IACjD,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C;AAED,sDAAsD;AACtD,eAAO,MAAM,OAAO,GAAI,GAAG,OAAO,KAAG,OACyC,CAAC;AAI/E,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoEhG"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
// propagate: bring every consumer of the presets up to a train (§ 3 PLX-Updates).
|
|
2
|
+
//
|
|
3
|
+
// `copier update` at every consumer site in the workspace (tenant repo roots
|
|
4
|
+
// and their apps/*), then the marker synced to the answers file, lockfiles
|
|
5
|
+
// refreshed where manifests moved, and the consumers' hand-owned workflows
|
|
6
|
+
// pinned to the train. A consumer is touched only on its expected branch and
|
|
7
|
+
// with no tracked modifications (consumers.ts). Propagation never aborts the
|
|
8
|
+
// run: a failing or conflicting site is recorded and the rest continues; the
|
|
9
|
+
// summary says what needs a human. Reviewing diffs and committing the
|
|
10
|
+
// consumers stays human.
|
|
11
|
+
//
|
|
12
|
+
// The dry run is an honest preview: each consumer is cloned into a scratch
|
|
13
|
+
// directory and copier-updated there from the LOCAL preset checkout at main,
|
|
14
|
+
// so the diff and any conflicts show before a tag exists. That scratch work
|
|
15
|
+
// goes through `Context.stage`: performed in every mode, since nothing the
|
|
16
|
+
// operator owns changes.
|
|
17
|
+
//
|
|
18
|
+
// plx propagate ~/dev # to the current train
|
|
19
|
+
// plx -n propagate ~/dev # preview in scratch clones
|
|
20
|
+
// plx -y propagate ~/dev --train 0.66.0 # unattended: copier takes defaults
|
|
21
|
+
import { join, relative } from 'node:path';
|
|
22
|
+
import { bumpWorkflowRefs, hasConflictMarkers, hasUnmergedEntries, syncMarker, WORKFLOW_REF } from "./bookkeeping.js";
|
|
23
|
+
import { findConsumers, presetSource } from "./consumers.js";
|
|
24
|
+
import { ANSWERS_FILE, parseAnswers } from "./copier.js";
|
|
25
|
+
import { MARKER_FILE } from "./marker.js";
|
|
26
|
+
import { overview } from "./overview.js";
|
|
27
|
+
import { run, write } from "./plan.js";
|
|
28
|
+
import { TRAIN_REPOS, UPSTREAM } from "./train.js";
|
|
29
|
+
/** True when nothing in the summary needs a human. */
|
|
30
|
+
export const isClean = (s) => s.conflicted.length === 0 && s.failed.length === 0 && s.skipped.length === 0;
|
|
31
|
+
const PREVIEW_BASE = 'ship-base';
|
|
32
|
+
export async function propagate(ctx, workspace, train) {
|
|
33
|
+
const summary = { train, preview: ctx.dryRun, clean: [], conflicted: [], failed: [], skipped: [] };
|
|
34
|
+
const upstream = join(workspace, UPSTREAM);
|
|
35
|
+
const tree = await overview(ctx, workspace);
|
|
36
|
+
const upstreamDir = tree.children.find((c) => c.path === upstream);
|
|
37
|
+
const presets = TRAIN_REPOS.filter((r) => upstreamDir?.children.some((c) => c.name === r && c.template));
|
|
38
|
+
const consumers = await findConsumers(ctx, tree, presets);
|
|
39
|
+
for (const c of consumers) {
|
|
40
|
+
if (!c.skipped)
|
|
41
|
+
continue;
|
|
42
|
+
ctx.say(`⚠ ${c.rel}: ${c.skipped} — skipped (fix it, then re-run propagate)`);
|
|
43
|
+
summary.skipped.push({ path: c.rel, reason: c.skipped });
|
|
44
|
+
}
|
|
45
|
+
const active = consumers.filter((c) => !c.skipped);
|
|
46
|
+
const scratch = ctx.dryRun ? (await ctx.stage(run('mktemp', ['-d'])))?.trim() : undefined;
|
|
47
|
+
const clones = new Map();
|
|
48
|
+
/** The preview clone of a consumer, made on first use, with the base marked for diffing manifests. */
|
|
49
|
+
const cloneOf = async (consumer) => {
|
|
50
|
+
let clone = clones.get(consumer.path);
|
|
51
|
+
if (!clone) {
|
|
52
|
+
clone = join(scratch ?? '', consumer.rel);
|
|
53
|
+
await ctx.stage(run('git', ['clone', '--quiet', consumer.path, clone]));
|
|
54
|
+
await ctx.stage(run('git', ['tag', PREVIEW_BASE], { cwd: clone }));
|
|
55
|
+
clones.set(consumer.path, clone);
|
|
56
|
+
}
|
|
57
|
+
return clone;
|
|
58
|
+
};
|
|
59
|
+
// Preview commits are plain plumbing on a throwaway clone: unsigned, no hooks, a stand-in identity.
|
|
60
|
+
const previewCommit = (clone, message) => ctx
|
|
61
|
+
.stage(run('git', ['add', '-A'], { cwd: clone }))
|
|
62
|
+
.then(() => ctx.stage(run('git', [
|
|
63
|
+
'-c',
|
|
64
|
+
'commit.gpgsign=false',
|
|
65
|
+
'-c',
|
|
66
|
+
'user.name=plx',
|
|
67
|
+
'-c',
|
|
68
|
+
'user.email=plx@localhost',
|
|
69
|
+
'commit',
|
|
70
|
+
'--quiet',
|
|
71
|
+
'--no-verify',
|
|
72
|
+
'--allow-empty',
|
|
73
|
+
'-m',
|
|
74
|
+
message,
|
|
75
|
+
], { cwd: clone })));
|
|
76
|
+
try {
|
|
77
|
+
for (const preset of presets) {
|
|
78
|
+
const sites = active.flatMap((c) => c.sites.filter((s) => s.preset === preset).map((s) => [c, s]));
|
|
79
|
+
if (sites.length === 0)
|
|
80
|
+
ctx.say(`• no consumers of ${presetSource(preset)} found under ${workspace}`);
|
|
81
|
+
for (const [consumer, site] of sites)
|
|
82
|
+
await updateSite(ctx, consumer, site, join(upstream, preset), summary, cloneOf, previewCommit);
|
|
83
|
+
}
|
|
84
|
+
await refreshLockfiles(ctx, active, summary, clones);
|
|
85
|
+
await bumpConsumerRefs(ctx, consumers, train);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
if (scratch)
|
|
89
|
+
await ctx.stage(run('rm', ['-rf', scratch]));
|
|
90
|
+
}
|
|
91
|
+
return summary;
|
|
92
|
+
}
|
|
93
|
+
async function updateSite(ctx, consumer, site, localPreset, summary, cloneOf, previewCommit) {
|
|
94
|
+
// The repo the update lands in and the site inside it: the consumer and the
|
|
95
|
+
// site themselves, or their counterparts in the preview clone.
|
|
96
|
+
let repo = consumer.path;
|
|
97
|
+
let target = site.path;
|
|
98
|
+
try {
|
|
99
|
+
if (ctx.dryRun) {
|
|
100
|
+
ctx.say(`→ ${site.rel}: copier update (preview from ${localPreset}@main)`);
|
|
101
|
+
repo = await cloneOf(consumer);
|
|
102
|
+
target = join(repo, relative(consumer.path, site.path));
|
|
103
|
+
// Point the clone's answers at the local preset so the preview reads it;
|
|
104
|
+
// copier refuses a dirty subproject, hence the commit. Template tasks
|
|
105
|
+
// (mise install, hook setup) are the real run's business.
|
|
106
|
+
const answers = await ctx.readFile(join(site.path, ANSWERS_FILE));
|
|
107
|
+
await ctx.stage(write(join(target, ANSWERS_FILE), answers.replace(/^_src_path: .*$/m, `_src_path: ${localPreset}`)));
|
|
108
|
+
await previewCommit(repo, `plx preview: ${site.rel} reads ${localPreset} from the local checkout`);
|
|
109
|
+
await ctx.stage(run('copier', ['update', '--skip-answered', '--trust', '--defaults', '--skip-tasks', '--vcs-ref', 'main'], {
|
|
110
|
+
cwd: target,
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
ctx.say(`→ ${site.rel}: copier update`);
|
|
115
|
+
// Unattended, a new question takes its default; on a terminal copier asks.
|
|
116
|
+
const args = ['update', '--skip-answered', '--trust', ...(ctx.yes ? ['--defaults'] : [])];
|
|
117
|
+
await ctx.apply([run('copier', args, { cwd: target, interactive: true })]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
ctx.say(` ✗ FAILED — copier update exited nonzero${detail(error)}`);
|
|
122
|
+
summary.failed.push(site.rel);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// copier applies the template diff with `git apply --3way`, which leaves
|
|
126
|
+
// unmerged index entries and inline markers when a hunk does not apply.
|
|
127
|
+
const status = await ctx.read('git', ['status', '--porcelain'], { cwd: repo });
|
|
128
|
+
let conflict = hasUnmergedEntries(status);
|
|
129
|
+
const changed = (await ctx.read('git', ['diff', '--name-only'], { cwd: repo })).split('\n').filter(Boolean);
|
|
130
|
+
for (const f of changed) {
|
|
131
|
+
const text = await ctx.readFile(join(repo, f)).catch(() => '');
|
|
132
|
+
if (hasConflictMarkers(text))
|
|
133
|
+
conflict = true;
|
|
134
|
+
}
|
|
135
|
+
await syncSiteMarker(ctx, site, target);
|
|
136
|
+
if (conflict) {
|
|
137
|
+
ctx.say(' ✗ CONFLICTS — resolve the <<<<<<< markers, then git add:');
|
|
138
|
+
summary.conflicted.push(site.rel);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
ctx.say(' ✓ merged clean:');
|
|
142
|
+
summary.clean.push(site.rel);
|
|
143
|
+
}
|
|
144
|
+
for (const line of status.split('\n').filter(Boolean))
|
|
145
|
+
ctx.say(` ${line}`);
|
|
146
|
+
// Each preview site is committed in the clone so the next site's status lists only its own changes.
|
|
147
|
+
if (ctx.dryRun)
|
|
148
|
+
await previewCommit(repo, `plx preview: ${site.rel} updated`);
|
|
149
|
+
}
|
|
150
|
+
/** The marker's `plexus` follows the answers file's `_commit` after an update (bookkeeping.ts). */
|
|
151
|
+
async function syncSiteMarker(ctx, site, target) {
|
|
152
|
+
const marker = await ctx.readFile(join(target, MARKER_FILE)).catch(() => undefined);
|
|
153
|
+
if (marker === undefined)
|
|
154
|
+
return;
|
|
155
|
+
const { commit } = parseAnswers(await ctx.readFile(join(target, ANSWERS_FILE)));
|
|
156
|
+
if (!commit)
|
|
157
|
+
return;
|
|
158
|
+
const synced = syncMarker(marker, commit);
|
|
159
|
+
if (synced === marker)
|
|
160
|
+
return;
|
|
161
|
+
ctx.say(` marker: plexus → ${commit} in ${site.rel}/${MARKER_FILE}`);
|
|
162
|
+
const step = write(join(target, MARKER_FILE), synced);
|
|
163
|
+
if (ctx.dryRun)
|
|
164
|
+
await ctx.stage(step);
|
|
165
|
+
else
|
|
166
|
+
await ctx.apply([step]);
|
|
167
|
+
}
|
|
168
|
+
/** Refresh the lockfile once per consumer whose manifests the updates touched. */
|
|
169
|
+
async function refreshLockfiles(ctx, consumers, summary, clones) {
|
|
170
|
+
const manifests = ['*package.json', 'pnpm-workspace.yaml'];
|
|
171
|
+
for (const c of consumers) {
|
|
172
|
+
if ((await ctx.readFile(join(c.path, 'pnpm-workspace.yaml')).catch(() => undefined)) === undefined)
|
|
173
|
+
continue;
|
|
174
|
+
const repo = ctx.dryRun ? clones.get(c.path) : c.path;
|
|
175
|
+
if (!repo)
|
|
176
|
+
continue;
|
|
177
|
+
const range = ctx.dryRun ? [PREVIEW_BASE] : [];
|
|
178
|
+
const unchanged = await ctx
|
|
179
|
+
.read('git', ['diff', '--quiet', ...range, '--', ...manifests], { cwd: repo })
|
|
180
|
+
.then(() => true)
|
|
181
|
+
.catch(() => false);
|
|
182
|
+
if (unchanged)
|
|
183
|
+
continue;
|
|
184
|
+
ctx.say(`→ ${c.rel}: pnpm install (manifests changed)`);
|
|
185
|
+
try {
|
|
186
|
+
await ctx.apply([run('mise', ['exec', '--', 'pnpm', 'install', '--reporter=silent'], { cwd: c.path })]);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
ctx.say(` ✗ pnpm install failed${detail(error)}`);
|
|
190
|
+
summary.failed.push(`${c.rel}/pnpm-lock.yaml`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** Consumers' hand-owned workflows pin ci-cd by tag; lockstep them to the train. */
|
|
195
|
+
async function bumpConsumerRefs(ctx, consumers, train) {
|
|
196
|
+
for (const c of consumers) {
|
|
197
|
+
const dir = join(c.path, '.github', 'workflows');
|
|
198
|
+
const entries = await ctx.readDir(dir).catch(() => []);
|
|
199
|
+
const files = entries
|
|
200
|
+
.filter((e) => !e.directory && /\.ya?ml$/.test(e.name))
|
|
201
|
+
.map((e) => e.name)
|
|
202
|
+
.sort();
|
|
203
|
+
if (files.length === 0)
|
|
204
|
+
continue;
|
|
205
|
+
if (c.skipped) {
|
|
206
|
+
ctx.say(`⚠ ${c.rel}: workflow refs not bumped (skipped above)`);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
for (const f of files) {
|
|
210
|
+
const text = await ctx.readFile(join(dir, f));
|
|
211
|
+
if (!text.includes(WORKFLOW_REF))
|
|
212
|
+
continue;
|
|
213
|
+
const bumped = bumpWorkflowRefs(text, train);
|
|
214
|
+
if (bumped === text)
|
|
215
|
+
continue;
|
|
216
|
+
ctx.say(`→ ${c.rel}: ${f} ci-cd refs → @${train}`);
|
|
217
|
+
await ctx.apply([write(join(dir, f), bumped)]);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const detail = (error) => {
|
|
222
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
223
|
+
const last = message.trim().split('\n').at(-1) ?? '';
|
|
224
|
+
return last && !/exited with/.test(last) ? `: ${last}` : '';
|
|
225
|
+
};
|
|
226
|
+
//# sourceMappingURL=propagate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagate.js","sourceRoot":"","sources":["../src/propagate.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,sEAAsE;AACtE,yBAAyB;AACzB,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,yBAAyB;AACzB,EAAE;AACF,iEAAiE;AACjE,sEAAsE;AACtE,8EAA8E;AAC9E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtH,OAAO,EAAiB,aAAa,EAAE,YAAY,EAAa,MAAM,gBAAgB,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAenD,sDAAsD;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAW,EAAE,CAC7C,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AAE/E,MAAM,YAAY,GAAG,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,SAAiB,EAAE,KAAa;IAC5E,MAAM,OAAO,GAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC5G,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzG,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAS;QACzB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,4CAA4C,CAAC,CAAC;QAC9E,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,sGAAsG;IACtG,MAAM,OAAO,GAAG,KAAK,EAAE,QAAkB,EAAmB,EAAE;QAC5D,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACnE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,oGAAoG;IACpG,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE,CACvD,GAAG;SACA,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;SAChD,IAAI,CAAC,GAAG,EAAE,CACT,GAAG,CAAC,KAAK,CACP,GAAG,CACD,KAAK,EACL;QACE,IAAI;QACJ,sBAAsB;QACtB,IAAI;QACJ,eAAe;QACf,IAAI;QACJ,0BAA0B;QAC1B,QAAQ;QACR,SAAS;QACT,aAAa;QACb,eAAe;QACf,IAAI;QACJ,OAAO;KACR,EACD,EAAE,GAAG,EAAE,KAAK,EAAE,CACf,CACF,CACF,CAAC;IAEN,IAAI,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAU,CAAC,CAAC,CAAC;YAC5G,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,YAAY,CAAC,MAAM,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;YACtG,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK;gBAClC,MAAM,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;YAAS,CAAC;QACT,IAAI,OAAO;YAAE,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,GAAY,EACZ,QAAkB,EAClB,IAAU,EACV,WAAmB,EACnB,OAAgB,EAChB,OAAyC,EACzC,aAAmE;IAEnE,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IACzB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,iCAAiC,WAAW,QAAQ,CAAC,CAAC;YAC3E,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,yEAAyE;YACzE,sEAAsE;YACtE,0DAA0D;YAC1D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YAClE,MAAM,GAAG,CAAC,KAAK,CACb,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc,WAAW,EAAE,CAAC,CAAC,CACpG,CAAC;YACF,MAAM,aAAa,CAAC,IAAI,EAAE,gBAAgB,IAAI,CAAC,GAAG,UAAU,WAAW,0BAA0B,CAAC,CAAC;YACnG,MAAM,GAAG,CAAC,KAAK,CACb,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE;gBACzG,GAAG,EAAE,MAAM;aACZ,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC;YACxC,2EAA2E;YAC3E,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1F,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,GAAG,CAAC,4CAA4C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,IAAI,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5G,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,kBAAkB,CAAC,IAAI,CAAC;YAAE,QAAQ,GAAG,IAAI,CAAC;IAChD,CAAC;IAED,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QACtE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC9E,oGAAoG;IACpG,IAAI,GAAG,CAAC,MAAM;QAAE,MAAM,aAAa,CAAC,IAAI,EAAE,gBAAgB,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,mGAAmG;AACnG,KAAK,UAAU,cAAc,CAAC,GAAY,EAAE,IAAU,EAAE,MAAc;IACpE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACpF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO;IACjC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO;IAC9B,GAAG,CAAC,GAAG,CAAC,sBAAsB,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,MAAM;QAAE,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;QACjC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,gBAAgB,CAC7B,GAAY,EACZ,SAAqB,EACrB,OAAgB,EAChB,MAA2B;IAE3B,MAAM,SAAS,GAAG,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC3D,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS;YAAE,SAAS;QAC7G,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,GAAG;aACxB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;aAC7E,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;aAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,SAAS;YAAE,SAAS;QACxB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,oCAAoC,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,KAAK,UAAU,gBAAgB,CAAC,GAAY,EAAE,SAAqB,EAAE,KAAa;IAChF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,EAAE,CAAC;QACV,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,4CAA4C,CAAC,CAAC;YAChE,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAAE,SAAS;YAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAS;YAC9B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE;IACxC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Context } from './context.ts';
|
|
2
|
+
export type PageMode = 'map' | 'module';
|
|
3
|
+
export interface Scan {
|
|
4
|
+
/** `✗ <name>: line N: ...`, in page order. */
|
|
5
|
+
defects: string[];
|
|
6
|
+
/** The requirement lines of a standard module; empty for anything else. */
|
|
7
|
+
requirements: string[];
|
|
8
|
+
/** The frontmatter fields the cross-page rules need. */
|
|
9
|
+
code?: string;
|
|
10
|
+
maturity?: string;
|
|
11
|
+
binds?: string;
|
|
12
|
+
depends: string[];
|
|
13
|
+
consumes: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare function scanPage(text: string, name: string, mode: PageMode): Scan;
|
|
16
|
+
/** The requirement lines of a page, defects ignored: what `changed` compares across trains. */
|
|
17
|
+
export declare const extractRequirements: (text: string) => string[];
|
|
18
|
+
export declare const MAP_PAGE = "essentials/standard.md";
|
|
19
|
+
export interface CompendiumCheck {
|
|
20
|
+
defects: string[];
|
|
21
|
+
contracts: number;
|
|
22
|
+
approaches: number;
|
|
23
|
+
}
|
|
24
|
+
/** Every module page of a compendium checkout: `<dir>/<file>`, sorted, index pages left out. */
|
|
25
|
+
export declare function modulePages(ctx: Context, compendium: string): Promise<string[]>;
|
|
26
|
+
export declare function checkCompendium(ctx: Context, compendium: string): Promise<CompendiumCheck>;
|
|
27
|
+
//# sourceMappingURL=requirements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../src/requirements.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;AAExC,MAAM,WAAW,IAAI;IACnB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAgBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAwEzE;AAED,+FAA+F;AAC/F,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAAM,EAA+C,CAAC;AAEzG,eAAO,MAAM,QAAQ,2BAA2B,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gGAAgG;AAChG,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQrF;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAuDhG"}
|