@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,29 @@
|
|
|
1
|
+
import { codecsString } from "../../../dataStructure/common/codec/defaults/string.mjs";
|
|
2
|
+
import { createKind } from "../../kind.mjs";
|
|
3
|
+
import { constructOption } from "../base.mjs";
|
|
4
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
5
|
+
import * as DEither from "@duplojs/lang/either";
|
|
6
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
7
|
+
import * as DString from "@duplojs/lang/string";
|
|
8
|
+
//#region scripts/command/options/defaults/array.ts
|
|
9
|
+
const defaultSeparator = ",";
|
|
10
|
+
const arrayOptionKind = createKind("command-array-option");
|
|
11
|
+
const createArrayOption = constructOption(arrayOptionKind, ({ init }) => (name, dataStructure, params) => init(name, async (self, value, error) => {
|
|
12
|
+
if (value === null && self.required === true) return error.addRequiredOptionIssue(self.name);
|
|
13
|
+
if (value === null) return;
|
|
14
|
+
if (value === void 0) return error.addRequiredOptionValueIssue(self.name);
|
|
15
|
+
const result = await self.dataStructure.asyncDecode(codecsString, DString.split(value, self.separator));
|
|
16
|
+
if (DEither.isLeft(result)) return error.addDataStructureOptionIssue(self.name, value, DEither.unwrapLeft(result));
|
|
17
|
+
return DEither.unwrapRight(result);
|
|
18
|
+
}, {
|
|
19
|
+
description: params?.description ?? null,
|
|
20
|
+
aliases: params?.aliases ?? []
|
|
21
|
+
}, {
|
|
22
|
+
dataStructure: DCommon.justExec(() => DCommon.pipe(dataStructure, DDataStructure.array, (dataStructure) => params?.min !== void 0 ? dataStructure.addConstraint(DDataStructure.minElements(params.min)) : dataStructure, (dataStructure) => params?.max !== void 0 ? dataStructure.addConstraint(DDataStructure.maxElements(params.max)) : dataStructure)),
|
|
23
|
+
required: params?.required ?? false,
|
|
24
|
+
min: params?.min,
|
|
25
|
+
max: params?.max,
|
|
26
|
+
separator: params?.separator ?? defaultSeparator
|
|
27
|
+
}));
|
|
28
|
+
//#endregion
|
|
29
|
+
export { arrayOptionKind, createArrayOption };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const require_kind = require("../../kind.cjs");
|
|
2
|
+
const require_base = require("../base.cjs");
|
|
3
|
+
//#region scripts/command/options/defaults/boolean.ts
|
|
4
|
+
const booleanOptionKind = require_kind.createKind("command-boolean-option");
|
|
5
|
+
const createBooleanOption = require_base.constructOption(booleanOptionKind, ({ init }) => (name, params) => init(name, (self, value, error) => {
|
|
6
|
+
if (typeof value === "string") return error.addUnexpectedOptionValueIssue(self.name, value);
|
|
7
|
+
return value !== null;
|
|
8
|
+
}, {
|
|
9
|
+
description: params?.description ?? null,
|
|
10
|
+
aliases: params?.aliases ?? []
|
|
11
|
+
}));
|
|
12
|
+
//#endregion
|
|
13
|
+
exports.booleanOptionKind = booleanOptionKind;
|
|
14
|
+
exports.createBooleanOption = createBooleanOption;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Option } from '../base';
|
|
2
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import type * as DKind from "@duplojs/lang/kind";
|
|
4
|
+
export declare const booleanOptionKind: DKind.Handler<DKind.Definition<"@DuplojsServerCommand/command-boolean-option", unknown>>;
|
|
5
|
+
export interface BooleanOption<GenericName extends string = string> extends DCommon.Forward<Option<GenericName, boolean> & DKind.Kind<typeof booleanOptionKind>> {
|
|
6
|
+
}
|
|
7
|
+
export interface CreateBooleanOptionParams {
|
|
8
|
+
description?: string;
|
|
9
|
+
aliases?: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export declare const createBooleanOption: <GenericName extends string>(name: GenericName, params?: CreateBooleanOptionParams) => NoInfer<BooleanOption<GenericName>>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createKind } from "../../kind.mjs";
|
|
2
|
+
import { constructOption } from "../base.mjs";
|
|
3
|
+
//#region scripts/command/options/defaults/boolean.ts
|
|
4
|
+
const booleanOptionKind = createKind("command-boolean-option");
|
|
5
|
+
const createBooleanOption = constructOption(booleanOptionKind, ({ init }) => (name, params) => init(name, (self, value, error) => {
|
|
6
|
+
if (typeof value === "string") return error.addUnexpectedOptionValueIssue(self.name, value);
|
|
7
|
+
return value !== null;
|
|
8
|
+
}, {
|
|
9
|
+
description: params?.description ?? null,
|
|
10
|
+
aliases: params?.aliases ?? []
|
|
11
|
+
}));
|
|
12
|
+
//#endregion
|
|
13
|
+
export { booleanOptionKind, createBooleanOption };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_string = require("../../../dataStructure/common/codec/defaults/string.cjs");
|
|
3
|
+
const require_kind = require("../../kind.cjs");
|
|
4
|
+
const require_base = require("../base.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/options/defaults/simple.ts
|
|
8
|
+
const simpleOptionKind = require_kind.createKind("command-simple-option");
|
|
9
|
+
const createOption = require_base.constructOption(simpleOptionKind, ({ init }) => (name, dataStructure, params) => init(name, async (self, value, error) => {
|
|
10
|
+
if (value === null && self.required === true) return error.addRequiredOptionIssue(self.name);
|
|
11
|
+
if (value === null) return;
|
|
12
|
+
if (value === void 0) return error.addRequiredOptionValueIssue(self.name);
|
|
13
|
+
const result = await self.dataStructure.asyncDecode(require_string.codecsString, value);
|
|
14
|
+
if (_duplojs_lang_either.isLeft(result)) return error.addDataStructureOptionIssue(self.name, value, _duplojs_lang_either.unwrapLeft(result));
|
|
15
|
+
return _duplojs_lang_either.unwrapRight(result);
|
|
16
|
+
}, {
|
|
17
|
+
description: params?.description ?? null,
|
|
18
|
+
aliases: params?.aliases ?? []
|
|
19
|
+
}, {
|
|
20
|
+
dataStructure,
|
|
21
|
+
required: params?.required ?? false
|
|
22
|
+
}));
|
|
23
|
+
//#endregion
|
|
24
|
+
exports.createOption = createOption;
|
|
25
|
+
exports.simpleOptionKind = simpleOptionKind;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Option } from '../base';
|
|
2
|
+
import { EligibleType } from '../../types';
|
|
3
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
4
|
+
import type * as DKind from "@duplojs/lang/kind";
|
|
5
|
+
import type * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
6
|
+
export declare const simpleOptionKind: DKind.Handler<DKind.Definition<"@DuplojsServerCommand/command-simple-option", unknown>>;
|
|
7
|
+
export interface SimpleOption<GenericName extends string = string, GenericValue extends EligibleType = EligibleType> extends DCommon.Forward<Option<GenericName, GenericValue> & DKind.Kind<typeof simpleOptionKind>> {
|
|
8
|
+
readonly dataStructure: DDataStructure.Structure<GenericValue>;
|
|
9
|
+
readonly required: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface CreateSimpleOptionParams {
|
|
12
|
+
description?: string;
|
|
13
|
+
aliases?: readonly string[];
|
|
14
|
+
required?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const createOption: <GenericName extends string, GenericStructure extends DDataStructure.Structure<EligibleType>, GenericValue extends DDataStructure.StructureValue<GenericStructure>, const GenericParams extends CreateSimpleOptionParams = {}>(name: GenericName, dataStructure: GenericStructure, params?: GenericParams & CreateSimpleOptionParams) => SimpleOption<GenericName, (GenericValue | (DCommon.IsEqual<GenericParams["required"], true> extends true ? never : undefined))>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { codecsString } from "../../../dataStructure/common/codec/defaults/string.mjs";
|
|
2
|
+
import { createKind } from "../../kind.mjs";
|
|
3
|
+
import { constructOption } from "../base.mjs";
|
|
4
|
+
import * as DEither from "@duplojs/lang/either";
|
|
5
|
+
//#region scripts/command/options/defaults/simple.ts
|
|
6
|
+
const simpleOptionKind = createKind("command-simple-option");
|
|
7
|
+
const createOption = constructOption(simpleOptionKind, ({ init }) => (name, dataStructure, params) => init(name, async (self, value, error) => {
|
|
8
|
+
if (value === null && self.required === true) return error.addRequiredOptionIssue(self.name);
|
|
9
|
+
if (value === null) return;
|
|
10
|
+
if (value === void 0) return error.addRequiredOptionValueIssue(self.name);
|
|
11
|
+
const result = await self.dataStructure.asyncDecode(codecsString, value);
|
|
12
|
+
if (DEither.isLeft(result)) return error.addDataStructureOptionIssue(self.name, value, DEither.unwrapLeft(result));
|
|
13
|
+
return DEither.unwrapRight(result);
|
|
14
|
+
}, {
|
|
15
|
+
description: params?.description ?? null,
|
|
16
|
+
aliases: params?.aliases ?? []
|
|
17
|
+
}, {
|
|
18
|
+
dataStructure,
|
|
19
|
+
required: params?.required ?? false
|
|
20
|
+
}));
|
|
21
|
+
//#endregion
|
|
22
|
+
export { createOption, simpleOptionKind };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let _duplojs_lang_kind = require("@duplojs/lang/kind");
|
|
3
|
+
_duplojs_lang_kind = require_runtime.__toESM(_duplojs_lang_kind, 1);
|
|
4
|
+
//#region scripts/command/options/identifier.ts
|
|
5
|
+
const optionIdentifier = _duplojs_lang_kind.createKindIdentifier();
|
|
6
|
+
//#endregion
|
|
7
|
+
exports.optionIdentifier = optionIdentifier;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type * from './options';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Option } from '../base';
|
|
2
|
+
import { SimpleOption, BooleanOption, ArrayOption } from '../defaults';
|
|
3
|
+
export interface OptionsStore {
|
|
4
|
+
base: Option;
|
|
5
|
+
boolean: BooleanOption;
|
|
6
|
+
simple: SimpleOption;
|
|
7
|
+
array: ArrayOption;
|
|
8
|
+
}
|
|
9
|
+
export type Options = Extract<OptionsStore[keyof OptionsStore], Option>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type * as DObject from "@duplojs/lang/object";
|
|
2
|
+
import type * as DSDataStructure from '../../dataStructure';
|
|
3
|
+
import type * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
4
|
+
export type EligibleType = (string | DDataStructure.FundamentalTypeValue<DObject.Values<typeof DSDataStructure.codecsString.definition>["fundamentalType"]>);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
2
|
+
export type ForbiddenDuplicateName<GenericItems extends readonly {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
}[], GenericType extends string, GenericSeenNames extends string = never> = GenericItems extends readonly [
|
|
5
|
+
infer InferredFirstItem extends {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
},
|
|
8
|
+
...infer InferredRestItems extends {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
}[]
|
|
11
|
+
] ? InferredFirstItem["name"] extends GenericSeenNames ? DCommon.ComputedTypeError<`Duplicate ${GenericType} name "${InferredFirstItem["name"]}"`> : ForbiddenDuplicateName<InferredRestItems, GenericType, GenericSeenNames | InferredFirstItem["name"]> : unknown;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let _duplojs_lang_object = require("@duplojs/lang/object");
|
|
3
|
+
_duplojs_lang_object = require_runtime.__toESM(_duplojs_lang_object, 1);
|
|
4
|
+
let _duplojs_lang_generator = require("@duplojs/lang/generator");
|
|
5
|
+
_duplojs_lang_generator = require_runtime.__toESM(_duplojs_lang_generator, 1);
|
|
6
|
+
let _duplojs_lang_string = require("@duplojs/lang/string");
|
|
7
|
+
_duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
|
|
8
|
+
//#region scripts/common/environmentVariable/expandEnvironmentVariables.ts
|
|
9
|
+
const envVarRegex = /(?<!\\)\${(?<value>[^{}]+)}/g;
|
|
10
|
+
const escapedDollarRegex = /\\\$/g;
|
|
11
|
+
function expandValue(value, env, stack = /* @__PURE__ */ new Set()) {
|
|
12
|
+
return _duplojs_lang_string.replace(value, envVarRegex, ({ namedGroups }) => {
|
|
13
|
+
const value = namedGroups.value;
|
|
14
|
+
const rawEnvValue = env[value];
|
|
15
|
+
if (rawEnvValue === void 0 || stack.has(value)) return "";
|
|
16
|
+
stack.add(value);
|
|
17
|
+
const resolved = expandValue(rawEnvValue, env, stack);
|
|
18
|
+
stack.delete(value);
|
|
19
|
+
return resolved;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function expandEnvironmentVariables(env) {
|
|
23
|
+
return _duplojs_lang_generator.reduce(_duplojs_lang_object.entries(env), _duplojs_lang_generator.reduceFrom(env), ({ item: [key, value], lastValue, nextWithObject }) => nextWithObject(lastValue, { [key]: _duplojs_lang_string.replaceAll(expandValue(value, lastValue), escapedDollarRegex, "$") }));
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.expandEnvironmentVariables = expandEnvironmentVariables;
|
|
27
|
+
exports.expandValue = expandValue;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as DObject from "@duplojs/lang/object";
|
|
2
|
+
import * as DGenerator from "@duplojs/lang/generator";
|
|
3
|
+
import * as DString from "@duplojs/lang/string";
|
|
4
|
+
//#region scripts/common/environmentVariable/expandEnvironmentVariables.ts
|
|
5
|
+
const envVarRegex = /(?<!\\)\${(?<value>[^{}]+)}/g;
|
|
6
|
+
const escapedDollarRegex = /\\\$/g;
|
|
7
|
+
function expandValue(value, env, stack = /* @__PURE__ */ new Set()) {
|
|
8
|
+
return DString.replace(value, envVarRegex, ({ namedGroups }) => {
|
|
9
|
+
const value = namedGroups.value;
|
|
10
|
+
const rawEnvValue = env[value];
|
|
11
|
+
if (rawEnvValue === void 0 || stack.has(value)) return "";
|
|
12
|
+
stack.add(value);
|
|
13
|
+
const resolved = expandValue(rawEnvValue, env, stack);
|
|
14
|
+
stack.delete(value);
|
|
15
|
+
return resolved;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function expandEnvironmentVariables(env) {
|
|
19
|
+
return DGenerator.reduce(DObject.entries(env), DGenerator.reduceFrom(env), ({ item: [key, value], lastValue, nextWithObject }) => nextWithObject(lastValue, { [key]: DString.replaceAll(expandValue(value, lastValue), escapedDollarRegex, "$") }));
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { expandEnvironmentVariables, expandValue };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_implementor = require("../../implementor.cjs");
|
|
3
|
+
const require_string = require("../../dataStructure/common/codec/defaults/string.cjs");
|
|
4
|
+
const require_parseEnvironmentFiles = require("./parseEnvironmentFiles.cjs");
|
|
5
|
+
const require_expandEnvironmentVariables = require("./expandEnvironmentVariables.cjs");
|
|
6
|
+
const require_overrideEnvironmentVariables = require("./overrideEnvironmentVariables.cjs");
|
|
7
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
8
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
9
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
10
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 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_object = require("@duplojs/lang/object");
|
|
14
|
+
_duplojs_lang_object = require_runtime.__toESM(_duplojs_lang_object, 1);
|
|
15
|
+
let _duplojs_lang_array = require("@duplojs/lang/array");
|
|
16
|
+
_duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
|
|
17
|
+
//#region scripts/common/environmentVariable/index.ts
|
|
18
|
+
const environmentVariable = require_implementor.implementFunction("environmentVariable", {
|
|
19
|
+
NODE: async (shape, envFileParams) => {
|
|
20
|
+
const baseEnv = _duplojs_lang_common.pipe(process.env, _duplojs_lang_object.entries, _duplojs_lang_array.filter((entry) => entry[1] !== void 0), _duplojs_lang_object.fromEntries);
|
|
21
|
+
const parseEnvFileResult = await require_parseEnvironmentFiles.parseEnvironmentFiles(baseEnv, envFileParams?.includedEnvironmentFiles ?? []);
|
|
22
|
+
if (_duplojs_lang_either.isLeft(parseEnvFileResult)) return parseEnvFileResult;
|
|
23
|
+
const overrideEnvResult = require_overrideEnvironmentVariables.overrideEnvironmentVariables(parseEnvFileResult, envFileParams?.override ?? false);
|
|
24
|
+
const expandEnvResult = require_expandEnvironmentVariables.expandEnvironmentVariables(overrideEnvResult);
|
|
25
|
+
const structure = _duplojs_lang_dataStructure.object(shape);
|
|
26
|
+
const envResult = _duplojs_lang_object.pick(expandEnvResult, structure.definition.keys);
|
|
27
|
+
const checkedEnvResult = await structure.asyncDecode(envFileParams?.codecs ?? require_string.codecsString, envResult);
|
|
28
|
+
if (_duplojs_lang_either.isLeft(checkedEnvResult)) return checkedEnvResult;
|
|
29
|
+
if (envFileParams?.justRead !== true) process.env = expandEnvResult;
|
|
30
|
+
return checkedEnvResult;
|
|
31
|
+
},
|
|
32
|
+
DENO: async (shape, envFileParams) => {
|
|
33
|
+
const parseEnvFileResult = await require_parseEnvironmentFiles.parseEnvironmentFiles(Deno.env.toObject(), envFileParams?.includedEnvironmentFiles ?? []);
|
|
34
|
+
if (_duplojs_lang_either.isLeft(parseEnvFileResult)) return parseEnvFileResult;
|
|
35
|
+
const overrideEnvResult = require_overrideEnvironmentVariables.overrideEnvironmentVariables(parseEnvFileResult, envFileParams?.override ?? false);
|
|
36
|
+
const expandEnvResult = require_expandEnvironmentVariables.expandEnvironmentVariables(overrideEnvResult);
|
|
37
|
+
const structure = _duplojs_lang_dataStructure.object(shape);
|
|
38
|
+
const envResult = _duplojs_lang_object.pick(expandEnvResult, structure.definition.keys);
|
|
39
|
+
const checkedEnvResult = await structure.asyncDecode(envFileParams?.codecs ?? _duplojs_lang_dataStructure.codecsString, envResult);
|
|
40
|
+
if (_duplojs_lang_either.isLeft(checkedEnvResult)) return checkedEnvResult;
|
|
41
|
+
if (envFileParams?.justRead !== true) for (const [key, value] of _duplojs_lang_object.entries(expandEnvResult)) if (value) Deno.env.set(key, value);
|
|
42
|
+
else Deno.env.delete(key);
|
|
43
|
+
return checkedEnvResult;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
//#endregion
|
|
47
|
+
exports.environmentVariable = environmentVariable;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
2
|
+
import * as DEither from "@duplojs/lang/either";
|
|
3
|
+
import type * as DPath from "@duplojs/lang/path";
|
|
4
|
+
import type * as DSFile from '../../file';
|
|
5
|
+
export interface EnvironmentVariableFileParams {
|
|
6
|
+
includedEnvironmentFiles?: (string & DPath.Path)[];
|
|
7
|
+
override?: boolean;
|
|
8
|
+
justRead?: boolean;
|
|
9
|
+
codecs?: DDataStructure.Codecs;
|
|
10
|
+
}
|
|
11
|
+
declare module '../../implementor' {
|
|
12
|
+
interface ServerFunction {
|
|
13
|
+
environmentVariable<GenericShape extends DDataStructure.ShapeObjectStructure>(shape: GenericShape, envFileParams?: EnvironmentVariableFileParams): Promise<DEither.Right<"decode-success", DDataStructure.ShapeObjectStructureValue<GenericShape>> | Exclude<DSFile.ReadTextFileResult, DEither.Right> | DEither.Left<"decode-error", DDataStructure.Error>>;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export declare const environmentVariable: <GenericShape extends DDataStructure.ShapeObjectStructure>(shape: GenericShape, envFileParams?: EnvironmentVariableFileParams) => Promise<DEither.Right<"decode-success", DDataStructure.ShapeObjectStructureValue<GenericShape>> | Exclude<DSFile.ReadTextFileResult, DEither.Right> | DEither.Left<"decode-error", DDataStructure.Error>>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { implementFunction } from "../../implementor.mjs";
|
|
2
|
+
import { codecsString } from "../../dataStructure/common/codec/defaults/string.mjs";
|
|
3
|
+
import { parseEnvironmentFiles } from "./parseEnvironmentFiles.mjs";
|
|
4
|
+
import { expandEnvironmentVariables } from "./expandEnvironmentVariables.mjs";
|
|
5
|
+
import { overrideEnvironmentVariables } from "./overrideEnvironmentVariables.mjs";
|
|
6
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
7
|
+
import * as DEither from "@duplojs/lang/either";
|
|
8
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
9
|
+
import * as DObject from "@duplojs/lang/object";
|
|
10
|
+
import * as DArray from "@duplojs/lang/array";
|
|
11
|
+
//#region scripts/common/environmentVariable/index.ts
|
|
12
|
+
const environmentVariable = implementFunction("environmentVariable", {
|
|
13
|
+
NODE: async (shape, envFileParams) => {
|
|
14
|
+
const baseEnv = DCommon.pipe(process.env, DObject.entries, DArray.filter((entry) => entry[1] !== void 0), DObject.fromEntries);
|
|
15
|
+
const parseEnvFileResult = await parseEnvironmentFiles(baseEnv, envFileParams?.includedEnvironmentFiles ?? []);
|
|
16
|
+
if (DEither.isLeft(parseEnvFileResult)) return parseEnvFileResult;
|
|
17
|
+
const overrideEnvResult = overrideEnvironmentVariables(parseEnvFileResult, envFileParams?.override ?? false);
|
|
18
|
+
const expandEnvResult = expandEnvironmentVariables(overrideEnvResult);
|
|
19
|
+
const structure = DDataStructure.object(shape);
|
|
20
|
+
const envResult = DObject.pick(expandEnvResult, structure.definition.keys);
|
|
21
|
+
const checkedEnvResult = await structure.asyncDecode(envFileParams?.codecs ?? codecsString, envResult);
|
|
22
|
+
if (DEither.isLeft(checkedEnvResult)) return checkedEnvResult;
|
|
23
|
+
if (envFileParams?.justRead !== true) process.env = expandEnvResult;
|
|
24
|
+
return checkedEnvResult;
|
|
25
|
+
},
|
|
26
|
+
DENO: async (shape, envFileParams) => {
|
|
27
|
+
const parseEnvFileResult = await parseEnvironmentFiles(Deno.env.toObject(), envFileParams?.includedEnvironmentFiles ?? []);
|
|
28
|
+
if (DEither.isLeft(parseEnvFileResult)) return parseEnvFileResult;
|
|
29
|
+
const overrideEnvResult = overrideEnvironmentVariables(parseEnvFileResult, envFileParams?.override ?? false);
|
|
30
|
+
const expandEnvResult = expandEnvironmentVariables(overrideEnvResult);
|
|
31
|
+
const structure = DDataStructure.object(shape);
|
|
32
|
+
const envResult = DObject.pick(expandEnvResult, structure.definition.keys);
|
|
33
|
+
const checkedEnvResult = await structure.asyncDecode(envFileParams?.codecs ?? DDataStructure.codecsString, envResult);
|
|
34
|
+
if (DEither.isLeft(checkedEnvResult)) return checkedEnvResult;
|
|
35
|
+
if (envFileParams?.justRead !== true) for (const [key, value] of DObject.entries(expandEnvResult)) if (value) Deno.env.set(key, value);
|
|
36
|
+
else Deno.env.delete(key);
|
|
37
|
+
return checkedEnvResult;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
//#endregion
|
|
41
|
+
export { environmentVariable };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
3
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
4
|
+
let _duplojs_lang_object = require("@duplojs/lang/object");
|
|
5
|
+
_duplojs_lang_object = require_runtime.__toESM(_duplojs_lang_object, 1);
|
|
6
|
+
let _duplojs_lang_array = require("@duplojs/lang/array");
|
|
7
|
+
_duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
|
|
8
|
+
//#region scripts/common/environmentVariable/overrideEnvironmentVariables.ts
|
|
9
|
+
function overrideEnvironmentVariables(arrayEnv, override) {
|
|
10
|
+
return _duplojs_lang_common.pipe(arrayEnv, _duplojs_lang_array.map(_duplojs_lang_object.entries), _duplojs_lang_array.flat, (entries) => override ? entries : _duplojs_lang_array.reverse(entries), _duplojs_lang_object.fromEntries);
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
exports.overrideEnvironmentVariables = overrideEnvironmentVariables;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
2
|
+
import * as DObject from "@duplojs/lang/object";
|
|
3
|
+
import * as DArray from "@duplojs/lang/array";
|
|
4
|
+
//#region scripts/common/environmentVariable/overrideEnvironmentVariables.ts
|
|
5
|
+
function overrideEnvironmentVariables(arrayEnv, override) {
|
|
6
|
+
return DCommon.pipe(arrayEnv, DArray.map(DObject.entries), DArray.flat, (entries) => override ? entries : DArray.reverse(entries), DObject.fromEntries);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { overrideEnvironmentVariables };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_readTextFile = require("../../file/readTextFile.cjs");
|
|
3
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
4
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
5
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
6
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
7
|
+
let _duplojs_lang_generator = require("@duplojs/lang/generator");
|
|
8
|
+
_duplojs_lang_generator = require_runtime.__toESM(_duplojs_lang_generator, 1);
|
|
9
|
+
let _duplojs_lang_string = require("@duplojs/lang/string");
|
|
10
|
+
_duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
|
|
11
|
+
//#region scripts/common/environmentVariable/parseEnvironmentFiles.ts
|
|
12
|
+
const lineRegex = /^(?:export\s+)?(?<key>[A-Z_][A-Z0-9_]*)=(?<value>'(?:\\'|[^'])*'|"(?:\\"|[^"])*"|`(?:\\`|[^`])*`|[^\s#\r\n][^#\r\n]*|)\s*(?:#.*)?$/gm;
|
|
13
|
+
const endLineBreakerRegex = /\r\n?/gm;
|
|
14
|
+
const surroundingQuoteRegex = /^(['"`])([\s\S]*)\1$/gm;
|
|
15
|
+
const backCartRegex = /\\r/g;
|
|
16
|
+
const newLineRegex = /\\n/g;
|
|
17
|
+
function parseEnvironmentLine(line) {
|
|
18
|
+
return _duplojs_lang_common.pipe(line, _duplojs_lang_string.replace(endLineBreakerRegex, "\n"), _duplojs_lang_string.extractAll(lineRegex), _duplojs_lang_generator.reduce(_duplojs_lang_generator.reduceFrom({}), ({ item, nextWithObject, lastValue, next }) => {
|
|
19
|
+
if (item.namedGroups?.key && item.namedGroups?.value) return nextWithObject(lastValue, { [item.namedGroups.key]: _duplojs_lang_common.pipe(item.namedGroups.value, (value) => {
|
|
20
|
+
const surroundingValue = _duplojs_lang_string.replace(value, surroundingQuoteRegex, "$2");
|
|
21
|
+
if (_duplojs_lang_string.startsWith(value, "\"")) return _duplojs_lang_common.pipe(surroundingValue, _duplojs_lang_string.replace(newLineRegex, "\n"), _duplojs_lang_string.replace(backCartRegex, "\r"));
|
|
22
|
+
return surroundingValue;
|
|
23
|
+
}) });
|
|
24
|
+
return next(lastValue);
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
function parseEnvironmentFiles(baseEnv, paths) {
|
|
28
|
+
return _duplojs_lang_generator.asyncReduce(paths, _duplojs_lang_generator.reduceFrom([baseEnv]), ({ lastValue, item, nextPush, exit }) => require_readTextFile.readTextFile(item).then(_duplojs_lang_common.innerPipe(_duplojs_lang_either.whenIsRight(_duplojs_lang_common.innerPipe(parseEnvironmentLine, (value) => nextPush(lastValue, value))), _duplojs_lang_common.when(_duplojs_lang_either.isLeft, exit))));
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
exports.parseEnvironmentFiles = parseEnvironmentFiles;
|
|
32
|
+
exports.parseEnvironmentLine = parseEnvironmentLine;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type * as DPath from "@duplojs/lang/path";
|
|
2
|
+
import * as DEither from "@duplojs/lang/either";
|
|
3
|
+
export declare function parseEnvironmentLine(line: string): Record<string, string>;
|
|
4
|
+
export declare function parseEnvironmentFiles(baseEnv: Record<string, string>, paths: (string & DPath.Path)[]): Promise<DEither.Left<"file-system-read-text-file-not-found", unknown> | DEither.Left<"file-system-read-text-file-permission-denied", unknown> | DEither.Left<"file-system-read-text-file-is-directory", unknown> | DEither.Left<"file-system-read-text-file-not-directory", unknown> | DEither.Left<"file-system-read-text-file-too-many-open-files", unknown> | DEither.Left<"file-system-read-text-file-busy", unknown> | DEither.Left<"file-system-read-text-file-error", unknown> | Record<string, string>[]>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { readTextFile } from "../../file/readTextFile.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DEither from "@duplojs/lang/either";
|
|
4
|
+
import * as DGenerator from "@duplojs/lang/generator";
|
|
5
|
+
import * as DString from "@duplojs/lang/string";
|
|
6
|
+
//#region scripts/common/environmentVariable/parseEnvironmentFiles.ts
|
|
7
|
+
const lineRegex = /^(?:export\s+)?(?<key>[A-Z_][A-Z0-9_]*)=(?<value>'(?:\\'|[^'])*'|"(?:\\"|[^"])*"|`(?:\\`|[^`])*`|[^\s#\r\n][^#\r\n]*|)\s*(?:#.*)?$/gm;
|
|
8
|
+
const endLineBreakerRegex = /\r\n?/gm;
|
|
9
|
+
const surroundingQuoteRegex = /^(['"`])([\s\S]*)\1$/gm;
|
|
10
|
+
const backCartRegex = /\\r/g;
|
|
11
|
+
const newLineRegex = /\\n/g;
|
|
12
|
+
function parseEnvironmentLine(line) {
|
|
13
|
+
return DCommon.pipe(line, DString.replace(endLineBreakerRegex, "\n"), DString.extractAll(lineRegex), DGenerator.reduce(DGenerator.reduceFrom({}), ({ item, nextWithObject, lastValue, next }) => {
|
|
14
|
+
if (item.namedGroups?.key && item.namedGroups?.value) return nextWithObject(lastValue, { [item.namedGroups.key]: DCommon.pipe(item.namedGroups.value, (value) => {
|
|
15
|
+
const surroundingValue = DString.replace(value, surroundingQuoteRegex, "$2");
|
|
16
|
+
if (DString.startsWith(value, "\"")) return DCommon.pipe(surroundingValue, DString.replace(newLineRegex, "\n"), DString.replace(backCartRegex, "\r"));
|
|
17
|
+
return surroundingValue;
|
|
18
|
+
}) });
|
|
19
|
+
return next(lastValue);
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
function parseEnvironmentFiles(baseEnv, paths) {
|
|
23
|
+
return DGenerator.asyncReduce(paths, DGenerator.reduceFrom([baseEnv]), ({ lastValue, item, nextPush, exit }) => readTextFile(item).then(DCommon.innerPipe(DEither.whenIsRight(DCommon.innerPipe(parseEnvironmentLine, (value) => nextPush(lastValue, value))), DCommon.when(DEither.isLeft, exit))));
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { parseEnvironmentFiles, parseEnvironmentLine };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_kind = require("../kind.cjs");
|
|
3
|
+
const require_index = require("./environmentVariable/index.cjs");
|
|
4
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
5
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
6
|
+
let _duplojs_lang_kind = require("@duplojs/lang/kind");
|
|
7
|
+
_duplojs_lang_kind = require_runtime.__toESM(_duplojs_lang_kind, 1);
|
|
8
|
+
//#region scripts/common/environmentVariableOrThrow.ts
|
|
9
|
+
var EnvironmentVariableError = class extends _duplojs_lang_kind.parentClass(require_kind.createKind("environment-variable-error"), Error) {
|
|
10
|
+
error;
|
|
11
|
+
constructor(error) {
|
|
12
|
+
super(null, "Failed to load environment variables: one env file could not be read or parsed values do not match the provided structure.");
|
|
13
|
+
this.error = error;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
async function environmentVariableOrThrow(shape, envFileParams) {
|
|
17
|
+
const result = await require_index.environmentVariable(shape, envFileParams);
|
|
18
|
+
if (_duplojs_lang_either.isLeft(result)) throw new EnvironmentVariableError(result);
|
|
19
|
+
return _duplojs_lang_either.unwrapRight(result);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
exports.EnvironmentVariableError = EnvironmentVariableError;
|
|
23
|
+
exports.environmentVariableOrThrow = environmentVariableOrThrow;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EnvironmentVariableFileParams } from './environmentVariable';
|
|
2
|
+
import * as DEither from "@duplojs/lang/either";
|
|
3
|
+
import type * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
4
|
+
import * as DKind from "@duplojs/lang/kind";
|
|
5
|
+
import type * as DSFile from '../file';
|
|
6
|
+
declare const EnvironmentVariableError_base: DKind.KindClass<DKind.Handler<DKind.Definition<"@DuplojsServer/environment-variable-error", unknown>>, ErrorConstructor>;
|
|
7
|
+
export declare class EnvironmentVariableError extends EnvironmentVariableError_base {
|
|
8
|
+
error: (Exclude<DSFile.ReadTextFileResult, DEither.Right> | DEither.Left<"decode-error", DDataStructure.Error>);
|
|
9
|
+
constructor(error: (Exclude<DSFile.ReadTextFileResult, DEither.Right> | DEither.Left<"decode-error", DDataStructure.Error>));
|
|
10
|
+
}
|
|
11
|
+
export declare function environmentVariableOrThrow<GenericShape extends DDataStructure.ShapeObjectStructure>(shape: GenericShape, envFileParams?: EnvironmentVariableFileParams): Promise<DDataStructure.ShapeObjectStructureValue<GenericShape>>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createKind } from "../kind.mjs";
|
|
2
|
+
import { environmentVariable } from "./environmentVariable/index.mjs";
|
|
3
|
+
import * as DEither from "@duplojs/lang/either";
|
|
4
|
+
import * as DKind from "@duplojs/lang/kind";
|
|
5
|
+
//#region scripts/common/environmentVariableOrThrow.ts
|
|
6
|
+
var EnvironmentVariableError = class extends DKind.parentClass(createKind("environment-variable-error"), Error) {
|
|
7
|
+
error;
|
|
8
|
+
constructor(error) {
|
|
9
|
+
super(null, "Failed to load environment variables: one env file could not be read or parsed values do not match the provided structure.");
|
|
10
|
+
this.error = error;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
async function environmentVariableOrThrow(shape, envFileParams) {
|
|
14
|
+
const result = await environmentVariable(shape, envFileParams);
|
|
15
|
+
if (DEither.isLeft(result)) throw new EnvironmentVariableError(result);
|
|
16
|
+
return DEither.unwrapRight(result);
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { EnvironmentVariableError, environmentVariableOrThrow };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { implementFunction } from "../implementor.mjs";
|
|
2
|
+
//#region scripts/common/exitProcess.ts
|
|
3
|
+
const exitProcess = implementFunction("exitProcess", {
|
|
4
|
+
NODE: (code) => process.exit(code),
|
|
5
|
+
DENO: (code) => Deno.exit(code)
|
|
6
|
+
});
|
|
7
|
+
//#endregion
|
|
8
|
+
export { exitProcess };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_implementor = require("../implementor.cjs");
|
|
3
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
4
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
5
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
6
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
7
|
+
let _duplojs_lang_path = require("@duplojs/lang/path");
|
|
8
|
+
_duplojs_lang_path = require_runtime.__toESM(_duplojs_lang_path, 1);
|
|
9
|
+
//#region scripts/common/getCurrentWorkDirectory.ts
|
|
10
|
+
const getCurrentWorkDirectory = require_implementor.implementFunction("getCurrentWorkDirectory", {
|
|
11
|
+
NODE: () => _duplojs_lang_common.pipe(_duplojs_lang_either.safeCallback(() => _duplojs_lang_common.whenElse(_duplojs_lang_path.normalize(process.cwd()), (value) => _duplojs_lang_common.isType(value, "string") && _duplojs_lang_path.isAbsolute(value), _duplojs_lang_either.success, _duplojs_lang_either.error)), _duplojs_lang_either.whenIsLeft(_duplojs_lang_either.error)),
|
|
12
|
+
DENO: () => _duplojs_lang_common.pipe(_duplojs_lang_either.safeCallback(() => _duplojs_lang_common.whenElse(_duplojs_lang_path.normalize(Deno.cwd()), (value) => _duplojs_lang_common.isType(value, "string") && _duplojs_lang_path.isAbsolute(value), _duplojs_lang_either.success, _duplojs_lang_either.error)), _duplojs_lang_either.whenIsLeft(_duplojs_lang_either.error))
|
|
13
|
+
});
|
|
14
|
+
//#endregion
|
|
15
|
+
exports.getCurrentWorkDirectory = getCurrentWorkDirectory;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as DEither from "@duplojs/lang/either";
|
|
2
|
+
import * as DPath from "@duplojs/lang/path";
|
|
3
|
+
declare module '../implementor' {
|
|
4
|
+
interface ServerFunction {
|
|
5
|
+
getCurrentWorkDirectory(): (DEither.Error<unknown> | DEither.Success<string & DPath.Absolute>);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare const getCurrentWorkDirectory: () => (DEither.Error<unknown> | DEither.Success<string & DPath.Absolute>);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { implementFunction } from "../implementor.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DEither from "@duplojs/lang/either";
|
|
4
|
+
import * as DPath from "@duplojs/lang/path";
|
|
5
|
+
//#region scripts/common/getCurrentWorkDirectory.ts
|
|
6
|
+
const getCurrentWorkDirectory = implementFunction("getCurrentWorkDirectory", {
|
|
7
|
+
NODE: () => DCommon.pipe(DEither.safeCallback(() => DCommon.whenElse(DPath.normalize(process.cwd()), (value) => DCommon.isType(value, "string") && DPath.isAbsolute(value), DEither.success, DEither.error)), DEither.whenIsLeft(DEither.error)),
|
|
8
|
+
DENO: () => DCommon.pipe(DEither.safeCallback(() => DCommon.whenElse(DPath.normalize(Deno.cwd()), (value) => DCommon.isType(value, "string") && DPath.isAbsolute(value), DEither.success, DEither.error)), DEither.whenIsLeft(DEither.error))
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { getCurrentWorkDirectory };
|