@duplojs/server 0.0.0-stage → 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README +9 -0
- package/dist/_virtual/_rolldown/runtime.cjs +33 -0
- package/dist/_virtual/_rolldown/runtime.mjs +13 -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 +94 -0
- package/dist/command/create.d.ts +47 -0
- package/dist/command/create.mjs +88 -0
- package/dist/command/error.cjs +153 -0
- package/dist/command/error.d.ts +53 -0
- package/dist/command/error.mjs +140 -0
- package/dist/command/exec.cjs +19 -0
- package/dist/command/exec.d.ts +13 -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 +257 -0
- package/dist/command/help.d.ts +10 -0
- package/dist/command/help.mjs +244 -0
- package/dist/command/index.cjs +78 -0
- package/dist/command/index.d.ts +8 -0
- package/dist/command/index.mjs +45 -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 +68 -0
- package/dist/command/options/base.d.ts +24 -0
- package/dist/command/options/base.mjs +63 -0
- package/dist/command/options/defaults/array.cjs +35 -0
- package/dist/command/options/defaults/array.d.ts +24 -0
- package/dist/command/options/defaults/array.mjs +29 -0
- package/dist/command/options/defaults/boolean.cjs +14 -0
- package/dist/command/options/defaults/boolean.d.ts +11 -0
- package/dist/command/options/defaults/boolean.mjs +13 -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 +16 -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/index.d.ts +2 -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 +4 -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 +41 -0
- package/dist/common/index.d.ts +8 -0
- package/dist/common/index.mjs +25 -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 +14 -0
- package/dist/dataStructure/common/codec/defaults/json.d.ts +9 -0
- package/dist/dataStructure/common/codec/defaults/json.mjs +11 -0
- package/dist/dataStructure/common/codec/defaults/string.cjs +14 -0
- package/dist/dataStructure/common/codec/defaults/string.d.ts +13 -0
- package/dist/dataStructure/common/codec/defaults/string.mjs +11 -0
- package/dist/dataStructure/common/codec/index.d.ts +1 -0
- package/dist/dataStructure/common/error/defaultInterpreter.cjs +27 -0
- package/dist/dataStructure/common/error/defaultInterpreter.d.ts +64 -0
- package/dist/dataStructure/common/error/defaultInterpreter.mjs +24 -0
- package/dist/dataStructure/common/error/index.d.ts +1 -0
- package/dist/dataStructure/common/index.d.ts +2 -0
- package/dist/dataStructure/constraint/exist.cjs +19 -0
- package/dist/dataStructure/constraint/exist.d.ts +10 -0
- package/dist/dataStructure/constraint/exist.mjs +15 -0
- package/dist/dataStructure/constraint/index.d.ts +4 -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 +10 -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/index.d.ts +2 -0
- package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +6 -0
- package/dist/dataStructure/fundamentalType/types/index.d.ts +1 -0
- package/dist/dataStructure/helper/exist.cjs +7 -0
- package/dist/dataStructure/helper/exist.d.ts +2 -0
- package/dist/dataStructure/helper/exist.mjs +7 -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/index.d.ts +4 -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 +62 -0
- package/dist/dataStructure/index.d.ts +6 -0
- package/dist/dataStructure/index.mjs +38 -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/index.d.ts +2 -0
- package/dist/dataStructure/type/types/index.d.ts +1 -0
- package/dist/dataStructure/type/types/types.d.ts +6 -0
- package/dist/file/appendFile.cjs +43 -0
- package/dist/file/appendFile.d.ts +11 -0
- package/dist/file/appendFile.mjs +41 -0
- package/dist/file/appendTextFile.cjs +43 -0
- package/dist/file/appendTextFile.d.ts +11 -0
- package/dist/file/appendTextFile.mjs +41 -0
- package/dist/file/copy.cjs +31 -0
- package/dist/file/copy.d.ts +11 -0
- package/dist/file/copy.mjs +29 -0
- package/dist/file/createEntryInterface.cjs +16 -0
- package/dist/file/createEntryInterface.d.ts +3 -0
- package/dist/file/createEntryInterface.mjs +13 -0
- package/dist/file/ensureDirectory.cjs +32 -0
- package/dist/file/ensureDirectory.d.ts +10 -0
- package/dist/file/ensureDirectory.mjs +30 -0
- package/dist/file/ensureFile.cjs +38 -0
- package/dist/file/ensureFile.d.ts +10 -0
- package/dist/file/ensureFile.mjs +36 -0
- package/dist/file/exists.cjs +29 -0
- package/dist/file/exists.d.ts +10 -0
- package/dist/file/exists.mjs +27 -0
- package/dist/file/fileInterface.cjs +74 -0
- package/dist/file/fileInterface.d.ts +30 -0
- package/dist/file/fileInterface.mjs +69 -0
- package/dist/file/folderInterface.cjs +74 -0
- package/dist/file/folderInterface.d.ts +32 -0
- package/dist/file/folderInterface.mjs +69 -0
- package/dist/file/index.cjs +122 -0
- package/dist/file/index.d.ts +36 -0
- package/dist/file/index.mjs +79 -0
- package/dist/file/link.cjs +44 -0
- package/dist/file/link.d.ts +11 -0
- package/dist/file/link.mjs +42 -0
- package/dist/file/linkStat.cjs +84 -0
- package/dist/file/linkStat.d.ts +11 -0
- package/dist/file/linkStat.mjs +80 -0
- package/dist/file/makeDirectory.cjs +36 -0
- package/dist/file/makeDirectory.d.ts +14 -0
- package/dist/file/makeDirectory.mjs +34 -0
- package/dist/file/makeTemporaryDirectory.cjs +30 -0
- package/dist/file/makeTemporaryDirectory.d.ts +9 -0
- package/dist/file/makeTemporaryDirectory.mjs +28 -0
- package/dist/file/makeTemporaryFile.cjs +45 -0
- package/dist/file/makeTemporaryFile.d.ts +10 -0
- package/dist/file/makeTemporaryFile.mjs +41 -0
- package/dist/file/move.cjs +45 -0
- package/dist/file/move.d.ts +11 -0
- package/dist/file/move.mjs +43 -0
- package/dist/file/readDirectory.cjs +20 -0
- package/dist/file/readDirectory.d.ts +14 -0
- package/dist/file/readDirectory.mjs +18 -0
- package/dist/file/readFile.cjs +33 -0
- package/dist/file/readFile.d.ts +10 -0
- package/dist/file/readFile.mjs +31 -0
- package/dist/file/readJsonFile.cjs +33 -0
- package/dist/file/readJsonFile.d.ts +11 -0
- package/dist/file/readJsonFile.mjs +31 -0
- package/dist/file/readLink.cjs +30 -0
- package/dist/file/readLink.d.ts +10 -0
- package/dist/file/readLink.mjs +28 -0
- package/dist/file/readTextFile.cjs +33 -0
- package/dist/file/readTextFile.d.ts +10 -0
- package/dist/file/readTextFile.mjs +31 -0
- package/dist/file/realPath.cjs +28 -0
- package/dist/file/realPath.d.ts +10 -0
- package/dist/file/realPath.mjs +26 -0
- package/dist/file/relocate.cjs +56 -0
- package/dist/file/relocate.d.ts +11 -0
- package/dist/file/relocate.mjs +53 -0
- package/dist/file/remove.cjs +38 -0
- package/dist/file/remove.d.ts +14 -0
- package/dist/file/remove.mjs +36 -0
- package/dist/file/rename.cjs +56 -0
- package/dist/file/rename.d.ts +11 -0
- package/dist/file/rename.mjs +53 -0
- package/dist/file/setMode.cjs +51 -0
- package/dist/file/setMode.d.ts +26 -0
- package/dist/file/setMode.mjs +48 -0
- package/dist/file/setOwner.cjs +37 -0
- package/dist/file/setOwner.d.ts +15 -0
- package/dist/file/setOwner.mjs +35 -0
- package/dist/file/setTime.cjs +39 -0
- package/dist/file/setTime.d.ts +17 -0
- package/dist/file/setTime.mjs +36 -0
- package/dist/file/stat.cjs +85 -0
- package/dist/file/stat.d.ts +42 -0
- package/dist/file/stat.mjs +81 -0
- package/dist/file/symlink.cjs +42 -0
- package/dist/file/symlink.d.ts +19 -0
- package/dist/file/symlink.mjs +40 -0
- package/dist/file/truncate.cjs +38 -0
- package/dist/file/truncate.d.ts +10 -0
- package/dist/file/truncate.mjs +35 -0
- package/dist/file/types/fileSystemEither.d.ts +2 -0
- package/dist/file/types/index.d.ts +1 -0
- package/dist/file/unknownEntryInterface.cjs +36 -0
- package/dist/file/unknownEntryInterface.d.ts +15 -0
- package/dist/file/unknownEntryInterface.mjs +33 -0
- package/dist/file/walkDirectory.cjs +34 -0
- package/dist/file/walkDirectory.d.ts +16 -0
- package/dist/file/walkDirectory.mjs +28 -0
- package/dist/file/writeFile.cjs +44 -0
- package/dist/file/writeFile.d.ts +11 -0
- package/dist/file/writeFile.mjs +42 -0
- package/dist/file/writeJsonFile.cjs +56 -0
- package/dist/file/writeJsonFile.d.ts +15 -0
- package/dist/file/writeJsonFile.mjs +53 -0
- package/dist/file/writeTextFile.cjs +44 -0
- package/dist/file/writeTextFile.d.ts +11 -0
- package/dist/file/writeTextFile.mjs +42 -0
- package/dist/implementor.cjs +64 -0
- package/dist/implementor.d.ts +35 -0
- package/dist/implementor.mjs +52 -0
- package/dist/index.cjs +74 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.mjs +14 -0
- package/dist/kind.cjs +7 -0
- package/dist/kind.d.ts +2 -0
- package/dist/kind.mjs +5 -0
- package/package.json +81 -3
- package/README.md +0 -3
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { defaultErrorInterpreterCodecDictionary, defaultErrorInterpreterDataStructureDictionary } from "../dataStructure/common/error/defaultInterpreter.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
4
|
+
import * as DArray from "@duplojs/lang/array";
|
|
5
|
+
import * as DPattern from "@duplojs/lang/pattern";
|
|
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
|
+
addRequiredOptionIssue: (optionName) => {
|
|
19
|
+
issues.push(DModeling.taggedObject("RequiredOptionIssue", {
|
|
20
|
+
optionName,
|
|
21
|
+
data: void 0,
|
|
22
|
+
path: currentPath.join(".")
|
|
23
|
+
}));
|
|
24
|
+
return SymbolCommandError;
|
|
25
|
+
},
|
|
26
|
+
addRequiredOptionValueIssue: (optionName) => {
|
|
27
|
+
issues.push(DModeling.taggedObject("RequiredOptionValueIssue", {
|
|
28
|
+
optionName,
|
|
29
|
+
data: void 0,
|
|
30
|
+
path: currentPath.join(".")
|
|
31
|
+
}));
|
|
32
|
+
return SymbolCommandError;
|
|
33
|
+
},
|
|
34
|
+
addUnexpectedOptionValueIssue: (optionName, data) => {
|
|
35
|
+
issues.push(DModeling.taggedObject("UnexpectedOptionValueIssue", {
|
|
36
|
+
optionName,
|
|
37
|
+
data,
|
|
38
|
+
path: currentPath.join(".")
|
|
39
|
+
}));
|
|
40
|
+
return SymbolCommandError;
|
|
41
|
+
},
|
|
42
|
+
addDataStructureOptionIssue: (optionName, data, dataStructureError) => {
|
|
43
|
+
issues.push(DModeling.taggedObject("DataStructureOptionIssue", {
|
|
44
|
+
optionName,
|
|
45
|
+
data,
|
|
46
|
+
dataStructureError,
|
|
47
|
+
path: currentPath.join(".")
|
|
48
|
+
}));
|
|
49
|
+
return SymbolCommandError;
|
|
50
|
+
},
|
|
51
|
+
addRequiredArgumentIssue: (argumentName) => {
|
|
52
|
+
issues.push(DModeling.taggedObject("RequiredArgumentIssue", {
|
|
53
|
+
argumentName,
|
|
54
|
+
data: void 0,
|
|
55
|
+
path: currentPath.join(".")
|
|
56
|
+
}));
|
|
57
|
+
return SymbolCommandError;
|
|
58
|
+
},
|
|
59
|
+
addDataStructureArgumentIssue: (argumentName, data, dataStructureError) => {
|
|
60
|
+
issues.push(DModeling.taggedObject("DataStructureArgumentIssue", {
|
|
61
|
+
argumentName,
|
|
62
|
+
data,
|
|
63
|
+
dataStructureError,
|
|
64
|
+
path: currentPath.join(".")
|
|
65
|
+
}));
|
|
66
|
+
return SymbolCommandError;
|
|
67
|
+
},
|
|
68
|
+
addTooMuchCommandArgumentIssue: (expect, receive) => {
|
|
69
|
+
issues.push(DModeling.taggedObject("TooMuchCommandArgumentIssue", {
|
|
70
|
+
expect,
|
|
71
|
+
receive,
|
|
72
|
+
path: currentPath.join(".")
|
|
73
|
+
}));
|
|
74
|
+
return SymbolCommandError;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function interpretDataStructureError(error, dataStructureErrorInterpreter) {
|
|
79
|
+
return DCommon.pipe(dataStructureErrorInterpreter(error), DArray.map(({ interpretedMessage, path }) => DPrinter.render([
|
|
80
|
+
DPrinter.indent(1),
|
|
81
|
+
"↳ ",
|
|
82
|
+
DPrinter.colorizedBold(path || "<value>", "cyan"),
|
|
83
|
+
" : ",
|
|
84
|
+
DPrinter.colorizedBold(interpretedMessage.subSource ?? interpretedMessage.interpretedSubSource ?? interpretedMessage.source ?? interpretedMessage.interpretedSource ?? "unknown data structure error.", "red")
|
|
85
|
+
], "")));
|
|
86
|
+
}
|
|
87
|
+
function interpretErrorIssues(issues, dataStructureErrorInterpreter) {
|
|
88
|
+
return DPrinter.renderParagraph([DArray.map(issues, DPattern.matchWithTaggedObject({
|
|
89
|
+
DataStructureArgumentIssue: ({ argumentName, dataStructureError }) => [DPrinter.render([
|
|
90
|
+
DPrinter.indent(1),
|
|
91
|
+
DPrinter.colorizedBold("ARGUMENT: ", "magenta"),
|
|
92
|
+
`--${argumentName}`
|
|
93
|
+
], ""), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
|
|
94
|
+
RequiredArgumentIssue: ({ argumentName }) => [DPrinter.render([
|
|
95
|
+
DPrinter.indent(1),
|
|
96
|
+
DPrinter.colorizedBold("ARGUMENT: ", "magenta"),
|
|
97
|
+
argumentName
|
|
98
|
+
], ""), `${DPrinter.indent(1)}↳ Missing Argument`],
|
|
99
|
+
DataStructureOptionIssue: ({ optionName, dataStructureError }) => [DPrinter.render([
|
|
100
|
+
DPrinter.indent(1),
|
|
101
|
+
DPrinter.colorizedBold("OPTION: ", "blue"),
|
|
102
|
+
`--${optionName}`
|
|
103
|
+
], ""), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
|
|
104
|
+
RequiredOptionIssue: ({ optionName }) => [DPrinter.render([
|
|
105
|
+
DPrinter.indent(1),
|
|
106
|
+
DPrinter.colorizedBold("OPTION: ", "blue"),
|
|
107
|
+
`--${optionName}`
|
|
108
|
+
], ""), `${DPrinter.indent(1)}↳ Missing Option`],
|
|
109
|
+
RequiredOptionValueIssue: ({ optionName }) => [DPrinter.render([
|
|
110
|
+
DPrinter.indent(1),
|
|
111
|
+
DPrinter.colorizedBold("OPTION: ", "blue"),
|
|
112
|
+
`--${optionName}`
|
|
113
|
+
], ""), `${DPrinter.indent(1)}↳ Missing Option Value`],
|
|
114
|
+
UnexpectedOptionValueIssue: ({ optionName }) => [DPrinter.render([
|
|
115
|
+
DPrinter.indent(1),
|
|
116
|
+
DPrinter.colorizedBold("OPTION: ", "blue"),
|
|
117
|
+
`--${optionName}`
|
|
118
|
+
], ""), `${DPrinter.indent(1)}↳ Unexpected Value At This Option`],
|
|
119
|
+
TooMuchCommandArgumentIssue: ({ expect, receive }) => [`${DPrinter.indent(1)} Too Much Arguments`, `${DPrinter.indent(1)} expect: ${expect} receive: ${receive}`]
|
|
120
|
+
})), issues.length === 0 && "No issue found"]);
|
|
121
|
+
}
|
|
122
|
+
const defaultDataStructureErrorInterpreter = DDataStructure.createErrorInterpreter(defaultErrorInterpreterDataStructureDictionary, defaultErrorInterpreterCodecDictionary);
|
|
123
|
+
function interpretExecCommandError(error, dataStructureErrorInterpreter) {
|
|
124
|
+
return DPrinter.renderParagraph([DPrinter.render([
|
|
125
|
+
DPrinter.colorizedBold("Command failed", "red"),
|
|
126
|
+
DPrinter.back,
|
|
127
|
+
DPrinter.indent(1),
|
|
128
|
+
DPrinter.colorizedBold("COMMAND: ", "cyan"),
|
|
129
|
+
DString.join(error.currentPath, " ")
|
|
130
|
+
], ""), interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)]);
|
|
131
|
+
}
|
|
132
|
+
function interpretExecOptionsError(error, dataStructureErrorInterpreter) {
|
|
133
|
+
return DPrinter.renderParagraph([
|
|
134
|
+
DPrinter.colorizedBold("Invalid options", "red"),
|
|
135
|
+
DPrinter.back,
|
|
136
|
+
interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)
|
|
137
|
+
]);
|
|
138
|
+
}
|
|
139
|
+
//#endregion
|
|
140
|
+
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,13 @@
|
|
|
1
|
+
import { CreateCommandExecuteParams, CreateCommandParams, Subjects } from './create';
|
|
2
|
+
import { Error } from './error';
|
|
3
|
+
import { Option } from './options';
|
|
4
|
+
import { Argument } from './argument';
|
|
5
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
6
|
+
import * as DEither from "@duplojs/lang/either";
|
|
7
|
+
import type * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
8
|
+
export interface ExecCommandParams<GenericOptions extends DCommon.AnyTuple<Option> = DCommon.AnyTuple<Option>, GenericSubjects extends Subjects = Subjects> extends CreateCommandParams<GenericOptions, GenericSubjects> {
|
|
9
|
+
displayName?: string;
|
|
10
|
+
dataStructureErrorInterpreter?: DDataStructure.ErrorInterpreter;
|
|
11
|
+
}
|
|
12
|
+
export declare function exec(execute: () => void): Promise<DEither.Ok | DEither.Error<Error>>;
|
|
13
|
+
export declare function exec<const GenericOptions extends DCommon.AnyTuple<Option> = never, GenericSubjects extends Subjects = never>(params: ExecCommandParams<GenericOptions, GenericSubjects>, 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,257 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_exist = require("../dataStructure/constraint/exist.cjs");
|
|
3
|
+
const require_mimeType = require("../dataStructure/constraint/mimeType.cjs");
|
|
4
|
+
const require_size = require("../dataStructure/constraint/size.cjs");
|
|
5
|
+
const require_file = require("../dataStructure/type/file.cjs");
|
|
6
|
+
const require_array = require("./options/defaults/array.cjs");
|
|
7
|
+
const require_boolean = require("./options/defaults/boolean.cjs");
|
|
8
|
+
const require_simple = require("./options/defaults/simple.cjs");
|
|
9
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
10
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
11
|
+
let _duplojs_lang_dataStructure = require("@duplojs/lang/dataStructure");
|
|
12
|
+
_duplojs_lang_dataStructure = require_runtime.__toESM(_duplojs_lang_dataStructure, 1);
|
|
13
|
+
let _duplojs_lang_array = require("@duplojs/lang/array");
|
|
14
|
+
_duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
|
|
15
|
+
let _duplojs_lang_pattern = require("@duplojs/lang/pattern");
|
|
16
|
+
_duplojs_lang_pattern = require_runtime.__toESM(_duplojs_lang_pattern, 1);
|
|
17
|
+
let _duplojs_lang_string = require("@duplojs/lang/string");
|
|
18
|
+
_duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
|
|
19
|
+
let _duplojs_lang_printer = require("@duplojs/lang/printer");
|
|
20
|
+
_duplojs_lang_printer = require_runtime.__toESM(_duplojs_lang_printer, 1);
|
|
21
|
+
//#region scripts/command/help.ts
|
|
22
|
+
const helpOption = require_boolean.createBooleanOption("help", { aliases: ["h"] });
|
|
23
|
+
const syntax = (input) => _duplojs_lang_printer.colorized(input, "gray");
|
|
24
|
+
const section = (input, color) => _duplojs_lang_printer.colorizedBold(input, color);
|
|
25
|
+
const name = (input) => _duplojs_lang_printer.colorizedBold(input, "cyan");
|
|
26
|
+
const typeLabel = (input) => _duplojs_lang_printer.colorized(input, "blue");
|
|
27
|
+
const literal = (input) => _duplojs_lang_printer.colorized(input, "yellow");
|
|
28
|
+
const marker = (input) => _duplojs_lang_printer.colorized(input, "yellow");
|
|
29
|
+
const secondary = (input) => _duplojs_lang_printer.colorized(input, "gray");
|
|
30
|
+
const constraintLabel = (input) => _duplojs_lang_printer.colorized(input, "magenta");
|
|
31
|
+
function renderInline(input) {
|
|
32
|
+
return _duplojs_lang_printer.render(input, "");
|
|
33
|
+
}
|
|
34
|
+
function formatLiteral(value) {
|
|
35
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
36
|
+
if (typeof value === "bigint") return `${value.toString()}n`;
|
|
37
|
+
return String(value);
|
|
38
|
+
}
|
|
39
|
+
function formatBytes(value) {
|
|
40
|
+
const units = [
|
|
41
|
+
"B",
|
|
42
|
+
"KB",
|
|
43
|
+
"MB",
|
|
44
|
+
"GB",
|
|
45
|
+
"TB"
|
|
46
|
+
];
|
|
47
|
+
let size = value;
|
|
48
|
+
let index = 0;
|
|
49
|
+
while (size >= 1024 && index < units.length - 1) {
|
|
50
|
+
size = size / 1024;
|
|
51
|
+
index++;
|
|
52
|
+
}
|
|
53
|
+
return `${Number.isInteger(size) ? size : size.toFixed(1)} ${units[index]}`;
|
|
54
|
+
}
|
|
55
|
+
function renderType(type) {
|
|
56
|
+
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")])).otherwise(_duplojs_lang_common.justReturn([typeLabel("unknown")]));
|
|
57
|
+
}
|
|
58
|
+
function renderStringLength(constraints) {
|
|
59
|
+
const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.stringLengthEqualConstraintKind));
|
|
60
|
+
const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minCharactersConstraintKind));
|
|
61
|
+
const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxCharactersConstraintKind));
|
|
62
|
+
if (equal) return [constraintLabel("length "), literal(String(equal.definition.length))];
|
|
63
|
+
if (min && max) return [constraintLabel("length "), literal(`${min.definition.min}..${max.definition.max}`)];
|
|
64
|
+
if (min) return [constraintLabel("min length "), literal(String(min.definition.min))];
|
|
65
|
+
if (max) return [constraintLabel("max length "), literal(String(max.definition.max))];
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
function renderArrayLength(constraints) {
|
|
69
|
+
const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.arrayLengthEqualConstraintKind));
|
|
70
|
+
const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minElementsConstraintKind));
|
|
71
|
+
const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxElementsConstraintKind));
|
|
72
|
+
if (equal) return [constraintLabel("items "), literal(String(equal.definition.length))];
|
|
73
|
+
if (min && max) return [constraintLabel("items "), literal(`${min.definition.min}..${max.definition.max}`)];
|
|
74
|
+
if (min) return [constraintLabel("min items "), literal(String(min.definition.min))];
|
|
75
|
+
if (max) return [constraintLabel("max items "), literal(String(max.definition.max))];
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
function renderNumberBounds(constraints) {
|
|
79
|
+
const greaterThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanConstraintKind));
|
|
80
|
+
const greaterThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanOrEqualConstraintKind));
|
|
81
|
+
const lessThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanConstraintKind));
|
|
82
|
+
const lessThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanOrEqualConstraintKind));
|
|
83
|
+
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);
|
|
84
|
+
}
|
|
85
|
+
function renderSimpleConstraint(constraint) {
|
|
86
|
+
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_exist.existConstraintKind), _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 }) => [
|
|
87
|
+
constraintLabel("> "),
|
|
88
|
+
literal(String(definition.greater)),
|
|
89
|
+
secondary(" and "),
|
|
90
|
+
constraintLabel("< "),
|
|
91
|
+
literal(String(definition.less))
|
|
92
|
+
]).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) => {
|
|
93
|
+
const { min, max } = constraint.definition;
|
|
94
|
+
if (min && max) return [constraintLabel("size "), literal(`${formatBytes(min)}..${formatBytes(max)}`)];
|
|
95
|
+
if (min) return [constraintLabel("min size "), literal(formatBytes(min))];
|
|
96
|
+
if (max) return [constraintLabel("max size "), literal(formatBytes(max))];
|
|
97
|
+
return null;
|
|
98
|
+
}).otherwise(_duplojs_lang_common.justReturn(null));
|
|
99
|
+
}
|
|
100
|
+
function renderConstraints(constraints) {
|
|
101
|
+
return _duplojs_lang_array.filter([
|
|
102
|
+
renderStringLength(constraints),
|
|
103
|
+
renderArrayLength(constraints),
|
|
104
|
+
...renderNumberBounds(constraints),
|
|
105
|
+
..._duplojs_lang_array.map(constraints, renderSimpleConstraint)
|
|
106
|
+
], _duplojs_lang_common.truthy);
|
|
107
|
+
}
|
|
108
|
+
function renderDataStructure(dataStructure) {
|
|
109
|
+
const constraints = renderConstraints(dataStructure.definition.constraints);
|
|
110
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.lazyStructureKind)) {
|
|
111
|
+
const inner = renderDataStructure(dataStructure.definition.getter.value);
|
|
112
|
+
return {
|
|
113
|
+
main: inner.main,
|
|
114
|
+
constraints: [...inner.constraints, ...constraints]
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.typeStructureKind)) return {
|
|
118
|
+
main: renderType(dataStructure.definition.type),
|
|
119
|
+
constraints
|
|
120
|
+
};
|
|
121
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.arrayStructureKind)) {
|
|
122
|
+
const element = renderDataStructure(dataStructure.definition.element);
|
|
123
|
+
return {
|
|
124
|
+
main: [...element.main, typeLabel("[]")],
|
|
125
|
+
constraints: [..._duplojs_lang_array.map(element.constraints, (constraint) => [constraintLabel("item "), constraint]), ...constraints]
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.unionStructureKind)) {
|
|
129
|
+
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));
|
|
130
|
+
if (values.length === 0) return {
|
|
131
|
+
main: [literal("undefined")],
|
|
132
|
+
constraints
|
|
133
|
+
};
|
|
134
|
+
if (values.length === 1) return {
|
|
135
|
+
main: values[0].main,
|
|
136
|
+
constraints: [...values[0].constraints, ...constraints]
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
main: _duplojs_lang_array.reduce(_duplojs_lang_array.map(values, ({ main }) => main), _duplojs_lang_array.reduceFrom([]), ({ element, index, lastValue, next }) => next([
|
|
140
|
+
...lastValue,
|
|
141
|
+
index === 0 ? null : [secondary(" | ")],
|
|
142
|
+
element
|
|
143
|
+
])),
|
|
144
|
+
constraints
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
main: [typeLabel("unknown")],
|
|
149
|
+
constraints
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function renderMetadata(help, markerValue) {
|
|
153
|
+
return renderInline([
|
|
154
|
+
...help.main,
|
|
155
|
+
secondary(" · "),
|
|
156
|
+
markerValue === "required" ? marker(markerValue) : secondary(markerValue)
|
|
157
|
+
]);
|
|
158
|
+
}
|
|
159
|
+
function renderConstraintLines(constraints, depth) {
|
|
160
|
+
return _duplojs_lang_array.map(constraints, (constraint) => renderInline([
|
|
161
|
+
_duplojs_lang_printer.indent(depth),
|
|
162
|
+
secondary("↳ "),
|
|
163
|
+
constraint
|
|
164
|
+
]));
|
|
165
|
+
}
|
|
166
|
+
function renderDescriptionLine(description, depth) {
|
|
167
|
+
return description ? renderInline([_duplojs_lang_printer.indent(depth), secondary(description)]) : null;
|
|
168
|
+
}
|
|
169
|
+
function renderUsage(command) {
|
|
170
|
+
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>"] : [];
|
|
171
|
+
return _duplojs_lang_common.pipe([
|
|
172
|
+
command.name,
|
|
173
|
+
...args,
|
|
174
|
+
command.options.length > 0 ? "[options]" : null
|
|
175
|
+
], _duplojs_lang_array.filter(_duplojs_lang_common.truthy), _duplojs_lang_string.join(" "));
|
|
176
|
+
}
|
|
177
|
+
function renderOptionSignature(option) {
|
|
178
|
+
return [
|
|
179
|
+
_duplojs_lang_array.map(option.aliases, (alias) => [
|
|
180
|
+
syntax("-"),
|
|
181
|
+
name(alias),
|
|
182
|
+
syntax(", ")
|
|
183
|
+
]),
|
|
184
|
+
syntax("--"),
|
|
185
|
+
name(option.name),
|
|
186
|
+
require_simple.simpleOptionKind.has(option) ? syntax(" <value>") : null,
|
|
187
|
+
require_array.arrayOptionKind.has(option) ? syntax(" <value...>") : null
|
|
188
|
+
];
|
|
189
|
+
}
|
|
190
|
+
function renderOptionDetails(option, depth) {
|
|
191
|
+
if (require_simple.simpleOptionKind.has(option) || require_array.arrayOptionKind.has(option)) {
|
|
192
|
+
const help = renderDataStructure(option.dataStructure);
|
|
193
|
+
return _duplojs_lang_array.filter([
|
|
194
|
+
renderInline([_duplojs_lang_printer.indent(depth), renderMetadata(help, option.required ? "required" : "optional")]),
|
|
195
|
+
renderDescriptionLine(option.description, depth),
|
|
196
|
+
...renderConstraintLines(help.constraints, depth)
|
|
197
|
+
], _duplojs_lang_common.truthy);
|
|
198
|
+
}
|
|
199
|
+
if (require_boolean.booleanOptionKind.has(option)) return _duplojs_lang_array.filter([renderInline([_duplojs_lang_printer.indent(depth), typeLabel("boolean")]), renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
|
|
200
|
+
return _duplojs_lang_array.filter([renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
|
|
201
|
+
}
|
|
202
|
+
function renderOptionsHelp(options, depth) {
|
|
203
|
+
return _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("OPTIONS", "magenta")]), _duplojs_lang_array.map(options, (option) => _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth + 1), renderOptionSignature(option)]), renderOptionDetails(option, depth + 2)]))]);
|
|
204
|
+
}
|
|
205
|
+
function renderArgumentsHelp(args, depth) {
|
|
206
|
+
return _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("ARGUMENTS", "cyan")]), _duplojs_lang_array.map(args, (argument) => {
|
|
207
|
+
const help = renderDataStructure(argument.dataStructure);
|
|
208
|
+
return _duplojs_lang_printer.renderParagraph([
|
|
209
|
+
renderInline([
|
|
210
|
+
_duplojs_lang_printer.indent(depth + 1),
|
|
211
|
+
name(argument.name.padEnd(12)),
|
|
212
|
+
renderMetadata(help, argument.optional ? "optional" : "required")
|
|
213
|
+
]),
|
|
214
|
+
renderDescriptionLine(argument.description, depth + 2),
|
|
215
|
+
renderConstraintLines(help.constraints, depth + 2)
|
|
216
|
+
]);
|
|
217
|
+
})]);
|
|
218
|
+
}
|
|
219
|
+
function renderSubCommandsHelp(commands, depth) {
|
|
220
|
+
return _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("COMMANDS", "green")]), _duplojs_lang_array.map(commands, (command) => renderInline([
|
|
221
|
+
_duplojs_lang_printer.indent(depth + 1),
|
|
222
|
+
name(command.name.padEnd(16)),
|
|
223
|
+
command.description ? secondary(command.description) : null
|
|
224
|
+
]))]);
|
|
225
|
+
}
|
|
226
|
+
function renderCommandHelp(command, depth) {
|
|
227
|
+
return [..._duplojs_lang_array.filter([
|
|
228
|
+
renderInline([
|
|
229
|
+
_duplojs_lang_printer.indent(depth),
|
|
230
|
+
section("COMMAND", "green"),
|
|
231
|
+
" ",
|
|
232
|
+
_duplojs_lang_printer.colorizedBold(command.name, "cyan")
|
|
233
|
+
]),
|
|
234
|
+
renderDescriptionLine(command.description, depth + 1),
|
|
235
|
+
_duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("USAGE", "blue")]), renderInline([_duplojs_lang_printer.indent(depth + 1), syntax(renderUsage(command))])]),
|
|
236
|
+
command.subject?.type === "argument" ? renderArgumentsHelp(command.subject.args, depth) : null,
|
|
237
|
+
command.subject?.type === "subCommand" ? renderSubCommandsHelp(command.subject.subCommands, depth) : null,
|
|
238
|
+
_duplojs_lang_array.minElements(command.options, 1) ? renderOptionsHelp(command.options, depth) : null
|
|
239
|
+
], _duplojs_lang_common.truthy)];
|
|
240
|
+
}
|
|
241
|
+
function logCommandHelp(command) {
|
|
242
|
+
console.log(_duplojs_lang_printer.renderParagraph(renderCommandHelp(command, 0)));
|
|
243
|
+
}
|
|
244
|
+
function renderExecOptionHelp(options, depth) {
|
|
245
|
+
return [renderInline([_duplojs_lang_printer.indent(depth), section("EXEC OPTIONS", "green")]), renderOptionsHelp(options, depth)];
|
|
246
|
+
}
|
|
247
|
+
function logExecOptionHelp(options) {
|
|
248
|
+
console.log(_duplojs_lang_printer.renderParagraph(renderExecOptionHelp(options, 0)));
|
|
249
|
+
}
|
|
250
|
+
//#endregion
|
|
251
|
+
exports.helpOption = helpOption;
|
|
252
|
+
exports.logCommandHelp = logCommandHelp;
|
|
253
|
+
exports.logExecOptionHelp = logExecOptionHelp;
|
|
254
|
+
exports.renderArgumentsHelp = renderArgumentsHelp;
|
|
255
|
+
exports.renderCommandHelp = renderCommandHelp;
|
|
256
|
+
exports.renderExecOptionHelp = renderExecOptionHelp;
|
|
257
|
+
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: NoInfer<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;
|