@bluealba/pae-bootstrap-lib 2.1.3-develop-92 → 2.1.3-develop-112
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/dist/src/bootstrap/bootstrap-platform.d.ts +0 -4
- package/dist/src/bootstrap/bootstrap-platform.d.ts.map +1 -1
- package/dist/src/bootstrap/bootstrap-platform.js +1 -5
- package/dist/src/bootstrap/bootstrap-platform.js.map +1 -1
- package/dist/src/bootstrap/domain/bootstrap-sync-metadata.interface.d.ts +1 -1
- package/dist/src/bootstrap/domain/bootstrap-sync-metadata.interface.d.ts.map +1 -1
- package/dist/src/bootstrap/read-bootstrap-applications.d.ts.map +1 -1
- package/dist/src/bootstrap/read-bootstrap-applications.js +185 -56
- package/dist/src/bootstrap/read-bootstrap-applications.js.map +1 -1
- package/dist/src/expression-language/expression-engine.d.ts +3 -0
- package/dist/src/expression-language/expression-engine.d.ts.map +1 -0
- package/dist/src/expression-language/expression-engine.js +80 -0
- package/dist/src/expression-language/expression-engine.js.map +1 -0
- package/dist/src/expression-language/expression-engine.test.d.ts +2 -0
- package/dist/src/expression-language/expression-engine.test.d.ts.map +1 -0
- package/dist/src/expression-language/expression-engine.test.js +107 -0
- package/dist/src/expression-language/expression-engine.test.js.map +1 -0
- package/dist/src/expression-language/index.d.ts +5 -0
- package/dist/src/expression-language/index.d.ts.map +1 -0
- package/dist/src/expression-language/index.js +14 -0
- package/dist/src/expression-language/index.js.map +1 -0
- package/dist/src/expression-language/resolve-deep.d.ts +2 -0
- package/dist/src/expression-language/resolve-deep.d.ts.map +1 -0
- package/dist/src/expression-language/resolve-deep.js +21 -0
- package/dist/src/expression-language/resolve-deep.js.map +1 -0
- package/dist/src/expression-language/resolve-deep.test.d.ts +2 -0
- package/dist/src/expression-language/resolve-deep.test.d.ts.map +1 -0
- package/dist/src/expression-language/resolve-deep.test.js +117 -0
- package/dist/src/expression-language/resolve-deep.test.js.map +1 -0
- package/dist/src/expression-language/resolvers/env.resolver.d.ts +3 -0
- package/dist/src/expression-language/resolvers/env.resolver.d.ts.map +1 -0
- package/dist/src/expression-language/resolvers/env.resolver.js +14 -0
- package/dist/src/expression-language/resolvers/env.resolver.js.map +1 -0
- package/dist/src/expression-language/resolvers/env.resolver.test.d.ts +2 -0
- package/dist/src/expression-language/resolvers/env.resolver.test.d.ts.map +1 -0
- package/dist/src/expression-language/resolvers/env.resolver.test.js +23 -0
- package/dist/src/expression-language/resolvers/env.resolver.test.js.map +1 -0
- package/dist/src/expression-language/resolvers/index.d.ts +8 -0
- package/dist/src/expression-language/resolvers/index.d.ts.map +1 -0
- package/dist/src/expression-language/resolvers/index.js +12 -0
- package/dist/src/expression-language/resolvers/index.js.map +1 -0
- package/dist/src/expression-language/resolvers/resolver.interface.d.ts +5 -0
- package/dist/src/expression-language/resolvers/resolver.interface.d.ts.map +1 -0
- package/dist/src/expression-language/resolvers/resolver.interface.js +3 -0
- package/dist/src/expression-language/resolvers/resolver.interface.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/utils/io.d.ts +1 -1
- package/dist/src/utils/io.d.ts.map +1 -1
- package/dist/src/utils/io.js +4 -1
- package/dist/src/utils/io.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveString = exports.containsExpression = void 0;
|
|
4
|
+
const resolvers_1 = require("./resolvers");
|
|
5
|
+
const EXPRESSION_REGEX = /\{\{(\$[^}]+)\}\}/g;
|
|
6
|
+
const FULL_EXPRESSION_REGEX = /^\{\{(\$[^}]+)\}\}$/;
|
|
7
|
+
const SEGMENT_REGEX = /^\$([A-Z_]+)\.([A-Za-z_][A-Za-z0-9_]*)$/;
|
|
8
|
+
const containsExpression = (value) => value.includes('{{$');
|
|
9
|
+
exports.containsExpression = containsExpression;
|
|
10
|
+
const coerce = (value) => {
|
|
11
|
+
if (value === 'true')
|
|
12
|
+
return true;
|
|
13
|
+
if (value === 'false')
|
|
14
|
+
return false;
|
|
15
|
+
const num = Number(value);
|
|
16
|
+
if (!isNaN(num) && value.trim() !== '')
|
|
17
|
+
return num;
|
|
18
|
+
return value;
|
|
19
|
+
};
|
|
20
|
+
const resolveExpressionContent = (content, registry) => {
|
|
21
|
+
let body = content;
|
|
22
|
+
let isOptional = false;
|
|
23
|
+
// Trailing `?` (not preceded by `=`) marks the expression as optional
|
|
24
|
+
if (body.endsWith('?') && !body.endsWith('?=')) {
|
|
25
|
+
isOptional = true;
|
|
26
|
+
body = body.slice(0, -1);
|
|
27
|
+
}
|
|
28
|
+
const segments = body.split('?=');
|
|
29
|
+
let firstError = null;
|
|
30
|
+
for (const segment of segments) {
|
|
31
|
+
if (segment.startsWith('$')) {
|
|
32
|
+
// Reference segment: $NAMESPACE.KEY
|
|
33
|
+
const match = SEGMENT_REGEX.exec(segment);
|
|
34
|
+
if (!match) {
|
|
35
|
+
throw new Error(`Expression syntax error: invalid reference '${segment}' in '{{${content}}}'`);
|
|
36
|
+
}
|
|
37
|
+
const [, namespace, key] = match;
|
|
38
|
+
const resolver = registry.get(namespace);
|
|
39
|
+
if (!resolver) {
|
|
40
|
+
throw new Error(`Expression resolution failed: unknown namespace '${namespace}'. Available: ${[...registry.keys()].join(', ')}`);
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
return resolver.resolve(key);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
if (!firstError)
|
|
47
|
+
firstError = err;
|
|
48
|
+
// Continue to next fallback segment
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Literal segment: always succeeds
|
|
53
|
+
return segment;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// All segments failed (or no segments resolved)
|
|
57
|
+
if (isOptional)
|
|
58
|
+
return undefined;
|
|
59
|
+
if (firstError)
|
|
60
|
+
throw firstError;
|
|
61
|
+
throw new Error(`Expression resolution failed: no resolvable segments in '{{${content}}}'`);
|
|
62
|
+
};
|
|
63
|
+
const resolveString = (value, registry = resolvers_1.defaultResolverRegistry) => {
|
|
64
|
+
// Full-value expression: entire string is one {{...}} — coerce result type
|
|
65
|
+
const fullMatch = FULL_EXPRESSION_REGEX.exec(value);
|
|
66
|
+
if (fullMatch) {
|
|
67
|
+
const [, content] = fullMatch;
|
|
68
|
+
const resolved = resolveExpressionContent(content, registry);
|
|
69
|
+
if (resolved === undefined)
|
|
70
|
+
return undefined;
|
|
71
|
+
return coerce(resolved);
|
|
72
|
+
}
|
|
73
|
+
// Inline expression: mixed with other text — always returns string
|
|
74
|
+
return value.replace(EXPRESSION_REGEX, (_, content) => {
|
|
75
|
+
const resolved = resolveExpressionContent(content, registry);
|
|
76
|
+
return resolved !== null && resolved !== void 0 ? resolved : '';
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
exports.resolveString = resolveString;
|
|
80
|
+
//# sourceMappingURL=expression-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-engine.js","sourceRoot":"","sources":["../../../src/expression-language/expression-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-engine.test.d.ts","sourceRoot":"","sources":["../../../src/expression-language/expression-engine.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const expression_engine_1 = require("./expression-engine");
|
|
4
|
+
const resolvers_1 = require("./resolvers");
|
|
5
|
+
const stubResolver = {
|
|
6
|
+
namespace: 'STUB',
|
|
7
|
+
resolve: (key) => {
|
|
8
|
+
const values = {
|
|
9
|
+
HOST: 'localhost',
|
|
10
|
+
PORT: '8080',
|
|
11
|
+
DEBUG: 'true',
|
|
12
|
+
NAME: 'my-service',
|
|
13
|
+
};
|
|
14
|
+
if (!(key in values))
|
|
15
|
+
throw new Error(`STUB.${key} not found`);
|
|
16
|
+
return values[key];
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
const registry = (0, resolvers_1.createResolverRegistry)([stubResolver]);
|
|
20
|
+
describe('containsExpression', () => {
|
|
21
|
+
it('returns true when {{$ present', () => {
|
|
22
|
+
expect((0, expression_engine_1.containsExpression)('{{$STUB.HOST}}')).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
it('returns false when no {{$ present', () => {
|
|
25
|
+
expect((0, expression_engine_1.containsExpression)('hello')).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('resolveString', () => {
|
|
29
|
+
it('resolves full-value string expression', () => {
|
|
30
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.HOST}}', registry)).toBe('localhost');
|
|
31
|
+
});
|
|
32
|
+
it('coerces full-value number expression', () => {
|
|
33
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.PORT}}', registry)).toBe(8080);
|
|
34
|
+
});
|
|
35
|
+
it('coerces full-value boolean expression (true)', () => {
|
|
36
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.DEBUG}}', registry)).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
it('resolves inline expression (mixed text)', () => {
|
|
39
|
+
expect((0, expression_engine_1.resolveString)('http://{{$STUB.HOST}}:{{$STUB.PORT}}', registry)).toBe('http://localhost:8080');
|
|
40
|
+
});
|
|
41
|
+
it('passes through strings without expressions', () => {
|
|
42
|
+
expect((0, expression_engine_1.resolveString)('plain-value', registry)).toBe('plain-value');
|
|
43
|
+
});
|
|
44
|
+
it('throws on unknown namespace', () => {
|
|
45
|
+
expect(() => (0, expression_engine_1.resolveString)('{{$UNKNOWN.KEY}}', registry)).toThrow("unknown namespace 'UNKNOWN'");
|
|
46
|
+
});
|
|
47
|
+
it('throws on missing key (delegates to resolver)', () => {
|
|
48
|
+
expect(() => (0, expression_engine_1.resolveString)('{{$STUB.MISSING}}', registry)).toThrow('STUB.MISSING');
|
|
49
|
+
});
|
|
50
|
+
describe('optional expressions (?)', () => {
|
|
51
|
+
it('resolves normally when key exists and ? is present', () => {
|
|
52
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.HOST?}}', registry)).toBe('localhost');
|
|
53
|
+
});
|
|
54
|
+
it('returns undefined for missing key with ? suffix', () => {
|
|
55
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.MISSING?}}', registry)).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
it('collapses to empty string in inline mode when optional key is missing', () => {
|
|
58
|
+
expect((0, expression_engine_1.resolveString)('http://{{$STUB.HOST?}}:{{$STUB.PORT}}', registry)).toBe('http://localhost:8080');
|
|
59
|
+
});
|
|
60
|
+
it('collapses to empty string in inline mode when optional key is missing (HOST missing)', () => {
|
|
61
|
+
const registryNoHost = (0, resolvers_1.createResolverRegistry)([{
|
|
62
|
+
namespace: 'STUB',
|
|
63
|
+
resolve: (key) => {
|
|
64
|
+
const values = { PORT: '8080' };
|
|
65
|
+
if (!(key in values))
|
|
66
|
+
throw new Error(`STUB.${key} not found`);
|
|
67
|
+
return values[key];
|
|
68
|
+
},
|
|
69
|
+
}]);
|
|
70
|
+
expect((0, expression_engine_1.resolveString)('http://{{$STUB.HOST?}}:{{$STUB.PORT}}', registryNoHost)).toBe('http://:8080');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('default value expressions (?=value)', () => {
|
|
74
|
+
it('returns literal default when key is missing', () => {
|
|
75
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.MISSING?=fallback}}', registry)).toBe('fallback');
|
|
76
|
+
});
|
|
77
|
+
it('coerces numeric literal default in full-value mode', () => {
|
|
78
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.MISSING?=8080}}', registry)).toBe(8080);
|
|
79
|
+
});
|
|
80
|
+
it('coerces boolean literal default (true) in full-value mode', () => {
|
|
81
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.MISSING?=true}}', registry)).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
it('uses resolver value over default when key exists', () => {
|
|
84
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.HOST?=default-host}}', registry)).toBe('localhost');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('fallback chains (?=ref?=ref?=literal)', () => {
|
|
88
|
+
it('falls back to second reference when first is missing', () => {
|
|
89
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.MISSING?=$STUB.HOST}}', registry)).toBe('localhost');
|
|
90
|
+
});
|
|
91
|
+
it('falls through to literal when all references are missing', () => {
|
|
92
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.MISSING?=$STUB.ALSO_MISSING?=default}}', registry)).toBe('default');
|
|
93
|
+
});
|
|
94
|
+
it('returns undefined for optional chain when all references are missing', () => {
|
|
95
|
+
expect((0, expression_engine_1.resolveString)('{{$STUB.MISSING?=$STUB.ALSO_MISSING?}}', registry)).toBeUndefined();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('error cases', () => {
|
|
99
|
+
it('throws on unknown namespace in fallback reference', () => {
|
|
100
|
+
expect(() => (0, expression_engine_1.resolveString)('{{$STUB.MISSING?=$UNKNOWN.KEY}}', registry)).toThrow("unknown namespace 'UNKNOWN'");
|
|
101
|
+
});
|
|
102
|
+
it('throws on invalid segment syntax', () => {
|
|
103
|
+
expect(() => (0, expression_engine_1.resolveString)('{{$STUB.?=x}}', registry)).toThrow('Expression syntax error');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=expression-engine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-engine.test.js","sourceRoot":"","sources":["../../../src/expression-language/expression-engine.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { resolveString, containsExpression } from './expression-engine';
|
|
2
|
+
export { resolveDeep } from './resolve-deep';
|
|
3
|
+
export { createResolverRegistry, DEFAULT_RESOLVERS, defaultResolverRegistry, envResolver } from './resolvers';
|
|
4
|
+
export type { Resolver } from './resolvers/resolver.interface';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/expression-language/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9G,YAAY,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.envResolver = exports.defaultResolverRegistry = exports.DEFAULT_RESOLVERS = exports.createResolverRegistry = exports.resolveDeep = exports.containsExpression = exports.resolveString = void 0;
|
|
4
|
+
var expression_engine_1 = require("./expression-engine");
|
|
5
|
+
Object.defineProperty(exports, "resolveString", { enumerable: true, get: function () { return expression_engine_1.resolveString; } });
|
|
6
|
+
Object.defineProperty(exports, "containsExpression", { enumerable: true, get: function () { return expression_engine_1.containsExpression; } });
|
|
7
|
+
var resolve_deep_1 = require("./resolve-deep");
|
|
8
|
+
Object.defineProperty(exports, "resolveDeep", { enumerable: true, get: function () { return resolve_deep_1.resolveDeep; } });
|
|
9
|
+
var resolvers_1 = require("./resolvers");
|
|
10
|
+
Object.defineProperty(exports, "createResolverRegistry", { enumerable: true, get: function () { return resolvers_1.createResolverRegistry; } });
|
|
11
|
+
Object.defineProperty(exports, "DEFAULT_RESOLVERS", { enumerable: true, get: function () { return resolvers_1.DEFAULT_RESOLVERS; } });
|
|
12
|
+
Object.defineProperty(exports, "defaultResolverRegistry", { enumerable: true, get: function () { return resolvers_1.defaultResolverRegistry; } });
|
|
13
|
+
Object.defineProperty(exports, "envResolver", { enumerable: true, get: function () { return resolvers_1.envResolver; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/expression-language/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwE;AAA/D,kHAAA,aAAa,OAAA;AAAE,uHAAA,kBAAkB,OAAA;AAC1C,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,yCAA8G;AAArG,mHAAA,sBAAsB,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,oHAAA,uBAAuB,OAAA;AAAE,wGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-deep.d.ts","sourceRoot":"","sources":["../../../src/expression-language/resolve-deep.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,EAAE,sDAAkC,KAAG,OAehF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDeep = void 0;
|
|
4
|
+
const expression_engine_1 = require("./expression-engine");
|
|
5
|
+
const resolvers_1 = require("./resolvers");
|
|
6
|
+
const resolveDeep = (value, registry = resolvers_1.defaultResolverRegistry) => {
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
return (0, expression_engine_1.containsExpression)(value) ? (0, expression_engine_1.resolveString)(value, registry) : value;
|
|
9
|
+
}
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
return value.map(item => (0, exports.resolveDeep)(item, registry));
|
|
12
|
+
}
|
|
13
|
+
if (value !== null && typeof value === 'object') {
|
|
14
|
+
return Object.fromEntries(Object.entries(value)
|
|
15
|
+
.map(([k, v]) => [k, (0, exports.resolveDeep)(v, registry)])
|
|
16
|
+
.filter(([, v]) => v !== undefined));
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
};
|
|
20
|
+
exports.resolveDeep = resolveDeep;
|
|
21
|
+
//# sourceMappingURL=resolve-deep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-deep.js","sourceRoot":"","sources":["../../../src/expression-language/resolve-deep.ts"],"names":[],"mappings":";;;AAAA,2DAAwE;AACxE,2CAAsD;AAE/C,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,QAAQ,GAAG,mCAAuB,EAAW,EAAE;IACzF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAA,sCAAkB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,iCAAa,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAA,mBAAW,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CACtC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAfW,QAAA,WAAW,eAetB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-deep.test.d.ts","sourceRoot":"","sources":["../../../src/expression-language/resolve-deep.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const resolve_deep_1 = require("./resolve-deep");
|
|
4
|
+
const resolvers_1 = require("./resolvers");
|
|
5
|
+
const stubResolver = {
|
|
6
|
+
namespace: 'STUB',
|
|
7
|
+
resolve: (key) => {
|
|
8
|
+
const values = {
|
|
9
|
+
HOST: 'myhost',
|
|
10
|
+
PORT: '9000',
|
|
11
|
+
ENABLED: 'true',
|
|
12
|
+
};
|
|
13
|
+
if (!(key in values))
|
|
14
|
+
throw new Error(`STUB.${key} not found`);
|
|
15
|
+
return values[key];
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
const registry = (0, resolvers_1.createResolverRegistry)([stubResolver]);
|
|
19
|
+
describe('resolveDeep', () => {
|
|
20
|
+
it('resolves string values', () => {
|
|
21
|
+
expect((0, resolve_deep_1.resolveDeep)('{{$STUB.HOST}}', registry)).toBe('myhost');
|
|
22
|
+
});
|
|
23
|
+
it('passes through non-expression strings', () => {
|
|
24
|
+
expect((0, resolve_deep_1.resolveDeep)('plain', registry)).toBe('plain');
|
|
25
|
+
});
|
|
26
|
+
it('passes through numbers', () => {
|
|
27
|
+
expect((0, resolve_deep_1.resolveDeep)(42, registry)).toBe(42);
|
|
28
|
+
});
|
|
29
|
+
it('passes through booleans', () => {
|
|
30
|
+
expect((0, resolve_deep_1.resolveDeep)(false, registry)).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
it('passes through null', () => {
|
|
33
|
+
expect((0, resolve_deep_1.resolveDeep)(null, registry)).toBe(null);
|
|
34
|
+
});
|
|
35
|
+
it('resolves strings inside arrays', () => {
|
|
36
|
+
expect((0, resolve_deep_1.resolveDeep)(['{{$STUB.HOST}}', 'static'], registry)).toEqual(['myhost', 'static']);
|
|
37
|
+
});
|
|
38
|
+
it('resolves strings inside objects', () => {
|
|
39
|
+
expect((0, resolve_deep_1.resolveDeep)({ host: '{{$STUB.HOST}}', port: '{{$STUB.PORT}}' }, registry)).toEqual({
|
|
40
|
+
host: 'myhost',
|
|
41
|
+
port: 9000,
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it('resolves deeply nested objects', () => {
|
|
45
|
+
const input = {
|
|
46
|
+
service: {
|
|
47
|
+
host: '{{$STUB.HOST}}',
|
|
48
|
+
port: '{{$STUB.PORT}}',
|
|
49
|
+
},
|
|
50
|
+
enabled: '{{$STUB.ENABLED}}',
|
|
51
|
+
};
|
|
52
|
+
expect((0, resolve_deep_1.resolveDeep)(input, registry)).toEqual({
|
|
53
|
+
service: {
|
|
54
|
+
host: 'myhost',
|
|
55
|
+
port: 9000,
|
|
56
|
+
},
|
|
57
|
+
enabled: true,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
it('resolves taskConfig-style deep nesting', () => {
|
|
61
|
+
const input = {
|
|
62
|
+
taskConfig: {
|
|
63
|
+
cronExpression: '0 * * * *',
|
|
64
|
+
target: {
|
|
65
|
+
host: '{{$STUB.HOST}}',
|
|
66
|
+
port: '{{$STUB.PORT}}',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
expect((0, resolve_deep_1.resolveDeep)(input, registry)).toEqual({
|
|
71
|
+
taskConfig: {
|
|
72
|
+
cronExpression: '0 * * * *',
|
|
73
|
+
target: {
|
|
74
|
+
host: 'myhost',
|
|
75
|
+
port: 9000,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
it('propagates errors from resolver', () => {
|
|
81
|
+
expect(() => (0, resolve_deep_1.resolveDeep)({ key: '{{$STUB.MISSING}}' }, registry)).toThrow('STUB.MISSING');
|
|
82
|
+
});
|
|
83
|
+
describe('optional expressions in objects', () => {
|
|
84
|
+
it('omits key when optional expression resolves to undefined', () => {
|
|
85
|
+
expect((0, resolve_deep_1.resolveDeep)({ host: '{{$STUB.HOST}}', missing: '{{$STUB.MISSING?}}' }, registry)).toEqual({
|
|
86
|
+
host: 'myhost',
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
it('includes key when optional expression resolves to a value', () => {
|
|
90
|
+
expect((0, resolve_deep_1.resolveDeep)({ host: '{{$STUB.HOST?}}' }, registry)).toEqual({ host: 'myhost' });
|
|
91
|
+
});
|
|
92
|
+
it('uses default value when key is missing', () => {
|
|
93
|
+
expect((0, resolve_deep_1.resolveDeep)({ host: '{{$STUB.HOST}}', port: '{{$STUB.MISSING?=9999}}' }, registry)).toEqual({
|
|
94
|
+
host: 'myhost',
|
|
95
|
+
port: 9999,
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
it('handles nested objects with mix of optional and required', () => {
|
|
99
|
+
const input = {
|
|
100
|
+
service: {
|
|
101
|
+
host: '{{$STUB.HOST}}',
|
|
102
|
+
port: '{{$STUB.PORT}}',
|
|
103
|
+
debug: '{{$STUB.MISSING?}}',
|
|
104
|
+
},
|
|
105
|
+
enabled: '{{$STUB.ENABLED}}',
|
|
106
|
+
};
|
|
107
|
+
expect((0, resolve_deep_1.resolveDeep)(input, registry)).toEqual({
|
|
108
|
+
service: {
|
|
109
|
+
host: 'myhost',
|
|
110
|
+
port: 9000,
|
|
111
|
+
},
|
|
112
|
+
enabled: true,
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=resolve-deep.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-deep.test.js","sourceRoot":"","sources":["../../../src/expression-language/resolve-deep.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.resolver.d.ts","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/env.resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,eAAO,MAAM,WAAW,EAAE,QASzB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.envResolver = void 0;
|
|
4
|
+
exports.envResolver = {
|
|
5
|
+
namespace: 'ENV',
|
|
6
|
+
resolve: (key) => {
|
|
7
|
+
const value = process.env[key];
|
|
8
|
+
if (value === undefined) {
|
|
9
|
+
throw new Error(`Expression resolution failed: {{$ENV.${key}}} is not defined in environment variables`);
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=env.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.resolver.js","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/env.resolver.ts"],"names":[],"mappings":";;;AAEa,QAAA,WAAW,GAAa;IACnC,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,CAAC,GAAW,EAAU,EAAE;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,4CAA4C,CAAC,CAAC;QAC3G,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.resolver.test.d.ts","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/env.resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const env_resolver_1 = require("./env.resolver");
|
|
4
|
+
describe('envResolver', () => {
|
|
5
|
+
it('resolves an existing env var', () => {
|
|
6
|
+
process.env.TEST_VAR = 'hello';
|
|
7
|
+
expect(env_resolver_1.envResolver.resolve('TEST_VAR')).toBe('hello');
|
|
8
|
+
delete process.env.TEST_VAR;
|
|
9
|
+
});
|
|
10
|
+
it('allows empty string values', () => {
|
|
11
|
+
process.env.EMPTY_VAR = '';
|
|
12
|
+
expect(env_resolver_1.envResolver.resolve('EMPTY_VAR')).toBe('');
|
|
13
|
+
delete process.env.EMPTY_VAR;
|
|
14
|
+
});
|
|
15
|
+
it('throws for missing env var with correct message', () => {
|
|
16
|
+
delete process.env.MISSING_VAR;
|
|
17
|
+
expect(() => env_resolver_1.envResolver.resolve('MISSING_VAR')).toThrow('{{$ENV.MISSING_VAR}}');
|
|
18
|
+
});
|
|
19
|
+
it('has namespace ENV', () => {
|
|
20
|
+
expect(env_resolver_1.envResolver.namespace).toBe('ENV');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=env.resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.resolver.test.js","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/env.resolver.test.ts"],"names":[],"mappings":";;AAAA,iDAA6C;AAE7C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC/B,MAAM,CAAC,0BAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;QAC3B,MAAM,CAAC,0BAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,0BAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,0BAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Resolver } from './resolver.interface';
|
|
2
|
+
import { envResolver } from './env.resolver';
|
|
3
|
+
export declare const createResolverRegistry: (resolvers: Resolver[]) => Map<string, Resolver>;
|
|
4
|
+
export declare const DEFAULT_RESOLVERS: Resolver[];
|
|
5
|
+
export declare const defaultResolverRegistry: Map<string, Resolver>;
|
|
6
|
+
export { envResolver };
|
|
7
|
+
export type { Resolver };
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,sBAAsB,GAAI,WAAW,QAAQ,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAElF,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,EAAkB,CAAC;AAE3D,eAAO,MAAM,uBAAuB,uBAA4C,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.envResolver = exports.defaultResolverRegistry = exports.DEFAULT_RESOLVERS = exports.createResolverRegistry = void 0;
|
|
4
|
+
const env_resolver_1 = require("./env.resolver");
|
|
5
|
+
Object.defineProperty(exports, "envResolver", { enumerable: true, get: function () { return env_resolver_1.envResolver; } });
|
|
6
|
+
const createResolverRegistry = (resolvers) => {
|
|
7
|
+
return new Map(resolvers.map(r => [r.namespace, r]));
|
|
8
|
+
};
|
|
9
|
+
exports.createResolverRegistry = createResolverRegistry;
|
|
10
|
+
exports.DEFAULT_RESOLVERS = [env_resolver_1.envResolver];
|
|
11
|
+
exports.defaultResolverRegistry = (0, exports.createResolverRegistry)(exports.DEFAULT_RESOLVERS);
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/index.ts"],"names":[],"mappings":";;;AACA,iDAA6C;AAUpC,4FAVA,0BAAW,OAUA;AARb,MAAM,sBAAsB,GAAG,CAAC,SAAqB,EAAyB,EAAE;IACrF,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAFW,QAAA,sBAAsB,0BAEjC;AAEW,QAAA,iBAAiB,GAAe,CAAC,0BAAW,CAAC,CAAC;AAE9C,QAAA,uBAAuB,GAAG,IAAA,8BAAsB,EAAC,yBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.interface.d.ts","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/resolver.interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.interface.js","sourceRoot":"","sources":["../../../../src/expression-language/resolvers/resolver.interface.ts"],"names":[],"mappings":""}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export * from './bootstrap/domain';
|
|
|
2
2
|
export * from './bootstrap/bootstrap-platform';
|
|
3
3
|
export * from './bootstrap/entity-synchronizer';
|
|
4
4
|
export { default as compareListsBy } from './utils/compare-lists-by';
|
|
5
|
+
export * from './expression-language';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACrE,cAAc,uBAAuB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -23,4 +23,5 @@ __exportStar(require("./bootstrap/bootstrap-platform"), exports);
|
|
|
23
23
|
__exportStar(require("./bootstrap/entity-synchronizer"), exports);
|
|
24
24
|
var compare_lists_by_1 = require("./utils/compare-lists-by");
|
|
25
25
|
Object.defineProperty(exports, "compareListsBy", { enumerable: true, get: function () { return __importDefault(compare_lists_by_1).default; } });
|
|
26
|
+
__exportStar(require("./expression-language"), exports);
|
|
26
27
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,iEAA8C;AAC9C,kEAAgD;AAChD,6DAAqE;AAA5D,mIAAA,OAAO,OAAkB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,iEAA8C;AAC9C,kEAAgD;AAChD,6DAAqE;AAA5D,mIAAA,OAAO,OAAkB;AAClC,wDAAsC"}
|
package/dist/src/utils/io.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../src/utils/io.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../src/utils/io.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,YAAwB,CAAC;AAShE,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OACH,CAAC"}
|
package/dist/src/utils/io.js
CHANGED
|
@@ -5,9 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.readJSONFile = exports.fileExists = void 0;
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const expression_language_1 = require("../expression-language");
|
|
8
9
|
const parseJSON = JSON.parse;
|
|
9
10
|
const fileExists = (path) => node_fs_1.default.existsSync(path);
|
|
10
11
|
exports.fileExists = fileExists;
|
|
11
12
|
const readAndParseFile = (parser) => (path) => parser(node_fs_1.default.readFileSync(path, 'utf8'));
|
|
12
|
-
|
|
13
|
+
const readAndParseJSONFile = readAndParseFile(parseJSON);
|
|
14
|
+
const readJSONFile = (path) => (0, expression_language_1.resolveDeep)(readAndParseJSONFile(path));
|
|
15
|
+
exports.readJSONFile = readJSONFile;
|
|
13
16
|
//# sourceMappingURL=io.js.map
|
package/dist/src/utils/io.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../../src/utils/io.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../../src/utils/io.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,gEAAqD;AAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAEtB,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAAnD,QAAA,UAAU,cAAyC;AAEhE,MAAM,gBAAgB,GAClB,CAAI,MAA8B,EAAE,EAAE,CAClC,CAAC,IAAY,EAAK,EAAE,CAChB,MAAM,CAAC,iBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAElD,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAElD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE,CACpD,IAAA,iCAAW,EAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAD7B,QAAA,YAAY,gBACiB"}
|
package/package.json
CHANGED