@duplojs/server 0.0.0-stage → 0.1.0-beta.10
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 +8 -2
- package/dist/_virtual/_rolldown/runtime.cjs +33 -0
- package/dist/_virtual/_rolldown/runtime.mjs +17 -0
- package/dist/command/argument.cjs +27 -0
- package/dist/command/argument.d.ts +18 -0
- package/dist/command/argument.mjs +24 -0
- package/dist/command/create.cjs +102 -0
- package/dist/command/create.d.ts +47 -0
- package/dist/command/create.mjs +96 -0
- package/dist/command/error.cjs +206 -0
- package/dist/command/error.d.ts +61 -0
- package/dist/command/error.mjs +193 -0
- package/dist/command/exec.cjs +19 -0
- package/dist/command/exec.d.ts +14 -0
- package/dist/command/exec.mjs +17 -0
- package/dist/command/execOptions.cjs +41 -0
- package/dist/command/execOptions.d.ts +14 -0
- package/dist/command/execOptions.mjs +37 -0
- package/dist/command/help.cjs +250 -0
- package/dist/command/help.d.ts +10 -0
- package/dist/command/help.mjs +237 -0
- package/dist/command/index.cjs +82 -0
- package/dist/command/index.d.ts +8 -0
- package/dist/command/index.mjs +47 -0
- package/dist/command/kind.cjs +7 -0
- package/dist/command/kind.d.ts +2 -0
- package/dist/command/kind.mjs +5 -0
- package/dist/command/options/base.cjs +76 -0
- package/dist/command/options/base.d.ts +30 -0
- package/dist/command/options/base.mjs +69 -0
- package/dist/command/options/defaults/array.cjs +35 -0
- package/dist/command/options/defaults/array.d.ts +26 -0
- package/dist/command/options/defaults/array.mjs +29 -0
- package/dist/command/options/defaults/boolean.cjs +28 -0
- package/dist/command/options/defaults/boolean.d.ts +14 -0
- package/dist/command/options/defaults/boolean.mjs +25 -0
- package/dist/command/options/defaults/index.d.ts +3 -0
- package/dist/command/options/defaults/simple.cjs +25 -0
- package/dist/command/options/defaults/simple.d.ts +18 -0
- package/dist/command/options/defaults/simple.mjs +22 -0
- package/dist/command/options/identifier.cjs +7 -0
- package/dist/command/options/identifier.d.ts +4 -0
- package/dist/command/options/identifier.mjs +5 -0
- package/dist/command/options/index.d.ts +4 -0
- package/dist/command/options/types/index.d.ts +1 -0
- package/dist/command/options/types/options.d.ts +9 -0
- package/dist/command/types/eligibleType.d.ts +4 -0
- package/dist/command/types/forbiddenDuplicateName.d.ts +11 -0
- package/dist/command/types/forbiddenInvalidIdentifier.d.ts +6 -0
- package/dist/command/types/index.d.ts +3 -0
- package/dist/common/environmentVariable/expandEnvironmentVariables.cjs +27 -0
- package/dist/common/environmentVariable/expandEnvironmentVariables.d.ts +2 -0
- package/dist/common/environmentVariable/expandEnvironmentVariables.mjs +22 -0
- package/dist/common/environmentVariable/index.cjs +47 -0
- package/dist/common/environmentVariable/index.d.ts +16 -0
- package/dist/common/environmentVariable/index.mjs +41 -0
- package/dist/common/environmentVariable/overrideEnvironmentVariables.cjs +13 -0
- package/dist/common/environmentVariable/overrideEnvironmentVariables.d.ts +3 -0
- package/dist/common/environmentVariable/overrideEnvironmentVariables.mjs +9 -0
- package/dist/common/environmentVariable/parseEnvironmentFiles.cjs +32 -0
- package/dist/common/environmentVariable/parseEnvironmentFiles.d.ts +5 -0
- package/dist/common/environmentVariable/parseEnvironmentFiles.mjs +26 -0
- package/dist/common/environmentVariableOrThrow.cjs +23 -0
- package/dist/common/environmentVariableOrThrow.d.ts +12 -0
- package/dist/common/environmentVariableOrThrow.mjs +19 -0
- package/dist/common/exitProcess.cjs +7 -0
- package/dist/common/exitProcess.d.ts +6 -0
- package/dist/common/exitProcess.mjs +8 -0
- package/dist/common/getCurrentWorkDirectory.cjs +15 -0
- package/dist/common/getCurrentWorkDirectory.d.ts +8 -0
- package/dist/common/getCurrentWorkDirectory.mjs +11 -0
- package/dist/common/getCurrentWorkDirectoryOrThrow.cjs +25 -0
- package/dist/common/getCurrentWorkDirectoryOrThrow.d.ts +8 -0
- package/dist/common/getCurrentWorkDirectoryOrThrow.mjs +20 -0
- package/dist/common/getProcessArguments.cjs +18 -0
- package/dist/common/getProcessArguments.d.ts +6 -0
- package/dist/common/getProcessArguments.mjs +18 -0
- package/dist/common/index.cjs +44 -0
- package/dist/common/index.d.ts +9 -0
- package/dist/common/index.mjs +27 -0
- package/dist/common/meta/getCurrentDirectoryName.cjs +10 -0
- package/dist/common/meta/getCurrentDirectoryName.d.ts +7 -0
- package/dist/common/meta/getCurrentDirectoryName.mjs +7 -0
- package/dist/common/meta/index.d.ts +7 -0
- package/dist/common/setCurrentWorkingDirectory.cjs +11 -0
- package/dist/common/setCurrentWorkingDirectory.d.ts +8 -0
- package/dist/common/setCurrentWorkingDirectory.mjs +9 -0
- package/dist/common/setCurrentWorkingDirectoryOrThrow.cjs +23 -0
- package/dist/common/setCurrentWorkingDirectoryOrThrow.d.ts +8 -0
- package/dist/common/setCurrentWorkingDirectoryOrThrow.mjs +18 -0
- package/dist/dataStructure/common/codec/defaults/index.d.ts +2 -0
- package/dist/dataStructure/common/codec/defaults/json.cjs +25 -0
- package/dist/dataStructure/common/codec/defaults/json.d.ts +9 -0
- package/dist/dataStructure/common/codec/defaults/json.mjs +22 -0
- package/dist/dataStructure/common/codec/defaults/string.cjs +25 -0
- package/dist/dataStructure/common/codec/defaults/string.d.ts +13 -0
- package/dist/dataStructure/common/codec/defaults/string.mjs +22 -0
- package/dist/dataStructure/common/codec/index.d.ts +1 -0
- package/dist/dataStructure/common/error/defaultInterpreter.cjs +29 -0
- package/dist/dataStructure/common/error/defaultInterpreter.d.ts +69 -0
- package/dist/dataStructure/common/error/defaultInterpreter.mjs +26 -0
- package/dist/dataStructure/common/error/index.d.ts +1 -0
- package/dist/dataStructure/common/index.d.ts +2 -0
- package/dist/dataStructure/constraint/fileExist.cjs +19 -0
- package/dist/dataStructure/constraint/fileExist.d.ts +10 -0
- package/dist/dataStructure/constraint/fileExist.mjs +15 -0
- package/dist/dataStructure/constraint/folderExist.cjs +19 -0
- package/dist/dataStructure/constraint/folderExist.d.ts +10 -0
- package/dist/dataStructure/constraint/folderExist.mjs +15 -0
- package/dist/dataStructure/constraint/index.d.ts +5 -0
- package/dist/dataStructure/constraint/mimeType.cjs +18 -0
- package/dist/dataStructure/constraint/mimeType.d.ts +11 -0
- package/dist/dataStructure/constraint/mimeType.mjs +14 -0
- package/dist/dataStructure/constraint/size.cjs +29 -0
- package/dist/dataStructure/constraint/size.d.ts +16 -0
- package/dist/dataStructure/constraint/size.mjs +24 -0
- package/dist/dataStructure/constraint/types/constraints.d.ts +12 -0
- package/dist/dataStructure/constraint/types/index.d.ts +1 -0
- package/dist/dataStructure/fundamentalType/file.cjs +11 -0
- package/dist/dataStructure/fundamentalType/file.d.ts +8 -0
- package/dist/dataStructure/fundamentalType/file.mjs +8 -0
- package/dist/dataStructure/fundamentalType/folder.cjs +11 -0
- package/dist/dataStructure/fundamentalType/folder.d.ts +8 -0
- package/dist/dataStructure/fundamentalType/folder.mjs +8 -0
- package/dist/dataStructure/fundamentalType/index.d.ts +3 -0
- package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +8 -0
- package/dist/dataStructure/fundamentalType/types/index.d.ts +1 -0
- package/dist/dataStructure/helper/file.cjs +10 -0
- package/dist/dataStructure/helper/file.d.ts +3 -0
- package/dist/dataStructure/helper/file.mjs +8 -0
- package/dist/dataStructure/helper/fileExist.cjs +7 -0
- package/dist/dataStructure/helper/fileExist.d.ts +2 -0
- package/dist/dataStructure/helper/fileExist.mjs +7 -0
- package/dist/dataStructure/helper/folder.cjs +10 -0
- package/dist/dataStructure/helper/folder.d.ts +3 -0
- package/dist/dataStructure/helper/folder.mjs +8 -0
- package/dist/dataStructure/helper/folderExist.cjs +7 -0
- package/dist/dataStructure/helper/folderExist.d.ts +2 -0
- package/dist/dataStructure/helper/folderExist.mjs +7 -0
- package/dist/dataStructure/helper/index.d.ts +6 -0
- package/dist/dataStructure/helper/mimeType.cjs +7 -0
- package/dist/dataStructure/helper/mimeType.d.ts +2 -0
- package/dist/dataStructure/helper/mimeType.mjs +7 -0
- package/dist/dataStructure/helper/size.cjs +7 -0
- package/dist/dataStructure/helper/size.d.ts +2 -0
- package/dist/dataStructure/helper/size.mjs +7 -0
- package/dist/dataStructure/index.cjs +83 -0
- package/dist/dataStructure/index.d.ts +6 -0
- package/dist/dataStructure/index.mjs +51 -0
- package/dist/dataStructure/kind.cjs +7 -0
- package/dist/dataStructure/kind.d.ts +2 -0
- package/dist/dataStructure/kind.mjs +5 -0
- package/dist/dataStructure/type/file.cjs +14 -0
- package/dist/dataStructure/type/file.d.ts +11 -0
- package/dist/dataStructure/type/file.mjs +11 -0
- package/dist/dataStructure/type/folder.cjs +14 -0
- package/dist/dataStructure/type/folder.d.ts +11 -0
- package/dist/dataStructure/type/folder.mjs +11 -0
- package/dist/dataStructure/type/index.d.ts +3 -0
- package/dist/dataStructure/type/types/index.d.ts +1 -0
- package/dist/dataStructure/type/types/types.d.ts +8 -0
- package/dist/file/appendFile.cjs +67 -0
- package/dist/file/appendFile.d.ts +43 -0
- package/dist/file/appendFile.mjs +54 -0
- package/dist/file/appendTextFile.cjs +67 -0
- package/dist/file/appendTextFile.d.ts +43 -0
- package/dist/file/appendTextFile.mjs +54 -0
- package/dist/file/copy.cjs +53 -0
- package/dist/file/copy.d.ts +43 -0
- package/dist/file/copy.mjs +40 -0
- package/dist/file/createEntryInterface.cjs +19 -0
- package/dist/file/createEntryInterface.d.ts +3 -0
- package/dist/file/createEntryInterface.mjs +15 -0
- package/dist/file/ensureDirectory.cjs +52 -0
- package/dist/file/ensureDirectory.d.ts +36 -0
- package/dist/file/ensureDirectory.mjs +41 -0
- package/dist/file/ensureFile.cjs +60 -0
- package/dist/file/ensureFile.d.ts +39 -0
- package/dist/file/ensureFile.mjs +48 -0
- package/dist/file/exists.cjs +43 -0
- package/dist/file/exists.d.ts +27 -0
- package/dist/file/exists.mjs +35 -0
- package/dist/file/fileInterface.cjs +76 -0
- package/dist/file/fileInterface.d.ts +31 -0
- package/dist/file/fileInterface.mjs +70 -0
- package/dist/file/folderInterface.cjs +76 -0
- package/dist/file/folderInterface.d.ts +33 -0
- package/dist/file/folderInterface.mjs +70 -0
- package/dist/file/index.cjs +634 -0
- package/dist/file/index.d.ts +35 -0
- package/dist/file/index.mjs +335 -0
- package/dist/file/link.cjs +70 -0
- package/dist/file/link.d.ts +46 -0
- package/dist/file/link.mjs +56 -0
- package/dist/file/linkStat.cjs +98 -0
- package/dist/file/linkStat.d.ts +31 -0
- package/dist/file/linkStat.mjs +88 -0
- package/dist/file/makeDirectory.cjs +60 -0
- package/dist/file/makeDirectory.d.ts +45 -0
- package/dist/file/makeDirectory.mjs +47 -0
- package/dist/file/makeTemporaryDirectory.cjs +48 -0
- package/dist/file/makeTemporaryDirectory.d.ts +32 -0
- package/dist/file/makeTemporaryDirectory.mjs +38 -0
- package/dist/file/makeTemporaryFile.cjs +62 -0
- package/dist/file/makeTemporaryFile.d.ts +36 -0
- package/dist/file/makeTemporaryFile.mjs +50 -0
- package/dist/file/move.cjs +71 -0
- package/dist/file/move.d.ts +46 -0
- package/dist/file/move.mjs +57 -0
- package/dist/file/readDirectory.cjs +44 -0
- package/dist/file/readDirectory.d.ts +35 -0
- package/dist/file/readDirectory.mjs +33 -0
- package/dist/file/readFile.cjs +51 -0
- package/dist/file/readFile.d.ts +33 -0
- package/dist/file/readFile.mjs +41 -0
- package/dist/file/readJsonFile.cjs +51 -0
- package/dist/file/readJsonFile.d.ts +33 -0
- package/dist/file/readJsonFile.mjs +41 -0
- package/dist/file/readLink.cjs +46 -0
- package/dist/file/readLink.d.ts +30 -0
- package/dist/file/readLink.mjs +37 -0
- package/dist/file/readTextFile.cjs +51 -0
- package/dist/file/readTextFile.d.ts +33 -0
- package/dist/file/readTextFile.mjs +41 -0
- package/dist/file/realPath.cjs +42 -0
- package/dist/file/realPath.d.ts +27 -0
- package/dist/file/realPath.mjs +34 -0
- package/dist/file/relocate.cjs +83 -0
- package/dist/file/relocate.d.ts +46 -0
- package/dist/file/relocate.mjs +68 -0
- package/dist/file/remove.cjs +60 -0
- package/dist/file/remove.d.ts +42 -0
- package/dist/file/remove.mjs +48 -0
- package/dist/file/rename.cjs +83 -0
- package/dist/file/rename.d.ts +46 -0
- package/dist/file/rename.mjs +68 -0
- package/dist/file/setMode.cjs +65 -0
- package/dist/file/setMode.d.ts +45 -0
- package/dist/file/setMode.mjs +56 -0
- package/dist/file/setOwner.cjs +53 -0
- package/dist/file/setOwner.d.ts +35 -0
- package/dist/file/setOwner.mjs +44 -0
- package/dist/file/setTime.cjs +55 -0
- package/dist/file/setTime.d.ts +36 -0
- package/dist/file/setTime.mjs +45 -0
- package/dist/file/stat.cjs +99 -0
- package/dist/file/stat.d.ts +62 -0
- package/dist/file/stat.mjs +89 -0
- package/dist/file/symlink.cjs +64 -0
- package/dist/file/symlink.d.ts +48 -0
- package/dist/file/symlink.mjs +52 -0
- package/dist/file/truncate.cjs +60 -0
- package/dist/file/truncate.d.ts +42 -0
- package/dist/file/truncate.mjs +47 -0
- package/dist/file/unknownEntryInterface.cjs +40 -0
- package/dist/file/unknownEntryInterface.d.ts +17 -0
- package/dist/file/unknownEntryInterface.mjs +35 -0
- package/dist/file/walkDirectory.cjs +57 -0
- package/dist/file/walkDirectory.d.ts +37 -0
- package/dist/file/walkDirectory.mjs +45 -0
- package/dist/file/writeFile.cjs +68 -0
- package/dist/file/writeFile.d.ts +43 -0
- package/dist/file/writeFile.mjs +55 -0
- package/dist/file/writeJsonFile.cjs +77 -0
- package/dist/file/writeJsonFile.d.ts +46 -0
- package/dist/file/writeJsonFile.mjs +64 -0
- package/dist/file/writeTextFile.cjs +68 -0
- package/dist/file/writeTextFile.d.ts +43 -0
- package/dist/file/writeTextFile.mjs +55 -0
- package/dist/implementor.cjs +67 -0
- package/dist/implementor.d.ts +35 -0
- package/dist/implementor.mjs +55 -0
- package/dist/index.cjs +76 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.mjs +15 -0
- package/dist/kind.cjs +7 -0
- package/dist/kind.d.ts +2 -0
- package/dist/kind.mjs +5 -0
- package/dist/override.d.ts +8 -0
- package/package.json +81 -3
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { defaultErrorInterpreterCodecDictionary, defaultErrorInterpreterDataStructureDictionary } from "../dataStructure/common/error/defaultInterpreter.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DPattern from "@duplojs/lang/pattern";
|
|
4
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
5
|
+
import * as DArray from "@duplojs/lang/array";
|
|
6
|
+
import * as DString from "@duplojs/lang/string";
|
|
7
|
+
import * as DPrinter from "@duplojs/lang/printer";
|
|
8
|
+
import * as DModeling from "@duplojs/lang/modeling";
|
|
9
|
+
//#region scripts/command/error.ts
|
|
10
|
+
const SymbolCommandError = Symbol.for("SymbolCommandError");
|
|
11
|
+
function createError(commandName) {
|
|
12
|
+
const issues = [];
|
|
13
|
+
const currentPath = [commandName];
|
|
14
|
+
return {
|
|
15
|
+
issues,
|
|
16
|
+
currentPath,
|
|
17
|
+
pushPath: (path) => void currentPath.push(path),
|
|
18
|
+
addUnknownOptionIssue: (optionTokens) => {
|
|
19
|
+
issues.push(DModeling.taggedObject("UnknownOptionIssue", {
|
|
20
|
+
optionTokens,
|
|
21
|
+
path: DString.join(currentPath, ".")
|
|
22
|
+
}));
|
|
23
|
+
return SymbolCommandError;
|
|
24
|
+
},
|
|
25
|
+
addUnknownSubCommandIssue: (subCommandName) => {
|
|
26
|
+
issues.push(DModeling.taggedObject("UnknownSubCommandIssue", {
|
|
27
|
+
subCommandName,
|
|
28
|
+
path: DString.join(currentPath, ".")
|
|
29
|
+
}));
|
|
30
|
+
return SymbolCommandError;
|
|
31
|
+
},
|
|
32
|
+
addRequiredOptionIssue: (optionName) => {
|
|
33
|
+
issues.push(DModeling.taggedObject("RequiredOptionIssue", {
|
|
34
|
+
optionName,
|
|
35
|
+
data: void 0,
|
|
36
|
+
path: currentPath.join(".")
|
|
37
|
+
}));
|
|
38
|
+
return SymbolCommandError;
|
|
39
|
+
},
|
|
40
|
+
addRequiredOptionValueIssue: (optionName) => {
|
|
41
|
+
issues.push(DModeling.taggedObject("RequiredOptionValueIssue", {
|
|
42
|
+
optionName,
|
|
43
|
+
data: void 0,
|
|
44
|
+
path: currentPath.join(".")
|
|
45
|
+
}));
|
|
46
|
+
return SymbolCommandError;
|
|
47
|
+
},
|
|
48
|
+
addUnexpectedOptionValueIssue: (optionName, data) => {
|
|
49
|
+
issues.push(DModeling.taggedObject("UnexpectedOptionValueIssue", {
|
|
50
|
+
optionName,
|
|
51
|
+
data,
|
|
52
|
+
path: currentPath.join(".")
|
|
53
|
+
}));
|
|
54
|
+
return SymbolCommandError;
|
|
55
|
+
},
|
|
56
|
+
addDataStructureOptionIssue: (optionName, data, dataStructureError) => {
|
|
57
|
+
issues.push(DModeling.taggedObject("DataStructureOptionIssue", {
|
|
58
|
+
optionName,
|
|
59
|
+
data,
|
|
60
|
+
dataStructureError,
|
|
61
|
+
path: currentPath.join(".")
|
|
62
|
+
}));
|
|
63
|
+
return SymbolCommandError;
|
|
64
|
+
},
|
|
65
|
+
addRequiredArgumentIssue: (argumentName) => {
|
|
66
|
+
issues.push(DModeling.taggedObject("RequiredArgumentIssue", {
|
|
67
|
+
argumentName,
|
|
68
|
+
data: void 0,
|
|
69
|
+
path: currentPath.join(".")
|
|
70
|
+
}));
|
|
71
|
+
return SymbolCommandError;
|
|
72
|
+
},
|
|
73
|
+
addDataStructureArgumentIssue: (argumentName, data, dataStructureError) => {
|
|
74
|
+
issues.push(DModeling.taggedObject("DataStructureArgumentIssue", {
|
|
75
|
+
argumentName,
|
|
76
|
+
data,
|
|
77
|
+
dataStructureError,
|
|
78
|
+
path: currentPath.join(".")
|
|
79
|
+
}));
|
|
80
|
+
return SymbolCommandError;
|
|
81
|
+
},
|
|
82
|
+
addTooMuchCommandArgumentIssue: (expect, receive) => {
|
|
83
|
+
issues.push(DModeling.taggedObject("TooMuchCommandArgumentIssue", {
|
|
84
|
+
expect,
|
|
85
|
+
receive,
|
|
86
|
+
path: currentPath.join(".")
|
|
87
|
+
}));
|
|
88
|
+
return SymbolCommandError;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function interpretDataStructureError(error, dataStructureErrorInterpreter) {
|
|
93
|
+
return DCommon.pipe(dataStructureErrorInterpreter(error), DArray.map(({ interpretedMessage, path }) => DPrinter.renderLine([
|
|
94
|
+
"↳ ",
|
|
95
|
+
DPrinter.colorizedBold(path || "<value>", "cyan"),
|
|
96
|
+
" : ",
|
|
97
|
+
DPrinter.colorizedBold(interpretedMessage.subSource ?? interpretedMessage.interpretedSubSource ?? interpretedMessage.source ?? interpretedMessage.interpretedSource ?? "unknown data structure error.", "red")
|
|
98
|
+
], {
|
|
99
|
+
joinCharacter: "",
|
|
100
|
+
indent: DPrinter.Indent.tab,
|
|
101
|
+
indentLevel: 1
|
|
102
|
+
})));
|
|
103
|
+
}
|
|
104
|
+
function interpretErrorIssues(issues, dataStructureErrorInterpreter) {
|
|
105
|
+
return DPrinter.renderParagraph([DArray.map(issues, DPattern.matchWithTaggedObject({
|
|
106
|
+
UnknownOptionIssue: ({ optionTokens }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), DString.join(optionTokens, ", ")], {
|
|
107
|
+
joinCharacter: "",
|
|
108
|
+
indent: DPrinter.Indent.tab,
|
|
109
|
+
indentLevel: 1
|
|
110
|
+
}), DPrinter.renderLine(["↳ Unknown Option"], {
|
|
111
|
+
indent: DPrinter.Indent.tab,
|
|
112
|
+
indentLevel: 1
|
|
113
|
+
})],
|
|
114
|
+
UnknownSubCommandIssue: ({ subCommandName }) => [DPrinter.renderLine([DPrinter.colorizedBold("SUB-COMMAND: ", "cyan"), subCommandName], {
|
|
115
|
+
joinCharacter: "",
|
|
116
|
+
indent: DPrinter.Indent.tab,
|
|
117
|
+
indentLevel: 1
|
|
118
|
+
}), DPrinter.renderLine(["↳ Unknown Sub-command"], {
|
|
119
|
+
indent: DPrinter.Indent.tab,
|
|
120
|
+
indentLevel: 1
|
|
121
|
+
})],
|
|
122
|
+
DataStructureArgumentIssue: ({ argumentName, dataStructureError }) => [DPrinter.renderLine([DPrinter.colorizedBold("ARGUMENT: ", "magenta"), `--${argumentName}`], {
|
|
123
|
+
joinCharacter: "",
|
|
124
|
+
indent: DPrinter.Indent.tab,
|
|
125
|
+
indentLevel: 1
|
|
126
|
+
}), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
|
|
127
|
+
RequiredArgumentIssue: ({ argumentName }) => [DPrinter.renderLine([DPrinter.colorizedBold("ARGUMENT: ", "magenta"), argumentName], {
|
|
128
|
+
joinCharacter: "",
|
|
129
|
+
indent: DPrinter.Indent.tab,
|
|
130
|
+
indentLevel: 1
|
|
131
|
+
}), DPrinter.renderLine(["↳ Missing Argument"], {
|
|
132
|
+
indent: DPrinter.Indent.tab,
|
|
133
|
+
indentLevel: 1
|
|
134
|
+
})],
|
|
135
|
+
DataStructureOptionIssue: ({ optionName, dataStructureError }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
|
|
136
|
+
joinCharacter: "",
|
|
137
|
+
indent: DPrinter.Indent.tab,
|
|
138
|
+
indentLevel: 1
|
|
139
|
+
}), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
|
|
140
|
+
RequiredOptionIssue: ({ optionName }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
|
|
141
|
+
joinCharacter: "",
|
|
142
|
+
indent: DPrinter.Indent.tab,
|
|
143
|
+
indentLevel: 1
|
|
144
|
+
}), DPrinter.renderLine(["↳ Missing Option"], {
|
|
145
|
+
indent: DPrinter.Indent.tab,
|
|
146
|
+
indentLevel: 1
|
|
147
|
+
})],
|
|
148
|
+
RequiredOptionValueIssue: ({ optionName }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
|
|
149
|
+
joinCharacter: "",
|
|
150
|
+
indent: DPrinter.Indent.tab,
|
|
151
|
+
indentLevel: 1
|
|
152
|
+
}), DPrinter.renderLine(["↳ Missing Option Value"], {
|
|
153
|
+
indent: DPrinter.Indent.tab,
|
|
154
|
+
indentLevel: 1
|
|
155
|
+
})],
|
|
156
|
+
UnexpectedOptionValueIssue: ({ optionName }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
|
|
157
|
+
joinCharacter: "",
|
|
158
|
+
indent: DPrinter.Indent.tab,
|
|
159
|
+
indentLevel: 1
|
|
160
|
+
}), DPrinter.renderLine(["↳ Unexpected Value At This Option"], {
|
|
161
|
+
indent: DPrinter.Indent.tab,
|
|
162
|
+
indentLevel: 1
|
|
163
|
+
})],
|
|
164
|
+
TooMuchCommandArgumentIssue: ({ expect, receive }) => [DPrinter.renderLine([" Too Much Arguments"], {
|
|
165
|
+
indent: DPrinter.Indent.tab,
|
|
166
|
+
indentLevel: 1
|
|
167
|
+
}), DPrinter.renderLine([` expect: ${expect} receive: ${receive}`], {
|
|
168
|
+
indent: DPrinter.Indent.tab,
|
|
169
|
+
indentLevel: 1
|
|
170
|
+
})]
|
|
171
|
+
})), issues.length === 0 && "No issue found"]);
|
|
172
|
+
}
|
|
173
|
+
const defaultDataStructureErrorInterpreter = DDataStructure.createErrorInterpreter(defaultErrorInterpreterDataStructureDictionary, defaultErrorInterpreterCodecDictionary);
|
|
174
|
+
function interpretExecCommandError(error, dataStructureErrorInterpreter) {
|
|
175
|
+
return DPrinter.renderParagraph([
|
|
176
|
+
DPrinter.colorizedBold("Command failed", "red"),
|
|
177
|
+
DPrinter.renderLine([DPrinter.colorizedBold("COMMAND: ", "cyan"), DString.join(error.currentPath, " ")], {
|
|
178
|
+
joinCharacter: "",
|
|
179
|
+
indent: DPrinter.Indent.tab,
|
|
180
|
+
indentLevel: 1
|
|
181
|
+
}),
|
|
182
|
+
interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)
|
|
183
|
+
]);
|
|
184
|
+
}
|
|
185
|
+
function interpretExecOptionsError(error, dataStructureErrorInterpreter) {
|
|
186
|
+
return DPrinter.renderParagraph([
|
|
187
|
+
DPrinter.colorizedBold("Invalid options", "red"),
|
|
188
|
+
["", ""],
|
|
189
|
+
interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)
|
|
190
|
+
]);
|
|
191
|
+
}
|
|
192
|
+
//#endregion
|
|
193
|
+
export { SymbolCommandError, createError, interpretDataStructureError, interpretErrorIssues, interpretExecCommandError, interpretExecOptionsError };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_getProcessArguments = require("../common/getProcessArguments.cjs");
|
|
3
|
+
const require_error = require("./error.cjs");
|
|
4
|
+
const require_create = require("./create.cjs");
|
|
5
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
6
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
7
|
+
//#region scripts/command/exec.ts
|
|
8
|
+
async function exec(...args) {
|
|
9
|
+
const [params, execute] = args.length === 1 ? [{}, args[0]] : args;
|
|
10
|
+
const displayName = params.displayName ?? "root";
|
|
11
|
+
const error = require_error.createError(displayName);
|
|
12
|
+
if (await require_create.create(displayName, params, execute).execute(require_getProcessArguments.getProcessArguments(), error) === require_error.SymbolCommandError) {
|
|
13
|
+
console.error(require_error.interpretExecCommandError(error, params?.dataStructureErrorInterpreter));
|
|
14
|
+
return _duplojs_lang_either.error(error);
|
|
15
|
+
}
|
|
16
|
+
return _duplojs_lang_either.ok();
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
exports.exec = exec;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CreateCommandExecuteParams, CreateCommandParams, Subjects } from './create';
|
|
2
|
+
import { Error } from './error';
|
|
3
|
+
import { Option } from './options';
|
|
4
|
+
import { Argument } from './argument';
|
|
5
|
+
import { ForbiddenInvalidIdentifier } from './types';
|
|
6
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
7
|
+
import * as DEither from "@duplojs/lang/either";
|
|
8
|
+
import type * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
9
|
+
export interface ExecCommandParams<GenericOptions extends DCommon.AnyTuple<Option> = DCommon.AnyTuple<Option>, GenericSubjects extends Subjects = Subjects, GenericDisplayName extends string = string> extends CreateCommandParams<GenericOptions, GenericSubjects> {
|
|
10
|
+
displayName?: GenericDisplayName & ForbiddenInvalidIdentifier<GenericDisplayName>;
|
|
11
|
+
dataStructureErrorInterpreter?: DDataStructure.ErrorInterpreter;
|
|
12
|
+
}
|
|
13
|
+
export declare function exec(execute: () => void): Promise<DEither.Ok | DEither.Error<Error>>;
|
|
14
|
+
export declare function exec<const GenericOptions extends DCommon.AnyTuple<Option> = never, GenericSubjects extends Subjects = never, const GenericDisplayName extends string = string>(params: ExecCommandParams<GenericOptions, GenericSubjects, GenericDisplayName>, execute: (params: CreateCommandExecuteParams<GenericOptions, Extract<GenericSubjects, DCommon.AnyTuple<Argument>>>) => DCommon.MaybePromise<void>): Promise<DEither.Ok | DEither.Error<Error>>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getProcessArguments } from "../common/getProcessArguments.mjs";
|
|
2
|
+
import { SymbolCommandError, createError, interpretExecCommandError } from "./error.mjs";
|
|
3
|
+
import { create } from "./create.mjs";
|
|
4
|
+
import * as DEither from "@duplojs/lang/either";
|
|
5
|
+
//#region scripts/command/exec.ts
|
|
6
|
+
async function exec(...args) {
|
|
7
|
+
const [params, execute] = args.length === 1 ? [{}, args[0]] : args;
|
|
8
|
+
const displayName = params.displayName ?? "root";
|
|
9
|
+
const error = createError(displayName);
|
|
10
|
+
if (await create(displayName, params, execute).execute(getProcessArguments(), error) === SymbolCommandError) {
|
|
11
|
+
console.error(interpretExecCommandError(error, params?.dataStructureErrorInterpreter));
|
|
12
|
+
return DEither.error(error);
|
|
13
|
+
}
|
|
14
|
+
return DEither.ok();
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { exec };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_getProcessArguments = require("../common/getProcessArguments.cjs");
|
|
3
|
+
const require_error = require("./error.cjs");
|
|
4
|
+
const require_help = require("./help.cjs");
|
|
5
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
6
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
7
|
+
let _duplojs_lang_object = require("@duplojs/lang/object");
|
|
8
|
+
_duplojs_lang_object = require_runtime.__toESM(_duplojs_lang_object, 1);
|
|
9
|
+
let _duplojs_lang_generator = require("@duplojs/lang/generator");
|
|
10
|
+
_duplojs_lang_generator = require_runtime.__toESM(_duplojs_lang_generator, 1);
|
|
11
|
+
//#region scripts/command/execOptions.ts
|
|
12
|
+
async function execOptions(options, params) {
|
|
13
|
+
const processArguments = require_getProcessArguments.getProcessArguments();
|
|
14
|
+
const error = require_error.createError("root");
|
|
15
|
+
const help = await require_help.helpOption.execute(processArguments, error);
|
|
16
|
+
if (help === require_error.SymbolCommandError) {
|
|
17
|
+
console.error(require_error.interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
|
|
18
|
+
return _duplojs_lang_either.error(error);
|
|
19
|
+
} else if (help.result) {
|
|
20
|
+
require_help.logExecOptionHelp(options);
|
|
21
|
+
return _duplojs_lang_either.right("log-help");
|
|
22
|
+
}
|
|
23
|
+
const result = await _duplojs_lang_generator.asyncReduce(options, _duplojs_lang_generator.reduceFrom({
|
|
24
|
+
options: {},
|
|
25
|
+
restArgs: processArguments
|
|
26
|
+
}), async ({ item: option, lastValue, next, exit }) => {
|
|
27
|
+
const optionResult = await option.execute(lastValue.restArgs, error);
|
|
28
|
+
if (optionResult === require_error.SymbolCommandError) return exit(require_error.SymbolCommandError);
|
|
29
|
+
return next({
|
|
30
|
+
options: _duplojs_lang_object.override(lastValue.options, { [option.name]: optionResult.result }),
|
|
31
|
+
restArgs: optionResult.argumentRest
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
if (result === require_error.SymbolCommandError) {
|
|
35
|
+
console.error(require_error.interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
|
|
36
|
+
return _duplojs_lang_either.error(error);
|
|
37
|
+
}
|
|
38
|
+
return _duplojs_lang_either.success(result.options);
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
exports.execOptions = execOptions;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Error } from './error';
|
|
2
|
+
import { Option } from './options';
|
|
3
|
+
import { ForbiddenDuplicateName } from './types';
|
|
4
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
5
|
+
import * as DEither from "@duplojs/lang/either";
|
|
6
|
+
import type * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
7
|
+
type ComputeResult<GenericOptions extends DCommon.AnyTuple<Option>> = DCommon.SimplifyTopLevel<{
|
|
8
|
+
readonly [GenericOption in GenericOptions[number] as GenericOption extends Option<infer GenericName, unknown> ? GenericName : never]: GenericOption extends Option<string, infer GenericResult> ? GenericResult : never;
|
|
9
|
+
}>;
|
|
10
|
+
export interface ExecOptionsParams {
|
|
11
|
+
dataStructureErrorInterpreter?: DDataStructure.ErrorInterpreter;
|
|
12
|
+
}
|
|
13
|
+
export declare function execOptions<GenericOptions extends DCommon.AnyTuple<Option>>(options: GenericOptions & ForbiddenDuplicateName<GenericOptions, "option">, params?: ExecOptionsParams): Promise<DEither.Success<Extract<ComputeResult<GenericOptions>, any>> | DEither.Right<"log-help"> | DEither.Error<Error>>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getProcessArguments } from "../common/getProcessArguments.mjs";
|
|
2
|
+
import { SymbolCommandError, createError, interpretExecOptionsError } from "./error.mjs";
|
|
3
|
+
import { helpOption, logExecOptionHelp } from "./help.mjs";
|
|
4
|
+
import * as DEither from "@duplojs/lang/either";
|
|
5
|
+
import * as DObject from "@duplojs/lang/object";
|
|
6
|
+
import * as DGenerator from "@duplojs/lang/generator";
|
|
7
|
+
//#region scripts/command/execOptions.ts
|
|
8
|
+
async function execOptions(options, params) {
|
|
9
|
+
const processArguments = getProcessArguments();
|
|
10
|
+
const error = createError("root");
|
|
11
|
+
const help = await helpOption.execute(processArguments, error);
|
|
12
|
+
if (help === SymbolCommandError) {
|
|
13
|
+
console.error(interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
|
|
14
|
+
return DEither.error(error);
|
|
15
|
+
} else if (help.result) {
|
|
16
|
+
logExecOptionHelp(options);
|
|
17
|
+
return DEither.right("log-help");
|
|
18
|
+
}
|
|
19
|
+
const result = await DGenerator.asyncReduce(options, DGenerator.reduceFrom({
|
|
20
|
+
options: {},
|
|
21
|
+
restArgs: processArguments
|
|
22
|
+
}), async ({ item: option, lastValue, next, exit }) => {
|
|
23
|
+
const optionResult = await option.execute(lastValue.restArgs, error);
|
|
24
|
+
if (optionResult === SymbolCommandError) return exit(SymbolCommandError);
|
|
25
|
+
return next({
|
|
26
|
+
options: DObject.override(lastValue.options, { [option.name]: optionResult.result }),
|
|
27
|
+
restArgs: optionResult.argumentRest
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
if (result === SymbolCommandError) {
|
|
31
|
+
console.error(interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
|
|
32
|
+
return DEither.error(error);
|
|
33
|
+
}
|
|
34
|
+
return DEither.success(result.options);
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { execOptions };
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_fileExist = require("../dataStructure/constraint/fileExist.cjs");
|
|
3
|
+
const require_folderExist = require("../dataStructure/constraint/folderExist.cjs");
|
|
4
|
+
const require_mimeType = require("../dataStructure/constraint/mimeType.cjs");
|
|
5
|
+
const require_size = require("../dataStructure/constraint/size.cjs");
|
|
6
|
+
const require_file = require("../dataStructure/type/file.cjs");
|
|
7
|
+
const require_folder = require("../dataStructure/type/folder.cjs");
|
|
8
|
+
const require_array = require("./options/defaults/array.cjs");
|
|
9
|
+
const require_boolean = require("./options/defaults/boolean.cjs");
|
|
10
|
+
const require_simple = require("./options/defaults/simple.cjs");
|
|
11
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
12
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
13
|
+
let _duplojs_lang_pattern = require("@duplojs/lang/pattern");
|
|
14
|
+
_duplojs_lang_pattern = require_runtime.__toESM(_duplojs_lang_pattern, 1);
|
|
15
|
+
let _duplojs_lang_dataStructure = require("@duplojs/lang/dataStructure");
|
|
16
|
+
_duplojs_lang_dataStructure = require_runtime.__toESM(_duplojs_lang_dataStructure, 1);
|
|
17
|
+
let _duplojs_lang_array = require("@duplojs/lang/array");
|
|
18
|
+
_duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
|
|
19
|
+
let _duplojs_lang_string = require("@duplojs/lang/string");
|
|
20
|
+
_duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
|
|
21
|
+
let _duplojs_lang_printer = require("@duplojs/lang/printer");
|
|
22
|
+
_duplojs_lang_printer = require_runtime.__toESM(_duplojs_lang_printer, 1);
|
|
23
|
+
//#region scripts/command/help.ts
|
|
24
|
+
const helpOption = require_boolean.createBooleanOption("help", { aliases: ["h"] });
|
|
25
|
+
const syntax = (input) => _duplojs_lang_printer.colorized(input, "gray");
|
|
26
|
+
const section = (input, color) => _duplojs_lang_printer.colorizedBold(input, color);
|
|
27
|
+
const name = (input) => _duplojs_lang_printer.colorizedBold(input, "cyan");
|
|
28
|
+
const typeLabel = (input) => _duplojs_lang_printer.colorized(input, "blue");
|
|
29
|
+
const literal = (input) => _duplojs_lang_printer.colorized(input, "yellow");
|
|
30
|
+
const marker = (input) => _duplojs_lang_printer.colorized(input, "yellow");
|
|
31
|
+
const secondary = (input) => _duplojs_lang_printer.colorized(input, "gray");
|
|
32
|
+
const constraintLabel = (input) => _duplojs_lang_printer.colorized(input, "magenta");
|
|
33
|
+
function renderInline(input, depth = 0) {
|
|
34
|
+
return _duplojs_lang_printer.renderLine(input, {
|
|
35
|
+
joinCharacter: "",
|
|
36
|
+
indent: _duplojs_lang_printer.Indent.tab,
|
|
37
|
+
indentLevel: depth
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function formatLiteral(value) {
|
|
41
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
42
|
+
if (typeof value === "bigint") return `${value.toString()}n`;
|
|
43
|
+
return String(value);
|
|
44
|
+
}
|
|
45
|
+
function formatBytes(value) {
|
|
46
|
+
const units = [
|
|
47
|
+
"B",
|
|
48
|
+
"KB",
|
|
49
|
+
"MB",
|
|
50
|
+
"GB",
|
|
51
|
+
"TB"
|
|
52
|
+
];
|
|
53
|
+
let size = value;
|
|
54
|
+
let index = 0;
|
|
55
|
+
while (size >= 1024 && index < units.length - 1) {
|
|
56
|
+
size = size / 1024;
|
|
57
|
+
index++;
|
|
58
|
+
}
|
|
59
|
+
return `${Number.isInteger(size) ? size : size.toFixed(1)} ${units[index]}`;
|
|
60
|
+
}
|
|
61
|
+
function renderType(type) {
|
|
62
|
+
return _duplojs_lang_pattern.match(type).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.nullTypeKind), _duplojs_lang_common.justReturn([literal("null")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.undefinedTypeKind), _duplojs_lang_common.justReturn([literal("undefined")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringTypeKind), _duplojs_lang_common.justReturn([typeLabel("string")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberTypeKind), _duplojs_lang_common.justReturn([typeLabel("number")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintTypeKind), _duplojs_lang_common.justReturn([typeLabel("bigint")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanTypeKind), _duplojs_lang_common.justReturn([typeLabel("boolean")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.dateTypeKind), _duplojs_lang_common.justReturn([typeLabel("date")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.timeTypeKind), _duplojs_lang_common.justReturn([typeLabel("time")])).when(_duplojs_lang_dataStructure.typeIdentifier(require_file.fileTypeKind), _duplojs_lang_common.justReturn([typeLabel("file")])).when(_duplojs_lang_dataStructure.typeIdentifier(require_folder.folderTypeKind), _duplojs_lang_common.justReturn([typeLabel("folder")])).otherwise(_duplojs_lang_common.justReturn([typeLabel("unknown")]));
|
|
63
|
+
}
|
|
64
|
+
function renderStringLength(constraints) {
|
|
65
|
+
const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.stringLengthEqualConstraintKind));
|
|
66
|
+
const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minCharactersConstraintKind));
|
|
67
|
+
const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxCharactersConstraintKind));
|
|
68
|
+
if (equal) return [constraintLabel("length "), literal(String(equal.definition.length))];
|
|
69
|
+
if (min && max) return [constraintLabel("length "), literal(`${min.definition.min}..${max.definition.max}`)];
|
|
70
|
+
if (min) return [constraintLabel("min length "), literal(String(min.definition.min))];
|
|
71
|
+
if (max) return [constraintLabel("max length "), literal(String(max.definition.max))];
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function renderArrayLength(constraints) {
|
|
75
|
+
const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.arrayLengthEqualConstraintKind));
|
|
76
|
+
const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minElementsConstraintKind));
|
|
77
|
+
const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxElementsConstraintKind));
|
|
78
|
+
if (equal) return [constraintLabel("items "), literal(String(equal.definition.length))];
|
|
79
|
+
if (min && max) return [constraintLabel("items "), literal(`${min.definition.min}..${max.definition.max}`)];
|
|
80
|
+
if (min) return [constraintLabel("min items "), literal(String(min.definition.min))];
|
|
81
|
+
if (max) return [constraintLabel("max items "), literal(String(max.definition.max))];
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
function renderNumberBounds(constraints) {
|
|
85
|
+
const greaterThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanConstraintKind));
|
|
86
|
+
const greaterThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanOrEqualConstraintKind));
|
|
87
|
+
const lessThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanConstraintKind));
|
|
88
|
+
const lessThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanOrEqualConstraintKind));
|
|
89
|
+
return _duplojs_lang_array.filter([greaterThan ? [constraintLabel("> "), literal(String(greaterThan.definition.threshold))] : greaterThanOrEqual ? [constraintLabel("min "), literal(String(greaterThanOrEqual.definition.threshold))] : null, lessThan ? [constraintLabel("< "), literal(String(lessThan.definition.threshold))] : lessThanOrEqual ? [constraintLabel("max "), literal(String(lessThanOrEqual.definition.threshold))] : null], _duplojs_lang_common.truthy);
|
|
90
|
+
}
|
|
91
|
+
function renderSimpleConstraint(constraint) {
|
|
92
|
+
return _duplojs_lang_pattern.match(constraint).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.emailConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("email")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.urlConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("url")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.uuidConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("uuid")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.integerConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("integer")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.trimmedConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("trimmed")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notEmptyConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not empty")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.numberInStringConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("number in string")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.evenConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("even")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.oddConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("odd")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.positiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("positive")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.negativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("negative")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notZeroConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not zero")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.safeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("safe number")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.pathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.absolutePathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("absolute path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.segmentPathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path segment")])).when(_duplojs_lang_dataStructure.constraintIdentifier(require_fileExist.fileExistConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("exists")])).when(_duplojs_lang_dataStructure.constraintIdentifier(require_folderExist.folderExistConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("exists")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictPositiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("> "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictNegativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("< "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.betweenThanConstraintKind), ({ definition }) => [
|
|
93
|
+
constraintLabel("> "),
|
|
94
|
+
literal(String(definition.greater)),
|
|
95
|
+
secondary(" and "),
|
|
96
|
+
constraintLabel("< "),
|
|
97
|
+
literal(String(definition.less))
|
|
98
|
+
]).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.betweenThanOrEqualConstraintKind), ({ definition }) => [constraintLabel("range "), literal(`${definition.greater}..${definition.less}`)]).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.multipleOfConstraintKind), ({ definition }) => [constraintLabel("multiple of "), literal(String(definition.multiple))]).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.regexConstraintKind), ({ definition }) => [constraintLabel("pattern "), literal(definition.regex.toString())]).when(_duplojs_lang_dataStructure.constraintIdentifier(require_mimeType.mimeTypeConstraintKind), ({ definition }) => [constraintLabel("mime "), literal(definition.regex.toString())]).when(_duplojs_lang_dataStructure.constraintIdentifier(require_size.sizeConstraintKind), (constraint) => {
|
|
99
|
+
const { min, max } = constraint.definition;
|
|
100
|
+
if (min && max) return [constraintLabel("size "), literal(`${formatBytes(min)}..${formatBytes(max)}`)];
|
|
101
|
+
if (min) return [constraintLabel("min size "), literal(formatBytes(min))];
|
|
102
|
+
if (max) return [constraintLabel("max size "), literal(formatBytes(max))];
|
|
103
|
+
return null;
|
|
104
|
+
}).otherwise(_duplojs_lang_common.justReturn(null));
|
|
105
|
+
}
|
|
106
|
+
function renderConstraints(constraints) {
|
|
107
|
+
return _duplojs_lang_array.filter([
|
|
108
|
+
renderStringLength(constraints),
|
|
109
|
+
renderArrayLength(constraints),
|
|
110
|
+
...renderNumberBounds(constraints),
|
|
111
|
+
..._duplojs_lang_array.map(constraints, renderSimpleConstraint)
|
|
112
|
+
], _duplojs_lang_common.truthy);
|
|
113
|
+
}
|
|
114
|
+
function renderDataStructure(dataStructure) {
|
|
115
|
+
const constraints = renderConstraints(dataStructure.definition.constraints);
|
|
116
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.lazyStructureKind)) {
|
|
117
|
+
const inner = renderDataStructure(dataStructure.definition.getter.value);
|
|
118
|
+
return {
|
|
119
|
+
main: inner.main,
|
|
120
|
+
constraints: [...inner.constraints, ...constraints]
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.typeStructureKind)) return {
|
|
124
|
+
main: renderType(dataStructure.definition.type),
|
|
125
|
+
constraints
|
|
126
|
+
};
|
|
127
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.arrayStructureKind)) {
|
|
128
|
+
const element = renderDataStructure(dataStructure.definition.element);
|
|
129
|
+
return {
|
|
130
|
+
main: [...element.main, typeLabel("[]")],
|
|
131
|
+
constraints: [..._duplojs_lang_array.map(element.constraints, (constraint) => [constraintLabel("item "), constraint]), ...constraints]
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.unionStructureKind)) {
|
|
135
|
+
const values = _duplojs_lang_common.pipe(dataStructure.definition.values.value, _duplojs_lang_array.filter((structure) => !_duplojs_lang_dataStructure.isUndefinedStructure(structure)), _duplojs_lang_array.map(renderDataStructure));
|
|
136
|
+
if (values.length === 0) return {
|
|
137
|
+
main: [literal("undefined")],
|
|
138
|
+
constraints
|
|
139
|
+
};
|
|
140
|
+
if (values.length === 1) return {
|
|
141
|
+
main: values[0].main,
|
|
142
|
+
constraints: [...values[0].constraints, ...constraints]
|
|
143
|
+
};
|
|
144
|
+
return {
|
|
145
|
+
main: _duplojs_lang_array.reduce(_duplojs_lang_array.map(values, ({ main }) => main), _duplojs_lang_array.reduceFrom([]), ({ element, index, lastValue, next }) => next([
|
|
146
|
+
...lastValue,
|
|
147
|
+
index === 0 ? null : [secondary(" | ")],
|
|
148
|
+
element
|
|
149
|
+
])),
|
|
150
|
+
constraints
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
main: [typeLabel("unknown")],
|
|
155
|
+
constraints
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function renderMetadata(help, markerValue) {
|
|
159
|
+
return renderInline([
|
|
160
|
+
...help.main,
|
|
161
|
+
secondary(" · "),
|
|
162
|
+
markerValue === "required" ? marker(markerValue) : secondary(markerValue)
|
|
163
|
+
]);
|
|
164
|
+
}
|
|
165
|
+
function renderConstraintLines(constraints, depth) {
|
|
166
|
+
return _duplojs_lang_array.map(constraints, (constraint) => renderInline([secondary("↳ "), constraint], depth));
|
|
167
|
+
}
|
|
168
|
+
function renderDescriptionLine(description, depth) {
|
|
169
|
+
return description ? renderInline([secondary(description)], depth) : null;
|
|
170
|
+
}
|
|
171
|
+
function renderUsage(command) {
|
|
172
|
+
const args = command.subject?.type === "argument" ? _duplojs_lang_array.map(command.subject.args, (argument) => argument.optional ? `[${argument.name}]` : `<${argument.name}>`) : command.subject?.type === "subCommand" ? ["<command>"] : [];
|
|
173
|
+
return _duplojs_lang_common.pipe([
|
|
174
|
+
command.name,
|
|
175
|
+
...args,
|
|
176
|
+
command.options.length > 0 ? "[options]" : null
|
|
177
|
+
], _duplojs_lang_array.filter(_duplojs_lang_common.truthy), _duplojs_lang_string.join(" "));
|
|
178
|
+
}
|
|
179
|
+
function renderOptionSignature(option) {
|
|
180
|
+
return [
|
|
181
|
+
_duplojs_lang_array.map(option.aliases, (alias) => [
|
|
182
|
+
syntax("-"),
|
|
183
|
+
name(alias),
|
|
184
|
+
syntax(", ")
|
|
185
|
+
]),
|
|
186
|
+
syntax("--"),
|
|
187
|
+
name(option.name),
|
|
188
|
+
require_simple.simpleOptionKind.has(option) ? syntax(" <value>") : null,
|
|
189
|
+
require_array.arrayOptionKind.has(option) ? syntax(" <value...>") : null
|
|
190
|
+
];
|
|
191
|
+
}
|
|
192
|
+
function renderOptionDetails(option, depth) {
|
|
193
|
+
if (require_simple.simpleOptionKind.has(option) || require_array.arrayOptionKind.has(option)) {
|
|
194
|
+
const help = renderDataStructure(option.dataStructure);
|
|
195
|
+
return _duplojs_lang_array.filter([
|
|
196
|
+
renderInline([renderMetadata(help, option.required ? "required" : "optional")], depth),
|
|
197
|
+
...renderConstraintLines(help.constraints, depth),
|
|
198
|
+
renderDescriptionLine(option.description, depth)
|
|
199
|
+
], _duplojs_lang_common.truthy);
|
|
200
|
+
}
|
|
201
|
+
if (require_boolean.booleanOptionKind.has(option)) return _duplojs_lang_array.filter([renderInline([typeLabel("boolean")], depth), renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
|
|
202
|
+
return _duplojs_lang_array.filter([renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
|
|
203
|
+
}
|
|
204
|
+
function renderOptionsHelp(options, depth) {
|
|
205
|
+
return _duplojs_lang_printer.renderParagraph([renderInline([section("OPTIONS", "magenta")], depth), _duplojs_lang_array.map(options, (option) => _duplojs_lang_printer.renderParagraph([renderInline([renderOptionSignature(option)], depth + 1), renderOptionDetails(option, depth + 2)]))]);
|
|
206
|
+
}
|
|
207
|
+
function renderArgumentsHelp(args, depth) {
|
|
208
|
+
return _duplojs_lang_printer.renderParagraph([renderInline([section("ARGUMENTS", "cyan")], depth), _duplojs_lang_array.map(args, (argument) => {
|
|
209
|
+
const help = renderDataStructure(argument.dataStructure);
|
|
210
|
+
return _duplojs_lang_printer.renderParagraph([
|
|
211
|
+
renderInline([name(argument.name.padEnd(12)), renderMetadata(help, argument.optional ? "optional" : "required")], depth + 1),
|
|
212
|
+
renderConstraintLines(help.constraints, depth + 2),
|
|
213
|
+
renderDescriptionLine(argument.description, depth + 2)
|
|
214
|
+
]);
|
|
215
|
+
})]);
|
|
216
|
+
}
|
|
217
|
+
function renderSubCommandsHelp(commands, depth) {
|
|
218
|
+
return _duplojs_lang_printer.renderParagraph([renderInline([section("COMMANDS", "green")], depth), _duplojs_lang_array.map(commands, (command) => renderInline([name(command.name.padEnd(16)), command.description ? secondary(command.description) : null], depth + 1))]);
|
|
219
|
+
}
|
|
220
|
+
function renderCommandHelp(command, depth) {
|
|
221
|
+
return [..._duplojs_lang_array.filter([
|
|
222
|
+
renderInline([
|
|
223
|
+
section("COMMAND", "green"),
|
|
224
|
+
" ",
|
|
225
|
+
_duplojs_lang_printer.colorizedBold(command.name, "cyan")
|
|
226
|
+
], depth),
|
|
227
|
+
renderDescriptionLine(command.description, depth + 1),
|
|
228
|
+
_duplojs_lang_printer.renderParagraph([renderInline([section("USAGE", "blue")], depth), renderInline([syntax(renderUsage(command))], depth + 1)]),
|
|
229
|
+
command.subject?.type === "argument" ? renderArgumentsHelp(command.subject.args, depth) : null,
|
|
230
|
+
command.subject?.type === "subCommand" ? renderSubCommandsHelp(command.subject.subCommands, depth) : null,
|
|
231
|
+
_duplojs_lang_array.minElements(command.options, 1) ? renderOptionsHelp(command.options, depth) : null
|
|
232
|
+
], _duplojs_lang_common.truthy)];
|
|
233
|
+
}
|
|
234
|
+
function logCommandHelp(command) {
|
|
235
|
+
console.log(_duplojs_lang_printer.renderParagraph(renderCommandHelp(command, 0)));
|
|
236
|
+
}
|
|
237
|
+
function renderExecOptionHelp(options, depth) {
|
|
238
|
+
return [renderInline([section("EXEC OPTIONS", "green")], depth), renderOptionsHelp(options, depth)];
|
|
239
|
+
}
|
|
240
|
+
function logExecOptionHelp(options) {
|
|
241
|
+
console.log(_duplojs_lang_printer.renderParagraph(renderExecOptionHelp(options, 0)));
|
|
242
|
+
}
|
|
243
|
+
//#endregion
|
|
244
|
+
exports.helpOption = helpOption;
|
|
245
|
+
exports.logCommandHelp = logCommandHelp;
|
|
246
|
+
exports.logExecOptionHelp = logExecOptionHelp;
|
|
247
|
+
exports.renderArgumentsHelp = renderArgumentsHelp;
|
|
248
|
+
exports.renderCommandHelp = renderCommandHelp;
|
|
249
|
+
exports.renderExecOptionHelp = renderExecOptionHelp;
|
|
250
|
+
exports.renderOptionsHelp = renderOptionsHelp;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from './create';
|
|
2
|
+
import { Argument } from './argument';
|
|
3
|
+
import { Options } from './options';
|
|
4
|
+
export declare const helpOption: import('./options').BooleanOption<"help">;
|
|
5
|
+
export declare function renderOptionsHelp(options: readonly Options[], depth: number): string;
|
|
6
|
+
export declare function renderArgumentsHelp(args: readonly Argument[], depth: number): string;
|
|
7
|
+
export declare function renderCommandHelp(command: Command, depth: number): string[];
|
|
8
|
+
export declare function logCommandHelp(command: Command): void;
|
|
9
|
+
export declare function renderExecOptionHelp(options: readonly Options[], depth: number): string[];
|
|
10
|
+
export declare function logExecOptionHelp(options: readonly Options[]): void;
|