@allgemein/base 1.6.10 → 1.6.11
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 +12 -12
- package/utils/Interpolation.d.ts +4 -0
- package/utils/Interpolation.js +83 -0
- package/utils/Interpolation.js.map +1 -0
- package/utils/TreeUtils.d.ts +1 -0
- package/utils/TreeUtils.js +7 -2
- package/utils/TreeUtils.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allgemein/base",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.11",
|
|
4
4
|
"description": "Library for commons moduls.",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"private": false,
|
|
@@ -30,22 +30,22 @@
|
|
|
30
30
|
"homepage": "https://github.com/allgemein-node/base#readme",
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@allgemein/packaging": "^1.2.18",
|
|
33
|
-
"@testdeck/mocha": "^0.2.
|
|
34
|
-
"@types/chai": "^4.3.
|
|
33
|
+
"@testdeck/mocha": "^0.2.1",
|
|
34
|
+
"@types/chai": "^4.3.3",
|
|
35
35
|
"@types/expect": "^24.3.0",
|
|
36
|
-
"@types/glob": "^
|
|
37
|
-
"@types/lodash": "^4.14.
|
|
38
|
-
"@types/mocha": "^
|
|
39
|
-
"@types/node": "^18.
|
|
40
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
41
|
-
"@typescript-eslint/parser": "^5.
|
|
36
|
+
"@types/glob": "^8.0.0",
|
|
37
|
+
"@types/lodash": "^4.14.186",
|
|
38
|
+
"@types/mocha": "^10.0.0",
|
|
39
|
+
"@types/node": "^18.7.23",
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "^5.38.1",
|
|
41
|
+
"@typescript-eslint/parser": "^5.38.1",
|
|
42
42
|
"chai": "^4.3.6",
|
|
43
43
|
"codecov": "^3.8.3",
|
|
44
44
|
"codelyzer": "^6.0.2",
|
|
45
45
|
"del": "6.1.1",
|
|
46
|
-
"eslint": "8.
|
|
46
|
+
"eslint": "8.24.0",
|
|
47
47
|
"eslint-plugin-import": "2.26.0",
|
|
48
|
-
"eslint-plugin-mocha": "10.0
|
|
48
|
+
"eslint-plugin-mocha": "10.1.0",
|
|
49
49
|
"eslint-plugin-prettier": "4.2.1",
|
|
50
50
|
"gulp": "4.0.2",
|
|
51
51
|
"gulp-bump": "^3.2.0",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"reflect-metadata": "^0.1.13",
|
|
62
62
|
"std-mocks": "^1.0.1",
|
|
63
63
|
"ts-node": "^10.9.1",
|
|
64
|
-
"typescript": "4.
|
|
64
|
+
"typescript": "4.8.4"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"lodash": "^4.17.21"
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Interpolation = void 0;
|
|
4
|
+
const TreeUtils_1 = require("./TreeUtils");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
6
|
+
const REGEX = /\${[^}]+}/g;
|
|
7
|
+
class Interpolation {
|
|
8
|
+
static exec(data, ...lookup) {
|
|
9
|
+
if (!lookup.length) {
|
|
10
|
+
lookup = [data];
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
if (Array.isArray(lookup[0])) {
|
|
14
|
+
lookup = lookup[0];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
TreeUtils_1.TreeUtils.walk(data, (x) => {
|
|
18
|
+
let v = x.value;
|
|
19
|
+
if ((0, lodash_1.isString)(v) && REGEX.test(v)) {
|
|
20
|
+
const match = v.match(REGEX);
|
|
21
|
+
match.forEach(_match => {
|
|
22
|
+
const content = _match.replace(/^\${|}$/g, '');
|
|
23
|
+
const splits = content.split(':-', 2);
|
|
24
|
+
const path = splits.shift();
|
|
25
|
+
const hasFallback = splits.length > 0;
|
|
26
|
+
const fallback = splits.shift();
|
|
27
|
+
let _value = null;
|
|
28
|
+
for (let i = 0; i < lookup.length; i++) {
|
|
29
|
+
_value = this.get(lookup[i], path);
|
|
30
|
+
if (_value) {
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (_value) {
|
|
35
|
+
if (x.index !== null) {
|
|
36
|
+
x.parent[x.index] = v = v.replace(_match, _value);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
x.parent[x.key] = v = v.replace(_match, _value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
if (hasFallback) {
|
|
44
|
+
if (x.index !== null) {
|
|
45
|
+
x.parent[x.index] = v = v.replace(_match, fallback);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
x.parent[x.key] = v = v.replace(_match, fallback);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
static get(arr, path = null) {
|
|
57
|
+
if (path) {
|
|
58
|
+
const paths = path.split('.');
|
|
59
|
+
let first = paths.shift();
|
|
60
|
+
if (/^[1-9]+\d*$/.test(first)) {
|
|
61
|
+
first = parseInt(first, 10);
|
|
62
|
+
}
|
|
63
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
64
|
+
if (arr.hasOwnProperty(first)) {
|
|
65
|
+
const pointer = arr[first];
|
|
66
|
+
if (paths.length === 0) {
|
|
67
|
+
return pointer;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return this.get(pointer, paths.join('.'));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// not found
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return arr;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.Interpolation = Interpolation;
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=Interpolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/Interpolation.ts"],"names":[],"mappings":";;;AAAA,2CAAkD;AAClD,mCAAgC;AAEhC,MAAM,KAAK,GAAG,YAAY,CAAC;AAG3B,MAAa,aAAa;IAExB,MAAM,CAAC,IAAI,CAAC,IAAS,EAAE,GAAG,MAAa;QAErC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;SACjB;aAAM;YACL,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC5B,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;aACpB;SACF;QAED,qBAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAa,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAChB,IAAI,IAAA,iBAAQ,EAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAChC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC7B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,IAAI,MAAM,GAAG,IAAI,CAAC;oBAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;wBACnC,IAAI,MAAM,EAAE;4BACV,MAAM;yBACP;qBACF;oBAED,IAAI,MAAM,EAAE;wBACV,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;4BACpB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBACnD;6BAAM;4BACL,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBACjD;qBACF;yBAAM;wBACL,IAAI,WAAW,EAAE;4BACf,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;gCACpB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;6BACrD;iCAAM;gCACL,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;6BACnD;yBACF;qBACF;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IAEL,CAAC;IAGD,MAAM,CAAC,GAAG,CAAC,GAAQ,EAAE,OAAe,IAAI;QACtC,IAAI,IAAI,EAAE;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,GAAoB,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC7B,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aAC7B;YACD,iDAAiD;YACjD,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,OAAO,GAAQ,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtB,OAAO,OAAO,CAAC;iBAChB;qBAAM;oBACL,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC3C;aACF;iBAAM;gBACL,YAAY;gBACZ,OAAO,IAAI,CAAC;aACb;SAEF;QACD,OAAO,GAAG,CAAC;IAEb,CAAC;CAGF;AA/ED,sCA+EC","file":"Interpolation.js","sourcesContent":["import {TreeUtils, WalkValues} from './TreeUtils';\nimport {isString} from 'lodash';\n\nconst REGEX = /\\${[^}]+}/g;\n\n\nexport class Interpolation {\n\n static exec(data: any, ...lookup: any[]): void {\n\n if (!lookup.length) {\n lookup = [data];\n } else {\n if (Array.isArray(lookup[0])) {\n lookup = lookup[0];\n }\n }\n\n TreeUtils.walk(data, (x: WalkValues) => {\n let v = x.value;\n if (isString(v) && REGEX.test(v)) {\n const match = v.match(REGEX);\n match.forEach(_match => {\n const content = _match.replace(/^\\${|}$/g, '');\n const splits = content.split(':-', 2);\n const path = splits.shift();\n const hasFallback = splits.length > 0;\n const fallback = splits.shift();\n let _value = null;\n\n for (let i = 0; i < lookup.length; i++) {\n _value = this.get(lookup[i], path);\n if (_value) {\n break;\n }\n }\n\n if (_value) {\n if (x.index !== null) {\n x.parent[x.index] = v = v.replace(_match, _value);\n } else {\n x.parent[x.key] = v = v.replace(_match, _value);\n }\n } else {\n if (hasFallback) {\n if (x.index !== null) {\n x.parent[x.index] = v = v.replace(_match, fallback);\n } else {\n x.parent[x.key] = v = v.replace(_match, fallback);\n }\n }\n }\n });\n }\n });\n\n }\n\n\n static get(arr: any, path: string = null): any {\n if (path) {\n const paths = path.split('.');\n let first: string | number = paths.shift();\n if (/^[1-9]+\\d*$/.test(first)) {\n first = parseInt(first, 10);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (arr.hasOwnProperty(first)) {\n const pointer: any = arr[first];\n if (paths.length === 0) {\n return pointer;\n } else {\n return this.get(pointer, paths.join('.'));\n }\n } else {\n // not found\n return null;\n }\n\n }\n return arr;\n\n }\n\n\n}\n"],"sourceRoot":".."}
|
package/utils/TreeUtils.d.ts
CHANGED
package/utils/TreeUtils.js
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TreeUtils = void 0;
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
|
+
const types_1 = require("util/types");
|
|
5
6
|
class TreeUtils {
|
|
7
|
+
static isLeaf(el) {
|
|
8
|
+
return !((0, lodash_1.isArray)(el) || ((0, lodash_1.isObject)(el) && !((0, types_1.isNumberObject)(el) || (0, types_1.isStringObject)(el) || (0, lodash_1.isDate)(el))));
|
|
9
|
+
}
|
|
6
10
|
static walk(root, fn) {
|
|
7
11
|
function walk(obj, parent = null, key = null, location = []) {
|
|
8
12
|
if (obj === null || obj === undefined) {
|
|
@@ -10,7 +14,7 @@ class TreeUtils {
|
|
|
10
14
|
}
|
|
11
15
|
if ((0, lodash_1.isArray)(obj)) {
|
|
12
16
|
obj.forEach((el, j) => {
|
|
13
|
-
const isLeaf =
|
|
17
|
+
const isLeaf = TreeUtils.isLeaf(el);
|
|
14
18
|
fn({
|
|
15
19
|
value: el,
|
|
16
20
|
key: key,
|
|
@@ -26,7 +30,8 @@ class TreeUtils {
|
|
|
26
30
|
}
|
|
27
31
|
else if ((0, lodash_1.isObjectLike)(obj)) {
|
|
28
32
|
(0, lodash_1.keys)(obj).forEach((_key) => {
|
|
29
|
-
const isLeaf =
|
|
33
|
+
const isLeaf = TreeUtils.isLeaf(obj[_key]);
|
|
34
|
+
// const isLeaf = !isArray(obj[_key]) && !isObjectLike(obj[_key]);
|
|
30
35
|
fn({
|
|
31
36
|
value: obj[_key],
|
|
32
37
|
key: _key,
|
package/utils/TreeUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/TreeUtils.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/TreeUtils.ts"],"names":[],"mappings":"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","file":"TreeUtils.js","sourcesContent":["import {isArray, isDate, isNull, isNumber, isObject, isObjectLike, isString, keys} from 'lodash';\nimport {isNumberObject, isStringObject} from 'util/types';\n\nexport interface WalkValues {\n value: any;\n key: string | number;\n index: number;\n location: any;\n parent: any;\n isLeaf: boolean;\n}\n\nexport class TreeUtils {\n\n static isLeaf(el: any) {\n return !(isArray(el) || (isObject(el) && !(isNumberObject(el) || isStringObject(el) || isDate(el))));\n }\n\n static walk(root: any, fn: (x: WalkValues) => void) {\n function walk(obj: any, parent: any = null, key: string | number = null, location: any[] = []) {\n if (obj === null || obj === undefined) {\n return;\n }\n if (isArray(obj)) {\n obj.forEach((el: any, j: number) => {\n const isLeaf = TreeUtils.isLeaf(el);\n fn({\n value: el,\n key: key,\n index: j,\n location: [...location, ...[j]],\n parent: obj,\n isLeaf: isLeaf\n });\n if (!isLeaf) {\n walk(el, j, el, key ? [...location, ...[key], ...[j]] : [...location, ...[j]]);\n }\n });\n } else if (isObjectLike(obj)) {\n keys(obj).forEach((_key: string) => {\n const isLeaf = TreeUtils.isLeaf(obj[_key]);\n // const isLeaf = !isArray(obj[_key]) && !isObjectLike(obj[_key]);\n fn({\n value: obj[_key],\n key: _key,\n parent: obj,\n index: null,\n location: [...location, ...[_key]],\n isLeaf: isLeaf\n });\n if (!isLeaf) {\n walk(obj[_key], obj, _key, [...location, ...[_key]]);\n }\n });\n } else {\n fn({\n value: obj,\n key: key,\n parent: parent,\n index: null,\n location: [...location],\n isLeaf: true\n });\n }\n }\n\n walk(root);\n }\n\n\n static async walkAsync(root: any, fn: (x: WalkValues) => void) {\n async function walk(obj: any, parent: any = null, key: string | number = null, location: any[] = []) {\n if (obj === null || obj === undefined) {\n return;\n }\n if (isArray(obj)) {\n for (let j = 0; j < obj.length; j++) {\n const el = obj[j];\n const isLeaf = !isArray(el) && !isObjectLike(el);\n await fn({\n value: el,\n key: key,\n index: j,\n location: [...location, ...[j]],\n parent: obj,\n isLeaf: isLeaf\n });\n if (!isLeaf) {\n await walk(el, j, el, key ? [...location, ...[key], ...[j]] : [...location, ...[j]]);\n }\n }\n } else if (isObjectLike(obj)) {\n for (const _key of keys(obj)) {\n const isLeaf = !isArray(obj[_key]) && !isObjectLike(obj[_key]);\n await fn({\n value: obj[_key],\n key: _key,\n parent: obj,\n index: null,\n location: [...location, ...[_key]],\n isLeaf: isLeaf\n });\n if (!isLeaf) {\n await walk(obj[_key], obj, _key, [...location, ...[_key]]);\n }\n }\n } else {\n await fn({\n value: obj,\n key: key,\n parent: parent,\n index: null,\n location: [...location],\n isLeaf: true\n });\n }\n }\n\n await walk(root);\n }\n\n\n}\n"],"sourceRoot":".."}
|