@shell-shock/core 0.15.2 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/api.cjs +10 -7
  2. package/dist/api.cjs.map +1 -1
  3. package/dist/api.d.cts +1 -1
  4. package/dist/api.d.cts.map +1 -1
  5. package/dist/api.d.mts +1 -1
  6. package/dist/api.d.mts.map +1 -1
  7. package/dist/api.mjs +11 -8
  8. package/dist/api.mjs.map +1 -1
  9. package/dist/components/helpers.cjs +1 -1
  10. package/dist/components/helpers.cjs.map +1 -1
  11. package/dist/components/helpers.mjs +1 -1
  12. package/dist/components/helpers.mjs.map +1 -1
  13. package/dist/components/index.cjs +8 -4
  14. package/dist/components/index.d.cts +4 -2
  15. package/dist/components/index.d.mts +4 -2
  16. package/dist/components/index.mjs +4 -2
  17. package/dist/components/options-parser-logic.cjs +68 -48
  18. package/dist/components/options-parser-logic.cjs.map +1 -1
  19. package/dist/components/options-parser-logic.d.cts.map +1 -1
  20. package/dist/components/options-parser-logic.d.mts.map +1 -1
  21. package/dist/components/options-parser-logic.mjs +68 -48
  22. package/dist/components/options-parser-logic.mjs.map +1 -1
  23. package/dist/components/spawn-builtin.cjs +656 -0
  24. package/dist/components/spawn-builtin.cjs.map +1 -0
  25. package/dist/components/spawn-builtin.d.cts +12 -0
  26. package/dist/components/spawn-builtin.d.cts.map +1 -0
  27. package/dist/components/spawn-builtin.d.mts +12 -0
  28. package/dist/components/spawn-builtin.d.mts.map +1 -0
  29. package/dist/components/spawn-builtin.mjs +653 -0
  30. package/dist/components/spawn-builtin.mjs.map +1 -0
  31. package/dist/components/state-builtin.cjs +545 -0
  32. package/dist/components/state-builtin.cjs.map +1 -0
  33. package/dist/components/state-builtin.d.cts +18 -0
  34. package/dist/components/state-builtin.d.cts.map +1 -0
  35. package/dist/components/state-builtin.d.mts +18 -0
  36. package/dist/components/state-builtin.d.mts.map +1 -0
  37. package/dist/components/state-builtin.mjs +539 -0
  38. package/dist/components/state-builtin.mjs.map +1 -0
  39. package/dist/components/utils-builtin.cjs +3 -499
  40. package/dist/components/utils-builtin.cjs.map +1 -1
  41. package/dist/components/utils-builtin.d.cts +1 -10
  42. package/dist/components/utils-builtin.d.cts.map +1 -1
  43. package/dist/components/utils-builtin.d.mts +1 -10
  44. package/dist/components/utils-builtin.d.mts.map +1 -1
  45. package/dist/components/utils-builtin.mjs +5 -498
  46. package/dist/components/utils-builtin.mjs.map +1 -1
  47. package/dist/config.cjs.map +1 -1
  48. package/dist/config.mjs.map +1 -1
  49. package/dist/contexts/options.cjs +9 -9
  50. package/dist/contexts/options.cjs.map +1 -1
  51. package/dist/contexts/options.d.cts +2 -2
  52. package/dist/contexts/options.d.cts.map +1 -1
  53. package/dist/contexts/options.d.mts +2 -2
  54. package/dist/contexts/options.d.mts.map +1 -1
  55. package/dist/contexts/options.mjs +9 -9
  56. package/dist/contexts/options.mjs.map +1 -1
  57. package/dist/index.cjs +2 -10
  58. package/dist/index.d.cts +1 -2
  59. package/dist/index.d.mts +1 -2
  60. package/dist/index.mjs +1 -7
  61. package/dist/plugin.cjs +11 -26
  62. package/dist/plugin.cjs.map +1 -1
  63. package/dist/plugin.d.cts +1 -1
  64. package/dist/plugin.d.cts.map +1 -1
  65. package/dist/plugin.d.mts +1 -1
  66. package/dist/plugin.d.mts.map +1 -1
  67. package/dist/plugin.mjs +10 -24
  68. package/dist/plugin.mjs.map +1 -1
  69. package/dist/types/config.cjs +3 -1
  70. package/dist/types/config.cjs.map +1 -1
  71. package/dist/types/config.d.cts +1 -1
  72. package/dist/types/config.d.cts.map +1 -1
  73. package/dist/types/config.d.mts +1 -1
  74. package/dist/types/config.d.mts.map +1 -1
  75. package/dist/types/config.mjs +3 -1
  76. package/dist/types/config.mjs.map +1 -1
  77. package/dist/types/env.cjs +2 -1
  78. package/dist/types/env.cjs.map +1 -1
  79. package/dist/types/env.d.cts +15 -0
  80. package/dist/types/env.d.cts.map +1 -1
  81. package/dist/types/env.d.mts +15 -0
  82. package/dist/types/env.d.mts.map +1 -1
  83. package/dist/types/env.mjs +2 -1
  84. package/dist/types/env.mjs.map +1 -1
  85. package/dist/types/index.cjs +0 -2
  86. package/dist/types/index.d.cts +1 -2
  87. package/dist/types/index.d.mts +1 -2
  88. package/dist/types/index.mjs +1 -2
  89. package/package.json +49 -35
  90. package/dist/index.cjs.map +0 -1
  91. package/dist/index.mjs.map +0 -1
  92. package/dist/types/runtime.cjs +0 -13
  93. package/dist/types/runtime.cjs.map +0 -1
  94. package/dist/types/runtime.d.cts +0 -14
  95. package/dist/types/runtime.d.cts.map +0 -1
  96. package/dist/types/runtime.d.mts +0 -14
  97. package/dist/types/runtime.d.mts.map +0 -1
  98. package/dist/types/runtime.mjs +0 -11
  99. package/dist/types/runtime.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"options-parser-logic.cjs","names":[],"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 { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { computedOptions } from \"../contexts/options\";\nimport {\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n NumberCommandParameter,\n StringCommandParameter\n} from \"../types/command\";\nimport { CommandParameterKinds } from \"../types/command\";\nimport { BooleanInputParserLogic, CommandParameterType } from \"./helpers\";\n\nexport interface DynamicSegmentsParserLogicProps {\n /**\n * The command to generate the dynamic path segments parser logic for. This is used to access the command options and parameters when generating the parser logic for dynamic path segments.\n */\n command: CommandTree;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n isCaseSensitive: boolean;\n}\n\nexport function DynamicSegmentsParserLogic(\n props: DynamicSegmentsParserLogicProps\n) {\n const { command } = props;\n\n return (\n <For each={command.segments ?? []}>\n {(segment, index) => (\n <Show when={isDynamicPathSegment(segment)}>\n <VarDeclaration\n let\n name={camelCase(getDynamicPathSegmentName(segment))}\n type=\"string | undefined\"\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(\n getDynamicPathSegmentName(segment)\n )} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\nexport interface ArgumentsParserLogicProps {\n /**\n * The command to generate the positional parameters parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${appSpecificEnvPrefix}_OPTION_NAME`).\n */\n appSpecificEnvPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n isCaseSensitive: boolean;\n}\n\nexport function ArgumentsParserLogic(props: ArgumentsParserLogicProps) {\n const { command, appSpecificEnvPrefix, isCaseSensitive } = props;\n\n return (\n <Show when={command.args && command.args.length > 0}>\n <VarDeclaration\n let\n name=\"optionsIndex\"\n type=\"number\"\n initializer={code`Math.max(0, args.slice(${\n command.segments.length + 1\n }).findIndex(arg => arg.startsWith(\"-\") && /^(${Object.values(\n command.options ?? {}\n )\n .map(\n option =>\n `${\n isCaseSensitive || option.name.length === 1\n ? option.name\n : option.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || option.name.length === 1\n ? a\n : a\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || option.name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")}`\n )\n .join(\"|\")})=?.*$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }))) + ${command.segments.length + 1};`}\n />\n <Spacing />\n <VarDeclaration\n let\n name=\"argsIndex\"\n type=\"number\"\n initializer={code`optionsIndex > ${\n command.segments.length + 1\n } ? ${command.segments.length + 1} : (Math.max(0, args.slice(optionsIndex).findLastIndex(arg => arg.startsWith(\"-\") && /^(${Object.values(\n command.options ?? {}\n )\n .map(\n option =>\n `${\n isCaseSensitive || option.name.length === 1\n ? option.name\n : option.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || option.name.length === 1\n ? a\n : a\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || option.name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")}`\n )\n .join(\"|\")})=?.*$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }))) + ${command.segments.length + 1});`}\n />\n <Spacing />\n <For each={command.args ?? []} hardline>\n {(arg, index) => (\n <>\n <Show\n when={\n isSetString(arg.env) ||\n arg.default !== undefined ||\n ((arg.kind === CommandParameterKinds.string ||\n arg.kind === CommandParameterKinds.number) &&\n arg.variadic)\n }\n fallback={\n <>\n {code`let ${camelCase(arg.name)}!: `}\n <CommandParameterType parameter={arg} />\n {code`; `}\n </>\n }>\n <VarDeclaration\n let\n name={camelCase(arg.name)}\n type={<CommandParameterType parameter={arg} />}\n initializer={\n <>\n <Show when={isSetString(arg.env)}>\n {code`env.${appSpecificEnvPrefix}_${constantCase(String(arg.env))} ?? `}\n </Show>\n <Show\n when={arg.default !== undefined}\n fallback={\n (arg.kind === CommandParameterKinds.string ||\n arg.kind === CommandParameterKinds.number) &&\n arg.variadic\n ? code`[]`\n : code`undefined;`\n }>\n {arg.kind === CommandParameterKinds.string\n ? code`\"${arg.default}\"`\n : code`${arg.default}`}\n </Show>\n </>\n }\n />\n </Show>\n <Spacing />\n <IfStatement\n condition={code`argsIndex + ${index} < args.length && argsIndex + ${index} !== optionsIndex`}>\n {code`${camelCase(arg.name)} = `}\n <Show\n when={\n arg.kind === CommandParameterKinds.string ||\n arg.kind === CommandParameterKinds.number\n }\n fallback={\n <BooleanInputParserLogic\n name={`args[argsIndex + ${index}] `}\n />\n }>\n <Show\n when={\n (arg.kind === CommandParameterKinds.string ||\n arg.kind === CommandParameterKinds.number) &&\n arg.variadic\n }\n fallback={\n <Show\n when={arg.kind === CommandParameterKinds.number}\n fallback={code`args[argsIndex + ${index}]; `}>\n {code`Number(args[argsIndex + ${index}]); `}\n </Show>\n }>\n {code`args.slice(argsIndex + ${\n index\n }, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${\n command.args.length - index\n }).join(\" \").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean)`}\n </Show>\n </Show>\n </IfStatement>\n <Spacing />\n </>\n )}\n </For>\n </Show>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({ option }: { option: CommandOption }) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={Boolean(option.name)}>\n <Show when={option.kind === CommandParameterKinds.string}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={<CommandParameterType parameter={option} />}\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={<CommandParameterType parameter={option} />}\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === CommandParameterKinds.boolean}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={<CommandParameterType parameter={option} />}\n optional={option.optional}\n />\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserLogicProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * The command option to generate the parser logic for.\n */\n option: CommandOption;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps) {\n const { name, option, isCaseSensitive } = props;\n\n const equalsRegex = `/^--?(${\n isCaseSensitive || name.length === 1\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number\n }>\n <Show\n when={\n (option as StringCommandParameter | NumberCommandParameter).variadic\n }>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement\n condition={`${equalsRegex}.test(${\n isCaseSensitive\n ? \"arg\"\n : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n })`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === CommandParameterKinds.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.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 <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.choices &&\n option.choices.length > 0\n }>\n {code` as ${(\n option as StringCommandParameter | NumberCommandParameter\n ).choices\n ?.map(choice => (isSetString(choice) ? `\"${choice}\"` : choice))\n .join(\" | \")} `}\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 === CommandParameterKinds.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.choices &&\n option.choices.length > 0\n }>\n {code` as ${(\n option as StringCommandParameter | NumberCommandParameter\n ).choices\n ?.map(choice => (isSetString(choice) ? `\"${choice}\"` : choice))\n .join(\" | \")} `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandParameter | NumberCommandParameter)\n .variadic\n }>\n <IfStatement\n condition={`${equalsRegex}.test(${isCaseSensitive ? \"arg\" : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'})`}>\n <Show when={option.kind === CommandParameterKinds.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 when={\n (option as StringCommandParameter).choices &&\n (option as StringCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as StringCommandParameter).choices\n ?.map(choice => `\"${choice}\"`)\n .join(\" | \")}`}\n </Show>\n {code`; `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.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 <Show\n when={\n (option as NumberCommandParameter).choices &&\n (option as NumberCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as NumberCommandParameter).choices?.join(\" | \")}`}\n </Show>\n {code`; `}\n </IfStatement>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === CommandParameterKinds.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 when={\n (option as StringCommandParameter).choices &&\n (option as StringCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as StringCommandParameter).choices?.map(choice => `\"${choice}\"`).join(\" | \")}`}\n </Show>\n {code`; `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.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 <Show\n when={\n (option as NumberCommandParameter).choices &&\n (option as NumberCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as NumberCommandParameter).choices?.join(\" | \")}`}\n </Show>\n {code`; `}\n </IfStatement>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === CommandParameterKinds.boolean}>\n <IfStatement\n condition={`${equalsRegex}.test(${isCaseSensitive ? \"arg\" : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'})`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = `}>\n {code`options[\"${name}\"] = `}\n </Show>\n <BooleanInputParserLogic name=\"value\" />\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserConditionProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n alias?: string[];\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\nexport function OptionsMemberParserCondition(\n props: OptionsMemberParserConditionProps\n) {\n const { name, alias: aliasProp, isCaseSensitive } = props;\n\n return (\n <>\n {code`${\n isCaseSensitive\n ? 'arg.startsWith(\"--'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive ? name : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\" || ${\n isCaseSensitive\n ? 'arg.startsWith(\"-'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive ? name : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\"`}\n <Show when={aliasProp && aliasProp.length > 0}>\n <For each={aliasProp ?? []}>\n {alias =>\n code` || ${\n isCaseSensitive || alias.length === 1\n ? 'arg.startsWith(\"--'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive || alias.length === 1\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive || alias.length === 1\n ? alias\n : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\" || ${\n isCaseSensitive || alias.length === 1\n ? 'arg.startsWith(\"-'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive || alias.length === 1\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive || alias.length === 1\n ? alias\n : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\"`\n }\n </For>\n </Show>\n </>\n );\n}\n\nexport function OptionsInterfaceDeclaration(props: { command: CommandTree }) {\n const { command } = props;\n\n const options = computed(() => computedOptions(command));\n\n return (\n <InterfaceDeclaration export name={`${pascalCase(command.name)}Options`}>\n <For each={Object.values(options.value)} hardline>\n {option => <OptionsMember option={option} />}\n </For>\n </InterfaceDeclaration>\n );\n}\n\nexport interface OptionsParserLogicProps {\n /**\n * The command to generate the options parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${appSpecificEnvPrefix}_OPTION_NAME`).\n */\n appSpecificEnvPrefix: 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, appSpecificEnvPrefix, 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 .filter(\n ([, option]) =>\n option.env ||\n option.default !== undefined ||\n ((option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.variadic)\n )\n .map(([name, option]) => {\n if (option.kind === CommandParameterKinds.string) {\n return ` ${\n name.includes(\"?\") || name.includes(\"-\")\n ? `\"${name}\"`\n : `${name}`\n }: ${\n option.env ? `env.${appSpecificEnvPrefix}_${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 === CommandParameterKinds.number) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${appSpecificEnvPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default && Array.isArray(option.default)\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 === CommandParameterKinds.boolean) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env\n ? `env.${appSpecificEnvPrefix}_${option.env} ?? `\n : \"\"\n }${option.default ? \"true\" : \"false\"},`;\n }\n\n return \"\";\n })\n .join(\"\")}\n } as ${pascalCase(command.name)}Options;`}\n />\n <Spacing />\n {code`for (let i = 0; i < args.slice(${\n command.segments.filter(segment => isDynamicPathSegment(segment)).length\n }).length; i++) { `}\n <hbr />\n <VarDeclaration\n const\n name=\"arg\"\n type=\"string\"\n initializer={code` args[i].length > 3 && args[i].startsWith(\"--\")\n ? \\`--\\${args[i].slice(2).replaceAll(\"-\", \"\")${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }}\\`\n : args[i].length > 2 && args[i].startsWith(\"-\")\n ? \\`-\\${args[i].slice(1).replaceAll(\"-\", \"\")}\\`\n : args[i]; `}\n />\n <hbr />\n\n <For each={Object.entries(options.value)} hardline>\n {([name, option], i) => (\n <Show\n when={i === 0}\n fallback={\n <ElseIfClause\n condition={\n <>\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n </>\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </ElseIfClause>\n }>\n <IfStatement\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </IfStatement>\n </Show>\n )}\n </For>\n\n <hbr />\n {code` } `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandParserLogicProps {\n /**\n * The command to generate the parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${appSpecificEnvPrefix}_OPTION_NAME`).\n */\n appSpecificEnvPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive?: boolean;\n}\n\n/**\n * The command parser logic, which includes parsing dynamic path segments, positional parameters, and options.\n */\nexport function CommandParserLogic(props: CommandParserLogicProps) {\n const { command, appSpecificEnvPrefix, isCaseSensitive = false } = props;\n\n return (\n <>\n <DynamicSegmentsParserLogic\n command={command}\n isCaseSensitive={isCaseSensitive}\n />\n <Spacing />\n <OptionsParserLogic\n command={command}\n appSpecificEnvPrefix={appSpecificEnvPrefix}\n isCaseSensitive={isCaseSensitive}\n />\n <Spacing />\n <ArgumentsParserLogic\n command={command}\n appSpecificEnvPrefix={appSpecificEnvPrefix}\n isCaseSensitive={isCaseSensitive}\n />\n <Spacing />\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"options-parser-logic.cjs","names":[],"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 { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { computedOptions } from \"../contexts/options\";\nimport {\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"../plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandTree,\n NumberCommandParameter,\n StringCommandParameter\n} from \"../types/command\";\nimport { CommandParameterKinds } from \"../types/command\";\nimport { BooleanInputParserLogic, CommandParameterType } from \"./helpers\";\n\nexport interface DynamicSegmentsParserLogicProps {\n /**\n * The command to generate the dynamic path segments parser logic for. This is used to access the command options and parameters when generating the parser logic for dynamic path segments.\n */\n command: CommandTree;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n isCaseSensitive: boolean;\n}\n\nexport function DynamicSegmentsParserLogic(\n props: DynamicSegmentsParserLogicProps\n) {\n const { command } = props;\n\n return (\n <For each={command.segments ?? []}>\n {(segment, index) => (\n <Show when={isDynamicPathSegment(segment)}>\n <VarDeclaration\n let\n name={camelCase(getDynamicPathSegmentName(segment))}\n type=\"string | undefined\"\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(\n getDynamicPathSegmentName(segment)\n )} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\nexport interface ArgumentsParserLogicProps {\n /**\n * The command to generate the positional parameters parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${appSpecificEnvPrefix}_OPTION_NAME`).\n */\n appSpecificEnvPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n isCaseSensitive: boolean;\n}\n\nexport function ArgumentsParserLogic(props: ArgumentsParserLogicProps) {\n const { command, appSpecificEnvPrefix, isCaseSensitive } = props;\n\n return (\n <Show when={command.args && command.args.length > 0}>\n <VarDeclaration\n let\n name=\"optionsIndex\"\n type=\"number\"\n initializer={code`Math.max(0, args.slice(${\n command.segments.length + 1\n }).findIndex(arg => arg.startsWith(\"-\") && /^(${Object.values(\n command.options ?? {}\n )\n .map(\n option =>\n `${\n isCaseSensitive || option.name.length === 1\n ? option.name\n : option.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || option.name.length === 1\n ? a\n : a\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || option.name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")}`\n )\n .join(\"|\")})=?.*$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }))) + ${command.segments.length + 1};`}\n />\n <Spacing />\n <VarDeclaration\n let\n name=\"argsIndex\"\n type=\"number\"\n initializer={code`optionsIndex > ${\n command.segments.length + 1\n } ? ${command.segments.length + 1} : (Math.max(0, args.slice(optionsIndex).findLastIndex(arg => arg.startsWith(\"-\") && /^(${Object.values(\n command.options ?? {}\n )\n .map(\n option =>\n `${\n isCaseSensitive || option.name.length === 1\n ? option.name\n : option.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || option.name.length === 1\n ? a\n : a\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || option.name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")}`\n )\n .join(\"|\")})=?.*$/.test(arg${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }))) + ${command.segments.length + 1});`}\n />\n <Spacing />\n <For each={command.args ?? []} hardline>\n {(arg, index) => (\n <>\n <Show\n when={\n isSetString(arg.env) ||\n arg.default !== undefined ||\n ((arg.kind === CommandParameterKinds.string ||\n arg.kind === CommandParameterKinds.number) &&\n arg.variadic)\n }\n fallback={\n <>\n {code`let ${camelCase(arg.name)}!: `}\n <CommandParameterType parameter={arg} />\n {code`; `}\n </>\n }>\n <VarDeclaration\n let\n name={camelCase(arg.name)}\n type={<CommandParameterType parameter={arg} />}\n initializer={\n <>\n {code` ( `}\n <Show when={isSetString(arg.env)}>\n {code`env.${appSpecificEnvPrefix}_${constantCase(String(arg.env))} ?? `}\n </Show>\n <Show\n when={arg.default !== undefined}\n fallback={arg.variadic ? code`[]` : code`undefined`}>\n {arg.kind === CommandParameterKinds.string\n ? code`\"${arg.default}\"`\n : code`${arg.default}`}\n </Show>\n {code`) as `}\n <CommandParameterType parameter={arg} />\n {code`; `}\n </>\n }\n />\n </Show>\n <Spacing />\n <IfStatement\n condition={code`argsIndex + ${index} < args.length && argsIndex + ${index} !== optionsIndex`}>\n {code`${camelCase(arg.name)} = `}\n <Show\n when={\n arg.kind === CommandParameterKinds.string ||\n arg.kind === CommandParameterKinds.number\n }\n fallback={\n <BooleanInputParserLogic\n name={`args[argsIndex + ${index}] `}\n />\n }>\n <Show\n when={arg.variadic}\n fallback={\n <Show\n when={arg.kind === CommandParameterKinds.number}\n fallback={code`args[argsIndex + ${index}] `}>\n {code`Number(args[argsIndex + ${index}]) `}\n </Show>\n }>\n {code`args.slice(argsIndex + ${\n index\n }, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${\n command.args.length - index\n }).join(\" \").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean)`}\n </Show>\n </Show>\n {code` as `}\n <CommandParameterType parameter={arg} />\n {code`; `}\n </IfStatement>\n <Spacing />\n </>\n )}\n </For>\n </Show>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({ option }: { option: CommandOption }) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={Boolean(option.name)}>\n <Show when={option.kind === CommandParameterKinds.string}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={<CommandParameterType parameter={option} />}\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={<CommandParameterType parameter={option} />}\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === CommandParameterKinds.boolean}>\n <InterfaceMember\n name={option.name}\n doc={doc}\n type={<CommandParameterType parameter={option} />}\n optional={option.optional}\n />\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserLogicProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * The command option to generate the parser logic for.\n */\n option: CommandOption;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic(props: OptionsMemberParserLogicProps) {\n const { name, option, isCaseSensitive } = props;\n\n const equalsRegex = `/^--?(${\n isCaseSensitive || name.length === 1\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (isCaseSensitive || name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")) === \"?\"\n ? \"\\\\?\"\n : isCaseSensitive || name.length === 1\n ? a\n : a.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number\n }>\n <Show\n when={\n (option as StringCommandParameter | NumberCommandParameter).variadic\n }>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement\n condition={`${equalsRegex}.test(${\n isCaseSensitive\n ? \"arg\"\n : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n })`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === CommandParameterKinds.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.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 <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.choices &&\n option.choices.length > 0\n }>\n {code` as ${(\n option as StringCommandParameter | NumberCommandParameter\n ).choices\n ?.map(choice => (isSetString(choice) ? `\"${choice}\"` : choice))\n .join(\" | \")} `}\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 === CommandParameterKinds.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.choices &&\n option.choices.length > 0\n }>\n {code` as ${(\n option as StringCommandParameter | NumberCommandParameter\n ).choices\n ?.map(choice => (isSetString(choice) ? `\"${choice}\"` : choice))\n .join(\" | \")} `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandParameter | NumberCommandParameter)\n .variadic\n }>\n <IfStatement\n condition={`${equalsRegex}.test(${isCaseSensitive ? \"arg\" : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'})`}>\n <Show when={option.kind === CommandParameterKinds.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 when={\n (option as StringCommandParameter).choices &&\n (option as StringCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as StringCommandParameter).choices\n ?.map(choice => `\"${choice}\"`)\n .join(\" | \")}`}\n </Show>\n {code`; `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.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 <Show\n when={\n (option as NumberCommandParameter).choices &&\n (option as NumberCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as NumberCommandParameter).choices?.join(\" | \")}`}\n </Show>\n {code`; `}\n </IfStatement>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === CommandParameterKinds.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 when={\n (option as StringCommandParameter).choices &&\n (option as StringCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as StringCommandParameter).choices?.map(choice => `\"${choice}\"`).join(\" | \")}`}\n </Show>\n {code`; `}\n </Show>\n <Show when={option.kind === CommandParameterKinds.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 <Show\n when={\n (option as NumberCommandParameter).choices &&\n (option as NumberCommandParameter).choices!.length > 0\n }>\n {code` as ${(option as NumberCommandParameter).choices?.join(\" | \")}`}\n </Show>\n {code`; `}\n </IfStatement>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === CommandParameterKinds.boolean}>\n <IfStatement\n condition={`${equalsRegex}.test(${isCaseSensitive ? \"arg\" : '\"-\" + arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'})`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = `}>\n {code`options[\"${name}\"] = `}\n </Show>\n <BooleanInputParserLogic name=\"value\" />\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n </>\n );\n}\n\nexport interface OptionsMemberParserConditionProps {\n /**\n * The option name to generate the parser logic for.\n */\n name: string;\n\n /**\n * Aliases for the option, which will also be parsed in the generated code. This will affect how the generated code compares command-line arguments to option names and aliases.\n */\n alias?: string[];\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive: boolean;\n}\n\nexport function OptionsMemberParserCondition(\n props: OptionsMemberParserConditionProps\n) {\n const { name, alias: aliasProp, isCaseSensitive } = props;\n\n return (\n <>\n {code`${\n isCaseSensitive\n ? 'arg.startsWith(\"--'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive ? name : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\" || ${\n isCaseSensitive\n ? 'arg.startsWith(\"-'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive ? name : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive\n ? name\n : name.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\"`}\n <Show when={aliasProp && aliasProp.length > 0}>\n <For each={aliasProp ?? []}>\n {alias =>\n code` || ${\n isCaseSensitive || alias.length === 1\n ? 'arg.startsWith(\"--'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive || alias.length === 1\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive || alias.length === 1\n ? alias\n : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\" || ${\n isCaseSensitive || alias.length === 1\n ? 'arg.startsWith(\"-'\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\").startsWith(\"'\n }${isCaseSensitive || alias.length === 1 ? alias : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")}=\") || ${\n isCaseSensitive || alias.length === 1\n ? \"arg\"\n : 'arg.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n isCaseSensitive || alias.length === 1\n ? alias\n : alias.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")\n }\"`\n }\n </For>\n </Show>\n </>\n );\n}\n\nexport function OptionsInterfaceDeclaration(props: { command: CommandTree }) {\n const { command } = props;\n\n const options = computed(() =>\n computedOptions(\n Object.entries(command.options).map(([name, option]) => ({\n ...option,\n name\n }))\n )\n );\n\n return (\n <InterfaceDeclaration\n export\n name={`${pascalCase(command.name)}Options`}\n extends=\"GlobalOptions\">\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.${appSpecificEnvPrefix}_OPTION_NAME`).\n */\n appSpecificEnvPrefix: 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, appSpecificEnvPrefix, isCaseSensitive = false } = props;\n\n const options = computed(() =>\n computedOptions(\n Object.entries(command.options).map(([name, option]) => ({\n ...option,\n name\n }))\n )\n );\n\n return (\n <>\n <VarDeclaration\n const\n name=\"options\"\n initializer={code` {\n ${Object.entries(options.value)\n .filter(\n ([, option]) =>\n option.env ||\n option.default !== undefined ||\n ((option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.variadic)\n )\n .map(([name, option]) => {\n if (option.kind === CommandParameterKinds.string) {\n return ` ${\n name.includes(\"?\") || name.includes(\"-\")\n ? `\"${name}\"`\n : `${name}`\n }: ${\n option.env ? `env.${appSpecificEnvPrefix}_${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 === CommandParameterKinds.number) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env ? `env.${appSpecificEnvPrefix}_${option.env}` : \"\"\n }${\n option.variadic\n ? option.default && Array.isArray(option.default)\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 === CommandParameterKinds.boolean) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env\n ? `env.${appSpecificEnvPrefix}_${option.env} ?? `\n : \"\"\n }${option.default ? \"true\" : \"false\"},`;\n }\n\n return \"\";\n })\n .join(\"\")}\n } as unknown as ${pascalCase(command.name)}Options;`}\n />\n <Spacing />\n {code`for (let i = 0; i < args.slice(${\n command.segments.filter(segment => isDynamicPathSegment(segment)).length\n }).length; i++) { `}\n <hbr />\n <VarDeclaration\n const\n name=\"arg\"\n type=\"string\"\n initializer={code` args[i].length > 3 && args[i].startsWith(\"--\")\n ? \\`--\\${args[i].slice(2).replaceAll(\"-\", \"\")${\n isCaseSensitive\n ? \"\"\n : '.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n }}\\`\n : args[i].length > 2 && args[i].startsWith(\"-\")\n ? \\`-\\${args[i].slice(1).replaceAll(\"-\", \"\")}\\`\n : args[i]; `}\n />\n <hbr />\n\n <For each={Object.entries(options.value)} hardline>\n {([name, option], i) => (\n <Show\n when={i === 0}\n fallback={\n <ElseIfClause\n condition={\n <>\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n </>\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </ElseIfClause>\n }>\n <IfStatement\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n isCaseSensitive={isCaseSensitive}\n />\n }>\n <OptionsMemberParserLogic\n name={name}\n option={option}\n isCaseSensitive={isCaseSensitive}\n />\n </IfStatement>\n </Show>\n )}\n </For>\n\n <hbr />\n {code` } `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandParserLogicProps {\n /**\n * The command to generate the parser logic for.\n */\n command: CommandTree;\n\n /**\n * The environment variable prefix to use for options that have an associated environment variable. This prefix will be used in the generated code to access the environment variables (e.g., `env.${appSpecificEnvPrefix}_OPTION_NAME`).\n */\n appSpecificEnvPrefix: string;\n\n /**\n * Whether the command options should be parsed in a case-sensitive manner. This will affect how the generated code compares command-line arguments to option names and aliases.\n *\n * @defaultValue false\n */\n isCaseSensitive?: boolean;\n}\n\n/**\n * The command parser logic, which includes parsing dynamic path segments, positional parameters, and options.\n */\nexport function CommandParserLogic(props: CommandParserLogicProps) {\n const { command, appSpecificEnvPrefix, isCaseSensitive = false } = props;\n\n return (\n <>\n <DynamicSegmentsParserLogic\n command={command}\n isCaseSensitive={isCaseSensitive}\n />\n <Spacing />\n <OptionsParserLogic\n command={command}\n appSpecificEnvPrefix={appSpecificEnvPrefix}\n isCaseSensitive={isCaseSensitive}\n />\n <Spacing />\n <ArgumentsParserLogic\n command={command}\n appSpecificEnvPrefix={appSpecificEnvPrefix}\n isCaseSensitive={isCaseSensitive}\n />\n <Spacing />\n </>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"options-parser-logic.d.cts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"mappings":";;;;UA+CiB,+BAAA;;;AAAjB;EAIE,OAAA,EAAS,WAAA;;;;EAKT,eAAA;AAAA;AAAA,iBAGc,0BAAA,CACd,KAAA,EAAO,+BAAA,GAA+B,iBAAA,CAAA,QAAA;AAAA,UA4BvB,yBAAA;EA7BD;;;EAiCd,OAAA,EAAS,WAAA;EAhCF;;;EAqCP,oBAAA;EArCsC;AA4BxC;;EAcE,eAAA;AAAA;AAAA,iBAGc,oBAAA,CAAqB,KAAA,EAAO,yBAAA,GAAyB,iBAAA,CAAA,QAAA;;;;iBA+KrD,aAAA,CAAA;EAAgB;AAAA;EAAY,MAAA,EAAQ,aAAA;AAAA,IAAa,iBAAA,CAAE,QAAA;AAAA,UAmClD,6BAAA;;;;EAIf,IAAA;EAtNmE;;;EA2NnE,MAAA,EAAQ,aAAA;EA5CmB;;;;;EAmD3B,eAAA;AAAA;;;;iBAMc,wBAAA,CAAyB,KAAA,EAAO,6BAAA,GAA6B,iBAAA,CAAA,QAAA;AAAA,UAsO5D,iCAAA;EA/RgD;;AAmCjE;EAgQE,IAAA;;;;EAKA,KAAA;EA5PQ;;;;AAaV;EAsPE,eAAA;AAAA;AAAA,iBAGc,4BAAA,CACd,KAAA,EAAO,iCAAA,GAAiC,iBAAA,CAAA,QAAA;AAAA,iBAkE1B,2BAAA,CAA4B,KAAA;EAAS,OAAA,EAAS,WAAA;AAAA,IAAW,iBAAA,CAAE,QAAA;AAAA,UAc1D,uBAAA;EA1U4D;AAsO7E;;EAwGE,OAAA,EAAS,WAAA;EAxGuC;;;EA6GhD,oBAAA;EA7Fe;;AAGjB;;;EAiGE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA;AAAA,UA0IhD,uBAAA;EA9K0B;;;EAkLzC,OAAA,EAAS,WAAA;EAlLmD;;;EAuL5D,oBAAA;EAvLyE;AAc3E;;;;EAgLE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA"}
