@shell-shock/core 0.5.1 → 0.7.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/README.md +1 -1
- package/dist/components/docs.d.cts +5 -5
- package/dist/components/docs.d.mts +5 -5
- package/dist/components/index.cjs +3 -1
- package/dist/components/index.d.cts +2 -2
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +2 -2
- package/dist/components/options-parser-logic.cjs +127 -31
- package/dist/components/options-parser-logic.cjs.map +1 -1
- package/dist/components/options-parser-logic.d.cts +37 -10
- package/dist/components/options-parser-logic.d.cts.map +1 -1
- package/dist/components/options-parser-logic.d.mts +31 -4
- package/dist/components/options-parser-logic.d.mts.map +1 -1
- package/dist/components/options-parser-logic.mjs +126 -32
- package/dist/components/options-parser-logic.mjs.map +1 -1
- package/dist/components/usage.cjs +6 -5
- package/dist/components/usage.cjs.map +1 -1
- package/dist/components/usage.d.cts +2 -4
- package/dist/components/usage.d.cts.map +1 -1
- package/dist/components/usage.d.mts +2 -4
- package/dist/components/usage.d.mts.map +1 -1
- package/dist/components/usage.mjs +7 -6
- package/dist/components/usage.mjs.map +1 -1
- package/dist/helpers/persistence.cjs +48 -3
- package/dist/helpers/persistence.cjs.map +1 -1
- package/dist/helpers/persistence.mjs +48 -3
- package/dist/helpers/persistence.mjs.map +1 -1
- package/dist/helpers/resolve-command.cjs +103 -53
- package/dist/helpers/resolve-command.cjs.map +1 -1
- package/dist/helpers/resolve-command.mjs +105 -55
- package/dist/helpers/resolve-command.mjs.map +1 -1
- package/dist/helpers/validations.cjs +20 -20
- package/dist/helpers/validations.cjs.map +1 -1
- package/dist/helpers/validations.mjs +21 -21
- package/dist/helpers/validations.mjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/plugin-utils/context-helpers.cjs +105 -4
- package/dist/plugin-utils/context-helpers.cjs.map +1 -1
- package/dist/plugin-utils/context-helpers.d.cts +89 -3
- package/dist/plugin-utils/context-helpers.d.cts.map +1 -1
- package/dist/plugin-utils/context-helpers.d.mts +89 -3
- package/dist/plugin-utils/context-helpers.d.mts.map +1 -1
- package/dist/plugin-utils/context-helpers.mjs +99 -3
- package/dist/plugin-utils/context-helpers.mjs.map +1 -1
- package/dist/plugin-utils/get-command-tree.cjs +1 -1
- package/dist/plugin-utils/get-command-tree.cjs.map +1 -1
- package/dist/plugin-utils/get-command-tree.mjs +2 -2
- package/dist/plugin-utils/get-command-tree.mjs.map +1 -1
- package/dist/plugin-utils/index.cjs +7 -2
- package/dist/plugin-utils/index.d.cts +2 -2
- package/dist/plugin-utils/index.d.mts +2 -2
- package/dist/plugin-utils/index.mjs +2 -2
- package/dist/plugin.cjs +1 -1
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +2 -2
- package/dist/plugin.mjs.map +1 -1
- package/dist/types/command.d.cts +291 -9
- package/dist/types/command.d.cts.map +1 -1
- package/dist/types/command.d.mts +291 -9
- package/dist/types/command.d.mts.map +1 -1
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.mts +2 -2
- package/package.json +3 -3
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDynamicPathSegmentName, isDynamicPathSegment } from "../plugin-utils/context-helpers.mjs";
|
|
2
2
|
import { computedOptions } from "../contexts/options.mjs";
|
|
3
3
|
import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
|
|
4
4
|
import { camelCase } from "@stryke/string-format/camel-case";
|
|
5
|
-
import { constantCase } from "@stryke/string-format/constant-case";
|
|
6
5
|
import { isSetString } from "@stryke/type-checks/is-set-string";
|
|
7
6
|
import { For, Show, code, computed } from "@alloy-js/core";
|
|
8
7
|
import { ReflectionKind } from "@powerlines/deepkit/vendor/type";
|
|
@@ -10,46 +9,42 @@ import { ElseClause, ElseIfClause, IfStatement, InterfaceDeclaration, InterfaceM
|
|
|
10
9
|
import { pascalCase } from "@stryke/string-format/pascal-case";
|
|
11
10
|
|
|
12
11
|
//#region src/components/options-parser-logic.tsx
|
|
13
|
-
function
|
|
14
|
-
const { path
|
|
12
|
+
function DynamicPathSegmentsParserLogic(props) {
|
|
13
|
+
const { path } = props;
|
|
15
14
|
return createComponent(For, {
|
|
16
15
|
get each() {
|
|
17
16
|
return path.segments ?? [];
|
|
18
17
|
},
|
|
19
18
|
children: (segment, index) => createComponent(Show, {
|
|
20
19
|
get when() {
|
|
21
|
-
return
|
|
20
|
+
return isDynamicPathSegment(segment);
|
|
22
21
|
},
|
|
23
22
|
get children() {
|
|
24
23
|
return [
|
|
25
24
|
createComponent(VarDeclaration, {
|
|
26
25
|
"let": true,
|
|
27
26
|
get name() {
|
|
28
|
-
return camelCase(
|
|
27
|
+
return camelCase(getDynamicPathSegmentName(segment));
|
|
29
28
|
},
|
|
30
29
|
get type() {
|
|
31
|
-
return
|
|
30
|
+
return `${path.dynamics[getDynamicPathSegmentName(segment)]?.variadic ? "string[]" : "string"}${path.dynamics[getDynamicPathSegmentName(segment)]?.optional ? " | undefined" : ""}`;
|
|
32
31
|
},
|
|
33
32
|
get initializer() {
|
|
34
|
-
return memo(() => !!path.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
}),
|
|
44
|
-
code`undefined;`
|
|
45
|
-
];
|
|
33
|
+
return memo(() => !!path.dynamics[getDynamicPathSegmentName(segment)]?.variadic)() ? code`[]` : [createComponent(Show, {
|
|
34
|
+
get when() {
|
|
35
|
+
return isSetString(path.dynamics[getDynamicPathSegmentName(segment)]?.default);
|
|
36
|
+
},
|
|
37
|
+
get children() {
|
|
38
|
+
return code`"${path.dynamics[getDynamicPathSegmentName(segment)]?.default}"`;
|
|
39
|
+
}
|
|
40
|
+
}), code`undefined;`];
|
|
46
41
|
}
|
|
47
42
|
}),
|
|
48
43
|
createIntrinsic("hbr", {}),
|
|
49
44
|
createComponent(IfStatement, {
|
|
50
45
|
condition: code`args.length > ${2 + index} && args[${2 + index}]`,
|
|
51
46
|
get children() {
|
|
52
|
-
return code`${camelCase(
|
|
47
|
+
return code`${camelCase(getDynamicPathSegmentName(segment))} = args[${2 + index}];`;
|
|
53
48
|
}
|
|
54
49
|
}),
|
|
55
50
|
createIntrinsic("hbr", {}),
|
|
@@ -59,6 +54,61 @@ function PositionalOptionsParserLogic(props) {
|
|
|
59
54
|
})
|
|
60
55
|
});
|
|
61
56
|
}
|
|
57
|
+
function PositionalParametersParserLogic(props) {
|
|
58
|
+
const { command, envPrefix } = props;
|
|
59
|
+
return [createComponent(For, {
|
|
60
|
+
get each() {
|
|
61
|
+
return command.params ?? [];
|
|
62
|
+
},
|
|
63
|
+
hardline: true,
|
|
64
|
+
children: (param) => [
|
|
65
|
+
createComponent(VarDeclaration, {
|
|
66
|
+
"let": true,
|
|
67
|
+
get name() {
|
|
68
|
+
return param.name;
|
|
69
|
+
},
|
|
70
|
+
get type() {
|
|
71
|
+
return `${param.kind === ReflectionKind.boolean ? "boolean" : param.kind === ReflectionKind.number ? "number" : "string"}${(param.kind === ReflectionKind.string || param.kind === ReflectionKind.number) && param.variadic ? "[]" : ""}${param.optional ? " | undefined" : ""}`;
|
|
72
|
+
},
|
|
73
|
+
get initializer() {
|
|
74
|
+
return [memo(() => code`env.${envPrefix}_${param.env} ?? `), createComponent(Show, {
|
|
75
|
+
get when() {
|
|
76
|
+
return param.default !== void 0;
|
|
77
|
+
},
|
|
78
|
+
get fallback() {
|
|
79
|
+
return (param.kind === ReflectionKind.string || param.kind === ReflectionKind.number) && param.variadic ? code`[]` : code`undefined;`;
|
|
80
|
+
},
|
|
81
|
+
get children() {
|
|
82
|
+
return param.kind === ReflectionKind.string ? code`"${param.default}"` : code`${param.default}`;
|
|
83
|
+
}
|
|
84
|
+
})];
|
|
85
|
+
}
|
|
86
|
+
}),
|
|
87
|
+
createIntrinsic("hbr", {}),
|
|
88
|
+
createIntrinsic("hbr", {}),
|
|
89
|
+
createComponent(IfStatement, {
|
|
90
|
+
get condition() {
|
|
91
|
+
return code`args.length > ${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length + 1} && args[${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length + 1}]`;
|
|
92
|
+
},
|
|
93
|
+
get children() {
|
|
94
|
+
return createComponent(Show, {
|
|
95
|
+
get when() {
|
|
96
|
+
return param.kind === ReflectionKind.string || param.kind === ReflectionKind.number;
|
|
97
|
+
},
|
|
98
|
+
get fallback() {
|
|
99
|
+
return code`${param.name} = args[${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length + 1}];`;
|
|
100
|
+
},
|
|
101
|
+
get children() {
|
|
102
|
+
return code`${param.name} = ${(param.kind === ReflectionKind.string || param.kind === ReflectionKind.number) && param.variadic ? `args.slice(${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length + 1})` : `args[${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length + 1}]`}${param.kind === ReflectionKind.number ? ".map(Number).filter(value => !Number.isNaN(value))" : ""};`;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}),
|
|
107
|
+
createIntrinsic("hbr", {}),
|
|
108
|
+
createIntrinsic("hbr", {})
|
|
109
|
+
]
|
|
110
|
+
})];
|
|
111
|
+
}
|
|
62
112
|
/**
|
|
63
113
|
* The command option interface property.
|
|
64
114
|
*/
|
|
@@ -134,7 +184,7 @@ function OptionsMember({ option }) {
|
|
|
134
184
|
*/
|
|
135
185
|
function OptionsMemberParserLogic(props) {
|
|
136
186
|
const { name, option, isCaseSensitive } = props;
|
|
137
|
-
const equalsRegex = `/^--?(${isCaseSensitive
|
|
187
|
+
const equalsRegex = `/^--?(${isCaseSensitive || name.length === 1 ? name : name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}${option.alias && option.alias.length > 0 ? "|" : ""}${option.alias?.map((a) => (isCaseSensitive || name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")) === "?" ? "\\?" : isCaseSensitive || name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")})=/`;
|
|
138
188
|
return [createComponent(Show, {
|
|
139
189
|
get when() {
|
|
140
190
|
return option.kind === ReflectionKind.string || option.kind === ReflectionKind.number;
|
|
@@ -155,7 +205,7 @@ function OptionsMemberParserLogic(props) {
|
|
|
155
205
|
}),
|
|
156
206
|
createIntrinsic("hbr", {}),
|
|
157
207
|
createComponent(IfStatement, {
|
|
158
|
-
condition: `${equalsRegex}.test(
|
|
208
|
+
condition: `${equalsRegex}.test(${isCaseSensitive ? "arg" : "\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})`,
|
|
159
209
|
get children() {
|
|
160
210
|
return [
|
|
161
211
|
createComponent(Show, {
|
|
@@ -217,7 +267,7 @@ function OptionsMemberParserLogic(props) {
|
|
|
217
267
|
get children() {
|
|
218
268
|
return [
|
|
219
269
|
createComponent(IfStatement, {
|
|
220
|
-
condition: `${equalsRegex}.test(
|
|
270
|
+
condition: `${equalsRegex}.test(${isCaseSensitive ? "arg" : "\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})`,
|
|
221
271
|
get children() {
|
|
222
272
|
return [createComponent(Show, {
|
|
223
273
|
get when() {
|
|
@@ -318,7 +368,7 @@ function OptionsMemberParserLogic(props) {
|
|
|
318
368
|
get children() {
|
|
319
369
|
return [
|
|
320
370
|
createComponent(IfStatement, {
|
|
321
|
-
condition: `${equalsRegex}.test(
|
|
371
|
+
condition: `${equalsRegex}.test(${isCaseSensitive ? "arg" : "\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})`,
|
|
322
372
|
get children() {
|
|
323
373
|
return [
|
|
324
374
|
createComponent(VarDeclaration, {
|
|
@@ -370,15 +420,15 @@ function OptionsMemberParserLogic(props) {
|
|
|
370
420
|
})];
|
|
371
421
|
}
|
|
372
422
|
function OptionsMemberParserCondition(props) {
|
|
373
|
-
const { name, alias, isCaseSensitive } = props;
|
|
374
|
-
return [memo(() => code
|
|
423
|
+
const { name, alias: aliasProp, isCaseSensitive } = props;
|
|
424
|
+
return [memo(() => code`${isCaseSensitive ? "arg.startsWith(\"--" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\""}${isCaseSensitive ? name : name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}=") || ${isCaseSensitive ? "arg" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${isCaseSensitive ? name : name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}" || ${isCaseSensitive ? "arg.startsWith(\"-" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\""}${isCaseSensitive ? name : name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}=") || ${isCaseSensitive ? "arg" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${isCaseSensitive ? name : name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`), createComponent(Show, {
|
|
375
425
|
get when() {
|
|
376
|
-
return
|
|
426
|
+
return aliasProp && aliasProp.length > 0;
|
|
377
427
|
},
|
|
378
428
|
get children() {
|
|
379
429
|
return createComponent(For, {
|
|
380
|
-
each:
|
|
381
|
-
children: (
|
|
430
|
+
each: aliasProp ?? [],
|
|
431
|
+
children: (alias) => code` || ${isCaseSensitive || alias.length === 1 ? "arg.startsWith(\"--" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\""}${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}=") || ${isCaseSensitive || alias.length === 1 ? "arg" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}" || ${isCaseSensitive || alias.length === 1 ? "arg.startsWith(\"-" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\""}${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}=") || ${isCaseSensitive || alias.length === 1 ? "arg" : "arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`
|
|
382
432
|
});
|
|
383
433
|
}
|
|
384
434
|
})];
|
|
@@ -425,14 +475,14 @@ function OptionsParserLogic(props) {
|
|
|
425
475
|
}),
|
|
426
476
|
createIntrinsic("hbr", {}),
|
|
427
477
|
createIntrinsic("hbr", {}),
|
|
428
|
-
memo(() => code`for (let i = 0; i < args.slice(${command.path.segments.filter((segment) =>
|
|
478
|
+
memo(() => code`for (let i = 0; i < args.slice(${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length}).length; i++) { `),
|
|
429
479
|
createIntrinsic("hbr", {}),
|
|
430
480
|
createComponent(VarDeclaration, {
|
|
431
481
|
"const": true,
|
|
432
482
|
name: "arg",
|
|
433
483
|
type: "string",
|
|
434
484
|
initializer: code` args[i].length > 3 && args[i].startsWith("--")
|
|
435
|
-
? \`--\${args[i].slice(2).replaceAll("-", "")${isCaseSensitive ? "" : ".toLowerCase()"}}\`
|
|
485
|
+
? \`--\${args[i].slice(2).replaceAll("-", "")${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"}}\`
|
|
436
486
|
: args[i].length > 2 && args[i].startsWith("-")
|
|
437
487
|
? \`-\${args[i].slice(1).replaceAll("-", "")}\`
|
|
438
488
|
: args[i]; `
|
|
@@ -492,7 +542,51 @@ function OptionsParserLogic(props) {
|
|
|
492
542
|
createIntrinsic("hbr", {})
|
|
493
543
|
];
|
|
494
544
|
}
|
|
545
|
+
/**
|
|
546
|
+
* The command parser logic, which includes parsing dynamic path segments, positional parameters, and options.
|
|
547
|
+
*/
|
|
548
|
+
function CommandParserLogic(props) {
|
|
549
|
+
const { command, envPrefix, isCaseSensitive = false } = props;
|
|
550
|
+
return [
|
|
551
|
+
createComponent(DynamicPathSegmentsParserLogic, { get path() {
|
|
552
|
+
return command.path;
|
|
553
|
+
} }),
|
|
554
|
+
createIntrinsic("hbr", {}),
|
|
555
|
+
createIntrinsic("hbr", {}),
|
|
556
|
+
createComponent(VarDeclaration, {
|
|
557
|
+
"const": true,
|
|
558
|
+
name: "lastSegmentIndex",
|
|
559
|
+
type: "number",
|
|
560
|
+
get initializer() {
|
|
561
|
+
return memo(() => !!isDynamicPathSegment(command.path.segments[command.path.segments.length - 1]))() ? `args.some(arg => /^--?(${Object.keys(command.options).map((key) => key.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")})(=.*)?$/.test(arg${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})) ? args.findIndex(arg => /^--?(${Object.keys(command.options).map((key) => key.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")})(=.*)?$/.test(arg${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})) : args.length - ${command.params.length + 1}` : `args.reduce((ret, arg, index) => {
|
|
562
|
+
if (ret === -1 && (index < args.findIndex(a => /^--?(${Object.keys(command.options).map((key) => key.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")})(=.*)?$/.test(a${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})) || !args.some(a => /^--?(${Object.keys(command.options).map((key) => key.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")})(=.*)?$/.test(a${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"}))) && arg${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${command.path.segments[command.path.segments.length - 1]?.toLowerCase()}") {
|
|
563
|
+
return index;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
return ret;
|
|
567
|
+
}, -1); `;
|
|
568
|
+
}
|
|
569
|
+
}),
|
|
570
|
+
code`
|
|
571
|
+
`,
|
|
572
|
+
createIntrinsic("hbr", {}),
|
|
573
|
+
createIntrinsic("hbr", {}),
|
|
574
|
+
createComponent(OptionsParserLogic, {
|
|
575
|
+
command,
|
|
576
|
+
envPrefix,
|
|
577
|
+
isCaseSensitive
|
|
578
|
+
}),
|
|
579
|
+
createIntrinsic("hbr", {}),
|
|
580
|
+
createIntrinsic("hbr", {}),
|
|
581
|
+
createComponent(PositionalParametersParserLogic, {
|
|
582
|
+
command,
|
|
583
|
+
envPrefix
|
|
584
|
+
}),
|
|
585
|
+
createIntrinsic("hbr", {}),
|
|
586
|
+
createIntrinsic("hbr", {})
|
|
587
|
+
];
|
|
588
|
+
}
|
|
495
589
|
|
|
496
590
|
//#endregion
|
|
497
|
-
export { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic,
|
|
591
|
+
export { CommandParserLogic, DynamicPathSegmentsParserLogic, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic, PositionalParametersParserLogic };
|
|
498
592
|
//# sourceMappingURL=options-parser-logic.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-parser-logic.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","IfStatement","InterfaceDeclaration","InterfaceMember","VarDeclaration","ReflectionKind","camelCase","constantCase","pascalCase","isSetString","computedOptions","getPositionalCommandOptionName","isPositionalCommandOption","PositionalOptionsParserLogic","props","path","envPrefix","_$createComponent","each","segments","children","segment","index","when","name","type","_$memo","positional","kind","number","variadic","initializer","default","_$createIntrinsic","condition","OptionsMember","option","doc","description","title","Boolean","string","optional","boolean","OptionsMemberParserLogic","isCaseSensitive","equalsRegex","length","toLowerCase","alias","map","a","join","includes","fallback","isNegativeOf","OptionsMemberParserCondition","OptionsInterfaceDeclaration","command","options","Object","values","value","hardline","OptionsParserLogic","entries","env","undefined","JSON","stringify","filter","i"],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n IfStatement,\n InterfaceDeclaration,\n InterfaceMember,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { computedOptions } from \"../contexts/options\";\nimport {\n getPositionalCommandOptionName,\n isPositionalCommandOption\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n CommandTreePath,\n NumberCommandOption,\n StringCommandOption\n} from \"../types/command\";\n\nexport interface PositionalOptionsParserLogicProps {\n /**\n * The command path to generate the positional options parser logic for.\n */\n path: CommandTreePath;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n}\n\nexport function PositionalOptionsParserLogic(\n props: PositionalOptionsParserLogicProps\n) {\n const { path, envPrefix } = props;\n\n return (\n <For each={path.segments ?? []}>\n {(segment, index) => (\n <Show when={isPositionalCommandOption(segment)}>\n <VarDeclaration\n let\n name={camelCase(getPositionalCommandOptionName(segment))}\n type={\n path.positional[getPositionalCommandOptionName(segment)]?.kind ===\n ReflectionKind.number\n ? path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"number[]\"\n : \"number | undefined\"\n : path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"string[]\"\n : \"string | undefined\"\n }\n initializer={\n path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic ? (\n code`[]`\n ) : (\n <>\n {code`env.${\n envPrefix\n }_${constantCase(path.positional[getPositionalCommandOptionName(segment)]?.name)} ?? `}\n <Show\n when={isSetString(\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n )}>\n {code`\"${\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n }\"`}\n </Show>\n {code`undefined;`}\n </>\n )\n }\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(getPositionalCommandOptionName(segment))} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({ option }: { option: CommandOption }) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={Boolean(option.name)}>\n <Show when={option.kind === ReflectionKind.string}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as StringCommandOption).variadic ? \"string[]\" : \"string\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as NumberCommandOption).variadic ? \"number[]\" : \"number\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type=\"boolean\"\n optional={option.optional}\n />\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserLogicProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * The command option to generate the parser logic for.\n */\n option: CommandOption;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps) {\n const { name, option, isCaseSensitive } = props;\n\n const equalsRegex = `/^--?(${\n isCaseSensitive && name.length > 1 ? name : name.toLowerCase()\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive && name.length > 1 ? a : a.toLowerCase()) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive && name.length > 1\n ? a\n : a.toLowerCase()\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>\n <Show\n when={(option as StringCommandOption | NumberCommandOption).variadic}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandOption | NumberCommandOption).variadic\n }>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value !== \"false\" && value !== \"f\" && value !== \"no\" && value !== \"n\" && value !== \"0\" && value !== \"off\" && value !== \"disable\" && value !== \"disabled\"; `}\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserConditionProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n alias?: string[];\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\nexport function OptionsMemberParserCondition(\n props: OptionsMemberParserConditionProps\n) {\n const { name, alias, isCaseSensitive } = props;\n\n return (\n <>\n {code`arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive ? name : name.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive ? name : name.toLowerCase()\n }\" || arg.startsWith(\"-${name}=\") || arg === \"-${name}\"`}\n <Show when={alias && alias.length > 0}>\n <For each={alias ?? []}>\n {a =>\n code` || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive || a.length === 1 ? a : a.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive || a.length === 1 ? a : a.toLowerCase()\n }\" || arg.startsWith(\"-${a}=\") || arg === \"-${a}\"`\n }\n </For>\n </Show>\n </>\n );\n}\n\nexport function OptionsInterfaceDeclaration(props: { command: CommandTree }) {\n const { command } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <InterfaceDeclaration export name={`${pascalCase(command.name)}Options`}>\n <For each={Object.values(options.value)} hardline>\n {option => <OptionsMember option={option} />}\n </For>\n </InterfaceDeclaration>\n );\n}\n\nexport interface OptionsParserLogicProps {\n /**\n * The command to generate the options parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive?: boolean;\n}\n\n/**\n * The command options parser logic.\n */\nexport function OptionsParserLogic(props: OptionsParserLogicProps) {\n const { command, envPrefix, isCaseSensitive = false } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <>\n <VarDeclaration\n const\n name=\"options\"\n initializer={code` {\n ${Object.entries(options.value)\n .map(([name, option]) => {\n if (option.kind === ReflectionKind.string) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}\"${option.default}\"`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.number) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}${option.default}`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.boolean) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env} ?? ` : \"\"\n }${option.default ? \"true\" : \"false\"},`;\n }\n\n return \"\";\n })\n .join(\"\")}\n } as ${pascalCase(command.name)}Options;`}\n />\n <hbr />\n <hbr />\n {code`for (let i = 0; i < args.slice(${\n command.path.segments.filter(segment =>\n isPositionalCommandOption(segment)\n ).length\n }).length; i++) { `}\n <hbr />\n <VarDeclaration\n const\n name=\"arg\"\n type=\"string\"\n initializer={code` args[i].length > 3 && args[i].startsWith(\"--\")\n ? \\`--\\${args[i].slice(2).replaceAll(\"-\", \"\")${\n isCaseSensitive ? \"\" : \".toLowerCase()\"\n }}\\`\n : args[i].length > 2 && args[i].startsWith(\"-\")\n ? \\`-\\${args[i].slice(1).replaceAll(\"-\", \"\")}\\`\n : args[i]; `}\n />\n <hbr />\n\n <For each={Object.entries(options.value)} hardline>\n {([name, option], i) => (\n <Show\n when={i === 0}\n fallback={\n <ElseIfClause\n condition={\n <>\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n </>\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </ElseIfClause>\n }>\n <IfStatement\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </IfStatement>\n </Show>\n )}\n </For>\n\n <hbr />\n {code` } `}\n <hbr />\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options-parser-logic.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","IfStatement","InterfaceDeclaration","InterfaceMember","VarDeclaration","ReflectionKind","camelCase","pascalCase","isSetString","computedOptions","getDynamicPathSegmentName","isDynamicPathSegment","DynamicPathSegmentsParserLogic","props","path","_$createComponent","each","segments","children","segment","index","when","name","type","dynamics","variadic","optional","initializer","_$memo","default","_$createIntrinsic","condition","PositionalParametersParserLogic","command","envPrefix","params","hardline","param","kind","boolean","number","string","env","undefined","fallback","filter","length","OptionsMember","option","doc","description","title","Boolean","OptionsMemberParserLogic","isCaseSensitive","equalsRegex","toLowerCase","replaceAll","alias","map","a","join","includes","isNegativeOf","OptionsMemberParserCondition","aliasProp","OptionsInterfaceDeclaration","options","Object","values","value","OptionsParserLogic","entries","JSON","stringify","i","CommandParserLogic","keys","key"],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n IfStatement,\n InterfaceDeclaration,\n InterfaceMember,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { computedOptions } from \"../contexts/options\";\nimport {\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n CommandTreePath,\n NumberCommandOption,\n StringCommandOption\n} from \"../types/command\";\n\nexport interface DynamicPathSegmentsParserLogicProps {\n /**\n * The command path to generate the dynamic path segments parser logic for.\n */\n path: CommandTreePath;\n}\n\nexport function DynamicPathSegmentsParserLogic(\n props: DynamicPathSegmentsParserLogicProps\n) {\n const { path } = props;\n\n return (\n <For each={path.segments ?? []}>\n {(segment, index) => (\n <Show when={isDynamicPathSegment(segment)}>\n <VarDeclaration\n let\n name={camelCase(getDynamicPathSegmentName(segment))}\n type={`${\n path.dynamics[getDynamicPathSegmentName(segment)]?.variadic\n ? \"string[]\"\n : \"string\"\n }${\n path.dynamics[getDynamicPathSegmentName(segment)]?.optional\n ? \" | undefined\"\n : \"\"\n }`}\n initializer={\n path.dynamics[getDynamicPathSegmentName(segment)]?.variadic ? (\n code`[]`\n ) : (\n <>\n <Show\n when={isSetString(\n path.dynamics[getDynamicPathSegmentName(segment)]?.default\n )}>\n {code`\"${\n path.dynamics[getDynamicPathSegmentName(segment)]?.default\n }\"`}\n </Show>\n {code`undefined;`}\n </>\n )\n }\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(getDynamicPathSegmentName(segment))} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\nexport interface PositionalParametersParserLogicProps {\n /**\n * The command to generate the positional parameters parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n}\n\nexport function PositionalParametersParserLogic(\n props: PositionalParametersParserLogicProps\n) {\n const { command, envPrefix } = props;\n\n return (\n <>\n <For each={command.params ?? []} hardline>\n {param => (\n <>\n <VarDeclaration\n let\n name={param.name}\n type={`${\n param.kind === ReflectionKind.boolean\n ? \"boolean\"\n : param.kind === ReflectionKind.number\n ? \"number\"\n : \"string\"\n }${\n (param.kind === ReflectionKind.string ||\n param.kind === ReflectionKind.number) &&\n param.variadic\n ? \"[]\"\n : \"\"\n }${param.optional ? \" | undefined\" : \"\"}`}\n initializer={\n <>\n {code`env.${envPrefix}_${param.env} ?? `}\n <Show\n when={param.default !== undefined}\n fallback={\n (param.kind === ReflectionKind.string ||\n param.kind === ReflectionKind.number) &&\n param.variadic\n ? code`[]`\n : code`undefined;`\n }>\n {param.kind === ReflectionKind.string\n ? code`\"${param.default}\"`\n : code`${param.default}`}\n </Show>\n </>\n }\n />\n <hbr />\n <hbr />\n <IfStatement\n condition={code`args.length > ${\n command.path.segments.filter(segment =>\n isDynamicPathSegment(segment)\n ).length + 1\n } && args[${\n command.path.segments.filter(segment =>\n isDynamicPathSegment(segment)\n ).length + 1\n }]`}>\n <Show\n when={\n param.kind === ReflectionKind.string ||\n param.kind === ReflectionKind.number\n }\n fallback={code`${param.name} = args[${\n command.path.segments.filter(segment =>\n isDynamicPathSegment(segment)\n ).length + 1\n }];`}>\n {code`${param.name} = ${\n (param.kind === ReflectionKind.string ||\n param.kind === ReflectionKind.number) &&\n param.variadic\n ? `args.slice(${\n command.path.segments.filter(segment =>\n isDynamicPathSegment(segment)\n ).length + 1\n })`\n : `args[${\n command.path.segments.filter(segment =>\n isDynamicPathSegment(segment)\n ).length + 1\n }]`\n }${\n param.kind === ReflectionKind.number\n ? \".map(Number).filter(value => !Number.isNaN(value))\"\n : \"\"\n };`}\n </Show>\n </IfStatement>\n <hbr />\n <hbr />\n </>\n )}\n </For>\n </>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({ option }: { option: CommandOption }) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={Boolean(option.name)}>\n <Show when={option.kind === ReflectionKind.string}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as StringCommandOption).variadic ? \"string[]\" : \"string\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as NumberCommandOption).variadic ? \"number[]\" : \"number\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type=\"boolean\"\n optional={option.optional}\n />\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserLogicProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * The command option to generate the parser logic for.\n */\n option: CommandOption;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps) {\n const { name, option, isCaseSensitive } = props;\n\n const equalsRegex = `/^--?(${\n isCaseSensitive || name.length === 1\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>\n <Show\n when={(option as StringCommandOption | NumberCommandOption).variadic}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement\n condition={`${equalsRegex}.test(${\n isCaseSensitive\n ? \"arg\"\n : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n })`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandOption | NumberCommandOption).variadic\n }>\n <IfStatement\n condition={`${equalsRegex}.test(${isCaseSensitive ? \"arg\" : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'})`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <IfStatement\n condition={`${equalsRegex}.test(${isCaseSensitive ? \"arg\" : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'})`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value !== \"false\" && value !== \"f\" && value !== \"no\" && value !== \"n\" && value !== \"0\" && value !== \"off\" && value !== \"disable\" && value !== \"disabled\"; `}\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserConditionProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n alias?: string[];\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\nexport function OptionsMemberParserCondition(\n props: OptionsMemberParserConditionProps\n) {\n const { name, alias: aliasProp, isCaseSensitive } = props;\n\n return (\n <>\n {code`${\n isCaseSensitive\n ? 'arg.startsWith(\"--'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive ? name : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\" || ${\n isCaseSensitive\n ? 'arg.startsWith(\"-'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive ? name : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\"`}\n <Show when={aliasProp && aliasProp.length > 0}>\n <For each={aliasProp ?? []}>\n {alias =>\n code` || ${\n isCaseSensitive || alias.length === 1\n ? 'arg.startsWith(\"--'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive || alias.length === 1\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive || alias.length === 1\n ? alias\n : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\" || ${\n isCaseSensitive || alias.length === 1\n ? 'arg.startsWith(\"-'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive || alias.length === 1\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive || alias.length === 1\n ? alias\n : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\"`\n }\n </For>\n </Show>\n </>\n );\n}\n\nexport function OptionsInterfaceDeclaration(props: { command: CommandTree }) {\n const { command } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <InterfaceDeclaration export name={`${pascalCase(command.name)}Options`}>\n <For each={Object.values(options.value)} hardline>\n {option => <OptionsMember option={option} />}\n </For>\n </InterfaceDeclaration>\n );\n}\n\nexport interface OptionsParserLogicProps {\n /**\n * The command to generate the options parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive?: boolean;\n}\n\n/**\n * The command options parser logic.\n */\nexport function OptionsParserLogic(props: OptionsParserLogicProps) {\n const { command, envPrefix, isCaseSensitive = false } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <>\n <VarDeclaration\n const\n name=\"options\"\n initializer={code` {\n ${Object.entries(options.value)\n .map(([name, option]) => {\n if (option.kind === ReflectionKind.string) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}\"${option.default}\"`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.number) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}${option.default}`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.boolean) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env} ?? ` : \"\"\n }${option.default ? \"true\" : \"false\"},`;\n }\n\n return \"\";\n })\n .join(\"\")}\n } as ${pascalCase(command.name)}Options;`}\n />\n <hbr />\n <hbr />\n {code`for (let i = 0; i < args.slice(${\n command.path.segments.filter(segment => isDynamicPathSegment(segment))\n .length\n }).length; i++) { `}\n <hbr />\n <VarDeclaration\n const\n name=\"arg\"\n type=\"string\"\n initializer={code` args[i].length > 3 && args[i].startsWith(\"--\")\n ? \\`--\\${args[i].slice(2).replaceAll(\"-\", \"\")${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }}\\`\n : args[i].length > 2 && args[i].startsWith(\"-\")\n ? \\`-\\${args[i].slice(1).replaceAll(\"-\", \"\")}\\`\n : args[i]; `}\n />\n <hbr />\n\n <For each={Object.entries(options.value)} hardline>\n {([name, option], i) => (\n <Show\n when={i === 0}\n fallback={\n <ElseIfClause\n condition={\n <>\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n </>\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </ElseIfClause>\n }>\n <IfStatement\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </IfStatement>\n </Show>\n )}\n </For>\n\n <hbr />\n {code` } `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandParserLogicProps {\n /**\n * The command to generate the parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive?: boolean;\n}\n\n/**\n * The command parser logic, which includes parsing dynamic path segments, positional parameters, and options.\n */\nexport function CommandParserLogic(props: CommandParserLogicProps) {\n const { command, envPrefix, isCaseSensitive = false } = props;\n\n return (\n <>\n <DynamicPathSegmentsParserLogic path={command.path} />\n <hbr />\n <hbr />\n <VarDeclaration\n const\n name=\"lastSegmentIndex\"\n type=\"number\"\n initializer={\n isDynamicPathSegment(\n command.path.segments[command.path.segments.length - 1]!\n )\n ? `args.some(arg => /^--?(${Object.keys(command.options)\n .map(key =>\n key.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")})(=.*)?$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n })) ? args.findIndex(arg => /^--?(${Object.keys(command.options)\n .map(key =>\n key.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")})(=.*)?$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n })) : args.length - ${command.params.length + 1}`\n : `args.reduce((ret, arg, index) => {\n if (ret === -1 && (index < args.findIndex(a => /^--?(${Object.keys(\n command.options\n )\n .map(key => key.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\"))\n .join(\"|\")})(=.*)?$/.test(a${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n })) || !args.some(a => /^--?(${Object.keys(command.options)\n .map(key => key.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\"))\n .join(\"|\")})(=.*)?$/.test(a${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }))) && arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${command.path.segments[\n command.path.segments.length - 1\n ]?.toLowerCase()}\") {\n return index;\n }\n\n return ret;\n }, -1); `\n }\n />\n {code`\n `}\n <hbr />\n <hbr />\n <OptionsParserLogic\n command={command}\n envPrefix={envPrefix}\n isCaseSensitive={isCaseSensitive}\n />\n <hbr />\n <hbr />\n <PositionalParametersParserLogic\n command={command}\n envPrefix={envPrefix}\n />\n <hbr />\n <hbr />\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
|
2
2
|
const require_plugin_utils_context_helpers = require('../plugin-utils/context-helpers.cjs');
|
|
3
3
|
let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
|
|
4
4
|
let __alloy_js_core = require("@alloy-js/core");
|
|
5
|
+
let __powerlines_deepkit_vendor_type = require("@powerlines/deepkit/vendor/type");
|
|
5
6
|
let __stryke_string_format_snake_case = require("@stryke/string-format/snake-case");
|
|
6
7
|
|
|
7
8
|
//#region src/components/usage.tsx
|
|
@@ -14,6 +15,10 @@ function Usage(props) {
|
|
|
14
15
|
__alloy_js_core.code`$ `,
|
|
15
16
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Switch, { get children() {
|
|
16
17
|
return [
|
|
18
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Match, {
|
|
19
|
+
when: packageManager === "npm",
|
|
20
|
+
children: `npx `
|
|
21
|
+
}),
|
|
17
22
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Match, {
|
|
18
23
|
when: packageManager === "yarn",
|
|
19
24
|
children: `yarn exec `
|
|
@@ -25,14 +30,10 @@ function Usage(props) {
|
|
|
25
30
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Match, {
|
|
26
31
|
when: packageManager === "bun",
|
|
27
32
|
children: `bun x `
|
|
28
|
-
}),
|
|
29
|
-
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Match, {
|
|
30
|
-
"else": true,
|
|
31
|
-
children: `npx `
|
|
32
33
|
})
|
|
33
34
|
];
|
|
34
35
|
} }),
|
|
35
|
-
(0, __alloy_js_core_jsx_runtime.memo)(() => __alloy_js_core.code`${bin} ${command.path.segments.map((segment) => require_plugin_utils_context_helpers.
|
|
36
|
+
(0, __alloy_js_core_jsx_runtime.memo)(() => __alloy_js_core.code`${bin}${command.path.segments.length > 0 ? ` ${command.path.segments.map((segment) => require_plugin_utils_context_helpers.isDynamicPathSegment(segment) ? `[${(0, __stryke_string_format_snake_case.snakeCase)(command.path.dynamics[segment]?.name || require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment))}${command.path.dynamics[segment]?.variadic ? "..." : ""}]` : segment).join(" ")}` : ""}${Object.values(command.children).length > 0 ? " [commands]" : ""}${command.params.length > 0 ? ` ${command.params.map((param) => `<${(0, __stryke_string_format_snake_case.snakeCase)(param.name)}${(param.kind === __powerlines_deepkit_vendor_type.ReflectionKind.string || param.kind === __powerlines_deepkit_vendor_type.ReflectionKind.number) && param.variadic ? "..." : ""}>`).join(" ")}` : ""} [options]`)
|
|
36
37
|
];
|
|
37
38
|
}
|
|
38
39
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.cjs","names":["code","Match","Switch","snakeCase","
|
|
1
|
+
{"version":3,"file":"usage.cjs","names":["code","Match","Switch","ReflectionKind","snakeCase","getDynamicPathSegmentName","isDynamicPathSegment","Usage","props","command","bin","packageManager","_$createComponent","children","when","_$memo","path","segments","length","map","segment","dynamics","name","variadic","join","Object","values","params","param","kind","string","number"],"sources":["../../src/components/usage.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, Match, Switch } from \"@alloy-js/core\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { snakeCase } from \"@stryke/string-format/snake-case\";\nimport {\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"../plugin-utils/context-helpers\";\nimport type { CommandTree } from \"../types/command\";\n\nexport interface UsageProps {\n /**\n * The command to generate help for.\n */\n command: CommandTree;\n\n /**\n * The package manager to generate the usage example for.\n *\n * @remarks\n * If not specified, examples for all supported package managers will be generated.\n */\n packageManager?: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\n /**\n * The bin name to use in the usage display.\n */\n bin: string;\n}\n\n/**\n * A component that generates the usage display for a command.\n */\nexport function Usage(props: UsageProps) {\n const { command, bin, packageManager } = props;\n\n return (\n <>\n {code`$ `}\n <Switch>\n <Match when={packageManager === \"npm\"}>{`npx `}</Match>\n <Match when={packageManager === \"yarn\"}>{`yarn exec `}</Match>\n <Match when={packageManager === \"pnpm\"}>{`pnpm exec `}</Match>\n <Match when={packageManager === \"bun\"}>{`bun x `}</Match>\n </Switch>\n {code`${bin}${\n command.path.segments.length > 0\n ? ` ${command.path.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${snakeCase(\n command.path.dynamics[segment]?.name ||\n getDynamicPathSegmentName(segment)\n )}${command.path.dynamics[segment]?.variadic ? \"...\" : \"\"}]`\n : segment\n )\n .join(\" \")}`\n : \"\"\n }${Object.values(command.children).length > 0 ? \" [commands]\" : \"\"}${\n command.params.length > 0\n ? ` ${command.params\n .map(\n param =>\n `<${snakeCase(param.name)}${\n (param.kind === ReflectionKind.string ||\n param.kind === ReflectionKind.number) &&\n param.variadic\n ? \"...\"\n : \"\"\n }>`\n )\n .join(\" \")}`\n : \"\"\n } [options]`}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;AAkDA,SAAgBO,MAAMC,OAAmB;CACvC,MAAM,EAAEC,SAASC,KAAKC,mBAAmBH;AAEzC,QAAA;EAEKR,oBAAI;mDACJE,wBAAM,EAAA,IAAAW,WAAA;AAAA,UAAA;qDACJZ,uBAAK;KAACa,MAAMH,mBAAmB;KAAKE,UAAG;KAAM,CAAA;qDAC7CZ,uBAAK;KAACa,MAAMH,mBAAmB;KAAME,UAAG;KAAY,CAAA;qDACpDZ,uBAAK;KAACa,MAAMH,mBAAmB;KAAME,UAAG;KAAY,CAAA;qDACpDZ,uBAAK;KAACa,MAAMH,mBAAmB;KAAKE,UAAG;KAAQ,CAAA;IAAA;KAAA,CAAA;8CAEjDb,oBAAI,GAAGU,MACND,QAAQO,KAAKC,SAASC,SAAS,IAC3B,IAAIT,QAAQO,KAAKC,SACdE,KAAIC,YACHd,0DAAqBc,QAAQ,GACzB,qDACEX,QAAQO,KAAKK,SAASD,UAAUE,QAC9BjB,+DAA0Be,QAC9B,CAAC,GAAGX,QAAQO,KAAKK,SAASD,UAAUG,WAAW,QAAQ,GAAE,KACzDH,QACL,CACAI,KAAK,IAAI,KACZ,KACHC,OAAOC,OAAOjB,QAAQI,SAAS,CAACK,SAAS,IAAI,gBAAgB,KAC9DT,QAAQkB,OAAOT,SAAS,IACpB,IAAIT,QAAQkB,OACTR,KACCS,UACE,qDAAcA,MAAMN,KAAK,IACtBM,MAAMC,SAAS1B,gDAAe2B,UAC7BF,MAAMC,SAAS1B,gDAAe4B,WAChCH,MAAML,WACF,QACA,GAAE,GAEX,CACAC,KAAK,IAAI,KACZ,GAAE,YACI;EAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommandTree } from "../types/command.cjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _alloy_js_core0 from "@alloy-js/core";
|
|
3
3
|
|
|
4
4
|
//#region src/components/usage.d.ts
|
|
5
5
|
interface UsageProps {
|
|
@@ -12,8 +12,6 @@ interface UsageProps {
|
|
|
12
12
|
*
|
|
13
13
|
* @remarks
|
|
14
14
|
* If not specified, examples for all supported package managers will be generated.
|
|
15
|
-
*
|
|
16
|
-
* @defaultValue "npm"
|
|
17
15
|
*/
|
|
18
16
|
packageManager?: "npm" | "yarn" | "pnpm" | "bun";
|
|
19
17
|
/**
|
|
@@ -24,7 +22,7 @@ interface UsageProps {
|
|
|
24
22
|
/**
|
|
25
23
|
* A component that generates the usage display for a command.
|
|
26
24
|
*/
|
|
27
|
-
declare function Usage(props: UsageProps):
|
|
25
|
+
declare function Usage(props: UsageProps): _alloy_js_core0.Children;
|
|
28
26
|
//#endregion
|
|
29
27
|
export { Usage, UsageProps };
|
|
30
28
|
//# sourceMappingURL=usage.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.cts","names":[],"sources":["../../src/components/usage.tsx"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"usage.d.cts","names":[],"sources":["../../src/components/usage.tsx"],"sourcesContent":[],"mappings":";;;;UA2BiB,UAAA;;;AAAjB;EAuBgB,OAAA,EAnBL,WAmBkB;;;;;;;;;;;;;;;;iBAAb,KAAA,QAAa,aAAU,eAAA,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommandTree } from "../types/command.mjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _alloy_js_core11 from "@alloy-js/core";
|
|
3
3
|
|
|
4
4
|
//#region src/components/usage.d.ts
|
|
5
5
|
interface UsageProps {
|
|
@@ -12,8 +12,6 @@ interface UsageProps {
|
|
|
12
12
|
*
|
|
13
13
|
* @remarks
|
|
14
14
|
* If not specified, examples for all supported package managers will be generated.
|
|
15
|
-
*
|
|
16
|
-
* @defaultValue "npm"
|
|
17
15
|
*/
|
|
18
16
|
packageManager?: "npm" | "yarn" | "pnpm" | "bun";
|
|
19
17
|
/**
|
|
@@ -24,7 +22,7 @@ interface UsageProps {
|
|
|
24
22
|
/**
|
|
25
23
|
* A component that generates the usage display for a command.
|
|
26
24
|
*/
|
|
27
|
-
declare function Usage(props: UsageProps):
|
|
25
|
+
declare function Usage(props: UsageProps): _alloy_js_core11.Children;
|
|
28
26
|
//#endregion
|
|
29
27
|
export { Usage, UsageProps };
|
|
30
28
|
//# sourceMappingURL=usage.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.mts","names":[],"sources":["../../src/components/usage.tsx"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"usage.d.mts","names":[],"sources":["../../src/components/usage.tsx"],"sourcesContent":[],"mappings":";;;;UA2BiB,UAAA;;;AAAjB;EAuBgB,OAAA,EAnBL,WAmBkB;;;;;;;;;;;;;;;;iBAAb,KAAA,QAAa,aAAU,gBAAA,CAAA"}
|