@shell-shock/core 0.5.0 → 0.5.1
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.d.cts +5 -5
- package/dist/components/options-parser-logic.cjs +1 -1
- package/dist/components/options-parser-logic.cjs.map +1 -1
- package/dist/components/options-parser-logic.mjs +1 -1
- package/dist/components/options-parser-logic.mjs.map +1 -1
- package/dist/components/usage.d.cts +2 -2
- package/dist/components/usage.d.mts +2 -2
- package/dist/plugin-utils/context-helpers.cjs +1 -1
- package/dist/plugin-utils/context-helpers.cjs.map +1 -1
- package/dist/plugin-utils/context-helpers.d.cts.map +1 -1
- package/dist/plugin-utils/context-helpers.d.mts.map +1 -1
- package/dist/plugin-utils/context-helpers.mjs +1 -1
- package/dist/plugin-utils/context-helpers.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -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
|
|
@@ -379,7 +379,7 @@ function OptionsMemberParserCondition(props) {
|
|
|
379
379
|
get children() {
|
|
380
380
|
return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.For, {
|
|
381
381
|
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}"`
|
|
382
|
+
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
383
|
});
|
|
384
384
|
}
|
|
385
385
|
})];
|
|
@@ -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","constantCase","pascalCase","isSetString","computedOptions","getPositionalCommandOptionName","isPositionalCommandOption","PositionalOptionsParserLogic","props","path","envPrefix","_$createComponent","each","segments","children","segment","index","when","name","type","_$memo","positional","kind","number","variadic","initializer","default","_$createIntrinsic","condition","OptionsMember","option","doc","description","title","Boolean","string","optional","boolean","OptionsMemberParserLogic","isCaseSensitive","equalsRegex","length","toLowerCase","alias","map","a","join","includes","fallback","isNegativeOf","OptionsMemberParserCondition","OptionsInterfaceDeclaration","command","options","Object","values","value","hardline","OptionsParserLogic","entries","env","undefined","JSON","stringify","filter","i"],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n IfStatement,\n InterfaceDeclaration,\n InterfaceMember,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { computedOptions } from \"../contexts/options\";\nimport {\n getPositionalCommandOptionName,\n isPositionalCommandOption\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n CommandTreePath,\n NumberCommandOption,\n StringCommandOption\n} from \"../types/command\";\n\nexport interface PositionalOptionsParserLogicProps {\n /**\n * The command path to generate the positional options parser logic for.\n */\n path: CommandTreePath;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n}\n\nexport function PositionalOptionsParserLogic(\n props: PositionalOptionsParserLogicProps\n) {\n const { path, envPrefix } = props;\n\n return (\n <For each={path.segments ?? []}>\n {(segment, index) => (\n <Show when={isPositionalCommandOption(segment)}>\n <VarDeclaration\n let\n name={camelCase(getPositionalCommandOptionName(segment))}\n type={\n path.positional[getPositionalCommandOptionName(segment)]?.kind ===\n ReflectionKind.number\n ? path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"number[]\"\n : \"number | undefined\"\n : path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"string[]\"\n : \"string | undefined\"\n }\n initializer={\n path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic ? (\n code`[]`\n ) : (\n <>\n {code`env.${\n envPrefix\n }_${constantCase(path.positional[getPositionalCommandOptionName(segment)]?.name)} ?? `}\n <Show\n when={isSetString(\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n )}>\n {code`\"${\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n }\"`}\n </Show>\n {code`undefined;`}\n </>\n )\n }\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(getPositionalCommandOptionName(segment))} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({ option }: { option: CommandOption }) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={Boolean(option.name)}>\n <Show when={option.kind === ReflectionKind.string}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as StringCommandOption).variadic ? \"string[]\" : \"string\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as NumberCommandOption).variadic ? \"number[]\" : \"number\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type=\"boolean\"\n optional={option.optional}\n />\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserLogicProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * The command option to generate the parser logic for.\n */\n option: CommandOption;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps) {\n const { name, option, isCaseSensitive } = props;\n\n const equalsRegex = `/^--?(${\n isCaseSensitive && name.length > 1 ? name : name.toLowerCase()\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive && name.length > 1 ? a : a.toLowerCase()) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive && name.length > 1\n ? a\n : a.toLowerCase()\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>\n <Show\n when={(option as StringCommandOption | NumberCommandOption).variadic}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandOption | NumberCommandOption).variadic\n }>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value !== \"false\" && value !== \"f\" && value !== \"no\" && value !== \"n\" && value !== \"0\" && value !== \"off\" && value !== \"disable\" && value !== \"disabled\"; `}\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserConditionProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n alias?: string[];\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\nexport function OptionsMemberParserCondition(\n props: OptionsMemberParserConditionProps\n) {\n const { name, alias, isCaseSensitive } = props;\n\n return (\n <>\n {code`arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive ? name : name.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive ? name : name.toLowerCase()\n }\" || arg.startsWith(\"-${name}=\") || arg === \"-${name}\"`}\n <Show when={alias && alias.length > 0}>\n <For each={alias ?? []}>\n {a =>\n code` || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive || a.length === 1 ? a : a.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive || a.length === 1 ? a : a.toLowerCase()\n }\" || arg.startsWith(\"-${a}=\") || arg === \"-${a}\"`\n }\n </For>\n </Show>\n </>\n );\n}\n\nexport function OptionsInterfaceDeclaration(props: { command: CommandTree }) {\n const { command } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <InterfaceDeclaration export name={`${pascalCase(command.name)}Options`}>\n <For each={Object.values(options.value)} hardline>\n {option => <OptionsMember option={option} />}\n </For>\n </InterfaceDeclaration>\n );\n}\n\nexport interface OptionsParserLogicProps {\n /**\n * The command to generate the options parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive?: boolean;\n}\n\n/**\n * The command options parser logic.\n */\nexport function OptionsParserLogic(props: OptionsParserLogicProps) {\n const { command, envPrefix, isCaseSensitive = false } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <>\n <VarDeclaration\n const\n name=\"options\"\n initializer={code` {\n ${Object.entries(options.value)\n .map(([name, option]) => {\n if (option.kind === ReflectionKind.string) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}\"${option.default}\"`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.number) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}${option.default}`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.boolean) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env} ?? ` : \"\"\n }${option.default ? \"true\" : \"false\"},`;\n }\n\n return \"\";\n })\n .join(\"\")}\n } as ${pascalCase(command.name)}Options;`}\n />\n <hbr />\n <hbr />\n {code`for (let i = 0; i < args.slice(${\n command.path.segments.filter(segment =>\n isPositionalCommandOption(segment)\n ).length\n }).length; i++) { `}\n <hbr />\n <VarDeclaration\n const\n name=\"arg\"\n type=\"string\"\n initializer={code` args[i].length > 3 && args[i].startsWith(\"--\")\n ? \\`--\\${args[i].slice(2).replaceAll(\"-\", \"\")${\n isCaseSensitive ? \"\" : \".toLowerCase()\"\n }}\\`\n : args[i].length > 2 && args[i].startsWith(\"-\")\n ? \\`-\\${args[i].slice(1).replaceAll(\"-\", \"\")}\\`\n : args[i]; `}\n />\n <hbr />\n\n <For each={Object.entries(options.value)} hardline>\n {([name, option], i) => (\n <Show\n when={i === 0}\n fallback={\n <ElseIfClause\n condition={\n <>\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n </>\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </ElseIfClause>\n }>\n <IfStatement\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </IfStatement>\n </Show>\n )}\n </For>\n\n <hbr />\n {code` } `}\n <hbr />\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA0DA,SAAgBkB,6BACdC,OACA;CACA,MAAM,EAAEC,MAAMC,cAAcF;AAE5B,yDACGjB,qBAAG;EAAA,IAACqB,OAAI;AAAA,UAAEH,KAAKI,YAAY,EAAE;;EAAAC,WAC1BC,SAASC,2DACRxB,sBAAI;GAAA,IAACyB,OAAI;AAAA,WAAEX,+DAA0BS,QAAQ;;GAAA,IAAAD,WAAA;AAAA,WAAA;sDAC3ChB,sCAAc;MAAA,OAAA;MAAA,IAEboB,OAAI;AAAA,+DAAYb,oEAA+BU,QAAQ,CAAC;;MAAA,IACxDI,OAAI;AAAA,0DACFV,KAAKY,WAAWhB,oEAA+BU,QAAQ,GAAGO,SAC1DvB,gDAAewB,OAAM,EAAA,GACjBd,KAAKY,WAAWhB,oEAA+BU,QAAQ,GACnDS,WACF,aACA,uBACFf,KAAKY,WAAWhB,oEAA+BU,QAAQ,GACjDS,WACJ,aACA;;MAAoB,IAE5BC,cAAW;AAAA,0DACT,CAAA,CAAAhB,KAAKY,WAAWhB,oEAA+BU,QAAQ,GACnDS,SAAQ,EAAA,GACVnC,oBAAI,OAAI;oDAGLA,oBAAI,OACHqB,UAAS,0DACMD,KAAKY,WAAWhB,oEAA+BU,QAAQ,GAAGG,KAAK,CAAA,OAAO;yDACtF1B,sBAAI;SAAA,IACHyB,OAAI;AAAA,qEACFR,KAAKY,WAAWhB,oEAA+BU,QAAQ,GACnDW,QACL;;SAAA,IAAAZ,WAAA;AAAA,iBACAzB,oBAAI,IACHoB,KAAKY,WAAWhB,oEAA+BU,QAAQ,GACnDW,QAAO;;SACV,CAAA;QAEJrC,oBAAI;QAER;;MAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAIJM,mCAAW;MACViC,WAAWvC,oBAAI,iBAAiB,IAAI2B,MAAK,WAAY,IAAIA,MAAK;MAAG,IAAAF,WAAA;AAAA,cAChEzB,oBAAI,oDAAagB,oEAA+BU,QAAQ,CAAC,CAAA,UAAW,IAAIC,MAAK;;MAAI,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;KAAA;;GAAA,CAAA;EAKvF,CAAA;;;;;AAQP,SAAgBa,cAAc,EAAEC,UAAqC;CACnE,MAAMC,MAAMD,OAAOE,eAAe,OAAOF,OAAOG,MAAK;AAErD,QAAA,kDAEKzC,sBAAI;EAAA,IAACyB,OAAI;AAAA,UAAEiB,QAAQJ,OAAOZ,KAAK;;EAAA,IAAAJ,WAAA;AAAA,UAAA;qDAC7BtB,sBAAI;KAAA,IAACyB,OAAI;AAAA,aAAEa,OAAOR,SAASvB,gDAAeoC;;KAAM,IAAArB,WAAA;AAAA,8DAC9CjB,uCAAe;OAAA,IACdqB,OAAI;AAAA,eAAEY,OAAOZ;;OACRa;OAAG,IACRZ,OAAI;AAAA,eACDW,OAA+BN,WAAW,aAAa;;OAAQ,IAElEY,WAAQ;AAAA,eAAEN,OAAOM;;OAAQ,CAAA;;KAAA,CAAA;qDAG5B5C,sBAAI;KAAA,IAACyB,OAAI;AAAA,aAAEa,OAAOR,SAASvB,gDAAewB;;KAAM,IAAAT,WAAA;AAAA,8DAC9CjB,uCAAe;OAAA,IACdqB,OAAI;AAAA,eAAEY,OAAOZ;;OACRa;OAAG,IACRZ,OAAI;AAAA,eACDW,OAA+BN,WAAW,aAAa;;OAAQ,IAElEY,WAAQ;AAAA,eAAEN,OAAOM;;OAAQ,CAAA;;KAAA,CAAA;qDAG5B5C,sBAAI;KAAA,IAACyB,OAAI;AAAA,aAAEa,OAAOR,SAASvB,gDAAesC;;KAAO,IAAAvB,WAAA;AAAA,8DAC/CjB,uCAAe;OAAA,IACdqB,OAAI;AAAA,eAAEY,OAAOZ;;OACRa;OACLZ,MAAI;OAAA,IACJiB,WAAQ;AAAA,eAAEN,OAAOM;;OAAQ,CAAA;;KAAA,CAAA;IAAA;;EAAA,CAAA,CAAA;;;;;AA8BrC,SAAgBE,yBAAyB9B,OAAsC;CAC7E,MAAM,EAAEU,MAAMY,QAAQS,oBAAoB/B;CAE1C,MAAMgC,cAAc,SAClBD,mBAAmBrB,KAAKuB,SAAS,IAAIvB,OAAOA,KAAKwB,aAAa,GAC7DZ,OAAOa,SAASb,OAAOa,MAAMF,SAAS,IAAI,MAAM,KAAKX,OAAOa,OAC3DC,KAAIC,OACHN,mBAAmBrB,KAAKuB,SAAS,IAAII,IAAIA,EAAEH,aAAa,MAAM,MAC3D,QACAH,mBAAmBrB,KAAKuB,SAAS,IAC/BI,IACAA,EAAEH,aACV,CAAC,CACAI,KAAK,IAAI,CAAA;AAEZ,QAAA,kDAEKtD,sBAAI;EAAA,IACHyB,OAAI;AAAA,UACFa,OAAOR,SAASvB,gDAAeoC,UAC/BL,OAAOR,SAASvB,gDAAewB;;EAAM,IAAAT,WAAA;AAAA,UAAA,kDAEtCtB,sBAAI;IAAA,IACHyB,OAAI;AAAA,YAAGa,OAAqDN;;IAAQ,IAAAV,WAAA;AAAA,YAAA;uDACnEtB,sBAAI;OAAA,IACHyB,OAAI;AAAA,eAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;OAC9CC,UAAU3D,oBAAI,WAAW6B,KAAI;OAAWJ,UACvCzB,oBAAI,YAAY6B,KAAI;OAAa,CAAA;uDAAA,OAAA,EAAA,CAAA;uDAGnCvB,mCAAW;OACViC,WAAW,GAAGY,YAAW,WAAYD,kBAAkB,KAAK,iBAAgB;OAAG,IAAAzB,WAAA;AAAA,eAAA;0DAC9EtB,sBAAI;UAAA,IACHyB,OAAI;AAAA,kBAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;UAC9CC,UAAU3D,oBAAI,WAAW6B,KAAI;UAAQJ,UACpCzB,oBAAI,YAAY6B,KAAI;UAAU,CAAA;0DAEhC1B,sBAAI;UAAA,IAACyB,OAAI;AAAA,kBAAEa,OAAOR,SAASvB,gDAAeoC;;UAAMrB,UAC9CzB,oBAAI,kBAAkBmD,YAAW;UAAwG,CAAA;0DAE3IhD,sBAAI;UAAA,IAACyB,OAAI;AAAA,kBAAEa,OAAOR,SAASvB,gDAAewB;;UAAMT,UAC9CzB,oBAAI,kBAAkBmD,YAAW;UAA0J,CAAA;SAE7LnD,oBAAI;SAAK;;OAAA,CAAA;uDAEXK,oCAAY;OAACkC,WAAW;OAAqB,IAAAd,WAAA;AAAA,eAAA;0DAC3CtB,sBAAI;UAAA,IACHyB,OAAI;AAAA,kBAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;UAC9CC,UAAU3D,oBAAI,WAAW6B,KAAI;UAAQJ,UACpCzB,oBAAI,YAAY6B,KAAI;UAAU,CAAA;0DAEhC1B,sBAAI;UAAA,IAACyB,OAAI;AAAA,kBAAEa,OAAOR,SAASvB,gDAAeoC;;UAAMrB,UAC9CzB,oBAAI;UAA+G,CAAA;0DAErHG,sBAAI;UAAA,IAACyB,OAAI;AAAA,kBAAEa,OAAOR,SAASvB,gDAAewB;;UAAMT,UAC9CzB,oBAAI;UAAiK,CAAA;SAEvKA,oBAAI;SAAK;;OAAA,CAAA;MAAA;;IAAA,CAAA,mDAGbG,sBAAI;IAAA,IACHyB,OAAI;AAAA,YACF,CAAEa,OAAqDN;;IAAQ,IAAAV,WAAA;AAAA,YAAA;uDAEhEnB,mCAAW;OACViC,WAAW,GAAGY,YAAW,WAAYD,kBAAkB,KAAK,iBAAgB;OAAG,IAAAzB,WAAA;AAAA,eAAA,kDAC9EtB,sBAAI;SAAA,IAACyB,OAAI;AAAA,iBAAEa,OAAOR,SAASvB,gDAAeoC;;SAAM,IAAArB,WAAA;AAAA,iBAAA,kDAC9CtB,sBAAI;WAAA,IACHyB,OAAI;AAAA,mBAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;WAC9CC,UAAU3D,oBAAI,WAAW6B;WAAMJ,UAC9BzB,oBAAI,YAAY6B,KAAI;WAAI,CAAA,EAE1B7B,oBAAI,kBAAkBmD,YAAW,4DAA4D;;SAAA,CAAA,mDAE/FhD,sBAAI;SAAA,IAACyB,OAAI;AAAA,iBAAEa,OAAOR,SAASvB,gDAAewB;;SAAM,IAAAT,WAAA;AAAA,iBAAA;4DAC9ChB,sCAAc;YAAA,SAAA;YAEboB,MAAI;YACJO,aAAapC,oBAAI,uBAAuBmD,YAAW;YAA6D,CAAA;4DAAA,OAAA,EAAA,CAAA;4DAGjH7C,mCAAW;YAACiC,WAAW;YAAsB,IAAAd,WAAA;AAAA,oBAAA,kDAC3CtB,sBAAI;cAAA,IACHyB,OAAI;AAAA,sBAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;cAC9CC,UAAU3D,oBAAI,WAAW6B;cAAMJ,UAC9BzB,oBAAI,YAAY6B,KAAI;cAAI,CAAA,EAE1B7B,oBAAI,aAAY;;YAAA,CAAA;WAAA;;SAAA,CAAA,CAAA;;OAAA,CAAA;uDAItBK,oCAAY;OAACkC,WAAW;OAAqB,IAAAd,WAAA;AAAA,eAAA,kDAC3CtB,sBAAI;SAAA,IAACyB,OAAI;AAAA,iBAAEa,OAAOR,SAASvB,gDAAeoC;;SAAM,IAAArB,WAAA;AAAA,iBAAA,kDAC9CtB,sBAAI;WAAA,IACHyB,OAAI;AAAA,mBAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;WAC9CC,UAAU3D,oBAAI,WAAW6B;WAAMJ,UAC9BzB,oBAAI,YAAY6B,KAAI;WAAI,CAAA,EAE1B7B,oBAAI,oEAAmE;;SAAA,CAAA,mDAEzEG,sBAAI;SAAA,IAACyB,OAAI;AAAA,iBAAEa,OAAOR,SAASvB,gDAAewB;;SAAM,IAAAT,WAAA;AAAA,iBAAA;4DAC9ChB,sCAAc;YAAA,SAAA;YAEboB,MAAI;YACJO,aAAapC,oBAAI;YAAyE,CAAA;4DAAA,OAAA,EAAA,CAAA;4DAG3FM,mCAAW;YAACiC,WAAW;YAAsB,IAAAd,WAAA;AAAA,oBAAA,kDAC3CtB,sBAAI;cAAA,IACHyB,OAAI;AAAA,sBAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;cAC9CC,UAAU3D,oBAAI,WAAW6B;cAAMJ,UAC9BzB,oBAAI,YAAY6B,KAAI;cAAI,CAAA,EAE1B7B,oBAAI,aAAY;;YAAA,CAAA;WAAA;;SAAA,CAAA,CAAA;;OAAA,CAAA;uDAAA,OAAA,EAAA,CAAA;MAAA;;IAAA,CAAA,CAAA;;EAAA,CAAA,mDAO1BG,sBAAI;EAAA,IAACyB,OAAI;AAAA,UAAEa,OAAOR,SAASvB,gDAAesC;;EAAO,IAAAvB,WAAA;AAAA,UAAA;qDAC/CnB,mCAAW;KACViC,WAAW,GAAGY,YAAW,WAAYD,kBAAkB,KAAK,iBAAgB;KAAG,IAAAzB,WAAA;AAAA,aAAA;wDAC9EhB,sCAAc;QAAA,SAAA;QAEboB,MAAI;QACJO,aAAapC,oBAAI,gBAAgBmD,YAAW;QAA0E,CAAA;wDAAA,OAAA,EAAA,CAAA;wDAGvHhD,sBAAI;QAAA,IACHyB,OAAI;AAAA,gBAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;QAC9CC,UAAU3D,oBAAI,WAAW6B;QAAMJ,UAC9BzB,oBAAI,YAAY6B,KAAI;QAAI,CAAA;OAE1B7B,oBAAI;OAA+J;;KAAA,CAAA;qDAErKI,kCAAU,EAAA,IAAAqB,WAAA;AAAA,6DACRtB,sBAAI;MAAA,IACHyB,OAAI;AAAA,cAAEC,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI;;MAC9CC,UAAU3D,oBAAI,WAAW6B,KAAI;MAAWJ,UACvCzB,oBAAI,YAAY6B,KAAI;MAAa,CAAA;OAAA,CAAA;qDAGrC1B,sBAAI;KAAA,IAACyB,OAAI;AAAA,aAAEiB,QAASJ,OAAgCmB,aAAa;;KAAA,IAAAnC,WAAA;AAAA,aAAA,kDAAA,OAAA,EAAA,CAAA,mDAE/DtB,sBAAI;OAAA,IACHyB,OAAI;AAAA,eACDa,OAAgCmB,aAAcF,SAAS,IAAI,IAC3DjB,OAAgCmB,aAAcF,SAAS,IAAI;;OAAA,IAE9DC,WAAQ;AAAA,eAAE3D,oBAAI,WAAYyC,OAAgCmB,aAAY;;OAAY,IAAAnC,WAAA;AAAA,eACjFzB,oBAAI,YAAayC,OAAgCmB,aAAY;;OAAc,CAAA,CAAA;;KAAA,CAAA;IAAA;;EAAA,CAAA,CAAA;;AA2BxF,SAAgBC,6BACd1C,OACA;CACA,MAAM,EAAEU,MAAMyB,OAAOJ,oBAAoB/B;AAEzC,QAAA,6CAEKnB,oBAAI,MAAMkD,kBAAkB,KAAK,iBAAgB,iBAChDA,kBAAkBrB,OAAOA,KAAKwB,aAAa,CAAA,YAChCH,kBAAkB,KAAK,iBAAgB,UAClDA,kBAAkBrB,OAAOA,KAAKwB,aAAa,CAAA,wBACpBxB,KAAI,mBAAoBA,KAAI,GAAG,mDACvD1B,sBAAI;EAAA,IAACyB,OAAI;AAAA,UAAE0B,SAASA,MAAMF,SAAS;;EAAC,IAAA3B,WAAA;AAAA,2DAClCvB,qBAAG;IAACqB,MAAM+B,SAAS,EAAE;IAAA7B,WACnB+B,MACCxD,oBAAI,UAAUkD,kBAAkB,KAAK,iBAAgB,iBACnDA,mBAAmBM,EAAEJ,WAAW,IAAII,IAAIA,EAAEH,aAAa,CAAA,YAC5CH,kBAAkB,KAAK,iBAAgB,UAClDA,mBAAmBM,EAAEJ,WAAW,IAAII,IAAIA,EAAEH,aAAa,CAAA,wBAChCG,EAAC,mBAAoBA,EAAC;IAAG,CAAA;;EAAA,CAAA,CAAA;;AAQ9D,SAAgBM,4BAA4B3C,OAAiC;CAC3E,MAAM,EAAE4C,YAAY5C;CAEpB,MAAM6C,8CAAyBjD,yCAAgBgD,QAAQ,CAAC;AAExD,yDACGxD,4CAAoB;EAAA,UAAA;EAAA,IAAQsB,OAAI;AAAA,UAAE,sDAAckC,QAAQlC,KAAK,CAAA;;EAAS,IAAAJ,WAAA;AAAA,2DACpEvB,qBAAG;IAAA,IAACqB,OAAI;AAAA,YAAE0C,OAAOC,OAAOF,QAAQG,MAAM;;IAAEC,UAAQ;IAAA3C,WAC9CgB,4DAAWD,eAAa,EAASC,QAAM,CAAA;IAAI,CAAA;;EAAA,CAAA;;;;;AA4BpD,SAAgB4B,mBAAmBlD,OAAgC;CACjE,MAAM,EAAE4C,SAAS1C,WAAW6B,kBAAkB,UAAU/B;CAExD,MAAM6C,8CAAyBjD,yCAAgBgD,QAAQ,CAAC;AAExD,QAAA;mDAEKtD,sCAAc;GAAA,SAAA;GAEboB,MAAI;GAAA,IACJO,cAAW;AAAA,WAAEpC,oBAAI;YACbiE,OAAOK,QAAQN,QAAQG,MAAM,CAC5BZ,KAAK,CAAC1B,MAAMY,YAAY;AACvB,SAAIA,OAAOR,SAASvB,gDAAeoC,OACjC,QAAO,IAAIjB,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI,GAAG,IAAI7B,KAAI,KAAM,GAAGA,OAAM,IAC3EY,OAAO8B,MAAM,OAAOlD,UAAS,GAAIoB,OAAO8B,QAAQ,KAEhD9B,OAAON,WACHM,OAAOJ,YAAYmC,SACjB,GACE/B,OAAO8B,MAAM,SAAS,KACrBE,KAAKC,UAAUjC,OAAOJ,QAAQ,KACjCI,OAAO8B,MACL,WACA,KACJ9B,OAAOJ,YAAYmC,SACjB,GAAG/B,OAAO8B,MAAM,SAAS,GAAE,GAAI9B,OAAOJ,QAAO,KAC7C,GAAE;cAEDI,OAAOR,SAASvB,gDAAewB,OACxC,QAAO,IAAIL,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI,GAAG,IAAI7B,KAAI,KAAM,GAAGA,OAAM,IAC3EY,OAAO8B,MAAM,OAAOlD,UAAS,GAAIoB,OAAO8B,QAAQ,KAEhD9B,OAAON,WACHM,OAAOJ,YAAYmC,SACjB,GACE/B,OAAO8B,MAAM,SAAS,KACrBE,KAAKC,UAAUjC,OAAOJ,QAAQ,KACjCI,OAAO8B,MACL,WACA,KACJ9B,OAAOJ,YAAYmC,SACjB,GAAG/B,OAAO8B,MAAM,SAAS,KAAK9B,OAAOJ,YACrC,GAAE;cAEDI,OAAOR,SAASvB,gDAAesC,QACxC,QAAO,IAAInB,KAAK6B,SAAS,IAAI,IAAI7B,KAAK6B,SAAS,IAAI,GAAG,IAAI7B,KAAI,KAAM,GAAGA,OAAM,IAC3EY,OAAO8B,MAAM,OAAOlD,UAAS,GAAIoB,OAAO8B,IAAG,QAAS,KACnD9B,OAAOJ,UAAU,SAAS,QAAO;AAGtC,YAAO;MACP,CACDoB,KAAK,GAAG,CAAA;oEACOM,QAAQlC,KAAK,CAAA;;GAAU,CAAA;mDAAA,OAAA,EAAA,CAAA;mDAAA,OAAA,EAAA,CAAA;8CAI5C7B,oBAAI,kCACH+D,QAAQ3C,KAAKI,SAASmD,QAAOjD,YAC3BT,+DAA0BS,QAC5B,CAAC,CAAC0B,OAAM,mBACS;mDAAA,OAAA,EAAA,CAAA;mDAElB3C,sCAAc;GAAA,SAAA;GAEboB,MAAI;GACJC,MAAI;GACJM,aAAapC,oBAAI;yDAEbkD,kBAAkB,KAAK,iBAAgB;;;;GAI7B,CAAA;mDAAA,OAAA,EAAA,CAAA;mDAIfhD,qBAAG;GAAA,IAACqB,OAAI;AAAA,WAAE0C,OAAOK,QAAQN,QAAQG,MAAM;;GAAEC,UAAQ;GAAA3C,WAC9C,CAACI,MAAMY,SAASmC,uDACfzE,sBAAI;IACHyB,MAAMgD,MAAM;IAAC,IACbjB,WAAQ;AAAA,6DACLtD,oCAAY;MAAA,IACXkC,YAAS;AAAA,cAAA,kDAEJsB,8BAA4B;QACrBhC;QAAI,IACVyB,QAAK;AAAA,gBAAEb,OAAOa;;QACGJ;QAAe,CAAA,CAAA;;MAAA,IAAAzB,WAAA;AAAA,+DAIrCwB,0BAAwB;QACjBpB;QACEY;QACSS;QAAe,CAAA;;MAAA,CAAA;;IAAA,IAAAzB,WAAA;AAAA,6DAIrCnB,mCAAW;MAAA,IACViC,YAAS;AAAA,+DACNsB,8BAA4B;QACrBhC;QAAI,IACVyB,QAAK;AAAA,gBAAEb,OAAOa;;QACGJ;QAAe,CAAA;;MAAA,IAAAzB,WAAA;AAAA,+DAGnCwB,0BAAwB;QACjBpB;QACEY;QACSS;QAAe,CAAA;;MAAA,CAAA;;IAAA,CAAA;GAIvC,CAAA;mDAAA,OAAA,EAAA,CAAA;EAIFlD,oBAAI;mDAAK,OAAA,EAAA,CAAA;EAAA"}
|
|
@@ -378,7 +378,7 @@ function OptionsMemberParserCondition(props) {
|
|
|
378
378
|
get children() {
|
|
379
379
|
return createComponent(For, {
|
|
380
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}"`
|
|
381
|
+
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
382
|
});
|
|
383
383
|
}
|
|
384
384
|
})];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-parser-logic.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","IfStatement","InterfaceDeclaration","InterfaceMember","VarDeclaration","ReflectionKind","camelCase","constantCase","pascalCase","isSetString","computedOptions","getPositionalCommandOptionName","isPositionalCommandOption","PositionalOptionsParserLogic","props","path","envPrefix","_$createComponent","each","segments","children","segment","index","when","name","type","_$memo","positional","kind","number","variadic","initializer","default","_$createIntrinsic","condition","OptionsMember","option","doc","description","title","Boolean","string","optional","boolean","OptionsMemberParserLogic","isCaseSensitive","equalsRegex","length","toLowerCase","alias","map","a","join","includes","fallback","isNegativeOf","OptionsMemberParserCondition","OptionsInterfaceDeclaration","command","options","Object","values","value","hardline","OptionsParserLogic","entries","env","undefined","JSON","stringify","filter","i"],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n IfStatement,\n InterfaceDeclaration,\n InterfaceMember,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { computedOptions } from \"../contexts/options\";\nimport {\n getPositionalCommandOptionName,\n isPositionalCommandOption\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n CommandTreePath,\n NumberCommandOption,\n StringCommandOption\n} from \"../types/command\";\n\nexport interface PositionalOptionsParserLogicProps {\n /**\n * The command path to generate the positional options parser logic for.\n */\n path: CommandTreePath;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n}\n\nexport function PositionalOptionsParserLogic(\n props: PositionalOptionsParserLogicProps\n) {\n const { path, envPrefix } = props;\n\n return (\n <For each={path.segments ?? []}>\n {(segment, index) => (\n <Show when={isPositionalCommandOption(segment)}>\n <VarDeclaration\n let\n name={camelCase(getPositionalCommandOptionName(segment))}\n type={\n path.positional[getPositionalCommandOptionName(segment)]?.kind ===\n ReflectionKind.number\n ? path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"number[]\"\n : \"number | undefined\"\n : path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"string[]\"\n : \"string | undefined\"\n }\n initializer={\n path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic ? (\n code`[]`\n ) : (\n <>\n {code`env.${\n envPrefix\n }_${constantCase(path.positional[getPositionalCommandOptionName(segment)]?.name)} ?? `}\n <Show\n when={isSetString(\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n )}>\n {code`\"${\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n }\"`}\n </Show>\n {code`undefined;`}\n </>\n )\n }\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(getPositionalCommandOptionName(segment))} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({ option }: { option: CommandOption }) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={Boolean(option.name)}>\n <Show when={option.kind === ReflectionKind.string}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as StringCommandOption).variadic ? \"string[]\" : \"string\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as NumberCommandOption).variadic ? \"number[]\" : \"number\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type=\"boolean\"\n optional={option.optional}\n />\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserLogicProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * The command option to generate the parser logic for.\n */\n option: CommandOption;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps) {\n const { name, option, isCaseSensitive } = props;\n\n const equalsRegex = `/^--?(${\n isCaseSensitive && name.length > 1 ? name : name.toLowerCase()\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive && name.length > 1 ? a : a.toLowerCase()) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive && name.length > 1\n ? a\n : a.toLowerCase()\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>\n <Show\n when={(option as StringCommandOption | NumberCommandOption).variadic}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandOption | NumberCommandOption).variadic\n }>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value !== \"false\" && value !== \"f\" && value !== \"no\" && value !== \"n\" && value !== \"0\" && value !== \"off\" && value !== \"disable\" && value !== \"disabled\"; `}\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserConditionProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n alias?: string[];\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\nexport function OptionsMemberParserCondition(\n props: OptionsMemberParserConditionProps\n) {\n const { name, alias, isCaseSensitive } = props;\n\n return (\n <>\n {code`arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive ? name : name.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive ? name : name.toLowerCase()\n }\" || arg.startsWith(\"-${name}=\") || arg === \"-${name}\"`}\n <Show when={alias && alias.length > 0}>\n <For each={alias ?? []}>\n {a =>\n code` || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive ? a : 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.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","IfStatement","InterfaceDeclaration","InterfaceMember","VarDeclaration","ReflectionKind","camelCase","constantCase","pascalCase","isSetString","computedOptions","getPositionalCommandOptionName","isPositionalCommandOption","PositionalOptionsParserLogic","props","path","envPrefix","_$createComponent","each","segments","children","segment","index","when","name","type","_$memo","positional","kind","number","variadic","initializer","default","_$createIntrinsic","condition","OptionsMember","option","doc","description","title","Boolean","string","optional","boolean","OptionsMemberParserLogic","isCaseSensitive","equalsRegex","length","toLowerCase","alias","map","a","join","includes","fallback","isNegativeOf","OptionsMemberParserCondition","OptionsInterfaceDeclaration","command","options","Object","values","value","hardline","OptionsParserLogic","entries","env","undefined","JSON","stringify","filter","i"],"sources":["../../src/components/options-parser-logic.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n IfStatement,\n InterfaceDeclaration,\n InterfaceMember,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { computedOptions } from \"../contexts/options\";\nimport {\n getPositionalCommandOptionName,\n isPositionalCommandOption\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n CommandTreePath,\n NumberCommandOption,\n StringCommandOption\n} from \"../types/command\";\n\nexport interface PositionalOptionsParserLogicProps {\n /**\n * The command path to generate the positional options parser logic for.\n */\n path: CommandTreePath;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n}\n\nexport function PositionalOptionsParserLogic(\n props: PositionalOptionsParserLogicProps\n) {\n const { path, envPrefix } = props;\n\n return (\n <For each={path.segments ?? []}>\n {(segment, index) => (\n <Show when={isPositionalCommandOption(segment)}>\n <VarDeclaration\n let\n name={camelCase(getPositionalCommandOptionName(segment))}\n type={\n path.positional[getPositionalCommandOptionName(segment)]?.kind ===\n ReflectionKind.number\n ? path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"number[]\"\n : \"number | undefined\"\n : path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic\n ? \"string[]\"\n : \"string | undefined\"\n }\n initializer={\n path.positional[getPositionalCommandOptionName(segment)]\n ?.variadic ? (\n code`[]`\n ) : (\n <>\n {code`env.${\n envPrefix\n }_${constantCase(path.positional[getPositionalCommandOptionName(segment)]?.name)} ?? `}\n <Show\n when={isSetString(\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n )}>\n {code`\"${\n path.positional[getPositionalCommandOptionName(segment)]\n ?.default\n }\"`}\n </Show>\n {code`undefined;`}\n </>\n )\n }\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(getPositionalCommandOptionName(segment))} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({ option }: { option: CommandOption }) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={Boolean(option.name)}>\n <Show when={option.kind === ReflectionKind.string}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as StringCommandOption).variadic ? \"string[]\" : \"string\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={\n (option as NumberCommandOption).variadic ? \"number[]\" : \"number\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type=\"boolean\"\n optional={option.optional}\n />\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserLogicProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * The command option to generate the parser logic for.\n */\n option: CommandOption;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps) {\n const { name, option, isCaseSensitive } = props;\n\n const equalsRegex = `/^--?(${\n isCaseSensitive && name.length > 1 ? name : name.toLowerCase()\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive && name.length > 1 ? a : a.toLowerCase()) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive && name.length > 1\n ? a\n : a.toLowerCase()\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>\n <Show\n when={(option as StringCommandOption | NumberCommandOption).variadic}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandOption | NumberCommandOption).variadic\n }>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <IfStatement\n condition={`${equalsRegex}.test(arg${isCaseSensitive ? \"\" : \".toLowerCase()\"})`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value !== \"false\" && value !== \"f\" && value !== \"no\" && value !== \"n\" && value !== \"0\" && value !== \"off\" && value !== \"disable\" && value !== \"disabled\"; `}\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserConditionProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n alias?: string[];\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\nexport function OptionsMemberParserCondition(\n props: OptionsMemberParserConditionProps\n) {\n const { name, alias, isCaseSensitive } = props;\n\n return (\n <>\n {code`arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive ? name : name.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive ? name : name.toLowerCase()\n }\" || arg.startsWith(\"-${name}=\") || arg === \"-${name}\"`}\n <Show when={alias && alias.length > 0}>\n <For each={alias ?? []}>\n {a =>\n code` || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"}.startsWith(\"--${\n isCaseSensitive || a.length === 1 ? a : a.toLowerCase()\n }=\") || arg${isCaseSensitive ? \"\" : \".toLowerCase()\"} === \"--${\n isCaseSensitive || a.length === 1 ? a : a.toLowerCase()\n }\" || arg.startsWith(\"-${a}=\") || arg === \"-${a}\"`\n }\n </For>\n </Show>\n </>\n );\n}\n\nexport function OptionsInterfaceDeclaration(props: { command: CommandTree }) {\n const { command } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <InterfaceDeclaration export name={`${pascalCase(command.name)}Options`}>\n <For each={Object.values(options.value)} hardline>\n {option => <OptionsMember option={option} />}\n </For>\n </InterfaceDeclaration>\n );\n}\n\nexport interface OptionsParserLogicProps {\n /**\n * The command to generate the options parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${envPrefix}_OPTION_NAME`).\n */\n envPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive?: boolean;\n}\n\n/**\n * The command options parser logic.\n */\nexport function OptionsParserLogic(props: OptionsParserLogicProps) {\n const { command, envPrefix, isCaseSensitive = false } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <>\n <VarDeclaration\n const\n name=\"options\"\n initializer={code` {\n ${Object.entries(options.value)\n .map(([name, option]) => {\n if (option.kind === ReflectionKind.string) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}\"${option.default}\"`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.number) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}${option.default}`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.boolean) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${envPrefix}_${option.env} ?? ` : \"\"\n }${option.default ? \"true\" : \"false\"},`;\n }\n\n return \"\";\n })\n .join(\"\")}\n } as ${pascalCase(command.name)}Options;`}\n />\n <hbr />\n <hbr />\n {code`for (let i = 0; i < args.slice(${\n command.path.segments.filter(segment =>\n isPositionalCommandOption(segment)\n ).length\n }).length; i++) { `}\n <hbr />\n <VarDeclaration\n const\n name=\"arg\"\n type=\"string\"\n initializer={code` args[i].length > 3 && args[i].startsWith(\"--\")\n ? \\`--\\${args[i].slice(2).replaceAll(\"-\", \"\")${\n isCaseSensitive ? \"\" : \".toLowerCase()\"\n }}\\`\n : args[i].length > 2 && args[i].startsWith(\"-\")\n ? \\`-\\${args[i].slice(1).replaceAll(\"-\", \"\")}\\`\n : args[i]; `}\n />\n <hbr />\n\n <For each={Object.entries(options.value)} hardline>\n {([name, option], i) => (\n <Show\n when={i === 0}\n fallback={\n <ElseIfClause\n condition={\n <>\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n </>\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </ElseIfClause>\n }>\n <IfStatement\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </IfStatement>\n </Show>\n )}\n </For>\n\n <hbr />\n {code` } `}\n <hbr />\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommandTree } from "../types/command.cjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _alloy_js_core9 from "@alloy-js/core";
|
|
3
3
|
|
|
4
4
|
//#region src/components/usage.d.ts
|
|
5
5
|
interface UsageProps {
|
|
@@ -24,7 +24,7 @@ interface UsageProps {
|
|
|
24
24
|
/**
|
|
25
25
|
* A component that generates the usage display for a command.
|
|
26
26
|
*/
|
|
27
|
-
declare function Usage(props: UsageProps):
|
|
27
|
+
declare function Usage(props: UsageProps): _alloy_js_core9.Children;
|
|
28
28
|
//#endregion
|
|
29
29
|
export { Usage, UsageProps };
|
|
30
30
|
//# sourceMappingURL=usage.d.cts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommandTree } from "../types/command.mjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _alloy_js_core0 from "@alloy-js/core";
|
|
3
3
|
|
|
4
4
|
//#region src/components/usage.d.ts
|
|
5
5
|
interface UsageProps {
|
|
@@ -24,7 +24,7 @@ interface UsageProps {
|
|
|
24
24
|
/**
|
|
25
25
|
* A component that generates the usage display for a command.
|
|
26
26
|
*/
|
|
27
|
-
declare function Usage(props: UsageProps):
|
|
27
|
+
declare function Usage(props: UsageProps): _alloy_js_core0.Children;
|
|
28
28
|
//#endregion
|
|
29
29
|
export { Usage, UsageProps };
|
|
30
30
|
//# sourceMappingURL=usage.d.mts.map
|
|
@@ -36,7 +36,7 @@ function getAppName(context) {
|
|
|
36
36
|
* @returns The application title in title-case format.
|
|
37
37
|
*/
|
|
38
38
|
function getAppTitle(context) {
|
|
39
|
-
return (0, __stryke_string_format_title_case.titleCase)(context.config.name || getAppName(context));
|
|
39
|
+
return context.config.title || (0, __stryke_string_format_title_case.titleCase)(context.config.name || getAppName(context));
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
42
|
* Retrieves the application description from the context and configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-helpers.cjs","names":["kebabCase","titleCase","isSetObject","isSetString","sortArgAliases","aliases","length","result","filter","alias","push","sort","a","b","localeCompare","getAppName","context","config","name","bin","Array","isArray","packageJson","Error","getAppTitle","getAppDescription","description","getAppBin","Object","keys","isPositionalCommandOption","path","startsWith","endsWith","getPositionalCommandOptionName","replaceAll"],"sources":["../../src/plugin-utils/context-helpers.ts"],"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 { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport type { Context, UnresolvedContext } from \"../types\";\n\n/**\n * Sorts command argument aliases, placing single-character aliases first, followed by multi-character aliases, and then sorting them alphabetically.\n *\n * @param aliases - An array of argument aliases to sort.\n * @returns A new array of sorted aliases.\n */\nexport function sortArgAliases(aliases: string[]): string[] {\n if (aliases.length === 0) {\n return [];\n }\n\n const result = aliases.filter(alias => alias.length === 1);\n result.push(...aliases.filter(alias => alias.length > 1));\n\n return result.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Retrieves the application name from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application name in kebab-case format.\n * @throws An error if no valid application name is found.\n */\nexport function getAppName(context: UnresolvedContext | Context): string {\n const result =\n context.config.name ||\n (isSetString(context.config.bin) ||\n (Array.isArray(context.config.bin) &&\n context.config.bin.length > 0 &&\n isSetString(context.config.bin[0]))\n ? isSetString(context.config.bin)\n ? context.config.bin\n : context.config.bin[0]\n : context.packageJson?.name);\n if (!isSetString(result)) {\n throw new Error(\n \"No application name found. Please provide a 'bin' option in the configuration or ensure the package.json has a valid 'name' field.\"\n );\n }\n\n return kebabCase(result);\n}\n\n/**\n * Retrieves the application title from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application title in title-case format.\n */\nexport function getAppTitle(context: UnresolvedContext | Context): string {\n return titleCase(context.config.name || getAppName(context));\n}\n\n/**\n * Retrieves the application description from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application description.\n */\nexport function getAppDescription(\n context: UnresolvedContext | Context\n): string {\n return (\n context.config.description ||\n context.packageJson?.description ||\n `The ${getAppTitle(context)} command-line interface application.`\n );\n}\n\n/**\n * Retrieves the primary binary name for the application.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The primary binary name as a string.\n */\nexport function getAppBin(context: Context): string {\n return isSetObject(context.config.bin)\n ? Object.keys(context.config.bin)[0]!\n : kebabCase(getAppName(context));\n}\n\n/**\n * Determines if a given command path segment is variable (enclosed in square brackets).\n *\n * @param path - The command path segment to check.\n * @returns True if the path is variable, false otherwise.\n */\nexport function isPositionalCommandOption(path: string): boolean {\n return path.startsWith(\"[\") && path.endsWith(\"]\");\n}\n\n/**\n * Extracts the variable name from a command path segment by removing enclosing square brackets.\n *\n * @param path - The command path segment.\n * @returns The variable name without square brackets.\n */\nexport function getPositionalCommandOptionName(path: string): string {\n return path.replaceAll(/^\\[+(?:\\.\\.\\.)*/g, \"\").replaceAll(/\\]+$/g, \"\");\n}\n"],"mappings":";;;;;;;;;;;;;AA8BA,SAAgBI,eAAeC,SAA6B;AAC1D,KAAIA,QAAQC,WAAW,EACrB,QAAO,EAAE;CAGX,MAAMC,SAASF,QAAQG,QAAOC,UAASA,MAAMH,WAAW,EAAE;AAC1DC,QAAOG,KAAK,GAAGL,QAAQG,QAAOC,UAASA,MAAMH,SAAS,EAAE,CAAC;AAEzD,QAAOC,OAAOI,MAAMC,GAAGC,MAAMD,EAAEE,cAAcD,EAAE,CAAC;;;;;;;;;AAUlD,SAAgBE,WAAWC,SAA8C;CACvE,MAAMT,SACJS,QAAQC,OAAOC,6DACFF,QAAQC,OAAOE,IAAI,IAC/BC,MAAMC,QAAQL,QAAQC,OAAOE,IAAI,IAChCH,QAAQC,OAAOE,IAAIb,SAAS,yDAChBU,QAAQC,OAAOE,IAAI,GAAI,uDACrBH,QAAQC,OAAOE,IAAI,GAC7BH,QAAQC,OAAOE,MACfH,QAAQC,OAAOE,IAAI,KACrBH,QAAQM,aAAaJ;AAC3B,KAAI,qDAAaX,OAAO,CACtB,OAAM,IAAIgB,MACR,qIACD;AAGH,yDAAiBhB,OAAO;;;;;;;;AAS1B,SAAgBiB,YAAYR,SAA8C;AACxE,
|
|
1
|
+
{"version":3,"file":"context-helpers.cjs","names":["kebabCase","titleCase","isSetObject","isSetString","sortArgAliases","aliases","length","result","filter","alias","push","sort","a","b","localeCompare","getAppName","context","config","name","bin","Array","isArray","packageJson","Error","getAppTitle","title","getAppDescription","description","getAppBin","Object","keys","isPositionalCommandOption","path","startsWith","endsWith","getPositionalCommandOptionName","replaceAll"],"sources":["../../src/plugin-utils/context-helpers.ts"],"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 { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport type { Context, UnresolvedContext } from \"../types\";\n\n/**\n * Sorts command argument aliases, placing single-character aliases first, followed by multi-character aliases, and then sorting them alphabetically.\n *\n * @param aliases - An array of argument aliases to sort.\n * @returns A new array of sorted aliases.\n */\nexport function sortArgAliases(aliases: string[]): string[] {\n if (aliases.length === 0) {\n return [];\n }\n\n const result = aliases.filter(alias => alias.length === 1);\n result.push(...aliases.filter(alias => alias.length > 1));\n\n return result.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Retrieves the application name from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application name in kebab-case format.\n * @throws An error if no valid application name is found.\n */\nexport function getAppName(context: UnresolvedContext | Context): string {\n const result =\n context.config.name ||\n (isSetString(context.config.bin) ||\n (Array.isArray(context.config.bin) &&\n context.config.bin.length > 0 &&\n isSetString(context.config.bin[0]))\n ? isSetString(context.config.bin)\n ? context.config.bin\n : context.config.bin[0]\n : context.packageJson?.name);\n if (!isSetString(result)) {\n throw new Error(\n \"No application name found. Please provide a 'bin' option in the configuration or ensure the package.json has a valid 'name' field.\"\n );\n }\n\n return kebabCase(result);\n}\n\n/**\n * Retrieves the application title from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application title in title-case format.\n */\nexport function getAppTitle(context: UnresolvedContext | Context): string {\n return (\n context.config.title ||\n titleCase(context.config.name || getAppName(context))\n );\n}\n\n/**\n * Retrieves the application description from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application description.\n */\nexport function getAppDescription(\n context: UnresolvedContext | Context\n): string {\n return (\n context.config.description ||\n context.packageJson?.description ||\n `The ${getAppTitle(context)} command-line interface application.`\n );\n}\n\n/**\n * Retrieves the primary binary name for the application.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The primary binary name as a string.\n */\nexport function getAppBin(context: Context): string {\n return isSetObject(context.config.bin)\n ? Object.keys(context.config.bin)[0]!\n : kebabCase(getAppName(context));\n}\n\n/**\n * Determines if a given command path segment is variable (enclosed in square brackets).\n *\n * @param path - The command path segment to check.\n * @returns True if the path is variable, false otherwise.\n */\nexport function isPositionalCommandOption(path: string): boolean {\n return path.startsWith(\"[\") && path.endsWith(\"]\");\n}\n\n/**\n * Extracts the variable name from a command path segment by removing enclosing square brackets.\n *\n * @param path - The command path segment.\n * @returns The variable name without square brackets.\n */\nexport function getPositionalCommandOptionName(path: string): string {\n return path.replaceAll(/^\\[+(?:\\.\\.\\.)*/g, \"\").replaceAll(/\\]+$/g, \"\");\n}\n"],"mappings":";;;;;;;;;;;;;AA8BA,SAAgBI,eAAeC,SAA6B;AAC1D,KAAIA,QAAQC,WAAW,EACrB,QAAO,EAAE;CAGX,MAAMC,SAASF,QAAQG,QAAOC,UAASA,MAAMH,WAAW,EAAE;AAC1DC,QAAOG,KAAK,GAAGL,QAAQG,QAAOC,UAASA,MAAMH,SAAS,EAAE,CAAC;AAEzD,QAAOC,OAAOI,MAAMC,GAAGC,MAAMD,EAAEE,cAAcD,EAAE,CAAC;;;;;;;;;AAUlD,SAAgBE,WAAWC,SAA8C;CACvE,MAAMT,SACJS,QAAQC,OAAOC,6DACFF,QAAQC,OAAOE,IAAI,IAC/BC,MAAMC,QAAQL,QAAQC,OAAOE,IAAI,IAChCH,QAAQC,OAAOE,IAAIb,SAAS,yDAChBU,QAAQC,OAAOE,IAAI,GAAI,uDACrBH,QAAQC,OAAOE,IAAI,GAC7BH,QAAQC,OAAOE,MACfH,QAAQC,OAAOE,IAAI,KACrBH,QAAQM,aAAaJ;AAC3B,KAAI,qDAAaX,OAAO,CACtB,OAAM,IAAIgB,MACR,qIACD;AAGH,yDAAiBhB,OAAO;;;;;;;;AAS1B,SAAgBiB,YAAYR,SAA8C;AACxE,QACEA,QAAQC,OAAOQ,0DACLT,QAAQC,OAAOC,QAAQH,WAAWC,QAAQ,CAAC;;;;;;;;AAUzD,SAAgBU,kBACdV,SACQ;AACR,QACEA,QAAQC,OAAOU,eACfX,QAAQM,aAAaK,eACrB,OAAOH,YAAYR,QAAQ,CAAA;;;;;;;;AAU/B,SAAgBY,UAAUZ,SAA0B;AAClD,4DAAmBA,QAAQC,OAAOE,IAAI,GAClCU,OAAOC,KAAKd,QAAQC,OAAOE,IAAI,CAAC,sDACtBJ,WAAWC,QAAQ,CAAC;;;;;;;;AASpC,SAAgBe,0BAA0BC,MAAuB;AAC/D,QAAOA,KAAKC,WAAW,IAAI,IAAID,KAAKE,SAAS,IAAI;;;;;;;;AASnD,SAAgBC,+BAA+BH,MAAsB;AACnE,QAAOA,KAAKI,WAAW,oBAAoB,GAAG,CAACA,WAAW,SAAS,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-helpers.d.cts","names":[],"sources":["../../src/plugin-utils/context-helpers.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA8BA;AAkBA;AA0BA;
|
|
1
|
+
{"version":3,"file":"context-helpers.d.cts","names":[],"sources":["../../src/plugin-utils/context-helpers.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA8BA;AAkBA;AA0BA;AAagB,iBAzDA,cAAA,CA0DL,OAAA,EAAA,MAAA,EAAoB,CAAA,EAAA,MAAO,EAAA;AAetC;AAYA;AAUA;;;;;iBA7EgB,UAAA,UAAoB,oBAAoB;;;;;;;iBA0BxC,WAAA,UAAqB,oBAAoB;;;;;;;iBAazC,iBAAA,UACL,oBAAoB;;;;;;;iBAef,SAAA,UAAmB;;;;;;;iBAYnB,yBAAA;;;;;;;iBAUA,8BAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-helpers.d.mts","names":[],"sources":["../../src/plugin-utils/context-helpers.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA8BA;AAkBA;AA0BA;
|
|
1
|
+
{"version":3,"file":"context-helpers.d.mts","names":[],"sources":["../../src/plugin-utils/context-helpers.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA8BA;AAkBA;AA0BA;AAagB,iBAzDA,cAAA,CA0DL,OAAA,EAAA,MAAA,EAAoB,CAAA,EAAA,MAAO,EAAA;AAetC;AAYA;AAUA;;;;;iBA7EgB,UAAA,UAAoB,oBAAoB;;;;;;;iBA0BxC,WAAA,UAAqB,oBAAoB;;;;;;;iBAazC,iBAAA,UACL,oBAAoB;;;;;;;iBAef,SAAA,UAAmB;;;;;;;iBAYnB,yBAAA;;;;;;;iBAUA,8BAAA"}
|
|
@@ -35,7 +35,7 @@ function getAppName(context) {
|
|
|
35
35
|
* @returns The application title in title-case format.
|
|
36
36
|
*/
|
|
37
37
|
function getAppTitle(context) {
|
|
38
|
-
return titleCase(context.config.name || getAppName(context));
|
|
38
|
+
return context.config.title || titleCase(context.config.name || getAppName(context));
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
41
|
* Retrieves the application description from the context and configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-helpers.mjs","names":["kebabCase","titleCase","isSetObject","isSetString","sortArgAliases","aliases","length","result","filter","alias","push","sort","a","b","localeCompare","getAppName","context","config","name","bin","Array","isArray","packageJson","Error","getAppTitle","getAppDescription","description","getAppBin","Object","keys","isPositionalCommandOption","path","startsWith","endsWith","getPositionalCommandOptionName","replaceAll"],"sources":["../../src/plugin-utils/context-helpers.ts"],"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 { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport type { Context, UnresolvedContext } from \"../types\";\n\n/**\n * Sorts command argument aliases, placing single-character aliases first, followed by multi-character aliases, and then sorting them alphabetically.\n *\n * @param aliases - An array of argument aliases to sort.\n * @returns A new array of sorted aliases.\n */\nexport function sortArgAliases(aliases: string[]): string[] {\n if (aliases.length === 0) {\n return [];\n }\n\n const result = aliases.filter(alias => alias.length === 1);\n result.push(...aliases.filter(alias => alias.length > 1));\n\n return result.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Retrieves the application name from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application name in kebab-case format.\n * @throws An error if no valid application name is found.\n */\nexport function getAppName(context: UnresolvedContext | Context): string {\n const result =\n context.config.name ||\n (isSetString(context.config.bin) ||\n (Array.isArray(context.config.bin) &&\n context.config.bin.length > 0 &&\n isSetString(context.config.bin[0]))\n ? isSetString(context.config.bin)\n ? context.config.bin\n : context.config.bin[0]\n : context.packageJson?.name);\n if (!isSetString(result)) {\n throw new Error(\n \"No application name found. Please provide a 'bin' option in the configuration or ensure the package.json has a valid 'name' field.\"\n );\n }\n\n return kebabCase(result);\n}\n\n/**\n * Retrieves the application title from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application title in title-case format.\n */\nexport function getAppTitle(context: UnresolvedContext | Context): string {\n return titleCase(context.config.name || getAppName(context));\n}\n\n/**\n * Retrieves the application description from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application description.\n */\nexport function getAppDescription(\n context: UnresolvedContext | Context\n): string {\n return (\n context.config.description ||\n context.packageJson?.description ||\n `The ${getAppTitle(context)} command-line interface application.`\n );\n}\n\n/**\n * Retrieves the primary binary name for the application.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The primary binary name as a string.\n */\nexport function getAppBin(context: Context): string {\n return isSetObject(context.config.bin)\n ? Object.keys(context.config.bin)[0]!\n : kebabCase(getAppName(context));\n}\n\n/**\n * Determines if a given command path segment is variable (enclosed in square brackets).\n *\n * @param path - The command path segment to check.\n * @returns True if the path is variable, false otherwise.\n */\nexport function isPositionalCommandOption(path: string): boolean {\n return path.startsWith(\"[\") && path.endsWith(\"]\");\n}\n\n/**\n * Extracts the variable name from a command path segment by removing enclosing square brackets.\n *\n * @param path - The command path segment.\n * @returns The variable name without square brackets.\n */\nexport function getPositionalCommandOptionName(path: string): string {\n return path.replaceAll(/^\\[+(?:\\.\\.\\.)*/g, \"\").replaceAll(/\\]+$/g, \"\");\n}\n"],"mappings":";;;;;;;;;;;;AA8BA,SAAgBI,eAAeC,SAA6B;AAC1D,KAAIA,QAAQC,WAAW,EACrB,QAAO,EAAE;CAGX,MAAMC,SAASF,QAAQG,QAAOC,UAASA,MAAMH,WAAW,EAAE;AAC1DC,QAAOG,KAAK,GAAGL,QAAQG,QAAOC,UAASA,MAAMH,SAAS,EAAE,CAAC;AAEzD,QAAOC,OAAOI,MAAMC,GAAGC,MAAMD,EAAEE,cAAcD,EAAE,CAAC;;;;;;;;;AAUlD,SAAgBE,WAAWC,SAA8C;CACvE,MAAMT,SACJS,QAAQC,OAAOC,SACdf,YAAYa,QAAQC,OAAOE,IAAI,IAC/BC,MAAMC,QAAQL,QAAQC,OAAOE,IAAI,IAChCH,QAAQC,OAAOE,IAAIb,SAAS,KAC5BH,YAAYa,QAAQC,OAAOE,IAAI,GAAI,GACjChB,YAAYa,QAAQC,OAAOE,IAAI,GAC7BH,QAAQC,OAAOE,MACfH,QAAQC,OAAOE,IAAI,KACrBH,QAAQM,aAAaJ;AAC3B,KAAI,CAACf,YAAYI,OAAO,CACtB,OAAM,IAAIgB,MACR,qIACD;AAGH,QAAOvB,UAAUO,OAAO;;;;;;;;AAS1B,SAAgBiB,YAAYR,SAA8C;AACxE,
|
|
1
|
+
{"version":3,"file":"context-helpers.mjs","names":["kebabCase","titleCase","isSetObject","isSetString","sortArgAliases","aliases","length","result","filter","alias","push","sort","a","b","localeCompare","getAppName","context","config","name","bin","Array","isArray","packageJson","Error","getAppTitle","title","getAppDescription","description","getAppBin","Object","keys","isPositionalCommandOption","path","startsWith","endsWith","getPositionalCommandOptionName","replaceAll"],"sources":["../../src/plugin-utils/context-helpers.ts"],"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 { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport type { Context, UnresolvedContext } from \"../types\";\n\n/**\n * Sorts command argument aliases, placing single-character aliases first, followed by multi-character aliases, and then sorting them alphabetically.\n *\n * @param aliases - An array of argument aliases to sort.\n * @returns A new array of sorted aliases.\n */\nexport function sortArgAliases(aliases: string[]): string[] {\n if (aliases.length === 0) {\n return [];\n }\n\n const result = aliases.filter(alias => alias.length === 1);\n result.push(...aliases.filter(alias => alias.length > 1));\n\n return result.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Retrieves the application name from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application name in kebab-case format.\n * @throws An error if no valid application name is found.\n */\nexport function getAppName(context: UnresolvedContext | Context): string {\n const result =\n context.config.name ||\n (isSetString(context.config.bin) ||\n (Array.isArray(context.config.bin) &&\n context.config.bin.length > 0 &&\n isSetString(context.config.bin[0]))\n ? isSetString(context.config.bin)\n ? context.config.bin\n : context.config.bin[0]\n : context.packageJson?.name);\n if (!isSetString(result)) {\n throw new Error(\n \"No application name found. Please provide a 'bin' option in the configuration or ensure the package.json has a valid 'name' field.\"\n );\n }\n\n return kebabCase(result);\n}\n\n/**\n * Retrieves the application title from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application title in title-case format.\n */\nexport function getAppTitle(context: UnresolvedContext | Context): string {\n return (\n context.config.title ||\n titleCase(context.config.name || getAppName(context))\n );\n}\n\n/**\n * Retrieves the application description from the context and configuration.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The application description.\n */\nexport function getAppDescription(\n context: UnresolvedContext | Context\n): string {\n return (\n context.config.description ||\n context.packageJson?.description ||\n `The ${getAppTitle(context)} command-line interface application.`\n );\n}\n\n/**\n * Retrieves the primary binary name for the application.\n *\n * @param context - The build context containing workspace and package information.\n * @returns The primary binary name as a string.\n */\nexport function getAppBin(context: Context): string {\n return isSetObject(context.config.bin)\n ? Object.keys(context.config.bin)[0]!\n : kebabCase(getAppName(context));\n}\n\n/**\n * Determines if a given command path segment is variable (enclosed in square brackets).\n *\n * @param path - The command path segment to check.\n * @returns True if the path is variable, false otherwise.\n */\nexport function isPositionalCommandOption(path: string): boolean {\n return path.startsWith(\"[\") && path.endsWith(\"]\");\n}\n\n/**\n * Extracts the variable name from a command path segment by removing enclosing square brackets.\n *\n * @param path - The command path segment.\n * @returns The variable name without square brackets.\n */\nexport function getPositionalCommandOptionName(path: string): string {\n return path.replaceAll(/^\\[+(?:\\.\\.\\.)*/g, \"\").replaceAll(/\\]+$/g, \"\");\n}\n"],"mappings":";;;;;;;;;;;;AA8BA,SAAgBI,eAAeC,SAA6B;AAC1D,KAAIA,QAAQC,WAAW,EACrB,QAAO,EAAE;CAGX,MAAMC,SAASF,QAAQG,QAAOC,UAASA,MAAMH,WAAW,EAAE;AAC1DC,QAAOG,KAAK,GAAGL,QAAQG,QAAOC,UAASA,MAAMH,SAAS,EAAE,CAAC;AAEzD,QAAOC,OAAOI,MAAMC,GAAGC,MAAMD,EAAEE,cAAcD,EAAE,CAAC;;;;;;;;;AAUlD,SAAgBE,WAAWC,SAA8C;CACvE,MAAMT,SACJS,QAAQC,OAAOC,SACdf,YAAYa,QAAQC,OAAOE,IAAI,IAC/BC,MAAMC,QAAQL,QAAQC,OAAOE,IAAI,IAChCH,QAAQC,OAAOE,IAAIb,SAAS,KAC5BH,YAAYa,QAAQC,OAAOE,IAAI,GAAI,GACjChB,YAAYa,QAAQC,OAAOE,IAAI,GAC7BH,QAAQC,OAAOE,MACfH,QAAQC,OAAOE,IAAI,KACrBH,QAAQM,aAAaJ;AAC3B,KAAI,CAACf,YAAYI,OAAO,CACtB,OAAM,IAAIgB,MACR,qIACD;AAGH,QAAOvB,UAAUO,OAAO;;;;;;;;AAS1B,SAAgBiB,YAAYR,SAA8C;AACxE,QACEA,QAAQC,OAAOQ,SACfxB,UAAUe,QAAQC,OAAOC,QAAQH,WAAWC,QAAQ,CAAC;;;;;;;;AAUzD,SAAgBU,kBACdV,SACQ;AACR,QACEA,QAAQC,OAAOU,eACfX,QAAQM,aAAaK,eACrB,OAAOH,YAAYR,QAAQ,CAAA;;;;;;;;AAU/B,SAAgBY,UAAUZ,SAA0B;AAClD,QAAOd,YAAYc,QAAQC,OAAOE,IAAI,GAClCU,OAAOC,KAAKd,QAAQC,OAAOE,IAAI,CAAC,KAChCnB,UAAUe,WAAWC,QAAQ,CAAC;;;;;;;;AASpC,SAAgBe,0BAA0BC,MAAuB;AAC/D,QAAOA,KAAKC,WAAW,IAAI,IAAID,KAAKE,SAAS,IAAI;;;;;;;;AASnD,SAAgBC,+BAA+BH,MAAsB;AACnE,QAAOA,KAAKI,WAAW,oBAAoB,GAAG,CAACA,WAAW,SAAS,GAAG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shell-shock/core",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A package containing the core Shell Shock functionality used to build and manage a command-line application.",
|
|
6
6
|
"repository": {
|
|
@@ -357,21 +357,21 @@
|
|
|
357
357
|
"@powerlines/plugin-nodejs": "^0.1.175",
|
|
358
358
|
"@powerlines/plugin-plugin": "^0.12.221",
|
|
359
359
|
"@powerlines/plugin-tsdown": "^0.1.223",
|
|
360
|
-
"@stryke/cli": "
|
|
360
|
+
"@stryke/cli": "0.13.12",
|
|
361
361
|
"@stryke/convert": "^0.6.38",
|
|
362
362
|
"@stryke/fs": "^0.33.40",
|
|
363
363
|
"@stryke/helpers": "^0.9.40",
|
|
364
364
|
"@stryke/json": "^0.9.41",
|
|
365
|
-
"@stryke/path": "
|
|
366
|
-
"@stryke/string-format": "
|
|
365
|
+
"@stryke/path": "0.26.4",
|
|
366
|
+
"@stryke/string-format": "0.13.7",
|
|
367
367
|
"@stryke/type-checks": "^0.5.23",
|
|
368
368
|
"@stryke/types": "^0.10.37",
|
|
369
369
|
"automd": "0.4.2",
|
|
370
|
-
"defu": "
|
|
370
|
+
"defu": "6.1.4",
|
|
371
371
|
"powerlines": "^0.38.37",
|
|
372
372
|
"rolldown": "1.0.0-beta.52"
|
|
373
373
|
},
|
|
374
374
|
"devDependencies": { "@types/node": "^22.19.9", "typescript": "^5.9.3" },
|
|
375
375
|
"publishConfig": { "access": "public" },
|
|
376
|
-
"gitHead": "
|
|
376
|
+
"gitHead": "b2c853aae1d2d29bd12900d7850f8742382816ed"
|
|
377
377
|
}
|