xypriss 9.10.5 → 9.10.6
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/cjs/src/plugins/const/XyprissTempDir.js +4 -13
- package/dist/cjs/src/plugins/const/XyprissTempDir.js.map +1 -1
- package/dist/cjs/src/plugins/const/getSysApi.js +14 -0
- package/dist/cjs/src/plugins/const/getSysApi.js.map +1 -0
- package/dist/cjs/src/utils/ConfigSyntaxParser.js +185 -73
- package/dist/cjs/src/utils/ConfigSyntaxParser.js.map +1 -1
- package/dist/esm/src/plugins/const/XyprissTempDir.js +2 -10
- package/dist/esm/src/plugins/const/XyprissTempDir.js.map +1 -1
- package/dist/esm/src/plugins/const/getSysApi.js +12 -0
- package/dist/esm/src/plugins/const/getSysApi.js.map +1 -0
- package/dist/esm/src/utils/ConfigSyntaxParser.js +185 -73
- package/dist/esm/src/utils/ConfigSyntaxParser.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var xyprissSecurity = require('xypriss-security');
|
|
4
|
+
var getSysApi = require('./getSysApi.js');
|
|
4
5
|
|
|
5
|
-
/**
|
|
6
|
-
* Lazy accessor for `localSysApi`.
|
|
7
|
-
*
|
|
8
|
-
* Deferred to call-time to break the circular initialization chain:
|
|
9
|
-
* `xhsc.ts` -> `PathApi` -> `XyprissTempDir` -> `xhsc` (localSysApi)
|
|
10
|
-
*/
|
|
11
|
-
function getSysApi() {
|
|
12
|
-
return require("../../xhsc").localSysApi;
|
|
13
|
-
}
|
|
14
6
|
/**
|
|
15
7
|
* Returns the absolute path to the XyPriss shared temp directory.
|
|
16
8
|
*
|
|
17
9
|
* @returns {string} Path to `<os.tmpdir>/nehonix.xypriss.data`
|
|
18
10
|
*/
|
|
19
11
|
function getXyprissTempDir() {
|
|
20
|
-
const sys = getSysApi();
|
|
12
|
+
const sys = getSysApi.getSysApi();
|
|
21
13
|
return sys.path.join(sys.path.tempDir(), "nehonix.xypriss.data");
|
|
22
14
|
}
|
|
23
15
|
/**
|
|
@@ -27,7 +19,7 @@ function getXyprissTempDir() {
|
|
|
27
19
|
* @returns {string} The absolute resolved temp sub-path.
|
|
28
20
|
*/
|
|
29
21
|
function createXyprissTempDir(_p) {
|
|
30
|
-
const sys = getSysApi();
|
|
22
|
+
const sys = getSysApi.getSysApi();
|
|
31
23
|
const base = getXyprissTempDir();
|
|
32
24
|
const segment = typeof _p === "string"
|
|
33
25
|
? _p
|
|
@@ -68,7 +60,7 @@ function generateXUserTmpDir() {
|
|
|
68
60
|
if (_sessionTmpDir !== null) {
|
|
69
61
|
return _sessionTmpDir;
|
|
70
62
|
}
|
|
71
|
-
const sys = getSysApi();
|
|
63
|
+
const sys = getSysApi.getSysApi();
|
|
72
64
|
const hex = xyprissSecurity.getRandomBytes(16).slice(0, 4).toString("hex");
|
|
73
65
|
_sessionTmpDir = sys.path.join(getXyprissTempDir(), "xuser", hex);
|
|
74
66
|
return _sessionTmpDir;
|
|
@@ -76,6 +68,5 @@ function generateXUserTmpDir() {
|
|
|
76
68
|
|
|
77
69
|
exports.createXyprissTempDir = createXyprissTempDir;
|
|
78
70
|
exports.generateXUserTmpDir = generateXUserTmpDir;
|
|
79
|
-
exports.getSysApi = getSysApi;
|
|
80
71
|
exports.getXyprissTempDir = getXyprissTempDir;
|
|
81
72
|
//# sourceMappingURL=XyprissTempDir.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyprissTempDir.js","sources":["../../../../../src/plugins/const/XyprissTempDir.ts"],"sourcesContent":[null],"names":["getRandomBytes"],"mappings":"
|
|
1
|
+
{"version":3,"file":"XyprissTempDir.js","sources":["../../../../../src/plugins/const/XyprissTempDir.ts"],"sourcesContent":[null],"names":["getSysApi","getRandomBytes"],"mappings":";;;;;AAIA;;;;AAIG;SACa,iBAAiB,GAAA;AAC7B,IAAA,MAAM,GAAG,GAAGA,mBAAS,EAAE;AACvB,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC;AACpE;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,EAAqB,EAAA;AACtD,IAAA,MAAM,GAAG,GAAGA,mBAAS,EAAE;AACvB,IAAA,MAAM,IAAI,GAAG,iBAAiB,EAAE;AAEhC,IAAA,MAAM,OAAO,GACT,OAAO,EAAE,KAAK;AACV,UAAE;AACF,UAAE,EAAE,CAAC,QAAQ,CAAC,GAAG;cACb,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;AAC5C,cAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGxB,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI;AACnC,UAAE;UACA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AAClC,IAAA,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;;IAGlE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;AAChC,QAAA,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnD;AAEA,IAAA,OAAO,cAAc;AACzB;AAEA;;;;;;;;;AASG;AACH,IAAI,cAAc,GAAkB,IAAI;AAExC;;;;;;;AAOG;SACa,mBAAmB,GAAA;AAC/B,IAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AACzB,QAAA,OAAO,cAAc;IACzB;AAEA,IAAA,MAAM,GAAG,GAAGA,mBAAS,EAAE;AACvB,IAAA,MAAM,GAAG,GAAGC,8BAAc,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1D,IAAA,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC;AAEjE,IAAA,OAAO,cAAc;AACzB;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Lazy accessor for `localSysApi`.
|
|
5
|
+
*
|
|
6
|
+
* Deferred to call-time to break the circular initialization chain:
|
|
7
|
+
* `xhsc.ts` -> `PathApi` -> `XyprissTempDir` -> `xhsc` (localSysApi)
|
|
8
|
+
*/
|
|
9
|
+
function getSysApi() {
|
|
10
|
+
return require("../../xhsc").localSysApi;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
exports.getSysApi = getSysApi;
|
|
14
|
+
//# sourceMappingURL=getSysApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSysApi.js","sources":["../../../../../src/plugins/const/getSysApi.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;SACa,SAAS,GAAA;AACrB,IAAA,OAAQ,OAAO,CAAC,YAAY,CAAiC,CAAC,WAAW;AAC7E;;;;"}
|
|
@@ -1,128 +1,240 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var getSysApi = require('../plugins/const/getSysApi.js');
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* **Config Syntax Parser**
|
|
5
7
|
*
|
|
6
8
|
* Handles resolution of dynamic references in configuration files:
|
|
7
|
-
* - `$(env).KEY`
|
|
8
|
-
* - `$(pkg).path`
|
|
9
|
+
* - `$(env).KEY` / `&(env).KEY` : Environment variables
|
|
10
|
+
* - `$(pkg).path` / `&(pkg).path` : package.json properties (dot-notation)
|
|
11
|
+
* - `$(this).KEY` / `&(this).KEY` : Properties from the currently parsed object
|
|
12
|
+
* - `$(const).KEY` / `&(const).KEY` : Build-time constants injected at construction
|
|
13
|
+
* - `$(date).FMT` / `&(date).FMT` : Current date/time helpers (ISO, YEAR, MONTH, DAY, TS)
|
|
14
|
+
* - `$(file).path` / `&(file).path` : Synchronous file content (use for secrets, certs, etc.)
|
|
9
15
|
*/
|
|
16
|
+
// Valid reference types — extend here when adding new syntax.
|
|
17
|
+
const VALID_TYPES = new Set(["env", "pkg", "this", "const", "date", "file"]);
|
|
18
|
+
// Date format tokens supported by $(date).TOKEN
|
|
19
|
+
const DATE_TOKENS = {
|
|
20
|
+
ISO: () => new Date().toISOString(),
|
|
21
|
+
YEAR: () => String(new Date().getFullYear()),
|
|
22
|
+
MONTH: () => String(new Date().getMonth() + 1).padStart(2, "0"),
|
|
23
|
+
DAY: () => String(new Date().getDate()).padStart(2, "0"),
|
|
24
|
+
TS: () => String(Date.now()),
|
|
25
|
+
TIME: () => new Date().toTimeString().split(" ")[0], // HH:MM:SS
|
|
26
|
+
};
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Parser
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
10
30
|
class ConfigSyntaxParser {
|
|
11
|
-
constructor(packageJson = null, envProvider = null) {
|
|
31
|
+
constructor(packageJson = null, envProvider = null, constants = {}, options = {}) {
|
|
12
32
|
this.packageJson = packageJson;
|
|
13
33
|
this.envProvider = envProvider;
|
|
34
|
+
this.constants = constants;
|
|
35
|
+
// LRU-style cache for getDeepValue on the same object reference
|
|
36
|
+
this.deepValueCache = new WeakMap();
|
|
37
|
+
this.fileBasePath = options.fileBasePath ?? process.cwd();
|
|
38
|
+
this.maxPasses = options.maxPasses ?? 20;
|
|
14
39
|
}
|
|
40
|
+
// -------------------------------------------------------------------------
|
|
41
|
+
// Public API — signatures intentionally unchanged
|
|
42
|
+
// -------------------------------------------------------------------------
|
|
15
43
|
/**
|
|
16
44
|
* Resolves all dynamic references in a configuration object or string.
|
|
45
|
+
* Non-string/array/object values are returned as-is.
|
|
17
46
|
*/
|
|
18
|
-
resolve(obj) {
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
47
|
+
resolve(obj, rootObj) {
|
|
48
|
+
if (rootObj === undefined)
|
|
49
|
+
rootObj = obj;
|
|
50
|
+
if (typeof obj === "string")
|
|
51
|
+
return this.resolveString(obj, rootObj);
|
|
52
|
+
if (Array.isArray(obj))
|
|
53
|
+
return obj.map((item) => this.resolve(item, rootObj));
|
|
54
|
+
if (typeof obj === "object" && obj !== null) {
|
|
26
55
|
const resolved = {};
|
|
27
|
-
for (const key
|
|
28
|
-
const resolvedKey = this.resolve(key);
|
|
29
|
-
resolved[resolvedKey] = this.resolve(obj[key]);
|
|
56
|
+
for (const key of Object.keys(obj)) {
|
|
57
|
+
const resolvedKey = String(this.resolve(key, rootObj));
|
|
58
|
+
resolved[resolvedKey] = this.resolve(obj[key], rootObj);
|
|
30
59
|
}
|
|
31
60
|
return resolved;
|
|
32
61
|
}
|
|
33
|
-
return obj;
|
|
62
|
+
return obj; // number, boolean, null, undefined — pass through untouched
|
|
34
63
|
}
|
|
64
|
+
// -------------------------------------------------------------------------
|
|
65
|
+
// Core resolution
|
|
66
|
+
// -------------------------------------------------------------------------
|
|
35
67
|
/**
|
|
36
|
-
* Resolves dynamic references in a string.
|
|
68
|
+
* Resolves dynamic references in a string, supporting chained || fallbacks.
|
|
37
69
|
*/
|
|
38
|
-
resolveString(value) {
|
|
70
|
+
resolveString(value, rootObj) {
|
|
71
|
+
// Matches: $(type).key || $(type).key || literal-fallback
|
|
72
|
+
// Group 1 — prefix ($ or &)
|
|
73
|
+
// Group 2 — type
|
|
74
|
+
// Group 3 — key/path
|
|
75
|
+
// Group 4 — remainder of the || chain
|
|
76
|
+
const chainRegex = /([$&])\(([\w]+)\)\.([\w\d_./-]+)((?:\s*\|\|\s*(?:[$&]\((?:[\w]+)\)\.[\w\d_./-]+|[^|,]+))*)/g;
|
|
39
77
|
let result = value;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const chainRegex = /([\$\&])\((env|pkg)\)\.([\w\d_.-]+)((?:\s*\|\|\s*(?:[\$\&]\((?:env|pkg)\)\.[\w\d_.-]+|[^|,]+))*)/g;
|
|
46
|
-
while (true) {
|
|
47
|
-
const lastResult = result;
|
|
78
|
+
let passes = 0;
|
|
79
|
+
while (passes++ < this.maxPasses) {
|
|
80
|
+
const prev = result;
|
|
81
|
+
// Reset regex before each pass (global flag keeps lastIndex)
|
|
82
|
+
chainRegex.lastIndex = 0;
|
|
48
83
|
result = result.replace(chainRegex, (_match, _prefix, type, key, chain) => {
|
|
49
|
-
const val = this.getValue(type, key);
|
|
84
|
+
const val = this.getValue(type, key, rootObj);
|
|
50
85
|
if (val !== undefined)
|
|
51
86
|
return val;
|
|
52
87
|
if (chain) {
|
|
53
|
-
//
|
|
88
|
+
// Strip leading " || " and let the next pass handle it
|
|
54
89
|
return chain.replace(/^\s*\|\|\s*/, "");
|
|
55
90
|
}
|
|
56
|
-
throw new Error(
|
|
57
|
-
? 'Environment variable'
|
|
58
|
-
: 'Property'} "${key}" not found${type === "pkg" ? " in package.json" : ""}`);
|
|
91
|
+
throw new Error(this.buildMissingError(type, key));
|
|
59
92
|
});
|
|
60
|
-
if (result ===
|
|
93
|
+
if (result === prev)
|
|
61
94
|
break;
|
|
62
95
|
}
|
|
63
|
-
|
|
96
|
+
if (passes > this.maxPasses) {
|
|
97
|
+
throw new Error(`ESYNC: Resolution did not stabilise after ${this.maxPasses} passes in "${value}". ` +
|
|
98
|
+
`Possible circular reference.`);
|
|
99
|
+
}
|
|
64
100
|
this.validateSyntax(result);
|
|
65
101
|
return result;
|
|
66
102
|
}
|
|
103
|
+
// -------------------------------------------------------------------------
|
|
104
|
+
// Value retrieval
|
|
105
|
+
// -------------------------------------------------------------------------
|
|
67
106
|
/**
|
|
68
|
-
*
|
|
107
|
+
* Dispatches value retrieval to the appropriate provider.
|
|
69
108
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
throw new Error(`ESYNC: Malformed syntax "${full}". Missing dot separator after type (e.g., $(env).KEY).`);
|
|
87
|
-
}
|
|
88
|
-
if (!key) {
|
|
89
|
-
throw new Error(`ESYNC: Malformed syntax "${full}". Missing key or property path in "${full}".`);
|
|
90
|
-
}
|
|
109
|
+
getValue(type, key, rootObj) {
|
|
110
|
+
switch (type) {
|
|
111
|
+
case "env":
|
|
112
|
+
return this.getEnv(key);
|
|
113
|
+
case "pkg":
|
|
114
|
+
return this.getPkg(key);
|
|
115
|
+
case "this":
|
|
116
|
+
return this.getThis(key, rootObj);
|
|
117
|
+
case "const":
|
|
118
|
+
return this.getConst(key);
|
|
119
|
+
case "date":
|
|
120
|
+
return this.getDate(key);
|
|
121
|
+
case "file":
|
|
122
|
+
return this.getFile(key);
|
|
123
|
+
default:
|
|
124
|
+
return undefined; // validateSyntax will catch this
|
|
91
125
|
}
|
|
92
|
-
// Catch-all for other malformed markers
|
|
93
|
-
throw new Error(`ESYNC: Invalid or malformed injection syntax detected in "${value}"`);
|
|
94
126
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
127
|
+
getEnv(key) {
|
|
128
|
+
return this.envProvider?.has(key)
|
|
129
|
+
? this.envProvider.get(key)
|
|
130
|
+
: undefined;
|
|
131
|
+
}
|
|
132
|
+
getPkg(key) {
|
|
133
|
+
if (!this.packageJson)
|
|
134
|
+
return undefined;
|
|
135
|
+
const val = this.getDeepValue(this.packageJson, key);
|
|
136
|
+
return val !== undefined ? String(val) : undefined;
|
|
137
|
+
}
|
|
138
|
+
getThis(key, rootObj) {
|
|
139
|
+
if (rootObj === null || typeof rootObj !== "object")
|
|
140
|
+
return undefined;
|
|
141
|
+
const val = this.getDeepValue(rootObj, key);
|
|
142
|
+
return val !== undefined ? String(val) : undefined;
|
|
143
|
+
}
|
|
144
|
+
getConst(key) {
|
|
145
|
+
return Object.prototype.hasOwnProperty.call(this.constants, key)
|
|
146
|
+
? this.constants[key]
|
|
147
|
+
: undefined;
|
|
148
|
+
}
|
|
149
|
+
getDate(token) {
|
|
150
|
+
const upper = token.toUpperCase();
|
|
151
|
+
return DATE_TOKENS[upper]?.();
|
|
152
|
+
// Unknown date tokens fall through to the error handler
|
|
153
|
+
}
|
|
154
|
+
getFile(filePath) {
|
|
155
|
+
try {
|
|
156
|
+
const sys = getSysApi.getSysApi();
|
|
157
|
+
const resolved = sys.path.isAbsolute(filePath)
|
|
158
|
+
? filePath
|
|
159
|
+
: sys.path.resolve(this.fileBasePath, filePath);
|
|
160
|
+
return sys.fs.readFileSync(resolved, "utf8").trim();
|
|
103
161
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
? this.getDeepValue(this.packageJson, key)
|
|
107
|
-
: undefined;
|
|
108
|
-
return val !== undefined ? String(val) : undefined;
|
|
162
|
+
catch {
|
|
163
|
+
return undefined; // triggers fallback chain or missing-key error
|
|
109
164
|
}
|
|
110
165
|
}
|
|
166
|
+
// -------------------------------------------------------------------------
|
|
167
|
+
// Deep value with caching
|
|
168
|
+
// -------------------------------------------------------------------------
|
|
111
169
|
/**
|
|
112
170
|
* Retrieves a value from a nested object using dot notation.
|
|
171
|
+
* Results are cached per object reference to avoid repeated traversal.
|
|
113
172
|
*/
|
|
114
173
|
getDeepValue(obj, path) {
|
|
115
|
-
|
|
116
|
-
|
|
174
|
+
// Check cache
|
|
175
|
+
let pathMap = this.deepValueCache.get(obj);
|
|
176
|
+
if (pathMap?.has(path))
|
|
177
|
+
return pathMap.get(path);
|
|
117
178
|
const parts = path.split(".");
|
|
118
179
|
let current = obj;
|
|
119
180
|
for (const part of parts) {
|
|
120
|
-
if (current === null || typeof current !== "object")
|
|
121
|
-
|
|
181
|
+
if (current === null || typeof current !== "object") {
|
|
182
|
+
current = undefined;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
122
185
|
current = current[part];
|
|
123
186
|
}
|
|
187
|
+
// Store in cache
|
|
188
|
+
if (!pathMap) {
|
|
189
|
+
pathMap = new Map();
|
|
190
|
+
this.deepValueCache.set(obj, pathMap);
|
|
191
|
+
}
|
|
192
|
+
pathMap.set(path, current);
|
|
124
193
|
return current;
|
|
125
194
|
}
|
|
195
|
+
// -------------------------------------------------------------------------
|
|
196
|
+
// Validation
|
|
197
|
+
// -------------------------------------------------------------------------
|
|
198
|
+
/**
|
|
199
|
+
* Validates that no unresolved or malformed markers remain in the string.
|
|
200
|
+
*/
|
|
201
|
+
validateSyntax(value) {
|
|
202
|
+
if (!/[$&]\(/.test(value))
|
|
203
|
+
return;
|
|
204
|
+
const malformedRegex = /([$&])\(([^)]*)\)(\.?)([\w\d_./-]*)/g;
|
|
205
|
+
let match;
|
|
206
|
+
while ((match = malformedRegex.exec(value)) !== null) {
|
|
207
|
+
const [full, _prefix, type, dot, key] = match;
|
|
208
|
+
if (!VALID_TYPES.has(type)) {
|
|
209
|
+
throw new Error(`ESYNC: Invalid reference type "(${type})" in "${full}". ` +
|
|
210
|
+
`Valid types: ${[...VALID_TYPES].join(", ")}. ` +
|
|
211
|
+
`See https://github.com/Nehonix-Team/XyPriss/blob/master/docs/config/configuration.md`);
|
|
212
|
+
}
|
|
213
|
+
if (dot !== ".") {
|
|
214
|
+
throw new Error(`ESYNC: Malformed syntax "${full}". Missing dot separator after type (e.g., $(env).KEY).`);
|
|
215
|
+
}
|
|
216
|
+
if (!key) {
|
|
217
|
+
throw new Error(`ESYNC: Malformed syntax "${full}". Missing key or property path.`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Catch-all
|
|
221
|
+
throw new Error(`ESYNC: Invalid or malformed injection syntax detected in "${value}".`);
|
|
222
|
+
}
|
|
223
|
+
// -------------------------------------------------------------------------
|
|
224
|
+
// Error formatting
|
|
225
|
+
// -------------------------------------------------------------------------
|
|
226
|
+
buildMissingError(type, key) {
|
|
227
|
+
const descriptions = {
|
|
228
|
+
env: `Environment variable "${key}"`,
|
|
229
|
+
pkg: `Property "${key}" in package.json`,
|
|
230
|
+
this: `Property "${key}" in current object`,
|
|
231
|
+
const: `Constant "${key}"`,
|
|
232
|
+
date: `Date token "${key}" (valid: ${Object.keys(DATE_TOKENS).join(", ")})`,
|
|
233
|
+
file: `File "${key}"`,
|
|
234
|
+
};
|
|
235
|
+
const desc = descriptions[type] ?? `Reference "${key}" (type: ${type})`;
|
|
236
|
+
return `EDYNC: ${desc} not found or could not be resolved.`;
|
|
237
|
+
}
|
|
126
238
|
}
|
|
127
239
|
|
|
128
240
|
exports.ConfigSyntaxParser = ConfigSyntaxParser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":["getSysApi"],"mappings":";;;;AAAA;;;;;;;;;;AAUG;AAoBH;AACA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5E;AACA,MAAM,WAAW,GAAiC;IAC9C,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,IAAA,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,KAAK,EAAE,MAAM,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC/D,IAAA,GAAG,EAAE,MAAM,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACxD,EAAE,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC5B,IAAA,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACtD;AAED;AACA;AACA;MAEa,kBAAkB,CAAA;IAU3B,WAAA,CACqB,WAAA,GAAuB,IAAI,EAC3B,WAAA,GAAkC,IAAI,EACtC,SAAA,GAAoC,EAAE,EACvD,OAAA,GAAqC,EAAE,EAAA;QAHtB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,SAAS,GAAT,SAAS;;AARb,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAG1C;QAQC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE;QACzD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE;IAC5C;;;;AAMA;;;AAGG;IACI,OAAO,CAAC,GAAY,EAAE,OAAiB,EAAA;QAC1C,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,GAAG,GAAG;QAExC,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC;AACpE,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAClB,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;YACzC,MAAM,QAAQ,GAA4B,EAAE;YAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAa,CAAC,EAAE;AAC1C,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACtD,gBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAC/B,GAA+B,CAAC,GAAG,CAAC,EACrC,OAAO,CACV;YACL;AACA,YAAA,OAAO,QAAQ;QACnB;QAEA,OAAO,GAAG,CAAC;IACf;;;;AAMA;;AAEG;IACK,aAAa,CAAC,KAAa,EAAE,OAAgB,EAAA;;;;;;QAMjD,MAAM,UAAU,GACZ,6FAA6F;QAEjG,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,MAAM,GAAG,CAAC;AAEd,QAAA,OAAO,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,MAAM,IAAI,GAAG,MAAM;;AAGnB,YAAA,UAAU,CAAC,SAAS,GAAG,CAAC;AAExB,YAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CACnB,UAAU,EACV,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,KAAI;AAClC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC;gBAC7C,IAAI,GAAG,KAAK,SAAS;AAAE,oBAAA,OAAO,GAAG;gBAEjC,IAAI,KAAK,EAAE;;oBAEP,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;gBAC3C;AAEA,gBAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACtD,YAAA,CAAC,CACJ;YAED,IAAI,MAAM,KAAK,IAAI;gBAAE;QACzB;AAEA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YACzB,MAAM,IAAI,KAAK,CACX,CAAA,0CAAA,EAA6C,IAAI,CAAC,SAAS,CAAA,YAAA,EAAe,KAAK,CAAA,GAAA,CAAK;AAChF,gBAAA,CAAA,4BAAA,CAA8B,CACrC;QACL;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC3B,QAAA,OAAO,MAAM;IACjB;;;;AAMA;;AAEG;AACK,IAAA,QAAQ,CACZ,IAAY,EACZ,GAAW,EACX,OAAgB,EAAA;QAEhB,QAAQ,IAAI;AACR,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3B,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3B,YAAA,KAAK,MAAM;gBACP,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;AACrC,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC7B,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5B,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5B,YAAA;gBACI,OAAO,SAAS,CAAC;;IAE7B;AAEQ,IAAA,MAAM,CAAC,GAAW,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG;cAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG;cACxB,SAAS;IACnB;AAEQ,IAAA,MAAM,CAAC,GAAW,EAAA;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,SAAS;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAqB,EAAE,GAAG,CAAC;AAC9D,QAAA,OAAO,GAAG,KAAK,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IACtD;IAEQ,OAAO,CAAC,GAAW,EAAE,OAAgB,EAAA;AACzC,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;AAAE,YAAA,OAAO,SAAS;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAiB,EAAE,GAAG,CAAC;AACrD,QAAA,OAAO,GAAG,KAAK,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IACtD;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;AACxB,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG;AAC3D,cAAE,IAAI,CAAC,SAAS,CAAC,GAAG;cAClB,SAAS;IACnB;AAEQ,IAAA,OAAO,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;AACjC,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI;;IAEjC;AAEQ,IAAA,OAAO,CAAC,QAAgB,EAAA;AAC5B,QAAA,IAAI;AACA,YAAA,MAAM,GAAG,GAAGA,mBAAS,EAAE;YACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ;AACzC,kBAAE;AACF,kBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;AACnD,YAAA,OAAO,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;QACvD;AAAE,QAAA,MAAM;YACJ,OAAO,SAAS,CAAC;QACrB;IACJ;;;;AAMA;;;AAGG;IACK,YAAY,CAAC,GAAW,EAAE,IAAY,EAAA;;QAE1C,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7B,IAAI,OAAO,GAAY,GAAG;AAE1B,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBACjD,OAAO,GAAG,SAAS;gBACnB;YACJ;AACA,YAAA,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC;QACxD;;QAGA,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,GAAG,IAAI,GAAG,EAAE;YACnB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QACzC;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AAE1B,QAAA,OAAO,OAAO;IAClB;;;;AAMA;;AAEG;AACK,IAAA,cAAc,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE;QAE3B,MAAM,cAAc,GAAG,sCAAsC;AAC7D,QAAA,IAAI,KAA6B;AAEjC,QAAA,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;AAClD,YAAA,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK;YAE7C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxB,gBAAA,MAAM,IAAI,KAAK,CACX,mCAAmC,IAAI,CAAA,OAAA,EAAU,IAAI,CAAA,GAAA,CAAK;oBACtD,CAAA,aAAA,EAAgB,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI;AAC/C,oBAAA,CAAA,oFAAA,CAAsF,CAC7F;YACL;AACA,YAAA,IAAI,GAAG,KAAK,GAAG,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CACX,4BAA4B,IAAI,CAAA,uDAAA,CAAyD,CAC5F;YACL;YACA,IAAI,CAAC,GAAG,EAAE;AACN,gBAAA,MAAM,IAAI,KAAK,CACX,4BAA4B,IAAI,CAAA,gCAAA,CAAkC,CACrE;YACL;QACJ;;AAGA,QAAA,MAAM,IAAI,KAAK,CACX,6DAA6D,KAAK,CAAA,EAAA,CAAI,CACzE;IACL;;;;IAMQ,iBAAiB,CAAC,IAAY,EAAE,GAAW,EAAA;AAC/C,QAAA,MAAM,YAAY,GAA2B;YACzC,GAAG,EAAE,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAA,CAAG;YACpC,GAAG,EAAE,CAAA,UAAA,EAAa,GAAG,CAAA,iBAAA,CAAmB;YACxC,IAAI,EAAE,CAAA,UAAA,EAAa,GAAG,CAAA,mBAAA,CAAqB;YAC3C,KAAK,EAAE,CAAA,UAAA,EAAa,GAAG,CAAA,CAAA,CAAG;AAC1B,YAAA,IAAI,EAAE,CAAA,YAAA,EAAe,GAAG,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;YAC3E,IAAI,EAAE,CAAA,MAAA,EAAS,GAAG,CAAA,CAAA,CAAG;SACxB;AACD,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAA,WAAA,EAAc,GAAG,CAAA,SAAA,EAAY,IAAI,CAAA,CAAA,CAAG;QACvE,OAAO,CAAA,OAAA,EAAU,IAAI,CAAA,oCAAA,CAAsC;IAC/D;AACH;;;;"}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { getRandomBytes } from 'xypriss-security';
|
|
2
|
+
import { getSysApi } from './getSysApi.js';
|
|
2
3
|
|
|
3
|
-
/**
|
|
4
|
-
* Lazy accessor for `localSysApi`.
|
|
5
|
-
*
|
|
6
|
-
* Deferred to call-time to break the circular initialization chain:
|
|
7
|
-
* `xhsc.ts` -> `PathApi` -> `XyprissTempDir` -> `xhsc` (localSysApi)
|
|
8
|
-
*/
|
|
9
|
-
function getSysApi() {
|
|
10
|
-
return require("../../xhsc").localSysApi;
|
|
11
|
-
}
|
|
12
4
|
/**
|
|
13
5
|
* Returns the absolute path to the XyPriss shared temp directory.
|
|
14
6
|
*
|
|
@@ -72,5 +64,5 @@ function generateXUserTmpDir() {
|
|
|
72
64
|
return _sessionTmpDir;
|
|
73
65
|
}
|
|
74
66
|
|
|
75
|
-
export { createXyprissTempDir, generateXUserTmpDir,
|
|
67
|
+
export { createXyprissTempDir, generateXUserTmpDir, getXyprissTempDir };
|
|
76
68
|
//# sourceMappingURL=XyprissTempDir.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyprissTempDir.js","sources":["../../../../../src/plugins/const/XyprissTempDir.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"XyprissTempDir.js","sources":["../../../../../src/plugins/const/XyprissTempDir.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIA;;;;AAIG;SACa,iBAAiB,GAAA;AAC7B,IAAA,MAAM,GAAG,GAAG,SAAS,EAAE;AACvB,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC;AACpE;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,EAAqB,EAAA;AACtD,IAAA,MAAM,GAAG,GAAG,SAAS,EAAE;AACvB,IAAA,MAAM,IAAI,GAAG,iBAAiB,EAAE;AAEhC,IAAA,MAAM,OAAO,GACT,OAAO,EAAE,KAAK;AACV,UAAE;AACF,UAAE,EAAE,CAAC,QAAQ,CAAC,GAAG;cACb,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;AAC5C,cAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGxB,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI;AACnC,UAAE;UACA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AAClC,IAAA,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;;IAGlE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;AAChC,QAAA,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnD;AAEA,IAAA,OAAO,cAAc;AACzB;AAEA;;;;;;;;;AASG;AACH,IAAI,cAAc,GAAkB,IAAI;AAExC;;;;;;;AAOG;SACa,mBAAmB,GAAA;AAC/B,IAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AACzB,QAAA,OAAO,cAAc;IACzB;AAEA,IAAA,MAAM,GAAG,GAAG,SAAS,EAAE;AACvB,IAAA,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1D,IAAA,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC;AAEjE,IAAA,OAAO,cAAc;AACzB;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy accessor for `localSysApi`.
|
|
3
|
+
*
|
|
4
|
+
* Deferred to call-time to break the circular initialization chain:
|
|
5
|
+
* `xhsc.ts` -> `PathApi` -> `XyprissTempDir` -> `xhsc` (localSysApi)
|
|
6
|
+
*/
|
|
7
|
+
function getSysApi() {
|
|
8
|
+
return require("../../xhsc").localSysApi;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { getSysApi };
|
|
12
|
+
//# sourceMappingURL=getSysApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSysApi.js","sources":["../../../../../src/plugins/const/getSysApi.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;SACa,SAAS,GAAA;AACrB,IAAA,OAAQ,OAAO,CAAC,YAAY,CAAiC,CAAC,WAAW;AAC7E;;;;"}
|
|
@@ -1,126 +1,238 @@
|
|
|
1
|
+
import { getSysApi } from '../plugins/const/getSysApi.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* **Config Syntax Parser**
|
|
3
5
|
*
|
|
4
6
|
* Handles resolution of dynamic references in configuration files:
|
|
5
|
-
* - `$(env).KEY`
|
|
6
|
-
* - `$(pkg).path`
|
|
7
|
+
* - `$(env).KEY` / `&(env).KEY` : Environment variables
|
|
8
|
+
* - `$(pkg).path` / `&(pkg).path` : package.json properties (dot-notation)
|
|
9
|
+
* - `$(this).KEY` / `&(this).KEY` : Properties from the currently parsed object
|
|
10
|
+
* - `$(const).KEY` / `&(const).KEY` : Build-time constants injected at construction
|
|
11
|
+
* - `$(date).FMT` / `&(date).FMT` : Current date/time helpers (ISO, YEAR, MONTH, DAY, TS)
|
|
12
|
+
* - `$(file).path` / `&(file).path` : Synchronous file content (use for secrets, certs, etc.)
|
|
7
13
|
*/
|
|
14
|
+
// Valid reference types — extend here when adding new syntax.
|
|
15
|
+
const VALID_TYPES = new Set(["env", "pkg", "this", "const", "date", "file"]);
|
|
16
|
+
// Date format tokens supported by $(date).TOKEN
|
|
17
|
+
const DATE_TOKENS = {
|
|
18
|
+
ISO: () => new Date().toISOString(),
|
|
19
|
+
YEAR: () => String(new Date().getFullYear()),
|
|
20
|
+
MONTH: () => String(new Date().getMonth() + 1).padStart(2, "0"),
|
|
21
|
+
DAY: () => String(new Date().getDate()).padStart(2, "0"),
|
|
22
|
+
TS: () => String(Date.now()),
|
|
23
|
+
TIME: () => new Date().toTimeString().split(" ")[0], // HH:MM:SS
|
|
24
|
+
};
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Parser
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
8
28
|
class ConfigSyntaxParser {
|
|
9
|
-
constructor(packageJson = null, envProvider = null) {
|
|
29
|
+
constructor(packageJson = null, envProvider = null, constants = {}, options = {}) {
|
|
10
30
|
this.packageJson = packageJson;
|
|
11
31
|
this.envProvider = envProvider;
|
|
32
|
+
this.constants = constants;
|
|
33
|
+
// LRU-style cache for getDeepValue on the same object reference
|
|
34
|
+
this.deepValueCache = new WeakMap();
|
|
35
|
+
this.fileBasePath = options.fileBasePath ?? process.cwd();
|
|
36
|
+
this.maxPasses = options.maxPasses ?? 20;
|
|
12
37
|
}
|
|
38
|
+
// -------------------------------------------------------------------------
|
|
39
|
+
// Public API — signatures intentionally unchanged
|
|
40
|
+
// -------------------------------------------------------------------------
|
|
13
41
|
/**
|
|
14
42
|
* Resolves all dynamic references in a configuration object or string.
|
|
43
|
+
* Non-string/array/object values are returned as-is.
|
|
15
44
|
*/
|
|
16
|
-
resolve(obj) {
|
|
17
|
-
if (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
45
|
+
resolve(obj, rootObj) {
|
|
46
|
+
if (rootObj === undefined)
|
|
47
|
+
rootObj = obj;
|
|
48
|
+
if (typeof obj === "string")
|
|
49
|
+
return this.resolveString(obj, rootObj);
|
|
50
|
+
if (Array.isArray(obj))
|
|
51
|
+
return obj.map((item) => this.resolve(item, rootObj));
|
|
52
|
+
if (typeof obj === "object" && obj !== null) {
|
|
24
53
|
const resolved = {};
|
|
25
|
-
for (const key
|
|
26
|
-
const resolvedKey = this.resolve(key);
|
|
27
|
-
resolved[resolvedKey] = this.resolve(obj[key]);
|
|
54
|
+
for (const key of Object.keys(obj)) {
|
|
55
|
+
const resolvedKey = String(this.resolve(key, rootObj));
|
|
56
|
+
resolved[resolvedKey] = this.resolve(obj[key], rootObj);
|
|
28
57
|
}
|
|
29
58
|
return resolved;
|
|
30
59
|
}
|
|
31
|
-
return obj;
|
|
60
|
+
return obj; // number, boolean, null, undefined — pass through untouched
|
|
32
61
|
}
|
|
62
|
+
// -------------------------------------------------------------------------
|
|
63
|
+
// Core resolution
|
|
64
|
+
// -------------------------------------------------------------------------
|
|
33
65
|
/**
|
|
34
|
-
* Resolves dynamic references in a string.
|
|
66
|
+
* Resolves dynamic references in a string, supporting chained || fallbacks.
|
|
35
67
|
*/
|
|
36
|
-
resolveString(value) {
|
|
68
|
+
resolveString(value, rootObj) {
|
|
69
|
+
// Matches: $(type).key || $(type).key || literal-fallback
|
|
70
|
+
// Group 1 — prefix ($ or &)
|
|
71
|
+
// Group 2 — type
|
|
72
|
+
// Group 3 — key/path
|
|
73
|
+
// Group 4 — remainder of the || chain
|
|
74
|
+
const chainRegex = /([$&])\(([\w]+)\)\.([\w\d_./-]+)((?:\s*\|\|\s*(?:[$&]\((?:[\w]+)\)\.[\w\d_./-]+|[^|,]+))*)/g;
|
|
37
75
|
let result = value;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const chainRegex = /([\$\&])\((env|pkg)\)\.([\w\d_.-]+)((?:\s*\|\|\s*(?:[\$\&]\((?:env|pkg)\)\.[\w\d_.-]+|[^|,]+))*)/g;
|
|
44
|
-
while (true) {
|
|
45
|
-
const lastResult = result;
|
|
76
|
+
let passes = 0;
|
|
77
|
+
while (passes++ < this.maxPasses) {
|
|
78
|
+
const prev = result;
|
|
79
|
+
// Reset regex before each pass (global flag keeps lastIndex)
|
|
80
|
+
chainRegex.lastIndex = 0;
|
|
46
81
|
result = result.replace(chainRegex, (_match, _prefix, type, key, chain) => {
|
|
47
|
-
const val = this.getValue(type, key);
|
|
82
|
+
const val = this.getValue(type, key, rootObj);
|
|
48
83
|
if (val !== undefined)
|
|
49
84
|
return val;
|
|
50
85
|
if (chain) {
|
|
51
|
-
//
|
|
86
|
+
// Strip leading " || " and let the next pass handle it
|
|
52
87
|
return chain.replace(/^\s*\|\|\s*/, "");
|
|
53
88
|
}
|
|
54
|
-
throw new Error(
|
|
55
|
-
? 'Environment variable'
|
|
56
|
-
: 'Property'} "${key}" not found${type === "pkg" ? " in package.json" : ""}`);
|
|
89
|
+
throw new Error(this.buildMissingError(type, key));
|
|
57
90
|
});
|
|
58
|
-
if (result ===
|
|
91
|
+
if (result === prev)
|
|
59
92
|
break;
|
|
60
93
|
}
|
|
61
|
-
|
|
94
|
+
if (passes > this.maxPasses) {
|
|
95
|
+
throw new Error(`ESYNC: Resolution did not stabilise after ${this.maxPasses} passes in "${value}". ` +
|
|
96
|
+
`Possible circular reference.`);
|
|
97
|
+
}
|
|
62
98
|
this.validateSyntax(result);
|
|
63
99
|
return result;
|
|
64
100
|
}
|
|
101
|
+
// -------------------------------------------------------------------------
|
|
102
|
+
// Value retrieval
|
|
103
|
+
// -------------------------------------------------------------------------
|
|
65
104
|
/**
|
|
66
|
-
*
|
|
105
|
+
* Dispatches value retrieval to the appropriate provider.
|
|
67
106
|
*/
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
throw new Error(`ESYNC: Malformed syntax "${full}". Missing dot separator after type (e.g., $(env).KEY).`);
|
|
85
|
-
}
|
|
86
|
-
if (!key) {
|
|
87
|
-
throw new Error(`ESYNC: Malformed syntax "${full}". Missing key or property path in "${full}".`);
|
|
88
|
-
}
|
|
107
|
+
getValue(type, key, rootObj) {
|
|
108
|
+
switch (type) {
|
|
109
|
+
case "env":
|
|
110
|
+
return this.getEnv(key);
|
|
111
|
+
case "pkg":
|
|
112
|
+
return this.getPkg(key);
|
|
113
|
+
case "this":
|
|
114
|
+
return this.getThis(key, rootObj);
|
|
115
|
+
case "const":
|
|
116
|
+
return this.getConst(key);
|
|
117
|
+
case "date":
|
|
118
|
+
return this.getDate(key);
|
|
119
|
+
case "file":
|
|
120
|
+
return this.getFile(key);
|
|
121
|
+
default:
|
|
122
|
+
return undefined; // validateSyntax will catch this
|
|
89
123
|
}
|
|
90
|
-
// Catch-all for other malformed markers
|
|
91
|
-
throw new Error(`ESYNC: Invalid or malformed injection syntax detected in "${value}"`);
|
|
92
124
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
125
|
+
getEnv(key) {
|
|
126
|
+
return this.envProvider?.has(key)
|
|
127
|
+
? this.envProvider.get(key)
|
|
128
|
+
: undefined;
|
|
129
|
+
}
|
|
130
|
+
getPkg(key) {
|
|
131
|
+
if (!this.packageJson)
|
|
132
|
+
return undefined;
|
|
133
|
+
const val = this.getDeepValue(this.packageJson, key);
|
|
134
|
+
return val !== undefined ? String(val) : undefined;
|
|
135
|
+
}
|
|
136
|
+
getThis(key, rootObj) {
|
|
137
|
+
if (rootObj === null || typeof rootObj !== "object")
|
|
138
|
+
return undefined;
|
|
139
|
+
const val = this.getDeepValue(rootObj, key);
|
|
140
|
+
return val !== undefined ? String(val) : undefined;
|
|
141
|
+
}
|
|
142
|
+
getConst(key) {
|
|
143
|
+
return Object.prototype.hasOwnProperty.call(this.constants, key)
|
|
144
|
+
? this.constants[key]
|
|
145
|
+
: undefined;
|
|
146
|
+
}
|
|
147
|
+
getDate(token) {
|
|
148
|
+
const upper = token.toUpperCase();
|
|
149
|
+
return DATE_TOKENS[upper]?.();
|
|
150
|
+
// Unknown date tokens fall through to the error handler
|
|
151
|
+
}
|
|
152
|
+
getFile(filePath) {
|
|
153
|
+
try {
|
|
154
|
+
const sys = getSysApi();
|
|
155
|
+
const resolved = sys.path.isAbsolute(filePath)
|
|
156
|
+
? filePath
|
|
157
|
+
: sys.path.resolve(this.fileBasePath, filePath);
|
|
158
|
+
return sys.fs.readFileSync(resolved, "utf8").trim();
|
|
101
159
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
? this.getDeepValue(this.packageJson, key)
|
|
105
|
-
: undefined;
|
|
106
|
-
return val !== undefined ? String(val) : undefined;
|
|
160
|
+
catch {
|
|
161
|
+
return undefined; // triggers fallback chain or missing-key error
|
|
107
162
|
}
|
|
108
163
|
}
|
|
164
|
+
// -------------------------------------------------------------------------
|
|
165
|
+
// Deep value with caching
|
|
166
|
+
// -------------------------------------------------------------------------
|
|
109
167
|
/**
|
|
110
168
|
* Retrieves a value from a nested object using dot notation.
|
|
169
|
+
* Results are cached per object reference to avoid repeated traversal.
|
|
111
170
|
*/
|
|
112
171
|
getDeepValue(obj, path) {
|
|
113
|
-
|
|
114
|
-
|
|
172
|
+
// Check cache
|
|
173
|
+
let pathMap = this.deepValueCache.get(obj);
|
|
174
|
+
if (pathMap?.has(path))
|
|
175
|
+
return pathMap.get(path);
|
|
115
176
|
const parts = path.split(".");
|
|
116
177
|
let current = obj;
|
|
117
178
|
for (const part of parts) {
|
|
118
|
-
if (current === null || typeof current !== "object")
|
|
119
|
-
|
|
179
|
+
if (current === null || typeof current !== "object") {
|
|
180
|
+
current = undefined;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
120
183
|
current = current[part];
|
|
121
184
|
}
|
|
185
|
+
// Store in cache
|
|
186
|
+
if (!pathMap) {
|
|
187
|
+
pathMap = new Map();
|
|
188
|
+
this.deepValueCache.set(obj, pathMap);
|
|
189
|
+
}
|
|
190
|
+
pathMap.set(path, current);
|
|
122
191
|
return current;
|
|
123
192
|
}
|
|
193
|
+
// -------------------------------------------------------------------------
|
|
194
|
+
// Validation
|
|
195
|
+
// -------------------------------------------------------------------------
|
|
196
|
+
/**
|
|
197
|
+
* Validates that no unresolved or malformed markers remain in the string.
|
|
198
|
+
*/
|
|
199
|
+
validateSyntax(value) {
|
|
200
|
+
if (!/[$&]\(/.test(value))
|
|
201
|
+
return;
|
|
202
|
+
const malformedRegex = /([$&])\(([^)]*)\)(\.?)([\w\d_./-]*)/g;
|
|
203
|
+
let match;
|
|
204
|
+
while ((match = malformedRegex.exec(value)) !== null) {
|
|
205
|
+
const [full, _prefix, type, dot, key] = match;
|
|
206
|
+
if (!VALID_TYPES.has(type)) {
|
|
207
|
+
throw new Error(`ESYNC: Invalid reference type "(${type})" in "${full}". ` +
|
|
208
|
+
`Valid types: ${[...VALID_TYPES].join(", ")}. ` +
|
|
209
|
+
`See https://github.com/Nehonix-Team/XyPriss/blob/master/docs/config/configuration.md`);
|
|
210
|
+
}
|
|
211
|
+
if (dot !== ".") {
|
|
212
|
+
throw new Error(`ESYNC: Malformed syntax "${full}". Missing dot separator after type (e.g., $(env).KEY).`);
|
|
213
|
+
}
|
|
214
|
+
if (!key) {
|
|
215
|
+
throw new Error(`ESYNC: Malformed syntax "${full}". Missing key or property path.`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Catch-all
|
|
219
|
+
throw new Error(`ESYNC: Invalid or malformed injection syntax detected in "${value}".`);
|
|
220
|
+
}
|
|
221
|
+
// -------------------------------------------------------------------------
|
|
222
|
+
// Error formatting
|
|
223
|
+
// -------------------------------------------------------------------------
|
|
224
|
+
buildMissingError(type, key) {
|
|
225
|
+
const descriptions = {
|
|
226
|
+
env: `Environment variable "${key}"`,
|
|
227
|
+
pkg: `Property "${key}" in package.json`,
|
|
228
|
+
this: `Property "${key}" in current object`,
|
|
229
|
+
const: `Constant "${key}"`,
|
|
230
|
+
date: `Date token "${key}" (valid: ${Object.keys(DATE_TOKENS).join(", ")})`,
|
|
231
|
+
file: `File "${key}"`,
|
|
232
|
+
};
|
|
233
|
+
const desc = descriptions[type] ?? `Reference "${key}" (type: ${type})`;
|
|
234
|
+
return `EDYNC: ${desc} not found or could not be resolved.`;
|
|
235
|
+
}
|
|
124
236
|
}
|
|
125
237
|
|
|
126
238
|
export { ConfigSyntaxParser };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED