@shell-shock/preset-cli 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/banner-function-declaration.cjs +11 -2
- package/dist/components/banner-function-declaration.d.cts +2 -2
- package/dist/components/banner-function-declaration.d.mts +2 -2
- package/dist/components/banner-function-declaration.mjs +12 -3
- package/dist/components/banner-function-declaration.mjs.map +1 -1
- package/dist/components/command-entry.cjs +45 -59
- package/dist/components/command-entry.d.cts +2 -2
- package/dist/components/command-entry.d.cts.map +1 -1
- package/dist/components/command-entry.d.mts.map +1 -1
- package/dist/components/command-entry.mjs +45 -59
- package/dist/components/command-entry.mjs.map +1 -1
- package/dist/components/command-router.cjs +24 -32
- package/dist/components/command-router.d.cts.map +1 -1
- package/dist/components/command-router.d.mts.map +1 -1
- package/dist/components/command-router.mjs +25 -33
- package/dist/components/command-router.mjs.map +1 -1
- package/dist/components/index.cjs +11 -0
- package/dist/components/index.d.cts +3 -1
- package/dist/components/index.d.mts +3 -1
- package/dist/components/index.mjs +3 -1
- package/dist/components/prompts-builtin.cjs +2284 -0
- package/dist/components/prompts-builtin.d.cts +36 -0
- package/dist/components/prompts-builtin.d.cts.map +1 -0
- package/dist/components/prompts-builtin.d.mts +36 -0
- package/dist/components/prompts-builtin.d.mts.map +1 -0
- package/dist/components/prompts-builtin.mjs +2277 -0
- package/dist/components/prompts-builtin.mjs.map +1 -0
- package/dist/components/virtual-command-entry.cjs +8 -6
- package/dist/components/virtual-command-entry.d.cts +2 -2
- package/dist/components/virtual-command-entry.d.cts.map +1 -1
- package/dist/components/virtual-command-entry.d.mts +2 -2
- package/dist/components/virtual-command-entry.d.mts.map +1 -1
- package/dist/components/virtual-command-entry.mjs +8 -6
- package/dist/components/virtual-command-entry.mjs.map +1 -1
- package/dist/helpers/get-default-options.cjs +2 -2
- package/dist/helpers/get-default-options.mjs +2 -2
- package/dist/helpers/get-default-options.mjs.map +1 -1
- package/dist/index.cjs +16 -25
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +16 -25
- package/dist/index.mjs.map +1 -1
- package/package.json +29 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-entry.mjs","names":["code","computed","For","Match","Show","Switch","ElseIfClause","IfStatement","ReflectionKind","usePowerlines","EntryFile","isDynamicPathSegment","CommandHandlerDeclaration","CommandValidationLogic","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","pascalCase","defu","BannerFunctionDeclaration","VirtualCommandEntry","CommandEntry","props","command","imports","builtinImports","rest","context","filePath","segments","filter","segment","join","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$createComponent","_$mergeProps","path","name","prompts","env","console","utils","children","_$createIntrinsic","condition","Object","values","options","option","optional","map","kind","string","number","variadic","includes","length","arguments","argument","each","doubleHardline","when","title","boolean","child","isVirtual","fallback"],"sources":["../../src/components/command-entry.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, Match, Show, Switch } from \"@alloy-js/core\";\nimport { ElseIfClause, IfStatement } from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport {\n CommandHandlerDeclaration,\n CommandValidationLogic\n} from \"@shell-shock/preset-script/components/command-entry\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { CLIPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<CLIPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`,\n prompts: \"prompts\"\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\",\n \"text\",\n \"confirm\",\n \"isCancel\",\n \"intro\",\n \"outro\"\n ],\n utils: [\n \"useApp\",\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isInteractive\",\n \"isHelp\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command}>\n <IfStatement condition={code`!isInteractive`}>\n <CommandValidationLogic command={command} />\n </IfStatement>\n <ElseIfClause\n condition={code`!isHelp && (${Object.values(command.options ?? {})\n .filter(option => !option.optional)\n .map(option =>\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n ? `(!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } || options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0)`\n : `options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } === undefined`\n )\n .join(\" || \")}${\n Object.values(command.options ?? {}).filter(\n option => !option.optional\n ).length > 0 &&\n Object.values(command.arguments ?? {}).filter(\n argument => !argument.optional\n ).length > 0\n ? \" || \"\n : \"\"\n }${Object.values(command.arguments ?? {})\n .filter(argument => !argument.optional)\n .map(argument =>\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n ? `(!${camelCase(\n argument.name\n )} || ${camelCase(argument.name)}.length === 0)`\n : `${camelCase(argument.name)} === undefined`\n )\n .join(\" || \")}) `}>\n {code`writeLine(\"\");\n\n intro(\"Select required input parameters\"); `}\n <hbr />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n <Switch>\n <Match\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>{code`\n const value = await text({\n message: 'Please provide a value for the ${\n option.title\n } option:',\n validate(value) {\n if (isCancel(value)) {\n return true;\n }\n if (!value || value.trim() === \"\") {\n return \"A value is required for this option\";\n }\n ${\n option.kind === ReflectionKind.number\n ? `if (Number.isNaN(Number(value))) {\n return \"The value provided must be a valid number\";\n }`\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = ${\n option.kind === ReflectionKind.number\n ? `Number(value)`\n : \"value\"\n };\n `}</Match>\n <Match\n when={option.kind === ReflectionKind.boolean}>{code`\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = await confirm({\n message: 'Please select a value for the ${option.title} option:'\n });\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`\n const value = await text({\n message: 'Please provide one or more values for the ${\n option.title\n } option (values are separated by a \",\" character):',\n validate(value) {\n if (isCancel(value)) {\n return true;\n }\n if (!value || value.trim() === \"\") {\n return \"A value is required for this option\";\n }\n if (value.split(\",\").map(value => value.trim()).filter(Boolean).length === 0) {\n return \"At least one value is required for this option\";\n }\n ${\n option.kind === ReflectionKind.number\n ? `const invalidIndex = value.split(\",\").map(value => value.trim()).filter(Boolean).findIndex(value => Number.isNaN(Number(value));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n option.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n <hbr />\n <hbr />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n <Switch>\n <Match\n when={\n argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number\n }>{code`\n const value = await text({\n message: 'Please provide a value for the ${argument.title} positional argument:',\n validate(value) {\n if (isCancel(value)) {\n return true;\n }\n if (!value || value.trim() === \"\") {\n return \"A value is required for this positional argument\";\n }\n ${\n argument.kind === ReflectionKind.number\n ? `if (Number.isNaN(Number(value))) {\n return \"The value provided must be a valid number\";\n }`\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = ${\n argument.kind === ReflectionKind.number\n ? `Number(value)`\n : \"value\"\n };\n `}</Match>\n <Match\n when={argument.kind === ReflectionKind.boolean}>{code`\n ${camelCase(argument.name)} = await confirm({\n message: 'Please select a value for the ${argument.title} positional argument:'\n });\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`\n const value = await text({\n message: 'Please provide one or more values for the ${\n argument.title\n } option (values are separated by a \",\" character):',\n validate(value) {\n if (isCancel(value)) {\n return true;\n }\n if (!value || value.trim() === \"\") {\n return \"A value is required for this option\";\n }\n if (value.split(\",\").map(value => value.trim()).filter(Boolean).length === 0) {\n return \"At least one value is required for this option\";\n }\n ${\n argument.kind === ReflectionKind.number\n ? `const invalidIndex = value.split(\",\").map(value => value.trim()).filter(Boolean).findIndex(value => Number.isNaN(Number(value));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n argument.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n {code`outro(\"Completed providing all required input parameters\");\n\n writeLine(\"\"); `}\n <hbr />\n <hbr />\n </ElseIfClause>\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-entry.mjs","names":["code","computed","For","Match","Show","Switch","ElseIfClause","IfStatement","ReflectionKind","Spacing","usePowerlines","EntryFile","isDynamicPathSegment","CommandHandlerDeclaration","CommandValidationLogic","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","lowerCaseFirst","pascalCase","defu","BannerFunctionDeclaration","VirtualCommandEntry","CommandEntry","props","command","imports","builtinImports","rest","context","filePath","segments","filter","segment","join","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$createComponent","_$mergeProps","path","name","prompts","env","console","utils","children","_$createIntrinsic","banner","condition","Object","values","options","option","optional","map","kind","string","number","variadic","includes","length","arguments","argument","each","doubleHardline","when","description","replace","boolean","child","isVirtual","fallback"],"sources":["../../src/components/command-entry.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, Match, Show, Switch } from \"@alloy-js/core\";\nimport { ElseIfClause, IfStatement } from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport {\n CommandHandlerDeclaration,\n CommandValidationLogic\n} from \"@shell-shock/preset-script/components/command-entry\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { CLIPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport interface CommandEntryProps\n extends Omit<EntryFileProps, \"path\" | \"typeDefinition\"> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<CLIPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`,\n prompts: \"prompts\"\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useApp\",\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isInteractive\",\n \"isHelp\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ],\n prompts: [\"text\", \"toggle\", \"select\", \"isCancel\", \"sleep\"]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration\n command={command}\n banner={code`await banner(); `}>\n <IfStatement condition={code`!isInteractive`}>\n <CommandValidationLogic command={command} />\n </IfStatement>\n <ElseIfClause\n condition={code`!isHelp && (${Object.values(command.options ?? {})\n .filter(option => !option.optional)\n .map(option =>\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n ? `(!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } || options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0)`\n : `options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } === undefined`\n )\n .join(\" || \")}${\n Object.values(command.options ?? {}).filter(\n option => !option.optional\n ).length > 0 &&\n Object.values(command.arguments ?? {}).filter(\n argument => !argument.optional\n ).length > 0\n ? \" || \"\n : \"\"\n }${Object.values(command.arguments ?? {})\n .filter(argument => !argument.optional)\n .map(argument =>\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n ? `(!${camelCase(\n argument.name\n )} || ${camelCase(argument.name)}.length === 0)`\n : `${camelCase(argument.name)} === undefined`\n )\n .join(\" || \")}) `}>\n {code`writeLine(\"\"); `}\n <Spacing />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n <Switch>\n <Match\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>{code`\n const value = await text({\n message: \"Please provide a${\n option.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } value for the \\\\\"${option.name}\\\\\" option${\n option.description\n ? ` (${lowerCaseFirst(\n option.description\n ).replace(/\\.+$/, \"\")})`\n : \"\"\n }\",\n validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this option\";\n }\n ${\n option.kind === ReflectionKind.number\n ? `if (Number.isNaN(Number(val))) {\n return \"The value provided must be a valid number\";\n }`\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = ${\n option.kind === ReflectionKind.number\n ? `Number(value)`\n : \"value\"\n };\n `}</Match>\n <Match\n when={option.kind === ReflectionKind.boolean}>{code`\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = await toggle({\n message: \"Please select a value for the \"${\n option.name\n }\" option${\n option.description\n ? ` (${lowerCaseFirst(\n option.description\n ).replace(/\\.+$/, \"\")})`\n : \"\"\n }\"\n });\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`\n const value = await text({\n message: \"Please provide one or more${\n option.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } values for the \\\\\"${option.name}\\\\\" option${\n option.description\n ? ` (${lowerCaseFirst(\n option.description\n ).replace(/\\.+$/, \"\")})`\n : \"\"\n } - values are separated by a \\\\\",\\\\\" character\",\n validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this option\";\n }\n if (val.split(\",\").map(v => v.trim()).filter(Boolean).length === 0) {\n return \"At least one value must be provided for this option\";\n }\n ${\n option.kind === ReflectionKind.number\n ? `const invalidIndex = val.split(\",\").map(v => v.trim()).filter(Boolean).findIndex(v => Number.isNaN(Number(v));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n option.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n <Switch>\n <Match\n when={\n argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number\n }>{code`\n const value = await text({\n message: \"Please provide a${\n argument.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } value for the \\\\\"${argument.name}\\\\\" argument${\n argument.description\n ? ` (${lowerCaseFirst(argument.description).replace(/\\.+$/, \"\")})`\n : \"\"\n }\",\n validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this argument\";\n }\n ${\n argument.kind === ReflectionKind.number\n ? `if (Number.isNaN(Number(val))) {\n return \"The provided value must be a valid number\";\n }`\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = ${\n argument.kind === ReflectionKind.number\n ? `Number(value)`\n : \"value\"\n };\n `}</Match>\n <Match\n when={argument.kind === ReflectionKind.boolean}>{code`\n ${camelCase(argument.name)} = await toggle({\n message: 'Please select a value for the \"${argument.name}\" argument${\n argument.description\n ? ` (${lowerCaseFirst(argument.description).replace(/\\.+$/, \"\")})`\n : \"\"\n }:'\n });\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`\n const value = await text({\n message: \"Please provide one or more${\n argument.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } values for the \\\\\"${argument.name}\\\\\" argument${\n argument.description\n ? ` (${lowerCaseFirst(argument.description).replace(/\\.+$/, \"\")})`\n : \"\"\n } - values are separated by a \\\\\",\\\\\" character\",\n validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this argument\";\n }\n if (val.split(\",\").map(v => v.trim()).filter(Boolean).length === 0) {\n return \"At least one value must be provided for this argument\";\n }\n ${\n argument.kind === ReflectionKind.number\n ? `const invalidIndex = val.split(\",\").map(v => v.trim()).filter(Boolean).findIndex(v => Number.isNaN(Number(v));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n argument.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n {code`writeLine(\"\"); `}\n <Spacing />\n </ElseIfClause>\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
|
2
2
|
let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
|
|
3
3
|
let __alloy_js_core = require("@alloy-js/core");
|
|
4
4
|
let __alloy_js_typescript = require("@alloy-js/typescript");
|
|
5
|
+
let __powerlines_plugin_alloy_core_components_spacing = require("@powerlines/plugin-alloy/core/components/spacing");
|
|
5
6
|
let __shell_shock_preset_script_components_command_router = require("@shell-shock/preset-script/components/command-router");
|
|
6
7
|
|
|
7
8
|
//#region src/components/command-router.tsx
|
|
@@ -15,7 +16,7 @@ function CommandRouterSelectOptions(props) {
|
|
|
15
16
|
hardline: true,
|
|
16
17
|
children: (command) => command.isVirtual ? (0, __alloy_js_core_jsx_runtime.createComponent)(CommandRouterSelectOptions, { get commands() {
|
|
17
18
|
return command.children ?? {};
|
|
18
|
-
} }) : __alloy_js_core.code`{ value: [${command.segments.map((segment) => `"${segment}"`).join(", ")}], label: "${command.
|
|
19
|
+
} }) : __alloy_js_core.code`{ value: [${command.segments.map((segment) => `"${segment}"`).join(", ")}], label: "${command.title}", description: "${command.description}"${command.icon ? `, icon: "${command.icon}"` : ""} }`
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
@@ -28,48 +29,40 @@ function CommandRouter(props) {
|
|
|
28
29
|
segments,
|
|
29
30
|
commands
|
|
30
31
|
})),
|
|
31
|
-
(0, __alloy_js_core_jsx_runtime.
|
|
32
|
-
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
32
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
|
|
33
33
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
|
|
34
34
|
condition: __alloy_js_core.code`isInteractive && !isHelp`,
|
|
35
35
|
get children() {
|
|
36
36
|
return [
|
|
37
|
-
__alloy_js_core.code`
|
|
38
|
-
banner();
|
|
39
|
-
writeLine("");
|
|
37
|
+
__alloy_js_core.code`await banner();
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
message: "Please select a command to execute:",
|
|
45
|
-
options: [ `,
|
|
39
|
+
let segments = await select({
|
|
40
|
+
message: "Which command would you like to execute?",
|
|
41
|
+
options: [ `,
|
|
46
42
|
(0, __alloy_js_core_jsx_runtime.createComponent)(CommandRouterSelectOptions, { commands }),
|
|
47
43
|
(0, __alloy_js_core_jsx_runtime.memo)(() => ` ],
|
|
48
|
-
});
|
|
49
|
-
if (isCancel(segments)) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
let dynamics = {} as Record<string, string>;
|
|
54
|
-
for (const dynamic of segments.filter(segment => segment.startsWith("[") && segment.endsWith("]"))) {
|
|
55
|
-
const value = await text({
|
|
56
|
-
message: \`Please provide a value for \${dynamic.replace(/^\[+/, "").replace(/\]+$/, "")}:\`,
|
|
57
44
|
});
|
|
58
|
-
if (isCancel(
|
|
45
|
+
if (isCancel(segments)) {
|
|
59
46
|
return;
|
|
60
47
|
}
|
|
61
|
-
dynamics[dynamic] = value;
|
|
62
|
-
}
|
|
63
48
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
49
|
+
let dynamics = {} as Record<string, string>;
|
|
50
|
+
for (const dynamic of segments.filter(segment => segment.startsWith("[") && segment.endsWith("]"))) {
|
|
51
|
+
const value = await text({
|
|
52
|
+
message: \`Please provide a value for \${dynamic.replace(/^\[+/, "").replace(/\]+$/, "")}:\`,
|
|
53
|
+
});
|
|
54
|
+
if (isCancel(value)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
dynamics[dynamic] = value;
|
|
58
|
+
}
|
|
67
59
|
|
|
68
|
-
|
|
60
|
+
segments = segments.map(segment => dynamics[segment] || segment);
|
|
61
|
+
const context = useApp();
|
|
62
|
+
context.set("args", [args.length > 0 ? args[0] : undefined, args.length > 1 ? args[1] : undefined, ...segments, ...args.slice(${segments.length + 2})].filter(Boolean) as string[]);
|
|
69
63
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
`),
|
|
64
|
+
command = segments[0];
|
|
65
|
+
args = context.get("args"); `),
|
|
73
66
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__shell_shock_preset_script_components_command_router.CommandRouterBody, (0, __alloy_js_core_jsx_runtime.mergeProps)(props, {
|
|
74
67
|
segments,
|
|
75
68
|
commands
|
|
@@ -77,8 +70,7 @@ function CommandRouter(props) {
|
|
|
77
70
|
];
|
|
78
71
|
}
|
|
79
72
|
}),
|
|
80
|
-
(0, __alloy_js_core_jsx_runtime.
|
|
81
|
-
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
|
|
73
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {})
|
|
82
74
|
];
|
|
83
75
|
}
|
|
84
76
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-router.d.cts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"command-router.d.cts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;;UA4BiB,+BAAA;aACJ,eAAe;;AADX,iBAID,0BAAA,CAHY,KAAA,EAInB,+BAJU,CAAA,EAIqB,eAAA,CAAA,QAJrB;AAGnB;AAyBA;;iBAAgB,aAAA,QAAqB,qBAAkB,eAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-router.d.mts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"command-router.d.mts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;;UA4BiB,+BAAA;aACJ,eAAe;;AADX,iBAID,0BAAA,CAHY,KAAA,EAInB,+BAJU,CAAA,EAIqB,eAAA,CAAA,QAJrB;AAGnB;AAyBA;;iBAAgB,aAAA,QAAqB,qBAAkB,eAAA,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createComponent,
|
|
1
|
+
import { createComponent, memo, mergeProps } from "@alloy-js/core/jsx-runtime";
|
|
2
2
|
import { For, code } from "@alloy-js/core";
|
|
3
3
|
import { IfStatement } from "@alloy-js/typescript";
|
|
4
|
+
import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
|
|
4
5
|
import { CommandRouter as CommandRouter$1, CommandRouterBody } from "@shell-shock/preset-script/components/command-router";
|
|
5
6
|
|
|
6
7
|
//#region src/components/command-router.tsx
|
|
@@ -14,7 +15,7 @@ function CommandRouterSelectOptions(props) {
|
|
|
14
15
|
hardline: true,
|
|
15
16
|
children: (command) => command.isVirtual ? createComponent(CommandRouterSelectOptions, { get commands() {
|
|
16
17
|
return command.children ?? {};
|
|
17
|
-
} }) : code`{ value: [${command.segments.map((segment) => `"${segment}"`).join(", ")}], label: "${command.
|
|
18
|
+
} }) : code`{ value: [${command.segments.map((segment) => `"${segment}"`).join(", ")}], label: "${command.title}", description: "${command.description}"${command.icon ? `, icon: "${command.icon}"` : ""} }`
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
@@ -27,48 +28,40 @@ function CommandRouter(props) {
|
|
|
27
28
|
segments,
|
|
28
29
|
commands
|
|
29
30
|
})),
|
|
30
|
-
|
|
31
|
-
createIntrinsic("hbr", {}),
|
|
31
|
+
createComponent(Spacing, {}),
|
|
32
32
|
createComponent(IfStatement, {
|
|
33
33
|
condition: code`isInteractive && !isHelp`,
|
|
34
34
|
get children() {
|
|
35
35
|
return [
|
|
36
|
-
code`
|
|
37
|
-
banner();
|
|
38
|
-
writeLine("");
|
|
36
|
+
code`await banner();
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
message: "Please select a command to execute:",
|
|
44
|
-
options: [ `,
|
|
38
|
+
let segments = await select({
|
|
39
|
+
message: "Which command would you like to execute?",
|
|
40
|
+
options: [ `,
|
|
45
41
|
createComponent(CommandRouterSelectOptions, { commands }),
|
|
46
42
|
memo(() => ` ],
|
|
47
|
-
});
|
|
48
|
-
if (isCancel(segments)) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
let dynamics = {} as Record<string, string>;
|
|
53
|
-
for (const dynamic of segments.filter(segment => segment.startsWith("[") && segment.endsWith("]"))) {
|
|
54
|
-
const value = await text({
|
|
55
|
-
message: \`Please provide a value for \${dynamic.replace(/^\[+/, "").replace(/\]+$/, "")}:\`,
|
|
56
43
|
});
|
|
57
|
-
if (isCancel(
|
|
44
|
+
if (isCancel(segments)) {
|
|
58
45
|
return;
|
|
59
46
|
}
|
|
60
|
-
dynamics[dynamic] = value;
|
|
61
|
-
}
|
|
62
47
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
let dynamics = {} as Record<string, string>;
|
|
49
|
+
for (const dynamic of segments.filter(segment => segment.startsWith("[") && segment.endsWith("]"))) {
|
|
50
|
+
const value = await text({
|
|
51
|
+
message: \`Please provide a value for \${dynamic.replace(/^\[+/, "").replace(/\]+$/, "")}:\`,
|
|
52
|
+
});
|
|
53
|
+
if (isCancel(value)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
dynamics[dynamic] = value;
|
|
57
|
+
}
|
|
66
58
|
|
|
67
|
-
|
|
59
|
+
segments = segments.map(segment => dynamics[segment] || segment);
|
|
60
|
+
const context = useApp();
|
|
61
|
+
context.set("args", [args.length > 0 ? args[0] : undefined, args.length > 1 ? args[1] : undefined, ...segments, ...args.slice(${segments.length + 2})].filter(Boolean) as string[]);
|
|
68
62
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
`),
|
|
63
|
+
command = segments[0];
|
|
64
|
+
args = context.get("args"); `),
|
|
72
65
|
createComponent(CommandRouterBody, mergeProps(props, {
|
|
73
66
|
segments,
|
|
74
67
|
commands
|
|
@@ -76,8 +69,7 @@ function CommandRouter(props) {
|
|
|
76
69
|
];
|
|
77
70
|
}
|
|
78
71
|
}),
|
|
79
|
-
|
|
80
|
-
createIntrinsic("hbr", {})
|
|
72
|
+
createComponent(Spacing, {})
|
|
81
73
|
];
|
|
82
74
|
}
|
|
83
75
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-router.mjs","names":["code","For","IfStatement","CommandRouter","BaseCommandRouter","CommandRouterBody","CommandRouterSelectOptions","props","commands","_$createComponent","each","Object","values","joiner","hardline","children","command","isVirtual","segments","map","segment","join","
|
|
1
|
+
{"version":3,"file":"command-router.mjs","names":["code","For","IfStatement","Spacing","CommandRouter","BaseCommandRouter","CommandRouterBody","CommandRouterSelectOptions","props","commands","_$createComponent","each","Object","values","joiner","hardline","children","command","isVirtual","segments","map","segment","join","title","description","icon","_$mergeProps","condition","_$memo","length"],"sources":["../../src/components/command-router.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, For } from \"@alloy-js/core\";\nimport { IfStatement } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport type { CommandRouterProps } from \"@shell-shock/preset-script/components/command-router\";\nimport {\n CommandRouter as BaseCommandRouter,\n CommandRouterBody\n} from \"@shell-shock/preset-script/components/command-router\";\n\nexport interface CommandRouterSelectOptionsProps {\n commands?: Record<string, CommandTree>;\n}\n\nexport function CommandRouterSelectOptions(\n props: CommandRouterSelectOptionsProps\n) {\n const { commands } = props;\n\n return (\n <For each={Object.values(commands ?? {})} joiner=\",\" hardline>\n {command =>\n command.isVirtual ? (\n <CommandRouterSelectOptions commands={command.children ?? {}} />\n ) : (\n code`{ value: [${command.segments\n .map(segment => `\"${segment}\"`)\n .join(\", \")}], label: \"${command.title}\", description: \"${\n command.description\n }\"${command.icon ? `, icon: \"${command.icon}\"` : \"\"} }`\n )\n }\n </For>\n );\n}\n\n/**\n * A component that renders a command router interface, allowing users to select and execute commands from a provided list of commands and segments. This component serves as a wrapper around the base CommandRouter, adding additional UI elements and logic for command selection.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { segments, commands } = props;\n\n return (\n <>\n <BaseCommandRouter {...props} segments={segments} commands={commands} />\n <Spacing />\n <IfStatement condition={code`isInteractive && !isHelp`}>\n {code`await banner();\n\n let segments = await select({\n message: \"Which command would you like to execute?\",\n options: [ `}\n <CommandRouterSelectOptions commands={commands} />\n {` ],\n });\n if (isCancel(segments)) {\n return;\n }\n\n let dynamics = {} as Record<string, string>;\n for (const dynamic of segments.filter(segment => segment.startsWith(\"[\") && segment.endsWith(\"]\"))) {\n const value = await text({\n message: \\`Please provide a value for \\${dynamic.replace(/^\\[+/, \"\").replace(/\\]+$/, \"\")}:\\`,\n });\n if (isCancel(value)) {\n return;\n }\n dynamics[dynamic] = value;\n }\n\n segments = segments.map(segment => dynamics[segment] || segment);\n const context = useApp();\n context.set(\"args\", [args.length > 0 ? args[0] : undefined, args.length > 1 ? args[1] : undefined, ...segments, ...args.slice(${\n segments.length + 2\n })].filter(Boolean) as string[]);\n\n command = segments[0];\n args = context.get(\"args\"); `}\n <CommandRouterBody {...props} segments={segments} commands={commands} />\n </IfStatement>\n <Spacing />\n </>\n );\n}\n"],"mappings":";;;;;;;AAgCA,SAAgBO,2BACdC,OACA;CACA,MAAM,EAAEC,aAAaD;AAErB,QAAAE,gBACGT,KAAG;EAAA,IAACU,OAAI;AAAA,UAAEC,OAAOC,OAAOJ,YAAY,EAAE,CAAC;;EAAEK,QAAM;EAAKC,UAAQ;EAAAC,WAC1DC,YACCA,QAAQC,YAASR,gBACdH,4BAA0B,EAAA,IAACE,WAAQ;AAAA,UAAEQ,QAAQD,YAAY,EAAE;KAAA,CAAA,GAE5DhB,IAAI,aAAaiB,QAAQE,SACtBC,KAAIC,YAAW,IAAIA,QAAO,GAAI,CAC9BC,KAAK,KAAK,CAAA,aAAcL,QAAQM,MAAK,mBACtCN,QAAQO,YAAW,GACjBP,QAAQQ,OAAO,YAAYR,QAAQQ,KAAI,KAAM,GAAE;EACpD,CAAA;;;;;AAST,SAAgBrB,cAAcI,OAA2B;CACvD,MAAM,EAAEW,UAAUV,aAAaD;AAE/B,QAAA;EAAAE,gBAEKL,iBAAiBqB,WAAKlB,OAAK;GAAYW;GAAoBV;GAAQ,CAAA,CAAA;EAAAC,gBACnEP,SAAO,EAAA,CAAA;EAAAO,gBACPR,aAAW;GAACyB,WAAW3B,IAAI;GAA0B,IAAAgB,WAAA;AAAA,WAAA;KACnDhB,IAAI;;;;;KAISU,gBACbH,4BAA0B,EAAWE,UAAQ,CAAA;KAAAmB,WAC7C;;;;;;;;;;;;;;;;;;;wIAoBCT,SAASU,SAAS,EAAC;;;sCAIQ;KAAAnB,gBAC5BJ,mBAAiBoB,WAAKlB,OAAK;MAAYW;MAAoBV;MAAQ,CAAA,CAAA;KAAA;;GAAA,CAAA;EAAAC,gBAErEP,SAAO,EAAA,CAAA;EAAA"}
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
const require_components_banner_function_declaration = require('./banner-function-declaration.cjs');
|
|
2
|
+
const require_components_command_router = require('./command-router.cjs');
|
|
2
3
|
const require_components_virtual_command_entry = require('./virtual-command-entry.cjs');
|
|
3
4
|
const require_components_command_entry = require('./command-entry.cjs');
|
|
5
|
+
const require_components_prompts_builtin = require('./prompts-builtin.cjs');
|
|
4
6
|
|
|
5
7
|
exports.BannerFunctionDeclaration = require_components_banner_function_declaration.BannerFunctionDeclaration;
|
|
8
|
+
exports.BasePromptDeclarations = require_components_prompts_builtin.BasePromptDeclarations;
|
|
6
9
|
exports.CommandEntry = require_components_command_entry.CommandEntry;
|
|
10
|
+
exports.CommandRouter = require_components_command_router.CommandRouter;
|
|
11
|
+
exports.CommandRouterSelectOptions = require_components_command_router.CommandRouterSelectOptions;
|
|
12
|
+
exports.NumericPromptDeclarations = require_components_prompts_builtin.NumericPromptDeclarations;
|
|
13
|
+
exports.PasswordPromptDeclaration = require_components_prompts_builtin.PasswordPromptDeclaration;
|
|
14
|
+
exports.PromptsBuiltin = require_components_prompts_builtin.PromptsBuiltin;
|
|
15
|
+
exports.SelectPromptDeclarations = require_components_prompts_builtin.SelectPromptDeclarations;
|
|
16
|
+
exports.TextPromptDeclarations = require_components_prompts_builtin.TextPromptDeclarations;
|
|
17
|
+
exports.TogglePromptDeclarations = require_components_prompts_builtin.TogglePromptDeclarations;
|
|
7
18
|
exports.VirtualCommandEntry = require_components_virtual_command_entry.VirtualCommandEntry;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { BannerFunctionDeclaration } from "./banner-function-declaration.cjs";
|
|
2
2
|
import { CommandEntry, CommandEntryProps } from "./command-entry.cjs";
|
|
3
|
+
import { CommandRouter, CommandRouterSelectOptions, CommandRouterSelectOptionsProps } from "./command-router.cjs";
|
|
4
|
+
import { BasePromptDeclarations, NumericPromptDeclarations, PasswordPromptDeclaration, PromptsBuiltin, PromptsBuiltinProps, SelectPromptDeclarations, TextPromptDeclarations, TogglePromptDeclarations } from "./prompts-builtin.cjs";
|
|
3
5
|
import { VirtualCommandEntry, VirtualCommandEntryProps } from "./virtual-command-entry.cjs";
|
|
4
|
-
export { BannerFunctionDeclaration, CommandEntry, CommandEntryProps, VirtualCommandEntry, VirtualCommandEntryProps };
|
|
6
|
+
export { BannerFunctionDeclaration, BasePromptDeclarations, CommandEntry, CommandEntryProps, CommandRouter, CommandRouterSelectOptions, CommandRouterSelectOptionsProps, NumericPromptDeclarations, PasswordPromptDeclaration, PromptsBuiltin, PromptsBuiltinProps, SelectPromptDeclarations, TextPromptDeclarations, TogglePromptDeclarations, VirtualCommandEntry, VirtualCommandEntryProps };
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { BannerFunctionDeclaration } from "./banner-function-declaration.mjs";
|
|
2
2
|
import { CommandEntry, CommandEntryProps } from "./command-entry.mjs";
|
|
3
|
+
import { CommandRouter, CommandRouterSelectOptions, CommandRouterSelectOptionsProps } from "./command-router.mjs";
|
|
4
|
+
import { BasePromptDeclarations, NumericPromptDeclarations, PasswordPromptDeclaration, PromptsBuiltin, PromptsBuiltinProps, SelectPromptDeclarations, TextPromptDeclarations, TogglePromptDeclarations } from "./prompts-builtin.mjs";
|
|
3
5
|
import { VirtualCommandEntry, VirtualCommandEntryProps } from "./virtual-command-entry.mjs";
|
|
4
|
-
export { BannerFunctionDeclaration, CommandEntry, CommandEntryProps, VirtualCommandEntry, VirtualCommandEntryProps };
|
|
6
|
+
export { BannerFunctionDeclaration, BasePromptDeclarations, CommandEntry, CommandEntryProps, CommandRouter, CommandRouterSelectOptions, CommandRouterSelectOptionsProps, NumericPromptDeclarations, PasswordPromptDeclaration, PromptsBuiltin, PromptsBuiltinProps, SelectPromptDeclarations, TextPromptDeclarations, TogglePromptDeclarations, VirtualCommandEntry, VirtualCommandEntryProps };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { BannerFunctionDeclaration } from "./banner-function-declaration.mjs";
|
|
2
|
+
import { CommandRouter, CommandRouterSelectOptions } from "./command-router.mjs";
|
|
2
3
|
import { VirtualCommandEntry } from "./virtual-command-entry.mjs";
|
|
3
4
|
import { CommandEntry } from "./command-entry.mjs";
|
|
5
|
+
import { BasePromptDeclarations, NumericPromptDeclarations, PasswordPromptDeclaration, PromptsBuiltin, SelectPromptDeclarations, TextPromptDeclarations, TogglePromptDeclarations } from "./prompts-builtin.mjs";
|
|
4
6
|
|
|
5
|
-
export { BannerFunctionDeclaration, CommandEntry, VirtualCommandEntry };
|
|
7
|
+
export { BannerFunctionDeclaration, BasePromptDeclarations, CommandEntry, CommandRouter, CommandRouterSelectOptions, NumericPromptDeclarations, PasswordPromptDeclaration, PromptsBuiltin, SelectPromptDeclarations, TextPromptDeclarations, TogglePromptDeclarations, VirtualCommandEntry };
|