@shell-shock/core 0.6.0 → 0.8.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/dist/components/docs.cjs +1 -1
- package/dist/components/docs.cjs.map +1 -1
- package/dist/components/docs.d.cts +5 -5
- package/dist/components/docs.d.mts +5 -5
- package/dist/components/docs.mjs +1 -1
- package/dist/components/docs.mjs.map +1 -1
- package/dist/components/helpers.cjs +15 -0
- package/dist/components/helpers.cjs.map +1 -0
- package/dist/components/helpers.d.cts +13 -0
- package/dist/components/helpers.d.cts.map +1 -0
- package/dist/components/helpers.d.mts +13 -0
- package/dist/components/helpers.d.mts.map +1 -0
- package/dist/components/helpers.mjs +14 -0
- package/dist/components/helpers.mjs.map +1 -0
- package/dist/components/index.cjs +5 -1
- package/dist/components/index.d.cts +3 -2
- package/dist/components/index.d.mts +3 -2
- package/dist/components/index.mjs +3 -2
- package/dist/components/options-parser-logic.cjs +156 -31
- package/dist/components/options-parser-logic.cjs.map +1 -1
- package/dist/components/options-parser-logic.d.cts +47 -8
- package/dist/components/options-parser-logic.d.cts.map +1 -1
- package/dist/components/options-parser-logic.d.mts +53 -14
- package/dist/components/options-parser-logic.d.mts.map +1 -1
- package/dist/components/options-parser-logic.mjs +154 -31
- package/dist/components/options-parser-logic.mjs.map +1 -1
- package/dist/components/usage.cjs +38 -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 +40 -7
- package/dist/components/usage.mjs.map +1 -1
- package/dist/helpers/persistence.cjs +31 -3
- package/dist/helpers/persistence.cjs.map +1 -1
- package/dist/helpers/persistence.mjs +31 -3
- package/dist/helpers/persistence.mjs.map +1 -1
- package/dist/helpers/resolve-command.cjs +68 -47
- package/dist/helpers/resolve-command.cjs.map +1 -1
- package/dist/helpers/resolve-command.mjs +70 -49
- package/dist/helpers/resolve-command.mjs.map +1 -1
- package/dist/helpers/validations.cjs +13 -36
- package/dist/helpers/validations.cjs.map +1 -1
- package/dist/helpers/validations.mjs +12 -36
- package/dist/helpers/validations.mjs.map +1 -1
- package/dist/index.d.cts +3 -2
- package/dist/index.d.mts +3 -2
- package/dist/plugin-utils/context-helpers.cjs +3 -45
- package/dist/plugin-utils/context-helpers.cjs.map +1 -1
- package/dist/plugin-utils/context-helpers.d.cts +1 -37
- package/dist/plugin-utils/context-helpers.d.cts.map +1 -1
- package/dist/plugin-utils/context-helpers.d.mts +1 -37
- package/dist/plugin-utils/context-helpers.d.mts.map +1 -1
- package/dist/plugin-utils/context-helpers.mjs +4 -44
- package/dist/plugin-utils/context-helpers.mjs.map +1 -1
- package/dist/plugin-utils/index.cjs +0 -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 +9 -15
- 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 +9 -15
- package/dist/plugin.mjs.map +1 -1
- package/dist/types/command.d.cts +206 -33
- package/dist/types/command.d.cts.map +1 -1
- package/dist/types/command.d.mts +206 -33
- package/dist/types/command.d.mts.map +1 -1
- package/dist/types/index.d.cts +3 -2
- package/dist/types/index.d.mts +3 -2
- package/dist/types/runtime.d.cts +5 -15
- package/dist/types/runtime.d.cts.map +1 -1
- package/dist/types/runtime.d.mts +5 -15
- package/dist/types/runtime.d.mts.map +1 -1
- package/package.json +25 -11
|
@@ -1,14 +1,33 @@
|
|
|
1
|
-
import { CommandOption, CommandTree
|
|
2
|
-
import * as
|
|
1
|
+
import { CommandOption, CommandTree } from "../types/command.mjs";
|
|
2
|
+
import * as _alloy_js_core3 from "@alloy-js/core";
|
|
3
3
|
|
|
4
4
|
//#region src/components/options-parser-logic.d.ts
|
|
5
|
-
interface
|
|
5
|
+
interface DynamicSegmentsParserLogicProps {
|
|
6
6
|
/**
|
|
7
|
-
* The command
|
|
7
|
+
* The command to generate the dynamic path segments parser logic for. This is used to access the command options and parameters when generating the parser logic for dynamic path segments.
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
command: CommandTree;
|
|
10
|
+
/**
|
|
11
|
+
* 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.
|
|
12
|
+
*/
|
|
13
|
+
isCaseSensitive: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare function DynamicSegmentsParserLogic(props: DynamicSegmentsParserLogicProps): _alloy_js_core3.Children;
|
|
16
|
+
interface ArgumentsParserLogicProps {
|
|
17
|
+
/**
|
|
18
|
+
* The command to generate the positional parameters parser logic for.
|
|
19
|
+
*/
|
|
20
|
+
command: CommandTree;
|
|
21
|
+
/**
|
|
22
|
+
* 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`).
|
|
23
|
+
*/
|
|
24
|
+
envPrefix: string;
|
|
25
|
+
/**
|
|
26
|
+
* 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.
|
|
27
|
+
*/
|
|
28
|
+
isCaseSensitive: boolean;
|
|
10
29
|
}
|
|
11
|
-
declare function
|
|
30
|
+
declare function ArgumentsParserLogic(props: ArgumentsParserLogicProps): _alloy_js_core3.Children;
|
|
12
31
|
/**
|
|
13
32
|
* The command option interface property.
|
|
14
33
|
*/
|
|
@@ -16,7 +35,7 @@ declare function OptionsMember({
|
|
|
16
35
|
option
|
|
17
36
|
}: {
|
|
18
37
|
option: CommandOption;
|
|
19
|
-
}):
|
|
38
|
+
}): _alloy_js_core3.Children;
|
|
20
39
|
interface OptionsMemberParserLogicProps {
|
|
21
40
|
/**
|
|
22
41
|
* The option name to generate the parser logic for.
|
|
@@ -36,27 +55,27 @@ interface OptionsMemberParserLogicProps {
|
|
|
36
55
|
/**
|
|
37
56
|
* The command option property parser logic.
|
|
38
57
|
*/
|
|
39
|
-
declare function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps):
|
|
58
|
+
declare function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps): _alloy_js_core3.Children;
|
|
40
59
|
interface OptionsMemberParserConditionProps {
|
|
41
60
|
/**
|
|
42
61
|
* The option name to generate the parser logic for.
|
|
43
62
|
*/
|
|
44
63
|
name: string;
|
|
45
64
|
/**
|
|
46
|
-
* Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command
|
|
65
|
+
* 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.
|
|
47
66
|
*/
|
|
48
67
|
alias?: string[];
|
|
49
68
|
/**
|
|
50
|
-
* Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command
|
|
69
|
+
* 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.
|
|
51
70
|
*
|
|
52
71
|
* @defaultValue false
|
|
53
72
|
*/
|
|
54
73
|
isCaseSensitive: boolean;
|
|
55
74
|
}
|
|
56
|
-
declare function OptionsMemberParserCondition(props: OptionsMemberParserConditionProps):
|
|
75
|
+
declare function OptionsMemberParserCondition(props: OptionsMemberParserConditionProps): _alloy_js_core3.Children;
|
|
57
76
|
declare function OptionsInterfaceDeclaration(props: {
|
|
58
77
|
command: CommandTree;
|
|
59
|
-
}):
|
|
78
|
+
}): _alloy_js_core3.Children;
|
|
60
79
|
interface OptionsParserLogicProps {
|
|
61
80
|
/**
|
|
62
81
|
* The command to generate the options parser logic for.
|
|
@@ -76,7 +95,27 @@ interface OptionsParserLogicProps {
|
|
|
76
95
|
/**
|
|
77
96
|
* The command options parser logic.
|
|
78
97
|
*/
|
|
79
|
-
declare function OptionsParserLogic(props: OptionsParserLogicProps):
|
|
98
|
+
declare function OptionsParserLogic(props: OptionsParserLogicProps): _alloy_js_core3.Children;
|
|
99
|
+
interface CommandParserLogicProps {
|
|
100
|
+
/**
|
|
101
|
+
* The command to generate the parser logic for.
|
|
102
|
+
*/
|
|
103
|
+
command: CommandTree;
|
|
104
|
+
/**
|
|
105
|
+
* 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`).
|
|
106
|
+
*/
|
|
107
|
+
envPrefix: string;
|
|
108
|
+
/**
|
|
109
|
+
* 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.
|
|
110
|
+
*
|
|
111
|
+
* @defaultValue false
|
|
112
|
+
*/
|
|
113
|
+
isCaseSensitive?: boolean;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The command parser logic, which includes parsing dynamic path segments, positional parameters, and options.
|
|
117
|
+
*/
|
|
118
|
+
declare function CommandParserLogic(props: CommandParserLogicProps): _alloy_js_core3.Children;
|
|
80
119
|
//#endregion
|
|
81
|
-
export {
|
|
120
|
+
export { ArgumentsParserLogic, ArgumentsParserLogicProps, CommandParserLogic, CommandParserLogicProps, DynamicSegmentsParserLogic, DynamicSegmentsParserLogicProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps };
|
|
82
121
|
//# sourceMappingURL=options-parser-logic.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-parser-logic.d.mts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"options-parser-logic.d.mts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":[],"mappings":";;;;UA8CiB,+BAAA;;;AAAjB;EAYgB,OAAA,EARL,WAQK;EA6BC;AAiBjB;AA6KA;EAAgC,eAAA,EAAA,OAAA;;AAAiC,iBA3NjD,0BAAA,CA2NmD,KAAA,EA1N1D,+BA0N0D,CAAA,EA1N3B,eAAA,CAAA,QA0N2B;AAAA,UA9LlD,yBAAA,CA8LkD;EAuClD;AAsBjB;AAuKA;EAmBgB,OAAA,EAjbL,WAibK;EAmEA;AAchB;AAsBA;EA6HiB,SAAA,EAAA,MAAA;EAsBD;;;;;iBA9pBA,oBAAA,QAA4B,4BAAyB,eAAA,CAAA;;;;iBA6KrD,aAAA;;;UAAoC;IAAa,eAAA,CAAE;UAuClD,6BAAA;;;;;;;;UASP;;;;;;;;;;;iBAaM,wBAAA,QAAgC,gCAA6B,eAAA,CAAA;UAuK5D,iCAAA;;;;;;;;;;;;;;;;iBAmBD,4BAAA,QACP,oCAAiC,eAAA,CAAA;iBAkE1B,2BAAA;WAA8C;IAAW,eAAA,CAAE;UAc1D,uBAAA;;;;WAIN;;;;;;;;;;;;;;;iBAkBK,kBAAA,QAA0B,0BAAuB,eAAA,CAAA;UA6HhD,uBAAA;;;;WAIN;;;;;;;;;;;;;;;iBAkBK,kBAAA,QAA0B,0BAAuB,eAAA,CAAA"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { getDynamicPathSegmentName, isDynamicPathSegment } from "../plugin-utils/context-helpers.mjs";
|
|
2
2
|
import { computedOptions } from "../contexts/options.mjs";
|
|
3
|
+
import { BooleanInputParserLogic } from "./helpers.mjs";
|
|
3
4
|
import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
|
|
4
5
|
import { camelCase } from "@stryke/string-format/camel-case";
|
|
6
|
+
import { constantCase } from "@stryke/string-format/constant-case";
|
|
5
7
|
import { isSetString } from "@stryke/type-checks/is-set-string";
|
|
6
8
|
import { For, Show, code, computed } from "@alloy-js/core";
|
|
7
9
|
import { ReflectionKind } from "@powerlines/deepkit/vendor/type";
|
|
@@ -9,11 +11,11 @@ import { ElseClause, ElseIfClause, IfStatement, InterfaceDeclaration, InterfaceM
|
|
|
9
11
|
import { pascalCase } from "@stryke/string-format/pascal-case";
|
|
10
12
|
|
|
11
13
|
//#region src/components/options-parser-logic.tsx
|
|
12
|
-
function
|
|
13
|
-
const {
|
|
14
|
+
function DynamicSegmentsParserLogic(props) {
|
|
15
|
+
const { command } = props;
|
|
14
16
|
return createComponent(For, {
|
|
15
17
|
get each() {
|
|
16
|
-
return
|
|
18
|
+
return command.segments ?? [];
|
|
17
19
|
},
|
|
18
20
|
children: (segment, index) => createComponent(Show, {
|
|
19
21
|
get when() {
|
|
@@ -26,19 +28,7 @@ function DynamicPathSegmentsParserLogic(props) {
|
|
|
26
28
|
get name() {
|
|
27
29
|
return camelCase(getDynamicPathSegmentName(segment));
|
|
28
30
|
},
|
|
29
|
-
|
|
30
|
-
return `${path.dynamics[getDynamicPathSegmentName(segment)]?.variadic ? "string[]" : "string"}${path.dynamics[getDynamicPathSegmentName(segment)]?.optional ? " | undefined" : ""}`;
|
|
31
|
-
},
|
|
32
|
-
get initializer() {
|
|
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;`];
|
|
41
|
-
}
|
|
31
|
+
type: "string"
|
|
42
32
|
}),
|
|
43
33
|
createIntrinsic("hbr", {}),
|
|
44
34
|
createComponent(IfStatement, {
|
|
@@ -54,6 +44,111 @@ function DynamicPathSegmentsParserLogic(props) {
|
|
|
54
44
|
})
|
|
55
45
|
});
|
|
56
46
|
}
|
|
47
|
+
function ArgumentsParserLogic(props) {
|
|
48
|
+
const { command, envPrefix, isCaseSensitive } = props;
|
|
49
|
+
return createComponent(Show, {
|
|
50
|
+
get when() {
|
|
51
|
+
return command.arguments && command.arguments.length > 0;
|
|
52
|
+
},
|
|
53
|
+
get children() {
|
|
54
|
+
return [
|
|
55
|
+
createComponent(VarDeclaration, {
|
|
56
|
+
"let": true,
|
|
57
|
+
name: "optionsIndex",
|
|
58
|
+
type: "number",
|
|
59
|
+
get initializer() {
|
|
60
|
+
return code`Math.max(0, args.slice(${command.segments.length + 1}).findIndex(arg => arg.startsWith("-") && /^(${Object.values(command.options ?? {}).map((option) => `${isCaseSensitive || option.name.length === 1 ? option.name : option.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}${option.alias && option.alias.length > 0 ? "|" : ""}${option.alias?.map((a) => (isCaseSensitive || option.name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")) === "?" ? "\\?" : isCaseSensitive || option.name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")}`).join("|")})=?.*$/.test(arg${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"}))) + ${command.segments.length + 1};`;
|
|
61
|
+
}
|
|
62
|
+
}),
|
|
63
|
+
createIntrinsic("hbr", {}),
|
|
64
|
+
createIntrinsic("hbr", {}),
|
|
65
|
+
createComponent(VarDeclaration, {
|
|
66
|
+
"let": true,
|
|
67
|
+
name: "argsIndex",
|
|
68
|
+
type: "number",
|
|
69
|
+
get initializer() {
|
|
70
|
+
return code`optionsIndex > ${command.segments.length + 1} ? ${command.segments.length + 1} : (Math.max(0, args.slice(optionsIndex).findLastIndex(arg => arg.startsWith("-") && /^(${Object.values(command.options ?? {}).map((option) => `${isCaseSensitive || option.name.length === 1 ? option.name : option.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}${option.alias && option.alias.length > 0 ? "|" : ""}${option.alias?.map((a) => (isCaseSensitive || option.name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")) === "?" ? "\\?" : isCaseSensitive || option.name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")}`).join("|")})=?.*$/.test(arg${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"}))) + ${command.segments.length + 1});`;
|
|
71
|
+
}
|
|
72
|
+
}),
|
|
73
|
+
createIntrinsic("hbr", {}),
|
|
74
|
+
createIntrinsic("hbr", {}),
|
|
75
|
+
createComponent(For, {
|
|
76
|
+
get each() {
|
|
77
|
+
return command.arguments ?? [];
|
|
78
|
+
},
|
|
79
|
+
hardline: true,
|
|
80
|
+
children: (arg, index) => [
|
|
81
|
+
createComponent(VarDeclaration, {
|
|
82
|
+
"let": true,
|
|
83
|
+
get name() {
|
|
84
|
+
return camelCase(arg.name);
|
|
85
|
+
},
|
|
86
|
+
get type() {
|
|
87
|
+
return `${arg.kind === ReflectionKind.boolean ? "boolean" : arg.kind === ReflectionKind.number ? "number" : "string"}${(arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number) && arg.variadic ? "[]" : ""}${arg.optional ? " | undefined" : ""}`;
|
|
88
|
+
},
|
|
89
|
+
get initializer() {
|
|
90
|
+
return [createComponent(Show, {
|
|
91
|
+
get when() {
|
|
92
|
+
return isSetString(arg.env);
|
|
93
|
+
},
|
|
94
|
+
get children() {
|
|
95
|
+
return code`env.${envPrefix}_${constantCase(String(arg.env))} ?? `;
|
|
96
|
+
}
|
|
97
|
+
}), createComponent(Show, {
|
|
98
|
+
get when() {
|
|
99
|
+
return arg.default !== void 0;
|
|
100
|
+
},
|
|
101
|
+
get fallback() {
|
|
102
|
+
return (arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number) && arg.variadic ? code`[]` : code`undefined;`;
|
|
103
|
+
},
|
|
104
|
+
get children() {
|
|
105
|
+
return arg.kind === ReflectionKind.string ? code`"${arg.default}"` : code`${arg.default}`;
|
|
106
|
+
}
|
|
107
|
+
})];
|
|
108
|
+
}
|
|
109
|
+
}),
|
|
110
|
+
createIntrinsic("hbr", {}),
|
|
111
|
+
createIntrinsic("hbr", {}),
|
|
112
|
+
createComponent(IfStatement, {
|
|
113
|
+
condition: code`argsIndex + ${index} < args.length && argsIndex + ${index} !== optionsIndex`,
|
|
114
|
+
get children() {
|
|
115
|
+
return [memo(() => code`${camelCase(arg.name)} = `), createComponent(Show, {
|
|
116
|
+
get when() {
|
|
117
|
+
return arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number;
|
|
118
|
+
},
|
|
119
|
+
get fallback() {
|
|
120
|
+
return createComponent(BooleanInputParserLogic, { name: `args[argsIndex + ${index}] ` });
|
|
121
|
+
},
|
|
122
|
+
get children() {
|
|
123
|
+
return createComponent(Show, {
|
|
124
|
+
get when() {
|
|
125
|
+
return (arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number) && arg.variadic;
|
|
126
|
+
},
|
|
127
|
+
get fallback() {
|
|
128
|
+
return createComponent(Show, {
|
|
129
|
+
get when() {
|
|
130
|
+
return arg.kind === ReflectionKind.number;
|
|
131
|
+
},
|
|
132
|
+
fallback: code`args[argsIndex + ${index}]; `,
|
|
133
|
+
children: code`Number(args[argsIndex + ${index}]); `
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
get children() {
|
|
137
|
+
return code`args.slice(argsIndex + ${index}, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${command.arguments.length - index}).join(" ").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean)`;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
})];
|
|
142
|
+
}
|
|
143
|
+
}),
|
|
144
|
+
createIntrinsic("hbr", {}),
|
|
145
|
+
createIntrinsic("hbr", {})
|
|
146
|
+
]
|
|
147
|
+
})
|
|
148
|
+
];
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
57
152
|
/**
|
|
58
153
|
* The command option interface property.
|
|
59
154
|
*/
|
|
@@ -129,7 +224,7 @@ function OptionsMember({ option }) {
|
|
|
129
224
|
*/
|
|
130
225
|
function OptionsMemberParserLogic(props) {
|
|
131
226
|
const { name, option, isCaseSensitive } = props;
|
|
132
|
-
const equalsRegex = `/^--?(${isCaseSensitive
|
|
227
|
+
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("|")})=/`;
|
|
133
228
|
return [createComponent(Show, {
|
|
134
229
|
get when() {
|
|
135
230
|
return option.kind === ReflectionKind.string || option.kind === ReflectionKind.number;
|
|
@@ -150,7 +245,7 @@ function OptionsMemberParserLogic(props) {
|
|
|
150
245
|
}),
|
|
151
246
|
createIntrinsic("hbr", {}),
|
|
152
247
|
createComponent(IfStatement, {
|
|
153
|
-
condition: `${equalsRegex}.test(
|
|
248
|
+
condition: `${equalsRegex}.test(${isCaseSensitive ? "arg" : "\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})`,
|
|
154
249
|
get children() {
|
|
155
250
|
return [
|
|
156
251
|
createComponent(Show, {
|
|
@@ -212,7 +307,7 @@ function OptionsMemberParserLogic(props) {
|
|
|
212
307
|
get children() {
|
|
213
308
|
return [
|
|
214
309
|
createComponent(IfStatement, {
|
|
215
|
-
condition: `${equalsRegex}.test(
|
|
310
|
+
condition: `${equalsRegex}.test(${isCaseSensitive ? "arg" : "\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})`,
|
|
216
311
|
get children() {
|
|
217
312
|
return [createComponent(Show, {
|
|
218
313
|
get when() {
|
|
@@ -313,7 +408,7 @@ function OptionsMemberParserLogic(props) {
|
|
|
313
408
|
get children() {
|
|
314
409
|
return [
|
|
315
410
|
createComponent(IfStatement, {
|
|
316
|
-
condition: `${equalsRegex}.test(
|
|
411
|
+
condition: `${equalsRegex}.test(${isCaseSensitive ? "arg" : "\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"})`,
|
|
317
412
|
get children() {
|
|
318
413
|
return [
|
|
319
414
|
createComponent(VarDeclaration, {
|
|
@@ -326,10 +421,10 @@ function OptionsMemberParserLogic(props) {
|
|
|
326
421
|
get when() {
|
|
327
422
|
return name.includes("?") || name.includes("-");
|
|
328
423
|
},
|
|
329
|
-
fallback: code`options.${name}`,
|
|
330
|
-
children: code`options["${name}"]`
|
|
424
|
+
fallback: code`options.${name} = `,
|
|
425
|
+
children: code`options["${name}"] = `
|
|
331
426
|
}),
|
|
332
|
-
|
|
427
|
+
createComponent(BooleanInputParserLogic, { name: "value" })
|
|
333
428
|
];
|
|
334
429
|
}
|
|
335
430
|
}),
|
|
@@ -365,15 +460,15 @@ function OptionsMemberParserLogic(props) {
|
|
|
365
460
|
})];
|
|
366
461
|
}
|
|
367
462
|
function OptionsMemberParserCondition(props) {
|
|
368
|
-
const { name, alias, isCaseSensitive } = props;
|
|
369
|
-
return [memo(() => code
|
|
463
|
+
const { name, alias: aliasProp, isCaseSensitive } = props;
|
|
464
|
+
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, {
|
|
370
465
|
get when() {
|
|
371
|
-
return
|
|
466
|
+
return aliasProp && aliasProp.length > 0;
|
|
372
467
|
},
|
|
373
468
|
get children() {
|
|
374
469
|
return createComponent(For, {
|
|
375
|
-
each:
|
|
376
|
-
children: (
|
|
470
|
+
each: aliasProp ?? [],
|
|
471
|
+
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("_", "")}"`
|
|
377
472
|
});
|
|
378
473
|
}
|
|
379
474
|
})];
|
|
@@ -420,14 +515,14 @@ function OptionsParserLogic(props) {
|
|
|
420
515
|
}),
|
|
421
516
|
createIntrinsic("hbr", {}),
|
|
422
517
|
createIntrinsic("hbr", {}),
|
|
423
|
-
memo(() => code`for (let i = 0; i < args.slice(${command.
|
|
518
|
+
memo(() => code`for (let i = 0; i < args.slice(${command.segments.filter((segment) => isDynamicPathSegment(segment)).length}).length; i++) { `),
|
|
424
519
|
createIntrinsic("hbr", {}),
|
|
425
520
|
createComponent(VarDeclaration, {
|
|
426
521
|
"const": true,
|
|
427
522
|
name: "arg",
|
|
428
523
|
type: "string",
|
|
429
524
|
initializer: code` args[i].length > 3 && args[i].startsWith("--")
|
|
430
|
-
? \`--\${args[i].slice(2).replaceAll("-", "")${isCaseSensitive ? "" : ".toLowerCase()"}}\`
|
|
525
|
+
? \`--\${args[i].slice(2).replaceAll("-", "")${isCaseSensitive ? "" : ".toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"}}\`
|
|
431
526
|
: args[i].length > 2 && args[i].startsWith("-")
|
|
432
527
|
? \`-\${args[i].slice(1).replaceAll("-", "")}\`
|
|
433
528
|
: args[i]; `
|
|
@@ -487,7 +582,35 @@ function OptionsParserLogic(props) {
|
|
|
487
582
|
createIntrinsic("hbr", {})
|
|
488
583
|
];
|
|
489
584
|
}
|
|
585
|
+
/**
|
|
586
|
+
* The command parser logic, which includes parsing dynamic path segments, positional parameters, and options.
|
|
587
|
+
*/
|
|
588
|
+
function CommandParserLogic(props) {
|
|
589
|
+
const { command, envPrefix, isCaseSensitive = false } = props;
|
|
590
|
+
return [
|
|
591
|
+
createComponent(DynamicSegmentsParserLogic, {
|
|
592
|
+
command,
|
|
593
|
+
isCaseSensitive
|
|
594
|
+
}),
|
|
595
|
+
createIntrinsic("hbr", {}),
|
|
596
|
+
createIntrinsic("hbr", {}),
|
|
597
|
+
createComponent(OptionsParserLogic, {
|
|
598
|
+
command,
|
|
599
|
+
envPrefix,
|
|
600
|
+
isCaseSensitive
|
|
601
|
+
}),
|
|
602
|
+
createIntrinsic("hbr", {}),
|
|
603
|
+
createIntrinsic("hbr", {}),
|
|
604
|
+
createComponent(ArgumentsParserLogic, {
|
|
605
|
+
command,
|
|
606
|
+
envPrefix,
|
|
607
|
+
isCaseSensitive
|
|
608
|
+
}),
|
|
609
|
+
createIntrinsic("hbr", {}),
|
|
610
|
+
createIntrinsic("hbr", {})
|
|
611
|
+
];
|
|
612
|
+
}
|
|
490
613
|
|
|
491
614
|
//#endregion
|
|
492
|
-
export {
|
|
615
|
+
export { ArgumentsParserLogic, CommandParserLogic, DynamicSegmentsParserLogic, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic };
|
|
493
616
|
//# 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","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","OptionsMember","option","doc","description","title","Boolean","kind","string","number","boolean","OptionsMemberParserLogic","isCaseSensitive","equalsRegex","length","toLowerCase","alias","map","a","join","includes","fallback","isNegativeOf","OptionsMemberParserCondition","OptionsInterfaceDeclaration","command","options","Object","values","value","hardline","OptionsParserLogic","envPrefix","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 { 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\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 => 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 ? \"\" : \".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","constantCase","pascalCase","isSetString","computedOptions","getDynamicPathSegmentName","isDynamicPathSegment","BooleanInputParserLogic","DynamicSegmentsParserLogic","props","command","_$createComponent","each","segments","children","segment","index","when","name","type","_$createIntrinsic","condition","ArgumentsParserLogic","envPrefix","isCaseSensitive","arguments","length","initializer","Object","values","options","map","option","toLowerCase","replaceAll","alias","a","join","hardline","arg","kind","boolean","number","string","variadic","optional","env","String","default","undefined","fallback","_$memo","OptionsMember","doc","description","title","Boolean","OptionsMemberParserLogic","equalsRegex","includes","isNegativeOf","OptionsMemberParserCondition","aliasProp","OptionsInterfaceDeclaration","value","OptionsParserLogic","entries","JSON","stringify","filter","i","CommandParserLogic"],"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 getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n NumberCommandOption,\n StringCommandOption\n} from \"../types/command\";\nimport { BooleanInputParserLogic } from \"./helpers\";\n\nexport interface DynamicSegmentsParserLogicProps {\n /**\n * The command to generate the dynamic path segments parser logic for. This is used to access the command options and parameters when generating the parser logic for dynamic path segments.\n */\n command: CommandTree;\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 isCaseSensitive: boolean;\n}\n\nexport function DynamicSegmentsParserLogic(\n props: DynamicSegmentsParserLogicProps\n) {\n const { command } = props;\n\n return (\n <For each={command.segments ?? []}>\n {(segment, index) => (\n <Show when={isDynamicPathSegment(segment)}>\n <VarDeclaration\n let\n name={camelCase(getDynamicPathSegmentName(segment))}\n type=\"string\"\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(\n getDynamicPathSegmentName(segment)\n )} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\nexport interface ArgumentsParserLogicProps {\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 /**\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 isCaseSensitive: boolean;\n}\n\nexport function ArgumentsParserLogic(props: ArgumentsParserLogicProps) {\n const { command, envPrefix, isCaseSensitive } = props;\n\n return (\n <Show when={command.arguments && command.arguments.length > 0}>\n <VarDeclaration\n let\n name=\"optionsIndex\"\n type=\"number\"\n initializer={code`Math.max(0, args.slice(${command.segments.length + 1}).findIndex(arg => arg.startsWith(\"-\") && /^(${Object.values(\n command.options ?? {}\n )\n .map(\n option =>\n `${\n isCaseSensitive || option.name.length === 1\n ? option.name\n : option.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || option.name.length === 1\n ? a\n : a\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || option.name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")}`\n )\n .join(\"|\")})=?.*$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }))) + ${command.segments.length + 1};`}\n />\n <hbr />\n <hbr />\n <VarDeclaration\n let\n name=\"argsIndex\"\n type=\"number\"\n initializer={code`optionsIndex > ${\n command.segments.length + 1\n } ? ${command.segments.length + 1} : (Math.max(0, args.slice(optionsIndex).findLastIndex(arg => arg.startsWith(\"-\") && /^(${Object.values(\n command.options ?? {}\n )\n .map(\n option =>\n `${\n isCaseSensitive || option.name.length === 1\n ? option.name\n : option.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || option.name.length === 1\n ? a\n : a\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || option.name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")}`\n )\n .join(\"|\")})=?.*$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }))) + ${command.segments.length + 1});`}\n />\n <hbr />\n <hbr />\n <For each={command.arguments ?? []} hardline>\n {(arg, index) => (\n <>\n <VarDeclaration\n let\n name={camelCase(arg.name)}\n type={`${\n arg.kind === ReflectionKind.boolean\n ? \"boolean\"\n : arg.kind === ReflectionKind.number\n ? \"number\"\n : \"string\"\n }${\n (arg.kind === ReflectionKind.string ||\n arg.kind === ReflectionKind.number) &&\n arg.variadic\n ? \"[]\"\n : \"\"\n }${arg.optional ? \" | undefined\" : \"\"}`}\n initializer={\n <>\n <Show when={isSetString(arg.env)}>\n {code`env.${envPrefix}_${constantCase(String(arg.env))} ?? `}\n </Show>\n <Show\n when={arg.default !== undefined}\n fallback={\n (arg.kind === ReflectionKind.string ||\n arg.kind === ReflectionKind.number) &&\n arg.variadic\n ? code`[]`\n : code`undefined;`\n }>\n {arg.kind === ReflectionKind.string\n ? code`\"${arg.default}\"`\n : code`${arg.default}`}\n </Show>\n </>\n }\n />\n <hbr />\n <hbr />\n <IfStatement\n condition={code`argsIndex + ${index} < args.length && argsIndex + ${index} !== optionsIndex`}>\n {code`${camelCase(arg.name)} = `}\n <Show\n when={\n arg.kind === ReflectionKind.string ||\n arg.kind === ReflectionKind.number\n }\n fallback={\n <BooleanInputParserLogic\n name={`args[argsIndex + ${index}] `}\n />\n }>\n <Show\n when={\n (arg.kind === ReflectionKind.string ||\n arg.kind === ReflectionKind.number) &&\n arg.variadic\n }\n fallback={\n <Show\n when={arg.kind === ReflectionKind.number}\n fallback={code`args[argsIndex + ${index}]; `}>\n {code`Number(args[argsIndex + ${index}]); `}\n </Show>\n }>\n {code`args.slice(argsIndex + ${\n index\n }, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${\n command.arguments.length - index\n }).join(\" \").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean)`}\n </Show>\n </Show>\n </IfStatement>\n <hbr />\n <hbr />\n </>\n )}\n </For>\n </Show>\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 <BooleanInputParserLogic name=\"value\" />\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.segments.filter(segment => isDynamicPathSegment(segment)).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 <DynamicSegmentsParserLogic\n command={command}\n isCaseSensitive={isCaseSensitive}\n />\n <hbr />\n <hbr />\n <OptionsParserLogic\n command={command}\n envPrefix={envPrefix}\n isCaseSensitive={isCaseSensitive}\n />\n <hbr />\n <hbr />\n <ArgumentsParserLogic\n command={command}\n envPrefix={envPrefix}\n isCaseSensitive={isCaseSensitive}\n />\n <hbr />\n <hbr />\n </>\n );\n}\n"],"mappings":"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"}
|