@env-spec/parser 0.2.0 → 0.3.0
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/{chunk-CPCMOU6E.js → chunk-CHM43IJO.js} +44 -10
- package/dist/chunk-CHM43IJO.js.map +1 -0
- package/dist/{chunk-XRNR4FE7.mjs → chunk-RRVAHNIY.mjs} +44 -11
- package/dist/chunk-RRVAHNIY.mjs.map +1 -0
- package/dist/{classes-DHueAliY.d.mts → classes-CgmCxTZQ.d.mts} +31 -13
- package/dist/{classes-DHueAliY.d.ts → classes-CgmCxTZQ.d.ts} +31 -13
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +609 -470
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +464 -329
- package/dist/index.mjs.map +1 -1
- package/dist/simple-resolver.d.mts +1 -1
- package/dist/simple-resolver.d.ts +1 -1
- package/dist/simple-resolver.js +25 -14
- package/dist/simple-resolver.js.map +1 -1
- package/dist/simple-resolver.mjs +17 -6
- package/dist/simple-resolver.mjs.map +1 -1
- package/package.json +3 -2
- package/dist/chunk-CPCMOU6E.js.map +0 -1
- package/dist/chunk-XRNR4FE7.mjs.map +0 -1
|
@@ -72,6 +72,24 @@ var ParsedEnvSpecStaticValue = class {
|
|
|
72
72
|
return `${this.data.quote || ""}${strVal}${this.data.quote || ""}`;
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
|
+
var ParsedEnvSpecRegexLiteral = class {
|
|
76
|
+
constructor(data) {
|
|
77
|
+
this.data = data;
|
|
78
|
+
this.pattern = data.pattern;
|
|
79
|
+
this.flags = data.flags;
|
|
80
|
+
}
|
|
81
|
+
static {
|
|
82
|
+
__name(this, "ParsedEnvSpecRegexLiteral");
|
|
83
|
+
}
|
|
84
|
+
pattern;
|
|
85
|
+
flags;
|
|
86
|
+
get value() {
|
|
87
|
+
return new RegExp(this.pattern, this.flags);
|
|
88
|
+
}
|
|
89
|
+
toString() {
|
|
90
|
+
return this.data.rawValue;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
75
93
|
var ParsedEnvSpecKeyValuePair = class {
|
|
76
94
|
constructor(data) {
|
|
77
95
|
this.data = data;
|
|
@@ -102,13 +120,20 @@ var ParsedEnvSpecFunctionArgs = class {
|
|
|
102
120
|
get simplifiedValues() {
|
|
103
121
|
if (this.data.values.length === 0) return [];
|
|
104
122
|
const vals = this.data.values;
|
|
105
|
-
if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue)) {
|
|
123
|
+
if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue || i instanceof ParsedEnvSpecRegexLiteral)) {
|
|
106
124
|
return vals.map((val) => val.value);
|
|
107
125
|
} else if (vals.every((i) => i instanceof ParsedEnvSpecKeyValuePair)) {
|
|
108
126
|
const obj = {};
|
|
109
127
|
vals.forEach((val) => {
|
|
110
|
-
if (val.value instanceof
|
|
128
|
+
if (val.value instanceof ParsedEnvSpecRegexLiteral) {
|
|
111
129
|
obj[val.key] = val.value.value;
|
|
130
|
+
} else if (val.value instanceof ParsedEnvSpecStaticValue) {
|
|
131
|
+
obj[val.key] = val.value.value;
|
|
132
|
+
} else if (val.value instanceof ParsedEnvSpecFunctionCall && val.value.name === "regex") {
|
|
133
|
+
const args = val.value.simplifiedArgs;
|
|
134
|
+
if (typeof args[0] === "string") {
|
|
135
|
+
obj[val.key] = new RegExp(args[0]);
|
|
136
|
+
}
|
|
112
137
|
}
|
|
113
138
|
});
|
|
114
139
|
return obj;
|
|
@@ -145,6 +170,8 @@ var ParsedEnvSpecDecorator = class {
|
|
|
145
170
|
this.data = data;
|
|
146
171
|
if (!this.data.value) {
|
|
147
172
|
this.value = new ParsedEnvSpecStaticValue({ rawValue: true, isImplicit: true });
|
|
173
|
+
} else if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {
|
|
174
|
+
this.value = this.data.value;
|
|
148
175
|
} else {
|
|
149
176
|
const expanded = expand(this.data.value);
|
|
150
177
|
if (expanded instanceof ParsedEnvSpecKeyValuePair) {
|
|
@@ -279,13 +306,17 @@ var ParsedEnvSpecConfigItem = class {
|
|
|
279
306
|
constructor(data) {
|
|
280
307
|
this.data = data;
|
|
281
308
|
if (this.data.value) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
309
|
+
if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {
|
|
310
|
+
this.value = this.data.value;
|
|
311
|
+
} else {
|
|
312
|
+
const expanded = expand(this.data.value);
|
|
313
|
+
if (expanded instanceof ParsedEnvSpecKeyValuePair) {
|
|
314
|
+
throw new Error("Nested key-value pair found in config item");
|
|
315
|
+
} else if (expanded instanceof ParsedEnvSpecFunctionArgs) {
|
|
316
|
+
throw new Error("Top-level config item cannot be a bare function args");
|
|
317
|
+
}
|
|
318
|
+
this.value = expanded;
|
|
287
319
|
}
|
|
288
|
-
this.value = expanded;
|
|
289
320
|
}
|
|
290
321
|
}
|
|
291
322
|
static {
|
|
@@ -513,6 +544,8 @@ function expandHelper(val, expandStaticFn) {
|
|
|
513
544
|
key: val.key,
|
|
514
545
|
val: expandedVal
|
|
515
546
|
});
|
|
547
|
+
} else if (val instanceof ParsedEnvSpecRegexLiteral) {
|
|
548
|
+
return val;
|
|
516
549
|
} else if (val instanceof ParsedEnvSpecStaticValue) {
|
|
517
550
|
if (typeof val.value !== "string") return val;
|
|
518
551
|
if (val.data.quote === "'") return val;
|
|
@@ -541,8 +574,9 @@ exports.ParsedEnvSpecFile = ParsedEnvSpecFile;
|
|
|
541
574
|
exports.ParsedEnvSpecFunctionArgs = ParsedEnvSpecFunctionArgs;
|
|
542
575
|
exports.ParsedEnvSpecFunctionCall = ParsedEnvSpecFunctionCall;
|
|
543
576
|
exports.ParsedEnvSpecKeyValuePair = ParsedEnvSpecKeyValuePair;
|
|
577
|
+
exports.ParsedEnvSpecRegexLiteral = ParsedEnvSpecRegexLiteral;
|
|
544
578
|
exports.ParsedEnvSpecStaticValue = ParsedEnvSpecStaticValue;
|
|
545
579
|
exports.__name = __name;
|
|
546
580
|
exports.expand = expand;
|
|
547
|
-
//# sourceMappingURL=chunk-
|
|
548
|
-
//# sourceMappingURL=chunk-
|
|
581
|
+
//# sourceMappingURL=chunk-CHM43IJO.js.map
|
|
582
|
+
//# sourceMappingURL=chunk-CHM43IJO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/helpers.ts","../src/classes.ts","../src/expand.ts"],"names":[],"mappings":";;;;;;AAIA,IAAM,kBAAA,GAAqB,mCAAA;AAEpB,SAAS,WAAW,MAAA,EAAuD;AAChF,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,IAAA;AAC9B,EAAA,IAAI,MAAA,KAAW,SAAS,OAAO,KAAA;AAC/B,EAAA,IAAI,MAAA,KAAW,aAAa,OAAO,MAAA;AAInC,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,MAAM,CAAA,EAAG;AACnC,IAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AAIzB,IAAA,MAAM,YAAA,GAAe,OAAO,GAAG,CAAA;AAC/B,IAAA,IAAI,YAAA,KAAiB,QAAQ,OAAO,MAAA;AAGpC,IAAA,IAAI,MAAA,CAAO,UAAU,GAAG,CAAA,IAAK,CAAC,MAAA,CAAO,aAAA,CAAc,GAAG,CAAA,EAAG,OAAO,MAAA;AAChE,IAAA,IAAI,MAAM,MAAA,CAAO,gBAAA,IAAoB,GAAA,GAAM,MAAA,CAAO,kBAAkB,OAAO,MAAA;AAG3E,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAvBgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACHT,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAAmB,IAAA,EAIhB;AAJgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAIf;AAAA,EARN;AAGkC,IAAA,MAAA,CAAA,IAAA,EAAA,sBAAA,CAAA;AAAA;AAAA,EAOhC,QAAA,GAAW;AACT,IAAA,OAAO,CAAA,CAAA,EAAI,KAAK,IAAA,CAAK,YAAA,IAAgB,EAAE,CAAA,EAAG,IAAA,CAAK,KAAK,QAAQ,CAAA,CAAA;AAAA,EAC9D;AACF;AAEO,IAAM,2BAAN,MAA+B;AAAA,EAGpC,YAAmB,IAAA,EAKhB;AALgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAMjB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AAEf,MAAA,IAAI,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,EAAU;AACrC,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AAEnC,QAAA,IAAI,OAAA,KAAY,EAAA,EAAI,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,aAC5B,IAAA,CAAK,KAAA,GAAQ,UAAA,CAAW,OAAO,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AAAA,MACvC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAG,CAAC,CAAA;AAC3C,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAA,CACf,KAAA,CAAM,IAAA,CAAK,MAAM,MAAA,EAAQ,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAC/C,UAAA,CAAW,CAAA,EAAA,EAAK,SAAS,IAAI,SAAS,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAxCF;AAesC,IAAA,MAAA,CAAA,IAAA,EAAA,0BAAA,CAAA;AAAA;AAAA,EACpC,KAAA;AAAA,EA0BA,IAAI,cAAA,GAAiB;AACnB,IAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,SAAiB,IAAA,CAAK,KAAA;AAChD,IAAA,IAAI,YAAY,IAAA,CAAK,KAAA;AAErB,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,KAAU,GAAA,EAAK;AAC3B,MAAA,SAAA,GAAY,SAAA,CAAU,UAAA,CAAW,KAAA,EAAO,GAAG,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,KAAK,IAAA,CAAK,KAAA,KAAU,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,GAAA,EAAK;AACtD,MAAA,SAAA,GAAY,SAAA,CAAU,UAAA,CAAW,KAAA,EAAO,IAAI,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAW;AAGT,IAAA,IAAI,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC9B,IAAA,IAAI,IAAA,CAAK,KAAK,KAAA,EAAO;AACnB,MAAA,MAAA,GAAS,MAAA,CAAO,WAAW,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA,EAAG,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA,CAAA;AAAA,EAClE;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EAIrC,YAAmB,IAAA,EAKhB;AALgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAMjB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpB,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAAA,EACpB;AAAA,EA/EF;AAmEuC,IAAA,MAAA,CAAA,IAAA,EAAA,2BAAA,CAAA;AAAA;AAAA,EACrC,OAAA;AAAA,EACA,KAAA;AAAA,EAYA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAAA,EAC5C;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,KAAK,IAAA,CAAK,QAAA;AAAA,EACnB;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAAmB,IAAA,EAGhB;AAHgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAGf;AAAA,EA9FN;AA0FuC,IAAA,MAAA,CAAA,IAAA,EAAA,2BAAA,CAAA;AAAA;AAAA,EAMrC,IAAI,GAAA,GAAM;AACR,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,EACnB;AAAA,EAEA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,EACnB;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,CAAA,EAAG,KAAK,GAAG,CAAA,CAAA,EAAI,KAAK,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,CAAA;AAAA,EAChD;AACF;AACO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAAmB,IAAA,EAMhB;AANgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAMf;AAAA,EAnHN;AA4GuC,IAAA,MAAA,CAAA,IAAA,EAAA,2BAAA,CAAA;AAAA;AAAA,EASrC,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA;AAAA,EACnB;AAAA,EAEA,IAAI,gBAAA,GAAqD;AACvD,IAAA,IAAI,KAAK,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,CAAA,SAAU,EAAC;AAC3C,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,MAAA;AACvB,IAAA,IAAI,IAAA,CAAK,MAAM,CAAC,CAAA,KAAM,aAAa,wBAAA,IAA4B,CAAA,YAAa,yBAAyB,CAAA,EAAG;AACtG,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,KAAK,CAAA;AAAA,IACpC,WAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,YAAa,yBAAyB,CAAA,EAAG;AACpE,MAAA,MAAM,MAAM,EAAC;AACb,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACpB,QAAA,IAAI,GAAA,CAAI,iBAAiB,yBAAA,EAA2B;AAClD,UAAA,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,KAAA;AAAA,QAC3B,CAAA,MAAA,IAAW,GAAA,CAAI,KAAA,YAAiB,wBAAA,EAA0B;AACxD,UAAA,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,KAAA;AAAA,QAE3B,WAAW,GAAA,CAAI,KAAA,YAAiB,6BAA6B,GAAA,CAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAEvF,UAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAM,cAAA;AACvB,UAAA,IAAI,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,EAAU;AAC/B,YAAA,GAAA,CAAI,IAAI,GAAG,CAAA,GAAI,IAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,UACnC;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,IAAI,CAAA,GAAI,GAAA;AACR,IAAA,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAA,EAAU,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC5D,IAAA,CAAA,IAAK,GAAA;AACL,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAAmB,IAAA,EAIhB;AAJgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAIf;AAAA,EAjKN;AA4JuC,IAAA,MAAA,CAAA,IAAA,EAAA,2BAAA,CAAA;AAAA;AAAA,EAOrC,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA;AAAA,EACnB;AAAA,EACA,IAAI,cAAA,GAAiB;AACnB,IAAA,OAAO,IAAA,CAAK,KAAK,IAAA,CAAK,gBAAA;AAAA,EACxB;AAAA,EAEA,QAAA,GAAW;AAET,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAK,QAAA,EAAS;AAAA,EAClD;AACF;AAGO,IAAM,yBAAN,MAA6B;AAAA,EAIlC,YAAmB,IAAA,EAMhB;AANgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AASjB,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO;AACpB,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,wBAAA,CAAyB,EAAE,UAAU,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAAA,IAChF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,KAAA,YAAiB,yBAAA,EAA2B;AAE/D,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA;AAAA,IACzB,CAAA,MAAO;AAEL,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AACvC,MAAA,IAAI,oBAAoB,yBAAA,EAA2B;AACjD,QAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,MAClE;AACA,MAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,IACf;AAAA,EACF;AAAA,EA3MF;AAiLoC,IAAA,MAAA,CAAA,IAAA,EAAA,wBAAA,CAAA;AAAA;AAAA,EAClC,KAAA;AAAA,EA2BA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA;AAAA,EACnB;AAAA,EACA,IAAI,YAAA,GAAe;AACjB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,IAAA,CAAK,YAAA;AAAA,EACrB;AAAA,EACA,IAAI,UAAA,GAAa;AACf,IAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,KAAA,YAAiB,yBAAA,EAA2B;AACxE,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd;AAAA,EACF;AAAA,EAEA,IAAI,eAAA,GAAkB;AACpB,IAAA,IAAI,IAAA,CAAK,iBAAiB,wBAAA,EAA0B;AAClD,MAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,IACpB;AAAA,EACF;AAAA,EACA,QAAA,GAAW;AACT,IAAA,IAAI,CAAA,GAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA;AAE7B,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,EAAc,CAAA,IAAK,GAAA;AAE7B,IAAA,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAC9B,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAGO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAAmB,IAAA,EAIhB;AAJgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAIf;AAAA,EA/ON;AA0OkC,IAAA,MAAA,CAAA,IAAA,EAAA,sBAAA,CAAA;AAAA;AAAA,EAOhC,IAAI,QAAA,GAAW;AACb,IAAA,OAAO,KAAK,IAAA,CAAK,QAAA;AAAA,EACnB;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,CAAA,CAAA,EAAI,KAAK,IAAA,CAAK,YAAA,IAAgB,EAAE,CAAA,EAAG,IAAA,CAAK,KAAK,QAAQ,CAAA,CAAA;AAAA,EAC9D;AACF;AACO,IAAM,gCAAN,MAAoC;AAAA,EACzC,YAAmB,IAAA,EAKhB;AALgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAKf;AAAA,EA/PN;AAyP2C,IAAA,MAAA,CAAA,IAAA,EAAA,+BAAA,CAAA;AAAA;AAAA,EAQzC,IAAI,UAAA,GAAa;AACf,IAAA,OAAO,KAAK,IAAA,CAAK,UAAA;AAAA,EACnB;AAAA,EAEA,IAAI,WAAA,GAAc;AAChB,IAAA,OAAO,KAAK,IAAA,CAAK,WAAA;AAAA,EACnB;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,IAAI,CAAA,GAAI,GAAA;AACR,IAAA,CAAA,IAAK,IAAA,CAAK,KAAK,YAAA,IAAgB,EAAA;AAC/B,IAAA,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC3D,IAAA,IAAI,IAAA,CAAK,KAAK,WAAA,EAAa,CAAA,IAAK,IAAI,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,CAAA,CAAA;AACpE,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAEA,SAAS,oBACP,QAAA,EACA;AACA,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC5B,IAAA,IAAI,mBAAmB,6BAAA,EAA+B;AACpD,MAAA,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,KAAc;AACxC,QAAA,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,GAAI,SAAA;AAAA,MAC3B,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAZS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAcT,SAAS,mBACP,QAAA,EACA;AACA,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC5B,IAAA,IAAI,mBAAmB,6BAAA,EAA+B;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,OAAA,CAAQ,UAAU,CAAA;AAAA,IACnC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAVS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAYF,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAAmB,IAAA,EAIhB;AAJgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAIf;AAAA,EAjTN;AA4SuC,IAAA,MAAA,CAAA,IAAA,EAAA,2BAAA,CAAA;AAAA;AAAA,EAOrC,IAAI,QAAA,GAAW;AACb,IAAA,OAAO,KAAK,IAAA,CAAK,QAAA;AAAA,EACnB;AAAA,EAEA,IAAI,OAAA,GAAU;AACZ,IAAA,OAAO,IAAA,CAAK,KAAK,OAAA,IAAW,MAAA;AAAA,EAC9B;AAAA,EAEA,IAAI,gBAAA,GAAmB;AACrB,IAAA,OAAO,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC/C;AAAA,EACA,IAAI,eAAA,GAAkB;AACpB,IAAA,OAAO,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC9C;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,OAAO;AAAA,MACL,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,MACzD,GAAG,IAAA,CAAK,IAAA,CAAK,OAAA,GAAU,CAAC,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,CAAA,GAAI;AAAC,KAC3D,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AACF;AAEO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAAmB,IAAA,EAEhB;AAFgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAEf;AAAA,EA7UN;AA0UoC,IAAA,MAAA,CAAA,IAAA,EAAA,wBAAA,CAAA;AAAA;AAAA,EAKlC,QAAA,GAAW;AACT,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AAGO,IAAM,0BAAN,MAA8B;AAAA,EAGnC,YAAmB,IAAA,EAMhB;AANgB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAOjB,IAAA,IAAI,IAAA,CAAK,KAAK,KAAA,EAAO;AAEnB,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,YAAiB,yBAAA,EAA2B;AACxD,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAM,CAAA;AACxC,QAAA,IAAI,oBAAoB,yBAAA,EAA2B;AACjD,UAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,QAC9D,CAAA,MAAA,IAAW,oBAAoB,yBAAA,EAA2B;AACxD,UAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,QACxE;AACA,QAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EA7WF;AAqVqC,IAAA,MAAA,CAAA,IAAA,EAAA,yBAAA,CAAA;AAAA;AAAA,EACnC,KAAA;AAAA,EAyBA,IAAI,GAAA,GAAM;AACR,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,EACnB;AAAA,EAEA,IAAI,eAAA,GAAkB;AACpB,IAAA,OAAO,kBAAA,CAAmB,CAAC,GAAG,IAAA,CAAK,KAAK,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,EAC7E;AAAA,EAEA,IAAI,gBAAA,GAAmB;AACrB,IAAA,OAAO,mBAAA,CAAoB,CAAC,GAAG,IAAA,CAAK,KAAK,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,EAC9E;AAAA,EAEA,IAAI,WAAA,GAAc;AAChB,IAAA,MAAM,eAAA,GAAkB,KAAK,IAAA,CAAK,WAAA,CAAY,OAAO,CAAC,OAAA,KAAa,mBAAmB,oBAAqB,CAAA;AAC3G,IAAA,OAAO,eAAA,CAAgB,IAAI,CAAC,OAAA,KAAY,QAAQ,QAAQ,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,EACrE;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,IAAI,CAAA,GAAI,EAAA;AACR,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,IAAA,CAAK,WAAA,OAAkB,CAAA,EAAG,OAAA,CAAQ,UAAU;AAAA,CAAA;AACvE,IAAA,CAAA,IAAK,CAAA,EAAG,KAAK,GAAG,CAAA,CAAA,CAAA;AAChB,IAAA,IAAI,IAAA,CAAK,KAAK,KAAA,EAAO,CAAA,IAAK,GAAG,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA;AACvD,IAAA,IAAI,IAAA,CAAK,KAAK,WAAA,EAAa,CAAA,IAAK,IAAI,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,CAAA,CAAA;AACpE,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AASO,IAAM,oBAAN,MAAwB;AAAA,EAjZ/B;AAiZ+B,IAAA,MAAA,CAAA,IAAA,EAAA,mBAAA,CAAA;AAAA;AAAA,EAC7B,QAAA;AAAA,EACA,YAAY,SAAA,EAAyC;AACnD,IAAA,IAAA,CAAK,QAAA,GAAW,SAAA;AAAA,EAClB;AAAA,EAEA,IAAI,WAAA,GAAc;AAChB,IAAA,OAAO,KAAK,QAAA,CAAS,MAAA,CAAO,CAAC,IAAA,KAAS,gBAAgB,uBAAuB,CAAA;AAAA,EAC/E;AAAA;AAAA,EAEA,IAAI,YAAA,GAAe;AACjB,IAAA,MAAM,SAA2C,EAAC;AAClD,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,QAAA,EAAU;AAChC,MAAA,IAAI,gBAAgB,yBAAA,EAA2B;AAC7C,QAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MAClB,CAAA,MAAA,IAAW,IAAA,YAAgB,sBAAA,IAA0B,IAAA,YAAgB,oBAAA,EAAsB;AACzF,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAEA,IAAI,MAAA,GAAS;AACX,IAAA,MAAM,SAAS,IAAA,CAAK,YAAA;AACpB,IAAA,OAAO,OAAO,MAAA,GAAS,CAAA,GAAI,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA;AAAA,EACzD;AAAA,EACA,IAAI,gBAAA,GAAmB;AACrB,IAAA,MAAM,SAAS,EAAC;AAChB,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,YAAA,EAAc;AACrC,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,gBAAgB,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EACA,IAAI,eAAA,GAAkB;AACpB,IAAA,MAAM,SAAwC,EAAC;AAC/C,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,YAAA,EAAc;AACrC,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,KAAA,CAAM,eAAe,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,mBAAA,GAAsB;AACxB,IAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,IAAA,CAAK,YAAY,CAAA;AAChD,IAAA,OAAO,KAAK,QAAA,CAAS,MAAA;AAAA,MACnB,CAAC,IAAA,KACC,IAAA,YAAgB,6BAA6B,CAAC,cAAA,CAAe,IAAI,IAAI;AAAA,KAEzE;AAAA,EACF;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,QAAA,EAAU,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc;AACZ,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,QAAA,EAAU;AAChC,MAAA,IAAI,gBAAgB,uBAAA,EAAyB;AAC3C,QAAA,IAAI,IAAA,CAAK,iBAAiB,wBAAA,EAA0B;AAClD,UAAA,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA,CAAK,MAAM,KAAA,IAAS,EAAA;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;;;ACrdA,IAAM,0BAAA,GAA6B,sDAAA;AACnC,IAAM,uBAAA,GAA0B,oCAAA;AAChC,IAAM,iBAAA,GAAoB,gBAAA;AAG1B,SAAS,WAAA,CAAY,WAAqC,KAAA,EAAY;AACpE,EAAA,IAAI,OAAO,SAAA,CAAU,KAAA,KAAU,QAAA,EAAU,OAAO,SAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAA,CAAK,KAAA;AAC7B,EAAA,MAAM,WAAW,KAAA,IAAS,EAAA;AAE1B,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,SAAA;AAE1B,EAAA,MAAM,cAAc,KAAA,CAAM,IAAA,CAAK,UAAU,KAAA,CAAM,QAAA,CAAS,iBAAiB,CAAC,CAAA;AAG1E,EAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,SAAA;AAIrC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAE/B,IAAA,IAAI,SAAA,GAAY,MAAM,KAAA,EAAO;AAC3B,MAAA,MAAM,UAAU,SAAA,CAAU,KAAA,CAAM,KAAA,CAAM,SAAA,EAAW,MAAM,KAAK,CAAA;AAC5D,MAAA,KAAA,CAAM,IAAA,CAAK,IAAI,wBAAA,CAAyB,EAAE,UAAU,CAAA,EAAG,QAAQ,CAAA,EAAG,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,CAAC,CAAA;AAAA,IAClG;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK,IAAI,yBAAA,CAA0B;AAAA,MACvC,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,IAAI,yBAAA,CAA0B;AAAA,QAClC,MAAA,EAAQ,CAAC,IAAI,wBAAA,CAAyB,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,CAAC;AAAA,OAChG;AAAA,KACF,CAAC,CAAA;AACF,IAAA,SAAA,GAAY,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AAAA,EACrC;AAEA,EAAA,IAAI,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ;AACtC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAI,wBAAA,CAAyB,EAAE,UAAU,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,CAAC,CAAA;AAAA,EACnG;AAGA,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,MAAM,CAAC,CAAA;AAEtC,EAAA,OAAO,IAAI,yBAAA,CAA0B;AAAA,IACnC,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,IAAI,yBAAA,CAA0B;AAAA,MAClC,MAAA,EAAQ;AAAA,KACT;AAAA,GACF,CAAA;AACH;AAhDS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAkDT,SAAS,UAAA,CAAW,WAAqC,IAAA,EAA8B;AACrF,EAAA,IAAI,OAAO,SAAA,CAAU,KAAA,KAAU,QAAA,EAAU,OAAO,SAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAA,CAAK,KAAA;AAC7B,EAAA,MAAM,WAAW,KAAA,IAAS,EAAA;AAC1B,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,SAAA;AAE1B,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,SAAS,IAAA,KAAS,QAAA,GAAW,uBAAA,GAA0B,0BAA0B,CAAC,CAAA;AAChI,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,SAAA;AAEpC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAE9B,IAAA,IAAI,SAAA,GAAY,MAAM,KAAA,EAAO;AAC3B,MAAA,MAAM,UAAU,SAAA,CAAU,KAAA,CAAM,KAAA,CAAM,SAAA,EAAW,MAAM,KAAK,CAAA;AAC5D,MAAA,KAAA,CAAM,IAAA,CAAK,IAAI,wBAAA,CAAyB,EAAE,UAAU,CAAA,EAAG,QAAQ,CAAA,EAAG,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,CAAC,CAAA;AAAA,IAClG;AAGA,IAAA,MAAM,OAAA,GAAU,MAAM,CAAC,CAAA;AAEvB,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,SAAS,WAAA,EAAa;AAGxB,MAAkB,MAAM,CAAC,CAAA;AACzB,MAAA,UAAA,GAAa,MAAM,CAAC,CAAA;AAAA,IACtB;AACA,IAAA,MAAM,SAAA,GAAY,IAAI,yBAAA,CAA0B;AAAA,MAC9C,IAAA,EAAM,KAAA;AAAA,MACN,IAAA,EAAM,IAAI,yBAAA,CAA0B;AAAA,QAClC,MAAA,EAAQ,CAAC,IAAI,wBAAA,CAAyB,EAAE,QAAA,EAAU,OAAA,EAAS,CAAC;AAAA,OAC7D;AAAA,KACF,CAAA;AACD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,CAAM,IAAA,CAAK,IAAI,yBAAA,CAA0B;AAAA,QACvC,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM,IAAI,yBAAA,CAA0B;AAAA,UAClC,QAAQ,CAAC,SAAA,EAAW,IAAI,wBAAA,CAAyB,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,CAAA,EAAG,UAAU,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,CAAC;AAAA,SAC7G;AAAA,OACF,CAAC,CAAA;AAAA,IACJ,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,IACtB;AACA,IAAA,SAAA,GAAY,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AAAA,EACrC;AACA,EAAA,IAAI,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ;AACtC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAI,wBAAA,CAAyB,EAAE,UAAU,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,CAAC,CAAA;AAAA,EACnG;AAGA,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,MAAM,CAAC,CAAA;AAEtC,EAAA,OAAO,IAAI,yBAAA,CAA0B;AAAA,IACnC,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,IAAI,yBAAA,CAA0B;AAAA,MAClC,MAAA,EAAQ;AAAA,KACT;AAAA,GACF,CAAA;AACH;AA5DS,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAsET,SAAS,YAAA,CACP,KACA,cAAA,EACwB;AAExB,EAAA,IAAI,eAAe,yBAAA,EAA2B;AAC5C,IAAA,MAAM,SAAS,GAAA,CAAI,IAAA;AAEnB,IAAA,MAAM,gBAAgB,EAAC;AACvB,IAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM;AAClC,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,CAAA,EAAG,cAAc,CAAA;AAElD,MAAA,IACE,WAAW,QAAA,IACR,WAAA,YAAuB,yBAAA,IACvB,WAAA,CAAY,SAAS,QAAA,EACxB;AACA,QAAA,aAAA,CAAc,IAAA,CAAK,GAAG,WAAA,CAAY,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,MACpD,CAAA,MAAO;AACL,QAAA,aAAA,CAAc,KAAK,WAAW,CAAA;AAAA,MAChC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,IAAI,yBAAA,CAA0B;AAAA,MACnC,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,IAAI,yBAAA,CAA0B;AAAA,QAClC,MAAA,EAAQ,aAAA;AAAA,QACR,SAAA,EAAW,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK;AAAA,OAC/B,CAAA;AAAA,MACD,SAAA,EAAW,IAAI,IAAA,CAAK;AAAA,KACrB,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,eAAe,yBAAA,EAA2B;AAEnD,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,EAAG,cAAc,CAAC,CAAA;AAC1E,IAAA,OAAO,IAAI,yBAAA,CAA0B;AAAA,MACnC,MAAA,EAAQ,OAAA;AAAA,MACR,SAAA,EAAW,IAAI,IAAA,CAAK;AAAA,KACrB,CAAA;AAAA,EAEH,CAAA,MAAA,IAAW,eAAe,yBAAA,EAA2B;AACnD,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,CAAI,KAAA,EAAO,cAAc,CAAA;AAC1D,IAAA,IAAI,WAAA,YAAuB,yBAAA,EAA2B,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC7G,IAAA,OAAO,IAAI,yBAAA,CAA0B;AAAA,MACnC,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,eAAe,yBAAA,EAA2B;AAEnD,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,MAAA,IAAW,eAAe,wBAAA,EAA0B;AAIlD,IAAA,IAAI,OAAO,GAAA,CAAI,KAAA,KAAU,QAAA,EAAU,OAAO,GAAA;AAE1C,IAAA,IAAI,GAAA,CAAI,IAAA,CAAK,KAAA,KAAU,GAAA,EAAK,OAAO,GAAA;AAEnC,IAAA,OAAO,eAAe,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACtC;AA5DS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAkEF,SAAS,MAAA,CACd,KAEA,KAAA,EACwB;AAExB,EAAA,IAAI,WAAA,GAAc,GAAA;AAClB,EAAA,WAAA,GAAc,aAAa,WAAA,EAAa,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAC7D,EAAA,WAAA,GAAc,aAAa,WAAA,EAAa,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,QAAQ,CAAC,CAAA;AACtE,EAAA,WAAA,GAAc,aAAa,WAAA,EAAa,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,WAAW,CAAC,CAAA;AACzE,EAAA,OAAO,WAAA;AACT;AAXgB,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA","file":"chunk-CHM43IJO.js","sourcesContent":["// this regex helps avoid any weird numbers\n// - leading zeros\n// - scientific notation\n// - multiple decimal points\nconst VALID_NUMBER_REGEX = /^-?(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\n\nexport function autoCoerce(valStr: string): string | number | boolean | undefined {\n if (valStr === 'true') return true;\n if (valStr === 'false') return false;\n if (valStr === 'undefined') return undefined;\n // not handling `null` because its a JS specific thing... we'll try to avoid it altogether\n\n // the regex check filters out a lot of ambiguous/weird cases\n if (VALID_NUMBER_REGEX.test(valStr)) {\n const num = Number(valStr);\n\n // Check if we can convert back to a string without any changes\n // this could be loss in precision or just formatting (extra zeros)\n const backToString = String(num);\n if (backToString !== valStr) return valStr;\n\n // if numbers are too large, we'll leave them as strings\n if (Number.isInteger(num) && !Number.isSafeInteger(num)) return valStr;\n if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) return valStr;\n\n // otherwise we can return the number\n return num;\n }\n return valStr;\n}\n","import { expand } from './expand';\nimport { autoCoerce } from './helpers';\n\nexport class ParsedEnvSpecDivider {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\n\nexport class ParsedEnvSpecStaticValue {\n value: any;\n\n constructor(public data: {\n rawValue: any;\n quote?: '\"' | \"'\" | '`' | undefined;\n isImplicit?: boolean;\n _location?: any;\n }) {\n if (!data.quote) {\n // unquoted strings will get trimmed (leading/trailing spaces)\n if (typeof data.rawValue === 'string') {\n const trimmed = data.rawValue.trim();\n // trimmed empty string without quotes gets treated as undefined\n if (trimmed === '') this.value = undefined;\n else this.value = autoCoerce(trimmed);\n } else {\n this.value = autoCoerce(data.rawValue);\n }\n } else {\n const quoteChar = data.quote.substring(0, 1);\n this.value = data.rawValue\n .slice(data.quote.length, -1 * data.quote.length)\n .replaceAll(`\\\\${quoteChar}`, quoteChar);\n }\n }\n\n get unescapedValue() {\n if (typeof this.value !== 'string') return this.value;\n let unescaped = this.value;\n // replace escaped \"$\" (if not in single quotes)\n if (this.data.quote !== \"'\") {\n unescaped = unescaped.replaceAll('\\\\$', '$');\n }\n // replace escaped newlines (if not double quotes or backticks)\n if (this.data.quote === '\"' || this.data.quote === '`') {\n unescaped = unescaped.replaceAll('\\\\n', '\\n');\n }\n return unescaped;\n }\n\n toString() {\n // TODO: smarter logic to preserve the original value\n // for example with this logic, we may see 123.0 -> 123\n let strVal = String(this.value);\n if (this.data.quote) {\n strVal = strVal.replaceAll(this.data.quote, `\\\\${this.data.quote}`);\n }\n return `${this.data.quote || ''}${strVal}${this.data.quote || ''}`;\n }\n}\n\nexport class ParsedEnvSpecRegexLiteral {\n pattern: string;\n flags: string;\n\n constructor(public data: {\n rawValue: string;\n pattern: string;\n flags: string;\n _location?: any;\n }) {\n this.pattern = data.pattern;\n this.flags = data.flags;\n }\n\n get value(): RegExp {\n return new RegExp(this.pattern, this.flags);\n }\n\n toString() {\n return this.data.rawValue;\n }\n}\n\nexport class ParsedEnvSpecKeyValuePair {\n constructor(public data: {\n key: string;\n val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral,\n }) {}\n\n get key() {\n return this.data.key;\n }\n\n get value() {\n return this.data.val;\n }\n\n toString() {\n return `${this.key}=${this.data.val.toString()}`;\n }\n}\nexport class ParsedEnvSpecFunctionArgs {\n constructor(public data: {\n values: Array<\n ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall\n | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral\n >;\n _location?: any;\n }) {}\n\n get values() {\n return this.data.values;\n }\n\n get simplifiedValues(): Array<any> | Record<string, any> {\n if (this.data.values.length === 0) return [];\n const vals = this.data.values;\n if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue || i instanceof ParsedEnvSpecRegexLiteral)) {\n return vals.map((val) => val.value);\n } else if (vals.every((i) => i instanceof ParsedEnvSpecKeyValuePair)) {\n const obj = {} as Record<string, any>;\n vals.forEach((val) => {\n if (val.value instanceof ParsedEnvSpecRegexLiteral) {\n obj[val.key] = val.value.value;\n } else if (val.value instanceof ParsedEnvSpecStaticValue) {\n obj[val.key] = val.value.value;\n // eslint-disable-next-line no-use-before-define\n } else if (val.value instanceof ParsedEnvSpecFunctionCall && val.value.name === 'regex') {\n // Convert regex(\"pattern\") to a RegExp instance (deprecated, prefer /pattern/ literals)\n const args = val.value.simplifiedArgs as Array<any>;\n if (typeof args[0] === 'string') {\n obj[val.key] = new RegExp(args[0]);\n }\n }\n });\n return obj;\n } else {\n throw new Error('Invalid function args');\n }\n }\n\n toString() {\n let s = '(';\n s += this.data.values.map((val) => val.toString()).join(', ');\n s += ')';\n return s;\n }\n}\n\nexport class ParsedEnvSpecFunctionCall {\n constructor(public data: {\n name: string;\n args: ParsedEnvSpecFunctionArgs;\n _location?: any;\n }) {}\n\n get name() {\n return this.data.name;\n }\n get simplifiedArgs() {\n return this.data.args.simplifiedValues;\n }\n\n toString() {\n // args will include the `()`\n return this.data.name + this.data.args.toString();\n }\n}\n\n\nexport class ParsedEnvSpecDecorator {\n value?: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall\n | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral;\n\n constructor(public data: {\n name: string;\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall\n | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral | undefined;\n isBareFnCall?: boolean; // true if decorator is a bare fn call (eg: @import(...))\n _location?: any;\n }) {\n // bare decorator is equivalent to `@decorator=true`\n // `@required` === `@required=true`\n if (!this.data.value) {\n this.value = new ParsedEnvSpecStaticValue({ rawValue: true, isImplicit: true });\n } else if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {\n // regex literals don't need expansion\n this.value = this.data.value;\n } else {\n // process expansion -- triggers $ expansion (eg: \"${VAR}\" => `ref(VAR)`)/\n const expanded = expand(this.data.value);\n if (expanded instanceof ParsedEnvSpecKeyValuePair) {\n throw new Error('Unexpected key-value pair found in config item');\n }\n this.value = expanded;\n }\n }\n\n get name() {\n return this.data.name;\n }\n get isBareFnCall() {\n return !!this.data.isBareFnCall;\n }\n get bareFnArgs() {\n if (this.isBareFnCall && this.value instanceof ParsedEnvSpecFunctionArgs) {\n return this.value;\n }\n }\n\n get simplifiedValue() {\n if (this.value instanceof ParsedEnvSpecStaticValue) {\n return this.value.value;\n }\n }\n toString() {\n let s = `@${this.name}`;\n if (!this.data.value) return s; // bare decorator, ex: `@required`\n // bare fn call looks like `@import(asdf)` so no `=`\n if (!this.isBareFnCall) s += '=';\n // let the value stringify itself\n s += this.data.value.toString();\n return s;\n }\n}\n\n\nexport class ParsedEnvSpecComment {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n get contents() {\n return this.data.contents;\n }\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\nexport class ParsedEnvSpecDecoratorComment {\n constructor(public data: {\n decorators: Array<ParsedEnvSpecDecorator>;\n leadingSpace?: string;\n postComment?: any;\n _location?: any;\n }) {}\n\n get decorators() {\n return this.data.decorators;\n }\n\n get postComment() {\n return this.data.postComment;\n }\n\n toString() {\n let s = '#';\n s += this.data.leadingSpace || '';\n s += this.data.decorators.map((d) => d.toString()).join(' ');\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\nfunction getDecoratorsObject(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decObj = {} as Record<string, ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n comment.decorators.forEach((decorator) => {\n decObj[decorator.name] = decorator;\n });\n }\n });\n return decObj;\n}\n\nfunction getDecoratorsArray(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decArr = [] as Array<ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n decArr.push(...comment.decorators);\n }\n });\n return decArr;\n}\n\nexport class ParsedEnvSpecCommentBlock {\n constructor(public data: {\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n divider: ParsedEnvSpecDivider | null;\n _location?: any;\n }) {}\n\n get comments() {\n return this.data.comments;\n }\n\n get divider() {\n return this.data.divider || undefined;\n }\n\n get decoratorsObject() {\n return getDecoratorsObject(this.data.comments);\n }\n get decoratorsArray() {\n return getDecoratorsArray(this.data.comments);\n }\n\n toString() {\n return [\n ...this.data.comments.map((comment) => comment.toString()),\n ...this.data.divider ? [this.data.divider.toString()] : [],\n ].join('\\n');\n }\n}\n\nexport class ParsedEnvSpecBlankLine {\n constructor(public data: {\n _location?: any;\n }) {}\n\n toString() {\n return '';\n }\n}\n\n\nexport class ParsedEnvSpecConfigItem {\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;\n\n constructor(public data: {\n key: string;\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;\n preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;\n _location?: any;\n }) {\n if (this.data.value) {\n // regex literals don't need expansion\n if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {\n this.value = this.data.value;\n } else {\n const expanded = expand(this.data.value!);\n if (expanded instanceof ParsedEnvSpecKeyValuePair) {\n throw new Error('Nested key-value pair found in config item');\n } else if (expanded instanceof ParsedEnvSpecFunctionArgs) {\n throw new Error('Top-level config item cannot be a bare function args');\n }\n this.value = expanded;\n }\n }\n }\n\n get key() {\n return this.data.key;\n }\n\n get decoratorsArray() {\n return getDecoratorsArray([...this.data.preComments, this.data.postComment]);\n }\n\n get decoratorsObject() {\n return getDecoratorsObject([...this.data.preComments, this.data.postComment]);\n }\n\n get description() {\n const regularComments = this.data.preComments.filter((comment) => (comment instanceof ParsedEnvSpecComment));\n return regularComments.map((comment) => comment.contents).join('\\n');\n }\n\n toString() {\n let s = '';\n for (const comment of this.data.preComments) s += `${comment.toString()}\\n`;\n s += `${this.key}=`;\n if (this.data.value) s += `${this.data.value.toString()}`;\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\n// these are the 4 types that can be at the root level\ntype ParsedEnvSpecFileNode = ParsedEnvSpecCommentBlock\n | ParsedEnvSpecDivider\n | ParsedEnvSpecConfigItem\n | ParsedEnvSpecBlankLine;\n\n\nexport class ParsedEnvSpecFile {\n contents: Array<ParsedEnvSpecFileNode>;\n constructor(_contents: Array<ParsedEnvSpecFileNode>) {\n this.contents = _contents;\n }\n\n get configItems() {\n return this.contents.filter((item) => item instanceof ParsedEnvSpecConfigItem);\n }\n /** all comment blocks before the first config item (the \"header\" area) */\n get headerBlocks() {\n const blocks: Array<ParsedEnvSpecCommentBlock> = [];\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecCommentBlock) {\n blocks.push(item);\n } else if (item instanceof ParsedEnvSpecBlankLine || item instanceof ParsedEnvSpecDivider) {\n continue;\n } else {\n break; // hit a config item\n }\n }\n return blocks;\n }\n /** primary header block - the last comment block before the first config item */\n get header() {\n const blocks = this.headerBlocks;\n return blocks.length > 0 ? blocks[blocks.length - 1] : undefined;\n }\n get decoratorsObject() {\n const decObj = {} as Record<string, ParsedEnvSpecDecorator>;\n for (const block of this.headerBlocks) {\n Object.assign(decObj, block.decoratorsObject);\n }\n return decObj;\n }\n get decoratorsArray() {\n const decArr: Array<ParsedEnvSpecDecorator> = [];\n for (const block of this.headerBlocks) {\n decArr.push(...block.decoratorsArray);\n }\n return decArr;\n }\n\n /**\n * Comment blocks that are NOT part of the header and NOT attached to a config item.\n * Any decorators in these blocks are misplaced.\n */\n get orphanCommentBlocks() {\n const headerBlockSet = new Set(this.headerBlocks);\n return this.contents.filter(\n (item): item is ParsedEnvSpecCommentBlock => (\n item instanceof ParsedEnvSpecCommentBlock && !headerBlockSet.has(item)\n ),\n );\n }\n\n toString() {\n return this.contents.map((item) => item.toString()).join('\\n');\n }\n /**\n * simple helper to convert an object in a basic case\n * mostly useful for comparison with other env parsers\n * */\n toSimpleObj() {\n const obj = {} as Record<string, any>;\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecConfigItem) {\n if (item.value instanceof ParsedEnvSpecStaticValue) {\n obj[item.key] = item.value.value ?? '';\n }\n }\n }\n return obj;\n }\n}\n","import {\n ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair,\n ParsedEnvSpecRegexLiteral, ParsedEnvSpecStaticValue,\n} from './classes';\n\n// const EXPAND_VAR_REGEX_WITH_SIMPLE = /\\$({([a-zA-Z_][a-zA-Z0-9_.]*)}|([a-zA-Z_][a-zA-Z0-9_]*))/g;\nconst EXPAND_VAR_BRACKETED_REGEX = /(?<!\\\\)\\${([a-zA-Z_][a-zA-Z0-9_.]*)((:?-)([^}]+))?}/g;\nconst EXPAND_VAR_SIMPLE_REGEX = /(?<!\\\\)\\$([a-zA-Z_][a-zA-Z0-9_]*)/g;\nconst EXPAND_EXEC_REGEX = /\\$\\(([^)]+)\\)/g;\n\n\nfunction expandExecs(staticVal: ParsedEnvSpecStaticValue, _opts?: {}) {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n // single quoted strings are not expanded!\n if (quote === \"'\") return staticVal;\n\n const execMatches = Array.from(staticVal.value.matchAll(EXPAND_EXEC_REGEX));\n\n // if no matches - we just return the original value\n if (execMatches.length === 0) return staticVal;\n\n // otherwise, we expand the transform each match into `exec` fn calls\n // and return a concat with everything together\n let lastIndex = 0;\n const parts = [] as Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall>;\n for (const match of execMatches) {\n // extract text before exec -- ex: `pretext-$(exec command)`\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract exec command\n const shellCmd = match[1];\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'exec',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${shellCmd}${quoteStr}`, quote })],\n }),\n }));\n lastIndex = match.index + match[0].length;\n }\n // extract any remaining text after the last exec\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if there's only one part, we can just return it (ex: `VAR=$(whoami)`)\n if (parts.length === 1) return parts[0];\n // otherwise we concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\nfunction expandRefs(staticVal: ParsedEnvSpecStaticValue, mode: 'simple' | 'bracketed') {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n if (quote === \"'\") return staticVal;\n\n const varMatches = Array.from(staticVal.value.matchAll(mode === 'simple' ? EXPAND_VAR_SIMPLE_REGEX : EXPAND_VAR_BRACKETED_REGEX));\n if (varMatches.length === 0) return staticVal;\n\n let lastIndex = 0;\n const parts = [] as Array<any>;\n for (const match of varMatches) {\n // extract text before exec\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract var\n const varName = match[1];\n let defaultOperator: string | undefined; // ex: \":-\" or \"-\"\n let defaultVal: string | undefined; // currently not doing any fancy parsing on this, will just be a string\n if (mode === 'bracketed') {\n // TODO: do we want to support different behaviour based on the operator?\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n defaultOperator = match[3];\n defaultVal = match[4];\n }\n const refFnCall = new ParsedEnvSpecFunctionCall({\n name: 'ref',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: varName })],\n }),\n });\n if (defaultVal) {\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'fallback',\n args: new ParsedEnvSpecFunctionArgs({\n values: [refFnCall, new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${defaultVal}${quoteStr}`, quote })],\n }),\n }));\n } else {\n parts.push(refFnCall);\n }\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if only a single part, just return it (ex: `VAR=${OTHERVAR}`)\n if (parts.length === 1) return parts[0];\n // otherwise, concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\n\ntype ParsedEnvSpecValueNode = ParsedEnvSpecStaticValue\n| ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecKeyValuePair\n| ParsedEnvSpecRegexLiteral;\n\n/**\n * helper used by expansion to recursively expand values\n * */\nfunction expandHelper(\n val: ParsedEnvSpecValueNode,\n expandStaticFn: (staticVal: ParsedEnvSpecStaticValue) => ParsedEnvSpecValueNode,\n): ParsedEnvSpecValueNode {\n // if function call, expand each arg\n if (val instanceof ParsedEnvSpecFunctionCall) {\n const fnName = val.name;\n // expand each arg, and then flatten unnecessery nested concat fns\n const newConcatArgs = [] as Array<ParsedEnvSpecValueNode>;\n val.data.args.values.forEach((v) => {\n const expandedArg = expandHelper(v, expandStaticFn);\n // special case for concat so we flatten unnecessery nested concat fns\n if (\n fnName === 'concat'\n && expandedArg instanceof ParsedEnvSpecFunctionCall\n && expandedArg.name === 'concat'\n ) {\n newConcatArgs.push(...expandedArg.data.args.values);\n } else {\n newConcatArgs.push(expandedArg);\n }\n });\n\n return new ParsedEnvSpecFunctionCall({\n name: fnName,\n args: new ParsedEnvSpecFunctionArgs({\n values: newConcatArgs as any,\n _location: val.data.args.data._location,\n }),\n _location: val.data._location,\n });\n } else if (val instanceof ParsedEnvSpecFunctionArgs) {\n // expand each arg\n const newArgs = val.data.values.map((v) => expandHelper(v, expandStaticFn));\n return new ParsedEnvSpecFunctionArgs({\n values: newArgs as any,\n _location: val.data._location,\n });\n // if key-value pair, expand value\n } else if (val instanceof ParsedEnvSpecKeyValuePair) {\n const expandedVal = expandHelper(val.value, expandStaticFn);\n if (expandedVal instanceof ParsedEnvSpecKeyValuePair) throw new Error('Nested key-value pair found in concat');\n return new ParsedEnvSpecKeyValuePair({\n key: val.key,\n val: expandedVal as any,\n });\n } else if (val instanceof ParsedEnvSpecRegexLiteral) {\n // regex literals are never expanded\n return val;\n } else if (val instanceof ParsedEnvSpecStaticValue) {\n // here we actually do the expansion on string values\n\n // skip expansion if value is number/boolean/etc\n if (typeof val.value !== 'string') return val;\n // skip expansion on single-quoted strings\n if (val.data.quote === \"'\") return val;\n\n return expandStaticFn(val);\n }\n throw new Error('Unknown value type');\n}\n\n/**\n * takes in a value node and runs expansion (execs, refs) according to options\n * returns a new value node with all expansions applied\n * */\nexport function expand(\n val: ParsedEnvSpecValueNode,\n // TODO: add options to enable/disable specific expansion types and handling\n _opts?: {},\n): ParsedEnvSpecValueNode {\n // TODO: add options\n let expandedVal = val;\n expandedVal = expandHelper(expandedVal, (v) => expandExecs(v));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'simple'));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'bracketed'));\n return expandedVal;\n}\n"]}
|
|
@@ -70,6 +70,24 @@ var ParsedEnvSpecStaticValue = class {
|
|
|
70
70
|
return `${this.data.quote || ""}${strVal}${this.data.quote || ""}`;
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
|
+
var ParsedEnvSpecRegexLiteral = class {
|
|
74
|
+
constructor(data) {
|
|
75
|
+
this.data = data;
|
|
76
|
+
this.pattern = data.pattern;
|
|
77
|
+
this.flags = data.flags;
|
|
78
|
+
}
|
|
79
|
+
static {
|
|
80
|
+
__name(this, "ParsedEnvSpecRegexLiteral");
|
|
81
|
+
}
|
|
82
|
+
pattern;
|
|
83
|
+
flags;
|
|
84
|
+
get value() {
|
|
85
|
+
return new RegExp(this.pattern, this.flags);
|
|
86
|
+
}
|
|
87
|
+
toString() {
|
|
88
|
+
return this.data.rawValue;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
73
91
|
var ParsedEnvSpecKeyValuePair = class {
|
|
74
92
|
constructor(data) {
|
|
75
93
|
this.data = data;
|
|
@@ -100,13 +118,20 @@ var ParsedEnvSpecFunctionArgs = class {
|
|
|
100
118
|
get simplifiedValues() {
|
|
101
119
|
if (this.data.values.length === 0) return [];
|
|
102
120
|
const vals = this.data.values;
|
|
103
|
-
if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue)) {
|
|
121
|
+
if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue || i instanceof ParsedEnvSpecRegexLiteral)) {
|
|
104
122
|
return vals.map((val) => val.value);
|
|
105
123
|
} else if (vals.every((i) => i instanceof ParsedEnvSpecKeyValuePair)) {
|
|
106
124
|
const obj = {};
|
|
107
125
|
vals.forEach((val) => {
|
|
108
|
-
if (val.value instanceof
|
|
126
|
+
if (val.value instanceof ParsedEnvSpecRegexLiteral) {
|
|
109
127
|
obj[val.key] = val.value.value;
|
|
128
|
+
} else if (val.value instanceof ParsedEnvSpecStaticValue) {
|
|
129
|
+
obj[val.key] = val.value.value;
|
|
130
|
+
} else if (val.value instanceof ParsedEnvSpecFunctionCall && val.value.name === "regex") {
|
|
131
|
+
const args = val.value.simplifiedArgs;
|
|
132
|
+
if (typeof args[0] === "string") {
|
|
133
|
+
obj[val.key] = new RegExp(args[0]);
|
|
134
|
+
}
|
|
110
135
|
}
|
|
111
136
|
});
|
|
112
137
|
return obj;
|
|
@@ -143,6 +168,8 @@ var ParsedEnvSpecDecorator = class {
|
|
|
143
168
|
this.data = data;
|
|
144
169
|
if (!this.data.value) {
|
|
145
170
|
this.value = new ParsedEnvSpecStaticValue({ rawValue: true, isImplicit: true });
|
|
171
|
+
} else if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {
|
|
172
|
+
this.value = this.data.value;
|
|
146
173
|
} else {
|
|
147
174
|
const expanded = expand(this.data.value);
|
|
148
175
|
if (expanded instanceof ParsedEnvSpecKeyValuePair) {
|
|
@@ -277,13 +304,17 @@ var ParsedEnvSpecConfigItem = class {
|
|
|
277
304
|
constructor(data) {
|
|
278
305
|
this.data = data;
|
|
279
306
|
if (this.data.value) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
307
|
+
if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {
|
|
308
|
+
this.value = this.data.value;
|
|
309
|
+
} else {
|
|
310
|
+
const expanded = expand(this.data.value);
|
|
311
|
+
if (expanded instanceof ParsedEnvSpecKeyValuePair) {
|
|
312
|
+
throw new Error("Nested key-value pair found in config item");
|
|
313
|
+
} else if (expanded instanceof ParsedEnvSpecFunctionArgs) {
|
|
314
|
+
throw new Error("Top-level config item cannot be a bare function args");
|
|
315
|
+
}
|
|
316
|
+
this.value = expanded;
|
|
285
317
|
}
|
|
286
|
-
this.value = expanded;
|
|
287
318
|
}
|
|
288
319
|
}
|
|
289
320
|
static {
|
|
@@ -511,6 +542,8 @@ function expandHelper(val, expandStaticFn) {
|
|
|
511
542
|
key: val.key,
|
|
512
543
|
val: expandedVal
|
|
513
544
|
});
|
|
545
|
+
} else if (val instanceof ParsedEnvSpecRegexLiteral) {
|
|
546
|
+
return val;
|
|
514
547
|
} else if (val instanceof ParsedEnvSpecStaticValue) {
|
|
515
548
|
if (typeof val.value !== "string") return val;
|
|
516
549
|
if (val.data.quote === "'") return val;
|
|
@@ -528,6 +561,6 @@ function expand(val, _opts) {
|
|
|
528
561
|
}
|
|
529
562
|
__name(expand, "expand");
|
|
530
563
|
|
|
531
|
-
export { ParsedEnvSpecBlankLine, ParsedEnvSpecComment, ParsedEnvSpecCommentBlock, ParsedEnvSpecConfigItem, ParsedEnvSpecDecorator, ParsedEnvSpecDecoratorComment, ParsedEnvSpecDivider, ParsedEnvSpecFile, ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecStaticValue, __name, expand };
|
|
532
|
-
//# sourceMappingURL=chunk-
|
|
533
|
-
//# sourceMappingURL=chunk-
|
|
564
|
+
export { ParsedEnvSpecBlankLine, ParsedEnvSpecComment, ParsedEnvSpecCommentBlock, ParsedEnvSpecConfigItem, ParsedEnvSpecDecorator, ParsedEnvSpecDecoratorComment, ParsedEnvSpecDivider, ParsedEnvSpecFile, ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecRegexLiteral, ParsedEnvSpecStaticValue, __name, expand };
|
|
565
|
+
//# sourceMappingURL=chunk-RRVAHNIY.mjs.map
|
|
566
|
+
//# sourceMappingURL=chunk-RRVAHNIY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/helpers.ts","../src/classes.ts","../src/expand.ts"],"names":[],"mappings":"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","file":"chunk-RRVAHNIY.mjs","sourcesContent":["// this regex helps avoid any weird numbers\n// - leading zeros\n// - scientific notation\n// - multiple decimal points\nconst VALID_NUMBER_REGEX = /^-?(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\n\nexport function autoCoerce(valStr: string): string | number | boolean | undefined {\n if (valStr === 'true') return true;\n if (valStr === 'false') return false;\n if (valStr === 'undefined') return undefined;\n // not handling `null` because its a JS specific thing... we'll try to avoid it altogether\n\n // the regex check filters out a lot of ambiguous/weird cases\n if (VALID_NUMBER_REGEX.test(valStr)) {\n const num = Number(valStr);\n\n // Check if we can convert back to a string without any changes\n // this could be loss in precision or just formatting (extra zeros)\n const backToString = String(num);\n if (backToString !== valStr) return valStr;\n\n // if numbers are too large, we'll leave them as strings\n if (Number.isInteger(num) && !Number.isSafeInteger(num)) return valStr;\n if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) return valStr;\n\n // otherwise we can return the number\n return num;\n }\n return valStr;\n}\n","import { expand } from './expand';\nimport { autoCoerce } from './helpers';\n\nexport class ParsedEnvSpecDivider {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\n\nexport class ParsedEnvSpecStaticValue {\n value: any;\n\n constructor(public data: {\n rawValue: any;\n quote?: '\"' | \"'\" | '`' | undefined;\n isImplicit?: boolean;\n _location?: any;\n }) {\n if (!data.quote) {\n // unquoted strings will get trimmed (leading/trailing spaces)\n if (typeof data.rawValue === 'string') {\n const trimmed = data.rawValue.trim();\n // trimmed empty string without quotes gets treated as undefined\n if (trimmed === '') this.value = undefined;\n else this.value = autoCoerce(trimmed);\n } else {\n this.value = autoCoerce(data.rawValue);\n }\n } else {\n const quoteChar = data.quote.substring(0, 1);\n this.value = data.rawValue\n .slice(data.quote.length, -1 * data.quote.length)\n .replaceAll(`\\\\${quoteChar}`, quoteChar);\n }\n }\n\n get unescapedValue() {\n if (typeof this.value !== 'string') return this.value;\n let unescaped = this.value;\n // replace escaped \"$\" (if not in single quotes)\n if (this.data.quote !== \"'\") {\n unescaped = unescaped.replaceAll('\\\\$', '$');\n }\n // replace escaped newlines (if not double quotes or backticks)\n if (this.data.quote === '\"' || this.data.quote === '`') {\n unescaped = unescaped.replaceAll('\\\\n', '\\n');\n }\n return unescaped;\n }\n\n toString() {\n // TODO: smarter logic to preserve the original value\n // for example with this logic, we may see 123.0 -> 123\n let strVal = String(this.value);\n if (this.data.quote) {\n strVal = strVal.replaceAll(this.data.quote, `\\\\${this.data.quote}`);\n }\n return `${this.data.quote || ''}${strVal}${this.data.quote || ''}`;\n }\n}\n\nexport class ParsedEnvSpecRegexLiteral {\n pattern: string;\n flags: string;\n\n constructor(public data: {\n rawValue: string;\n pattern: string;\n flags: string;\n _location?: any;\n }) {\n this.pattern = data.pattern;\n this.flags = data.flags;\n }\n\n get value(): RegExp {\n return new RegExp(this.pattern, this.flags);\n }\n\n toString() {\n return this.data.rawValue;\n }\n}\n\nexport class ParsedEnvSpecKeyValuePair {\n constructor(public data: {\n key: string;\n val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral,\n }) {}\n\n get key() {\n return this.data.key;\n }\n\n get value() {\n return this.data.val;\n }\n\n toString() {\n return `${this.key}=${this.data.val.toString()}`;\n }\n}\nexport class ParsedEnvSpecFunctionArgs {\n constructor(public data: {\n values: Array<\n ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall\n | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral\n >;\n _location?: any;\n }) {}\n\n get values() {\n return this.data.values;\n }\n\n get simplifiedValues(): Array<any> | Record<string, any> {\n if (this.data.values.length === 0) return [];\n const vals = this.data.values;\n if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue || i instanceof ParsedEnvSpecRegexLiteral)) {\n return vals.map((val) => val.value);\n } else if (vals.every((i) => i instanceof ParsedEnvSpecKeyValuePair)) {\n const obj = {} as Record<string, any>;\n vals.forEach((val) => {\n if (val.value instanceof ParsedEnvSpecRegexLiteral) {\n obj[val.key] = val.value.value;\n } else if (val.value instanceof ParsedEnvSpecStaticValue) {\n obj[val.key] = val.value.value;\n // eslint-disable-next-line no-use-before-define\n } else if (val.value instanceof ParsedEnvSpecFunctionCall && val.value.name === 'regex') {\n // Convert regex(\"pattern\") to a RegExp instance (deprecated, prefer /pattern/ literals)\n const args = val.value.simplifiedArgs as Array<any>;\n if (typeof args[0] === 'string') {\n obj[val.key] = new RegExp(args[0]);\n }\n }\n });\n return obj;\n } else {\n throw new Error('Invalid function args');\n }\n }\n\n toString() {\n let s = '(';\n s += this.data.values.map((val) => val.toString()).join(', ');\n s += ')';\n return s;\n }\n}\n\nexport class ParsedEnvSpecFunctionCall {\n constructor(public data: {\n name: string;\n args: ParsedEnvSpecFunctionArgs;\n _location?: any;\n }) {}\n\n get name() {\n return this.data.name;\n }\n get simplifiedArgs() {\n return this.data.args.simplifiedValues;\n }\n\n toString() {\n // args will include the `()`\n return this.data.name + this.data.args.toString();\n }\n}\n\n\nexport class ParsedEnvSpecDecorator {\n value?: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall\n | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral;\n\n constructor(public data: {\n name: string;\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall\n | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral | undefined;\n isBareFnCall?: boolean; // true if decorator is a bare fn call (eg: @import(...))\n _location?: any;\n }) {\n // bare decorator is equivalent to `@decorator=true`\n // `@required` === `@required=true`\n if (!this.data.value) {\n this.value = new ParsedEnvSpecStaticValue({ rawValue: true, isImplicit: true });\n } else if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {\n // regex literals don't need expansion\n this.value = this.data.value;\n } else {\n // process expansion -- triggers $ expansion (eg: \"${VAR}\" => `ref(VAR)`)/\n const expanded = expand(this.data.value);\n if (expanded instanceof ParsedEnvSpecKeyValuePair) {\n throw new Error('Unexpected key-value pair found in config item');\n }\n this.value = expanded;\n }\n }\n\n get name() {\n return this.data.name;\n }\n get isBareFnCall() {\n return !!this.data.isBareFnCall;\n }\n get bareFnArgs() {\n if (this.isBareFnCall && this.value instanceof ParsedEnvSpecFunctionArgs) {\n return this.value;\n }\n }\n\n get simplifiedValue() {\n if (this.value instanceof ParsedEnvSpecStaticValue) {\n return this.value.value;\n }\n }\n toString() {\n let s = `@${this.name}`;\n if (!this.data.value) return s; // bare decorator, ex: `@required`\n // bare fn call looks like `@import(asdf)` so no `=`\n if (!this.isBareFnCall) s += '=';\n // let the value stringify itself\n s += this.data.value.toString();\n return s;\n }\n}\n\n\nexport class ParsedEnvSpecComment {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n get contents() {\n return this.data.contents;\n }\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\nexport class ParsedEnvSpecDecoratorComment {\n constructor(public data: {\n decorators: Array<ParsedEnvSpecDecorator>;\n leadingSpace?: string;\n postComment?: any;\n _location?: any;\n }) {}\n\n get decorators() {\n return this.data.decorators;\n }\n\n get postComment() {\n return this.data.postComment;\n }\n\n toString() {\n let s = '#';\n s += this.data.leadingSpace || '';\n s += this.data.decorators.map((d) => d.toString()).join(' ');\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\nfunction getDecoratorsObject(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decObj = {} as Record<string, ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n comment.decorators.forEach((decorator) => {\n decObj[decorator.name] = decorator;\n });\n }\n });\n return decObj;\n}\n\nfunction getDecoratorsArray(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decArr = [] as Array<ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n decArr.push(...comment.decorators);\n }\n });\n return decArr;\n}\n\nexport class ParsedEnvSpecCommentBlock {\n constructor(public data: {\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n divider: ParsedEnvSpecDivider | null;\n _location?: any;\n }) {}\n\n get comments() {\n return this.data.comments;\n }\n\n get divider() {\n return this.data.divider || undefined;\n }\n\n get decoratorsObject() {\n return getDecoratorsObject(this.data.comments);\n }\n get decoratorsArray() {\n return getDecoratorsArray(this.data.comments);\n }\n\n toString() {\n return [\n ...this.data.comments.map((comment) => comment.toString()),\n ...this.data.divider ? [this.data.divider.toString()] : [],\n ].join('\\n');\n }\n}\n\nexport class ParsedEnvSpecBlankLine {\n constructor(public data: {\n _location?: any;\n }) {}\n\n toString() {\n return '';\n }\n}\n\n\nexport class ParsedEnvSpecConfigItem {\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;\n\n constructor(public data: {\n key: string;\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;\n preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;\n _location?: any;\n }) {\n if (this.data.value) {\n // regex literals don't need expansion\n if (this.data.value instanceof ParsedEnvSpecRegexLiteral) {\n this.value = this.data.value;\n } else {\n const expanded = expand(this.data.value!);\n if (expanded instanceof ParsedEnvSpecKeyValuePair) {\n throw new Error('Nested key-value pair found in config item');\n } else if (expanded instanceof ParsedEnvSpecFunctionArgs) {\n throw new Error('Top-level config item cannot be a bare function args');\n }\n this.value = expanded;\n }\n }\n }\n\n get key() {\n return this.data.key;\n }\n\n get decoratorsArray() {\n return getDecoratorsArray([...this.data.preComments, this.data.postComment]);\n }\n\n get decoratorsObject() {\n return getDecoratorsObject([...this.data.preComments, this.data.postComment]);\n }\n\n get description() {\n const regularComments = this.data.preComments.filter((comment) => (comment instanceof ParsedEnvSpecComment));\n return regularComments.map((comment) => comment.contents).join('\\n');\n }\n\n toString() {\n let s = '';\n for (const comment of this.data.preComments) s += `${comment.toString()}\\n`;\n s += `${this.key}=`;\n if (this.data.value) s += `${this.data.value.toString()}`;\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\n// these are the 4 types that can be at the root level\ntype ParsedEnvSpecFileNode = ParsedEnvSpecCommentBlock\n | ParsedEnvSpecDivider\n | ParsedEnvSpecConfigItem\n | ParsedEnvSpecBlankLine;\n\n\nexport class ParsedEnvSpecFile {\n contents: Array<ParsedEnvSpecFileNode>;\n constructor(_contents: Array<ParsedEnvSpecFileNode>) {\n this.contents = _contents;\n }\n\n get configItems() {\n return this.contents.filter((item) => item instanceof ParsedEnvSpecConfigItem);\n }\n /** all comment blocks before the first config item (the \"header\" area) */\n get headerBlocks() {\n const blocks: Array<ParsedEnvSpecCommentBlock> = [];\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecCommentBlock) {\n blocks.push(item);\n } else if (item instanceof ParsedEnvSpecBlankLine || item instanceof ParsedEnvSpecDivider) {\n continue;\n } else {\n break; // hit a config item\n }\n }\n return blocks;\n }\n /** primary header block - the last comment block before the first config item */\n get header() {\n const blocks = this.headerBlocks;\n return blocks.length > 0 ? blocks[blocks.length - 1] : undefined;\n }\n get decoratorsObject() {\n const decObj = {} as Record<string, ParsedEnvSpecDecorator>;\n for (const block of this.headerBlocks) {\n Object.assign(decObj, block.decoratorsObject);\n }\n return decObj;\n }\n get decoratorsArray() {\n const decArr: Array<ParsedEnvSpecDecorator> = [];\n for (const block of this.headerBlocks) {\n decArr.push(...block.decoratorsArray);\n }\n return decArr;\n }\n\n /**\n * Comment blocks that are NOT part of the header and NOT attached to a config item.\n * Any decorators in these blocks are misplaced.\n */\n get orphanCommentBlocks() {\n const headerBlockSet = new Set(this.headerBlocks);\n return this.contents.filter(\n (item): item is ParsedEnvSpecCommentBlock => (\n item instanceof ParsedEnvSpecCommentBlock && !headerBlockSet.has(item)\n ),\n );\n }\n\n toString() {\n return this.contents.map((item) => item.toString()).join('\\n');\n }\n /**\n * simple helper to convert an object in a basic case\n * mostly useful for comparison with other env parsers\n * */\n toSimpleObj() {\n const obj = {} as Record<string, any>;\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecConfigItem) {\n if (item.value instanceof ParsedEnvSpecStaticValue) {\n obj[item.key] = item.value.value ?? '';\n }\n }\n }\n return obj;\n }\n}\n","import {\n ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair,\n ParsedEnvSpecRegexLiteral, ParsedEnvSpecStaticValue,\n} from './classes';\n\n// const EXPAND_VAR_REGEX_WITH_SIMPLE = /\\$({([a-zA-Z_][a-zA-Z0-9_.]*)}|([a-zA-Z_][a-zA-Z0-9_]*))/g;\nconst EXPAND_VAR_BRACKETED_REGEX = /(?<!\\\\)\\${([a-zA-Z_][a-zA-Z0-9_.]*)((:?-)([^}]+))?}/g;\nconst EXPAND_VAR_SIMPLE_REGEX = /(?<!\\\\)\\$([a-zA-Z_][a-zA-Z0-9_]*)/g;\nconst EXPAND_EXEC_REGEX = /\\$\\(([^)]+)\\)/g;\n\n\nfunction expandExecs(staticVal: ParsedEnvSpecStaticValue, _opts?: {}) {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n // single quoted strings are not expanded!\n if (quote === \"'\") return staticVal;\n\n const execMatches = Array.from(staticVal.value.matchAll(EXPAND_EXEC_REGEX));\n\n // if no matches - we just return the original value\n if (execMatches.length === 0) return staticVal;\n\n // otherwise, we expand the transform each match into `exec` fn calls\n // and return a concat with everything together\n let lastIndex = 0;\n const parts = [] as Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall>;\n for (const match of execMatches) {\n // extract text before exec -- ex: `pretext-$(exec command)`\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract exec command\n const shellCmd = match[1];\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'exec',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${shellCmd}${quoteStr}`, quote })],\n }),\n }));\n lastIndex = match.index + match[0].length;\n }\n // extract any remaining text after the last exec\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if there's only one part, we can just return it (ex: `VAR=$(whoami)`)\n if (parts.length === 1) return parts[0];\n // otherwise we concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\nfunction expandRefs(staticVal: ParsedEnvSpecStaticValue, mode: 'simple' | 'bracketed') {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n if (quote === \"'\") return staticVal;\n\n const varMatches = Array.from(staticVal.value.matchAll(mode === 'simple' ? EXPAND_VAR_SIMPLE_REGEX : EXPAND_VAR_BRACKETED_REGEX));\n if (varMatches.length === 0) return staticVal;\n\n let lastIndex = 0;\n const parts = [] as Array<any>;\n for (const match of varMatches) {\n // extract text before exec\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract var\n const varName = match[1];\n let defaultOperator: string | undefined; // ex: \":-\" or \"-\"\n let defaultVal: string | undefined; // currently not doing any fancy parsing on this, will just be a string\n if (mode === 'bracketed') {\n // TODO: do we want to support different behaviour based on the operator?\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n defaultOperator = match[3];\n defaultVal = match[4];\n }\n const refFnCall = new ParsedEnvSpecFunctionCall({\n name: 'ref',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: varName })],\n }),\n });\n if (defaultVal) {\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'fallback',\n args: new ParsedEnvSpecFunctionArgs({\n values: [refFnCall, new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${defaultVal}${quoteStr}`, quote })],\n }),\n }));\n } else {\n parts.push(refFnCall);\n }\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if only a single part, just return it (ex: `VAR=${OTHERVAR}`)\n if (parts.length === 1) return parts[0];\n // otherwise, concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\n\ntype ParsedEnvSpecValueNode = ParsedEnvSpecStaticValue\n| ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecKeyValuePair\n| ParsedEnvSpecRegexLiteral;\n\n/**\n * helper used by expansion to recursively expand values\n * */\nfunction expandHelper(\n val: ParsedEnvSpecValueNode,\n expandStaticFn: (staticVal: ParsedEnvSpecStaticValue) => ParsedEnvSpecValueNode,\n): ParsedEnvSpecValueNode {\n // if function call, expand each arg\n if (val instanceof ParsedEnvSpecFunctionCall) {\n const fnName = val.name;\n // expand each arg, and then flatten unnecessery nested concat fns\n const newConcatArgs = [] as Array<ParsedEnvSpecValueNode>;\n val.data.args.values.forEach((v) => {\n const expandedArg = expandHelper(v, expandStaticFn);\n // special case for concat so we flatten unnecessery nested concat fns\n if (\n fnName === 'concat'\n && expandedArg instanceof ParsedEnvSpecFunctionCall\n && expandedArg.name === 'concat'\n ) {\n newConcatArgs.push(...expandedArg.data.args.values);\n } else {\n newConcatArgs.push(expandedArg);\n }\n });\n\n return new ParsedEnvSpecFunctionCall({\n name: fnName,\n args: new ParsedEnvSpecFunctionArgs({\n values: newConcatArgs as any,\n _location: val.data.args.data._location,\n }),\n _location: val.data._location,\n });\n } else if (val instanceof ParsedEnvSpecFunctionArgs) {\n // expand each arg\n const newArgs = val.data.values.map((v) => expandHelper(v, expandStaticFn));\n return new ParsedEnvSpecFunctionArgs({\n values: newArgs as any,\n _location: val.data._location,\n });\n // if key-value pair, expand value\n } else if (val instanceof ParsedEnvSpecKeyValuePair) {\n const expandedVal = expandHelper(val.value, expandStaticFn);\n if (expandedVal instanceof ParsedEnvSpecKeyValuePair) throw new Error('Nested key-value pair found in concat');\n return new ParsedEnvSpecKeyValuePair({\n key: val.key,\n val: expandedVal as any,\n });\n } else if (val instanceof ParsedEnvSpecRegexLiteral) {\n // regex literals are never expanded\n return val;\n } else if (val instanceof ParsedEnvSpecStaticValue) {\n // here we actually do the expansion on string values\n\n // skip expansion if value is number/boolean/etc\n if (typeof val.value !== 'string') return val;\n // skip expansion on single-quoted strings\n if (val.data.quote === \"'\") return val;\n\n return expandStaticFn(val);\n }\n throw new Error('Unknown value type');\n}\n\n/**\n * takes in a value node and runs expansion (execs, refs) according to options\n * returns a new value node with all expansions applied\n * */\nexport function expand(\n val: ParsedEnvSpecValueNode,\n // TODO: add options to enable/disable specific expansion types and handling\n _opts?: {},\n): ParsedEnvSpecValueNode {\n // TODO: add options\n let expandedVal = val;\n expandedVal = expandHelper(expandedVal, (v) => expandExecs(v));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'simple'));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'bracketed'));\n return expandedVal;\n}\n"]}
|
|
@@ -28,29 +28,47 @@ declare class ParsedEnvSpecStaticValue {
|
|
|
28
28
|
get unescapedValue(): any;
|
|
29
29
|
toString(): string;
|
|
30
30
|
}
|
|
31
|
+
declare class ParsedEnvSpecRegexLiteral {
|
|
32
|
+
data: {
|
|
33
|
+
rawValue: string;
|
|
34
|
+
pattern: string;
|
|
35
|
+
flags: string;
|
|
36
|
+
_location?: any;
|
|
37
|
+
};
|
|
38
|
+
pattern: string;
|
|
39
|
+
flags: string;
|
|
40
|
+
constructor(data: {
|
|
41
|
+
rawValue: string;
|
|
42
|
+
pattern: string;
|
|
43
|
+
flags: string;
|
|
44
|
+
_location?: any;
|
|
45
|
+
});
|
|
46
|
+
get value(): RegExp;
|
|
47
|
+
toString(): string;
|
|
48
|
+
}
|
|
31
49
|
declare class ParsedEnvSpecKeyValuePair {
|
|
32
50
|
data: {
|
|
33
51
|
key: string;
|
|
34
|
-
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;
|
|
52
|
+
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral;
|
|
35
53
|
};
|
|
36
54
|
constructor(data: {
|
|
37
55
|
key: string;
|
|
38
|
-
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;
|
|
56
|
+
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral;
|
|
39
57
|
});
|
|
40
58
|
get key(): string;
|
|
41
|
-
get value(): ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;
|
|
59
|
+
get value(): ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral;
|
|
42
60
|
toString(): string;
|
|
43
61
|
}
|
|
44
62
|
declare class ParsedEnvSpecFunctionArgs {
|
|
45
63
|
data: {
|
|
46
|
-
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair>;
|
|
64
|
+
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral>;
|
|
47
65
|
_location?: any;
|
|
48
66
|
};
|
|
49
67
|
constructor(data: {
|
|
50
|
-
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair>;
|
|
68
|
+
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral>;
|
|
51
69
|
_location?: any;
|
|
52
70
|
});
|
|
53
|
-
get values(): (ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair)[];
|
|
71
|
+
get values(): (ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral)[];
|
|
54
72
|
get simplifiedValues(): Array<any> | Record<string, any>;
|
|
55
73
|
toString(): string;
|
|
56
74
|
}
|
|
@@ -72,14 +90,14 @@ declare class ParsedEnvSpecFunctionCall {
|
|
|
72
90
|
declare class ParsedEnvSpecDecorator {
|
|
73
91
|
data: {
|
|
74
92
|
name: string;
|
|
75
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | undefined;
|
|
93
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral | undefined;
|
|
76
94
|
isBareFnCall?: boolean;
|
|
77
95
|
_location?: any;
|
|
78
96
|
};
|
|
79
|
-
value?: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs;
|
|
97
|
+
value?: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral;
|
|
80
98
|
constructor(data: {
|
|
81
99
|
name: string;
|
|
82
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | undefined;
|
|
100
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral | undefined;
|
|
83
101
|
isBareFnCall?: boolean;
|
|
84
102
|
_location?: any;
|
|
85
103
|
});
|
|
@@ -149,15 +167,15 @@ declare class ParsedEnvSpecBlankLine {
|
|
|
149
167
|
declare class ParsedEnvSpecConfigItem {
|
|
150
168
|
data: {
|
|
151
169
|
key: string;
|
|
152
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;
|
|
170
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;
|
|
153
171
|
preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;
|
|
154
172
|
postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;
|
|
155
173
|
_location?: any;
|
|
156
174
|
};
|
|
157
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;
|
|
175
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;
|
|
158
176
|
constructor(data: {
|
|
159
177
|
key: string;
|
|
160
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;
|
|
178
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;
|
|
161
179
|
preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;
|
|
162
180
|
postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;
|
|
163
181
|
_location?: any;
|
|
@@ -192,4 +210,4 @@ declare class ParsedEnvSpecFile {
|
|
|
192
210
|
toSimpleObj(): Record<string, any>;
|
|
193
211
|
}
|
|
194
212
|
|
|
195
|
-
export { ParsedEnvSpecFile as P, ParsedEnvSpecDecorator as a, ParsedEnvSpecStaticValue as b, ParsedEnvSpecFunctionCall as c, ParsedEnvSpecFunctionArgs as d, ParsedEnvSpecKeyValuePair as e,
|
|
213
|
+
export { ParsedEnvSpecFile as P, ParsedEnvSpecDecorator as a, ParsedEnvSpecStaticValue as b, ParsedEnvSpecFunctionCall as c, ParsedEnvSpecFunctionArgs as d, ParsedEnvSpecKeyValuePair as e, ParsedEnvSpecRegexLiteral as f, ParsedEnvSpecBlankLine as g, ParsedEnvSpecComment as h, ParsedEnvSpecCommentBlock as i, ParsedEnvSpecConfigItem as j, ParsedEnvSpecDecoratorComment as k, ParsedEnvSpecDivider as l };
|
|
@@ -28,29 +28,47 @@ declare class ParsedEnvSpecStaticValue {
|
|
|
28
28
|
get unescapedValue(): any;
|
|
29
29
|
toString(): string;
|
|
30
30
|
}
|
|
31
|
+
declare class ParsedEnvSpecRegexLiteral {
|
|
32
|
+
data: {
|
|
33
|
+
rawValue: string;
|
|
34
|
+
pattern: string;
|
|
35
|
+
flags: string;
|
|
36
|
+
_location?: any;
|
|
37
|
+
};
|
|
38
|
+
pattern: string;
|
|
39
|
+
flags: string;
|
|
40
|
+
constructor(data: {
|
|
41
|
+
rawValue: string;
|
|
42
|
+
pattern: string;
|
|
43
|
+
flags: string;
|
|
44
|
+
_location?: any;
|
|
45
|
+
});
|
|
46
|
+
get value(): RegExp;
|
|
47
|
+
toString(): string;
|
|
48
|
+
}
|
|
31
49
|
declare class ParsedEnvSpecKeyValuePair {
|
|
32
50
|
data: {
|
|
33
51
|
key: string;
|
|
34
|
-
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;
|
|
52
|
+
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral;
|
|
35
53
|
};
|
|
36
54
|
constructor(data: {
|
|
37
55
|
key: string;
|
|
38
|
-
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;
|
|
56
|
+
val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral;
|
|
39
57
|
});
|
|
40
58
|
get key(): string;
|
|
41
|
-
get value(): ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;
|
|
59
|
+
get value(): ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral;
|
|
42
60
|
toString(): string;
|
|
43
61
|
}
|
|
44
62
|
declare class ParsedEnvSpecFunctionArgs {
|
|
45
63
|
data: {
|
|
46
|
-
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair>;
|
|
64
|
+
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral>;
|
|
47
65
|
_location?: any;
|
|
48
66
|
};
|
|
49
67
|
constructor(data: {
|
|
50
|
-
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair>;
|
|
68
|
+
values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral>;
|
|
51
69
|
_location?: any;
|
|
52
70
|
});
|
|
53
|
-
get values(): (ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair)[];
|
|
71
|
+
get values(): (ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral)[];
|
|
54
72
|
get simplifiedValues(): Array<any> | Record<string, any>;
|
|
55
73
|
toString(): string;
|
|
56
74
|
}
|
|
@@ -72,14 +90,14 @@ declare class ParsedEnvSpecFunctionCall {
|
|
|
72
90
|
declare class ParsedEnvSpecDecorator {
|
|
73
91
|
data: {
|
|
74
92
|
name: string;
|
|
75
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | undefined;
|
|
93
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral | undefined;
|
|
76
94
|
isBareFnCall?: boolean;
|
|
77
95
|
_location?: any;
|
|
78
96
|
};
|
|
79
|
-
value?: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs;
|
|
97
|
+
value?: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral;
|
|
80
98
|
constructor(data: {
|
|
81
99
|
name: string;
|
|
82
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | undefined;
|
|
100
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecRegexLiteral | undefined;
|
|
83
101
|
isBareFnCall?: boolean;
|
|
84
102
|
_location?: any;
|
|
85
103
|
});
|
|
@@ -149,15 +167,15 @@ declare class ParsedEnvSpecBlankLine {
|
|
|
149
167
|
declare class ParsedEnvSpecConfigItem {
|
|
150
168
|
data: {
|
|
151
169
|
key: string;
|
|
152
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;
|
|
170
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;
|
|
153
171
|
preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;
|
|
154
172
|
postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;
|
|
155
173
|
_location?: any;
|
|
156
174
|
};
|
|
157
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;
|
|
175
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;
|
|
158
176
|
constructor(data: {
|
|
159
177
|
key: string;
|
|
160
|
-
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;
|
|
178
|
+
value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecRegexLiteral | undefined;
|
|
161
179
|
preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;
|
|
162
180
|
postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;
|
|
163
181
|
_location?: any;
|
|
@@ -192,4 +210,4 @@ declare class ParsedEnvSpecFile {
|
|
|
192
210
|
toSimpleObj(): Record<string, any>;
|
|
193
211
|
}
|
|
194
212
|
|
|
195
|
-
export { ParsedEnvSpecFile as P, ParsedEnvSpecDecorator as a, ParsedEnvSpecStaticValue as b, ParsedEnvSpecFunctionCall as c, ParsedEnvSpecFunctionArgs as d, ParsedEnvSpecKeyValuePair as e,
|
|
213
|
+
export { ParsedEnvSpecFile as P, ParsedEnvSpecDecorator as a, ParsedEnvSpecStaticValue as b, ParsedEnvSpecFunctionCall as c, ParsedEnvSpecFunctionArgs as d, ParsedEnvSpecKeyValuePair as e, ParsedEnvSpecRegexLiteral as f, ParsedEnvSpecBlankLine as g, ParsedEnvSpecComment as h, ParsedEnvSpecCommentBlock as i, ParsedEnvSpecConfigItem as j, ParsedEnvSpecDecoratorComment as k, ParsedEnvSpecDivider as l };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as ParsedEnvSpecFile, a as ParsedEnvSpecDecorator, b as ParsedEnvSpecStaticValue, c as ParsedEnvSpecFunctionCall, d as ParsedEnvSpecFunctionArgs, e as ParsedEnvSpecKeyValuePair } from './classes-
|
|
2
|
-
export {
|
|
1
|
+
import { P as ParsedEnvSpecFile, a as ParsedEnvSpecDecorator, b as ParsedEnvSpecStaticValue, c as ParsedEnvSpecFunctionCall, d as ParsedEnvSpecFunctionArgs, e as ParsedEnvSpecKeyValuePair, f as ParsedEnvSpecRegexLiteral } from './classes-CgmCxTZQ.mjs';
|
|
2
|
+
export { g as ParsedEnvSpecBlankLine, h as ParsedEnvSpecComment, i as ParsedEnvSpecCommentBlock, j as ParsedEnvSpecConfigItem, k as ParsedEnvSpecDecoratorComment, l as ParsedEnvSpecDivider } from './classes-CgmCxTZQ.mjs';
|
|
3
3
|
|
|
4
4
|
declare function ensureHeader(file: ParsedEnvSpecFile, newHeaderContents?: string): void;
|
|
5
5
|
declare function createDummyDecoratorNode(decoratorName: string, valueStr: string, opts?: {
|
|
@@ -23,7 +23,7 @@ declare const envSpecUpdater: {
|
|
|
23
23
|
deleteItem: typeof deleteItem;
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
type ParsedEnvSpecValueNode = ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecKeyValuePair;
|
|
26
|
+
type ParsedEnvSpecValueNode = ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | ParsedEnvSpecKeyValuePair | ParsedEnvSpecRegexLiteral;
|
|
27
27
|
/**
|
|
28
28
|
* takes in a value node and runs expansion (execs, refs) according to options
|
|
29
29
|
* returns a new value node with all expansions applied
|
|
@@ -32,4 +32,4 @@ declare function expand(val: ParsedEnvSpecValueNode, _opts?: {}): ParsedEnvSpecV
|
|
|
32
32
|
|
|
33
33
|
declare function parseEnvSpecDotEnvFile(source: string): ParsedEnvSpecFile;
|
|
34
34
|
|
|
35
|
-
export { ParsedEnvSpecDecorator, ParsedEnvSpecFile, ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecStaticValue, envSpecUpdater, expand, parseEnvSpecDotEnvFile };
|
|
35
|
+
export { ParsedEnvSpecDecorator, ParsedEnvSpecFile, ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecRegexLiteral, ParsedEnvSpecStaticValue, envSpecUpdater, expand, parseEnvSpecDotEnvFile };
|