@shell-shock/core 0.4.4 → 0.5.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 +6 -28
- package/dist/components/docs.cjs.map +1 -1
- package/dist/components/docs.d.cts +5 -5
- package/dist/components/docs.d.cts.map +1 -1
- package/dist/components/docs.d.mts +5 -5
- package/dist/components/docs.d.mts.map +1 -1
- package/dist/components/docs.mjs +8 -30
- package/dist/components/docs.mjs.map +1 -1
- package/dist/components/index.cjs +10 -1
- package/dist/components/index.d.cts +3 -1
- package/dist/components/index.d.mts +3 -1
- package/dist/components/index.mjs +3 -1
- package/dist/components/options-parser-logic.cjs +504 -0
- package/dist/components/options-parser-logic.cjs.map +1 -0
- package/dist/components/options-parser-logic.d.cts +86 -0
- package/dist/components/options-parser-logic.d.cts.map +1 -0
- package/dist/components/options-parser-logic.d.mts +86 -0
- package/dist/components/options-parser-logic.d.mts.map +1 -0
- package/dist/components/options-parser-logic.mjs +498 -0
- package/dist/components/options-parser-logic.mjs.map +1 -0
- package/dist/components/usage.cjs +41 -0
- package/dist/components/usage.cjs.map +1 -0
- package/dist/components/usage.d.cts +30 -0
- package/dist/components/usage.d.cts.map +1 -0
- package/dist/components/usage.d.mts +30 -0
- package/dist/components/usage.d.mts.map +1 -0
- package/dist/components/usage.mjs +40 -0
- package/dist/components/usage.mjs.map +1 -0
- package/dist/contexts/index.cjs +5 -1
- package/dist/contexts/index.d.cts +2 -1
- package/dist/contexts/index.d.mts +2 -1
- package/dist/contexts/index.mjs +2 -1
- package/dist/contexts/options.cjs +43 -0
- package/dist/contexts/options.cjs.map +1 -0
- package/dist/contexts/options.d.cts +22 -0
- package/dist/contexts/options.d.cts.map +1 -0
- package/dist/contexts/options.d.mts +22 -0
- package/dist/contexts/options.d.mts.map +1 -0
- package/dist/contexts/options.mjs +39 -0
- package/dist/contexts/options.mjs.map +1 -0
- package/dist/helpers/resolve-command.cjs +91 -61
- package/dist/helpers/resolve-command.cjs.map +1 -1
- package/dist/helpers/resolve-command.mjs +93 -63
- package/dist/helpers/resolve-command.mjs.map +1 -1
- package/dist/helpers/validations.cjs +20 -48
- package/dist/helpers/validations.cjs.map +1 -1
- package/dist/helpers/validations.mjs +21 -49
- package/dist/helpers/validations.mjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/plugin-utils/context-helpers.cjs +5 -5
- package/dist/plugin-utils/context-helpers.cjs.map +1 -1
- package/dist/plugin-utils/context-helpers.d.cts +3 -3
- package/dist/plugin-utils/context-helpers.d.cts.map +1 -1
- package/dist/plugin-utils/context-helpers.d.mts +3 -3
- package/dist/plugin-utils/context-helpers.d.mts.map +1 -1
- package/dist/plugin-utils/context-helpers.mjs +4 -4
- 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 +2 -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.mjs +2 -2
- package/dist/plugin.mjs.map +1 -1
- package/dist/types/command.d.cts +14 -10
- package/dist/types/command.d.cts.map +1 -1
- package/dist/types/command.d.mts +14 -10
- 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 +56 -27
- package/dist/types/internal.cjs +0 -0
- package/dist/types/internal.d.cts +0 -24
- package/dist/types/internal.d.cts.map +0 -1
- package/dist/types/internal.d.mts +0 -24
- package/dist/types/internal.d.mts.map +0 -1
- package/dist/types/internal.mjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options-parser-logic.d.cts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":[],"mappings":";;;;UA8CiB,iCAAA;;;AAAjB;EAYgB,IAAA,EARR,eAQQ;EAgEA;;;EAAiD,SAAA,EAAA,MAAE;;AAuClD,iBAvGD,4BAAA,CAgHN,KAAA,EA/GD,iCA+Gc,CAAA,EA/GmB,eAAA,CAAA,QA+GnB;AAavB;AA+JA;AAmBA;AA2BgB,iBA1QA,aAAA,CA0Q2B;EAAA;AAoC3C,CApC8D,EAAA;EAc7C,MAAA,EAxRmC,aAwRnC;AAsBjB,CAAA,CAAA,EA9SiE,eAAA,CAAE,QA8SzB;UAvQzB,6BAAA;;;;;;;;UASP;;;;;;;;;;;iBAaM,wBAAA,QAAgC,gCAA6B,eAAA,CAAA;UA+J5D,iCAAA;;;;;;;;;;;;;;;;iBAmBD,4BAAA,QACP,oCAAiC,eAAA,CAAA;iBA0B1B,2BAAA;WAA8C;IAAW,eAAA,CAAE;UAc1D,uBAAA;;;;WAIN;;;;;;;;;;;;;;;iBAkBK,kBAAA,QAA0B,0BAAuB,eAAA,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { CommandOption, CommandTree, CommandTreePath } from "../types/command.mjs";
|
|
2
|
+
import * as _alloy_js_core0 from "@alloy-js/core";
|
|
3
|
+
|
|
4
|
+
//#region src/components/options-parser-logic.d.ts
|
|
5
|
+
interface PositionalOptionsParserLogicProps {
|
|
6
|
+
/**
|
|
7
|
+
* The command path to generate the positional options parser logic for.
|
|
8
|
+
*/
|
|
9
|
+
path: CommandTreePath;
|
|
10
|
+
/**
|
|
11
|
+
* 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`).
|
|
12
|
+
*/
|
|
13
|
+
envPrefix: string;
|
|
14
|
+
}
|
|
15
|
+
declare function PositionalOptionsParserLogic(props: PositionalOptionsParserLogicProps): _alloy_js_core0.Children;
|
|
16
|
+
/**
|
|
17
|
+
* The command option interface property.
|
|
18
|
+
*/
|
|
19
|
+
declare function OptionsMember({
|
|
20
|
+
option
|
|
21
|
+
}: {
|
|
22
|
+
option: CommandOption;
|
|
23
|
+
}): _alloy_js_core0.Children;
|
|
24
|
+
interface OptionsMemberParserLogicProps {
|
|
25
|
+
/**
|
|
26
|
+
* The option name to generate the parser logic for.
|
|
27
|
+
*/
|
|
28
|
+
name: string;
|
|
29
|
+
/**
|
|
30
|
+
* The command option to generate the parser logic for.
|
|
31
|
+
*/
|
|
32
|
+
option: CommandOption;
|
|
33
|
+
/**
|
|
34
|
+
* 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.
|
|
35
|
+
*
|
|
36
|
+
* @defaultValue false
|
|
37
|
+
*/
|
|
38
|
+
isCaseSensitive: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The command option property parser logic.
|
|
42
|
+
*/
|
|
43
|
+
declare function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps): _alloy_js_core0.Children;
|
|
44
|
+
interface OptionsMemberParserConditionProps {
|
|
45
|
+
/**
|
|
46
|
+
* The option name to generate the parser logic for.
|
|
47
|
+
*/
|
|
48
|
+
name: string;
|
|
49
|
+
/**
|
|
50
|
+
* 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.
|
|
51
|
+
*/
|
|
52
|
+
alias?: string[];
|
|
53
|
+
/**
|
|
54
|
+
* 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.
|
|
55
|
+
*
|
|
56
|
+
* @defaultValue false
|
|
57
|
+
*/
|
|
58
|
+
isCaseSensitive: boolean;
|
|
59
|
+
}
|
|
60
|
+
declare function OptionsMemberParserCondition(props: OptionsMemberParserConditionProps): _alloy_js_core0.Children;
|
|
61
|
+
declare function OptionsInterfaceDeclaration(props: {
|
|
62
|
+
command: CommandTree;
|
|
63
|
+
}): _alloy_js_core0.Children;
|
|
64
|
+
interface OptionsParserLogicProps {
|
|
65
|
+
/**
|
|
66
|
+
* The command to generate the options parser logic for.
|
|
67
|
+
*/
|
|
68
|
+
command: CommandTree;
|
|
69
|
+
/**
|
|
70
|
+
* 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`).
|
|
71
|
+
*/
|
|
72
|
+
envPrefix: string;
|
|
73
|
+
/**
|
|
74
|
+
* 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.
|
|
75
|
+
*
|
|
76
|
+
* @defaultValue false
|
|
77
|
+
*/
|
|
78
|
+
isCaseSensitive?: boolean;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The command options parser logic.
|
|
82
|
+
*/
|
|
83
|
+
declare function OptionsParserLogic(props: OptionsParserLogicProps): _alloy_js_core0.Children;
|
|
84
|
+
//#endregion
|
|
85
|
+
export { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps, PositionalOptionsParserLogic, PositionalOptionsParserLogicProps };
|
|
86
|
+
//# sourceMappingURL=options-parser-logic.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options-parser-logic.d.mts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":[],"mappings":";;;;UA8CiB,iCAAA;;;AAAjB;EAYgB,IAAA,EARR,eAQQ;EAgEA;;;EAAiD,SAAA,EAAA,MAAE;;AAuClD,iBAvGD,4BAAA,CAgHN,KAAA,EA/GD,iCA+Gc,CAAA,EA/GmB,eAAA,CAAA,QA+GnB;AAavB;AA+JA;AAmBA;AA2BgB,iBA1QA,aAAA,CA0Q2B;EAAA;AAoC3C,CApC8D,EAAA;EAc7C,MAAA,EAxRmC,aAwRnC;AAsBjB,CAAA,CAAA,EA9SiE,eAAA,CAAE,QA8SzB;UAvQzB,6BAAA;;;;;;;;UASP;;;;;;;;;;;iBAaM,wBAAA,QAAgC,gCAA6B,eAAA,CAAA;UA+J5D,iCAAA;;;;;;;;;;;;;;;;iBAmBD,4BAAA,QACP,oCAAiC,eAAA,CAAA;iBA0B1B,2BAAA;WAA8C;IAAW,eAAA,CAAE;UAc1D,uBAAA;;;;WAIN;;;;;;;;;;;;;;;iBAkBK,kBAAA,QAA0B,0BAAuB,eAAA,CAAA"}
|
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
import { getPositionalCommandOptionName, isPositionalCommandOption } from "../plugin-utils/context-helpers.mjs";
|
|
2
|
+
import { computedOptions } from "../contexts/options.mjs";
|
|
3
|
+
import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
|
|
4
|
+
import { camelCase } from "@stryke/string-format/camel-case";
|
|
5
|
+
import { constantCase } from "@stryke/string-format/constant-case";
|
|
6
|
+
import { isSetString } from "@stryke/type-checks/is-set-string";
|
|
7
|
+
import { For, Show, code, computed } from "@alloy-js/core";
|
|
8
|
+
import { ReflectionKind } from "@powerlines/deepkit/vendor/type";
|
|
9
|
+
import { ElseClause, ElseIfClause, IfStatement, InterfaceDeclaration, InterfaceMember, VarDeclaration } from "@alloy-js/typescript";
|
|
10
|
+
import { pascalCase } from "@stryke/string-format/pascal-case";
|
|
11
|
+
|
|
12
|
+
//#region src/components/options-parser-logic.tsx
|
|
13
|
+
function PositionalOptionsParserLogic(props) {
|
|
14
|
+
const { path, envPrefix } = props;
|
|
15
|
+
return createComponent(For, {
|
|
16
|
+
get each() {
|
|
17
|
+
return path.segments ?? [];
|
|
18
|
+
},
|
|
19
|
+
children: (segment, index) => createComponent(Show, {
|
|
20
|
+
get when() {
|
|
21
|
+
return isPositionalCommandOption(segment);
|
|
22
|
+
},
|
|
23
|
+
get children() {
|
|
24
|
+
return [
|
|
25
|
+
createComponent(VarDeclaration, {
|
|
26
|
+
"let": true,
|
|
27
|
+
get name() {
|
|
28
|
+
return camelCase(getPositionalCommandOptionName(segment));
|
|
29
|
+
},
|
|
30
|
+
get type() {
|
|
31
|
+
return memo(() => path.positional[getPositionalCommandOptionName(segment)]?.kind === ReflectionKind.number)() ? path.positional[getPositionalCommandOptionName(segment)]?.variadic ? "number[]" : "number | undefined" : path.positional[getPositionalCommandOptionName(segment)]?.variadic ? "string[]" : "string | undefined";
|
|
32
|
+
},
|
|
33
|
+
get initializer() {
|
|
34
|
+
return memo(() => !!path.positional[getPositionalCommandOptionName(segment)]?.variadic)() ? code`[]` : [
|
|
35
|
+
memo(() => code`env.${envPrefix}_${constantCase(path.positional[getPositionalCommandOptionName(segment)]?.name)} ?? `),
|
|
36
|
+
createComponent(Show, {
|
|
37
|
+
get when() {
|
|
38
|
+
return isSetString(path.positional[getPositionalCommandOptionName(segment)]?.default);
|
|
39
|
+
},
|
|
40
|
+
get children() {
|
|
41
|
+
return code`"${path.positional[getPositionalCommandOptionName(segment)]?.default}"`;
|
|
42
|
+
}
|
|
43
|
+
}),
|
|
44
|
+
code`undefined;`
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
}),
|
|
48
|
+
createIntrinsic("hbr", {}),
|
|
49
|
+
createComponent(IfStatement, {
|
|
50
|
+
condition: code`args.length > ${2 + index} && args[${2 + index}]`,
|
|
51
|
+
get children() {
|
|
52
|
+
return code`${camelCase(getPositionalCommandOptionName(segment))} = args[${2 + index}];`;
|
|
53
|
+
}
|
|
54
|
+
}),
|
|
55
|
+
createIntrinsic("hbr", {}),
|
|
56
|
+
createIntrinsic("hbr", {})
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The command option interface property.
|
|
64
|
+
*/
|
|
65
|
+
function OptionsMember({ option }) {
|
|
66
|
+
const doc = option.description || `The ${option.title} command option.`;
|
|
67
|
+
return [createComponent(Show, {
|
|
68
|
+
get when() {
|
|
69
|
+
return Boolean(option.name);
|
|
70
|
+
},
|
|
71
|
+
get children() {
|
|
72
|
+
return [
|
|
73
|
+
createComponent(Show, {
|
|
74
|
+
get when() {
|
|
75
|
+
return option.kind === ReflectionKind.string;
|
|
76
|
+
},
|
|
77
|
+
get children() {
|
|
78
|
+
return createComponent(InterfaceMember, {
|
|
79
|
+
get name() {
|
|
80
|
+
return option.name;
|
|
81
|
+
},
|
|
82
|
+
doc,
|
|
83
|
+
get type() {
|
|
84
|
+
return option.variadic ? "string[]" : "string";
|
|
85
|
+
},
|
|
86
|
+
get optional() {
|
|
87
|
+
return option.optional;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}),
|
|
92
|
+
createComponent(Show, {
|
|
93
|
+
get when() {
|
|
94
|
+
return option.kind === ReflectionKind.number;
|
|
95
|
+
},
|
|
96
|
+
get children() {
|
|
97
|
+
return createComponent(InterfaceMember, {
|
|
98
|
+
get name() {
|
|
99
|
+
return option.name;
|
|
100
|
+
},
|
|
101
|
+
doc,
|
|
102
|
+
get type() {
|
|
103
|
+
return option.variadic ? "number[]" : "number";
|
|
104
|
+
},
|
|
105
|
+
get optional() {
|
|
106
|
+
return option.optional;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}),
|
|
111
|
+
createComponent(Show, {
|
|
112
|
+
get when() {
|
|
113
|
+
return option.kind === ReflectionKind.boolean;
|
|
114
|
+
},
|
|
115
|
+
get children() {
|
|
116
|
+
return createComponent(InterfaceMember, {
|
|
117
|
+
get name() {
|
|
118
|
+
return option.name;
|
|
119
|
+
},
|
|
120
|
+
doc,
|
|
121
|
+
type: "boolean",
|
|
122
|
+
get optional() {
|
|
123
|
+
return option.optional;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
})];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The command option property parser logic.
|
|
134
|
+
*/
|
|
135
|
+
function OptionsMemberParserLogic(props) {
|
|
136
|
+
const { name, option, isCaseSensitive } = props;
|
|
137
|
+
const equalsRegex = `/^--?(${isCaseSensitive && name.length > 1 ? name : name.toLowerCase()}${option.alias && option.alias.length > 0 ? "|" : ""}${option.alias?.map((a) => (isCaseSensitive && name.length > 1 ? a : a.toLowerCase()) === "?" ? "\\?" : isCaseSensitive && name.length > 1 ? a : a.toLowerCase()).join("|")})=/`;
|
|
138
|
+
return [createComponent(Show, {
|
|
139
|
+
get when() {
|
|
140
|
+
return option.kind === ReflectionKind.string || option.kind === ReflectionKind.number;
|
|
141
|
+
},
|
|
142
|
+
get children() {
|
|
143
|
+
return [createComponent(Show, {
|
|
144
|
+
get when() {
|
|
145
|
+
return option.variadic;
|
|
146
|
+
},
|
|
147
|
+
get children() {
|
|
148
|
+
return [
|
|
149
|
+
createComponent(Show, {
|
|
150
|
+
get when() {
|
|
151
|
+
return name.includes("?") || name.includes("-");
|
|
152
|
+
},
|
|
153
|
+
fallback: code`options.${name} ??= []; `,
|
|
154
|
+
children: code`options["${name}"] ??= []; `
|
|
155
|
+
}),
|
|
156
|
+
createIntrinsic("hbr", {}),
|
|
157
|
+
createComponent(IfStatement, {
|
|
158
|
+
condition: `${equalsRegex}.test(arg${isCaseSensitive ? "" : ".toLowerCase()"})`,
|
|
159
|
+
get children() {
|
|
160
|
+
return [
|
|
161
|
+
createComponent(Show, {
|
|
162
|
+
get when() {
|
|
163
|
+
return name.includes("?") || name.includes("-");
|
|
164
|
+
},
|
|
165
|
+
fallback: code`options.${name}.push(`,
|
|
166
|
+
children: code`options["${name}"].push(`
|
|
167
|
+
}),
|
|
168
|
+
createComponent(Show, {
|
|
169
|
+
get when() {
|
|
170
|
+
return option.kind === ReflectionKind.string;
|
|
171
|
+
},
|
|
172
|
+
children: code`...arg.replace(${equalsRegex}, "").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean) `
|
|
173
|
+
}),
|
|
174
|
+
createComponent(Show, {
|
|
175
|
+
get when() {
|
|
176
|
+
return option.kind === ReflectionKind.number;
|
|
177
|
+
},
|
|
178
|
+
children: code`...arg.replace(${equalsRegex}, "").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `
|
|
179
|
+
}),
|
|
180
|
+
code`); `
|
|
181
|
+
];
|
|
182
|
+
}
|
|
183
|
+
}),
|
|
184
|
+
createComponent(ElseIfClause, {
|
|
185
|
+
condition: `args.length > i + 1`,
|
|
186
|
+
get children() {
|
|
187
|
+
return [
|
|
188
|
+
createComponent(Show, {
|
|
189
|
+
get when() {
|
|
190
|
+
return name.includes("?") || name.includes("-");
|
|
191
|
+
},
|
|
192
|
+
fallback: code`options.${name}.push(`,
|
|
193
|
+
children: code`options["${name}"].push(`
|
|
194
|
+
}),
|
|
195
|
+
createComponent(Show, {
|
|
196
|
+
get when() {
|
|
197
|
+
return option.kind === ReflectionKind.string;
|
|
198
|
+
},
|
|
199
|
+
children: code`...args[++i].split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean) `
|
|
200
|
+
}),
|
|
201
|
+
createComponent(Show, {
|
|
202
|
+
get when() {
|
|
203
|
+
return option.kind === ReflectionKind.number;
|
|
204
|
+
},
|
|
205
|
+
children: code`...args[++i].split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `
|
|
206
|
+
}),
|
|
207
|
+
code`); `
|
|
208
|
+
];
|
|
209
|
+
}
|
|
210
|
+
})
|
|
211
|
+
];
|
|
212
|
+
}
|
|
213
|
+
}), createComponent(Show, {
|
|
214
|
+
get when() {
|
|
215
|
+
return !option.variadic;
|
|
216
|
+
},
|
|
217
|
+
get children() {
|
|
218
|
+
return [
|
|
219
|
+
createComponent(IfStatement, {
|
|
220
|
+
condition: `${equalsRegex}.test(arg${isCaseSensitive ? "" : ".toLowerCase()"})`,
|
|
221
|
+
get children() {
|
|
222
|
+
return [createComponent(Show, {
|
|
223
|
+
get when() {
|
|
224
|
+
return option.kind === ReflectionKind.string;
|
|
225
|
+
},
|
|
226
|
+
get children() {
|
|
227
|
+
return [createComponent(Show, {
|
|
228
|
+
get when() {
|
|
229
|
+
return name.includes("?") || name.includes("-");
|
|
230
|
+
},
|
|
231
|
+
fallback: code`options.${name}`,
|
|
232
|
+
children: code`options["${name}"]`
|
|
233
|
+
}), code` = arg.replace(${equalsRegex}, "").trim().replace(/^("|')/, "").replace(/("|')$/, ""); `];
|
|
234
|
+
}
|
|
235
|
+
}), createComponent(Show, {
|
|
236
|
+
get when() {
|
|
237
|
+
return option.kind === ReflectionKind.number;
|
|
238
|
+
},
|
|
239
|
+
get children() {
|
|
240
|
+
return [
|
|
241
|
+
createComponent(VarDeclaration, {
|
|
242
|
+
"const": true,
|
|
243
|
+
name: "value",
|
|
244
|
+
initializer: code` Number(arg.replace(${equalsRegex}, "").trim().replace(/^("|')/, "").replace(/("|')$/, "")); `
|
|
245
|
+
}),
|
|
246
|
+
createIntrinsic("hbr", {}),
|
|
247
|
+
createComponent(IfStatement, {
|
|
248
|
+
condition: `!Number.isNaN(value)`,
|
|
249
|
+
get children() {
|
|
250
|
+
return [createComponent(Show, {
|
|
251
|
+
get when() {
|
|
252
|
+
return name.includes("?") || name.includes("-");
|
|
253
|
+
},
|
|
254
|
+
fallback: code`options.${name}`,
|
|
255
|
+
children: code`options["${name}"]`
|
|
256
|
+
}), code` = value; `];
|
|
257
|
+
}
|
|
258
|
+
})
|
|
259
|
+
];
|
|
260
|
+
}
|
|
261
|
+
})];
|
|
262
|
+
}
|
|
263
|
+
}),
|
|
264
|
+
createComponent(ElseIfClause, {
|
|
265
|
+
condition: `args.length > i + 1`,
|
|
266
|
+
get children() {
|
|
267
|
+
return [createComponent(Show, {
|
|
268
|
+
get when() {
|
|
269
|
+
return option.kind === ReflectionKind.string;
|
|
270
|
+
},
|
|
271
|
+
get children() {
|
|
272
|
+
return [createComponent(Show, {
|
|
273
|
+
get when() {
|
|
274
|
+
return name.includes("?") || name.includes("-");
|
|
275
|
+
},
|
|
276
|
+
fallback: code`options.${name}`,
|
|
277
|
+
children: code`options["${name}"]`
|
|
278
|
+
}), code` = args[++i].trim().replace(/^("|')/, "").replace(/("|')$/, ""); `];
|
|
279
|
+
}
|
|
280
|
+
}), createComponent(Show, {
|
|
281
|
+
get when() {
|
|
282
|
+
return option.kind === ReflectionKind.number;
|
|
283
|
+
},
|
|
284
|
+
get children() {
|
|
285
|
+
return [
|
|
286
|
+
createComponent(VarDeclaration, {
|
|
287
|
+
"const": true,
|
|
288
|
+
name: "value",
|
|
289
|
+
initializer: code` Number(args[++i].trim().replace(/^("|')/, "").replace(/("|')$/, "")); `
|
|
290
|
+
}),
|
|
291
|
+
createIntrinsic("hbr", {}),
|
|
292
|
+
createComponent(IfStatement, {
|
|
293
|
+
condition: `!Number.isNaN(value)`,
|
|
294
|
+
get children() {
|
|
295
|
+
return [createComponent(Show, {
|
|
296
|
+
get when() {
|
|
297
|
+
return name.includes("?") || name.includes("-");
|
|
298
|
+
},
|
|
299
|
+
fallback: code`options.${name}`,
|
|
300
|
+
children: code`options["${name}"]`
|
|
301
|
+
}), code` = value; `];
|
|
302
|
+
}
|
|
303
|
+
})
|
|
304
|
+
];
|
|
305
|
+
}
|
|
306
|
+
})];
|
|
307
|
+
}
|
|
308
|
+
}),
|
|
309
|
+
createIntrinsic("hbr", {})
|
|
310
|
+
];
|
|
311
|
+
}
|
|
312
|
+
})];
|
|
313
|
+
}
|
|
314
|
+
}), createComponent(Show, {
|
|
315
|
+
get when() {
|
|
316
|
+
return option.kind === ReflectionKind.boolean;
|
|
317
|
+
},
|
|
318
|
+
get children() {
|
|
319
|
+
return [
|
|
320
|
+
createComponent(IfStatement, {
|
|
321
|
+
condition: `${equalsRegex}.test(arg${isCaseSensitive ? "" : ".toLowerCase()"})`,
|
|
322
|
+
get children() {
|
|
323
|
+
return [
|
|
324
|
+
createComponent(VarDeclaration, {
|
|
325
|
+
"const": true,
|
|
326
|
+
name: "value",
|
|
327
|
+
initializer: code` arg.replace(${equalsRegex}, "").trim().replace(/^("|')/, "").replace(/("|')$/, "").toLowerCase(); `
|
|
328
|
+
}),
|
|
329
|
+
createIntrinsic("hbr", {}),
|
|
330
|
+
createComponent(Show, {
|
|
331
|
+
get when() {
|
|
332
|
+
return name.includes("?") || name.includes("-");
|
|
333
|
+
},
|
|
334
|
+
fallback: code`options.${name}`,
|
|
335
|
+
children: code`options["${name}"]`
|
|
336
|
+
}),
|
|
337
|
+
code` = value !== "false" && value !== "f" && value !== "no" && value !== "n" && value !== "0" && value !== "off" && value !== "disable" && value !== "disabled"; `
|
|
338
|
+
];
|
|
339
|
+
}
|
|
340
|
+
}),
|
|
341
|
+
createComponent(ElseClause, { get children() {
|
|
342
|
+
return createComponent(Show, {
|
|
343
|
+
get when() {
|
|
344
|
+
return name.includes("?") || name.includes("-");
|
|
345
|
+
},
|
|
346
|
+
fallback: code`options.${name} = true; `,
|
|
347
|
+
children: code`options["${name}"] = true; `
|
|
348
|
+
});
|
|
349
|
+
} }),
|
|
350
|
+
createComponent(Show, {
|
|
351
|
+
get when() {
|
|
352
|
+
return Boolean(option.isNegativeOf);
|
|
353
|
+
},
|
|
354
|
+
get children() {
|
|
355
|
+
return [createIntrinsic("hbr", {}), createComponent(Show, {
|
|
356
|
+
get when() {
|
|
357
|
+
return option.isNegativeOf.includes("?") || option.isNegativeOf.includes("-");
|
|
358
|
+
},
|
|
359
|
+
get fallback() {
|
|
360
|
+
return code`options.${option.isNegativeOf} = false; `;
|
|
361
|
+
},
|
|
362
|
+
get children() {
|
|
363
|
+
return code`options["${option.isNegativeOf}"] = false; `;
|
|
364
|
+
}
|
|
365
|
+
})];
|
|
366
|
+
}
|
|
367
|
+
})
|
|
368
|
+
];
|
|
369
|
+
}
|
|
370
|
+
})];
|
|
371
|
+
}
|
|
372
|
+
function OptionsMemberParserCondition(props) {
|
|
373
|
+
const { name, alias, isCaseSensitive } = props;
|
|
374
|
+
return [memo(() => code`arg${isCaseSensitive ? "" : ".toLowerCase()"}.startsWith("--${isCaseSensitive ? name : name.toLowerCase()}=") || arg${isCaseSensitive ? "" : ".toLowerCase()"} === "--${isCaseSensitive ? name : name.toLowerCase()}" || arg.startsWith("-${name}=") || arg === "-${name}"`), createComponent(Show, {
|
|
375
|
+
get when() {
|
|
376
|
+
return alias && alias.length > 0;
|
|
377
|
+
},
|
|
378
|
+
get children() {
|
|
379
|
+
return createComponent(For, {
|
|
380
|
+
each: alias ?? [],
|
|
381
|
+
children: (a) => code` || arg${isCaseSensitive ? "" : ".toLowerCase()"}.startsWith("--${isCaseSensitive ? a : a.toLowerCase()}=") || arg${isCaseSensitive ? "" : ".toLowerCase()"} === "--${isCaseSensitive ? a : a.toLowerCase()}" || arg.startsWith("-${a}=") || arg === "-${a}"`
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
})];
|
|
385
|
+
}
|
|
386
|
+
function OptionsInterfaceDeclaration(props) {
|
|
387
|
+
const { command } = props;
|
|
388
|
+
const options = computed(() => computedOptions(command));
|
|
389
|
+
return createComponent(InterfaceDeclaration, {
|
|
390
|
+
"export": true,
|
|
391
|
+
get name() {
|
|
392
|
+
return `${pascalCase(command.name)}Options`;
|
|
393
|
+
},
|
|
394
|
+
get children() {
|
|
395
|
+
return createComponent(For, {
|
|
396
|
+
get each() {
|
|
397
|
+
return Object.values(options.value);
|
|
398
|
+
},
|
|
399
|
+
hardline: true,
|
|
400
|
+
children: (option) => createComponent(OptionsMember, { option })
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* The command options parser logic.
|
|
407
|
+
*/
|
|
408
|
+
function OptionsParserLogic(props) {
|
|
409
|
+
const { command, envPrefix, isCaseSensitive = false } = props;
|
|
410
|
+
const options = computed(() => computedOptions(command));
|
|
411
|
+
return [
|
|
412
|
+
createComponent(VarDeclaration, {
|
|
413
|
+
"const": true,
|
|
414
|
+
name: "options",
|
|
415
|
+
get initializer() {
|
|
416
|
+
return code` {
|
|
417
|
+
${Object.entries(options.value).map(([name, option]) => {
|
|
418
|
+
if (option.kind === ReflectionKind.string) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${envPrefix}_${option.env}` : ""}${option.variadic ? option.default !== void 0 ? `${option.env ? " ?? " : ""}${JSON.stringify(option.default)}` : option.env ? " ?? []" : "" : option.default !== void 0 ? `${option.env ? " ?? " : ""}"${option.default}"` : ""}, `;
|
|
419
|
+
else if (option.kind === ReflectionKind.number) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${envPrefix}_${option.env}` : ""}${option.variadic ? option.default !== void 0 ? `${option.env ? " ?? " : ""}${JSON.stringify(option.default)}` : option.env ? " ?? []" : "" : option.default !== void 0 ? `${option.env ? " ?? " : ""}${option.default}` : ""}, `;
|
|
420
|
+
else if (option.kind === ReflectionKind.boolean) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${envPrefix}_${option.env} ?? ` : ""}${option.default ? "true" : "false"},`;
|
|
421
|
+
return "";
|
|
422
|
+
}).join("")}
|
|
423
|
+
} as ${pascalCase(command.name)}Options;`;
|
|
424
|
+
}
|
|
425
|
+
}),
|
|
426
|
+
createIntrinsic("hbr", {}),
|
|
427
|
+
createIntrinsic("hbr", {}),
|
|
428
|
+
memo(() => code`for (let i = 0; i < args.slice(${command.path.segments.filter((segment) => isPositionalCommandOption(segment)).length}).length; i++) { `),
|
|
429
|
+
createIntrinsic("hbr", {}),
|
|
430
|
+
createComponent(VarDeclaration, {
|
|
431
|
+
"const": true,
|
|
432
|
+
name: "arg",
|
|
433
|
+
type: "string",
|
|
434
|
+
initializer: code` args[i].length > 3 && args[i].startsWith("--")
|
|
435
|
+
? \`--\${args[i].slice(2).replaceAll("-", "")${isCaseSensitive ? "" : ".toLowerCase()"}}\`
|
|
436
|
+
: args[i].length > 2 && args[i].startsWith("-")
|
|
437
|
+
? \`-\${args[i].slice(1).replaceAll("-", "")}\`
|
|
438
|
+
: args[i]; `
|
|
439
|
+
}),
|
|
440
|
+
createIntrinsic("hbr", {}),
|
|
441
|
+
createComponent(For, {
|
|
442
|
+
get each() {
|
|
443
|
+
return Object.entries(options.value);
|
|
444
|
+
},
|
|
445
|
+
hardline: true,
|
|
446
|
+
children: ([name, option], i) => createComponent(Show, {
|
|
447
|
+
when: i === 0,
|
|
448
|
+
get fallback() {
|
|
449
|
+
return createComponent(ElseIfClause, {
|
|
450
|
+
get condition() {
|
|
451
|
+
return [createComponent(OptionsMemberParserCondition, {
|
|
452
|
+
name,
|
|
453
|
+
get alias() {
|
|
454
|
+
return option.alias;
|
|
455
|
+
},
|
|
456
|
+
isCaseSensitive
|
|
457
|
+
})];
|
|
458
|
+
},
|
|
459
|
+
get children() {
|
|
460
|
+
return createComponent(OptionsMemberParserLogic, {
|
|
461
|
+
name,
|
|
462
|
+
option,
|
|
463
|
+
isCaseSensitive
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
},
|
|
468
|
+
get children() {
|
|
469
|
+
return createComponent(IfStatement, {
|
|
470
|
+
get condition() {
|
|
471
|
+
return createComponent(OptionsMemberParserCondition, {
|
|
472
|
+
name,
|
|
473
|
+
get alias() {
|
|
474
|
+
return option.alias;
|
|
475
|
+
},
|
|
476
|
+
isCaseSensitive
|
|
477
|
+
});
|
|
478
|
+
},
|
|
479
|
+
get children() {
|
|
480
|
+
return createComponent(OptionsMemberParserLogic, {
|
|
481
|
+
name,
|
|
482
|
+
option,
|
|
483
|
+
isCaseSensitive
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
})
|
|
489
|
+
}),
|
|
490
|
+
createIntrinsic("hbr", {}),
|
|
491
|
+
code` } `,
|
|
492
|
+
createIntrinsic("hbr", {})
|
|
493
|
+
];
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
//#endregion
|
|
497
|
+
export { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic, PositionalOptionsParserLogic };
|
|
498
|
+
//# sourceMappingURL=options-parser-logic.mjs.map
|
|
@@ -0,0 +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 : a.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive ? 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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"}
|