1
+ {"version":3,"file":"options-parser-logic.d.cts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"mappings":";;;;UA+CiB,+BAAA;;;AAAjB;EAIE,OAAA,EAAS,WAAA;;;;EAKT,eAAA;AAAA;AAAA,iBAGc,0BAAA,CACd,KAAA,EAAO,+BAAA,GAA+B,iBAAA,CAAA,QAAA;AAAA,UA4BvB,yBAAA;EA7BD;;;EAiCd,OAAA,EAAS,WAAA;EAhCF;;;EAqCP,oBAAA;EArCsC;AA4BxC;;EAcE,eAAA;AAAA;AAAA,iBAGc,oBAAA,CAAqB,KAAA,EAAO,yBAAA,GAAyB,iBAAA,CAAA,QAAA;;;;iBA4KrD,aAAA,CAAA;EAAgB;AAAA;EAAY,MAAA,EAAQ,aAAA;AAAA,IAAa,iBAAA,CAAE,QAAA;AAAA,UAmClD,6BAAA;;;;EAIf,IAAA;EAnNmE;;;EAwNnE,MAAA,EAAQ,aAAA;EA5CmB;;;;;EAmD3B,eAAA;AAAA;;;;iBAMc,wBAAA,CAAyB,KAAA,EAAO,6BAAA,GAA6B,iBAAA,CAAA,QAAA;AAAA,UAsO5D,iCAAA;EA/RgD;;AAmCjE;EAgQE,IAAA;;;;EAKA,KAAA;EA5PQ;;;;AAaV;EAsPE,eAAA;AAAA;AAAA,iBAGc,4BAAA,CACd,KAAA,EAAO,iCAAA,GAAiC,iBAAA,CAAA,QAAA;AAAA,iBAkE1B,2BAAA,CAA4B,KAAA;EAAS,OAAA,EAAS,WAAA;AAAA,IAAW,iBAAA,CAAE,QAAA;AAAA,UAwB1D,uBAAA;EApV4D;AAsO7E;;EAkHE,OAAA,EAAS,WAAA;EAlHuC;;;EAuHhD,oBAAA;EAvGe;;AAGjB;;;EA2GE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA;AAAA,UAiJhD,uBAAA;EA/L0B;;;EAmMzC,OAAA,EAAS,WAAA;EAnMmD;;;EAwM5D,oBAAA;EAxMyE;AAwB3E;;;;EAuLE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"options-parser-logic.d.mts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"mappings":";;;;UA+CiB,+BAAA;;;AAAjB;EAIE,OAAA,EAAS,WAAA;;;;EAKT,eAAA;AAAA;AAAA,iBAGc,0BAAA,CACd,KAAA,EAAO,+BAAA,GAA+B,iBAAA,CAAA,QAAA;AAAA,UA4BvB,yBAAA;EA7BD;;;EAiCd,OAAA,EAAS,WAAA;EAhCF;;;EAqCP,oBAAA;EArCsC;AA4BxC;;EAcE,eAAA;AAAA;AAAA,iBAGc,oBAAA,CAAqB,KAAA,EAAO,yBAAA,GAAyB,iBAAA,CAAA,QAAA;;;;iBA+KrD,aAAA,CAAA;EAAgB;AAAA;EAAY,MAAA,EAAQ,aAAA;AAAA,IAAa,iBAAA,CAAE,QAAA;AAAA,UAmClD,6BAAA;;;;EAIf,IAAA;EAtNmE;;;EA2NnE,MAAA,EAAQ,aAAA;EA5CmB;;;;;EAmD3B,eAAA;AAAA;;;;iBAMc,wBAAA,CAAyB,KAAA,EAAO,6BAAA,GAA6B,iBAAA,CAAA,QAAA;AAAA,UAsO5D,iCAAA;EA/RgD;;AAmCjE;EAgQE,IAAA;;;;EAKA,KAAA;EA5PQ;;;;AAaV;EAsPE,eAAA;AAAA;AAAA,iBAGc,4BAAA,CACd,KAAA,EAAO,iCAAA,GAAiC,iBAAA,CAAA,QAAA;AAAA,iBAkE1B,2BAAA,CAA4B,KAAA;EAAS,OAAA,EAAS,WAAA;AAAA,IAAW,iBAAA,CAAE,QAAA;AAAA,UAc1D,uBAAA;EA1U4D;AAsO7E;;EAwGE,OAAA,EAAS,WAAA;EAxGuC;;;EA6GhD,oBAAA;EA7Fe;;AAGjB;;;EAiGE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA;AAAA,UA0IhD,uBAAA;EA9K0B;;;EAkLzC,OAAA,EAAS,WAAA;EAlLmD;;;EAuL5D,oBAAA;EAvLyE;AAc3E;;;;EAgLE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA"}
1
+ {"version":3,"file":"options-parser-logic.d.mts","names":[],"sources":["../../src/components/options-parser-logic.tsx"],"mappings":";;;;UA+CiB,+BAAA;;;AAAjB;EAIE,OAAA,EAAS,WAAA;;;;EAKT,eAAA;AAAA;AAAA,iBAGc,0BAAA,CACd,KAAA,EAAO,+BAAA,GAA+B,iBAAA,CAAA,QAAA;AAAA,UA4BvB,yBAAA;EA7BD;;;EAiCd,OAAA,EAAS,WAAA;EAhCF;;;EAqCP,oBAAA;EArCsC;AA4BxC;;EAcE,eAAA;AAAA;AAAA,iBAGc,oBAAA,CAAqB,KAAA,EAAO,yBAAA,GAAyB,iBAAA,CAAA,QAAA;;;;iBA4KrD,aAAA,CAAA;EAAgB;AAAA;EAAY,MAAA,EAAQ,aAAA;AAAA,IAAa,iBAAA,CAAE,QAAA;AAAA,UAmClD,6BAAA;;;;EAIf,IAAA;EAnNmE;;;EAwNnE,MAAA,EAAQ,aAAA;EA5CmB;;;;;EAmD3B,eAAA;AAAA;;;;iBAMc,wBAAA,CAAyB,KAAA,EAAO,6BAAA,GAA6B,iBAAA,CAAA,QAAA;AAAA,UAsO5D,iCAAA;EA/RgD;;AAmCjE;EAgQE,IAAA;;;;EAKA,KAAA;EA5PQ;;;;AAaV;EAsPE,eAAA;AAAA;AAAA,iBAGc,4BAAA,CACd,KAAA,EAAO,iCAAA,GAAiC,iBAAA,CAAA,QAAA;AAAA,iBAkE1B,2BAAA,CAA4B,KAAA;EAAS,OAAA,EAAS,WAAA;AAAA,IAAW,iBAAA,CAAE,QAAA;AAAA,UAwB1D,uBAAA;EApV4D;AAsO7E;;EAkHE,OAAA,EAAS,WAAA;EAlHuC;;;EAuHhD,oBAAA;EAvGe;;AAGjB;;;EA2GE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA;AAAA,UAiJhD,uBAAA;EA/L0B;;;EAmMzC,OAAA,EAAS,WAAA;EAnMmD;;;EAwM5D,oBAAA;EAxMyE;AAwB3E;;;;EAuLE,eAAA;AAAA;;;;iBAMc,kBAAA,CAAmB,KAAA,EAAO,uBAAA,GAAuB,iBAAA,CAAA,QAAA"}
@@ -98,24 +98,31 @@ function ArgumentsParserLogic(props) {
98
98
  return createComponent(CommandParameterType, { parameter: arg });
99
99
  },
100
100
  get initializer() {
101
- return [createComponent(Show, {
102
- get when() {
103
- return isSetString(arg.env);
104
- },
105
- get children() {
106
- return code`env.${appSpecificEnvPrefix}_${constantCase(String(arg.env))} ?? `;
107
- }
108
- }), createComponent(Show, {
109
- get when() {
110
- return arg.default !== void 0;
111
- },
112
- get fallback() {
113
- return (arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number) && arg.variadic ? code`[]` : code`undefined;`;
114
- },
115
- get children() {
116
- return arg.kind === CommandParameterKinds.string ? code`"${arg.default}"` : code`${arg.default}`;
117
- }
118
- })];
101
+ return [
102
+ code` ( `,
103
+ createComponent(Show, {
104
+ get when() {
105
+ return isSetString(arg.env);
106
+ },
107
+ get children() {
108
+ return code`env.${appSpecificEnvPrefix}_${constantCase(String(arg.env))} ?? `;
109
+ }
110
+ }),
111
+ createComponent(Show, {
112
+ get when() {
113
+ return arg.default !== void 0;
114
+ },
115
+ get fallback() {
116
+ return arg.variadic ? code`[]` : code`undefined`;
117
+ },
118
+ get children() {
119
+ return arg.kind === CommandParameterKinds.string ? code`"${arg.default}"` : code`${arg.default}`;
120
+ }
121
+ }),
122
+ code`) as `,
123
+ createComponent(CommandParameterType, { parameter: arg }),
124
+ code`; `
125
+ ];
119
126
  }
120
127
  });
