@contember/config-loader 2.1.0-alpha.3 → 2.1.0-alpha.35
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/package.json +10 -5
- package/src/config/parametersResolving.ts +8 -12
- package/dist/development/index.cjs +0 -11
- package/dist/development/index.cjs.map +0 -1
- package/dist/development/index.js +0 -11
- package/dist/development/index.js.map +0 -1
- package/dist/development/src/config/Loader.cjs +0 -90
- package/dist/development/src/config/Loader.cjs.map +0 -1
- package/dist/development/src/config/Loader.js +0 -74
- package/dist/development/src/config/Loader.js.map +0 -1
- package/dist/development/src/config/Merger.cjs +0 -24
- package/dist/development/src/config/Merger.cjs.map +0 -1
- package/dist/development/src/config/Merger.js +0 -25
- package/dist/development/src/config/Merger.js.map +0 -1
- package/dist/development/src/config/adapters/JsonAdapter.cjs +0 -9
- package/dist/development/src/config/adapters/JsonAdapter.cjs.map +0 -1
- package/dist/development/src/config/adapters/JsonAdapter.js +0 -9
- package/dist/development/src/config/adapters/JsonAdapter.js.map +0 -1
- package/dist/development/src/config/adapters/YamlAdapter.cjs +0 -27
- package/dist/development/src/config/adapters/YamlAdapter.cjs.map +0 -1
- package/dist/development/src/config/adapters/YamlAdapter.js +0 -10
- package/dist/development/src/config/adapters/YamlAdapter.js.map +0 -1
- package/dist/development/src/config/parametersResolving.cjs +0 -95
- package/dist/development/src/config/parametersResolving.cjs.map +0 -1
- package/dist/development/src/config/parametersResolving.js +0 -95
- package/dist/development/src/config/parametersResolving.js.map +0 -1
- package/dist/production/index.cjs +0 -11
- package/dist/production/index.cjs.map +0 -1
- package/dist/production/index.js +0 -11
- package/dist/production/index.js.map +0 -1
- package/dist/production/src/config/Loader.cjs +0 -90
- package/dist/production/src/config/Loader.cjs.map +0 -1
- package/dist/production/src/config/Loader.js +0 -74
- package/dist/production/src/config/Loader.js.map +0 -1
- package/dist/production/src/config/Merger.cjs +0 -24
- package/dist/production/src/config/Merger.cjs.map +0 -1
- package/dist/production/src/config/Merger.js +0 -25
- package/dist/production/src/config/Merger.js.map +0 -1
- package/dist/production/src/config/adapters/JsonAdapter.cjs +0 -9
- package/dist/production/src/config/adapters/JsonAdapter.cjs.map +0 -1
- package/dist/production/src/config/adapters/JsonAdapter.js +0 -9
- package/dist/production/src/config/adapters/JsonAdapter.js.map +0 -1
- package/dist/production/src/config/adapters/YamlAdapter.cjs +0 -27
- package/dist/production/src/config/adapters/YamlAdapter.cjs.map +0 -1
- package/dist/production/src/config/adapters/YamlAdapter.js +0 -10
- package/dist/production/src/config/adapters/YamlAdapter.js.map +0 -1
- package/dist/production/src/config/parametersResolving.cjs +0 -95
- package/dist/production/src/config/parametersResolving.cjs.map +0 -1
- package/dist/production/src/config/parametersResolving.js +0 -95
- package/dist/production/src/config/parametersResolving.js.map +0 -1
- package/dist/types/config/Loader.d.ts +0 -20
- package/dist/types/config/Loader.d.ts.map +0 -1
- package/dist/types/config/Merger.d.ts +0 -15
- package/dist/types/config/Merger.d.ts.map +0 -1
- package/dist/types/config/adapters/JsonAdapter.d.ts +0 -5
- package/dist/types/config/adapters/JsonAdapter.d.ts.map +0 -1
- package/dist/types/config/adapters/YamlAdapter.d.ts +0 -5
- package/dist/types/config/adapters/YamlAdapter.d.ts.map +0 -1
- package/dist/types/config/parametersResolving.d.ts +0 -8
- package/dist/types/config/parametersResolving.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/tsconfig.tsbuildinfo +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/config-loader",
|
|
3
|
-
"version": "2.1.0-alpha.
|
|
3
|
+
"version": "2.1.0-alpha.35",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/production/index.js",
|
|
6
6
|
"typings": "./dist/types/index.d.ts",
|
|
@@ -23,11 +23,16 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@types/js-yaml": "
|
|
27
|
-
"@types/node": "
|
|
26
|
+
"@types/js-yaml": "catalog:",
|
|
27
|
+
"@types/node": "catalog:"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"js-yaml": "
|
|
30
|
+
"js-yaml": "catalog:"
|
|
31
31
|
},
|
|
32
|
-
"type": "module"
|
|
32
|
+
"type": "module",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/contember/contember.git",
|
|
36
|
+
"directory": "packages/config-loader"
|
|
37
|
+
}
|
|
33
38
|
}
|
|
@@ -4,15 +4,13 @@ export type ParametersResolver = (parameterParts: string[], path: Path, dataReso
|
|
|
4
4
|
|
|
5
5
|
export class UndefinedParameterError extends Error {}
|
|
6
6
|
|
|
7
|
-
export const createObjectParametersResolver =
|
|
8
|
-
(
|
|
9
|
-
|
|
10
|
-
parts.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return current[part]
|
|
15
|
-
}, parameters)
|
|
7
|
+
export const createObjectParametersResolver = (parameters: any): ParametersResolver => parts =>
|
|
8
|
+
parts.reduce((current, part) => {
|
|
9
|
+
if (current === null || typeof current !== 'object' || typeof current[part] === 'undefined') {
|
|
10
|
+
throw new UndefinedParameterError(`Parameter "${parts.join('.')}" not found.`)
|
|
11
|
+
}
|
|
12
|
+
return current[part]
|
|
13
|
+
}, parameters)
|
|
16
14
|
|
|
17
15
|
export const resolveParameters = (data: any, parametersResolver: ParametersResolver): any => {
|
|
18
16
|
let recursionLevel = 0
|
|
@@ -32,9 +30,7 @@ export const resolveParameters = (data: any, parametersResolver: ParametersResol
|
|
|
32
30
|
if (recursionLevel++ > 20) {
|
|
33
31
|
throw new Error('Possible recursion in configuration')
|
|
34
32
|
}
|
|
35
|
-
const result = resolveParametersInternal(value, path, (parts, path) =>
|
|
36
|
-
parametersResolver(parts, path, dataResolver),
|
|
37
|
-
)
|
|
33
|
+
const result = resolveParametersInternal(value, path, (parts, path) => parametersResolver(parts, path, dataResolver))
|
|
38
34
|
recursionLevel--
|
|
39
35
|
return result
|
|
40
36
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const Loader = require("./src/config/Loader.cjs");
|
|
4
|
-
const Merger = require("./src/config/Merger.cjs");
|
|
5
|
-
const parametersResolving = require("./src/config/parametersResolving.cjs");
|
|
6
|
-
exports.ConfigLoader = Loader;
|
|
7
|
-
exports.Merger = Merger;
|
|
8
|
-
exports.UndefinedParameterError = parametersResolving.UndefinedParameterError;
|
|
9
|
-
exports.createObjectParametersResolver = parametersResolving.createObjectParametersResolver;
|
|
10
|
-
exports.resolveParameters = parametersResolving.resolveParameters;
|
|
11
|
-
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { default as default2 } from "./src/config/Loader.js";
|
|
2
|
-
import { default as default3 } from "./src/config/Merger.js";
|
|
3
|
-
import { UndefinedParameterError, createObjectParametersResolver, resolveParameters } from "./src/config/parametersResolving.js";
|
|
4
|
-
export {
|
|
5
|
-
default2 as ConfigLoader,
|
|
6
|
-
default3 as Merger,
|
|
7
|
-
UndefinedParameterError,
|
|
8
|
-
createObjectParametersResolver,
|
|
9
|
-
resolveParameters
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const node_path = require("node:path");
|
|
3
|
-
const fs = require("node:fs/promises");
|
|
4
|
-
const YamlAdapter = require("./adapters/YamlAdapter.cjs");
|
|
5
|
-
const JsonAdapter = require("./adapters/JsonAdapter.cjs");
|
|
6
|
-
const Merger = require("./Merger.cjs");
|
|
7
|
-
function _interopNamespaceDefault(e) {
|
|
8
|
-
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
9
|
-
if (e) {
|
|
10
|
-
for (const k in e) {
|
|
11
|
-
if (k !== "default") {
|
|
12
|
-
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: () => e[k]
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
n.default = e;
|
|
21
|
-
return Object.freeze(n);
|
|
22
|
-
}
|
|
23
|
-
const fs__namespace = /* @__PURE__ */ _interopNamespaceDefault(fs);
|
|
24
|
-
class Loader {
|
|
25
|
-
constructor(adapters = {
|
|
26
|
-
yaml: new YamlAdapter.YamlAdapter(),
|
|
27
|
-
json: new JsonAdapter.JsonAdapter()
|
|
28
|
-
}) {
|
|
29
|
-
this.adapters = adapters;
|
|
30
|
-
}
|
|
31
|
-
async load(filename) {
|
|
32
|
-
const ext = node_path.extname(filename);
|
|
33
|
-
if (!ext) {
|
|
34
|
-
throw new Loader.UnresolvedAdapterError(`File ${filename} does not have an extension.`);
|
|
35
|
-
}
|
|
36
|
-
const extWithoutDot = ext.slice(1);
|
|
37
|
-
if (!this.adapters[extWithoutDot]) {
|
|
38
|
-
throw new Loader.UnresolvedAdapterError(`Adapter for ${extWithoutDot} not found.`);
|
|
39
|
-
}
|
|
40
|
-
const file = await fs__namespace.readFile(filename, { encoding: "utf8" });
|
|
41
|
-
const config = this.adapters[extWithoutDot].parse(file);
|
|
42
|
-
return await this.includeConfigs(config, node_path.dirname(filename));
|
|
43
|
-
}
|
|
44
|
-
async loadString(content, adapter) {
|
|
45
|
-
if (!this.adapters[adapter]) {
|
|
46
|
-
throw new Loader.UnresolvedAdapterError(`Adapter for ${adapter} not found.`);
|
|
47
|
-
}
|
|
48
|
-
return this.adapters[adapter].parse(content);
|
|
49
|
-
}
|
|
50
|
-
async includeConfigs(data, baseDir) {
|
|
51
|
-
if (Array.isArray(data)) {
|
|
52
|
-
return await Promise.all(data.map(async (it) => await this.includeConfigs(it, baseDir)));
|
|
53
|
-
}
|
|
54
|
-
if (data === null || typeof data !== "object") {
|
|
55
|
-
return data;
|
|
56
|
-
}
|
|
57
|
-
const { _include, ...rest } = (await Promise.all(
|
|
58
|
-
Object.entries(data).map(async ([key, value]) => [key, await this.includeConfigs(value, baseDir)])
|
|
59
|
-
)).reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
60
|
-
if (!_include) {
|
|
61
|
-
return rest;
|
|
62
|
-
}
|
|
63
|
-
if (!Array.isArray(_include)) {
|
|
64
|
-
throw new Loader.InvalidConfigError(`Only arrays are expected under _include key`);
|
|
65
|
-
}
|
|
66
|
-
return Merger.merge(
|
|
67
|
-
...await Promise.all(
|
|
68
|
-
(_include || []).map(async (file) => {
|
|
69
|
-
const nestedConfig = await this.load(node_path.join(baseDir, file));
|
|
70
|
-
if (typeof nestedConfig !== "object" || nestedConfig === null) {
|
|
71
|
-
throw new Loader.InvalidConfigError(`Only object configs can be included`);
|
|
72
|
-
}
|
|
73
|
-
return nestedConfig;
|
|
74
|
-
})
|
|
75
|
-
),
|
|
76
|
-
rest
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
((Loader2) => {
|
|
81
|
-
class UnresolvedAdapterError extends Error {
|
|
82
|
-
}
|
|
83
|
-
Loader2.UnresolvedAdapterError = UnresolvedAdapterError;
|
|
84
|
-
class InvalidConfigError extends Error {
|
|
85
|
-
}
|
|
86
|
-
Loader2.InvalidConfigError = InvalidConfigError;
|
|
87
|
-
})(Loader || (Loader = {}));
|
|
88
|
-
const Loader$1 = Loader;
|
|
89
|
-
module.exports = Loader$1;
|
|
90
|
-
//# sourceMappingURL=Loader.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Loader.cjs","sources":["../../../../../packages/config-loader/src/config/Loader.ts"],"sourcesContent":["import { dirname, extname, join } from 'node:path'\nimport * as fs from 'node:fs/promises'\nimport { YamlAdapter } from './adapters/YamlAdapter'\nimport { JsonAdapter } from './adapters/JsonAdapter'\nimport Merger from './Merger'\n\nclass Loader {\n\tconstructor(\n\t\tprivate readonly adapters: { [extensions: string]: Loader.Adapter } = {\n\t\t\tyaml: new YamlAdapter(),\n\t\t\tjson: new JsonAdapter(),\n\t\t},\n\t) {}\n\n\tpublic async load(filename: string): Promise<any> {\n\t\tconst ext = extname(filename)\n\t\tif (!ext) {\n\t\t\tthrow new Loader.UnresolvedAdapterError(`File ${filename} does not have an extension.`)\n\t\t}\n\t\tconst extWithoutDot = ext.slice(1)\n\t\tif (!this.adapters[extWithoutDot]) {\n\t\t\tthrow new Loader.UnresolvedAdapterError(`Adapter for ${extWithoutDot} not found.`)\n\t\t}\n\t\tconst file = await fs.readFile(filename, { encoding: 'utf8' })\n\t\tconst config = this.adapters[extWithoutDot].parse(file)\n\n\t\treturn await this.includeConfigs(config, dirname(filename))\n\t}\n\n\tpublic async loadString(content: string, adapter: string): Promise<any> {\n\t\tif (!this.adapters[adapter]) {\n\t\t\tthrow new Loader.UnresolvedAdapterError(`Adapter for ${adapter} not found.`)\n\t\t}\n\t\treturn this.adapters[adapter].parse(content)\n\t}\n\n\tprivate async includeConfigs(data: any, baseDir: string): Promise<any> {\n\t\tif (Array.isArray(data)) {\n\t\t\treturn await Promise.all(data.map(async it => await this.includeConfigs(it, baseDir)))\n\t\t}\n\t\tif (data === null || typeof data !== 'object') {\n\t\t\treturn data\n\t\t}\n\t\tconst { _include, ...rest } = (\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries(data).map(async ([key, value]) => [key, await this.includeConfigs(value, baseDir)]),\n\t\t\t)\n\t\t).reduce<any>((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n\n\t\tif (!_include) {\n\t\t\treturn rest\n\t\t}\n\t\tif (!Array.isArray(_include)) {\n\t\t\tthrow new Loader.InvalidConfigError(`Only arrays are expected under _include key`)\n\t\t}\n\t\treturn Merger.merge(\n\t\t\t...(await Promise.all(\n\t\t\t\t(_include || []).map(async file => {\n\t\t\t\t\tconst nestedConfig = await this.load(join(baseDir, file))\n\t\t\t\t\tif (typeof nestedConfig !== 'object' || nestedConfig === null) {\n\t\t\t\t\t\tthrow new Loader.InvalidConfigError(`Only object configs can be included`)\n\t\t\t\t\t}\n\t\t\t\t\treturn nestedConfig\n\t\t\t\t}),\n\t\t\t)),\n\t\t\trest,\n\t\t)\n\t}\n}\n\nnamespace Loader {\n\texport interface Adapter {\n\t\tparse(input: string): any\n\t}\n\n\texport class UnresolvedAdapterError extends Error {}\n\n\texport class InvalidConfigError extends Error {}\n}\n\nexport default Loader\n"],"names":["YamlAdapter","JsonAdapter","extname","fs","dirname","join","Loader"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAM,OAAO;AAAA,EACZ,YACkB,WAAqD;AAAA,IACrE,MAAM,IAAIA,YAAAA,YAAY;AAAA,IACtB,MAAM,IAAIC,YAAY,YAAA;AAAA,EAAA,GAEtB;AAJgB,SAAA,WAAA;AAAA,EAAA;AAAA,EAMlB,MAAa,KAAK,UAAgC;AAC3C,UAAA,MAAMC,kBAAQ,QAAQ;AAC5B,QAAI,CAAC,KAAK;AACT,YAAM,IAAI,OAAO,uBAAuB,QAAQ,QAAQ,8BAA8B;AAAA,IAAA;AAEjF,UAAA,gBAAgB,IAAI,MAAM,CAAC;AACjC,QAAI,CAAC,KAAK,SAAS,aAAa,GAAG;AAClC,YAAM,IAAI,OAAO,uBAAuB,eAAe,aAAa,aAAa;AAAA,IAAA;AAE5E,UAAA,OAAO,MAAMC,cAAG,SAAS,UAAU,EAAE,UAAU,QAAQ;AAC7D,UAAM,SAAS,KAAK,SAAS,aAAa,EAAE,MAAM,IAAI;AAEtD,WAAO,MAAM,KAAK,eAAe,QAAQC,UAAA,QAAQ,QAAQ,CAAC;AAAA,EAAA;AAAA,EAG3D,MAAa,WAAW,SAAiB,SAA+B;AACvE,QAAI,CAAC,KAAK,SAAS,OAAO,GAAG;AAC5B,YAAM,IAAI,OAAO,uBAAuB,eAAe,OAAO,aAAa;AAAA,IAAA;AAE5E,WAAO,KAAK,SAAS,OAAO,EAAE,MAAM,OAAO;AAAA,EAAA;AAAA,EAG5C,MAAc,eAAe,MAAW,SAA+B;AAClE,QAAA,MAAM,QAAQ,IAAI,GAAG;AACxB,aAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,OAAM,OAAM,MAAM,KAAK,eAAe,IAAI,OAAO,CAAC,CAAC;AAAA,IAAA;AAEtF,QAAI,SAAS,QAAQ,OAAO,SAAS,UAAU;AACvC,aAAA;AAAA,IAAA;AAER,UAAM,EAAE,UAAU,GAAG,KAAK,KACzB,MAAM,QAAQ;AAAA,MACb,OAAO,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,OAEjG,OAAY,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM,IAAI,CAAA,CAAE;AAEnE,QAAI,CAAC,UAAU;AACP,aAAA;AAAA,IAAA;AAER,QAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AACvB,YAAA,IAAI,OAAO,mBAAmB,6CAA6C;AAAA,IAAA;AAElF,WAAO,OAAO;AAAA,MACb,GAAI,MAAM,QAAQ;AAAA,SAChB,YAAY,CAAA,GAAI,IAAI,OAAM,SAAQ;AAClC,gBAAM,eAAe,MAAM,KAAK,KAAKC,UAAAA,KAAK,SAAS,IAAI,CAAC;AACxD,cAAI,OAAO,iBAAiB,YAAY,iBAAiB,MAAM;AACxD,kBAAA,IAAI,OAAO,mBAAmB,qCAAqC;AAAA,UAAA;AAEnE,iBAAA;AAAA,QACP,CAAA;AAAA,MACF;AAAA,MACA;AAAA,IACD;AAAA,EAAA;AAEF;AAAA,CAEA,CAAUC,YAAV;AAAA,EAKQ,MAAM,+BAA+B,MAAM;AAAA,EAAA;AAA3CA,UAAM,yBAAA;AAAA,EAEN,MAAM,2BAA2B,MAAM;AAAA,EAAA;AAAvCA,UAAM,qBAAA;AAAA,GAPJ,WAAA,SAAA,CAAA,EAAA;AAUV,MAAA,WAAe;;"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { extname, dirname, join } from "node:path";
|
|
2
|
-
import * as fs from "node:fs/promises";
|
|
3
|
-
import { YamlAdapter } from "./adapters/YamlAdapter.js";
|
|
4
|
-
import { JsonAdapter } from "./adapters/JsonAdapter.js";
|
|
5
|
-
import Merger from "./Merger.js";
|
|
6
|
-
class Loader {
|
|
7
|
-
constructor(adapters = {
|
|
8
|
-
yaml: new YamlAdapter(),
|
|
9
|
-
json: new JsonAdapter()
|
|
10
|
-
}) {
|
|
11
|
-
this.adapters = adapters;
|
|
12
|
-
}
|
|
13
|
-
async load(filename) {
|
|
14
|
-
const ext = extname(filename);
|
|
15
|
-
if (!ext) {
|
|
16
|
-
throw new Loader.UnresolvedAdapterError(`File ${filename} does not have an extension.`);
|
|
17
|
-
}
|
|
18
|
-
const extWithoutDot = ext.slice(1);
|
|
19
|
-
if (!this.adapters[extWithoutDot]) {
|
|
20
|
-
throw new Loader.UnresolvedAdapterError(`Adapter for ${extWithoutDot} not found.`);
|
|
21
|
-
}
|
|
22
|
-
const file = await fs.readFile(filename, { encoding: "utf8" });
|
|
23
|
-
const config = this.adapters[extWithoutDot].parse(file);
|
|
24
|
-
return await this.includeConfigs(config, dirname(filename));
|
|
25
|
-
}
|
|
26
|
-
async loadString(content, adapter) {
|
|
27
|
-
if (!this.adapters[adapter]) {
|
|
28
|
-
throw new Loader.UnresolvedAdapterError(`Adapter for ${adapter} not found.`);
|
|
29
|
-
}
|
|
30
|
-
return this.adapters[adapter].parse(content);
|
|
31
|
-
}
|
|
32
|
-
async includeConfigs(data, baseDir) {
|
|
33
|
-
if (Array.isArray(data)) {
|
|
34
|
-
return await Promise.all(data.map(async (it) => await this.includeConfigs(it, baseDir)));
|
|
35
|
-
}
|
|
36
|
-
if (data === null || typeof data !== "object") {
|
|
37
|
-
return data;
|
|
38
|
-
}
|
|
39
|
-
const { _include, ...rest } = (await Promise.all(
|
|
40
|
-
Object.entries(data).map(async ([key, value]) => [key, await this.includeConfigs(value, baseDir)])
|
|
41
|
-
)).reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
42
|
-
if (!_include) {
|
|
43
|
-
return rest;
|
|
44
|
-
}
|
|
45
|
-
if (!Array.isArray(_include)) {
|
|
46
|
-
throw new Loader.InvalidConfigError(`Only arrays are expected under _include key`);
|
|
47
|
-
}
|
|
48
|
-
return Merger.merge(
|
|
49
|
-
...await Promise.all(
|
|
50
|
-
(_include || []).map(async (file) => {
|
|
51
|
-
const nestedConfig = await this.load(join(baseDir, file));
|
|
52
|
-
if (typeof nestedConfig !== "object" || nestedConfig === null) {
|
|
53
|
-
throw new Loader.InvalidConfigError(`Only object configs can be included`);
|
|
54
|
-
}
|
|
55
|
-
return nestedConfig;
|
|
56
|
-
})
|
|
57
|
-
),
|
|
58
|
-
rest
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
((Loader2) => {
|
|
63
|
-
class UnresolvedAdapterError extends Error {
|
|
64
|
-
}
|
|
65
|
-
Loader2.UnresolvedAdapterError = UnresolvedAdapterError;
|
|
66
|
-
class InvalidConfigError extends Error {
|
|
67
|
-
}
|
|
68
|
-
Loader2.InvalidConfigError = InvalidConfigError;
|
|
69
|
-
})(Loader || (Loader = {}));
|
|
70
|
-
const Loader$1 = Loader;
|
|
71
|
-
export {
|
|
72
|
-
Loader$1 as default
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=Loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Loader.js","sources":["../../../../../packages/config-loader/src/config/Loader.ts"],"sourcesContent":["import { dirname, extname, join } from 'node:path'\nimport * as fs from 'node:fs/promises'\nimport { YamlAdapter } from './adapters/YamlAdapter'\nimport { JsonAdapter } from './adapters/JsonAdapter'\nimport Merger from './Merger'\n\nclass Loader {\n\tconstructor(\n\t\tprivate readonly adapters: { [extensions: string]: Loader.Adapter } = {\n\t\t\tyaml: new YamlAdapter(),\n\t\t\tjson: new JsonAdapter(),\n\t\t},\n\t) {}\n\n\tpublic async load(filename: string): Promise<any> {\n\t\tconst ext = extname(filename)\n\t\tif (!ext) {\n\t\t\tthrow new Loader.UnresolvedAdapterError(`File ${filename} does not have an extension.`)\n\t\t}\n\t\tconst extWithoutDot = ext.slice(1)\n\t\tif (!this.adapters[extWithoutDot]) {\n\t\t\tthrow new Loader.UnresolvedAdapterError(`Adapter for ${extWithoutDot} not found.`)\n\t\t}\n\t\tconst file = await fs.readFile(filename, { encoding: 'utf8' })\n\t\tconst config = this.adapters[extWithoutDot].parse(file)\n\n\t\treturn await this.includeConfigs(config, dirname(filename))\n\t}\n\n\tpublic async loadString(content: string, adapter: string): Promise<any> {\n\t\tif (!this.adapters[adapter]) {\n\t\t\tthrow new Loader.UnresolvedAdapterError(`Adapter for ${adapter} not found.`)\n\t\t}\n\t\treturn this.adapters[adapter].parse(content)\n\t}\n\n\tprivate async includeConfigs(data: any, baseDir: string): Promise<any> {\n\t\tif (Array.isArray(data)) {\n\t\t\treturn await Promise.all(data.map(async it => await this.includeConfigs(it, baseDir)))\n\t\t}\n\t\tif (data === null || typeof data !== 'object') {\n\t\t\treturn data\n\t\t}\n\t\tconst { _include, ...rest } = (\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries(data).map(async ([key, value]) => [key, await this.includeConfigs(value, baseDir)]),\n\t\t\t)\n\t\t).reduce<any>((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n\n\t\tif (!_include) {\n\t\t\treturn rest\n\t\t}\n\t\tif (!Array.isArray(_include)) {\n\t\t\tthrow new Loader.InvalidConfigError(`Only arrays are expected under _include key`)\n\t\t}\n\t\treturn Merger.merge(\n\t\t\t...(await Promise.all(\n\t\t\t\t(_include || []).map(async file => {\n\t\t\t\t\tconst nestedConfig = await this.load(join(baseDir, file))\n\t\t\t\t\tif (typeof nestedConfig !== 'object' || nestedConfig === null) {\n\t\t\t\t\t\tthrow new Loader.InvalidConfigError(`Only object configs can be included`)\n\t\t\t\t\t}\n\t\t\t\t\treturn nestedConfig\n\t\t\t\t}),\n\t\t\t)),\n\t\t\trest,\n\t\t)\n\t}\n}\n\nnamespace Loader {\n\texport interface Adapter {\n\t\tparse(input: string): any\n\t}\n\n\texport class UnresolvedAdapterError extends Error {}\n\n\texport class InvalidConfigError extends Error {}\n}\n\nexport default Loader\n"],"names":["Loader"],"mappings":";;;;;AAMA,MAAM,OAAO;AAAA,EACZ,YACkB,WAAqD;AAAA,IACrE,MAAM,IAAI,YAAY;AAAA,IACtB,MAAM,IAAI,YAAY;AAAA,EAAA,GAEtB;AAJgB,SAAA,WAAA;AAAA,EAAA;AAAA,EAMlB,MAAa,KAAK,UAAgC;AAC3C,UAAA,MAAM,QAAQ,QAAQ;AAC5B,QAAI,CAAC,KAAK;AACT,YAAM,IAAI,OAAO,uBAAuB,QAAQ,QAAQ,8BAA8B;AAAA,IAAA;AAEjF,UAAA,gBAAgB,IAAI,MAAM,CAAC;AACjC,QAAI,CAAC,KAAK,SAAS,aAAa,GAAG;AAClC,YAAM,IAAI,OAAO,uBAAuB,eAAe,aAAa,aAAa;AAAA,IAAA;AAE5E,UAAA,OAAO,MAAM,GAAG,SAAS,UAAU,EAAE,UAAU,QAAQ;AAC7D,UAAM,SAAS,KAAK,SAAS,aAAa,EAAE,MAAM,IAAI;AAEtD,WAAO,MAAM,KAAK,eAAe,QAAQ,QAAQ,QAAQ,CAAC;AAAA,EAAA;AAAA,EAG3D,MAAa,WAAW,SAAiB,SAA+B;AACvE,QAAI,CAAC,KAAK,SAAS,OAAO,GAAG;AAC5B,YAAM,IAAI,OAAO,uBAAuB,eAAe,OAAO,aAAa;AAAA,IAAA;AAE5E,WAAO,KAAK,SAAS,OAAO,EAAE,MAAM,OAAO;AAAA,EAAA;AAAA,EAG5C,MAAc,eAAe,MAAW,SAA+B;AAClE,QAAA,MAAM,QAAQ,IAAI,GAAG;AACxB,aAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,OAAM,OAAM,MAAM,KAAK,eAAe,IAAI,OAAO,CAAC,CAAC;AAAA,IAAA;AAEtF,QAAI,SAAS,QAAQ,OAAO,SAAS,UAAU;AACvC,aAAA;AAAA,IAAA;AAER,UAAM,EAAE,UAAU,GAAG,KAAK,KACzB,MAAM,QAAQ;AAAA,MACb,OAAO,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,OAEjG,OAAY,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM,IAAI,CAAA,CAAE;AAEnE,QAAI,CAAC,UAAU;AACP,aAAA;AAAA,IAAA;AAER,QAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AACvB,YAAA,IAAI,OAAO,mBAAmB,6CAA6C;AAAA,IAAA;AAElF,WAAO,OAAO;AAAA,MACb,GAAI,MAAM,QAAQ;AAAA,SAChB,YAAY,CAAA,GAAI,IAAI,OAAM,SAAQ;AAClC,gBAAM,eAAe,MAAM,KAAK,KAAK,KAAK,SAAS,IAAI,CAAC;AACxD,cAAI,OAAO,iBAAiB,YAAY,iBAAiB,MAAM;AACxD,kBAAA,IAAI,OAAO,mBAAmB,qCAAqC;AAAA,UAAA;AAEnE,iBAAA;AAAA,QACP,CAAA;AAAA,MACF;AAAA,MACA;AAAA,IACD;AAAA,EAAA;AAEF;AAAA,CAEA,CAAUA,YAAV;AAAA,EAKQ,MAAM,+BAA+B,MAAM;AAAA,EAAA;AAA3CA,UAAM,yBAAA;AAAA,EAEN,MAAM,2BAA2B,MAAM;AAAA,EAAA;AAAvCA,UAAM,qBAAA;AAAA,GAPJ,WAAA,SAAA,CAAA,EAAA;AAUV,MAAA,WAAe;"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
class Merger {
|
|
3
|
-
static merge(...values) {
|
|
4
|
-
return values.reduce((acc, val) => [...acc, ...Object.entries(val || {})], []).reduce((acc, [key, value]) => {
|
|
5
|
-
if (!acc.hasOwnProperty(key)) {
|
|
6
|
-
return { ...acc, [key]: value };
|
|
7
|
-
}
|
|
8
|
-
const currValue = acc[key];
|
|
9
|
-
if (Array.isArray(currValue) && Array.isArray(value)) {
|
|
10
|
-
return { ...acc, [key]: [...currValue, ...value] };
|
|
11
|
-
}
|
|
12
|
-
if (Merger.isValueObject(currValue) && Merger.isValueObject(value)) {
|
|
13
|
-
return { ...acc, [key]: Merger.merge(currValue, value) };
|
|
14
|
-
}
|
|
15
|
-
return { ...acc, [key]: value };
|
|
16
|
-
}, {});
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
((Merger2) => {
|
|
20
|
-
Merger2.isValueObject = (value) => typeof value === "object" && value !== null;
|
|
21
|
-
})(Merger || (Merger = {}));
|
|
22
|
-
const Merger$1 = Merger;
|
|
23
|
-
module.exports = Merger$1;
|
|
24
|
-
//# sourceMappingURL=Merger.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Merger.cjs","sources":["../../../../../packages/config-loader/src/config/Merger.ts"],"sourcesContent":["class Merger {\n\tstatic merge<P = Merger.ValuePrimitive>(...values: Merger.ValueObject<P>[]): Merger.ValueObject<P> {\n\t\treturn values\n\t\t\t.reduce<[string, Merger.ValueItem<P>][]>((acc, val) => [...acc, ...Object.entries(val || {})], [])\n\t\t\t.reduce<Merger.ValueObject<P>>((acc, [key, value]) => {\n\t\t\t\tif (!acc.hasOwnProperty(key)) {\n\t\t\t\t\treturn { ...acc, [key]: value }\n\t\t\t\t}\n\t\t\t\tconst currValue = acc[key]\n\t\t\t\tif (Array.isArray(currValue) && Array.isArray(value)) {\n\t\t\t\t\treturn { ...acc, [key]: [...currValue, ...value] }\n\t\t\t\t}\n\t\t\t\tif (Merger.isValueObject(currValue) && Merger.isValueObject(value)) {\n\t\t\t\t\treturn { ...acc, [key]: Merger.merge<P>(currValue, value) }\n\t\t\t\t}\n\t\t\t\treturn { ...acc, [key]: value }\n\t\t\t}, {})\n\t}\n}\n\nnamespace Merger {\n\texport const isValueObject = <P>(value: any): value is ValueObject<P> => typeof value === 'object' && value !== null\n\n\texport type ValuePrimitive = string | number | null | boolean | Date\n\texport type ValueItem<P> = P | ValueObject<P> | ValueArray<P>\n\n\texport interface ValueObject<P> {\n\t\treadonly [x: string]: ValueItem<P>\n\t}\n\n\texport interface ValueArray<P> extends ReadonlyArray<ValueItem<P>> {}\n}\n\nexport default Merger\n"],"names":["Merger"],"mappings":";AAAA,MAAM,OAAO;AAAA,EACZ,OAAO,SAAoC,QAAwD;AAC3F,WAAA,OACL,OAAwC,CAAC,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,OAAO,QAAQ,OAAO,EAAE,CAAC,GAAG,CAAA,CAAE,EAChG,OAA8B,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrD,UAAI,CAAC,IAAI,eAAe,GAAG,GAAG;AAC7B,eAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM;AAAA,MAAA;AAEzB,YAAA,YAAY,IAAI,GAAG;AACzB,UAAI,MAAM,QAAQ,SAAS,KAAK,MAAM,QAAQ,KAAK,GAAG;AAC9C,eAAA,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,WAAW,GAAG,KAAK,EAAE;AAAA,MAAA;AAElD,UAAI,OAAO,cAAc,SAAS,KAAK,OAAO,cAAc,KAAK,GAAG;AAC5D,eAAA,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,OAAO,MAAS,WAAW,KAAK,EAAE;AAAA,MAAA;AAE3D,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM;AAAA,IAC/B,GAAG,EAAE;AAAA,EAAA;AAER;AAAA,CAEA,CAAUA,YAAV;AACcA,UAAA,gBAAgB,CAAI,UAAwC,OAAO,UAAU,YAAY,UAAU;AAAA,GADvG,WAAA,SAAA,CAAA,EAAA;AAaV,MAAA,WAAe;;"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
class Merger {
|
|
2
|
-
static merge(...values) {
|
|
3
|
-
return values.reduce((acc, val) => [...acc, ...Object.entries(val || {})], []).reduce((acc, [key, value]) => {
|
|
4
|
-
if (!acc.hasOwnProperty(key)) {
|
|
5
|
-
return { ...acc, [key]: value };
|
|
6
|
-
}
|
|
7
|
-
const currValue = acc[key];
|
|
8
|
-
if (Array.isArray(currValue) && Array.isArray(value)) {
|
|
9
|
-
return { ...acc, [key]: [...currValue, ...value] };
|
|
10
|
-
}
|
|
11
|
-
if (Merger.isValueObject(currValue) && Merger.isValueObject(value)) {
|
|
12
|
-
return { ...acc, [key]: Merger.merge(currValue, value) };
|
|
13
|
-
}
|
|
14
|
-
return { ...acc, [key]: value };
|
|
15
|
-
}, {});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
((Merger2) => {
|
|
19
|
-
Merger2.isValueObject = (value) => typeof value === "object" && value !== null;
|
|
20
|
-
})(Merger || (Merger = {}));
|
|
21
|
-
const Merger$1 = Merger;
|
|
22
|
-
export {
|
|
23
|
-
Merger$1 as default
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=Merger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Merger.js","sources":["../../../../../packages/config-loader/src/config/Merger.ts"],"sourcesContent":["class Merger {\n\tstatic merge<P = Merger.ValuePrimitive>(...values: Merger.ValueObject<P>[]): Merger.ValueObject<P> {\n\t\treturn values\n\t\t\t.reduce<[string, Merger.ValueItem<P>][]>((acc, val) => [...acc, ...Object.entries(val || {})], [])\n\t\t\t.reduce<Merger.ValueObject<P>>((acc, [key, value]) => {\n\t\t\t\tif (!acc.hasOwnProperty(key)) {\n\t\t\t\t\treturn { ...acc, [key]: value }\n\t\t\t\t}\n\t\t\t\tconst currValue = acc[key]\n\t\t\t\tif (Array.isArray(currValue) && Array.isArray(value)) {\n\t\t\t\t\treturn { ...acc, [key]: [...currValue, ...value] }\n\t\t\t\t}\n\t\t\t\tif (Merger.isValueObject(currValue) && Merger.isValueObject(value)) {\n\t\t\t\t\treturn { ...acc, [key]: Merger.merge<P>(currValue, value) }\n\t\t\t\t}\n\t\t\t\treturn { ...acc, [key]: value }\n\t\t\t}, {})\n\t}\n}\n\nnamespace Merger {\n\texport const isValueObject = <P>(value: any): value is ValueObject<P> => typeof value === 'object' && value !== null\n\n\texport type ValuePrimitive = string | number | null | boolean | Date\n\texport type ValueItem<P> = P | ValueObject<P> | ValueArray<P>\n\n\texport interface ValueObject<P> {\n\t\treadonly [x: string]: ValueItem<P>\n\t}\n\n\texport interface ValueArray<P> extends ReadonlyArray<ValueItem<P>> {}\n}\n\nexport default Merger\n"],"names":["Merger"],"mappings":"AAAA,MAAM,OAAO;AAAA,EACZ,OAAO,SAAoC,QAAwD;AAC3F,WAAA,OACL,OAAwC,CAAC,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,OAAO,QAAQ,OAAO,EAAE,CAAC,GAAG,CAAA,CAAE,EAChG,OAA8B,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrD,UAAI,CAAC,IAAI,eAAe,GAAG,GAAG;AAC7B,eAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM;AAAA,MAAA;AAEzB,YAAA,YAAY,IAAI,GAAG;AACzB,UAAI,MAAM,QAAQ,SAAS,KAAK,MAAM,QAAQ,KAAK,GAAG;AAC9C,eAAA,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,WAAW,GAAG,KAAK,EAAE;AAAA,MAAA;AAElD,UAAI,OAAO,cAAc,SAAS,KAAK,OAAO,cAAc,KAAK,GAAG;AAC5D,eAAA,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,OAAO,MAAS,WAAW,KAAK,EAAE;AAAA,MAAA;AAE3D,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM;AAAA,IAC/B,GAAG,EAAE;AAAA,EAAA;AAER;AAAA,CAEA,CAAUA,YAAV;AACcA,UAAA,gBAAgB,CAAI,UAAwC,OAAO,UAAU,YAAY,UAAU;AAAA,GADvG,WAAA,SAAA,CAAA,EAAA;AAaV,MAAA,WAAe;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JsonAdapter.cjs","sources":["../../../../../../packages/config-loader/src/config/adapters/JsonAdapter.ts"],"sourcesContent":["import Loader from '../Loader'\n\nexport class JsonAdapter implements Loader.Adapter {\n\tparse(input: string): any {\n\t\treturn JSON.parse(input)\n\t}\n}\n"],"names":[],"mappings":";;AAEO,MAAM,YAAsC;AAAA,EAClD,MAAM,OAAoB;AAClB,WAAA,KAAK,MAAM,KAAK;AAAA,EAAA;AAEzB;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JsonAdapter.js","sources":["../../../../../../packages/config-loader/src/config/adapters/JsonAdapter.ts"],"sourcesContent":["import Loader from '../Loader'\n\nexport class JsonAdapter implements Loader.Adapter {\n\tparse(input: string): any {\n\t\treturn JSON.parse(input)\n\t}\n}\n"],"names":[],"mappings":"AAEO,MAAM,YAAsC;AAAA,EAClD,MAAM,OAAoB;AAClB,WAAA,KAAK,MAAM,KAAK;AAAA,EAAA;AAEzB;"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsyaml = require("js-yaml");
|
|
4
|
-
function _interopNamespaceDefault(e) {
|
|
5
|
-
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
6
|
-
if (e) {
|
|
7
|
-
for (const k in e) {
|
|
8
|
-
if (k !== "default") {
|
|
9
|
-
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
10
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: () => e[k]
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
n.default = e;
|
|
18
|
-
return Object.freeze(n);
|
|
19
|
-
}
|
|
20
|
-
const jsyaml__namespace = /* @__PURE__ */ _interopNamespaceDefault(jsyaml);
|
|
21
|
-
class YamlAdapter {
|
|
22
|
-
parse(input) {
|
|
23
|
-
return jsyaml__namespace.load(input);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.YamlAdapter = YamlAdapter;
|
|
27
|
-
//# sourceMappingURL=YamlAdapter.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"YamlAdapter.cjs","sources":["../../../../../../packages/config-loader/src/config/adapters/YamlAdapter.ts"],"sourcesContent":["import Loader from '../Loader'\nimport * as yaml from 'js-yaml'\n\nexport class YamlAdapter implements Loader.Adapter {\n\tparse(input: string): any {\n\t\treturn yaml.load(input)\n\t}\n}\n"],"names":["yaml"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGO,MAAM,YAAsC;AAAA,EAClD,MAAM,OAAoB;AAClB,WAAAA,kBAAK,KAAK,KAAK;AAAA,EAAA;AAExB;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"YamlAdapter.js","sources":["../../../../../../packages/config-loader/src/config/adapters/YamlAdapter.ts"],"sourcesContent":["import Loader from '../Loader'\nimport * as yaml from 'js-yaml'\n\nexport class YamlAdapter implements Loader.Adapter {\n\tparse(input: string): any {\n\t\treturn yaml.load(input)\n\t}\n}\n"],"names":["yaml"],"mappings":";AAGO,MAAM,YAAsC;AAAA,EAClD,MAAM,OAAoB;AAClB,WAAAA,OAAK,KAAK,KAAK;AAAA,EAAA;AAExB;"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
class UndefinedParameterError extends Error {
|
|
4
|
-
}
|
|
5
|
-
const createObjectParametersResolver = (parameters) => (parts) => parts.reduce((current, part) => {
|
|
6
|
-
if (current === null || typeof current !== "object" || typeof current[part] === "undefined") {
|
|
7
|
-
throw new UndefinedParameterError(`Parameter "${parts.join(".")}" not found.`);
|
|
8
|
-
}
|
|
9
|
-
return current[part];
|
|
10
|
-
}, parameters);
|
|
11
|
-
const resolveParameters = (data, parametersResolver) => {
|
|
12
|
-
let recursionLevel = 0;
|
|
13
|
-
const dataResolver = (path) => {
|
|
14
|
-
const value = path.reduce((value2, part) => {
|
|
15
|
-
if (typeof part === "string") {
|
|
16
|
-
if (typeof value2 === "object" && value2 !== null && typeof value2[part] !== "undefined") {
|
|
17
|
-
return value2[part];
|
|
18
|
-
}
|
|
19
|
-
} else {
|
|
20
|
-
if (Array.isArray(value2) && typeof value2[part] !== "undefined") {
|
|
21
|
-
return value2[part];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return void 0;
|
|
25
|
-
}, data);
|
|
26
|
-
if (recursionLevel++ > 20) {
|
|
27
|
-
throw new Error("Possible recursion in configuration");
|
|
28
|
-
}
|
|
29
|
-
const result = resolveParametersInternal(
|
|
30
|
-
value,
|
|
31
|
-
path,
|
|
32
|
-
(parts, path2) => parametersResolver(parts, path2, dataResolver)
|
|
33
|
-
);
|
|
34
|
-
recursionLevel--;
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
return resolveParametersInternal(data, [], (parts, path) => parametersResolver(parts, path, dataResolver));
|
|
38
|
-
};
|
|
39
|
-
const resolveParametersInternal = (data, path, parametersResolver) => {
|
|
40
|
-
if (Array.isArray(data)) {
|
|
41
|
-
return data.map((it, index) => resolveParametersInternal(it, [...path, index], parametersResolver));
|
|
42
|
-
}
|
|
43
|
-
if (typeof data === "string") {
|
|
44
|
-
const expression = /^%([?])?([\w|:.]+)%$/.exec(data);
|
|
45
|
-
if (!expression) {
|
|
46
|
-
return data;
|
|
47
|
-
}
|
|
48
|
-
const isOptional = expression[1];
|
|
49
|
-
const expressions = expression[2].split(/\|\|/g);
|
|
50
|
-
for (const [i, expr] of expressions.entries()) {
|
|
51
|
-
const singleExpression = /^(\w+(?:\.\w+)*)(?:::(\w+))?$/.exec(expr);
|
|
52
|
-
if (!singleExpression) {
|
|
53
|
-
throw new Error(`Invalid config expression ${expr}`);
|
|
54
|
-
}
|
|
55
|
-
const [, parameter, cast] = singleExpression;
|
|
56
|
-
const parts = parameter.split(".");
|
|
57
|
-
try {
|
|
58
|
-
const value = parametersResolver(parts, path);
|
|
59
|
-
if (cast) {
|
|
60
|
-
switch (cast) {
|
|
61
|
-
case "number":
|
|
62
|
-
return Number(value);
|
|
63
|
-
case "string":
|
|
64
|
-
return String(value);
|
|
65
|
-
case "bool":
|
|
66
|
-
return value === "true" || value === "on" || value === "1";
|
|
67
|
-
default:
|
|
68
|
-
throw new Error(`Unsupported cast to ${cast}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return value;
|
|
72
|
-
} catch (e) {
|
|
73
|
-
if (e instanceof UndefinedParameterError) {
|
|
74
|
-
if (expressions[i + 1] !== void 0) {
|
|
75
|
-
continue;
|
|
76
|
-
} else if (isOptional) {
|
|
77
|
-
return void 0;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
throw e;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (data === null) {
|
|
85
|
-
return data;
|
|
86
|
-
}
|
|
87
|
-
if (typeof data === "object") {
|
|
88
|
-
return Object.entries(data).map(([key, value]) => [key, resolveParametersInternal(value, [...path, key], parametersResolver)]).reduce((result, [key, value]) => value === void 0 ? result : { ...result, [key]: value }, {});
|
|
89
|
-
}
|
|
90
|
-
return data;
|
|
91
|
-
};
|
|
92
|
-
exports.UndefinedParameterError = UndefinedParameterError;
|
|
93
|
-
exports.createObjectParametersResolver = createObjectParametersResolver;
|
|
94
|
-
exports.resolveParameters = resolveParameters;
|
|
95
|
-
//# sourceMappingURL=parametersResolving.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parametersResolving.cjs","sources":["../../../../../packages/config-loader/src/config/parametersResolving.ts"],"sourcesContent":["export type Path = (string | number)[]\nexport type DataResolver = (path: Path) => any\nexport type ParametersResolver = (parameterParts: string[], path: Path, dataResolver: DataResolver) => string\n\nexport class UndefinedParameterError extends Error {}\n\nexport const createObjectParametersResolver =\n\t(parameters: any): ParametersResolver =>\n\t\tparts =>\n\t\t\tparts.reduce((current, part) => {\n\t\t\t\tif (current === null || typeof current !== 'object' || typeof current[part] === 'undefined') {\n\t\t\t\t\tthrow new UndefinedParameterError(`Parameter \"${parts.join('.')}\" not found.`)\n\t\t\t\t}\n\t\t\t\treturn current[part]\n\t\t\t}, parameters)\n\nexport const resolveParameters = (data: any, parametersResolver: ParametersResolver): any => {\n\tlet recursionLevel = 0\n\tconst dataResolver: DataResolver = path => {\n\t\tconst value = path.reduce((value, part) => {\n\t\t\tif (typeof part === 'string') {\n\t\t\t\tif (typeof value === 'object' && value !== null && typeof value[part] !== 'undefined') {\n\t\t\t\t\treturn value[part]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (Array.isArray(value) && typeof value[part] !== 'undefined') {\n\t\t\t\t\treturn value[part]\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined\n\t\t}, data)\n\t\tif (recursionLevel++ > 20) {\n\t\t\tthrow new Error('Possible recursion in configuration')\n\t\t}\n\t\tconst result = resolveParametersInternal(value, path, (parts, path) =>\n\t\t\tparametersResolver(parts, path, dataResolver),\n\t\t)\n\t\trecursionLevel--\n\t\treturn result\n\t}\n\treturn resolveParametersInternal(data, [], (parts, path) => parametersResolver(parts, path, dataResolver))\n}\n\nconst resolveParametersInternal = (\n\tdata: any,\n\tpath: Path,\n\tparametersResolver: (parts: string[], path: Path) => string,\n): any => {\n\tif (Array.isArray(data)) {\n\t\treturn data.map((it, index) => resolveParametersInternal(it, [...path, index], parametersResolver))\n\t}\n\tif (typeof data === 'string') {\n\t\tconst expression = /^%([?])?([\\w|:.]+)%$/.exec(data)\n\t\tif (!expression) {\n\t\t\treturn data\n\t\t}\n\t\tconst isOptional = expression[1]\n\t\tconst expressions: string[] = expression[2].split(/\\|\\|/g)\n\t\tfor (const [i, expr] of expressions.entries()) {\n\t\t\tconst singleExpression = /^(\\w+(?:\\.\\w+)*)(?:::(\\w+))?$/.exec(expr)\n\t\t\tif (!singleExpression) {\n\t\t\t\tthrow new Error(`Invalid config expression ${expr}`)\n\t\t\t}\n\t\t\tconst [, parameter, cast] = singleExpression\n\t\t\tconst parts = parameter.split('.')\n\t\t\ttry {\n\t\t\t\tconst value = parametersResolver(parts, path)\n\t\t\t\tif (cast) {\n\t\t\t\t\tswitch (cast) {\n\t\t\t\t\t\tcase 'number':\n\t\t\t\t\t\t\treturn Number(value)\n\t\t\t\t\t\tcase 'string':\n\t\t\t\t\t\t\treturn String(value)\n\t\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\t\treturn value === 'true' || value === 'on' || value === '1'\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Unsupported cast to ${cast}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn value\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof UndefinedParameterError) {\n\t\t\t\t\tif (expressions[i + 1] !== undefined) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else if (isOptional) {\n\t\t\t\t\t\treturn undefined\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\t\t}\n\t}\n\tif (data === null) {\n\t\treturn data\n\t}\n\tif (typeof data === 'object') {\n\t\treturn Object.entries(data)\n\t\t\t.map(([key, value]: [string, any]) => [key, resolveParametersInternal(value, [...path, key], parametersResolver)])\n\t\t\t.reduce((result, [key, value]) => value === undefined ? result : ({ ...result, [key]: value }), {})\n\t}\n\treturn data\n}\n"],"names":["value","path"],"mappings":"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"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
class UndefinedParameterError extends Error {
|
|
2
|
-
}
|
|
3
|
-
const createObjectParametersResolver = (parameters) => (parts) => parts.reduce((current, part) => {
|
|
4
|
-
if (current === null || typeof current !== "object" || typeof current[part] === "undefined") {
|
|
5
|
-
throw new UndefinedParameterError(`Parameter "${parts.join(".")}" not found.`);
|
|
6
|
-
}
|
|
7
|
-
return current[part];
|
|
8
|
-
}, parameters);
|
|
9
|
-
const resolveParameters = (data, parametersResolver) => {
|
|
10
|
-
let recursionLevel = 0;
|
|
11
|
-
const dataResolver = (path) => {
|
|
12
|
-
const value = path.reduce((value2, part) => {
|
|
13
|
-
if (typeof part === "string") {
|
|
14
|
-
if (typeof value2 === "object" && value2 !== null && typeof value2[part] !== "undefined") {
|
|
15
|
-
return value2[part];
|
|
16
|
-
}
|
|
17
|
-
} else {
|
|
18
|
-
if (Array.isArray(value2) && typeof value2[part] !== "undefined") {
|
|
19
|
-
return value2[part];
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return void 0;
|
|
23
|
-
}, data);
|
|
24
|
-
if (recursionLevel++ > 20) {
|
|
25
|
-
throw new Error("Possible recursion in configuration");
|
|
26
|
-
}
|
|
27
|
-
const result = resolveParametersInternal(
|
|
28
|
-
value,
|
|
29
|
-
path,
|
|
30
|
-
(parts, path2) => parametersResolver(parts, path2, dataResolver)
|
|
31
|
-
);
|
|
32
|
-
recursionLevel--;
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
return resolveParametersInternal(data, [], (parts, path) => parametersResolver(parts, path, dataResolver));
|
|
36
|
-
};
|
|
37
|
-
const resolveParametersInternal = (data, path, parametersResolver) => {
|
|
38
|
-
if (Array.isArray(data)) {
|
|
39
|
-
return data.map((it, index) => resolveParametersInternal(it, [...path, index], parametersResolver));
|
|
40
|
-
}
|
|
41
|
-
if (typeof data === "string") {
|
|
42
|
-
const expression = /^%([?])?([\w|:.]+)%$/.exec(data);
|
|
43
|
-
if (!expression) {
|
|
44
|
-
return data;
|
|
45
|
-
}
|
|
46
|
-
const isOptional = expression[1];
|
|
47
|
-
const expressions = expression[2].split(/\|\|/g);
|
|
48
|
-
for (const [i, expr] of expressions.entries()) {
|
|
49
|
-
const singleExpression = /^(\w+(?:\.\w+)*)(?:::(\w+))?$/.exec(expr);
|
|
50
|
-
if (!singleExpression) {
|
|
51
|
-
throw new Error(`Invalid config expression ${expr}`);
|
|
52
|
-
}
|
|
53
|
-
const [, parameter, cast] = singleExpression;
|
|
54
|
-
const parts = parameter.split(".");
|
|
55
|
-
try {
|
|
56
|
-
const value = parametersResolver(parts, path);
|
|
57
|
-
if (cast) {
|
|
58
|
-
switch (cast) {
|
|
59
|
-
case "number":
|
|
60
|
-
return Number(value);
|
|
61
|
-
case "string":
|
|
62
|
-
return String(value);
|
|
63
|
-
case "bool":
|
|
64
|
-
return value === "true" || value === "on" || value === "1";
|
|
65
|
-
default:
|
|
66
|
-
throw new Error(`Unsupported cast to ${cast}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return value;
|
|
70
|
-
} catch (e) {
|
|
71
|
-
if (e instanceof UndefinedParameterError) {
|
|
72
|
-
if (expressions[i + 1] !== void 0) {
|
|
73
|
-
continue;
|
|
74
|
-
} else if (isOptional) {
|
|
75
|
-
return void 0;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
throw e;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
if (data === null) {
|
|
83
|
-
return data;
|
|
84
|
-
}
|
|
85
|
-
if (typeof data === "object") {
|
|
86
|
-
return Object.entries(data).map(([key, value]) => [key, resolveParametersInternal(value, [...path, key], parametersResolver)]).reduce((result, [key, value]) => value === void 0 ? result : { ...result, [key]: value }, {});
|
|
87
|
-
}
|
|
88
|
-
return data;
|
|
89
|
-
};
|
|
90
|
-
export {
|
|
91
|
-
UndefinedParameterError,
|
|
92
|
-
createObjectParametersResolver,
|
|
93
|
-
resolveParameters
|
|
94
|
-
};
|
|
95
|
-
//# sourceMappingURL=parametersResolving.js.map
|