@shell-shock/preset-script 0.4.0 → 0.4.2
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/bin-entry.cjs +17 -3
- package/dist/components/bin-entry.cjs.map +1 -1
- package/dist/components/bin-entry.d.cts.map +1 -1
- package/dist/components/bin-entry.d.mts.map +1 -1
- package/dist/components/bin-entry.mjs +17 -3
- package/dist/components/bin-entry.mjs.map +1 -1
- package/dist/components/command-entry.cjs +67 -72
- package/dist/components/command-entry.cjs.map +1 -1
- 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 +69 -74
- package/dist/components/command-entry.mjs.map +1 -1
- package/dist/components/command-router.cjs +1 -1
- package/dist/components/command-router.cjs.map +1 -1
- package/dist/components/command-router.mjs +2 -2
- package/dist/components/command-router.mjs.map +1 -1
- package/dist/components/console-builtin.cjs +7 -6
- package/dist/components/console-builtin.cjs.map +1 -1
- package/dist/components/console-builtin.d.cts +1 -0
- package/dist/components/console-builtin.d.cts.map +1 -1
- package/dist/components/console-builtin.d.mts +1 -0
- package/dist/components/console-builtin.d.mts.map +1 -1
- package/dist/components/console-builtin.mjs +7 -6
- package/dist/components/console-builtin.mjs.map +1 -1
- package/dist/components/help.cjs +2 -2
- package/dist/components/help.cjs.map +1 -1
- package/dist/components/help.d.cts +7 -7
- package/dist/components/help.d.cts.map +1 -1
- package/dist/components/help.d.mts.map +1 -1
- package/dist/components/help.mjs +2 -2
- package/dist/components/help.mjs.map +1 -1
- package/dist/components/utils-builtin.cjs +8 -1
- package/dist/components/utils-builtin.cjs.map +1 -1
- package/dist/components/utils-builtin.d.cts +7 -7
- package/dist/components/utils-builtin.d.cts.map +1 -1
- package/dist/components/utils-builtin.d.mts.map +1 -1
- package/dist/components/utils-builtin.mjs +8 -1
- package/dist/components/utils-builtin.mjs.map +1 -1
- package/dist/components/virtual-command-entry.cjs +4 -3
- package/dist/components/virtual-command-entry.cjs.map +1 -1
- package/dist/components/virtual-command-entry.mjs +5 -4
- package/dist/components/virtual-command-entry.mjs.map +1 -1
- package/dist/types/plugin.d.cts.map +1 -1
- package/dist/types/plugin.d.mts.map +1 -1
- package/package.json +5 -5
|
@@ -5,13 +5,13 @@ import { createComponent, createIntrinsic, memo, mergeProps } from "@alloy-js/co
|
|
|
5
5
|
import { For, Show, code, computed } from "@alloy-js/core";
|
|
6
6
|
import { ElseClause, FunctionDeclaration, IfStatement } from "@alloy-js/typescript";
|
|
7
7
|
import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
|
|
8
|
-
import { getAppBin,
|
|
8
|
+
import { getAppBin, getDynamicPathSegmentName, isDynamicPathSegment } from "@shell-shock/core/plugin-utils/context-helpers";
|
|
9
9
|
import { EntryFile } from "@powerlines/plugin-alloy/typescript/components/entry-file";
|
|
10
10
|
import { TSDoc, TSDocParam, TSDocRemarks, TSDocTitle } from "@powerlines/plugin-alloy/typescript/components/tsdoc";
|
|
11
11
|
import { replaceExtension } from "@stryke/path/replace";
|
|
12
12
|
import { pascalCase } from "@stryke/string-format/pascal-case";
|
|
13
13
|
import defu from "defu";
|
|
14
|
-
import {
|
|
14
|
+
import { CommandParserLogic, OptionsInterfaceDeclaration } from "@shell-shock/core/components/options-parser-logic";
|
|
15
15
|
import { findFilePath, relativePath } from "@stryke/path/find";
|
|
16
16
|
import { joinPaths } from "@stryke/path/join";
|
|
17
17
|
import { camelCase } from "@stryke/string-format/camel-case";
|
|
@@ -20,7 +20,7 @@ import { constantCase } from "@stryke/string-format/constant-case";
|
|
|
20
20
|
//#region src/components/command-entry.tsx
|
|
21
21
|
function CommandInvocation(props) {
|
|
22
22
|
const { command } = props;
|
|
23
|
-
return [memo(() => code`return Promise.resolve(handle${pascalCase(command.name)}(options${command.path.segments.filter((segment) =>
|
|
23
|
+
return [memo(() => code`return Promise.resolve(handle${pascalCase(command.name)}(options${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length > 0 ? `, ${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).map((segment) => camelCase(getDynamicPathSegmentName(segment))).join(", ")}` : ""}${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).length > 0 ? `, ${command.path.segments.filter((segment) => isDynamicPathSegment(segment)).map((segment) => camelCase(getDynamicPathSegmentName(segment))).join(", ")}` : ""}${command.params.length > 0 ? `, ${command.params.map((param) => camelCase(param.name)).join(", ")}` : ""}));`), createIntrinsic("hbr", {})];
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* A component that generates the `handler` function declaration for a command.
|
|
@@ -28,76 +28,70 @@ function CommandInvocation(props) {
|
|
|
28
28
|
function CommandHandlerDeclaration(props) {
|
|
29
29
|
const { command, children } = props;
|
|
30
30
|
const context = usePowerlines();
|
|
31
|
-
return [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
get isCaseSensitive() {
|
|
77
|
-
return context.config.isCaseSensitive;
|
|
78
|
-
}
|
|
79
|
-
}),
|
|
80
|
-
createIntrinsic("hbr", {}),
|
|
81
|
-
createIntrinsic("hbr", {}),
|
|
82
|
-
code`writeLine("");
|
|
31
|
+
return [
|
|
32
|
+
createComponent(OptionsInterfaceDeclaration, { command }),
|
|
33
|
+
createIntrinsic("hbr", {}),
|
|
34
|
+
createIntrinsic("hbr", {}),
|
|
35
|
+
createComponent(TSDoc, {
|
|
36
|
+
get heading() {
|
|
37
|
+
return `The ${command.title} (${getAppBin(context)} ${command.path.segments.map((segment) => isDynamicPathSegment(segment) ? `[${constantCase(getDynamicPathSegmentName(segment))}]` : segment).join(" ")}) command.`;
|
|
38
|
+
},
|
|
39
|
+
get children() {
|
|
40
|
+
return [
|
|
41
|
+
createComponent(TSDocRemarks, { get children() {
|
|
42
|
+
return `${command.description.replace(/\.+$/, "")}.`;
|
|
43
|
+
} }),
|
|
44
|
+
createIntrinsic("hbr", {}),
|
|
45
|
+
createComponent(TSDocTitle, { get children() {
|
|
46
|
+
return command.title;
|
|
47
|
+
} }),
|
|
48
|
+
createComponent(TSDocParam, {
|
|
49
|
+
name: "args",
|
|
50
|
+
children: `The command-line arguments passed to the command.`
|
|
51
|
+
})
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
}),
|
|
55
|
+
createComponent(FunctionDeclaration, {
|
|
56
|
+
"export": true,
|
|
57
|
+
async: true,
|
|
58
|
+
name: "handler",
|
|
59
|
+
parameters: [{
|
|
60
|
+
name: "args",
|
|
61
|
+
type: "string[]",
|
|
62
|
+
default: "getArgs()"
|
|
63
|
+
}],
|
|
64
|
+
get children() {
|
|
65
|
+
return [
|
|
66
|
+
createComponent(CommandParserLogic, {
|
|
67
|
+
command,
|
|
68
|
+
get envPrefix() {
|
|
69
|
+
return context.config.envPrefix;
|
|
70
|
+
},
|
|
71
|
+
get isCaseSensitive() {
|
|
72
|
+
return context.config.isCaseSensitive;
|
|
73
|
+
}
|
|
74
|
+
}),
|
|
75
|
+
code`writeLine("");
|
|
83
76
|
banner();`,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
77
|
+
createIntrinsic("hbr", {}),
|
|
78
|
+
createIntrinsic("hbr", {}),
|
|
79
|
+
children,
|
|
80
|
+
createIntrinsic("hbr", {}),
|
|
81
|
+
createIntrinsic("hbr", {}),
|
|
82
|
+
createComponent(IfStatement, {
|
|
83
|
+
condition: code`options.help`,
|
|
84
|
+
get children() {
|
|
85
|
+
return createComponent(CommandHelp, { command });
|
|
86
|
+
}
|
|
87
|
+
}),
|
|
88
|
+
createComponent(ElseClause, { get children() {
|
|
89
|
+
return [createIntrinsic("hbr", {}), createComponent(CommandInvocation, { command })];
|
|
90
|
+
} })
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
];
|
|
101
95
|
}
|
|
102
96
|
/**
|
|
103
97
|
* The command entry point for the Shell Shock project.
|
|
@@ -105,7 +99,7 @@ function CommandHandlerDeclaration(props) {
|
|
|
105
99
|
function CommandEntry(props) {
|
|
106
100
|
const { command, imports, builtinImports, ...rest } = props;
|
|
107
101
|
const context = usePowerlines();
|
|
108
|
-
const filePath = computed(() => joinPaths(command.path.segments.filter((segment) => !
|
|
102
|
+
const filePath = computed(() => joinPaths(command.path.segments.filter((segment) => !isDynamicPathSegment(segment)).join("/"), "index.ts"));
|
|
109
103
|
const commandSourcePath = computed(() => replaceExtension(relativePath(joinPaths(context.entryPath, findFilePath(filePath.value)), command.entry.input?.file || command.entry.file)));
|
|
110
104
|
const typeDefinition = computed(() => ({
|
|
111
105
|
...command.entry,
|
|
@@ -136,7 +130,8 @@ function CommandEntry(props) {
|
|
|
136
130
|
utils: [
|
|
137
131
|
"getArgs",
|
|
138
132
|
"hasFlag",
|
|
139
|
-
"isMinimal"
|
|
133
|
+
"isMinimal",
|
|
134
|
+
"isUnicodeSupported"
|
|
140
135
|
]
|
|
141
136
|
});
|
|
142
137
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-entry.mjs","names":["code","computed","For","Show","ElseClause","FunctionDeclaration","IfStatement","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","OptionsInterfaceDeclaration","OptionsParserLogic","PositionalOptionsParserLogic","getAppBin","getPositionalCommandOptionName","isPositionalCommandOption","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","VirtualCommandEntry","CommandInvocation","props","command","_$memo","name","path","segments","filter","segment","length","map","join","_$createIntrinsic","CommandHandlerDeclaration","children","context","_$createComponent","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","condition","CommandEntry","imports","builtinImports","rest","filePath","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","env","console","utils","each","Object","values","child","when","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 type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n FunctionDeclaration,\n IfStatement\n} from \"@alloy-js/typescript\";\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 {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport {\n OptionsInterfaceDeclaration,\n OptionsParserLogic,\n PositionalOptionsParserLogic\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getPositionalCommandOptionName,\n isPositionalCommandOption\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\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 { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n {code`return Promise.resolve(handle${pascalCase(command.name)}(options${\n command.path.segments.filter(segment =>\n isPositionalCommandOption(segment)\n ).length > 0\n ? `, ${command.path.segments\n .filter(segment => isPositionalCommandOption(segment))\n .map(segment =>\n camelCase(getPositionalCommandOptionName(segment))\n )\n .join(\", \")}`\n : \"\"\n }));`}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <TSDoc\n heading={`The ${command.title} (${getAppBin(\n context\n )} ${command.path.segments\n .map(segment =>\n isPositionalCommandOption(segment)\n ? `[${constantCase(getPositionalCommandOptionName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"getArgs()\" }]}>\n <PositionalOptionsParserLogic\n path={command.path}\n envPrefix={context.config.envPrefix}\n />\n <hbr />\n <hbr />\n <OptionsParserLogic\n command={command}\n envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n {code`writeLine(\"\");\n banner();`}\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\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<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.path.segments\n .filter(segment => !isPositionalCommandOption(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 })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isCI\"],\n console: [\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\"getArgs\", \"hasFlag\", \"isMinimal\"]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} />\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","Show","ElseClause","FunctionDeclaration","IfStatement","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","VirtualCommandEntry","CommandInvocation","props","command","_$memo","name","path","segments","filter","segment","length","map","join","params","param","_$createIntrinsic","CommandHandlerDeclaration","children","context","_$createComponent","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","condition","CommandEntry","imports","builtinImports","rest","filePath","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","env","console","utils","each","Object","values","child","when","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 type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n FunctionDeclaration,\n IfStatement\n} from \"@alloy-js/typescript\";\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 {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\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 { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n {code`return Promise.resolve(handle${pascalCase(command.name)}(options${\n command.path.segments.filter(segment => isDynamicPathSegment(segment))\n .length > 0\n ? `, ${command.path.segments\n .filter(segment => isDynamicPathSegment(segment))\n .map(segment => camelCase(getDynamicPathSegmentName(segment)))\n .join(\", \")}`\n : \"\"\n }${\n command.path.segments.filter(segment => isDynamicPathSegment(segment))\n .length > 0\n ? `, ${command.path.segments\n .filter(segment => isDynamicPathSegment(segment))\n .map(segment => camelCase(getDynamicPathSegmentName(segment)))\n .join(\", \")}`\n : \"\"\n }${\n command.params.length > 0\n ? `, ${command.params.map(param => camelCase(param.name)).join(\", \")}`\n : \"\"\n }));`}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(\n context\n )} ${command.path.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"getArgs()\" }]}>\n <CommandParserLogic\n command={command}\n envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n {code`writeLine(\"\");\n banner();`}\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\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<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.path.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 })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isCI\"],\n console: [\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\"getArgs\", \"hasFlag\", \"isMinimal\", \"isUnicodeSupported\"]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} />\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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"}
|
|
@@ -22,7 +22,7 @@ function CommandRouterRoute() {
|
|
|
22
22
|
return `handle${(0, __stryke_string_format_pascal_case.pascalCase)(command.name)}`;
|
|
23
23
|
},
|
|
24
24
|
get importPath() {
|
|
25
|
-
return `./${command.path.segments.filter((segment) => !(0, __shell_shock_core_plugin_utils_context_helpers.
|
|
25
|
+
return `./${command.path.segments.filter((segment) => !(0, __shell_shock_core_plugin_utils_context_helpers.isDynamicPathSegment)(segment))[command.path.segments.filter((segment) => !(0, __shell_shock_core_plugin_utils_context_helpers.isDynamicPathSegment)(segment)).length - 1]}`;
|
|
26
26
|
},
|
|
27
27
|
exportName: "handler"
|
|
28
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-router.cjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isPositionalCommandOption","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","path","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","context","index","Object","keys","type","initializer","condition","value","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"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 type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isPositionalCommandOption } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.path.segments.filter(\n segment => !isPositionalCommandOption(segment)\n )[\n command.path.segments.filter(\n segment => !isPositionalCommandOption(segment)\n ).length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n path: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { path, commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const index = computed(() => 2 + (path.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command)`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-router.cjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isDynamicPathSegment","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","path","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","context","index","Object","keys","type","initializer","condition","value","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"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 type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.path.segments.filter(\n segment => !isDynamicPathSegment(segment)\n )[\n command.path.segments.filter(\n segment => !isDynamicPathSegment(segment)\n ).length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n path: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { path, commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const index = computed(() => 2 + (path.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command)`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runti
|
|
|
2
2
|
import { For, Show, code, computed } from "@alloy-js/core";
|
|
3
3
|
import { ElseIfClause, IfStatement, VarDeclaration } from "@alloy-js/typescript";
|
|
4
4
|
import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
|
|
5
|
-
import {
|
|
5
|
+
import { isDynamicPathSegment } from "@shell-shock/core/plugin-utils/context-helpers";
|
|
6
6
|
import { pascalCase } from "@stryke/string-format/pascal-case";
|
|
7
7
|
import { DynamicImportStatement } from "@powerlines/plugin-alloy/typescript/components/dynamic-import-statement";
|
|
8
8
|
import { CommandContext, useCommand } from "@shell-shock/core/contexts/command";
|
|
@@ -21,7 +21,7 @@ function CommandRouterRoute() {
|
|
|
21
21
|
return `handle${pascalCase(command.name)}`;
|
|
22
22
|
},
|
|
23
23
|
get importPath() {
|
|
24
|
-
return `./${command.path.segments.filter((segment) => !
|
|
24
|
+
return `./${command.path.segments.filter((segment) => !isDynamicPathSegment(segment))[command.path.segments.filter((segment) => !isDynamicPathSegment(segment)).length - 1]}`;
|
|
25
25
|
},
|
|
26
26
|
exportName: "handler"
|
|
27
27
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-router.mjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isPositionalCommandOption","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","path","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","context","index","Object","keys","type","initializer","condition","value","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"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 type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isPositionalCommandOption } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.path.segments.filter(\n segment => !isPositionalCommandOption(segment)\n )[\n command.path.segments.filter(\n segment => !isPositionalCommandOption(segment)\n ).length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n path: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { path, commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const index = computed(() => 2 + (path.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command)`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-router.mjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isDynamicPathSegment","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","path","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","context","index","Object","keys","type","initializer","condition","value","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"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 type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.path.segments.filter(\n segment => !isDynamicPathSegment(segment)\n )[\n command.path.segments.filter(\n segment => !isDynamicPathSegment(segment)\n ).length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n path: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { path, commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const index = computed(() => 2 + (path.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(/-/g, \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name.toLowerCase().replaceAll(/-/g, \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(/-/g, \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias.toLowerCase().replaceAll(/-/g, \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command)`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":";;;;;;;;;;AAiCA,SAAgBa,qBAAqB;CACnC,MAAMC,UAAUJ,YAAY;AAE5B,QAAA;EAAAK,gBAEKZ,MAAI;GAAA,IAACa,OAAI;AAAA,WAAE,CAACF,QAAQG;;GAAS,IAAAC,WAAA;AAAA,WAAAH,gBAC3BP,wBAAsB;KAAA,IACrBW,OAAI;AAAA,aAAE,SAASP,WAAWE,QAAQK,KAAK;;KAAE,IACzCC,aAAU;AAAA,aAAE,KACVN,QAAQO,KAAKC,SAASC,QACpBC,YAAW,CAACb,qBAAqBa,QACnC,CAAC,CACCV,QAAQO,KAAKC,SAASC,QACpBC,YAAW,CAACb,qBAAqBa,QACnC,CAAC,CAACC,SAAS;;KAGfC,YAAU;KAAA,CAAA;;GAAA,CAAA;EAAAC,gBAAA,OAAA,EAAA,CAAA;EAAAC,WAIb5B,IAAI,gBAAgBY,WAAWE,QAAQK,KAAK,CAAA,SAAS;EAAA;;;;;AAc5D,SAAgBU,cAAcC,OAA2B;CACvD,MAAM,EAAET,MAAMU,UAAUC,UAAUF;CAElC,MAAMG,UAAU1B,eAAoC;CACpD,MAAM2B,QAAQjC,eAAe,KAAKoB,KAAKI,UAAU,GAAG;AAEpD,QAAAV,gBACGZ,MAAI;EAAA,IAACa,OAAI;AAAA,UAAEe,YAAYI,OAAOC,KAAKL,SAAS,CAACN,SAAS;;EAAC,IAAAP,WAAA;AAAA,UAAA;IAAAH,gBACrDT,gBAAc;KAAA,OAAA;KAEba,MAAI;KACJkB,MAAI;KACJC,aAAatC,IAAI;KAAK,CAAA;IAAA2B,gBAAA,OAAA,EAAA,CAAA;IAAAZ,gBAGvBV,aAAW;KAAA,IACVkC,YAAS;AAAA,aAAEvC,IAAI,iBACbkC,MAAMM,MAAK,WACDN,MAAMM,MAAK;;KAAG,IAAAtB,WAAA;AAAA,aAAGlB,IAAI,kBACjCkC,MAAMM,MAAK;;KACT,CAAA;IAAAb,gBAAA,OAAA,EAAA,CAAA;IAAAZ,gBAEHb,KAAG;KAAA,IAACuC,OAAI;AAAA,aAAEN,OAAOO,OAAOX,YAAY,EAAE,CAAC;;KAAAb,WACpCyB,YAAYC,QAAG7B,gBACdN,eAAeoC,UAAQ;MAACL,OAAOG;MAAU,IAAAzB,WAAA;AAAA,cAAAH,gBACvCZ,MAAI;QAAA,IACHa,OAAI;AAAA,gBAAE8B,QAAQF,IAAI;;QAAA,IAClBG,WAAQ;AAAA,gBAAAhC,gBACLV,aAAW;UAAA,IACVkC,YAAS;AAAA,kBAAEvC,IAAI,GACbiC,QAAQe,OAAOC,kBACX,YACA,+CAA4C,QAEhDhB,QAAQe,OAAOC,kBACXN,WAAWxB,OACXwB,WAAWxB,KAAK+B,aAAa,CAACC,WAAW,MAAM,GAAG,CAAA,GAEtDR,WAAWS,SAAST,WAAWS,MAAM3B,SAAS,IAC1C,OAAOkB,WAAWS,MACfC,KACCD,UACE,GAAGnB,QAAQe,OAAOC,kBAAkB,YAAY,+CAA4C,QAC1FhB,QAAQe,OAAOC,kBACXG,QACAA,MAAMF,aAAa,CAACC,WAAW,MAAM,GAAG,CAAA,GAEjD,CACAG,KAAK,OAAO,KACf;;UACJ,IAAApC,WAAA;AAAA,kBAAAH,gBACDZ,MAAI;YAAA,IAACa,OAAI;AAAA,oBAAE8B,QAAQd,MAAM;;YAAA,IAAEe,WAAQ;AAAA,oBAAAhC,gBAAGF,oBAAkB,EAAA,CAAA;;YAAAK,UACtDc;YAAK,CAAA;;UAAA,CAAA;;QAAA,IAAAd,WAAA;AAAA,gBAAAH,gBAIXX,cAAY;UAAA,IACXmC,YAAS;AAAA,kBAAEvC,IAAI,GACbiC,QAAQe,OAAOC,kBACX,YACA,+CAA4C,QAEhDhB,QAAQe,OAAOC,kBACXN,WAAWxB,OACXwB,WAAWxB,KAAK+B,aAAa,CAACC,WAAW,MAAM,GAAG,CAAA,GAEtDR,WAAWS,SAAST,WAAWS,MAAM3B,SAAS,IAC1C,OAAOkB,WAAWS,MACfC,KACCD,UACE,GAAGnB,QAAQe,OAAOC,kBAAkB,YAAY,+CAA4C,QAC1FhB,QAAQe,OAAOC,kBACXG,QACAA,MAAMF,aAAa,CAACC,WAAW,MAAM,GAAG,CAAA,GAEjD,CACAG,KAAK,OAAO,KACf;;UACJ,IAAApC,WAAA;AAAA,kBAAAH,gBACDZ,MAAI;YAAA,IAACa,OAAI;AAAA,oBAAE8B,QAAQd,MAAM;;YAAA,IAAEe,WAAQ;AAAA,oBAAAhC,gBAAGF,oBAAkB,EAAA,CAAA;;YAAAK,UACtDc;YAAK,CAAA;;UAAA,CAAA;;QAAA,CAAA;;MAAA,CAAA;KAKf,CAAA;IAAAjB,gBAEFX,cAAY;KACXmC,WAAWvC,IAAI;KAAkB,IAAAkB,WAAA;AAAA,aAAGlB,IAAI,4CAA4CmC,OAAOO,OAC3FX,YAAY,EACd,CAAC,CACEsB,KACCE,QACE,IAAIA,IAAIpC,KAAI,IAAKoC,IAAIH,SAAS,EAAE,EAAEC,KAAKD,OAAOI,MAAOA,MAAM,IAAI,MAAMJ,MAAK,KAAM,KAAKA,MAAK,GAAK,CAACE,KAAK,GAAG,GAC3G,CACAA,KAAK,KAAK,CAAA;2BACQG,KAAKC,UAAUzB,QAAQe,OAAOC,gBAAgB,CAAA;;;;;;;KAK4N,CAAA;IAAA;;EAAA,CAAA"}
|
|
@@ -1271,7 +1271,7 @@ consoleFn(\`\${" ".repeat(Math.max(options.padding ?? ${theme.padding.app}, 0))}
|
|
|
1271
1271
|
* A component to generate the message functions in the `shell-shock:console` builtin module.
|
|
1272
1272
|
*/
|
|
1273
1273
|
function MessageFunctionDeclaration(props) {
|
|
1274
|
-
const { type, variant, consoleFnName, description, prefix, parameters, timestamp } = props;
|
|
1274
|
+
const { type, variant, consoleFnName, description, prefix, parameters, timestamp, color = variant } = props;
|
|
1275
1275
|
const theme = require_contexts_theme.useTheme();
|
|
1276
1276
|
return [(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_typescript_components_tsdoc.TSDoc, {
|
|
1277
1277
|
get heading() {
|
|
@@ -1312,15 +1312,15 @@ function MessageFunctionDeclaration(props) {
|
|
|
1312
1312
|
return;
|
|
1313
1313
|
}
|
|
1314
1314
|
|
|
1315
|
-
${!theme.labels.message.footer[variant] && timestamp ? `const timestamp = \`\${colors.text.message.footer.${
|
|
1316
|
-
writeLine(colors.border.message.outline.${
|
|
1315
|
+
${!theme.labels.message.footer[variant] && timestamp ? `const timestamp = \`\${colors.text.message.footer.${color}(new Date().toLocaleDateString())} \${colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].bottom}")} \${colors.text.message.footer.${color}(new Date().toLocaleTimeString())}\`; ` : ""}
|
|
1316
|
+
writeLine(colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].topLeft}") + ${theme.labels.message.header[variant] || theme.icons.message.header[variant] ? `colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].top}".repeat(4)) + " " + ${theme.icons.message.header[variant] ? `colors.border.message.outline.${color}("${theme.icons.message.header[variant]}") + " " +` : ""} colors.bold(colors.text.message.header.${color}("${theme.labels.message.header[variant]}")) + " " + colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${Math.max(theme.padding.app, 0) * 2 + theme.borderStyles.message.outline[variant].topLeft.length + 4 + (theme.icons.message.header[variant] ? 2 + (theme.labels.message.header[variant] ? 0 : 1) : 0) + (theme.labels.message.header[variant] ? theme.labels.message.header[variant].length + 2 : 0) + theme.borderStyles.message.outline[variant].topRight.length}, 0)))` : `colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${Math.max(theme.padding.app, 0) * 2 + theme.borderStyles.message.outline[variant].topLeft.length + theme.borderStyles.message.outline[variant].topRight.length}, 0)))`} + colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} });
|
|
1317
1317
|
splitText(
|
|
1318
1318
|
message,
|
|
1319
1319
|
Math.max(process.stdout.columns - ${(Math.max(theme.padding.app, 0) + Math.max(theme.padding.message, 0)) * 2 + theme.borderStyles.message.outline[variant].left.length + theme.borderStyles.message.outline[variant].right.length}, 0)
|
|
1320
1320
|
).forEach((line) => {
|
|
1321
|
-
writeLine(colors.border.message.outline.${
|
|
1321
|
+
writeLine(colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].left + " ".repeat(Math.max(theme.padding.message, 0))}") + colors.text.message.description.${color}(line) + " ".repeat(Math.max(process.stdout.columns - (stripAnsi(line).length + ${Math.max(theme.padding.app, 0) * 2 + Math.max(theme.padding.message, 0) + theme.borderStyles.message.outline[variant].left.length + theme.borderStyles.message.outline[variant].right.length}), 0)) + colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
|
|
1322
1322
|
});
|
|
1323
|
-
writeLine(colors.border.message.outline.${
|
|
1323
|
+
writeLine(colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].bottomLeft}") + ${theme.labels.message.footer[variant] || timestamp ? `colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${Math.max(theme.padding.app, 0) * 2 + 4 + (theme.labels.message.footer[variant] ? theme.labels.message.footer[variant].length + 2 : 0) + theme.borderStyles.message.outline[variant].bottomLeft.length + theme.borderStyles.message.outline[variant].bottomRight.length}${!theme.labels.message.footer[variant] && timestamp ? " - (stripAnsi(timestamp).length + 2)" : ""}, 0))) + " " + ${`colors.bold(colors.text.message.footer.${color}(${theme.labels.message.footer[variant] ? `"${theme.labels.message.footer[variant]}"` : timestamp && "timestamp"}))`} + " " + colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].bottom}".repeat(4))` : `colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${Math.max(theme.padding.app, 0) * 2 + theme.borderStyles.message.outline[variant].bottomLeft.length + theme.borderStyles.message.outline[variant].bottomRight.length}, 0)))`} + colors.border.message.outline.${color}("${theme.borderStyles.message.outline[variant].bottomRight}"), { consoleFn: console.${consoleFnName} });
|
|
1324
1324
|
`)];
|
|
1325
1325
|
}
|
|
1326
1326
|
})];
|
|
@@ -2177,7 +2177,8 @@ function ConsoleBuiltin() {
|
|
|
2177
2177
|
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
2178
2178
|
(0, __alloy_js_core_jsx_runtime.createComponent)(MessageFunctionDeclaration, {
|
|
2179
2179
|
type: "verbose",
|
|
2180
|
-
variant: "
|
|
2180
|
+
variant: "info",
|
|
2181
|
+
color: "debug",
|
|
2181
2182
|
consoleFnName: "debug",
|
|
2182
2183
|
description: "verbose",
|
|
2183
2184
|
timestamp: true,
|