xypriss 9.10.8 → 9.10.9
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.
|
@@ -13,8 +13,6 @@ var getSysApi = require('../plugins/const/getSysApi.js');
|
|
|
13
13
|
* - `&(date).FMT` : Current date/time helpers (ISO, YEAR, MONTH, DAY, TS)
|
|
14
14
|
* - `&(file).path` : Synchronous file content (use for secrets, certs, etc.)
|
|
15
15
|
*/
|
|
16
|
-
// Valid reference types — extend here when adding new syntax.
|
|
17
|
-
const VALID_TYPES = new Set(["env", "pkg", "this", "const", "date", "file"]);
|
|
18
16
|
// Date format tokens supported by &(date).TOKEN
|
|
19
17
|
const DATE_TOKENS = {
|
|
20
18
|
ISO: () => new Date().toISOString(),
|
|
@@ -74,14 +72,19 @@ class ConfigSyntaxParser {
|
|
|
74
72
|
// Group 1 — type
|
|
75
73
|
// Group 2 — key/path
|
|
76
74
|
// Group 3 — remainder of the || chain
|
|
77
|
-
|
|
75
|
+
// Separate simple types (env, const, date) from complex types (pkg, this, file)
|
|
76
|
+
// to prevent over-matching separators like '.' or '-' in strings.
|
|
77
|
+
const chainRegex = /&\((env|const|date)\)\.([\w\d_$]+)((?:\s*\|\|\s*(?:&\((?:[\w]+)\)\.[\w\d_./$]+(?:-[\w\d_./$]+)*|[^|,]+))*)|&\((pkg|this|file)\)\.([\w\d_/$][\w\d_./$]*(?:-[\w\d_./$]+)*)((?:\s*\|\|\s*(?:&\((?:[\w]+)\)\.[\w\d_./$]+(?:-[\w\d_./$]+)*|[^|,]+))*)/g;
|
|
78
78
|
let result = value;
|
|
79
79
|
let passes = 0;
|
|
80
80
|
while (passes++ < this.maxPasses) {
|
|
81
81
|
const prev = result;
|
|
82
82
|
// Reset regex before each pass (global flag keeps lastIndex)
|
|
83
83
|
chainRegex.lastIndex = 0;
|
|
84
|
-
result = result.replace(chainRegex, (_match,
|
|
84
|
+
result = result.replace(chainRegex, (_match, type1, key1, chain1, type2, key2, chain2) => {
|
|
85
|
+
const type = type1 || type2;
|
|
86
|
+
const key = key1 || key2;
|
|
87
|
+
const chain = chain1 || chain2;
|
|
85
88
|
const val = this.getValue(type, key, rootObj);
|
|
86
89
|
if (val !== undefined)
|
|
87
90
|
return val;
|
|
@@ -115,8 +118,6 @@ class ConfigSyntaxParser {
|
|
|
115
118
|
return this.getPkg(key);
|
|
116
119
|
case "this":
|
|
117
120
|
return this.getThis(key, rootObj);
|
|
118
|
-
case "const":
|
|
119
|
-
return this.getConst(key);
|
|
120
121
|
case "date":
|
|
121
122
|
return this.getDate(key);
|
|
122
123
|
case "file":
|
|
@@ -142,11 +143,6 @@ class ConfigSyntaxParser {
|
|
|
142
143
|
const val = this.getDeepValue(rootObj, key);
|
|
143
144
|
return val !== undefined ? String(val) : undefined;
|
|
144
145
|
}
|
|
145
|
-
getConst(key) {
|
|
146
|
-
return Object.prototype.hasOwnProperty.call(this.constants, key)
|
|
147
|
-
? this.constants[key]
|
|
148
|
-
: undefined;
|
|
149
|
-
}
|
|
150
146
|
getDate(token) {
|
|
151
147
|
const upper = token.toUpperCase();
|
|
152
148
|
return DATE_TOKENS[upper]?.();
|
|
@@ -155,10 +151,13 @@ class ConfigSyntaxParser {
|
|
|
155
151
|
getFile(filePath) {
|
|
156
152
|
try {
|
|
157
153
|
const sys = getSysApi.getSysApi();
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
154
|
+
// In XyPriss config, a leading / is often intended as project-root relative
|
|
155
|
+
// especially when the separator dot consumes the '.' of './path'
|
|
156
|
+
const cleanPath = filePath.startsWith("/") ? filePath.substring(1) : filePath;
|
|
157
|
+
const resolved = sys.path.isAbsolute(cleanPath)
|
|
158
|
+
? cleanPath
|
|
159
|
+
: sys.path.resolve(this.fileBasePath, cleanPath);
|
|
160
|
+
return sys.fs.readSync(resolved).trim();
|
|
162
161
|
}
|
|
163
162
|
catch {
|
|
164
163
|
return undefined; // triggers fallback chain or missing-key error
|
|
@@ -202,17 +201,15 @@ class ConfigSyntaxParser {
|
|
|
202
201
|
validateSyntax(value) {
|
|
203
202
|
if (!/&\(/.test(value))
|
|
204
203
|
return;
|
|
205
|
-
const malformedRegex = /&\((
|
|
204
|
+
const malformedRegex = /&\((env|const|date)\)\.([\w\d_$]+)?|&\((pkg|this|file)\)\.([\w\d_/$][\w\d_./$]*(?:-[\w\d_./$]+)*)?/g;
|
|
206
205
|
let match;
|
|
207
206
|
while ((match = malformedRegex.exec(value)) !== null) {
|
|
208
|
-
const [full,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
if (dot !== ".") {
|
|
215
|
-
throw new Error(`ESYNC: Malformed syntax "${full}". Missing dot separator after type (e.g., &(env).KEY).`);
|
|
207
|
+
const [full, type1, key1, type2, key2] = match;
|
|
208
|
+
const type = type1 || type2;
|
|
209
|
+
const key = key1 || key2;
|
|
210
|
+
if (!type) {
|
|
211
|
+
// This shouldn't happen with the current regex, but safety first
|
|
212
|
+
throw new Error(`ESYNC: Invalid or malformed injection syntax detected in "${full}".`);
|
|
216
213
|
}
|
|
217
214
|
if (!key) {
|
|
218
215
|
throw new Error(`ESYNC: Malformed syntax "${full}". Missing key or property path.`);
|
|
@@ -232,7 +229,6 @@ class ConfigSyntaxParser {
|
|
|
232
229
|
env: `Environment variable "${key}"`,
|
|
233
230
|
pkg: `Property "${key}" in package.json`,
|
|
234
231
|
this: `Property "${key}" in current object`,
|
|
235
|
-
const: `Constant "${key}"`,
|
|
236
232
|
date: `Date token "${key}" (valid: ${Object.keys(DATE_TOKENS).join(", ")})`,
|
|
237
233
|
file: `File "${key}"`,
|
|
238
234
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":["getSysApi"],"mappings":";;;;AAAA;;;;;;;;;;AAUG;
|
|
1
|
+
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":["getSysApi"],"mappings":"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"}
|
|
@@ -11,8 +11,6 @@ import { getSysApi } from '../plugins/const/getSysApi.js';
|
|
|
11
11
|
* - `&(date).FMT` : Current date/time helpers (ISO, YEAR, MONTH, DAY, TS)
|
|
12
12
|
* - `&(file).path` : Synchronous file content (use for secrets, certs, etc.)
|
|
13
13
|
*/
|
|
14
|
-
// Valid reference types — extend here when adding new syntax.
|
|
15
|
-
const VALID_TYPES = new Set(["env", "pkg", "this", "const", "date", "file"]);
|
|
16
14
|
// Date format tokens supported by &(date).TOKEN
|
|
17
15
|
const DATE_TOKENS = {
|
|
18
16
|
ISO: () => new Date().toISOString(),
|
|
@@ -72,14 +70,19 @@ class ConfigSyntaxParser {
|
|
|
72
70
|
// Group 1 — type
|
|
73
71
|
// Group 2 — key/path
|
|
74
72
|
// Group 3 — remainder of the || chain
|
|
75
|
-
|
|
73
|
+
// Separate simple types (env, const, date) from complex types (pkg, this, file)
|
|
74
|
+
// to prevent over-matching separators like '.' or '-' in strings.
|
|
75
|
+
const chainRegex = /&\((env|const|date)\)\.([\w\d_$]+)((?:\s*\|\|\s*(?:&\((?:[\w]+)\)\.[\w\d_./$]+(?:-[\w\d_./$]+)*|[^|,]+))*)|&\((pkg|this|file)\)\.([\w\d_/$][\w\d_./$]*(?:-[\w\d_./$]+)*)((?:\s*\|\|\s*(?:&\((?:[\w]+)\)\.[\w\d_./$]+(?:-[\w\d_./$]+)*|[^|,]+))*)/g;
|
|
76
76
|
let result = value;
|
|
77
77
|
let passes = 0;
|
|
78
78
|
while (passes++ < this.maxPasses) {
|
|
79
79
|
const prev = result;
|
|
80
80
|
// Reset regex before each pass (global flag keeps lastIndex)
|
|
81
81
|
chainRegex.lastIndex = 0;
|
|
82
|
-
result = result.replace(chainRegex, (_match,
|
|
82
|
+
result = result.replace(chainRegex, (_match, type1, key1, chain1, type2, key2, chain2) => {
|
|
83
|
+
const type = type1 || type2;
|
|
84
|
+
const key = key1 || key2;
|
|
85
|
+
const chain = chain1 || chain2;
|
|
83
86
|
const val = this.getValue(type, key, rootObj);
|
|
84
87
|
if (val !== undefined)
|
|
85
88
|
return val;
|
|
@@ -113,8 +116,6 @@ class ConfigSyntaxParser {
|
|
|
113
116
|
return this.getPkg(key);
|
|
114
117
|
case "this":
|
|
115
118
|
return this.getThis(key, rootObj);
|
|
116
|
-
case "const":
|
|
117
|
-
return this.getConst(key);
|
|
118
119
|
case "date":
|
|
119
120
|
return this.getDate(key);
|
|
120
121
|
case "file":
|
|
@@ -140,11 +141,6 @@ class ConfigSyntaxParser {
|
|
|
140
141
|
const val = this.getDeepValue(rootObj, key);
|
|
141
142
|
return val !== undefined ? String(val) : undefined;
|
|
142
143
|
}
|
|
143
|
-
getConst(key) {
|
|
144
|
-
return Object.prototype.hasOwnProperty.call(this.constants, key)
|
|
145
|
-
? this.constants[key]
|
|
146
|
-
: undefined;
|
|
147
|
-
}
|
|
148
144
|
getDate(token) {
|
|
149
145
|
const upper = token.toUpperCase();
|
|
150
146
|
return DATE_TOKENS[upper]?.();
|
|
@@ -153,10 +149,13 @@ class ConfigSyntaxParser {
|
|
|
153
149
|
getFile(filePath) {
|
|
154
150
|
try {
|
|
155
151
|
const sys = getSysApi();
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
152
|
+
// In XyPriss config, a leading / is often intended as project-root relative
|
|
153
|
+
// especially when the separator dot consumes the '.' of './path'
|
|
154
|
+
const cleanPath = filePath.startsWith("/") ? filePath.substring(1) : filePath;
|
|
155
|
+
const resolved = sys.path.isAbsolute(cleanPath)
|
|
156
|
+
? cleanPath
|
|
157
|
+
: sys.path.resolve(this.fileBasePath, cleanPath);
|
|
158
|
+
return sys.fs.readSync(resolved).trim();
|
|
160
159
|
}
|
|
161
160
|
catch {
|
|
162
161
|
return undefined; // triggers fallback chain or missing-key error
|
|
@@ -200,17 +199,15 @@ class ConfigSyntaxParser {
|
|
|
200
199
|
validateSyntax(value) {
|
|
201
200
|
if (!/&\(/.test(value))
|
|
202
201
|
return;
|
|
203
|
-
const malformedRegex = /&\((
|
|
202
|
+
const malformedRegex = /&\((env|const|date)\)\.([\w\d_$]+)?|&\((pkg|this|file)\)\.([\w\d_/$][\w\d_./$]*(?:-[\w\d_./$]+)*)?/g;
|
|
204
203
|
let match;
|
|
205
204
|
while ((match = malformedRegex.exec(value)) !== null) {
|
|
206
|
-
const [full,
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (dot !== ".") {
|
|
213
|
-
throw new Error(`ESYNC: Malformed syntax "${full}". Missing dot separator after type (e.g., &(env).KEY).`);
|
|
205
|
+
const [full, type1, key1, type2, key2] = match;
|
|
206
|
+
const type = type1 || type2;
|
|
207
|
+
const key = key1 || key2;
|
|
208
|
+
if (!type) {
|
|
209
|
+
// This shouldn't happen with the current regex, but safety first
|
|
210
|
+
throw new Error(`ESYNC: Invalid or malformed injection syntax detected in "${full}".`);
|
|
214
211
|
}
|
|
215
212
|
if (!key) {
|
|
216
213
|
throw new Error(`ESYNC: Malformed syntax "${full}". Missing key or property path.`);
|
|
@@ -230,7 +227,6 @@ class ConfigSyntaxParser {
|
|
|
230
227
|
env: `Environment variable "${key}"`,
|
|
231
228
|
pkg: `Property "${key}" in package.json`,
|
|
232
229
|
this: `Property "${key}" in current object`,
|
|
233
|
-
const: `Constant "${key}"`,
|
|
234
230
|
date: `Date token "${key}" (valid: ${Object.keys(DATE_TOKENS).join(", ")})`,
|
|
235
231
|
file: `File "${key}"`,
|
|
236
232
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;;;;;;AAUG;
|
|
1
|
+
{"version":3,"file":"ConfigSyntaxParser.js","sources":["../../../../src/utils/ConfigSyntaxParser.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED