@alpacakit/channels 0.1.0-beta.35 → 0.1.0-beta.36
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/dist/cli-application.d.ts +40 -0
- package/dist/cli-application.d.ts.map +1 -0
- package/dist/cli-application.js +90 -0
- package/dist/cli-compiler.d.ts +1 -0
- package/dist/cli-compiler.d.ts.map +1 -1
- package/dist/cli-compiler.js +1 -0
- package/dist/cli-help-projection.d.ts.map +1 -1
- package/dist/cli-help-projection.js +0 -1
- package/dist/cli-model.d.ts +7 -3
- package/dist/cli-model.d.ts.map +1 -1
- package/dist/cli-model.js +0 -1
- package/dist/cli-presentation.d.ts +9 -0
- package/dist/cli-presentation.d.ts.map +1 -1
- package/dist/cli-presentation.js +31 -3
- package/dist/cli-result-envelope.d.ts +104 -0
- package/dist/cli-result-envelope.d.ts.map +1 -0
- package/dist/cli-result-envelope.js +137 -0
- package/dist/cli-tree.d.ts.map +1 -1
- package/dist/cli-tree.js +41 -39
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/package.json +2 -2
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { CliCommandPath, CliLongOptionFlag, CliOptionFlag } from "./cli-model.js";
|
|
2
|
+
export declare const CLI_HELP_REQUEST_KIND: {
|
|
3
|
+
readonly path: "path";
|
|
4
|
+
};
|
|
5
|
+
export type CliHelpRequest = {
|
|
6
|
+
readonly kind: typeof CLI_HELP_REQUEST_KIND.path;
|
|
7
|
+
readonly path: CliCommandPath;
|
|
8
|
+
readonly all: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type CliHelpRequestDefinition = {
|
|
11
|
+
readonly commandToken: string;
|
|
12
|
+
readonly optionTokens: readonly CliOptionFlag[];
|
|
13
|
+
readonly allToken: CliLongOptionFlag;
|
|
14
|
+
};
|
|
15
|
+
export declare function parseCliHelpRequest(argv: readonly string[], definition: CliHelpRequestDefinition): CliHelpRequest | null;
|
|
16
|
+
export declare const CLI_GLOBAL_OPTION_RESULT_KIND: {
|
|
17
|
+
readonly absent: "absent";
|
|
18
|
+
readonly invalid: "invalid";
|
|
19
|
+
readonly resolved: "resolved";
|
|
20
|
+
};
|
|
21
|
+
export declare const CLI_GLOBAL_OPTION_ISSUE_KIND: {
|
|
22
|
+
readonly duplicate: "duplicate";
|
|
23
|
+
readonly invalidValue: "invalid_value";
|
|
24
|
+
};
|
|
25
|
+
export type CliGlobalValueOptionDefinition<Value extends string = string> = {
|
|
26
|
+
readonly flag: CliLongOptionFlag;
|
|
27
|
+
readonly values: readonly Value[];
|
|
28
|
+
};
|
|
29
|
+
export type CliGlobalValueOptionResult<Value extends string = string> = {
|
|
30
|
+
readonly kind: typeof CLI_GLOBAL_OPTION_RESULT_KIND.absent;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: typeof CLI_GLOBAL_OPTION_RESULT_KIND.invalid;
|
|
33
|
+
readonly issue: typeof CLI_GLOBAL_OPTION_ISSUE_KIND.duplicate | typeof CLI_GLOBAL_OPTION_ISSUE_KIND.invalidValue;
|
|
34
|
+
} | {
|
|
35
|
+
readonly kind: typeof CLI_GLOBAL_OPTION_RESULT_KIND.resolved;
|
|
36
|
+
readonly value: Value;
|
|
37
|
+
readonly argv: readonly string[];
|
|
38
|
+
};
|
|
39
|
+
export declare function extractCliGlobalValueOption<Value extends string>(argv: readonly string[], definition: CliGlobalValueOptionDefinition<Value>): CliGlobalValueOptionResult<Value>;
|
|
40
|
+
//# sourceMappingURL=cli-application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-application.d.ts","sourceRoot":"","sources":["../src/cli-application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,aAAa,EACd,MAAM,gBAAgB,CAAC;AAOxB,eAAO,MAAM,qBAAqB;;CAExB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,qBAAqB,CAAC,IAAI,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,UAAU,EAAE,wBAAwB,GACnC,cAAc,GAAG,IAAI,CAoBvB;AAiBD,eAAO,MAAM,6BAA6B;;;;CAIhC,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;CAG/B,CAAC;AAEX,MAAM,MAAM,8BAA8B,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI;IAC1E,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAChE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,6BAA6B,CAAC,MAAM,CAAA;CAAE,GAC9D;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,6BAA6B,CAAC,OAAO,CAAC;IAC5D,QAAQ,CAAC,KAAK,EACV,OAAO,4BAA4B,CAAC,SAAS,GAC7C,OAAO,4BAA4B,CAAC,YAAY,CAAC;CACtD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,6BAA6B,CAAC,QAAQ,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAEN,wBAAgB,2BAA2B,CAAC,KAAK,SAAS,MAAM,EAC9D,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,UAAU,EAAE,8BAA8B,CAAC,KAAK,CAAC,GAChD,0BAA0B,CAAC,KAAK,CAAC,CA4CnC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const CLI_APPLICATION_SYNTAX = {
|
|
2
|
+
optionPrefix: "-",
|
|
3
|
+
positionalSeparator: "--",
|
|
4
|
+
};
|
|
5
|
+
export const CLI_HELP_REQUEST_KIND = {
|
|
6
|
+
path: "path",
|
|
7
|
+
};
|
|
8
|
+
export function parseCliHelpRequest(argv, definition) {
|
|
9
|
+
if (argv.length === 0)
|
|
10
|
+
return pathHelpRequest([], false);
|
|
11
|
+
if (argv[0] === definition.commandToken) {
|
|
12
|
+
const args = argv.slice(1);
|
|
13
|
+
if (args.length === 1 &&
|
|
14
|
+
definition.optionTokens.includes(args[0])) {
|
|
15
|
+
return pathHelpRequest([], false);
|
|
16
|
+
}
|
|
17
|
+
if (args.at(-1) === definition.allToken) {
|
|
18
|
+
return createPathHelpRequest(args.slice(0, -1), true);
|
|
19
|
+
}
|
|
20
|
+
return createPathHelpRequest(args, false);
|
|
21
|
+
}
|
|
22
|
+
const helpToken = argv.at(-1);
|
|
23
|
+
if (!definition.optionTokens.includes(helpToken)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return createPathHelpRequest(argv.slice(0, -1), false);
|
|
27
|
+
}
|
|
28
|
+
function createPathHelpRequest(path, all) {
|
|
29
|
+
return path.every((token) => !token.startsWith(CLI_APPLICATION_SYNTAX.optionPrefix))
|
|
30
|
+
? pathHelpRequest(path, all)
|
|
31
|
+
: null;
|
|
32
|
+
}
|
|
33
|
+
function pathHelpRequest(path, all) {
|
|
34
|
+
return { kind: CLI_HELP_REQUEST_KIND.path, path, all };
|
|
35
|
+
}
|
|
36
|
+
export const CLI_GLOBAL_OPTION_RESULT_KIND = {
|
|
37
|
+
absent: "absent",
|
|
38
|
+
invalid: "invalid",
|
|
39
|
+
resolved: "resolved",
|
|
40
|
+
};
|
|
41
|
+
export const CLI_GLOBAL_OPTION_ISSUE_KIND = {
|
|
42
|
+
duplicate: "duplicate",
|
|
43
|
+
invalidValue: "invalid_value",
|
|
44
|
+
};
|
|
45
|
+
export function extractCliGlobalValueOption(argv, definition) {
|
|
46
|
+
const inlinePrefix = `${definition.flag}=`;
|
|
47
|
+
const values = [];
|
|
48
|
+
const normalized = [];
|
|
49
|
+
let optionsEnded = false;
|
|
50
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
51
|
+
const token = argv[index];
|
|
52
|
+
if (token === CLI_APPLICATION_SYNTAX.positionalSeparator) {
|
|
53
|
+
optionsEnded = true;
|
|
54
|
+
normalized.push(token);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!optionsEnded && token === definition.flag) {
|
|
58
|
+
values.push(argv[index + 1] ?? "");
|
|
59
|
+
index += 1;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (!optionsEnded && token?.startsWith(inlinePrefix) === true) {
|
|
63
|
+
values.push(token.slice(inlinePrefix.length));
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (token !== undefined)
|
|
67
|
+
normalized.push(token);
|
|
68
|
+
}
|
|
69
|
+
if (values.length === 0) {
|
|
70
|
+
return { kind: CLI_GLOBAL_OPTION_RESULT_KIND.absent };
|
|
71
|
+
}
|
|
72
|
+
if (values.length > 1) {
|
|
73
|
+
return {
|
|
74
|
+
kind: CLI_GLOBAL_OPTION_RESULT_KIND.invalid,
|
|
75
|
+
issue: CLI_GLOBAL_OPTION_ISSUE_KIND.duplicate,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const value = values[0];
|
|
79
|
+
if (!definition.values.includes(value)) {
|
|
80
|
+
return {
|
|
81
|
+
kind: CLI_GLOBAL_OPTION_RESULT_KIND.invalid,
|
|
82
|
+
issue: CLI_GLOBAL_OPTION_ISSUE_KIND.invalidValue,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
kind: CLI_GLOBAL_OPTION_RESULT_KIND.resolved,
|
|
87
|
+
value: value,
|
|
88
|
+
argv: normalized,
|
|
89
|
+
};
|
|
90
|
+
}
|
package/dist/cli-compiler.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ export type CliOptionAction = {
|
|
|
36
36
|
};
|
|
37
37
|
export type CompiledCliEndpoint = {
|
|
38
38
|
readonly endpoint: EntryTreeEndpoint;
|
|
39
|
+
readonly binding: CliEntryBinding;
|
|
39
40
|
readonly help: CliEntryBinding["help"];
|
|
40
41
|
readonly options: readonly CompiledCliOption[];
|
|
41
42
|
readonly positionals: readonly CompiledCliPositional[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-compiler.d.ts","sourceRoot":"","sources":["../src/cli-compiler.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,eAAe,EAEf,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG/E,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAUX,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,CAAC,qBAAqB,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,WAAW,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACtD,CAAC,GACF,CAAC,qBAAqB,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,KAAK,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC,CAAC;AAEP,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EACT,OAAO,wBAAwB,CAAC,MAAM,GACtC,OAAO,wBAAwB,CAAC,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,sBAAsB,CAAC,UAAU,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,sBAAsB,CAAC,SAAS,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,OAAO,CACtB,iBAAiB,EACjB;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,KAAK,CAAA;KAAE,CAChD,CAAC;CACH,CAAC;AAEN,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9D,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,GACf,mBAAmB,
|
|
1
|
+
{"version":3,"file":"cli-compiler.d.ts","sourceRoot":"","sources":["../src/cli-compiler.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,eAAe,EAEf,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG/E,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAUX,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,CAAC,qBAAqB,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,WAAW,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACtD,CAAC,GACF,CAAC,qBAAqB,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,KAAK,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC,CAAC;AAEP,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EACT,OAAO,wBAAwB,CAAC,MAAM,GACtC,OAAO,wBAAwB,CAAC,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,sBAAsB,CAAC,UAAU,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,sBAAsB,CAAC,SAAS,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,OAAO,CACtB,iBAAiB,EACjB;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,KAAK,CAAA;KAAE,CAChD,CAAC;CACH,CAAC;AAEN,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9D,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,GACf,mBAAmB,CAiDrB"}
|
package/dist/cli-compiler.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-help-projection.d.ts","sourceRoot":"","sources":["../src/cli-help-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,cAAc,EAKd,cAAc,EAGd,UAAU,EACX,MAAM,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA4ChD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"cli-help-projection.d.ts","sourceRoot":"","sources":["../src/cli-help-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,cAAc,EAKd,cAAc,EAGd,UAAU,EACX,MAAM,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA4ChD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB,GAAG,cAAc,CAmBjB;AAkCD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,GACf,IAAI,CA2BN;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,GACf,IAAI,CAaN"}
|
|
@@ -31,7 +31,6 @@ export function createCliHelpSurface(input) {
|
|
|
31
31
|
return {
|
|
32
32
|
name: input.node.name,
|
|
33
33
|
token: input.root ? null : input.segment.token,
|
|
34
|
-
aliases: input.root ? [] : input.segment.aliases,
|
|
35
34
|
description: input.node.description,
|
|
36
35
|
remarks: input.node.documentation.remarks,
|
|
37
36
|
relatedDocs: input.node.documentation.relatedDocs,
|
package/dist/cli-model.d.ts
CHANGED
|
@@ -76,7 +76,6 @@ export type CliEntryBinding<Name extends string = string> = {
|
|
|
76
76
|
};
|
|
77
77
|
export type CliSegment = {
|
|
78
78
|
readonly token: string;
|
|
79
|
-
readonly aliases: readonly string[];
|
|
80
79
|
readonly help: CliGroupHelp;
|
|
81
80
|
};
|
|
82
81
|
export type CliHelpExample = {
|
|
@@ -135,7 +134,6 @@ export declare function bindCliEntry<const Bindings extends readonly CliArgBindi
|
|
|
135
134
|
}): EntryChannelBinding<typeof CHANNEL.cli, Bindings[number]["parameterName"]>;
|
|
136
135
|
export declare function overrideCliSegment(segment: {
|
|
137
136
|
readonly token: string;
|
|
138
|
-
readonly aliases?: readonly string[];
|
|
139
137
|
readonly help?: CliGroupHelpInput;
|
|
140
138
|
}): ChannelSegmentOverride;
|
|
141
139
|
type CliHelpOptionBase = {
|
|
@@ -173,7 +171,6 @@ export type CliHelpPositional = {
|
|
|
173
171
|
export type CliHelpSurface = {
|
|
174
172
|
readonly name: string;
|
|
175
173
|
readonly token: string | null;
|
|
176
|
-
readonly aliases: readonly string[];
|
|
177
174
|
readonly description: string;
|
|
178
175
|
readonly optionGroups: readonly CliHelpOptionGroup[];
|
|
179
176
|
readonly positionals: readonly CliHelpPositional[];
|
|
@@ -198,6 +195,12 @@ export type CliHelpSurfaceLocation = {
|
|
|
198
195
|
readonly surface: CliHelpSurface;
|
|
199
196
|
readonly path: CliCommandPath;
|
|
200
197
|
};
|
|
198
|
+
export type CliEndpointLocation = {
|
|
199
|
+
readonly endpoint: EntryTreeEndpoint;
|
|
200
|
+
readonly path: CliCommandPath;
|
|
201
|
+
/** The normalized CLI parameter binding compiled for this exact endpoint. */
|
|
202
|
+
readonly binding: CliEntryBinding;
|
|
203
|
+
};
|
|
201
204
|
export type CliRouterResult = {
|
|
202
205
|
readonly kind: typeof CLI_ROUTER_RESULT_KIND.resolved;
|
|
203
206
|
readonly path: readonly string[];
|
|
@@ -234,6 +237,7 @@ export declare function isCliResolvedEndpoint<const Endpoint extends EntryTreeEn
|
|
|
234
237
|
export interface CliRouter {
|
|
235
238
|
readonly help: CliHelpSurface;
|
|
236
239
|
readonly endpoints: readonly EntryTreeEndpoint[];
|
|
240
|
+
readonly endpointLocations: readonly CliEndpointLocation[];
|
|
237
241
|
resolve(argv: readonly string[]): CliRouterResult;
|
|
238
242
|
}
|
|
239
243
|
export {};
|
package/dist/cli-model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-model.d.ts","sourceRoot":"","sources":["../src/cli-model.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli-model.d.ts","sourceRoot":"","sources":["../src/cli-model.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-model.js
CHANGED
|
@@ -28,7 +28,6 @@ export function bindCliEntry(binding) {
|
|
|
28
28
|
export function overrideCliSegment(segment) {
|
|
29
29
|
const payload = {
|
|
30
30
|
token: segment.token,
|
|
31
|
-
aliases: segment.aliases ?? [],
|
|
32
31
|
help: normalizeCliGroupHelp(segment.help),
|
|
33
32
|
};
|
|
34
33
|
registerChannelPayload(PAYLOAD_KIND.cliSegment, payload);
|
|
@@ -8,6 +8,15 @@ export declare function findCliHelpSurface(root: CliHelpSurface, commandPath: Cl
|
|
|
8
8
|
export declare function findCliHelpSurfaceLocation(root: CliHelpSurface, commandPath: CliCommandPath): CliHelpSurfaceLocation | null;
|
|
9
9
|
export declare function renderCliHelp(surface: CliHelpSurface, context: CliHelpRenderContext): string;
|
|
10
10
|
export declare function listCliHelpSurfaces(root: CliHelpSurface): readonly CliHelpSurfaceLocation[];
|
|
11
|
+
export type CliHelpSurfaceProjection = {
|
|
12
|
+
include(location: CliHelpSurfaceLocation): boolean;
|
|
13
|
+
compare?(left: CliHelpSurfaceLocation, right: CliHelpSurfaceLocation): number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Projects one immutable help tree without recreating its structural fields.
|
|
17
|
+
* The root is always retained; `include` and `compare` are applied to children.
|
|
18
|
+
*/
|
|
19
|
+
export declare function projectCliHelpSurface(root: CliHelpSurface, projection: CliHelpSurfaceProjection): CliHelpSurface;
|
|
11
20
|
export declare function describeCliHelpOption(option: CliHelpOption): CliHelpOptionDescription;
|
|
12
21
|
export declare function appendCliCommandPart(command: string, part: string): string;
|
|
13
22
|
export declare function formatDefaultCliSubcommandHint(programName: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-presentation.d.ts","sourceRoot":"","sources":["../src/cli-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE3B,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAiD1E,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,cAAc,GAC1B,cAAc,GAAG,IAAI,CAEvB;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,cAAc,GAC1B,sBAAsB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"cli-presentation.d.ts","sourceRoot":"","sources":["../src/cli-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE3B,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAiD1E,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,cAAc,GAC1B,cAAc,GAAG,IAAI,CAEvB;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,cAAc,GAC1B,sBAAsB,GAAG,IAAI,CAc/B;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAWR;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,GACnB,SAAS,sBAAsB,EAAE,CAanC;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC;IACnD,OAAO,CAAC,CAAC,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAAC;CAC/E,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,wBAAwB,GACnC,cAAc,CAsBhB;AAmJD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,GACpB,wBAAwB,CAuB1B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,CACb,eAAe,EACf;IACE,QAAQ,CAAC,IAAI,EACT,OAAO,sBAAsB,CAAC,cAAc,GAC5C,OAAO,sBAAsB,CAAC,iBAAiB,GAC/C,OAAO,sBAAsB,CAAC,YAAY,GAC1C,OAAO,sBAAsB,CAAC,gBAAgB,CAAC;CACpD,CACF,GACA,MAAM,CAcR;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,+BAA+B,CAAC;IACtD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C,GAAG,MAAM,CAUT;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,cAAc,EAAE,MAAM,GACrB,SAAS,MAAM,EAAE,CAiBnB"}
|
package/dist/cli-presentation.js
CHANGED
|
@@ -47,7 +47,7 @@ export function findCliHelpSurfaceLocation(root, commandPath) {
|
|
|
47
47
|
let current = root;
|
|
48
48
|
const path = [];
|
|
49
49
|
for (const token of commandPath) {
|
|
50
|
-
const child = current.children.find((candidate) => candidate.token === token
|
|
50
|
+
const child = current.children.find((candidate) => candidate.token === token);
|
|
51
51
|
if (!child) {
|
|
52
52
|
return null;
|
|
53
53
|
}
|
|
@@ -80,6 +80,34 @@ export function listCliHelpSurfaces(root) {
|
|
|
80
80
|
}
|
|
81
81
|
return locations;
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Projects one immutable help tree without recreating its structural fields.
|
|
85
|
+
* The root is always retained; `include` and `compare` are applied to children.
|
|
86
|
+
*/
|
|
87
|
+
export function projectCliHelpSurface(root, projection) {
|
|
88
|
+
const projected = new Map();
|
|
89
|
+
const pending = [...listCliHelpSurfaces(root)].reverse();
|
|
90
|
+
for (const location of pending) {
|
|
91
|
+
const children = location.surface.children.flatMap((child) => {
|
|
92
|
+
const childPath = [...location.path, child.token ?? child.name];
|
|
93
|
+
const childLocation = { surface: child, path: childPath };
|
|
94
|
+
if (!projection.include(childLocation))
|
|
95
|
+
return [];
|
|
96
|
+
const projectedChild = projected.get(child);
|
|
97
|
+
return projectedChild === undefined
|
|
98
|
+
? []
|
|
99
|
+
: [{ surface: projectedChild, path: childPath }];
|
|
100
|
+
});
|
|
101
|
+
if (projection.compare !== undefined) {
|
|
102
|
+
children.sort(projection.compare);
|
|
103
|
+
}
|
|
104
|
+
projected.set(location.surface, {
|
|
105
|
+
...location.surface,
|
|
106
|
+
children: children.map((child) => child.surface),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return projected.get(root) ?? { ...root, children: [] };
|
|
110
|
+
}
|
|
83
111
|
function joinCliHelpSections(sections) {
|
|
84
112
|
return sections
|
|
85
113
|
.flatMap((section) => (section === null ? [] : [section]))
|
|
@@ -100,8 +128,8 @@ function createCliHelpCommandsSection(surface) {
|
|
|
100
128
|
return [
|
|
101
129
|
CLI_HELP_TEXT.commandsHeading,
|
|
102
130
|
...surface.children.map((child) => {
|
|
103
|
-
const
|
|
104
|
-
return `${CLI_HELP_LAYOUT.itemIndent}${
|
|
131
|
+
const name = child.token ?? child.name;
|
|
132
|
+
return `${CLI_HELP_LAYOUT.itemIndent}${name}${CLI_HELP_LAYOUT.columnSeparator}${child.description}`;
|
|
105
133
|
}),
|
|
106
134
|
];
|
|
107
135
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { type JsonValue } from "@alpacakit/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
export declare const CLI_RESULT_STATUS: {
|
|
4
|
+
readonly completed: "completed";
|
|
5
|
+
readonly rejected: "rejected";
|
|
6
|
+
readonly partial: "partial";
|
|
7
|
+
};
|
|
8
|
+
export declare const CLI_RESULT_CODE: {
|
|
9
|
+
readonly ok: "ok";
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Process exit classes for commands that produced a typed result. Unexpected
|
|
13
|
+
* process faults sit outside this contract and are projected by the host.
|
|
14
|
+
*/
|
|
15
|
+
export declare const CLI_COMMAND_EXIT_CODE: {
|
|
16
|
+
readonly success: 0;
|
|
17
|
+
readonly rejected: 1;
|
|
18
|
+
readonly syntax: 2;
|
|
19
|
+
};
|
|
20
|
+
export declare const CLI_OUTPUT_FORMAT: {
|
|
21
|
+
readonly text: "text";
|
|
22
|
+
readonly json: "json";
|
|
23
|
+
};
|
|
24
|
+
export type CliOutputFormat = (typeof CLI_OUTPUT_FORMAT)[keyof typeof CLI_OUTPUT_FORMAT];
|
|
25
|
+
export type CliResultStatus = (typeof CLI_RESULT_STATUS)[keyof typeof CLI_RESULT_STATUS];
|
|
26
|
+
export type CliCommandExitCode = (typeof CLI_COMMAND_EXIT_CODE)[keyof typeof CLI_COMMAND_EXIT_CODE];
|
|
27
|
+
export type CliDataVersion = `${string}/v${number}`;
|
|
28
|
+
export type CliNextAction = {
|
|
29
|
+
readonly label: string;
|
|
30
|
+
readonly command: string;
|
|
31
|
+
};
|
|
32
|
+
export type CliResultEnvelope<Data extends JsonValue = JsonValue> = {
|
|
33
|
+
readonly envelopeVersion: 1;
|
|
34
|
+
readonly dataVersion: CliDataVersion;
|
|
35
|
+
readonly command: string;
|
|
36
|
+
readonly status: CliResultStatus;
|
|
37
|
+
readonly code: string;
|
|
38
|
+
readonly data: Data;
|
|
39
|
+
readonly nextActions: readonly CliNextAction[];
|
|
40
|
+
};
|
|
41
|
+
/** One typed command result from which text and the JSON envelope are projected. */
|
|
42
|
+
export type CliResultProjection<Data extends JsonValue = JsonValue> = {
|
|
43
|
+
readonly status: CliResultStatus;
|
|
44
|
+
readonly code: string;
|
|
45
|
+
readonly data: Data;
|
|
46
|
+
readonly nextActions: readonly CliNextAction[];
|
|
47
|
+
readonly text: string;
|
|
48
|
+
};
|
|
49
|
+
/** A command's typed result paired with its process exit classification. */
|
|
50
|
+
export type CliCommandExecutionResult<Data extends JsonValue = JsonValue> = {
|
|
51
|
+
readonly exitCode: CliCommandExitCode;
|
|
52
|
+
readonly result: CliResultProjection<Data>;
|
|
53
|
+
};
|
|
54
|
+
export declare const cliCommandExecutionResultSchema: z.ZodReadonly<z.ZodObject<{
|
|
55
|
+
exitCode: z.ZodEnum<{
|
|
56
|
+
readonly success: 0;
|
|
57
|
+
readonly rejected: 1;
|
|
58
|
+
readonly syntax: 2;
|
|
59
|
+
}>;
|
|
60
|
+
result: z.ZodReadonly<z.ZodObject<{
|
|
61
|
+
status: z.ZodEnum<{
|
|
62
|
+
completed: "completed";
|
|
63
|
+
rejected: "rejected";
|
|
64
|
+
partial: "partial";
|
|
65
|
+
}>;
|
|
66
|
+
code: z.ZodString;
|
|
67
|
+
data: z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>;
|
|
68
|
+
nextActions: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
69
|
+
label: z.ZodString;
|
|
70
|
+
command: z.ZodString;
|
|
71
|
+
}, z.core.$strict>>>>;
|
|
72
|
+
text: z.ZodString;
|
|
73
|
+
}, z.core.$strict>>;
|
|
74
|
+
}, z.core.$strict>>;
|
|
75
|
+
export declare function createCliResultEnvelope<Data extends JsonValue>(input: {
|
|
76
|
+
readonly dataVersion: CliDataVersion;
|
|
77
|
+
readonly command: string;
|
|
78
|
+
readonly status: CliResultStatus;
|
|
79
|
+
readonly code: string;
|
|
80
|
+
readonly data: Data;
|
|
81
|
+
readonly nextActions?: readonly CliNextAction[];
|
|
82
|
+
}): CliResultEnvelope<Data>;
|
|
83
|
+
export declare function createCliResultProjection<Data extends JsonValue>(input: {
|
|
84
|
+
readonly status: CliResultStatus;
|
|
85
|
+
readonly code: string;
|
|
86
|
+
readonly data: Data;
|
|
87
|
+
readonly nextActions?: readonly CliNextAction[];
|
|
88
|
+
readonly text: string;
|
|
89
|
+
}): CliResultProjection<Data>;
|
|
90
|
+
export declare function createCliCommandExecutionResult<Data extends JsonValue>(input: {
|
|
91
|
+
readonly exitCode: CliCommandExitCode;
|
|
92
|
+
readonly status: CliResultStatus;
|
|
93
|
+
readonly code: string;
|
|
94
|
+
readonly data: Data;
|
|
95
|
+
readonly nextActions?: readonly CliNextAction[];
|
|
96
|
+
readonly text: string;
|
|
97
|
+
}): CliCommandExecutionResult<Data>;
|
|
98
|
+
export declare function projectCliResultEnvelope<Data extends JsonValue>(input: {
|
|
99
|
+
readonly dataVersion: CliDataVersion;
|
|
100
|
+
readonly command: string;
|
|
101
|
+
readonly result: CliResultProjection<Data>;
|
|
102
|
+
}): CliResultEnvelope<Data>;
|
|
103
|
+
export declare function verifyCliResultEnvelope(input: unknown): CliResultEnvelope;
|
|
104
|
+
//# sourceMappingURL=cli-result-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-result-envelope.d.ts","sourceRoot":"","sources":["../src/cli-result-envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jsonValueSchema } from "@alpacakit/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
export const CLI_RESULT_STATUS = {
|
|
4
|
+
completed: "completed",
|
|
5
|
+
rejected: "rejected",
|
|
6
|
+
partial: "partial",
|
|
7
|
+
};
|
|
8
|
+
export const CLI_RESULT_CODE = {
|
|
9
|
+
ok: "ok",
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Process exit classes for commands that produced a typed result. Unexpected
|
|
13
|
+
* process faults sit outside this contract and are projected by the host.
|
|
14
|
+
*/
|
|
15
|
+
export const CLI_COMMAND_EXIT_CODE = {
|
|
16
|
+
success: 0,
|
|
17
|
+
rejected: 1,
|
|
18
|
+
syntax: 2,
|
|
19
|
+
};
|
|
20
|
+
export const CLI_OUTPUT_FORMAT = {
|
|
21
|
+
text: "text",
|
|
22
|
+
json: "json",
|
|
23
|
+
};
|
|
24
|
+
const cliNextActionSchema = z
|
|
25
|
+
.object({ label: z.string(), command: z.string() })
|
|
26
|
+
.strict()
|
|
27
|
+
.readonly();
|
|
28
|
+
const cliResultProjectionSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
status: z.enum(Object.values(CLI_RESULT_STATUS)),
|
|
31
|
+
code: z.string().min(1),
|
|
32
|
+
data: jsonValueSchema,
|
|
33
|
+
nextActions: z.array(cliNextActionSchema).readonly(),
|
|
34
|
+
text: z.string(),
|
|
35
|
+
})
|
|
36
|
+
.strict()
|
|
37
|
+
.readonly();
|
|
38
|
+
export const cliCommandExecutionResultSchema = z
|
|
39
|
+
.object({
|
|
40
|
+
exitCode: z.enum(CLI_COMMAND_EXIT_CODE),
|
|
41
|
+
result: cliResultProjectionSchema,
|
|
42
|
+
})
|
|
43
|
+
.strict()
|
|
44
|
+
.superRefine((execution, context) => {
|
|
45
|
+
const expectedExitCode = execution.result.status === CLI_RESULT_STATUS.completed
|
|
46
|
+
? CLI_COMMAND_EXIT_CODE.success
|
|
47
|
+
: CLI_COMMAND_EXIT_CODE.rejected;
|
|
48
|
+
const valid = execution.result.status === CLI_RESULT_STATUS.rejected
|
|
49
|
+
? execution.exitCode === CLI_COMMAND_EXIT_CODE.rejected ||
|
|
50
|
+
execution.exitCode === CLI_COMMAND_EXIT_CODE.syntax
|
|
51
|
+
: execution.exitCode === expectedExitCode;
|
|
52
|
+
if (!valid) {
|
|
53
|
+
context.addIssue({
|
|
54
|
+
code: "custom",
|
|
55
|
+
message: "Completed results require exit 0, partial results require exit 1, and rejected results require exit 1 or 2.",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
.readonly();
|
|
60
|
+
const cliResultEnvelopeSchema = z
|
|
61
|
+
.object({
|
|
62
|
+
envelopeVersion: z.literal(1),
|
|
63
|
+
dataVersion: z.string().regex(/^[a-z0-9-]+\/v[1-9][0-9]*$/u),
|
|
64
|
+
command: z.string(),
|
|
65
|
+
status: z.enum(Object.values(CLI_RESULT_STATUS)),
|
|
66
|
+
code: z.string().min(1),
|
|
67
|
+
data: jsonValueSchema,
|
|
68
|
+
nextActions: z.array(cliNextActionSchema).readonly(),
|
|
69
|
+
})
|
|
70
|
+
.strict()
|
|
71
|
+
.superRefine((document, context) => {
|
|
72
|
+
const completed = document.status === CLI_RESULT_STATUS.completed;
|
|
73
|
+
if (completed !== (document.code === CLI_RESULT_CODE.ok)) {
|
|
74
|
+
context.addIssue({
|
|
75
|
+
code: "custom",
|
|
76
|
+
message: "Completed results require code=ok and failures forbid it.",
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
.readonly();
|
|
81
|
+
export function createCliResultEnvelope(input) {
|
|
82
|
+
return verifyCliResultEnvelope({
|
|
83
|
+
envelopeVersion: 1,
|
|
84
|
+
dataVersion: input.dataVersion,
|
|
85
|
+
command: input.command,
|
|
86
|
+
status: input.status,
|
|
87
|
+
code: input.code,
|
|
88
|
+
data: input.data,
|
|
89
|
+
nextActions: input.nextActions ?? [],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
export function createCliResultProjection(input) {
|
|
93
|
+
const verified = createCliResultEnvelope({
|
|
94
|
+
dataVersion: "projection/v1",
|
|
95
|
+
command: "projection",
|
|
96
|
+
status: input.status,
|
|
97
|
+
code: input.code,
|
|
98
|
+
data: input.data,
|
|
99
|
+
...(input.nextActions === undefined
|
|
100
|
+
? {}
|
|
101
|
+
: { nextActions: input.nextActions }),
|
|
102
|
+
});
|
|
103
|
+
return Object.freeze({
|
|
104
|
+
status: verified.status,
|
|
105
|
+
code: verified.code,
|
|
106
|
+
data: verified.data,
|
|
107
|
+
nextActions: verified.nextActions,
|
|
108
|
+
text: input.text,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export function createCliCommandExecutionResult(input) {
|
|
112
|
+
return cliCommandExecutionResultSchema.parse({
|
|
113
|
+
exitCode: input.exitCode,
|
|
114
|
+
result: createCliResultProjection({
|
|
115
|
+
status: input.status,
|
|
116
|
+
code: input.code,
|
|
117
|
+
data: input.data,
|
|
118
|
+
...(input.nextActions === undefined
|
|
119
|
+
? {}
|
|
120
|
+
: { nextActions: input.nextActions }),
|
|
121
|
+
text: input.text,
|
|
122
|
+
}),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
export function projectCliResultEnvelope(input) {
|
|
126
|
+
return createCliResultEnvelope({
|
|
127
|
+
dataVersion: input.dataVersion,
|
|
128
|
+
command: input.command,
|
|
129
|
+
status: input.result.status,
|
|
130
|
+
code: input.result.code,
|
|
131
|
+
data: input.result.data,
|
|
132
|
+
nextActions: input.result.nextActions,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export function verifyCliResultEnvelope(input) {
|
|
136
|
+
return cliResultEnvelopeSchema.parse(input);
|
|
137
|
+
}
|
package/dist/cli-tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-tree.d.ts","sourceRoot":"","sources":["../src/cli-tree.ts"],"names":[],"mappings":"AAaA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli-tree.d.ts","sourceRoot":"","sources":["../src/cli-tree.ts"],"names":[],"mappings":"AAaA,OAAO,EAKL,KAAK,SAAS,EAIf,MAAM,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAkDpB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,SAAS,CASpE"}
|
package/dist/cli-tree.js
CHANGED
|
@@ -22,10 +22,6 @@ const CLI_PARSE_RESULT_KIND = {
|
|
|
22
22
|
parsed: "parsed",
|
|
23
23
|
raw: "raw",
|
|
24
24
|
};
|
|
25
|
-
const CLI_SEGMENT_NAME_KIND = {
|
|
26
|
-
alias: "alias",
|
|
27
|
-
token: "token",
|
|
28
|
-
};
|
|
29
25
|
const CLI_TREE_VALIDATION_ISSUE = {
|
|
30
26
|
subcommandHintWithoutChildren: "CLI subcommand hint requires at least one child command",
|
|
31
27
|
};
|
|
@@ -35,14 +31,16 @@ const EMPTY_CLI_GROUP_HELP = {
|
|
|
35
31
|
};
|
|
36
32
|
export function createCliRouter(tree) {
|
|
37
33
|
const root = compileCliTree(tree);
|
|
34
|
+
const endpointLocations = listCliEndpointLocations(root);
|
|
38
35
|
return {
|
|
39
36
|
help: root.help,
|
|
40
|
-
endpoints:
|
|
37
|
+
endpoints: endpointLocations.map((location) => location.endpoint),
|
|
38
|
+
endpointLocations,
|
|
41
39
|
resolve: (argv) => resolveCli(root, argv),
|
|
42
40
|
};
|
|
43
41
|
}
|
|
44
|
-
function
|
|
45
|
-
const
|
|
42
|
+
function listCliEndpointLocations(root) {
|
|
43
|
+
const locations = [];
|
|
46
44
|
const visited = new Set();
|
|
47
45
|
const pending = [root];
|
|
48
46
|
while (pending.length > 0) {
|
|
@@ -52,25 +50,36 @@ function listCliEndpoints(root) {
|
|
|
52
50
|
}
|
|
53
51
|
visited.add(node);
|
|
54
52
|
if (node.endpoint !== null) {
|
|
55
|
-
|
|
53
|
+
locations.push({
|
|
54
|
+
endpoint: node.endpoint.endpoint,
|
|
55
|
+
path: node.path.slice(1),
|
|
56
|
+
binding: node.endpoint.binding,
|
|
57
|
+
});
|
|
56
58
|
}
|
|
57
59
|
pending.push(...node.childByToken.values());
|
|
58
60
|
}
|
|
59
|
-
return
|
|
61
|
+
return locations;
|
|
60
62
|
}
|
|
61
63
|
function compileCliTree(tree) {
|
|
62
64
|
const issues = [...validateEntryTreeStructure(tree)];
|
|
63
65
|
const nodeRecords = new Map();
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
const nodeQueue = [{ node: tree.root, parentPath: [], root: true }];
|
|
67
|
+
for (const current of nodeQueue) {
|
|
68
|
+
const segment = cliSegmentFor(current.node, current.parentPath, current.root, issues);
|
|
69
|
+
const path = current.root
|
|
70
|
+
? [current.node.name]
|
|
71
|
+
: [...current.parentPath, segment.token];
|
|
72
|
+
nodeRecords.set(current.node, {
|
|
73
|
+
path,
|
|
74
|
+
segment,
|
|
75
|
+
endpoint: cliEndpointFor(current.node, path, issues),
|
|
76
|
+
});
|
|
77
|
+
nodeQueue.push(...current.node.children.map((node) => ({
|
|
78
|
+
node,
|
|
79
|
+
parentPath: path,
|
|
80
|
+
root: false,
|
|
81
|
+
})));
|
|
82
|
+
}
|
|
74
83
|
const publicNodes = new Map();
|
|
75
84
|
const pending = [];
|
|
76
85
|
visitEntryTree(tree, {
|
|
@@ -109,9 +118,6 @@ function compileCliTree(tree) {
|
|
|
109
118
|
const childByToken = new Map();
|
|
110
119
|
for (const child of children) {
|
|
111
120
|
childByToken.set(child.segment.token, child);
|
|
112
|
-
for (const alias of child.segment.aliases) {
|
|
113
|
-
childByToken.set(alias, child);
|
|
114
|
-
}
|
|
115
121
|
}
|
|
116
122
|
const compiledNode = {
|
|
117
123
|
path: record.path,
|
|
@@ -143,31 +149,28 @@ function cliSegmentFor(node, path, root, issues) {
|
|
|
143
149
|
const override = node.segments.find((row) => row.channel === CHANNEL.cli);
|
|
144
150
|
let segment;
|
|
145
151
|
if (!override) {
|
|
146
|
-
segment = { token: node.name,
|
|
152
|
+
segment = { token: node.name, help: EMPTY_CLI_GROUP_HELP };
|
|
147
153
|
}
|
|
148
154
|
else if (!isCliSegment(override.segment)) {
|
|
149
155
|
issues.push(`${formatTreePath(path)}: invalid CLI segment override`);
|
|
150
|
-
segment = { token: node.name,
|
|
156
|
+
segment = { token: node.name, help: EMPTY_CLI_GROUP_HELP };
|
|
151
157
|
}
|
|
152
158
|
else {
|
|
153
159
|
segment = override.segment;
|
|
154
160
|
}
|
|
155
161
|
validateCliHelpExamples(segment.help.examples, formatTreePath(path), issues);
|
|
156
162
|
if (!root) {
|
|
157
|
-
validateCliCommandToken(segment.token,
|
|
158
|
-
for (const alias of segment.aliases) {
|
|
159
|
-
validateCliCommandToken(alias, CLI_SEGMENT_NAME_KIND.alias, path, issues);
|
|
160
|
-
}
|
|
163
|
+
validateCliCommandToken(segment.token, path, issues);
|
|
161
164
|
}
|
|
162
165
|
return segment;
|
|
163
166
|
}
|
|
164
|
-
function validateCliCommandToken(token,
|
|
167
|
+
function validateCliCommandToken(token, path, issues) {
|
|
165
168
|
if (token.length === 0) {
|
|
166
|
-
issues.push(`${formatTreePath(path)}: CLI segment
|
|
169
|
+
issues.push(`${formatTreePath(path)}: CLI segment token must not be empty`);
|
|
167
170
|
return;
|
|
168
171
|
}
|
|
169
172
|
if (classifyCliArgumentToken(token) !== CLI_ARGUMENT_TOKEN_KIND.value) {
|
|
170
|
-
issues.push(`${formatTreePath(path)}: CLI segment
|
|
173
|
+
issues.push(`${formatTreePath(path)}: CLI segment token ${JSON.stringify(token)} is unreachable`);
|
|
171
174
|
}
|
|
172
175
|
}
|
|
173
176
|
function cliEndpointFor(node, path, issues) {
|
|
@@ -192,14 +195,13 @@ function cliEndpointFor(node, path, issues) {
|
|
|
192
195
|
function validateCliChildren(path, children, issues) {
|
|
193
196
|
const tokens = new Map();
|
|
194
197
|
for (const child of children) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
198
|
+
const token = child.segment.token;
|
|
199
|
+
const owner = tokens.get(token);
|
|
200
|
+
if (owner !== undefined) {
|
|
201
|
+
issues.push(`${formatTreePath(path)}: CLI sibling token collision ${JSON.stringify(token)} between ${owner} and ${child.help.name}`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
tokens.set(token, child.help.name);
|
|
203
205
|
}
|
|
204
206
|
}
|
|
205
207
|
}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
export * from "./cli-application.js";
|
|
1
2
|
export * from "./cli-executor.js";
|
|
2
3
|
export * from "./cli-model.js";
|
|
3
4
|
export * from "./cli-presentation.js";
|
|
5
|
+
export * from "./cli-result-envelope.js";
|
|
4
6
|
export { createCliRouter } from "./cli-tree.js";
|
|
5
7
|
export { CLI_BOOLEAN_MODE, CLI_HELP_USAGE_KIND, CLI_OPTION_KIND, CLI_OPTION_VALUE_MODE, } from "./cli-values.js";
|
|
6
8
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
export * from "./cli-application.js";
|
|
1
2
|
export * from "./cli-executor.js";
|
|
2
3
|
export * from "./cli-model.js";
|
|
3
4
|
export * from "./cli-presentation.js";
|
|
5
|
+
export * from "./cli-result-envelope.js";
|
|
4
6
|
export { createCliRouter } from "./cli-tree.js";
|
|
5
7
|
export { CLI_BOOLEAN_MODE, CLI_HELP_USAGE_KIND, CLI_OPTION_KIND, CLI_OPTION_VALUE_MODE, } from "./cli-values.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alpacakit/channels",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.36",
|
|
4
4
|
"description": "Neutral multi-channel entry definitions with CLI and MCP binding adapters.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"LICENSE"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@alpacakit/core": "0.1.0-beta.
|
|
32
|
+
"@alpacakit/core": "0.1.0-beta.36"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"zod": "^4.3.6"
|