121
128
  }
@@ -124,33 +131,39 @@ function ArgumentsParserLogic(props) {
124
131
  createComponent(IfStatement, {
125
132
  condition: code`argsIndex + ${index} < args.length && argsIndex + ${index} !== optionsIndex`,
126
133
  get children() {
127
- return [memo(() => code`${camelCase(arg.name)} = `), createComponent(Show, {
128
- get when() {
129
- return arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number;
130
- },
131
- get fallback() {
132
- return createComponent(BooleanInputParserLogic, { name: `args[argsIndex + ${index}] ` });
133
- },
134
- get children() {
135
- return createComponent(Show, {
136
- get when() {
137
- return (arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number) && arg.variadic;
138
- },
139
- get fallback() {
140
- return createComponent(Show, {
141
- get when() {
142
- return arg.kind === CommandParameterKinds.number;
143
- },
144
- fallback: code`args[argsIndex + ${index}]; `,
145
- children: code`Number(args[argsIndex + ${index}]); `
146
- });
147
- },
148
- get children() {
149
- return code`args.slice(argsIndex + ${index}, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${command.args.length - index}).join(" ").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean)`;
150
- }
151
- });
152
- }
153
- })];
134
+ return [
135
+ memo(() => code`${camelCase(arg.name)} = `),
136
+ createComponent(Show, {
137
+ get when() {
138
+ return arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number;
139
+ },
140
+ get fallback() {
141
+ return createComponent(BooleanInputParserLogic, { name: `args[argsIndex + ${index}] ` });
142
+ },
143
+ get children() {
144
+ return createComponent(Show, {
145
+ get when() {
146
+ return arg.variadic;
147
+ },
148
+ get fallback() {
149
+ return createComponent(Show, {
150
+ get when() {
151
+ return arg.kind === CommandParameterKinds.number;
152
+ },
153
+ fallback: code`args[argsIndex + ${index}] `,
154
+ children: code`Number(args[argsIndex + ${index}]) `
155
+ });
156
+ },
157
+ get children() {
158
+ return code`args.slice(argsIndex + ${index}, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${command.args.length - index}).join(" ").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean)`;
159
+ }
160
+ });
161
+ }
162
+ }),
163
+ code` as `,
164
+ createComponent(CommandParameterType, { parameter: arg }),
165
+ code`; `
166
+ ];
154
167
  }
155
168
  }),
156
169
  createComponent(Spacing, {})
@@ -552,12 +565,16 @@ function OptionsMemberParserCondition(props) {
552
565
  }
553
566
  function OptionsInterfaceDeclaration(props) {
554
567
  const { command } = props;
555
- const options = computed(() => computedOptions(command));
568
+ const options = computed(() => computedOptions(Object.entries(command.options).map(([name, option]) => ({
569
+ ...option,
570
+ name
571
+ }))));
556
572
  return createComponent(InterfaceDeclaration, {
557
573
  "export": true,
558
574
  get name() {
559
575
  return `${pascalCase(command.name)}Options`;
560
576
  },
577
+ "extends": "GlobalOptions",
561
578
  get children() {
562
579
  return createComponent(For, {
563
580
  get each() {
@@ -574,7 +591,10 @@ function OptionsInterfaceDeclaration(props) {
574
591
  */
575
592
  function OptionsParserLogic(props) {
576
593
  const { command, appSpecificEnvPrefix, isCaseSensitive = false } = props;
577
- const options = computed(() => computedOptions(command));
594
+ const options = computed(() => computedOptions(Object.entries(command.options).map(([name, option]) => ({
595
+ ...option,
596
+ name
597
+ }))));
578
598
  return [
579
599
  createComponent(VarDeclaration, {
580
600
  "const": true,
@@ -587,7 +607,7 @@ function OptionsParserLogic(props) {
587
607
  else if (option.kind === CommandParameterKinds.boolean) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${appSpecificEnvPrefix}_${option.env} ?? ` : ""}${option.default ? "true" : "false"},`;
588
608
  return "";
589
609
  }).join("")}
590
- } as ${pascalCase(command.name)}Options;`;
610
+ } as unknown as ${pascalCase(command.name)}Options;`;
591
611
  }
592
612
  }),
593
613
  createComponent(Spacing, {}),