@shell-shock/core 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/docs.d.cts +5 -5
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.cts +2 -2
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +2 -2
- package/dist/components/options-parser-logic.cjs +17 -22
- package/dist/components/options-parser-logic.cjs.map +1 -1
- package/dist/components/options-parser-logic.d.cts +4 -8
- package/dist/components/options-parser-logic.d.cts.map +1 -1
- package/dist/components/options-parser-logic.d.mts +4 -8
- package/dist/components/options-parser-logic.d.mts.map +1 -1
- package/dist/components/options-parser-logic.mjs +18 -23
- package/dist/components/options-parser-logic.mjs.map +1 -1
- package/dist/components/usage.cjs +1 -1
- package/dist/components/usage.cjs.map +1 -1
- package/dist/components/usage.d.cts +2 -2
- package/dist/components/usage.d.mts +2 -2
- package/dist/components/usage.mjs +2 -2
- package/dist/components/usage.mjs.map +1 -1
- package/dist/helpers/resolve-command.cjs +20 -31
- package/dist/helpers/resolve-command.cjs.map +1 -1
- package/dist/helpers/resolve-command.mjs +21 -32
- package/dist/helpers/resolve-command.mjs.map +1 -1
- package/dist/helpers/validations.cjs +20 -20
- package/dist/helpers/validations.cjs.map +1 -1
- package/dist/helpers/validations.mjs +21 -21
- package/dist/helpers/validations.mjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/plugin-utils/context-helpers.cjs +106 -5
- package/dist/plugin-utils/context-helpers.cjs.map +1 -1
- package/dist/plugin-utils/context-helpers.d.cts +89 -3
- package/dist/plugin-utils/context-helpers.d.cts.map +1 -1
- package/dist/plugin-utils/context-helpers.d.mts +89 -3
- package/dist/plugin-utils/context-helpers.d.mts.map +1 -1
- package/dist/plugin-utils/context-helpers.mjs +100 -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 +7 -2
- package/dist/plugin-utils/index.d.cts +2 -2
- package/dist/plugin-utils/index.d.mts +2 -2
- package/dist/plugin-utils/index.mjs +2 -2
- package/dist/plugin.cjs +1 -1
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +2 -2
- package/dist/plugin.mjs.map +1 -1
- package/dist/types/command.d.cts +20 -3
- package/dist/types/command.d.cts.map +1 -1
- package/dist/types/command.d.mts +20 -3
- 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 +6 -6
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ This package is part of the ⚡<b>Shell Shock</b> monorepo. The Shell Shock pack
|
|
|
27
27
|
|
|
28
28
|
<h3 align="center">💻 Visit <a href="https://stormsoftware.com" target="_blank">stormsoftware.com</a> to stay up to date with this developer</h3><br />
|
|
29
29
|
|
|
30
|
-
[](https://stormsoftware.com/projects/shell-shock/) [](http://commitizen.github.io/cz-cli/)  
|
|
31
31
|
|
|
32
32
|
<!-- prettier-ignore-start -->
|
|
33
33
|
<!-- markdownlint-disable -->
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommandTree } from "../types/command.cjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _alloy_js_core5 from "@alloy-js/core";
|
|
3
3
|
import { MarkdownFileProps } from "@powerlines/plugin-alloy/markdown/components/markdown-file";
|
|
4
4
|
|
|
5
5
|
//#region src/components/docs.d.ts
|
|
@@ -12,7 +12,7 @@ interface CommandOptionsDocsProps {
|
|
|
12
12
|
/**
|
|
13
13
|
* Generates the options markdown documentation for a command.
|
|
14
14
|
*/
|
|
15
|
-
declare function CommandOptionsDocs(props: CommandOptionsDocsProps):
|
|
15
|
+
declare function CommandOptionsDocs(props: CommandOptionsDocsProps): _alloy_js_core5.Children;
|
|
16
16
|
interface CommandDocsUsageExampleProps {
|
|
17
17
|
/**
|
|
18
18
|
* The package manager to generate the usage example for.
|
|
@@ -31,7 +31,7 @@ interface CommandDocsUsageExampleProps {
|
|
|
31
31
|
/**
|
|
32
32
|
* Generates the markdown documentation for a command.
|
|
33
33
|
*/
|
|
34
|
-
declare function CommandDocsUsageExample(props: CommandDocsUsageExampleProps):
|
|
34
|
+
declare function CommandDocsUsageExample(props: CommandDocsUsageExampleProps): _alloy_js_core5.Children;
|
|
35
35
|
interface CommandDocsProps {
|
|
36
36
|
/**
|
|
37
37
|
* The heading level offset to apply to the generated documentation.
|
|
@@ -56,7 +56,7 @@ interface CommandDocsProps {
|
|
|
56
56
|
/**
|
|
57
57
|
* Generates the markdown documentation for a command.
|
|
58
58
|
*/
|
|
59
|
-
declare function CommandDocs(props: CommandDocsProps):
|
|
59
|
+
declare function CommandDocs(props: CommandDocsProps): _alloy_js_core5.Children;
|
|
60
60
|
interface CommandDocsFileProps extends Partial<MarkdownFileProps> {
|
|
61
61
|
/**
|
|
62
62
|
* The heading level offset to apply to the generated documentation.
|
|
@@ -75,7 +75,7 @@ interface CommandDocsFileProps extends Partial<MarkdownFileProps> {
|
|
|
75
75
|
/**
|
|
76
76
|
* Generates the markdown documentation file for a command.
|
|
77
77
|
*/
|
|
78
|
-
declare function CommandDocsFile(props: CommandDocsFileProps):
|
|
78
|
+
declare function CommandDocsFile(props: CommandDocsFileProps): _alloy_js_core5.Children;
|
|
79
79
|
//#endregion
|
|
80
80
|
export { CommandDocs, CommandDocsFile, CommandDocsFileProps, CommandDocsProps, CommandDocsUsageExample, CommandDocsUsageExampleProps, CommandOptionsDocs, CommandOptionsDocsProps };
|
|
81
81
|
//# sourceMappingURL=docs.d.cts.map
|
|
@@ -6,10 +6,10 @@ exports.CommandDocs = require_components_docs.CommandDocs;
|
|
|
6
6
|
exports.CommandDocsFile = require_components_docs.CommandDocsFile;
|
|
7
7
|
exports.CommandDocsUsageExample = require_components_docs.CommandDocsUsageExample;
|
|
8
8
|
exports.CommandOptionsDocs = require_components_docs.CommandOptionsDocs;
|
|
9
|
+
exports.DynamicPathSegmentsParserLogic = require_components_options_parser_logic.DynamicPathSegmentsParserLogic;
|
|
9
10
|
exports.OptionsInterfaceDeclaration = require_components_options_parser_logic.OptionsInterfaceDeclaration;
|
|
10
11
|
exports.OptionsMember = require_components_options_parser_logic.OptionsMember;
|
|
11
12
|
exports.OptionsMemberParserCondition = require_components_options_parser_logic.OptionsMemberParserCondition;
|
|
12
13
|
exports.OptionsMemberParserLogic = require_components_options_parser_logic.OptionsMemberParserLogic;
|
|
13
14
|
exports.OptionsParserLogic = require_components_options_parser_logic.OptionsParserLogic;
|
|
14
|
-
exports.PositionalOptionsParserLogic = require_components_options_parser_logic.PositionalOptionsParserLogic;
|
|
15
15
|
exports.Usage = require_components_usage.Usage;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { CommandDocs, CommandDocsFile, CommandDocsFileProps, CommandDocsProps, CommandDocsUsageExample, CommandDocsUsageExampleProps, CommandOptionsDocs, CommandOptionsDocsProps } from "./docs.cjs";
|
|
2
|
-
import { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps
|
|
2
|
+
import { DynamicPathSegmentsParserLogic, DynamicPathSegmentsParserLogicProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps } from "./options-parser-logic.cjs";
|
|
3
3
|
import { Usage, UsageProps } from "./usage.cjs";
|
|
4
|
-
export { CommandDocs, CommandDocsFile, CommandDocsFileProps, CommandDocsProps, CommandDocsUsageExample, CommandDocsUsageExampleProps, CommandOptionsDocs, CommandOptionsDocsProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps,
|
|
4
|
+
export { CommandDocs, CommandDocsFile, CommandDocsFileProps, CommandDocsProps, CommandDocsUsageExample, CommandDocsUsageExampleProps, CommandOptionsDocs, CommandOptionsDocsProps, DynamicPathSegmentsParserLogic, DynamicPathSegmentsParserLogicProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps, Usage, UsageProps };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { CommandDocs, CommandDocsFile, CommandDocsFileProps, CommandDocsProps, CommandDocsUsageExample, CommandDocsUsageExampleProps, CommandOptionsDocs, CommandOptionsDocsProps } from "./docs.mjs";
|
|
2
|
-
import { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps
|
|
2
|
+
import { DynamicPathSegmentsParserLogic, DynamicPathSegmentsParserLogicProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps } from "./options-parser-logic.mjs";
|
|
3
3
|
import { Usage, UsageProps } from "./usage.mjs";
|
|
4
|
-
export { CommandDocs, CommandDocsFile, CommandDocsFileProps, CommandDocsProps, CommandDocsUsageExample, CommandDocsUsageExampleProps, CommandOptionsDocs, CommandOptionsDocsProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps,
|
|
4
|
+
export { CommandDocs, CommandDocsFile, CommandDocsFileProps, CommandDocsProps, CommandDocsUsageExample, CommandDocsUsageExampleProps, CommandOptionsDocs, CommandOptionsDocsProps, DynamicPathSegmentsParserLogic, DynamicPathSegmentsParserLogicProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps, Usage, UsageProps };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Usage } from "./usage.mjs";
|
|
2
2
|
import { CommandDocs, CommandDocsFile, CommandDocsUsageExample, CommandOptionsDocs } from "./docs.mjs";
|
|
3
|
-
import { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic
|
|
3
|
+
import { DynamicPathSegmentsParserLogic, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic } from "./options-parser-logic.mjs";
|
|
4
4
|
|
|
5
|
-
export { CommandDocs, CommandDocsFile, CommandDocsUsageExample, CommandOptionsDocs, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic,
|
|
5
|
+
export { CommandDocs, CommandDocsFile, CommandDocsUsageExample, CommandOptionsDocs, DynamicPathSegmentsParserLogic, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic, Usage };
|
|
@@ -3,7 +3,6 @@ const require_plugin_utils_context_helpers = require('../plugin-utils/context-he
|
|
|
3
3
|
const require_contexts_options = require('../contexts/options.cjs');
|
|
4
4
|
let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
|
|
5
5
|
let __stryke_string_format_camel_case = require("@stryke/string-format/camel-case");
|
|
6
|
-
let __stryke_string_format_constant_case = require("@stryke/string-format/constant-case");
|
|
7
6
|
let __stryke_type_checks_is_set_string = require("@stryke/type-checks/is-set-string");
|
|
8
7
|
let __alloy_js_core = require("@alloy-js/core");
|
|
9
8
|
let __powerlines_deepkit_vendor_type = require("@powerlines/deepkit/vendor/type");
|
|
@@ -11,46 +10,42 @@ let __alloy_js_typescript = require("@alloy-js/typescript");
|
|
|
11
10
|
let __stryke_string_format_pascal_case = require("@stryke/string-format/pascal-case");
|
|
12
11
|
|
|
13
12
|
//#region src/components/options-parser-logic.tsx
|
|
14
|
-
function
|
|
15
|
-
const { path
|
|
13
|
+
function DynamicPathSegmentsParserLogic(props) {
|
|
14
|
+
const { path } = props;
|
|
16
15
|
return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.For, {
|
|
17
16
|
get each() {
|
|
18
17
|
return path.segments ?? [];
|
|
19
18
|
},
|
|
20
19
|
children: (segment, index) => (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
|
|
21
20
|
get when() {
|
|
22
|
-
return require_plugin_utils_context_helpers.
|
|
21
|
+
return require_plugin_utils_context_helpers.isDynamicPathSegment(segment);
|
|
23
22
|
},
|
|
24
23
|
get children() {
|
|
25
24
|
return [
|
|
26
25
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.VarDeclaration, {
|
|
27
26
|
"let": true,
|
|
28
27
|
get name() {
|
|
29
|
-
return (0, __stryke_string_format_camel_case.camelCase)(require_plugin_utils_context_helpers.
|
|
28
|
+
return (0, __stryke_string_format_camel_case.camelCase)(require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment));
|
|
30
29
|
},
|
|
31
30
|
get type() {
|
|
32
|
-
return
|
|
31
|
+
return `${path.dynamics[require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment)]?.variadic ? "string[]" : "string"}${path.dynamics[require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment)]?.optional ? " | undefined" : ""}`;
|
|
33
32
|
},
|
|
34
33
|
get initializer() {
|
|
35
|
-
return (0, __alloy_js_core_jsx_runtime.memo)(() => !!path.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
}),
|
|
45
|
-
__alloy_js_core.code`undefined;`
|
|
46
|
-
];
|
|
34
|
+
return (0, __alloy_js_core_jsx_runtime.memo)(() => !!path.dynamics[require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment)]?.variadic)() ? __alloy_js_core.code`[]` : [(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
|
|
35
|
+
get when() {
|
|
36
|
+
return (0, __stryke_type_checks_is_set_string.isSetString)(path.dynamics[require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment)]?.default);
|
|
37
|
+
},
|
|
38
|
+
get children() {
|
|
39
|
+
return __alloy_js_core.code`"${path.dynamics[require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment)]?.default}"`;
|
|
40
|
+
}
|
|
41
|
+
}), __alloy_js_core.code`undefined;`];
|
|
47
42
|
}
|
|
48
43
|
}),
|
|
49
44
|
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
50
45
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
|
|
51
46
|
condition: __alloy_js_core.code`args.length > ${2 + index} && args[${2 + index}]`,
|
|
52
47
|
get children() {
|
|
53
|
-
return __alloy_js_core.code`${(0, __stryke_string_format_camel_case.camelCase)(require_plugin_utils_context_helpers.
|
|
48
|
+
return __alloy_js_core.code`${(0, __stryke_string_format_camel_case.camelCase)(require_plugin_utils_context_helpers.getDynamicPathSegmentName(segment))} = args[${2 + index}];`;
|
|
54
49
|
}
|
|
55
50
|
}),
|
|
56
51
|
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
@@ -379,7 +374,7 @@ function OptionsMemberParserCondition(props) {
|
|
|
379
374
|
get children() {
|
|
380
375
|
return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.For, {
|
|
381
376
|
each: alias ?? [],
|
|
382
|
-
children: (a) => __alloy_js_core.code` || arg${isCaseSensitive ? "" : ".toLowerCase()"}.startsWith("--${isCaseSensitive ? a : a.toLowerCase()}=") || arg${isCaseSensitive ? "" : ".toLowerCase()"} === "--${isCaseSensitive ? a : a.toLowerCase()}" || arg.startsWith("-${a}=") || arg === "-${a}"`
|
|
377
|
+
children: (a) => __alloy_js_core.code` || arg${isCaseSensitive ? "" : ".toLowerCase()"}.startsWith("--${isCaseSensitive || a.length === 1 ? a : a.toLowerCase()}=") || arg${isCaseSensitive ? "" : ".toLowerCase()"} === "--${isCaseSensitive || a.length === 1 ? a : a.toLowerCase()}" || arg.startsWith("-${a}=") || arg === "-${a}"`
|
|
383
378
|
});
|
|
384
379
|
}
|
|
385
380
|
})];
|
|
@@ -426,7 +421,7 @@ function OptionsParserLogic(props) {
|
|
|
426
421
|
}),
|
|
427
422
|
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
428
423
|
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
429
|
-
(0, __alloy_js_core_jsx_runtime.memo)(() => __alloy_js_core.code`for (let i = 0; i < args.slice(${command.path.segments.filter((segment) => require_plugin_utils_context_helpers.
|
|
424
|
+
(0, __alloy_js_core_jsx_runtime.memo)(() => __alloy_js_core.code`for (let i = 0; i < args.slice(${command.path.segments.filter((segment) => require_plugin_utils_context_helpers.isDynamicPathSegment(segment)).length}).length; i++) { `),
|
|
430
425
|
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
431
426
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.VarDeclaration, {
|
|
432
427
|
"const": true,
|
|
@@ -495,10 +490,10 @@ function OptionsParserLogic(props) {
|
|
|
495
490
|
}
|
|
496
491
|
|
|
497
492
|
//#endregion
|
|
493
|
+
exports.DynamicPathSegmentsParserLogic = DynamicPathSegmentsParserLogic;
|
|
498
494
|
exports.OptionsInterfaceDeclaration = OptionsInterfaceDeclaration;
|
|
499
495
|
exports.OptionsMember = OptionsMember;
|
|
500
496
|
exports.OptionsMemberParserCondition = OptionsMemberParserCondition;
|
|
501
497
|
exports.OptionsMemberParserLogic = OptionsMemberParserLogic;
|
|
502
498
|
exports.OptionsParserLogic = OptionsParserLogic;
|
|
503
|
-
exports.PositionalOptionsParserLogic = PositionalOptionsParserLogic;
|
|
504
499
|
//# sourceMappingURL=options-parser-logic.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-parser-logic.cjs","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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"}
|
|
1
|
+
{"version":3,"file":"options-parser-logic.cjs","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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"}
|
|
@@ -2,17 +2,13 @@ import { CommandOption, CommandTree, CommandTreePath } from "../types/command.cj
|
|
|
2
2
|
import * as _alloy_js_core0 from "@alloy-js/core";
|
|
3
3
|
|
|
4
4
|
//#region src/components/options-parser-logic.d.ts
|
|
5
|
-
interface
|
|
5
|
+
interface DynamicPathSegmentsParserLogicProps {
|
|
6
6
|
/**
|
|
7
|
-
* The command path to generate the
|
|
7
|
+
* The command path to generate the dynamic path segments parser logic for.
|
|
8
8
|
*/
|
|
9
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
10
|
}
|
|
15
|
-
declare function
|
|
11
|
+
declare function DynamicPathSegmentsParserLogic(props: DynamicPathSegmentsParserLogicProps): _alloy_js_core0.Children;
|
|
16
12
|
/**
|
|
17
13
|
* The command option interface property.
|
|
18
14
|
*/
|
|
@@ -82,5 +78,5 @@ interface OptionsParserLogicProps {
|
|
|
82
78
|
*/
|
|
83
79
|
declare function OptionsParserLogic(props: OptionsParserLogicProps): _alloy_js_core0.Children;
|
|
84
80
|
//#endregion
|
|
85
|
-
export { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps
|
|
81
|
+
export { DynamicPathSegmentsParserLogic, DynamicPathSegmentsParserLogicProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps };
|
|
86
82
|
//# sourceMappingURL=options-parser-logic.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-parser-logic.d.cts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"options-parser-logic.d.cts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":[],"mappings":";;;;UA6CiB,mCAAA;;;AAAjB;EAOgB,IAAA,EAHR,eAGQ;AAuDhB;AAAgC,iBAvDhB,8BAAA,CAuDgB,KAAA,EAtDvB,mCAsDuB,CAAA,EAtDY,eAAA,CAAA,QAsDZ;;;;AAuCf,iBAvCD,aAAA,CAuC8B;EAAA;AAqL9C,CA5KU,EAAA;EAaM,MAAA,EA7DoC,aA6DpC;AA+JhB,CAAA,CAAA,EA5NiE,eAAA,CAAE,QA4NlD;AAmBD,UAxMC,6BAAA,CAyMR;EA0BO;AAchB;AAsBA;;;;;UA9PU;;;;;;;;;;;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"}
|
|
@@ -2,17 +2,13 @@ import { CommandOption, CommandTree, CommandTreePath } from "../types/command.mj
|
|
|
2
2
|
import * as _alloy_js_core0 from "@alloy-js/core";
|
|
3
3
|
|
|
4
4
|
//#region src/components/options-parser-logic.d.ts
|
|
5
|
-
interface
|
|
5
|
+
interface DynamicPathSegmentsParserLogicProps {
|
|
6
6
|
/**
|
|
7
|
-
* The command path to generate the
|
|
7
|
+
* The command path to generate the dynamic path segments parser logic for.
|
|
8
8
|
*/
|
|
9
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
10
|
}
|
|
15
|
-
declare function
|
|
11
|
+
declare function DynamicPathSegmentsParserLogic(props: DynamicPathSegmentsParserLogicProps): _alloy_js_core0.Children;
|
|
16
12
|
/**
|
|
17
13
|
* The command option interface property.
|
|
18
14
|
*/
|
|
@@ -82,5 +78,5 @@ interface OptionsParserLogicProps {
|
|
|
82
78
|
*/
|
|
83
79
|
declare function OptionsParserLogic(props: OptionsParserLogicProps): _alloy_js_core0.Children;
|
|
84
80
|
//#endregion
|
|
85
|
-
export { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps
|
|
81
|
+
export { DynamicPathSegmentsParserLogic, DynamicPathSegmentsParserLogicProps, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserConditionProps, OptionsMemberParserLogic, OptionsMemberParserLogicProps, OptionsParserLogic, OptionsParserLogicProps };
|
|
86
82
|
//# 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":";;;;UA6CiB,mCAAA;;;AAAjB;EAOgB,IAAA,EAHR,eAGQ;AAuDhB;AAAgC,iBAvDhB,8BAAA,CAuDgB,KAAA,EAtDvB,mCAsDuB,CAAA,EAtDY,eAAA,CAAA,QAsDZ;;;;AAuCf,iBAvCD,aAAA,CAuC8B;EAAA;AAqL9C,CA5KU,EAAA;EAaM,MAAA,EA7DoC,aA6DpC;AA+JhB,CAAA,CAAA,EA5NiE,eAAA,CAAE,QA4NlD;AAmBD,UAxMC,6BAAA,CAyMR;EA0BO;AAchB;AAsBA;;;;;UA9PU;;;;;;;;;;;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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDynamicPathSegmentName, isDynamicPathSegment } from "../plugin-utils/context-helpers.mjs";
|
|
2
2
|
import { computedOptions } from "../contexts/options.mjs";
|
|
3
3
|
import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
|
|
4
4
|
import { camelCase } from "@stryke/string-format/camel-case";
|
|
5
|
-
import { constantCase } from "@stryke/string-format/constant-case";
|
|
6
5
|
import { isSetString } from "@stryke/type-checks/is-set-string";
|
|
7
6
|
import { For, Show, code, computed } from "@alloy-js/core";
|
|
8
7
|
import { ReflectionKind } from "@powerlines/deepkit/vendor/type";
|
|
@@ -10,46 +9,42 @@ import { ElseClause, ElseIfClause, IfStatement, InterfaceDeclaration, InterfaceM
|
|
|
10
9
|
import { pascalCase } from "@stryke/string-format/pascal-case";
|
|
11
10
|
|
|
12
11
|
//#region src/components/options-parser-logic.tsx
|
|
13
|
-
function
|
|
14
|
-
const { path
|
|
12
|
+
function DynamicPathSegmentsParserLogic(props) {
|
|
13
|
+
const { path } = props;
|
|
15
14
|
return createComponent(For, {
|
|
16
15
|
get each() {
|
|
17
16
|
return path.segments ?? [];
|
|
18
17
|
},
|
|
19
18
|
children: (segment, index) => createComponent(Show, {
|
|
20
19
|
get when() {
|
|
21
|
-
return
|
|
20
|
+
return isDynamicPathSegment(segment);
|
|
22
21
|
},
|
|
23
22
|
get children() {
|
|
24
23
|
return [
|
|
25
24
|
createComponent(VarDeclaration, {
|
|
26
25
|
"let": true,
|
|
27
26
|
get name() {
|
|
28
|
-
return camelCase(
|
|
27
|
+
return camelCase(getDynamicPathSegmentName(segment));
|
|
29
28
|
},
|
|
30
29
|
get type() {
|
|
31
|
-
return
|
|
30
|
+
return `${path.dynamics[getDynamicPathSegmentName(segment)]?.variadic ? "string[]" : "string"}${path.dynamics[getDynamicPathSegmentName(segment)]?.optional ? " | undefined" : ""}`;
|
|
32
31
|
},
|
|
33
32
|
get initializer() {
|
|
34
|
-
return memo(() => !!path.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
}),
|
|
44
|
-
code`undefined;`
|
|
45
|
-
];
|
|
33
|
+
return memo(() => !!path.dynamics[getDynamicPathSegmentName(segment)]?.variadic)() ? code`[]` : [createComponent(Show, {
|
|
34
|
+
get when() {
|
|
35
|
+
return isSetString(path.dynamics[getDynamicPathSegmentName(segment)]?.default);
|
|
36
|
+
},
|
|
37
|
+
get children() {
|
|
38
|
+
return code`"${path.dynamics[getDynamicPathSegmentName(segment)]?.default}"`;
|
|
39
|
+
}
|
|
40
|
+
}), code`undefined;`];
|
|
46
41
|
}
|
|
47
42
|
}),
|
|
48
43
|
createIntrinsic("hbr", {}),
|
|
49
44
|
createComponent(IfStatement, {
|
|
50
45
|
condition: code`args.length > ${2 + index} && args[${2 + index}]`,
|
|
51
46
|
get children() {
|
|
52
|
-
return code`${camelCase(
|
|
47
|
+
return code`${camelCase(getDynamicPathSegmentName(segment))} = args[${2 + index}];`;
|
|
53
48
|
}
|
|
54
49
|
}),
|
|
55
50
|
createIntrinsic("hbr", {}),
|
|
@@ -378,7 +373,7 @@ function OptionsMemberParserCondition(props) {
|
|
|
378
373
|
get children() {
|
|
379
374
|
return createComponent(For, {
|
|
380
375
|
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}"`
|
|
376
|
+
children: (a) => code` || arg${isCaseSensitive ? "" : ".toLowerCase()"}.startsWith("--${isCaseSensitive || a.length === 1 ? a : a.toLowerCase()}=") || arg${isCaseSensitive ? "" : ".toLowerCase()"} === "--${isCaseSensitive || a.length === 1 ? a : a.toLowerCase()}" || arg.startsWith("-${a}=") || arg === "-${a}"`
|
|
382
377
|
});
|
|
383
378
|
}
|
|
384
379
|
})];
|
|
@@ -425,7 +420,7 @@ function OptionsParserLogic(props) {
|
|
|
425
420
|
}),
|
|
426
421
|
createIntrinsic("hbr", {}),
|
|
427
422
|
createIntrinsic("hbr", {}),
|
|
428
|
-
memo(() => code`for (let i = 0; i < args.slice(${command.path.segments.filter((segment) =>
|
|
423
|
+
memo(() => code`for (let i = 0; i < args.slice(${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length}).length; i++) { `),
|
|
429
424
|
createIntrinsic("hbr", {}),
|
|
430
425
|
createComponent(VarDeclaration, {
|
|
431
426
|
"const": true,
|
|
@@ -494,5 +489,5 @@ function OptionsParserLogic(props) {
|
|
|
494
489
|
}
|
|
495
490
|
|
|
496
491
|
//#endregion
|
|
497
|
-
export { OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic
|
|
492
|
+
export { DynamicPathSegmentsParserLogic, OptionsInterfaceDeclaration, OptionsMember, OptionsMemberParserCondition, OptionsMemberParserLogic, OptionsParserLogic };
|
|
498
493
|
//# sourceMappingURL=options-parser-logic.mjs.map
|