@achs/env 4.12.3 → 5.0.0-alpha.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/CHANGELOG.md +31 -0
- package/README.md +580 -830
- package/arguments.d.ts +14 -14
- package/arguments.d.ts.map +1 -1
- package/arguments.js +135 -131
- package/arguments.js.map +1 -1
- package/assets/logo-achs.svg +16 -0
- package/assets/logo.svg +46 -0
- package/commands/env.command.d.ts +8 -2
- package/commands/env.command.d.ts.map +1 -1
- package/commands/env.command.js +55 -82
- package/commands/env.command.js.map +1 -1
- package/commands/export.command.d.ts +8 -2
- package/commands/export.command.d.ts.map +1 -1
- package/commands/export.command.js +53 -62
- package/commands/export.command.js.map +1 -1
- package/commands/index.d.ts +5 -5
- package/commands/index.d.ts.map +1 -1
- package/commands/index.js +5 -14
- package/commands/pull.command.d.ts +6 -1
- package/commands/pull.command.d.ts.map +1 -1
- package/commands/pull.command.js +20 -37
- package/commands/pull.command.js.map +1 -1
- package/commands/push.command.d.ts +6 -1
- package/commands/push.command.d.ts.map +1 -1
- package/commands/push.command.js +20 -36
- package/commands/push.command.js.map +1 -1
- package/commands/schema.command.d.ts +6 -1
- package/commands/schema.command.d.ts.map +1 -1
- package/commands/schema.command.js +16 -17
- package/commands/schema.command.js.map +1 -1
- package/exec.d.ts +7 -1
- package/exec.d.ts.map +1 -1
- package/exec.js +84 -160
- package/exec.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.d.ts.map +1 -1
- package/index.js +3 -20
- package/interfaces/index.d.ts +1 -1
- package/interfaces/index.d.ts.map +1 -1
- package/interfaces/loader.interface.d.ts +29 -3
- package/interfaces/loader.interface.d.ts.map +1 -1
- package/main.d.ts +0 -1
- package/main.js +7 -26
- package/main.js.map +1 -1
- package/package.json +55 -34
- package/providers/app-settings.provider.d.ts +5 -2
- package/providers/app-settings.provider.d.ts.map +1 -1
- package/providers/app-settings.provider.js +36 -49
- package/providers/app-settings.provider.js.map +1 -1
- package/providers/azure-key-vault.provider.d.ts +12 -8
- package/providers/azure-key-vault.provider.d.ts.map +1 -1
- package/providers/azure-key-vault.provider.js +138 -169
- package/providers/azure-key-vault.provider.js.map +1 -1
- package/providers/index.d.ts +2 -2
- package/providers/index.d.ts.map +1 -1
- package/providers/index.js +18 -28
- package/providers/index.js.map +1 -1
- package/providers/local.provider.d.ts +5 -2
- package/providers/local.provider.d.ts.map +1 -1
- package/providers/local.provider.js +27 -40
- package/providers/local.provider.js.map +1 -1
- package/providers/package-json.provider.d.ts +5 -2
- package/providers/package-json.provider.d.ts.map +1 -1
- package/providers/package-json.provider.js +26 -28
- package/providers/package-json.provider.js.map +1 -1
- package/utils/argv.util.d.ts +10 -0
- package/utils/argv.util.d.ts.map +1 -0
- package/utils/argv.util.js +24 -0
- package/utils/argv.util.js.map +1 -0
- package/utils/command.util.d.ts +70 -3
- package/utils/command.util.d.ts.map +1 -1
- package/utils/command.util.js +60 -140
- package/utils/command.util.js.map +1 -1
- package/utils/index.d.ts +7 -6
- package/utils/index.d.ts.map +1 -1
- package/utils/index.js +8 -23
- package/utils/interpolate.util.d.ts +29 -1
- package/utils/interpolate.util.d.ts.map +1 -1
- package/utils/interpolate.util.js +12 -30
- package/utils/interpolate.util.js.map +1 -1
- package/utils/json.util.d.ts +41 -3
- package/utils/json.util.d.ts.map +1 -1
- package/utils/json.util.js +24 -42
- package/utils/json.util.js.map +1 -1
- package/utils/logger.d.ts +21 -2
- package/utils/logger.d.ts.map +1 -1
- package/utils/logger.js +31 -17
- package/utils/logger.js.map +1 -1
- package/utils/normalize.util.d.ts +24 -2
- package/utils/normalize.util.d.ts.map +1 -1
- package/utils/normalize.util.js +35 -56
- package/utils/normalize.util.js.map +1 -1
- package/utils/schema.util.d.ts +59 -0
- package/utils/schema.util.d.ts.map +1 -1
- package/utils/schema.util.js +62 -97
- package/utils/schema.util.js.map +1 -1
- package/commands/index.js.map +0 -1
- package/index.js.map +0 -1
- package/interfaces/index.js +0 -18
- package/interfaces/index.js.map +0 -1
- package/interfaces/loader.interface.js +0 -3
- package/interfaces/loader.interface.js.map +0 -1
- package/tsconfig.build.tsbuildinfo +0 -1
- package/utils/index.js.map +0 -1
|
@@ -1,42 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
});
|
|
26
|
-
},
|
|
27
|
-
load: async ({ localFile, ci, env }) => {
|
|
28
|
-
if (ci)
|
|
29
|
-
return [];
|
|
30
|
-
if (!env) {
|
|
31
|
-
logger.silly('no env, so skipping provider');
|
|
32
|
-
return [];
|
|
33
|
-
}
|
|
34
|
-
if (!(0, fs_1.existsSync)(localFile)) {
|
|
35
|
-
await (0, utils_1.writeJson)(localFile, {});
|
|
36
|
-
return [];
|
|
37
|
-
}
|
|
38
|
-
const [vars] = await (0, utils_1.readJson)(localFile);
|
|
39
|
-
return [vars];
|
|
40
|
-
}
|
|
1
|
+
import { readJson as e, writeJson as t } from "../utils/json.util.js";
|
|
2
|
+
import { logger as n } from "../utils/logger.js";
|
|
3
|
+
import "../utils/index.js";
|
|
4
|
+
import r from "picocolors";
|
|
5
|
+
import { existsSync as i } from "node:fs";
|
|
6
|
+
//#region src/providers/local.provider.ts
|
|
7
|
+
var a = "local", o = n.getSubLogger({ prefix: [r.bold(r.blue(`[${a}]`))] }), s = {
|
|
8
|
+
key: a,
|
|
9
|
+
builder: (e) => {
|
|
10
|
+
e.options({ localFile: {
|
|
11
|
+
alias: "lf",
|
|
12
|
+
default: "[[root]]/[[env]].local.env.json",
|
|
13
|
+
describe: "Local secret variables file path",
|
|
14
|
+
group: a,
|
|
15
|
+
type: "string"
|
|
16
|
+
} });
|
|
17
|
+
},
|
|
18
|
+
load: async ({ ci: n, env: r, localFile: a }) => {
|
|
19
|
+
if (n) return [];
|
|
20
|
+
if (!r) return o.silly("no env, so skipping provider"), [];
|
|
21
|
+
if (!i(a)) return await t(a, {}), [];
|
|
22
|
+
let [s] = await e(a);
|
|
23
|
+
return [s];
|
|
24
|
+
}
|
|
41
25
|
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { s as LocalProvider };
|
|
28
|
+
|
|
42
29
|
//# sourceMappingURL=local.provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.provider.js","
|
|
1
|
+
{"version":3,"file":"local.provider.js","names":[],"sources":["../../src/providers/local.provider.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\r\nimport pc from 'picocolors';\r\nimport type { CommandArguments } from '../arguments.js';\r\nimport type { EnvProvider } from '../interfaces/index.js';\r\nimport { logger as globalLogger, readJson, writeJson } from '../utils/index.js';\r\n\r\nconst KEY = 'local';\r\n\r\nconst logger = globalLogger.getSubLogger({\r\n\tprefix: [pc.bold(pc.blue(`[${KEY}]`))],\r\n});\r\n\r\ninterface LocalCommandArguments extends CommandArguments {\r\n\tlocalFile: string;\r\n}\r\n\r\n/**\r\n * Loads local variables from env files in env folder.\r\n */\r\nexport const LocalProvider: EnvProvider<LocalCommandArguments> = {\r\n\tkey: KEY,\r\n\r\n\tbuilder: (builder) => {\r\n\t\tbuilder.options({\r\n\t\t\tlocalFile: {\r\n\t\t\t\talias: 'lf',\r\n\t\t\t\tdefault: '[[root]]/[[env]].local.env.json',\r\n\t\t\t\tdescribe: 'Local secret variables file path',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n\r\n\tload: async ({ ci, env, localFile }) => {\r\n\t\t// ci mode doesn't load local vars\r\n\t\tif (ci) return [];\r\n\r\n\t\tif (!env) {\r\n\t\t\tlogger.silly('no env, so skipping provider');\r\n\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tif (!existsSync(localFile)) {\r\n\t\t\tawait writeJson(localFile, {});\r\n\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst [vars] = await readJson(localFile);\r\n\r\n\t\treturn [vars];\r\n\t},\r\n};\r\n"],"mappings":";;;;;;AAMA,IAAM,IAAM,SAEN,IAAS,EAAa,aAAa,EACxC,QAAQ,CAAC,EAAG,KAAK,EAAG,KAAK,IAAI,EAAI,EAAE,CAAC,CAAC,EACtC,CAAC,GASY,IAAoD;CAChE,KAAK;CAEL,UAAU,MAAY;EACrB,EAAQ,QAAQ,EACf,WAAW;GACV,OAAO;GACP,SAAS;GACT,UAAU;GACV,OAAO;GACP,MAAM;EACP,EACD,CAAC;CACF;CAEA,MAAM,OAAO,EAAE,OAAI,QAAK,mBAAgB;EAEvC,IAAI,GAAI,OAAO,CAAC;EAEhB,IAAI,CAAC,GAGJ,OAFA,EAAO,MAAM,8BAA8B,GAEpC,CAAC;EAGT,IAAI,CAAC,EAAW,CAAS,GAGxB,OAFA,MAAM,EAAU,GAAW,CAAC,CAAC,GAEtB,CAAC;EAGT,IAAM,CAAC,KAAQ,MAAM,EAAS,CAAS;EAEvC,OAAO,CAAC,CAAI;CACb;AACD"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { CommandArguments } from '../arguments';
|
|
2
|
-
import { EnvProvider } from '../interfaces';
|
|
1
|
+
import { CommandArguments } from '../arguments.js';
|
|
2
|
+
import { EnvProvider } from '../interfaces/index.js';
|
|
3
3
|
interface PackageJsonCommandArguments extends CommandArguments {
|
|
4
4
|
packageInfoPrefix: string;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Loads project info from package.json.
|
|
8
|
+
*/
|
|
6
9
|
export declare const PackageJsonProvider: EnvProvider<PackageJsonCommandArguments>;
|
|
7
10
|
export {};
|
|
8
11
|
//# sourceMappingURL=package-json.provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.provider.d.ts","sourceRoot":"","sources":["../../src/providers/package-json.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"package-json.provider.d.ts","sourceRoot":"","sources":["../../src/providers/package-json.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,UAAU,2BAA4B,SAAQ,gBAAgB;IAC7D,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,2BAA2B,CA6BxE,CAAC"}
|
|
@@ -1,30 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
[`${packageInfoPrefix}NAME`]: name ?? null,
|
|
25
|
-
[`${packageInfoPrefix}TITLE`]: title ?? null,
|
|
26
|
-
[`${packageInfoPrefix}DESCRIPTION`]: description ?? null
|
|
27
|
-
};
|
|
28
|
-
}
|
|
1
|
+
//#region src/providers/package-json.provider.ts
|
|
2
|
+
var e = "package-json", t = {
|
|
3
|
+
key: e,
|
|
4
|
+
builder: (t) => {
|
|
5
|
+
t.options({ packageInfoPrefix: {
|
|
6
|
+
alias: "vp",
|
|
7
|
+
default: "",
|
|
8
|
+
group: e,
|
|
9
|
+
type: "string",
|
|
10
|
+
describe: "Prefix for loaded variables using package-json provider"
|
|
11
|
+
} });
|
|
12
|
+
},
|
|
13
|
+
load: ({ env: e = "development", packageInfoPrefix: t, projectInfo: n }) => {
|
|
14
|
+
let { description: r, name: i, project: a, title: o, version: s } = n;
|
|
15
|
+
return {
|
|
16
|
+
[`${t}ENV`]: e ?? null,
|
|
17
|
+
[`${t}DESCRIPTION`]: r ?? null,
|
|
18
|
+
[`${t}NAME`]: i ?? null,
|
|
19
|
+
[`${t}PROJECT`]: a ?? null,
|
|
20
|
+
[`${t}TITLE`]: o ?? null,
|
|
21
|
+
[`${t}VERSION`]: s ?? null
|
|
22
|
+
};
|
|
23
|
+
}
|
|
29
24
|
};
|
|
25
|
+
//#endregion
|
|
26
|
+
export { t as PackageJsonProvider };
|
|
27
|
+
|
|
30
28
|
//# sourceMappingURL=package-json.provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.provider.js","
|
|
1
|
+
{"version":3,"file":"package-json.provider.js","names":[],"sources":["../../src/providers/package-json.provider.ts"],"sourcesContent":["import type { CommandArguments } from '../arguments.js';\r\nimport type { EnvProvider } from '../interfaces/index.js';\r\n\r\nconst KEY = 'package-json';\r\n\r\ninterface PackageJsonCommandArguments extends CommandArguments {\r\n\tpackageInfoPrefix: string;\r\n}\r\n\r\n/**\r\n * Loads project info from package.json.\r\n */\r\nexport const PackageJsonProvider: EnvProvider<PackageJsonCommandArguments> = {\r\n\tkey: KEY,\r\n\r\n\tbuilder: (builder) => {\r\n\t\tbuilder.options({\r\n\t\t\tpackageInfoPrefix: {\r\n\t\t\t\talias: 'vp',\r\n\t\t\t\tdefault: '',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t\tdescribe:\r\n\t\t\t\t\t'Prefix for loaded variables using package-json provider',\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n\r\n\tload: ({ env = 'development', packageInfoPrefix, projectInfo }) => {\r\n\t\tconst { description, name, project, title, version } = projectInfo;\r\n\r\n\t\treturn {\r\n\t\t\t[`${packageInfoPrefix}ENV`]: env ?? null,\r\n\r\n\t\t\t[`${packageInfoPrefix}DESCRIPTION`]: description ?? null,\r\n\t\t\t[`${packageInfoPrefix}NAME`]: name ?? null,\r\n\t\t\t[`${packageInfoPrefix}PROJECT`]: project ?? null,\r\n\t\t\t[`${packageInfoPrefix}TITLE`]: title ?? null,\r\n\t\t\t[`${packageInfoPrefix}VERSION`]: version ?? null,\r\n\t\t};\r\n\t},\r\n};\r\n"],"mappings":";AAGA,IAAM,IAAM,gBASC,IAAgE;CAC5E,KAAK;CAEL,UAAU,MAAY;EACrB,EAAQ,QAAQ,EACf,mBAAmB;GAClB,OAAO;GACP,SAAS;GACT,OAAO;GACP,MAAM;GACN,UACC;EACF,EACD,CAAC;CACF;CAEA,OAAO,EAAE,SAAM,eAAe,sBAAmB,qBAAkB;EAClE,IAAM,EAAE,gBAAa,SAAM,YAAS,UAAO,eAAY;EAEvD,OAAO;IACL,GAAG,EAAkB,OAAO,KAAO;IAEnC,GAAG,EAAkB,eAAe,KAAe;IACnD,GAAG,EAAkB,QAAQ,KAAQ;IACrC,GAAG,EAAkB,WAAW,KAAW;IAC3C,GAAG,EAAkB,SAAS,KAAS;IACvC,GAAG,EAAkB,WAAW,KAAW;EAC7C;CACD;AACD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recombines argv tokens so single-quoted, space-containing argument values
|
|
3
|
+
* survive shell splitting. Mirrors the original main.ts pre-processing as a
|
|
4
|
+
* pure, testable function.
|
|
5
|
+
*
|
|
6
|
+
* @param argv raw process.argv
|
|
7
|
+
* @returns normalized argv (already sliced past node + script path)
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeRawArgv(argv: string[]): string[];
|
|
10
|
+
//# sourceMappingURL=argv.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argv.util.d.ts","sourceRoot":"","sources":["../../src/utils/argv.util.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA2BzD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/utils/argv.util.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
let t = [], n = "";
|
|
4
|
+
for (let r of e) {
|
|
5
|
+
if (r.includes(" ") && (r = `"${r}"`), r.at(-1) === "'") {
|
|
6
|
+
t.push(`${n} ${r}`.replaceAll("'", "\"")), n = "";
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
if (r[0] === "'") {
|
|
10
|
+
n += r;
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
if (n) {
|
|
14
|
+
n += ` ${r}`;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
t.push(r);
|
|
18
|
+
}
|
|
19
|
+
return t.slice(2);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { e as normalizeRawArgv };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=argv.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argv.util.js","names":[],"sources":["../../src/utils/argv.util.ts"],"sourcesContent":["/**\n * Recombines argv tokens so single-quoted, space-containing argument values\n * survive shell splitting. Mirrors the original main.ts pre-processing as a\n * pure, testable function.\n *\n * @param argv raw process.argv\n * @returns normalized argv (already sliced past node + script path)\n */\nexport function normalizeRawArgv(argv: string[]): string[] {\n\tconst cmdArgs: string[] = [];\n\tlet composite = '';\n\n\tfor (let arg of argv) {\n\t\tif (arg.includes(' ')) arg = `\"${arg}\"`;\n\n\t\tif (arg.at(-1) === \"'\") {\n\t\t\tcmdArgs.push(`${composite} ${arg}`.replaceAll(\"'\", '\"'));\n\t\t\tcomposite = '';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (arg[0] === \"'\") {\n\t\t\tcomposite += arg;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (composite) {\n\t\t\tcomposite += ` ${arg}`;\n\t\t\tcontinue;\n\t\t}\n\n\t\tcmdArgs.push(arg);\n\t}\n\n\treturn cmdArgs.slice(2);\n}\n"],"mappings":";AAQA,SAAgB,EAAiB,GAA0B;CAC1D,IAAM,IAAoB,CAAC,GACvB,IAAY;CAEhB,KAAK,IAAI,KAAO,GAAM;EAGrB,IAFI,EAAI,SAAS,GAAG,MAAG,IAAM,IAAI,EAAI,KAEjC,EAAI,GAAG,EAAE,MAAM,KAAK;GAEvB,AADA,EAAQ,KAAK,GAAG,EAAU,GAAG,IAAM,WAAW,KAAK,IAAG,CAAC,GACvD,IAAY;GACZ;EACD;EAEA,IAAI,EAAI,OAAO,KAAK;GACnB,KAAa;GACb;EACD;EAEA,IAAI,GAAW;GACd,KAAa,IAAI;GACjB;EACD;EAEA,EAAQ,KAAK,CAAG;CACjB;CAEA,OAAO,EAAQ,MAAM,CAAC;AACvB"}
|
package/utils/command.util.d.ts
CHANGED
|
@@ -1,13 +1,80 @@
|
|
|
1
1
|
import { Arguments } from 'yargs';
|
|
2
|
-
import { CommandArguments } from 'arguments';
|
|
3
|
-
import { EnvCommandArguments } from 'commands/env.command';
|
|
4
|
-
import { EnvProviderConfig, EnvProviderResult } from '../interfaces';
|
|
2
|
+
import { CommandArguments } from '../arguments.js';
|
|
3
|
+
import { EnvCommandArguments } from '../commands/env.command.js';
|
|
4
|
+
import { EnvProviderConfig, EnvProviderResult } from '../interfaces/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Injects config to command arguments from file.
|
|
7
|
+
*
|
|
8
|
+
* @param {Record<string, unknown>} argv
|
|
9
|
+
* @param {[string, string]} delimiters
|
|
10
|
+
*/
|
|
5
11
|
export declare function loadConfigFile(argv: Record<string, unknown>, delimiters: [string, string]): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Extracts subcommand from command line parameters.
|
|
14
|
+
*
|
|
15
|
+
* @export
|
|
16
|
+
* @param {string[]} rawArgv process.argv.slice(2)
|
|
17
|
+
* @param {[string, string]} delimiters
|
|
18
|
+
*
|
|
19
|
+
* @returns {string[]} subcommand for wrap if exists
|
|
20
|
+
*/
|
|
6
21
|
export declare function getSubcommand(rawArgv: string[], delimiters: [string, string]): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Loads providers JSON schema from file.
|
|
24
|
+
*
|
|
25
|
+
* @param {Record<string, unknown>} argv
|
|
26
|
+
* @param {[string, string]} delimiters
|
|
27
|
+
*
|
|
28
|
+
* @returns {Promise<Record<string, unknown>>}
|
|
29
|
+
*/
|
|
7
30
|
export declare function loadSchemaFile(argv: Record<string, unknown>, delimiters: [string, string]): Promise<Record<string, unknown> | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Reads project package.json.
|
|
33
|
+
*
|
|
34
|
+
* @export
|
|
35
|
+
* @returns {Promise<Record<string, unknown>> | never}
|
|
36
|
+
*/
|
|
8
37
|
export declare function loadProjectInfo(relativePath?: string): Promise<Record<string, unknown>>;
|
|
38
|
+
/**
|
|
39
|
+
* Executes load functions from provider handlers.
|
|
40
|
+
*
|
|
41
|
+
* @param {EnvProviderConfig[]} providers
|
|
42
|
+
* @param {Partial<Arguments<EnvCommandArguments>>} argv
|
|
43
|
+
*
|
|
44
|
+
* @returns {EnvProviderResult[]}
|
|
45
|
+
*/
|
|
9
46
|
export declare function loadVariablesFromProviders(providers: EnvProviderConfig[], argv: Partial<Arguments<EnvCommandArguments>>): Promise<EnvProviderResult[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Flattern environment provider results.
|
|
49
|
+
*
|
|
50
|
+
* @param {EnvProviderResult[]} results
|
|
51
|
+
* @param {Partial<Arguments<EnvCommandArguments>>} argv
|
|
52
|
+
*
|
|
53
|
+
* @throws {Error} on schema validation failed
|
|
54
|
+
*
|
|
55
|
+
* @returns {EnvProviderResult[]} flatten results
|
|
56
|
+
*/
|
|
10
57
|
export declare function flatResults(results: EnvProviderResult[], nestingDelimiter?: string): EnvProviderResult[] | never;
|
|
58
|
+
/**
|
|
59
|
+
* Flattern and validates environment provider results.
|
|
60
|
+
*
|
|
61
|
+
* @param {EnvProviderResult[]} results
|
|
62
|
+
* @param {Partial<Arguments<EnvCommandArguments>>} argv
|
|
63
|
+
*
|
|
64
|
+
* @throws {Error} on schema validation failed
|
|
65
|
+
*
|
|
66
|
+
* @returns {EnvProviderResult[]}
|
|
67
|
+
*/
|
|
11
68
|
export declare function flatAndValidateResults(results: EnvProviderResult[], argv: Partial<Arguments<EnvCommandArguments>>): EnvProviderResult[] | never;
|
|
69
|
+
/**
|
|
70
|
+
* Creates or updates JSON schema from
|
|
71
|
+
* environment variables grouped by provider key.
|
|
72
|
+
*
|
|
73
|
+
* @export
|
|
74
|
+
* @param {EnvProviderResult[]} env
|
|
75
|
+
* @param {Arguments<EnvCommandArguments>} argv
|
|
76
|
+
*
|
|
77
|
+
* @returns {Promise<object>} JSON schema grouped by provider key.
|
|
78
|
+
*/
|
|
12
79
|
export declare function generateSchemaFrom(env: EnvProviderResult[], argv: Arguments<CommandArguments>): Promise<object>;
|
|
13
80
|
//# sourceMappingURL=command.util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.util.d.ts","sourceRoot":"","sources":["../../src/utils/command.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command.util.d.ts","sourceRoot":"","sources":["../../src/utils/command.util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EACX,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,wBAAwB,CAAC;AAWhC;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,YAkB5E;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAS9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,YAAY,SAAK,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiBlC;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACzC,SAAS,EAAE,iBAAiB,EAAE,EAC9B,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,GAC3C,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAY9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAC1B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,gBAAgB,SAAO,GACrB,iBAAiB,EAAE,GAAG,KAAK,CAO7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,GAC3C,iBAAiB,EAAE,GAAG,KAAK,CA6B7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACvC,GAAG,EAAE,iBAAiB,EAAE,EACxB,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
package/utils/command.util.js
CHANGED
|
@@ -1,149 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.loadConfigFile = loadConfigFile;
|
|
40
|
-
exports.getSubcommand = getSubcommand;
|
|
41
|
-
exports.loadSchemaFile = loadSchemaFile;
|
|
42
|
-
exports.loadProjectInfo = loadProjectInfo;
|
|
43
|
-
exports.loadVariablesFromProviders = loadVariablesFromProviders;
|
|
44
|
-
exports.flatResults = flatResults;
|
|
45
|
-
exports.flatAndValidateResults = flatAndValidateResults;
|
|
46
|
-
exports.generateSchemaFrom = generateSchemaFrom;
|
|
47
|
-
const picocolors_1 = __importDefault(require("picocolors"));
|
|
48
|
-
const merge_deep_1 = __importDefault(require("merge-deep"));
|
|
49
|
-
const utils_1 = require("../utils");
|
|
50
|
-
const path_1 = __importDefault(require("path"));
|
|
51
|
-
async function loadConfigFile(argv, delimiters) {
|
|
52
|
-
if (typeof argv.configFile === 'string') {
|
|
53
|
-
const path = (0, utils_1.interpolate)(argv.configFile, argv, delimiters);
|
|
54
|
-
const [config, success] = await (0, utils_1.readJson)(path);
|
|
55
|
-
if (success)
|
|
56
|
-
for (const key in config)
|
|
57
|
-
argv[key] ??= config[key];
|
|
58
|
-
}
|
|
1
|
+
import { interpolate as e } from "./interpolate.util.js";
|
|
2
|
+
import { readJson as t, writeJson as n } from "./json.util.js";
|
|
3
|
+
import { logger as r } from "./logger.js";
|
|
4
|
+
import { flatten as i } from "./normalize.util.js";
|
|
5
|
+
import { createValidators as a, schemaFrom as o } from "./schema.util.js";
|
|
6
|
+
import "./index.js";
|
|
7
|
+
import s from "picocolors";
|
|
8
|
+
import c from "merge-deep";
|
|
9
|
+
import { readFileSync as l } from "node:fs";
|
|
10
|
+
import u from "node:path";
|
|
11
|
+
//#region src/utils/command.util.ts
|
|
12
|
+
async function d(n, r) {
|
|
13
|
+
if (typeof n.configFile == "string") {
|
|
14
|
+
let [i, a] = await t(e(n.configFile, n, r));
|
|
15
|
+
if (a) for (let e in i) n[e] ??= i[e];
|
|
16
|
+
}
|
|
59
17
|
}
|
|
60
|
-
function
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const count = rawArgv.lastIndexOf(delimiters[1]) - begin;
|
|
64
|
-
if (begin > 0) {
|
|
65
|
-
subcommand =
|
|
66
|
-
count > 0
|
|
67
|
-
? rawArgv.splice(begin, count + 1).slice(1, -1)
|
|
68
|
-
: rawArgv.splice(begin).slice(1);
|
|
69
|
-
}
|
|
70
|
-
return subcommand;
|
|
18
|
+
function f(e, t) {
|
|
19
|
+
let n = [], r = e.indexOf(t[0]), i = e.lastIndexOf(t[1]) - r;
|
|
20
|
+
return r > 0 && (n = i > 0 ? e.splice(r, i + 1).slice(1, -1) : e.splice(r).slice(1)), n;
|
|
71
21
|
}
|
|
72
|
-
async function
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
return undefined;
|
|
22
|
+
async function p(n, r) {
|
|
23
|
+
if (typeof n.schemaFile == "string") {
|
|
24
|
+
let [i, a] = await t(e(n.schemaFile, n, r));
|
|
25
|
+
return a ? i : void 0;
|
|
26
|
+
}
|
|
79
27
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
28
|
+
function m(e = "") {
|
|
29
|
+
try {
|
|
30
|
+
let t = u.join(process.cwd(), e, "package.json");
|
|
31
|
+
return Promise.resolve(JSON.parse(l(t, "utf8")));
|
|
32
|
+
} catch {
|
|
33
|
+
return r.warn(`project file ${s.underline(s.yellow("package.json"))} not found`), Promise.resolve({});
|
|
34
|
+
}
|
|
88
35
|
}
|
|
89
|
-
function
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (value instanceof Promise) {
|
|
96
|
-
return value.then((value) => ({
|
|
97
|
-
key,
|
|
98
|
-
config,
|
|
99
|
-
value
|
|
100
|
-
}));
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
return { key, config, value };
|
|
104
|
-
}
|
|
105
|
-
}));
|
|
36
|
+
function h(e, t) {
|
|
37
|
+
return e ? Promise.all(e.map(async ({ config: e, handler: { key: n, load: i } }) => (r.silly(`executing ${s.yellow(n)} provider`), {
|
|
38
|
+
config: e,
|
|
39
|
+
key: n,
|
|
40
|
+
value: await i(t, e)
|
|
41
|
+
}))) : Promise.resolve([]);
|
|
106
42
|
}
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
if (Array.isArray(value))
|
|
110
|
-
return (0, merge_deep_1.default)({}, ...value.map((v) => (0, utils_1.flatten)(v, nestingDelimiter)));
|
|
111
|
-
return (0, utils_1.flatten)(value, nestingDelimiter);
|
|
112
|
-
});
|
|
43
|
+
function g(e, t = "__") {
|
|
44
|
+
return e.flatMap(({ value: e }) => Array.isArray(e) ? c({}, ...e.map((e) => i(e, t))) : i(e, t));
|
|
113
45
|
}
|
|
114
|
-
function
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
else {
|
|
125
|
-
baseValue = (0, utils_1.flatten)(value, argv.nestingDelimiter);
|
|
126
|
-
}
|
|
127
|
-
const validator = validators[key];
|
|
128
|
-
if (!validator || validator?.(value))
|
|
129
|
-
return baseValue;
|
|
130
|
-
utils_1.logger.error(`schema validation failed for ${picocolors_1.default.yellow(key)}`, validator?.errors);
|
|
131
|
-
throw new Error(`schema validation failed for ${key}`);
|
|
132
|
-
});
|
|
46
|
+
function _(e, t) {
|
|
47
|
+
if (!t.schemaValidate) return g(e, t.nestingDelimiter);
|
|
48
|
+
let n = a(t.schema, t.detectFormat);
|
|
49
|
+
return e.flatMap(({ key: e, value: a }) => {
|
|
50
|
+
let o = a;
|
|
51
|
+
Array.isArray(a) ? (a = c({}, ...a), o = c({}, ...o.map((e) => i(e, t.nestingDelimiter)))) : o = i(a, t.nestingDelimiter);
|
|
52
|
+
let l = n[e];
|
|
53
|
+
if (!l || l?.(a)) return o;
|
|
54
|
+
throw r.error(`schema validation failed for ${s.yellow(e)}`, l?.errors), Error(`schema validation failed for ${e}`);
|
|
55
|
+
});
|
|
133
56
|
}
|
|
134
|
-
async function
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return schema;
|
|
143
|
-
}, {});
|
|
144
|
-
if (resolve === 'merge')
|
|
145
|
-
schema = (0, merge_deep_1.default)(argv.schema, schema);
|
|
146
|
-
await (0, utils_1.writeJson)(schemaFile, schema, true);
|
|
147
|
-
return schema;
|
|
57
|
+
async function v(e, t) {
|
|
58
|
+
let { detectFormat: r, nullable: i, resolve: a, schemaFile: s } = t, l = {};
|
|
59
|
+
for (let { key: t, value: n } of e) l[t] = o(Array.isArray(n) ? c({}, ...n) : n, {
|
|
60
|
+
nullable: i,
|
|
61
|
+
strings: { detectFormat: r }
|
|
62
|
+
});
|
|
63
|
+
let u = l;
|
|
64
|
+
return a === "merge" && (u = c(t.schema, u)), await n(s, u, !0), u;
|
|
148
65
|
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { _ as flatAndValidateResults, g as flatResults, v as generateSchemaFrom, f as getSubcommand, d as loadConfigFile, m as loadProjectInfo, p as loadSchemaFile, h as loadVariablesFromProviders };
|
|
68
|
+
|
|
149
69
|
//# sourceMappingURL=command.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.util.js","
|
|
1
|
+
{"version":3,"file":"command.util.js","names":[],"sources":["../../src/utils/command.util.ts"],"sourcesContent":["import merge from 'merge-deep';\r\nimport { readFileSync } from 'node:fs';\r\nimport Path from 'node:path';\r\nimport pc from 'picocolors';\r\nimport type { Arguments } from 'yargs';\r\nimport type { CommandArguments } from '../arguments.js';\r\nimport type { EnvCommandArguments } from '../commands/env.command.js';\r\nimport type {\r\n\tEnvProviderConfig,\r\n\tEnvProviderResult,\r\n} from '../interfaces/index.js';\r\nimport {\r\n\tcreateValidators,\r\n\tflatten,\r\n\tinterpolate,\r\n\tlogger,\r\n\treadJson,\r\n\tschemaFrom,\r\n\twriteJson,\r\n} from './index.js';\r\n\r\n/**\r\n * Injects config to command arguments from file.\r\n *\r\n * @param {Record<string, unknown>} argv\r\n * @param {[string, string]} delimiters\r\n */\r\nexport async function loadConfigFile(\r\n\targv: Record<string, unknown>,\r\n\tdelimiters: [string, string],\r\n): Promise<void> {\r\n\tif (typeof argv.configFile === 'string') {\r\n\t\tconst path = interpolate(argv.configFile, argv, delimiters);\r\n\t\tconst [config, success] = await readJson(path);\r\n\r\n\t\tif (success) for (const key in config) argv[key] ??= config[key];\r\n\t}\r\n}\r\n\r\n/**\r\n * Extracts subcommand from command line parameters.\r\n *\r\n * @export\r\n * @param {string[]} rawArgv process.argv.slice(2)\r\n * @param {[string, string]} delimiters\r\n *\r\n * @returns {string[]} subcommand for wrap if exists\r\n */\r\nexport function getSubcommand(rawArgv: string[], delimiters: [string, string]) {\r\n\tlet subcommand: string[] = [];\r\n\r\n\t// subcommand delimiter indexes\r\n\r\n\tconst begin = rawArgv.indexOf(delimiters[0]);\r\n\r\n\tconst count = rawArgv.lastIndexOf(delimiters[1]) - begin;\r\n\r\n\t// calculates subcommand surrounded by delimiters\r\n\tif (begin > 0) {\r\n\t\tsubcommand =\r\n\t\t\tcount > 0\r\n\t\t\t\t? rawArgv.splice(begin, count + 1).slice(1, -1)\r\n\t\t\t\t: rawArgv.splice(begin).slice(1);\r\n\t}\r\n\r\n\treturn subcommand;\r\n}\r\n\r\n/**\r\n * Loads providers JSON schema from file.\r\n *\r\n * @param {Record<string, unknown>} argv\r\n * @param {[string, string]} delimiters\r\n *\r\n * @returns {Promise<Record<string, unknown>>}\r\n */\r\nexport async function loadSchemaFile(\r\n\targv: Record<string, unknown>,\r\n\tdelimiters: [string, string],\r\n): Promise<Record<string, unknown> | undefined> {\r\n\tif (typeof argv.schemaFile === 'string') {\r\n\t\tconst path = interpolate(argv.schemaFile, argv, delimiters);\r\n\t\tconst [schema, success] = await readJson(path);\r\n\r\n\t\treturn success ? schema : undefined;\r\n\t}\r\n\r\n\treturn undefined;\r\n}\r\n\r\n/**\r\n * Reads project package.json.\r\n *\r\n * @export\r\n * @returns {Promise<Record<string, unknown>> | never}\r\n */\r\nexport function loadProjectInfo(\r\n\trelativePath = '',\r\n): Promise<Record<string, unknown>> {\r\n\ttry {\r\n\t\tconst filePath = Path.join(process.cwd(), relativePath, 'package.json');\r\n\r\n\t\treturn Promise.resolve(\r\n\t\t\tJSON.parse(readFileSync(filePath, 'utf8')) as Record<\r\n\t\t\t\tstring,\r\n\t\t\t\tunknown\r\n\t\t\t>,\r\n\t\t);\r\n\t} catch {\r\n\t\tlogger.warn(\r\n\t\t\t`project file ${pc.underline(pc.yellow('package.json'))} not found`,\r\n\t\t);\r\n\r\n\t\treturn Promise.resolve({});\r\n\t}\r\n}\r\n\r\n/**\r\n * Executes load functions from provider handlers.\r\n *\r\n * @param {EnvProviderConfig[]} providers\r\n * @param {Partial<Arguments<EnvCommandArguments>>} argv\r\n *\r\n * @returns {EnvProviderResult[]}\r\n */\r\nexport function loadVariablesFromProviders(\r\n\tproviders: EnvProviderConfig[],\r\n\targv: Partial<Arguments<EnvCommandArguments>>,\r\n): Promise<EnvProviderResult[]> {\r\n\tif (!providers) return Promise.resolve([]) as Promise<EnvProviderResult[]>;\r\n\r\n\treturn Promise.all(\r\n\t\tproviders.map(async ({ config, handler: { key, load } }) => {\r\n\t\t\tlogger.silly(`executing ${pc.yellow(key)} provider`);\r\n\r\n\t\t\tconst value = await load(argv, config);\r\n\r\n\t\t\treturn { config, key, value };\r\n\t\t}),\r\n\t);\r\n}\r\n\r\n/**\r\n * Flattern environment provider results.\r\n *\r\n * @param {EnvProviderResult[]} results\r\n * @param {Partial<Arguments<EnvCommandArguments>>} argv\r\n *\r\n * @throws {Error} on schema validation failed\r\n *\r\n * @returns {EnvProviderResult[]} flatten results\r\n */\r\nexport function flatResults(\r\n\tresults: EnvProviderResult[],\r\n\tnestingDelimiter = '__',\r\n): EnvProviderResult[] | never {\r\n\treturn results.flatMap(({ value }) => {\r\n\t\tif (Array.isArray(value))\r\n\t\t\treturn merge({}, ...value.map((v) => flatten(v, nestingDelimiter)));\r\n\r\n\t\treturn flatten(value, nestingDelimiter);\r\n\t});\r\n}\r\n\r\n/**\r\n * Flattern and validates environment provider results.\r\n *\r\n * @param {EnvProviderResult[]} results\r\n * @param {Partial<Arguments<EnvCommandArguments>>} argv\r\n *\r\n * @throws {Error} on schema validation failed\r\n *\r\n * @returns {EnvProviderResult[]}\r\n */\r\nexport function flatAndValidateResults(\r\n\tresults: EnvProviderResult[],\r\n\targv: Partial<Arguments<EnvCommandArguments>>,\r\n): EnvProviderResult[] | never {\r\n\tif (!argv.schemaValidate)\r\n\t\treturn flatResults(results, argv.nestingDelimiter);\r\n\r\n\tconst validators = createValidators(argv.schema!, argv.detectFormat);\r\n\r\n\treturn results.flatMap(({ key, value }) => {\r\n\t\tlet baseValue = value;\r\n\t\tif (Array.isArray(value)) {\r\n\t\t\tvalue = merge({}, ...value);\r\n\t\t\tbaseValue = merge(\r\n\t\t\t\t{},\r\n\t\t\t\t...baseValue.map((v: any) => flatten(v, argv.nestingDelimiter)),\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tbaseValue = flatten(value, argv.nestingDelimiter);\r\n\t\t}\r\n\r\n\t\tconst validator = validators![key];\r\n\r\n\t\tif (!validator || validator?.(value)) return baseValue;\r\n\r\n\t\tlogger.error(\r\n\t\t\t`schema validation failed for ${pc.yellow(key)}`,\r\n\t\t\tvalidator?.errors,\r\n\t\t);\r\n\r\n\t\tthrow new Error(`schema validation failed for ${key}`);\r\n\t});\r\n}\r\n\r\n/**\r\n * Creates or updates JSON schema from\r\n * environment variables grouped by provider key.\r\n *\r\n * @export\r\n * @param {EnvProviderResult[]} env\r\n * @param {Arguments<EnvCommandArguments>} argv\r\n *\r\n * @returns {Promise<object>} JSON schema grouped by provider key.\r\n */\r\nexport async function generateSchemaFrom(\r\n\tenv: EnvProviderResult[],\r\n\targv: Arguments<CommandArguments>,\r\n): Promise<object> {\r\n\tconst { detectFormat, nullable, resolve, schemaFile } = argv;\r\n\r\n\t// generates schemas from providers results\r\n\tconst schemaEntries: Record<string, unknown> = {};\r\n\tfor (const { key, value } of env) {\r\n\t\tconst merged = Array.isArray(value) ? merge({}, ...value) : value;\r\n\r\n\t\tschemaEntries[key] = schemaFrom(merged, {\r\n\t\t\tnullable,\r\n\t\t\tstrings: { detectFormat },\r\n\t\t});\r\n\t}\r\n\r\n\tlet schema: Record<string, unknown> = schemaEntries;\r\n\r\n\tif (resolve === 'merge') schema = merge(argv.schema, schema);\r\n\r\n\tawait writeJson(schemaFile, schema, true);\r\n\r\n\treturn schema;\r\n}\r\n"],"mappings":"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"}
|
package/utils/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
1
|
+
export * from './argv.util.js';
|
|
2
|
+
export * from './command.util.js';
|
|
3
|
+
export * from './interpolate.util.js';
|
|
4
|
+
export * from './json.util.js';
|
|
5
|
+
export * from './logger.js';
|
|
6
|
+
export * from './normalize.util.js';
|
|
7
|
+
export * from './schema.util.js';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/utils/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|