@abaplint/transpiler-cli 2.13.48 → 2.13.50
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/build/bundle.js +834 -195
- package/package.json +3 -3
package/build/bundle.js
CHANGED
|
@@ -214,6 +214,23 @@ exports.FileOperations = FileOperations;
|
|
|
214
214
|
|
|
215
215
|
/***/ },
|
|
216
216
|
|
|
217
|
+
/***/ "./build/git_clone.js"
|
|
218
|
+
/*!****************************!*\
|
|
219
|
+
!*** ./build/git_clone.js ***!
|
|
220
|
+
\****************************/
|
|
221
|
+
(__unused_webpack_module, exports) {
|
|
222
|
+
|
|
223
|
+
"use strict";
|
|
224
|
+
|
|
225
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
226
|
+
exports.buildGitCloneArguments = buildGitCloneArguments;
|
|
227
|
+
function buildGitCloneArguments(url) {
|
|
228
|
+
return ["clone", "--quiet", "--depth", "1", "--", url, "."];
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=git_clone.js.map
|
|
231
|
+
|
|
232
|
+
/***/ },
|
|
233
|
+
|
|
217
234
|
/***/ "./build/index.js"
|
|
218
235
|
/*!************************!*\
|
|
219
236
|
!*** ./build/index.js ***!
|
|
@@ -270,6 +287,7 @@ const Transpiler = __importStar(__webpack_require__(/*! @abaplint/transpiler */
|
|
|
270
287
|
const abaplint = __importStar(__webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js"));
|
|
271
288
|
const config_1 = __webpack_require__(/*! ./config */ "./build/config.js");
|
|
272
289
|
const file_operations_1 = __webpack_require__(/*! ./file_operations */ "./build/file_operations.js");
|
|
290
|
+
const git_clone_1 = __webpack_require__(/*! ./git_clone */ "./build/git_clone.js");
|
|
273
291
|
class Progress {
|
|
274
292
|
bar;
|
|
275
293
|
set(total, _text) {
|
|
@@ -290,9 +308,13 @@ async function loadLib(config) {
|
|
|
290
308
|
dir = process.cwd() + lib.folder;
|
|
291
309
|
}
|
|
292
310
|
else {
|
|
311
|
+
if (lib.url === undefined || lib.url === "") {
|
|
312
|
+
throw new Error("Library must define a non-empty url or an existing folder");
|
|
313
|
+
}
|
|
293
314
|
console.log("Clone: " + lib.url);
|
|
294
315
|
dir = fs.mkdtempSync(path.join(os.tmpdir(), "abap_transpile-"));
|
|
295
|
-
|
|
316
|
+
const args = (0, git_clone_1.buildGitCloneArguments)(lib.url);
|
|
317
|
+
childProcess.execFileSync("git", args, { cwd: dir, stdio: "inherit" });
|
|
296
318
|
cleanupFolder = true;
|
|
297
319
|
}
|
|
298
320
|
let patterns = ["/src/**"];
|
|
@@ -5192,7 +5214,7 @@ class FieldChain extends combi_1.Expression {
|
|
|
5192
5214
|
getRunnable() {
|
|
5193
5215
|
const attr = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.InstanceArrow), _1.AttributeName);
|
|
5194
5216
|
const comp = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.Dash), (0, combi_1.optPrio)(_1.ComponentName));
|
|
5195
|
-
const chain = (0, combi_1.star)((0, combi_1.altPrio)(_1.Dereference, (0, _dynamic_access_1.dynAttr)(), attr, (0, _dynamic_access_1.dynComp)((0, combi_1.optPrio)(_1.FieldOffset), (0, combi_1.optPrio)(_1.FieldLength)), comp, _1.TableExpression));
|
|
5217
|
+
const chain = (0, combi_1.star)((0, combi_1.altPrio)(_1.Dereference, (0, _dynamic_access_1.dynAttr)(), attr, (0, _dynamic_access_1.dynComp)((0, combi_1.optPrio)(_1.FieldOffset), (0, combi_1.optPrio)(_1.FieldLength)), comp, (0, combi_1.tok)(tokens_1.AssociationName), _1.TableExpression));
|
|
5196
5218
|
const clas = (0, combi_1.seq)(_1.ClassName, (0, combi_1.tok)(tokens_1.StaticArrow), _1.AttributeName);
|
|
5197
5219
|
const start = (0, combi_1.altPrio)(clas, _1.SourceField, _1.SourceFieldSymbol);
|
|
5198
5220
|
const after = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.DashW), (0, combi_1.seq)((0, combi_1.optPrio)(_1.TableBody), (0, combi_1.optPrio)(_1.FieldOffset), (0, combi_1.optPrio)(_1.FieldLength)));
|
|
@@ -5396,7 +5418,7 @@ class For extends combi_1.Expression {
|
|
|
5396
5418
|
const itera = (0, combi_1.seq)(_1.InlineFieldDefinition, (0, combi_1.opt)(then), whil);
|
|
5397
5419
|
const groupBy = (0, combi_1.seq)("GROUP BY", (0, combi_1.alt)(field_chain_1.FieldChain, (0, combi_1.seq)("(", (0, combi_1.plus)(_1.LoopGroupByComponent), ")")), (0, combi_1.opt)((0, combi_1.seq)((0, combi_1.alt)("ASCENDING", "DESCENDING"), (0, combi_1.opt)("AS TEXT"))), (0, combi_1.opt)("WITHOUT MEMBERS"));
|
|
5398
5420
|
const t = (0, combi_1.alt)(_1.TargetField, _1.TargetFieldSymbol);
|
|
5399
|
-
const groups = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("GROUPS", t, "OF", t, "IN", _1.Source, (0, combi_1.optPrio)(groupBy)));
|
|
5421
|
+
const groups = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("GROUPS", t, "OF", t, "IN", _1.Source, (0, combi_1.optPrio)(groupBy)), { also: combi_1.AlsoIn.OpenABAP });
|
|
5400
5422
|
const f = (0, combi_1.seq)("FOR", (0, combi_1.alt)(itera, inn, groups), (0, combi_1.optPrio)(_1.Let));
|
|
5401
5423
|
return (0, combi_1.ver)(version_1.Release.v740sp05, f, { also: combi_1.AlsoIn.OpenABAP });
|
|
5402
5424
|
}
|
|
@@ -6079,7 +6101,8 @@ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/co
|
|
|
6079
6101
|
const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
6080
6102
|
class InlineFieldDefinition extends combi_1.Expression {
|
|
6081
6103
|
getRunnable() {
|
|
6082
|
-
|
|
6104
|
+
const field = (0, combi_1.altPrio)(_1.Field, _1.FieldSymbol);
|
|
6105
|
+
return (0, combi_1.altPrio)((0, combi_1.seq)(field, "=", _1.Source), (0, combi_1.seq)(_1.Field, "TYPE", _1.TypeName));
|
|
6083
6106
|
}
|
|
6084
6107
|
}
|
|
6085
6108
|
exports.InlineFieldDefinition = InlineFieldDefinition;
|
|
@@ -7633,7 +7656,7 @@ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules
|
|
|
7633
7656
|
const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
|
|
7634
7657
|
class ReduceNext extends combi_1.Expression {
|
|
7635
7658
|
getRunnable() {
|
|
7636
|
-
const calcAssign = (0, combi_1.ver)(version_1.Release.v754, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.WPlus), "="), (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WDash), "="), "/=", "*=", "&&="));
|
|
7659
|
+
const calcAssign = (0, combi_1.ver)(version_1.Release.v754, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.WPlus), "="), (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WDash), "="), "/=", "*=", "&&="), { also: combi_1.AlsoIn.OpenABAP });
|
|
7637
7660
|
const fields = (0, combi_1.seq)(_1.SimpleTarget, (0, combi_1.altPrio)("=", calcAssign), _1.Source);
|
|
7638
7661
|
return (0, combi_1.seq)("NEXT", (0, combi_1.plus)(fields));
|
|
7639
7662
|
}
|
|
@@ -10911,7 +10934,7 @@ class TableExpression extends combi_1.Expression {
|
|
|
10911
10934
|
const fields = (0, combi_1.plus)((0, combi_1.seq)((0, combi_1.altPrio)(_1.ComponentChainSimple, _1.Dynamic), "=", _1.Source));
|
|
10912
10935
|
const key = (0, combi_1.seq)("KEY", _1.SimpleName);
|
|
10913
10936
|
const index = (0, combi_1.seq)("INDEX", _1.Source);
|
|
10914
|
-
const ret = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.BracketLeftW), (0, combi_1.alt)(_1.Source, (0, combi_1.seq)((0, combi_1.optPrio)(key), (0, combi_1.opt)("COMPONENTS"), (0, combi_1.altPrio)(fields, index))), (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WBracketRight), (0, combi_1.tok)(tokens_1.WBracketRightW)));
|
|
10937
|
+
const ret = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.BracketLeftW), (0, combi_1.alt)((0, combi_1.seq)(_1.Source, fields), _1.Source, (0, combi_1.seq)((0, combi_1.optPrio)(key), (0, combi_1.opt)("COMPONENTS"), (0, combi_1.altPrio)(fields, index))), (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WBracketRight), (0, combi_1.tok)(tokens_1.WBracketRightW)));
|
|
10915
10938
|
return (0, combi_1.ver)(version_1.Release.v740sp02, ret, { also: combi_1.AlsoIn.OpenABAP });
|
|
10916
10939
|
}
|
|
10917
10940
|
}
|
|
@@ -18604,7 +18627,7 @@ const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@a
|
|
|
18604
18627
|
class RollbackEntities {
|
|
18605
18628
|
getMatcher() {
|
|
18606
18629
|
const s = "ROLLBACK ENTITIES";
|
|
18607
|
-
return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v754, s));
|
|
18630
|
+
return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v754, s, { also: combi_1.AlsoIn.OpenABAP }));
|
|
18608
18631
|
}
|
|
18609
18632
|
}
|
|
18610
18633
|
exports.RollbackEntities = RollbackEntities;
|
|
@@ -24971,7 +24994,8 @@ class ABAPFileInformationParser {
|
|
|
24971
24994
|
return ret;
|
|
24972
24995
|
}
|
|
24973
24996
|
parseConstants(node, visibility) {
|
|
24974
|
-
var _a
|
|
24997
|
+
var _a;
|
|
24998
|
+
var _b;
|
|
24975
24999
|
if (node === undefined) {
|
|
24976
25000
|
return [];
|
|
24977
25001
|
}
|
|
@@ -25826,7 +25850,7 @@ BuiltIn.methods = {
|
|
|
25826
25850
|
counter: BuiltIn.counter++,
|
|
25827
25851
|
mandatory: {
|
|
25828
25852
|
"val": basic_1.CLikeType.get(),
|
|
25829
|
-
"format": basic_1.
|
|
25853
|
+
"format": basic_1.SimpleType.get(),
|
|
25830
25854
|
},
|
|
25831
25855
|
return: basic_1.StringType.get(),
|
|
25832
25856
|
release: version_1.Release.v702,
|
|
@@ -26018,17 +26042,17 @@ BuiltIn.methods = {
|
|
|
26018
26042
|
"NMAX": {
|
|
26019
26043
|
counter: BuiltIn.counter++,
|
|
26020
26044
|
mandatory: {
|
|
26021
|
-
"val1": basic_1.
|
|
26022
|
-
"val2": basic_1.
|
|
26045
|
+
"val1": basic_1.SimpleType.get(),
|
|
26046
|
+
"val2": basic_1.SimpleType.get(),
|
|
26023
26047
|
},
|
|
26024
26048
|
optional: {
|
|
26025
|
-
"val3": basic_1.
|
|
26026
|
-
"val4": basic_1.
|
|
26027
|
-
"val5": basic_1.
|
|
26028
|
-
"val6": basic_1.
|
|
26029
|
-
"val7": basic_1.
|
|
26030
|
-
"val8": basic_1.
|
|
26031
|
-
"val9": basic_1.
|
|
26049
|
+
"val3": basic_1.SimpleType.get(),
|
|
26050
|
+
"val4": basic_1.SimpleType.get(),
|
|
26051
|
+
"val5": basic_1.SimpleType.get(),
|
|
26052
|
+
"val6": basic_1.SimpleType.get(),
|
|
26053
|
+
"val7": basic_1.SimpleType.get(),
|
|
26054
|
+
"val8": basic_1.SimpleType.get(),
|
|
26055
|
+
"val9": basic_1.SimpleType.get(),
|
|
26032
26056
|
},
|
|
26033
26057
|
return: basic_1.IntegerType.get(),
|
|
26034
26058
|
release: version_1.Release.v702,
|
|
@@ -26036,17 +26060,17 @@ BuiltIn.methods = {
|
|
|
26036
26060
|
"NMIN": {
|
|
26037
26061
|
counter: BuiltIn.counter++,
|
|
26038
26062
|
mandatory: {
|
|
26039
|
-
"val1": basic_1.
|
|
26040
|
-
"val2": basic_1.
|
|
26063
|
+
"val1": basic_1.SimpleType.get(),
|
|
26064
|
+
"val2": basic_1.SimpleType.get(),
|
|
26041
26065
|
},
|
|
26042
26066
|
optional: {
|
|
26043
|
-
"val3": basic_1.
|
|
26044
|
-
"val4": basic_1.
|
|
26045
|
-
"val5": basic_1.
|
|
26046
|
-
"val6": basic_1.
|
|
26047
|
-
"val7": basic_1.
|
|
26048
|
-
"val8": basic_1.
|
|
26049
|
-
"val9": basic_1.
|
|
26067
|
+
"val3": basic_1.SimpleType.get(),
|
|
26068
|
+
"val4": basic_1.SimpleType.get(),
|
|
26069
|
+
"val5": basic_1.SimpleType.get(),
|
|
26070
|
+
"val6": basic_1.SimpleType.get(),
|
|
26071
|
+
"val7": basic_1.SimpleType.get(),
|
|
26072
|
+
"val8": basic_1.SimpleType.get(),
|
|
26073
|
+
"val9": basic_1.SimpleType.get(),
|
|
26050
26074
|
},
|
|
26051
26075
|
return: basic_1.IntegerType.get(),
|
|
26052
26076
|
release: version_1.Release.v702,
|
|
@@ -26062,7 +26086,7 @@ BuiltIn.methods = {
|
|
|
26062
26086
|
counter: BuiltIn.counter++,
|
|
26063
26087
|
mandatory: {
|
|
26064
26088
|
"val": basic_1.CLikeType.get(),
|
|
26065
|
-
"occ": basic_1.
|
|
26089
|
+
"occ": basic_1.SimpleType.get(),
|
|
26066
26090
|
},
|
|
26067
26091
|
return: basic_1.StringType.get(),
|
|
26068
26092
|
release: version_1.Release.v702,
|
|
@@ -27780,6 +27804,21 @@ class TypeUtils {
|
|
|
27780
27804
|
}
|
|
27781
27805
|
return false;
|
|
27782
27806
|
}
|
|
27807
|
+
isCharLikeField(type) {
|
|
27808
|
+
if (type instanceof basic_1.StructureType
|
|
27809
|
+
|| (type instanceof basic_1.TableType && type.isWithHeader())) {
|
|
27810
|
+
return this.isCharLikeStrict(type);
|
|
27811
|
+
}
|
|
27812
|
+
return type instanceof basic_1.CharacterType
|
|
27813
|
+
|| type instanceof basic_1.NumericType
|
|
27814
|
+
|| type instanceof basic_1.DateType
|
|
27815
|
+
|| type instanceof basic_1.TimeType
|
|
27816
|
+
|| type instanceof cgeneric_type_1.CGenericType
|
|
27817
|
+
|| type instanceof basic_1.CLikeType
|
|
27818
|
+
|| type instanceof basic_1.AnyType
|
|
27819
|
+
|| type instanceof basic_1.UnknownType
|
|
27820
|
+
|| type instanceof basic_1.VoidType;
|
|
27821
|
+
}
|
|
27783
27822
|
isCharLike(type) {
|
|
27784
27823
|
if (type === undefined) {
|
|
27785
27824
|
return false;
|
|
@@ -27816,6 +27855,7 @@ class TypeUtils {
|
|
|
27816
27855
|
|| type instanceof basic_1.DataType
|
|
27817
27856
|
|| type instanceof basic_1.CLikeType
|
|
27818
27857
|
|| type instanceof basic_1.PackedType
|
|
27858
|
+
|| type instanceof basic_1.PGenericType
|
|
27819
27859
|
|| type instanceof basic_1.TimeType
|
|
27820
27860
|
|| type instanceof enum_type_1.EnumType) {
|
|
27821
27861
|
return true;
|
|
@@ -28017,7 +28057,7 @@ class TypeUtils {
|
|
|
28017
28057
|
return this.isAssignable(source, target);
|
|
28018
28058
|
}
|
|
28019
28059
|
isAssignableStrict(source, target, node) {
|
|
28020
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
28060
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
28021
28061
|
const calculated = node ? this.isCalculated(node) : false;
|
|
28022
28062
|
/*
|
|
28023
28063
|
console.dir(source);
|
|
@@ -28028,30 +28068,52 @@ class TypeUtils {
|
|
|
28028
28068
|
&& (target instanceof basic_1.XStringType || target instanceof basic_1.XSequenceType)) {
|
|
28029
28069
|
return false;
|
|
28030
28070
|
}
|
|
28071
|
+
if (target instanceof basic_1.NumericType
|
|
28072
|
+
&& (source instanceof basic_1.CharacterType || source instanceof basic_1.StringType)
|
|
28073
|
+
&& ((_a = source.getAbstractTypeData()) === null || _a === void 0 ? void 0 : _a.derivedFromConstant) === true) {
|
|
28074
|
+
const constant = node === null || node === void 0 ? void 0 : node.concatTokens();
|
|
28075
|
+
if (constant !== undefined
|
|
28076
|
+
&& ((constant.startsWith("'") && constant.endsWith("'"))
|
|
28077
|
+
|| (constant.startsWith("`") && constant.endsWith("`")))
|
|
28078
|
+
&& /^\d*$/.test(constant.substring(1, constant.length - 1)) === false) {
|
|
28079
|
+
return false;
|
|
28080
|
+
}
|
|
28081
|
+
}
|
|
28031
28082
|
if (calculated) {
|
|
28032
28083
|
return this.isAssignable(source, target);
|
|
28033
28084
|
}
|
|
28085
|
+
if (target instanceof basic_1.CLikeType) {
|
|
28086
|
+
return this.isCharLikeStrict(source);
|
|
28087
|
+
}
|
|
28088
|
+
if (target instanceof basic_1.PGenericType) {
|
|
28089
|
+
return source instanceof basic_1.PackedType
|
|
28090
|
+
|| source instanceof basic_1.PGenericType
|
|
28091
|
+
|| source instanceof basic_1.VoidType
|
|
28092
|
+
|| source instanceof basic_1.AnyType
|
|
28093
|
+
|| source instanceof basic_1.DataType
|
|
28094
|
+
|| source instanceof basic_1.UnknownType;
|
|
28095
|
+
}
|
|
28034
28096
|
if (source instanceof basic_1.CharacterType) {
|
|
28035
28097
|
if (target instanceof basic_1.CharacterType) {
|
|
28036
|
-
if (((
|
|
28098
|
+
if (((_b = source.getAbstractTypeData()) === null || _b === void 0 ? void 0 : _b.derivedFromConstant) === true) {
|
|
28037
28099
|
return source.getLength() <= target.getLength();
|
|
28038
28100
|
}
|
|
28039
28101
|
return source.getLength() === target.getLength();
|
|
28040
28102
|
}
|
|
28041
28103
|
else if (target instanceof basic_1.IntegerType) {
|
|
28042
|
-
if (((
|
|
28104
|
+
if (((_c = source.getAbstractTypeData()) === null || _c === void 0 ? void 0 : _c.derivedFromConstant) === true) {
|
|
28043
28105
|
return true;
|
|
28044
28106
|
}
|
|
28045
28107
|
return false;
|
|
28046
28108
|
}
|
|
28047
28109
|
else if (target instanceof basic_1.XStringType) {
|
|
28048
|
-
if (((
|
|
28110
|
+
if (((_d = source.getAbstractTypeData()) === null || _d === void 0 ? void 0 : _d.derivedFromConstant) === true) {
|
|
28049
28111
|
return (node === null || node === void 0 ? void 0 : node.concatTokens()) !== "''";
|
|
28050
28112
|
}
|
|
28051
28113
|
return false;
|
|
28052
28114
|
}
|
|
28053
28115
|
else if (target instanceof basic_1.StringType) {
|
|
28054
|
-
if (((
|
|
28116
|
+
if (((_e = source.getAbstractTypeData()) === null || _e === void 0 ? void 0 : _e.derivedFromConstant) === true) {
|
|
28055
28117
|
return true;
|
|
28056
28118
|
}
|
|
28057
28119
|
return false;
|
|
@@ -28059,7 +28121,7 @@ class TypeUtils {
|
|
|
28059
28121
|
}
|
|
28060
28122
|
else if (source instanceof basic_1.HexType) {
|
|
28061
28123
|
if (target instanceof basic_1.HexType) {
|
|
28062
|
-
if (((
|
|
28124
|
+
if (((_f = source.getAbstractTypeData()) === null || _f === void 0 ? void 0 : _f.derivedFromConstant) === true) {
|
|
28063
28125
|
return source.getLength() <= target.getLength();
|
|
28064
28126
|
}
|
|
28065
28127
|
return source.getLength() === target.getLength();
|
|
@@ -28068,7 +28130,7 @@ class TypeUtils {
|
|
|
28068
28130
|
return false;
|
|
28069
28131
|
}
|
|
28070
28132
|
else if (target instanceof basic_1.IntegerType || target instanceof basic_1.Integer8Type) {
|
|
28071
|
-
if (((
|
|
28133
|
+
if (((_g = source.getAbstractTypeData()) === null || _g === void 0 ? void 0 : _g.derivedFromConstant) === true) {
|
|
28072
28134
|
return true;
|
|
28073
28135
|
}
|
|
28074
28136
|
return false;
|
|
@@ -28079,13 +28141,13 @@ class TypeUtils {
|
|
|
28079
28141
|
return false;
|
|
28080
28142
|
}
|
|
28081
28143
|
else if (target instanceof basic_1.CharacterType) {
|
|
28082
|
-
if (((
|
|
28144
|
+
if (((_h = source.getAbstractTypeData()) === null || _h === void 0 ? void 0 : _h.derivedFromConstant) === true) {
|
|
28083
28145
|
return true;
|
|
28084
28146
|
}
|
|
28085
28147
|
return false;
|
|
28086
28148
|
}
|
|
28087
28149
|
else if (target instanceof basic_1.IntegerType) {
|
|
28088
|
-
if (((
|
|
28150
|
+
if (((_j = source.getAbstractTypeData()) === null || _j === void 0 ? void 0 : _j.derivedFromConstant) === true) {
|
|
28089
28151
|
return true;
|
|
28090
28152
|
}
|
|
28091
28153
|
return false;
|
|
@@ -28095,7 +28157,7 @@ class TypeUtils {
|
|
|
28095
28157
|
return false;
|
|
28096
28158
|
}
|
|
28097
28159
|
else if (target instanceof basic_1.XSequenceType || target instanceof basic_1.XStringType) {
|
|
28098
|
-
if (((
|
|
28160
|
+
if (((_k = source.getAbstractTypeData()) === null || _k === void 0 ? void 0 : _k.derivedFromConstant) === true) {
|
|
28099
28161
|
return true;
|
|
28100
28162
|
}
|
|
28101
28163
|
return false;
|
|
@@ -28139,12 +28201,16 @@ class TypeUtils {
|
|
|
28139
28201
|
return false;
|
|
28140
28202
|
}
|
|
28141
28203
|
else if (target instanceof basic_1.Integer8Type || target instanceof basic_1.PackedType) {
|
|
28142
|
-
if (((
|
|
28204
|
+
if (((_l = source.getAbstractTypeData()) === null || _l === void 0 ? void 0 : _l.derivedFromConstant) === true) {
|
|
28143
28205
|
return true;
|
|
28144
28206
|
}
|
|
28145
28207
|
return false;
|
|
28146
28208
|
}
|
|
28147
28209
|
}
|
|
28210
|
+
else if (source instanceof basic_1.PackedType && target instanceof basic_1.PackedType) {
|
|
28211
|
+
return source.getLength() === target.getLength()
|
|
28212
|
+
&& source.getDecimals() === target.getDecimals();
|
|
28213
|
+
}
|
|
28148
28214
|
else if (source instanceof basic_1.FloatType) {
|
|
28149
28215
|
if (target instanceof basic_1.IntegerType) {
|
|
28150
28216
|
return false;
|
|
@@ -29419,7 +29485,7 @@ class BasicTypes {
|
|
|
29419
29485
|
}
|
|
29420
29486
|
}
|
|
29421
29487
|
if (val === undefined) {
|
|
29422
|
-
return
|
|
29488
|
+
return undefined;
|
|
29423
29489
|
}
|
|
29424
29490
|
const intExpr = val.findFirstExpression(Expressions.Integer);
|
|
29425
29491
|
if (intExpr) {
|
|
@@ -30058,18 +30124,30 @@ exports.ComponentCompare = void 0;
|
|
|
30058
30124
|
const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
|
|
30059
30125
|
const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
|
|
30060
30126
|
const component_chain_1 = __webpack_require__(/*! ./component_chain */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/component_chain.js");
|
|
30127
|
+
const component_name_1 = __webpack_require__(/*! ./component_name */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/component_name.js");
|
|
30061
30128
|
const source_1 = __webpack_require__(/*! ./source */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js");
|
|
30062
30129
|
class ComponentCompare {
|
|
30063
|
-
static runSyntax(node, input,
|
|
30130
|
+
static runSyntax(node, input, leftType, rightType) {
|
|
30064
30131
|
const chain = node.findDirectExpression(Expressions.ComponentChainSimple);
|
|
30065
30132
|
if (chain === undefined) {
|
|
30066
30133
|
const message = "ComponentCompare, chain not found";
|
|
30067
30134
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
30068
30135
|
return;
|
|
30069
30136
|
}
|
|
30070
|
-
const fieldType = component_chain_1.ComponentChain.runSyntax(
|
|
30137
|
+
const fieldType = component_chain_1.ComponentChain.runSyntax(leftType, chain, input);
|
|
30071
30138
|
for (const s of node.findDirectExpressions(Expressions.Source)) {
|
|
30072
|
-
|
|
30139
|
+
const fieldChain = s.findDirectExpression(Expressions.FieldChain);
|
|
30140
|
+
const first = fieldChain === null || fieldChain === void 0 ? void 0 : fieldChain.getFirstChild();
|
|
30141
|
+
if (rightType && fieldChain && first) {
|
|
30142
|
+
let sourceType = rightType;
|
|
30143
|
+
if (first.concatTokens().toUpperCase() !== "TABLE_LINE") {
|
|
30144
|
+
sourceType = component_name_1.ComponentName.runSyntax(sourceType, first, input);
|
|
30145
|
+
}
|
|
30146
|
+
component_chain_1.ComponentChain.runSyntax(sourceType, fieldChain, input);
|
|
30147
|
+
}
|
|
30148
|
+
else {
|
|
30149
|
+
source_1.Source.runSyntax(s, input, fieldType);
|
|
30150
|
+
}
|
|
30073
30151
|
}
|
|
30074
30152
|
}
|
|
30075
30153
|
}
|
|
@@ -30208,15 +30286,15 @@ exports.ComponentCond = void 0;
|
|
|
30208
30286
|
const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
|
|
30209
30287
|
const component_compare_1 = __webpack_require__(/*! ./component_compare */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/component_compare.js");
|
|
30210
30288
|
class ComponentCond {
|
|
30211
|
-
static runSyntax(node, input,
|
|
30289
|
+
static runSyntax(node, input, leftType, rightType) {
|
|
30212
30290
|
for (const t of node.findDirectExpressions(Expressions.ComponentCondSub)) {
|
|
30213
30291
|
const c = t.findDirectExpression(Expressions.ComponentCond);
|
|
30214
30292
|
if (c) {
|
|
30215
|
-
ComponentCond.runSyntax(c, input,
|
|
30293
|
+
ComponentCond.runSyntax(c, input, leftType, rightType);
|
|
30216
30294
|
}
|
|
30217
30295
|
}
|
|
30218
30296
|
for (const t of node.findDirectExpressions(Expressions.ComponentCompare)) {
|
|
30219
|
-
component_compare_1.ComponentCompare.runSyntax(t, input,
|
|
30297
|
+
component_compare_1.ComponentCompare.runSyntax(t, input, leftType, rightType);
|
|
30220
30298
|
}
|
|
30221
30299
|
}
|
|
30222
30300
|
}
|
|
@@ -31434,21 +31512,14 @@ class FilterBody {
|
|
|
31434
31512
|
if (node === undefined) {
|
|
31435
31513
|
return targetType;
|
|
31436
31514
|
}
|
|
31437
|
-
|
|
31515
|
+
const types = [];
|
|
31438
31516
|
for (const s of node.findDirectExpressions(Expressions.Source)) {
|
|
31439
|
-
|
|
31440
|
-
type = source_1.Source.runSyntax(s, input);
|
|
31441
|
-
}
|
|
31442
|
-
else {
|
|
31443
|
-
source_1.Source.runSyntax(s, input);
|
|
31444
|
-
}
|
|
31517
|
+
types.push(source_1.Source.runSyntax(s, input));
|
|
31445
31518
|
}
|
|
31446
|
-
|
|
31447
|
-
|
|
31448
|
-
|
|
31449
|
-
|
|
31450
|
-
}
|
|
31451
|
-
return type ? type : targetType;
|
|
31519
|
+
const inputRowType = types[0] instanceof basic_1.TableType ? types[0].getRowType() : undefined;
|
|
31520
|
+
const filterRowType = types[1] instanceof basic_1.TableType ? types[1].getRowType() : undefined;
|
|
31521
|
+
component_cond_1.ComponentCond.runSyntax(node.findDirectExpression(Expressions.ComponentCond), input, inputRowType, filterRowType);
|
|
31522
|
+
return types[0] ? types[0] : targetType;
|
|
31452
31523
|
}
|
|
31453
31524
|
}
|
|
31454
31525
|
exports.FilterBody = FilterBody;
|
|
@@ -31939,7 +32010,8 @@ class InlineFieldDefinition {
|
|
|
31939
32010
|
static runSyntax(node, input, targetType) {
|
|
31940
32011
|
var _a;
|
|
31941
32012
|
let type = undefined;
|
|
31942
|
-
const field = (_a = node.findDirectExpression(Expressions.Field)
|
|
32013
|
+
const field = (_a = (node.findDirectExpression(Expressions.Field)
|
|
32014
|
+
|| node.findDirectExpression(Expressions.FieldSymbol))) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
31943
32015
|
if (field === undefined) {
|
|
31944
32016
|
return undefined;
|
|
31945
32017
|
}
|
|
@@ -32929,6 +33001,9 @@ class MethodParam {
|
|
|
32929
33001
|
else if (concat === "TYPE X" || concat.startsWith("TYPE X ")) {
|
|
32930
33002
|
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, basic_1.XGenericType.get(), meta);
|
|
32931
33003
|
}
|
|
33004
|
+
else if (concat === "TYPE P" || concat.startsWith("TYPE P ")) {
|
|
33005
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, basic_1.PGenericType.get(), meta);
|
|
33006
|
+
}
|
|
32932
33007
|
const found = new basic_types_1.BasicTypes(input).parseType(type);
|
|
32933
33008
|
if (found) {
|
|
32934
33009
|
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, found, meta);
|
|
@@ -35804,9 +35879,11 @@ class Target {
|
|
|
35804
35879
|
else if (context instanceof basic_1.TableType && context.isWithHeader() && context.getRowType() instanceof unknown_type_1.UnknownType) {
|
|
35805
35880
|
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
35806
35881
|
}
|
|
35882
|
+
else if (context instanceof basic_1.TableType && context.isWithHeader() && context.getRowType() instanceof basic_1.VoidType) {
|
|
35883
|
+
return context.getRowType();
|
|
35884
|
+
}
|
|
35807
35885
|
else if (!(context instanceof basic_1.StructureType)
|
|
35808
35886
|
&& !(context instanceof basic_1.TableType && context.isWithHeader() && context.getRowType() instanceof basic_1.StructureType)
|
|
35809
|
-
&& !(context instanceof basic_1.TableType && context.isWithHeader() && context.getRowType() instanceof basic_1.VoidType)
|
|
35810
35887
|
&& !(context instanceof basic_1.VoidType)) {
|
|
35811
35888
|
const message = "Not a structure, target, " + (context === null || context === void 0 ? void 0 : context.constructor.name) + ", " + current.concatTokens();
|
|
35812
35889
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
@@ -36206,7 +36283,11 @@ class ValueBody {
|
|
|
36206
36283
|
field_assignment_1.FieldAssignment.runSyntax(s, input, rowType);
|
|
36207
36284
|
}
|
|
36208
36285
|
for (const s of foo.findDirectExpressions(Expressions.Source)) {
|
|
36209
|
-
source_1.Source.runSyntax(s, input, rowType);
|
|
36286
|
+
const sourceType = source_1.Source.runSyntax(s, input, rowType);
|
|
36287
|
+
if (rowType instanceof basic_1.StringType && sourceType instanceof basic_1.CharacterType) {
|
|
36288
|
+
const message = "VALUE, source type CharacterType not compatible with StringType";
|
|
36289
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, s.getFirstToken(), message));
|
|
36290
|
+
}
|
|
36210
36291
|
}
|
|
36211
36292
|
}
|
|
36212
36293
|
if (letScoped === true) {
|
|
@@ -41919,9 +42000,13 @@ class InsertInternal {
|
|
|
41919
42000
|
&& node.findDirectTokenByText("LINES") === undefined) {
|
|
41920
42001
|
targetType = targetType.getRowType();
|
|
41921
42002
|
}
|
|
41922
|
-
|
|
41923
|
-
|
|
41924
|
-
|
|
42003
|
+
const initial = node.findDirectTokenByText("INITIAL") !== undefined;
|
|
42004
|
+
let source;
|
|
42005
|
+
if (initial === false) {
|
|
42006
|
+
source = node.findDirectExpression(Expressions.SimpleSource4);
|
|
42007
|
+
if (source === undefined) {
|
|
42008
|
+
source = node.findDirectExpression(Expressions.Source);
|
|
42009
|
+
}
|
|
41925
42010
|
}
|
|
41926
42011
|
const sourceType = source ? source_1.Source.runSyntax(source, input, targetType) : targetType;
|
|
41927
42012
|
if (targetType === undefined
|
|
@@ -41943,7 +42028,7 @@ class InsertInternal {
|
|
|
41943
42028
|
fstarget_1.FSTarget.runSyntax(afterAssigning, input, sourceType);
|
|
41944
42029
|
}
|
|
41945
42030
|
}
|
|
41946
|
-
if (
|
|
42031
|
+
if (initial === false) {
|
|
41947
42032
|
let error = false;
|
|
41948
42033
|
if (sourceType instanceof basic_1.IntegerType && targetType instanceof basic_1.Integer8Type) {
|
|
41949
42034
|
error = true;
|
|
@@ -43026,6 +43111,7 @@ const inline_data_1 = __webpack_require__(/*! ../expressions/inline_data */ "./n
|
|
|
43026
43111
|
const _type_utils_1 = __webpack_require__(/*! ../_type_utils */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js");
|
|
43027
43112
|
const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
|
|
43028
43113
|
const dereference_1 = __webpack_require__(/*! ../expressions/dereference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dereference.js");
|
|
43114
|
+
const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
|
|
43029
43115
|
class Move {
|
|
43030
43116
|
runSyntax(node, input) {
|
|
43031
43117
|
const targets = node.findDirectExpressions(Expressions.Target);
|
|
@@ -43061,6 +43147,9 @@ class Move {
|
|
|
43061
43147
|
sourceType = dereference_1.Dereference.runSyntax(node, sourceType, input);
|
|
43062
43148
|
}
|
|
43063
43149
|
if (inline) {
|
|
43150
|
+
if (sourceType instanceof basic_1.PackedType && (source === null || source === void 0 ? void 0 : source.findDirectExpression(Expressions.ArithOperator))) {
|
|
43151
|
+
sourceType = new basic_1.PackedType(8, 0);
|
|
43152
|
+
}
|
|
43064
43153
|
inline_data_1.InlineData.runSyntax(inline, input, sourceType);
|
|
43065
43154
|
targetType = sourceType;
|
|
43066
43155
|
}
|
|
@@ -46333,7 +46422,7 @@ class Type {
|
|
|
46333
46422
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
46334
46423
|
return new _typed_identifier_1.TypedIdentifier(found.getToken(), input.filename, basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey));
|
|
46335
46424
|
}
|
|
46336
|
-
if (input.scope.
|
|
46425
|
+
if (input.scope.isAnyOO() && found.getType() instanceof basic_1.PackedType) {
|
|
46337
46426
|
const concat = node.concatTokens().toUpperCase();
|
|
46338
46427
|
if ((concat.includes(" TYPE P ") || concat.includes(" TYPE P."))
|
|
46339
46428
|
&& concat.includes(" DECIMALS ") === false) {
|
|
@@ -47034,7 +47123,11 @@ class Write {
|
|
|
47034
47123
|
}
|
|
47035
47124
|
const target = node.findDirectExpression(Expressions.Target);
|
|
47036
47125
|
if (target) {
|
|
47037
|
-
target_1.Target.runSyntax(target, input);
|
|
47126
|
+
const targetType = target_1.Target.runSyntax(target, input);
|
|
47127
|
+
if (new _type_utils_1.TypeUtils(input.scope).isCharLikeField(targetType) === false) {
|
|
47128
|
+
const message = `"${target.concatTokens()}" must be a character-like field (data type C, N, D, or T, got "${targetType === null || targetType === void 0 ? void 0 : targetType.constructor.name}")`;
|
|
47129
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, target.getFirstToken(), message));
|
|
47130
|
+
}
|
|
47038
47131
|
}
|
|
47039
47132
|
}
|
|
47040
47133
|
}
|
|
@@ -47088,6 +47181,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
47088
47181
|
exports.ClassData = void 0;
|
|
47089
47182
|
const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
|
|
47090
47183
|
const Statements = __importStar(__webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js"));
|
|
47184
|
+
const Structures = __importStar(__webpack_require__(/*! ../../3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js"));
|
|
47091
47185
|
const nodes_1 = __webpack_require__(/*! ../../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
|
|
47092
47186
|
const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
|
|
47093
47187
|
const Basic = __importStar(__webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js"));
|
|
@@ -47106,7 +47200,14 @@ class ClassData {
|
|
|
47106
47200
|
values[found.getName()] = found.getValue();
|
|
47107
47201
|
}
|
|
47108
47202
|
}
|
|
47109
|
-
|
|
47203
|
+
else if (c instanceof nodes_1.StructureNode && ctyp instanceof Structures.ClassData) {
|
|
47204
|
+
const found = new ClassData().runSyntax(c, input);
|
|
47205
|
+
if (found) {
|
|
47206
|
+
components.push({ name: found.getName(), type: found.getType() });
|
|
47207
|
+
values[found.getName()] = found.getValue();
|
|
47208
|
+
}
|
|
47209
|
+
}
|
|
47210
|
+
// todo, INCLUDES
|
|
47110
47211
|
}
|
|
47111
47212
|
return new _typed_identifier_1.TypedIdentifier(name, input.filename, new Basic.StructureType(components), ["static" /* IdentifierMeta.Static */], values);
|
|
47112
47213
|
}
|
|
@@ -50619,6 +50720,7 @@ __exportStar(__webpack_require__(/*! ./numeric_generic_type */ "./node_modules/@
|
|
|
50619
50720
|
__exportStar(__webpack_require__(/*! ./numeric_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/numeric_type.js"), exports);
|
|
50620
50721
|
__exportStar(__webpack_require__(/*! ./object_reference_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/object_reference_type.js"), exports);
|
|
50621
50722
|
__exportStar(__webpack_require__(/*! ./packed_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/packed_type.js"), exports);
|
|
50723
|
+
__exportStar(__webpack_require__(/*! ./pgeneric_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/pgeneric_type.js"), exports);
|
|
50622
50724
|
__exportStar(__webpack_require__(/*! ./simple_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/simple_type.js"), exports);
|
|
50623
50725
|
__exportStar(__webpack_require__(/*! ./string_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/string_type.js"), exports);
|
|
50624
50726
|
__exportStar(__webpack_require__(/*! ./structure_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/structure_type.js"), exports);
|
|
@@ -50892,6 +50994,46 @@ exports.PackedType = PackedType;
|
|
|
50892
50994
|
|
|
50893
50995
|
/***/ },
|
|
50894
50996
|
|
|
50997
|
+
/***/ "./node_modules/@abaplint/core/build/src/abap/types/basic/pgeneric_type.js"
|
|
50998
|
+
/*!*********************************************************************************!*\
|
|
50999
|
+
!*** ./node_modules/@abaplint/core/build/src/abap/types/basic/pgeneric_type.js ***!
|
|
51000
|
+
\*********************************************************************************/
|
|
51001
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
51002
|
+
|
|
51003
|
+
"use strict";
|
|
51004
|
+
|
|
51005
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
51006
|
+
exports.PGenericType = void 0;
|
|
51007
|
+
const _abstract_type_1 = __webpack_require__(/*! ./_abstract_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/_abstract_type.js");
|
|
51008
|
+
class PGenericType extends _abstract_type_1.AbstractType {
|
|
51009
|
+
static get() {
|
|
51010
|
+
return this.singleton;
|
|
51011
|
+
}
|
|
51012
|
+
constructor() {
|
|
51013
|
+
super();
|
|
51014
|
+
}
|
|
51015
|
+
toText() {
|
|
51016
|
+
return "```p```";
|
|
51017
|
+
}
|
|
51018
|
+
isGeneric() {
|
|
51019
|
+
return true;
|
|
51020
|
+
}
|
|
51021
|
+
toABAP() {
|
|
51022
|
+
throw new Error("p, generic");
|
|
51023
|
+
}
|
|
51024
|
+
containsVoid() {
|
|
51025
|
+
return false;
|
|
51026
|
+
}
|
|
51027
|
+
toCDS() {
|
|
51028
|
+
return "abap.TODO_PGENERIC";
|
|
51029
|
+
}
|
|
51030
|
+
}
|
|
51031
|
+
exports.PGenericType = PGenericType;
|
|
51032
|
+
PGenericType.singleton = new PGenericType();
|
|
51033
|
+
//# sourceMappingURL=pgeneric_type.js.map
|
|
51034
|
+
|
|
51035
|
+
/***/ },
|
|
51036
|
+
|
|
50895
51037
|
/***/ "./node_modules/@abaplint/core/build/src/abap/types/basic/simple_type.js"
|
|
50896
51038
|
/*!*******************************************************************************!*\
|
|
50897
51039
|
!*** ./node_modules/@abaplint/core/build/src/abap/types/basic/simple_type.js ***!
|
|
@@ -50904,6 +51046,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
50904
51046
|
exports.SimpleType = void 0;
|
|
50905
51047
|
const _abstract_type_1 = __webpack_require__(/*! ./_abstract_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/_abstract_type.js");
|
|
50906
51048
|
class SimpleType extends _abstract_type_1.AbstractType {
|
|
51049
|
+
static get() {
|
|
51050
|
+
return this.singleton;
|
|
51051
|
+
}
|
|
51052
|
+
constructor() {
|
|
51053
|
+
super();
|
|
51054
|
+
}
|
|
50907
51055
|
toText() {
|
|
50908
51056
|
return "```simple```";
|
|
50909
51057
|
}
|
|
@@ -50921,6 +51069,7 @@ class SimpleType extends _abstract_type_1.AbstractType {
|
|
|
50921
51069
|
}
|
|
50922
51070
|
}
|
|
50923
51071
|
exports.SimpleType = SimpleType;
|
|
51072
|
+
SimpleType.singleton = new SimpleType();
|
|
50924
51073
|
//# sourceMappingURL=simple_type.js.map
|
|
50925
51074
|
|
|
50926
51075
|
/***/ },
|
|
@@ -51878,6 +52027,7 @@ class ClassDefinition extends _identifier_1.Identifier {
|
|
|
51878
52027
|
// perform checks after everything has been initialized
|
|
51879
52028
|
this.checkInterfaceVisibility(input, node);
|
|
51880
52029
|
this.checkMethodsFromSuperClasses(input);
|
|
52030
|
+
this.checkClassNameLength(input);
|
|
51881
52031
|
this.checkMethodNameLength(input);
|
|
51882
52032
|
this.checkClassConstructorStatic(input);
|
|
51883
52033
|
}
|
|
@@ -51928,6 +52078,12 @@ class ClassDefinition extends _identifier_1.Identifier {
|
|
|
51928
52078
|
}
|
|
51929
52079
|
*/
|
|
51930
52080
|
///////////////////
|
|
52081
|
+
checkClassNameLength(input) {
|
|
52082
|
+
if (this.getName().length > 30) {
|
|
52083
|
+
const message = `Class name "${this.getName()}" is too long, maximum length is 30 characters`;
|
|
52084
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, this.getToken(), message));
|
|
52085
|
+
}
|
|
52086
|
+
}
|
|
51931
52087
|
findSuper(def, input) {
|
|
51932
52088
|
var _a;
|
|
51933
52089
|
const token = (_a = def === null || def === void 0 ? void 0 : def.findDirectExpression(expressions_1.SuperClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
@@ -55743,7 +55899,7 @@ class DDIC {
|
|
|
55743
55899
|
case "ANY":
|
|
55744
55900
|
return Types.AnyType.get({ qualifiedName: qualifiedName });
|
|
55745
55901
|
case "SIMPLE":
|
|
55746
|
-
return
|
|
55902
|
+
return Types.SimpleType.get();
|
|
55747
55903
|
case "%_C_POINTER":
|
|
55748
55904
|
return new Types.HexType(8, qualifiedName);
|
|
55749
55905
|
case "TABLE":
|
|
@@ -55781,7 +55937,7 @@ class DDIC {
|
|
|
55781
55937
|
return new Types.PackedType(length, 0, { qualifiedName: qualifiedName });
|
|
55782
55938
|
}
|
|
55783
55939
|
else {
|
|
55784
|
-
return new Types.PackedType(
|
|
55940
|
+
return new Types.PackedType(8, 0, { qualifiedName: qualifiedName });
|
|
55785
55941
|
}
|
|
55786
55942
|
case "C":
|
|
55787
55943
|
if (length) {
|
|
@@ -56009,14 +56165,14 @@ class DDIC {
|
|
|
56009
56165
|
case "DF16_DEC": // 1 <= len <= 31
|
|
56010
56166
|
case "DF34_DEC": // 1 <= len <= 31
|
|
56011
56167
|
case "CURR": // 1 <= len <= 31
|
|
56012
|
-
case "QUAN": // 1 <= len <= 31
|
|
56168
|
+
case "QUAN": { // 1 <= len <= 31
|
|
56013
56169
|
if (input.length === undefined) {
|
|
56014
56170
|
return new Types.UnknownType(input.text + " unknown length, " + input.infoText, input.infoText);
|
|
56015
56171
|
}
|
|
56016
|
-
|
|
56017
|
-
|
|
56018
|
-
|
|
56019
|
-
|
|
56172
|
+
const packedLength = Math.ceil((parseInt(input.length, 10) + 1) / 2);
|
|
56173
|
+
const decimals = input.decimals === undefined ? 0 : parseInt(input.decimals, 10);
|
|
56174
|
+
return new Types.PackedType(packedLength, decimals, extra);
|
|
56175
|
+
}
|
|
56020
56176
|
case "ACCP":
|
|
56021
56177
|
return new Types.CharacterType(6, extra); // YYYYMM
|
|
56022
56178
|
case "LANG":
|
|
@@ -56404,7 +56560,7 @@ exports.DDLAspect = DDLAspect;
|
|
|
56404
56560
|
"use strict";
|
|
56405
56561
|
|
|
56406
56562
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
56407
|
-
exports.DDLValueHelp = exports.DDLForeignKey = exports.DDLForeignKeyTarget = void 0;
|
|
56563
|
+
exports.DDLReference = exports.DDLValueHelp = exports.DDLForeignKey = exports.DDLForeignKeyTarget = void 0;
|
|
56408
56564
|
const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
|
|
56409
56565
|
const ddl_literal_1 = __webpack_require__(/*! ./ddl_literal */ "./node_modules/@abaplint/core/build/src/ddl/expressions/ddl_literal.js");
|
|
56410
56566
|
const ddl_name_1 = __webpack_require__(/*! ./ddl_name */ "./node_modules/@abaplint/core/build/src/ddl/expressions/ddl_name.js");
|
|
@@ -56428,6 +56584,12 @@ class DDLValueHelp extends combi_1.Expression {
|
|
|
56428
56584
|
}
|
|
56429
56585
|
}
|
|
56430
56586
|
exports.DDLValueHelp = DDLValueHelp;
|
|
56587
|
+
class DDLReference extends combi_1.Expression {
|
|
56588
|
+
getRunnable() {
|
|
56589
|
+
return (0, combi_1.seq)("WITH", "REFERENCE", "TABLE", ddl_name_1.DDLName, "AND", "REFERENCE", "FIELD", ddl_name_1.DDLName);
|
|
56590
|
+
}
|
|
56591
|
+
}
|
|
56592
|
+
exports.DDLReference = DDLReference;
|
|
56431
56593
|
//# sourceMappingURL=ddl_clauses.js.map
|
|
56432
56594
|
|
|
56433
56595
|
/***/ },
|
|
@@ -56703,7 +56865,7 @@ const ddl_name_1 = __webpack_require__(/*! ./ddl_name */ "./node_modules/@abapli
|
|
|
56703
56865
|
const ddl_type_1 = __webpack_require__(/*! ./ddl_type */ "./node_modules/@abaplint/core/build/src/ddl/expressions/ddl_type.js");
|
|
56704
56866
|
class DDLTableField extends combi_1.Expression {
|
|
56705
56867
|
getRunnable() {
|
|
56706
|
-
const trailingClause = (0, combi_1.alt)(ddl_clauses_1.DDLForeignKey, ddl_clauses_1.DDLValueHelp);
|
|
56868
|
+
const trailingClause = (0, combi_1.alt)(ddl_clauses_1.DDLForeignKey, ddl_clauses_1.DDLReference, ddl_clauses_1.DDLValueHelp);
|
|
56707
56869
|
return (0, combi_1.seq)((0, combi_1.star)(expressions_1.CDSAnnotation), (0, combi_1.optPrio)("KEY"), ddl_name_1.DDLName, ":", ddl_type_1.DDLType, (0, combi_1.optPrio)("NOT NULL"), (0, combi_1.star)(trailingClause), ";");
|
|
56708
56870
|
}
|
|
56709
56871
|
}
|
|
@@ -60338,7 +60500,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
60338
60500
|
return this.textsTranslations;
|
|
60339
60501
|
}
|
|
60340
60502
|
findTexts(parsed) {
|
|
60341
|
-
var _a, _b, _c, _d, _e, _f
|
|
60503
|
+
var _a, _b, _c, _d, _e, _f;
|
|
60504
|
+
var _g;
|
|
60342
60505
|
this.texts = {};
|
|
60343
60506
|
if (((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.TPOOL) === null || _d === void 0 ? void 0 : _d.item) === undefined) {
|
|
60344
60507
|
return;
|
|
@@ -60351,7 +60514,7 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
60351
60514
|
if (id !== "R" && t.KEY === undefined) {
|
|
60352
60515
|
continue;
|
|
60353
60516
|
}
|
|
60354
|
-
const key = (
|
|
60517
|
+
const key = (_f = ((_g = t.KEY) !== null && _g !== void 0 ? _g : t.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
|
|
60355
60518
|
if (key === undefined) {
|
|
60356
60519
|
continue;
|
|
60357
60520
|
}
|
|
@@ -60362,7 +60525,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
60362
60525
|
}
|
|
60363
60526
|
}
|
|
60364
60527
|
findTextsTranslations(parsed) {
|
|
60365
|
-
var _a, _b, _c, _d, _e, _f
|
|
60528
|
+
var _a, _b, _c, _d, _e, _f;
|
|
60529
|
+
var _g;
|
|
60366
60530
|
this.textsTranslations = [];
|
|
60367
60531
|
const values = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.I18N_TPOOL) === null || _d === void 0 ? void 0 : _d.item;
|
|
60368
60532
|
if (values === undefined) {
|
|
@@ -60371,7 +60535,7 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
60371
60535
|
for (const langItem of (0, xml_utils_1.xmlToArray)(values)) {
|
|
60372
60536
|
const textElements = {};
|
|
60373
60537
|
for (const item of (0, xml_utils_1.xmlToArray)((_e = langItem.TEXTPOOL) === null || _e === void 0 ? void 0 : _e.item)) {
|
|
60374
|
-
const key = (
|
|
60538
|
+
const key = (_f = ((_g = item.KEY) !== null && _g !== void 0 ? _g : item.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
|
|
60375
60539
|
if (key !== undefined) {
|
|
60376
60540
|
textElements[key] = { entry: (0, xml_utils_1.unescape)(item.ENTRY), maxLength: parseInt(item.LENGTH, 10) };
|
|
60377
60541
|
}
|
|
@@ -62929,11 +63093,13 @@ class Domain extends _abstract_object_1.AbstractObject {
|
|
|
62929
63093
|
return { updated: true, runtime: end - start };
|
|
62930
63094
|
}
|
|
62931
63095
|
getFixedValues() {
|
|
62932
|
-
var _a
|
|
63096
|
+
var _a;
|
|
63097
|
+
var _b;
|
|
62933
63098
|
return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.values) !== null && _b !== void 0 ? _b : [];
|
|
62934
63099
|
}
|
|
62935
63100
|
getFixedValuesTranslations() {
|
|
62936
|
-
var _a
|
|
63101
|
+
var _a;
|
|
63102
|
+
var _b;
|
|
62937
63103
|
return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.valuesTranslations) !== null && _b !== void 0 ? _b : [];
|
|
62938
63104
|
}
|
|
62939
63105
|
}
|
|
@@ -66707,7 +66873,8 @@ class RenameICFService {
|
|
|
66707
66873
|
this.reg = reg;
|
|
66708
66874
|
}
|
|
66709
66875
|
buildEdits(obj, oldName, newName) {
|
|
66710
|
-
var _a, _b
|
|
66876
|
+
var _a, _b;
|
|
66877
|
+
var _c, _d;
|
|
66711
66878
|
if (!(obj instanceof __1.ICFService)) {
|
|
66712
66879
|
throw new Error("RenameICFService, not a ICF Service");
|
|
66713
66880
|
}
|
|
@@ -66732,8 +66899,8 @@ class RenameICFService {
|
|
|
66732
66899
|
}
|
|
66733
66900
|
return newName;
|
|
66734
66901
|
})();
|
|
66735
|
-
const cleanOldName = (
|
|
66736
|
-
const cleanNewName = (_d = (
|
|
66902
|
+
const cleanOldName = (_c = (_a = oldName.match(/^[^ ]+/)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _c !== void 0 ? _c : oldName;
|
|
66903
|
+
const cleanNewName = (_d = (_b = newName.match(/^[^ ]+/)) === null || _b === void 0 ? void 0 : _b[0]) !== null && _d !== void 0 ? _d : newName;
|
|
66737
66904
|
let changes = [];
|
|
66738
66905
|
const helper = new renamer_helper_1.RenamerHelper(this.reg);
|
|
66739
66906
|
changes = changes.concat(helper.buildURLFileEdits(obj, cleanOldName, cleanNewName));
|
|
@@ -67920,6 +68087,13 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
67920
68087
|
}
|
|
67921
68088
|
return (_a = this.parsedData) === null || _a === void 0 ? void 0 : _a.secondaryIndexes;
|
|
67922
68089
|
}
|
|
68090
|
+
getFields() {
|
|
68091
|
+
var _a;
|
|
68092
|
+
if (this.parsedData === undefined) {
|
|
68093
|
+
this.parseXML();
|
|
68094
|
+
}
|
|
68095
|
+
return (_a = this.parsedData) === null || _a === void 0 ? void 0 : _a.fields;
|
|
68096
|
+
}
|
|
67923
68097
|
getAllowedNaming() {
|
|
67924
68098
|
let length = 30;
|
|
67925
68099
|
const regex = /^((\/[A-Z_\d]{3,8}\/)|[a-zA-Z0-9]{3}|CI_)\w+$/;
|
|
@@ -67972,9 +68146,13 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
67972
68146
|
&& this.parsedData.dataClass === "USER3") {
|
|
67973
68147
|
return new Types.UnknownType("Data class = USER3 not allowed in cloud");
|
|
67974
68148
|
}
|
|
67975
|
-
if (this.getTableCategory() === TableCategory.Transparent
|
|
67976
|
-
|
|
67977
|
-
|
|
68149
|
+
if (this.getTableCategory() === TableCategory.Transparent) {
|
|
68150
|
+
if (this.listKeys(reg).length === 0) {
|
|
68151
|
+
return new Types.UnknownType("Table " + this.getName() + " has no key fields");
|
|
68152
|
+
}
|
|
68153
|
+
else if (this.keyFieldsNotFirst()) {
|
|
68154
|
+
return new Types.UnknownType("Table " + this.getName() + " key fields must be first");
|
|
68155
|
+
}
|
|
67978
68156
|
}
|
|
67979
68157
|
if (this.parsedType) {
|
|
67980
68158
|
return this.parsedType;
|
|
@@ -68150,6 +68328,21 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
68150
68328
|
return this.parsedData.enhancementCategory;
|
|
68151
68329
|
}
|
|
68152
68330
|
///////////////
|
|
68331
|
+
keyFieldsNotFirst() {
|
|
68332
|
+
var _a;
|
|
68333
|
+
let seenNonKey = false;
|
|
68334
|
+
for (const field of ((_a = this.parsedData) === null || _a === void 0 ? void 0 : _a.fields) || []) {
|
|
68335
|
+
if (field.KEYFLAG === "X") {
|
|
68336
|
+
if (seenNonKey === true) {
|
|
68337
|
+
return true;
|
|
68338
|
+
}
|
|
68339
|
+
}
|
|
68340
|
+
else {
|
|
68341
|
+
seenNonKey = true;
|
|
68342
|
+
}
|
|
68343
|
+
}
|
|
68344
|
+
return false;
|
|
68345
|
+
}
|
|
68153
68346
|
parseXML() {
|
|
68154
68347
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
68155
68348
|
const parsed = super.parseRaw2();
|
|
@@ -68186,6 +68379,8 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
68186
68379
|
KEYFLAG: field.KEYFLAG,
|
|
68187
68380
|
GROUPNAME: field.GROUPNAME,
|
|
68188
68381
|
CHECKTABLE: field.CHECKTABLE,
|
|
68382
|
+
REFTABLE: field.REFTABLE,
|
|
68383
|
+
REFFIELD: field.REFFIELD,
|
|
68189
68384
|
REFTYPE: field.REFTYPE,
|
|
68190
68385
|
DDTEXT: field.DDTEXT,
|
|
68191
68386
|
});
|
|
@@ -69092,7 +69287,8 @@ class WebMIME extends _abstract_object_1.AbstractObject {
|
|
|
69092
69287
|
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.params[name.toLowerCase()];
|
|
69093
69288
|
}
|
|
69094
69289
|
getParameters() {
|
|
69095
|
-
var _a
|
|
69290
|
+
var _a;
|
|
69291
|
+
var _b;
|
|
69096
69292
|
this.parse();
|
|
69097
69293
|
return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {};
|
|
69098
69294
|
}
|
|
@@ -69723,7 +69919,7 @@ class Registry {
|
|
|
69723
69919
|
}
|
|
69724
69920
|
static abaplintVersion() {
|
|
69725
69921
|
// magic, see build script "version.js"
|
|
69726
|
-
return "2.120.
|
|
69922
|
+
return "2.120.18";
|
|
69727
69923
|
}
|
|
69728
69924
|
getDDICReferences() {
|
|
69729
69925
|
return this.ddicReferences;
|
|
@@ -83523,6 +83719,7 @@ __exportStar(__webpack_require__(/*! ./no_comments_between_methods */ "./node_mo
|
|
|
83523
83719
|
__exportStar(__webpack_require__(/*! ./no_external_form_calls */ "./node_modules/@abaplint/core/build/src/rules/no_external_form_calls.js"), exports);
|
|
83524
83720
|
__exportStar(__webpack_require__(/*! ./no_inline_in_optional_branches */ "./node_modules/@abaplint/core/build/src/rules/no_inline_in_optional_branches.js"), exports);
|
|
83525
83721
|
__exportStar(__webpack_require__(/*! ./no_macros */ "./node_modules/@abaplint/core/build/src/rules/no_macros.js"), exports);
|
|
83722
|
+
__exportStar(__webpack_require__(/*! ./no_mandt_in_database_operations */ "./node_modules/@abaplint/core/build/src/rules/no_mandt_in_database_operations.js"), exports);
|
|
83526
83723
|
__exportStar(__webpack_require__(/*! ./no_prefixes */ "./node_modules/@abaplint/core/build/src/rules/no_prefixes.js"), exports);
|
|
83527
83724
|
__exportStar(__webpack_require__(/*! ./no_public_attributes */ "./node_modules/@abaplint/core/build/src/rules/no_public_attributes.js"), exports);
|
|
83528
83725
|
__exportStar(__webpack_require__(/*! ./no_yoda_conditions */ "./node_modules/@abaplint/core/build/src/rules/no_yoda_conditions.js"), exports);
|
|
@@ -88000,6 +88197,153 @@ exports.NoMacros = NoMacros;
|
|
|
88000
88197
|
|
|
88001
88198
|
/***/ },
|
|
88002
88199
|
|
|
88200
|
+
/***/ "./node_modules/@abaplint/core/build/src/rules/no_mandt_in_database_operations.js"
|
|
88201
|
+
/*!****************************************************************************************!*\
|
|
88202
|
+
!*** ./node_modules/@abaplint/core/build/src/rules/no_mandt_in_database_operations.js ***!
|
|
88203
|
+
\****************************************************************************************/
|
|
88204
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
88205
|
+
|
|
88206
|
+
"use strict";
|
|
88207
|
+
|
|
88208
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
88209
|
+
if (k2 === undefined) k2 = k;
|
|
88210
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
88211
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
88212
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
88213
|
+
}
|
|
88214
|
+
Object.defineProperty(o, k2, desc);
|
|
88215
|
+
}) : (function(o, m, k, k2) {
|
|
88216
|
+
if (k2 === undefined) k2 = k;
|
|
88217
|
+
o[k2] = m[k];
|
|
88218
|
+
}));
|
|
88219
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
88220
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
88221
|
+
}) : function(o, v) {
|
|
88222
|
+
o["default"] = v;
|
|
88223
|
+
});
|
|
88224
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
88225
|
+
var ownKeys = function(o) {
|
|
88226
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
88227
|
+
var ar = [];
|
|
88228
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
88229
|
+
return ar;
|
|
88230
|
+
};
|
|
88231
|
+
return ownKeys(o);
|
|
88232
|
+
};
|
|
88233
|
+
return function (mod) {
|
|
88234
|
+
if (mod && mod.__esModule) return mod;
|
|
88235
|
+
var result = {};
|
|
88236
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
88237
|
+
__setModuleDefault(result, mod);
|
|
88238
|
+
return result;
|
|
88239
|
+
};
|
|
88240
|
+
})();
|
|
88241
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
88242
|
+
exports.NoMandtInDatabaseOperations = exports.NoMandtInDatabaseOperationsConf = void 0;
|
|
88243
|
+
const Expressions = __importStar(__webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
|
|
88244
|
+
const Statements = __importStar(__webpack_require__(/*! ../abap/2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js"));
|
|
88245
|
+
const issue_1 = __webpack_require__(/*! ../issue */ "./node_modules/@abaplint/core/build/src/issue.js");
|
|
88246
|
+
const _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ "./node_modules/@abaplint/core/build/src/rules/_abap_rule.js");
|
|
88247
|
+
const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js");
|
|
88248
|
+
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
88249
|
+
class NoMandtInDatabaseOperationsConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
88250
|
+
}
|
|
88251
|
+
exports.NoMandtInDatabaseOperationsConf = NoMandtInDatabaseOperationsConf;
|
|
88252
|
+
class NoMandtInDatabaseOperations extends _abap_rule_1.ABAPRule {
|
|
88253
|
+
constructor() {
|
|
88254
|
+
super(...arguments);
|
|
88255
|
+
this.conf = new NoMandtInDatabaseOperationsConf();
|
|
88256
|
+
}
|
|
88257
|
+
getMetadata() {
|
|
88258
|
+
return {
|
|
88259
|
+
key: "no_mandt_in_database_operations",
|
|
88260
|
+
title: "No MANDT in database operations",
|
|
88261
|
+
shortDescription: "Do not specify the client in database operations; the ABAP runtime handles it automatically.",
|
|
88262
|
+
extendedInformation: "Only check for the name MANDT, not for the field type. The rule does not check for dynamic SQL.",
|
|
88263
|
+
tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Syntax],
|
|
88264
|
+
badExample: `SELECT * FROM zcustomers
|
|
88265
|
+
CLIENT SPECIFIED
|
|
88266
|
+
WHERE mandt = @sy-mandt
|
|
88267
|
+
INTO TABLE @DATA(customers).`,
|
|
88268
|
+
goodExample: `SELECT * FROM zcustomers
|
|
88269
|
+
INTO TABLE @DATA(customers).`,
|
|
88270
|
+
};
|
|
88271
|
+
}
|
|
88272
|
+
getConfig() {
|
|
88273
|
+
return this.conf;
|
|
88274
|
+
}
|
|
88275
|
+
setConfig(conf) {
|
|
88276
|
+
this.conf = conf;
|
|
88277
|
+
}
|
|
88278
|
+
runParsed(file) {
|
|
88279
|
+
const issues = [];
|
|
88280
|
+
for (const statement of file.getStatements()) {
|
|
88281
|
+
if (this.isDatabaseOperation(statement) === false) {
|
|
88282
|
+
continue;
|
|
88283
|
+
}
|
|
88284
|
+
const mandt = this.findMandtInCondition(statement);
|
|
88285
|
+
if (mandt !== undefined) {
|
|
88286
|
+
const issue = issue_1.Issue.atToken(file, mandt.getFirstToken(), this.getMetadata().title, this.getMetadata().key, this.conf.severity);
|
|
88287
|
+
issues.push(issue);
|
|
88288
|
+
continue;
|
|
88289
|
+
}
|
|
88290
|
+
const explicitClient = this.findExplicitClient(statement);
|
|
88291
|
+
if (explicitClient !== undefined) {
|
|
88292
|
+
const issue = issue_1.Issue.atToken(file, explicitClient, this.getMetadata().title, this.getMetadata().key, this.conf.severity);
|
|
88293
|
+
issues.push(issue);
|
|
88294
|
+
}
|
|
88295
|
+
}
|
|
88296
|
+
return issues;
|
|
88297
|
+
}
|
|
88298
|
+
isDatabaseOperation(statement) {
|
|
88299
|
+
const type = statement.get();
|
|
88300
|
+
return type instanceof Statements.DeleteDatabase
|
|
88301
|
+
|| type instanceof Statements.InsertDatabase
|
|
88302
|
+
|| type instanceof Statements.MergeDatabase
|
|
88303
|
+
|| type instanceof Statements.ModifyDatabase
|
|
88304
|
+
|| type instanceof Statements.OpenCursor
|
|
88305
|
+
|| type instanceof Statements.Select
|
|
88306
|
+
|| type instanceof Statements.SelectLoop
|
|
88307
|
+
|| type instanceof Statements.UpdateDatabase
|
|
88308
|
+
|| type instanceof Statements.With
|
|
88309
|
+
|| type instanceof Statements.WithLoop;
|
|
88310
|
+
}
|
|
88311
|
+
findMandtInCondition(statement) {
|
|
88312
|
+
for (const condition of statement.findAllExpressions(Expressions.SQLCond)) {
|
|
88313
|
+
const fields = condition.findAllExpressionsMulti([
|
|
88314
|
+
Expressions.SQLFieldName,
|
|
88315
|
+
Expressions.SQLAliasField,
|
|
88316
|
+
]);
|
|
88317
|
+
for (const field of fields) {
|
|
88318
|
+
const name = field.concatTokens().toUpperCase();
|
|
88319
|
+
if (name === "MANDT" || name.endsWith("~MANDT")) {
|
|
88320
|
+
return field;
|
|
88321
|
+
}
|
|
88322
|
+
}
|
|
88323
|
+
}
|
|
88324
|
+
return undefined;
|
|
88325
|
+
}
|
|
88326
|
+
findExplicitClient(statement) {
|
|
88327
|
+
var _a, _b;
|
|
88328
|
+
const tokens = statement.getTokens();
|
|
88329
|
+
for (let index = 0; index < tokens.length; index++) {
|
|
88330
|
+
const current = tokens[index].getStr().toUpperCase();
|
|
88331
|
+
const next = (_a = tokens[index + 1]) === null || _a === void 0 ? void 0 : _a.getStr().toUpperCase();
|
|
88332
|
+
const afterNext = (_b = tokens[index + 2]) === null || _b === void 0 ? void 0 : _b.getStr().toUpperCase();
|
|
88333
|
+
if ((current === "CLIENT" && next === "SPECIFIED")
|
|
88334
|
+
|| (current === "USING" && (next === "CLIENT" || next === "CLIENTS"))
|
|
88335
|
+
|| (current === "USING" && next === "ALL" && afterNext === "CLIENTS")) {
|
|
88336
|
+
return current === "CLIENT" ? tokens[index] : tokens[index + (next === "ALL" ? 2 : 1)];
|
|
88337
|
+
}
|
|
88338
|
+
}
|
|
88339
|
+
return undefined;
|
|
88340
|
+
}
|
|
88341
|
+
}
|
|
88342
|
+
exports.NoMandtInDatabaseOperations = NoMandtInDatabaseOperations;
|
|
88343
|
+
//# sourceMappingURL=no_mandt_in_database_operations.js.map
|
|
88344
|
+
|
|
88345
|
+
/***/ },
|
|
88346
|
+
|
|
88003
88347
|
/***/ "./node_modules/@abaplint/core/build/src/rules/no_prefixes.js"
|
|
88004
88348
|
/*!********************************************************************!*\
|
|
88005
88349
|
!*** ./node_modules/@abaplint/core/build/src/rules/no_prefixes.js ***!
|
|
@@ -98740,6 +99084,7 @@ class XMLConsistency {
|
|
|
98740
99084
|
extendedInformation: `Checks:
|
|
98741
99085
|
* XML is well-formed and parseable
|
|
98742
99086
|
* Naming for CLAS and INTF objects
|
|
99087
|
+
* QUAN fields in TABL objects have reference table and field values
|
|
98743
99088
|
* Texts and translations do not exceed maximum allowed length.`,
|
|
98744
99089
|
tags: [_irule_1.RuleTag.Naming, _irule_1.RuleTag.Syntax],
|
|
98745
99090
|
};
|
|
@@ -98754,6 +99099,7 @@ class XMLConsistency {
|
|
|
98754
99099
|
return this;
|
|
98755
99100
|
}
|
|
98756
99101
|
run(obj) {
|
|
99102
|
+
var _a;
|
|
98757
99103
|
const issues = [];
|
|
98758
99104
|
const file = obj.getXMLFile();
|
|
98759
99105
|
if (file === undefined) {
|
|
@@ -98765,6 +99111,14 @@ class XMLConsistency {
|
|
|
98765
99111
|
if (res !== true) {
|
|
98766
99112
|
issues.push(issue_1.Issue.atRow(file, 1, "XML parser error: " + res.err.msg, this.getMetadata().key, this.conf.severity));
|
|
98767
99113
|
}
|
|
99114
|
+
else {
|
|
99115
|
+
for (const attribute of ["version", "serializer_version"]) {
|
|
99116
|
+
const value = (_a = xml.match(new RegExp(`<abapGit\\b[^>]*\\b${attribute}="([^"]+)"`))) === null || _a === void 0 ? void 0 : _a[1];
|
|
99117
|
+
if (value !== undefined && value.match(/^v\d\.\d\.\d$/) === null) {
|
|
99118
|
+
issues.push(issue_1.Issue.atRow(file, 1, `Unexpected abapGit ${attribute} "${value}"`, this.getMetadata().key, this.conf.severity));
|
|
99119
|
+
}
|
|
99120
|
+
}
|
|
99121
|
+
}
|
|
98768
99122
|
}
|
|
98769
99123
|
// todo, have some XML validation in each object?
|
|
98770
99124
|
if (obj instanceof Objects.Class) {
|
|
@@ -98785,6 +99139,9 @@ class XMLConsistency {
|
|
|
98785
99139
|
else if (obj instanceof Objects.MessageClass) {
|
|
98786
99140
|
issues.push(...this.runMessageClass(obj, file));
|
|
98787
99141
|
}
|
|
99142
|
+
else if (obj instanceof Objects.Table) {
|
|
99143
|
+
issues.push(...this.runTable(obj, file));
|
|
99144
|
+
}
|
|
98788
99145
|
if (obj instanceof _abap_object_1.ABAPObject) {
|
|
98789
99146
|
issues.push(...this.runTextPool(obj, file));
|
|
98790
99147
|
}
|
|
@@ -98928,6 +99285,18 @@ class XMLConsistency {
|
|
|
98928
99285
|
}
|
|
98929
99286
|
return issues;
|
|
98930
99287
|
}
|
|
99288
|
+
runTable(obj, file) {
|
|
99289
|
+
var _a, _b;
|
|
99290
|
+
var _c;
|
|
99291
|
+
const issues = [];
|
|
99292
|
+
for (const field of (_c = obj.getFields()) !== null && _c !== void 0 ? _c : []) {
|
|
99293
|
+
if (field.DATATYPE === "QUAN" && (!((_a = field.REFTABLE) === null || _a === void 0 ? void 0 : _a.trim()) || !((_b = field.REFFIELD) === null || _b === void 0 ? void 0 : _b.trim()))) {
|
|
99294
|
+
const message = `QUAN field ${field.FIELDNAME} must have REFTABLE and REFFIELD set`;
|
|
99295
|
+
issues.push(issue_1.Issue.atRow(file, 1, message, this.getMetadata().key, this.conf.severity));
|
|
99296
|
+
}
|
|
99297
|
+
}
|
|
99298
|
+
return issues;
|
|
99299
|
+
}
|
|
98931
99300
|
}
|
|
98932
99301
|
exports.XMLConsistency = XMLConsistency;
|
|
98933
99302
|
//# sourceMappingURL=xml_consistency.js.map
|
|
@@ -100891,6 +101260,24 @@ exports.DatabaseSchemaReuse = DatabaseSchemaReuse;
|
|
|
100891
101260
|
|
|
100892
101261
|
/***/ },
|
|
100893
101262
|
|
|
101263
|
+
/***/ "./node_modules/@abaplint/transpiler/build/src/db/schema_generation/database_schema_generator.js"
|
|
101264
|
+
/*!*******************************************************************************************************!*\
|
|
101265
|
+
!*** ./node_modules/@abaplint/transpiler/build/src/db/schema_generation/database_schema_generator.js ***!
|
|
101266
|
+
\*******************************************************************************************************/
|
|
101267
|
+
(__unused_webpack_module, exports) {
|
|
101268
|
+
|
|
101269
|
+
"use strict";
|
|
101270
|
+
|
|
101271
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
101272
|
+
exports.packedTypeToDatabase = packedTypeToDatabase;
|
|
101273
|
+
function packedTypeToDatabase(type) {
|
|
101274
|
+
const precision = type.getLength() * 2 - 1;
|
|
101275
|
+
return `DECIMAL(${precision},${type.getDecimals()})`;
|
|
101276
|
+
}
|
|
101277
|
+
//# sourceMappingURL=database_schema_generator.js.map
|
|
101278
|
+
|
|
101279
|
+
/***/ },
|
|
101280
|
+
|
|
100894
101281
|
/***/ "./node_modules/@abaplint/transpiler/build/src/db/schema_generation/pg_database_schema.js"
|
|
100895
101282
|
/*!************************************************************************************************!*\
|
|
100896
101283
|
!*** ./node_modules/@abaplint/transpiler/build/src/db/schema_generation/pg_database_schema.js ***!
|
|
@@ -100935,6 +101322,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
100935
101322
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
100936
101323
|
exports.PGDatabaseSchema = void 0;
|
|
100937
101324
|
const abaplint = __importStar(__webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js"));
|
|
101325
|
+
const database_schema_generator_1 = __webpack_require__(/*! ./database_schema_generator */ "./node_modules/@abaplint/transpiler/build/src/db/schema_generation/database_schema_generator.js");
|
|
100938
101326
|
const _database_schema_reuse_1 = __webpack_require__(/*! ./_database_schema_reuse */ "./node_modules/@abaplint/transpiler/build/src/db/schema_generation/_database_schema_reuse.js");
|
|
100939
101327
|
const QUOTE = "\"";
|
|
100940
101328
|
class PGDatabaseSchema {
|
|
@@ -100999,7 +101387,7 @@ class PGDatabaseSchema {
|
|
|
100999
101387
|
return `REAL`;
|
|
101000
101388
|
}
|
|
101001
101389
|
else if (type instanceof abaplint.BasicTypes.PackedType) {
|
|
101002
|
-
return
|
|
101390
|
+
return (0, database_schema_generator_1.packedTypeToDatabase)(type);
|
|
101003
101391
|
}
|
|
101004
101392
|
else if (type instanceof abaplint.BasicTypes.VoidType) {
|
|
101005
101393
|
throw `Type of ${errorInfo}-${fieldname} is VoidType(${type.getVoided()}), make sure the type is known, enable strict syntax checking`;
|
|
@@ -101058,6 +101446,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
101058
101446
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
101059
101447
|
exports.SnowflakeDatabaseSchema = void 0;
|
|
101060
101448
|
const abaplint = __importStar(__webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js"));
|
|
101449
|
+
const database_schema_generator_1 = __webpack_require__(/*! ./database_schema_generator */ "./node_modules/@abaplint/transpiler/build/src/db/schema_generation/database_schema_generator.js");
|
|
101061
101450
|
class SnowflakeDatabaseSchema {
|
|
101062
101451
|
reg;
|
|
101063
101452
|
constructor(reg) {
|
|
@@ -101121,7 +101510,7 @@ class SnowflakeDatabaseSchema {
|
|
|
101121
101510
|
return `REAL`;
|
|
101122
101511
|
}
|
|
101123
101512
|
else if (type instanceof abaplint.BasicTypes.PackedType) {
|
|
101124
|
-
return
|
|
101513
|
+
return (0, database_schema_generator_1.packedTypeToDatabase)(type);
|
|
101125
101514
|
}
|
|
101126
101515
|
else if (type instanceof abaplint.BasicTypes.VoidType) {
|
|
101127
101516
|
throw `Type of ${errorInfo}-${fieldname} is VoidType(${type.getVoided()}), make sure the type is known, enable strict syntax checking`;
|
|
@@ -101180,6 +101569,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
101180
101569
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
101181
101570
|
exports.SQLiteDatabaseSchema = void 0;
|
|
101182
101571
|
const abaplint = __importStar(__webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js"));
|
|
101572
|
+
const database_schema_generator_1 = __webpack_require__(/*! ./database_schema_generator */ "./node_modules/@abaplint/transpiler/build/src/db/schema_generation/database_schema_generator.js");
|
|
101183
101573
|
const _database_schema_reuse_1 = __webpack_require__(/*! ./_database_schema_reuse */ "./node_modules/@abaplint/transpiler/build/src/db/schema_generation/_database_schema_reuse.js");
|
|
101184
101574
|
const QUOTE = "'";
|
|
101185
101575
|
class SQLiteDatabaseSchema {
|
|
@@ -101245,7 +101635,7 @@ class SQLiteDatabaseSchema {
|
|
|
101245
101635
|
return `REAL`;
|
|
101246
101636
|
}
|
|
101247
101637
|
else if (type instanceof abaplint.BasicTypes.PackedType) {
|
|
101248
|
-
return
|
|
101638
|
+
return (0, database_schema_generator_1.packedTypeToDatabase)(type);
|
|
101249
101639
|
}
|
|
101250
101640
|
else if (type instanceof abaplint.BasicTypes.VoidType) {
|
|
101251
101641
|
throw `Type of ${errorInfo}-${fieldname} is VoidType(${type.getVoided()}), make sure the type is known, enable strict syntax checking`;
|
|
@@ -102929,39 +103319,151 @@ exports.FieldSymbolTranspiler = FieldSymbolTranspiler;
|
|
|
102929
103319
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
102930
103320
|
exports.FilterBodyTranspiler = void 0;
|
|
102931
103321
|
const core_1 = __webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js");
|
|
103322
|
+
const traversal_1 = __webpack_require__(/*! ../traversal */ "./node_modules/@abaplint/transpiler/build/src/traversal.js");
|
|
102932
103323
|
const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
|
|
102933
103324
|
const type_name_or_infer_1 = __webpack_require__(/*! ./type_name_or_infer */ "./node_modules/@abaplint/transpiler/build/src/expressions/type_name_or_infer.js");
|
|
102934
103325
|
const transpile_types_1 = __webpack_require__(/*! ../transpile_types */ "./node_modules/@abaplint/transpiler/build/src/transpile_types.js");
|
|
102935
103326
|
const unique_identifier_1 = __webpack_require__(/*! ../unique_identifier */ "./node_modules/@abaplint/transpiler/build/src/unique_identifier.js");
|
|
103327
|
+
const component_chain_simple_1 = __webpack_require__(/*! ./component_chain_simple */ "./node_modules/@abaplint/transpiler/build/src/expressions/component_chain_simple.js");
|
|
102936
103328
|
class FilterBodyTranspiler {
|
|
102937
103329
|
transpile(typ, body, traversal) {
|
|
102938
103330
|
if (!(typ.get() instanceof core_1.Expressions.TypeNameOrInfer)) {
|
|
102939
103331
|
throw new Error("FilterBodyTranspiler, Expected TypeNameOrInfer");
|
|
102940
103332
|
}
|
|
102941
|
-
|
|
102942
|
-
|
|
103333
|
+
const sources = body.findDirectExpressions(core_1.Expressions.Source);
|
|
103334
|
+
if (sources.length === 0) {
|
|
103335
|
+
throw new Error("FilterBodyTranspiler, source not found");
|
|
102943
103336
|
}
|
|
102944
|
-
const source = traversal.traverse(
|
|
103337
|
+
const source = traversal.traverse(sources[0]).getCode();
|
|
102945
103338
|
const type = new type_name_or_infer_1.TypeNameOrInfer().findType(typ, traversal);
|
|
102946
103339
|
const target = transpile_types_1.TranspileTypes.toType(type);
|
|
102947
|
-
const ret = new chunk_1.Chunk();
|
|
102948
|
-
ret.appendString("(await (async () => {\n");
|
|
102949
|
-
let loopWhere = "";
|
|
102950
103340
|
const whereNode = body.findDirectExpression(core_1.Expressions.ComponentCond);
|
|
102951
|
-
if (whereNode) {
|
|
102952
|
-
|
|
102953
|
-
loopWhere = `, {"where": async ` + where + `}`;
|
|
103341
|
+
if (whereNode === undefined) {
|
|
103342
|
+
throw new Error("FilterBodyTranspiler, WHERE not found");
|
|
102954
103343
|
}
|
|
102955
|
-
|
|
102956
|
-
|
|
102957
|
-
|
|
102958
|
-
|
|
102959
|
-
|
|
102960
|
-
|
|
102961
|
-
|
|
103344
|
+
if (sources.length > 1) {
|
|
103345
|
+
return this.transpileIn(target, source, traversal.traverse(sources[1]).getCode(), whereNode, body.findDirectTokenByText("EXCEPT") !== undefined, body, traversal);
|
|
103346
|
+
}
|
|
103347
|
+
return this.transpileSingle(target, source, whereNode, body.findDirectTokenByText("EXCEPT") !== undefined, body, traversal);
|
|
103348
|
+
}
|
|
103349
|
+
transpileSingle(target, source, whereNode, except, body, traversal) {
|
|
103350
|
+
const result = unique_identifier_1.UniqueIdentifier.get();
|
|
103351
|
+
const row = unique_identifier_1.UniqueIdentifier.get();
|
|
103352
|
+
const where = traversal.traverse(whereNode).getCode();
|
|
103353
|
+
const options = [];
|
|
103354
|
+
options.push(except ? `where: async (I) => !((${where})(I))` : `where: async ${where}`);
|
|
103355
|
+
const key = body.findDirectExpression(core_1.Expressions.SimpleName);
|
|
103356
|
+
if (key) {
|
|
103357
|
+
options.push(`usingKey: "${key.concatTokens().toLowerCase()}"`);
|
|
103358
|
+
}
|
|
103359
|
+
const ret = new chunk_1.Chunk();
|
|
103360
|
+
ret.appendString("(await (async () => {\n");
|
|
103361
|
+
ret.appendString(`const ${result} = ${target};\n`);
|
|
103362
|
+
ret.appendString(`for await (const ${row} of abap.statements.loop(${source}, {${options.join(", ")}})) {\n`);
|
|
103363
|
+
ret.appendString(`abap.statements.insertInternal({"table": ${result}, "data": ${row}});\n`);
|
|
103364
|
+
ret.appendString("}\n");
|
|
103365
|
+
ret.appendString(`return ${result};\n`);
|
|
102962
103366
|
ret.appendString("})())");
|
|
102963
103367
|
return ret;
|
|
102964
103368
|
}
|
|
103369
|
+
transpileIn(target, source, filterSource, whereNode, except, body, traversal) {
|
|
103370
|
+
const result = unique_identifier_1.UniqueIdentifier.get();
|
|
103371
|
+
const sourceRow = unique_identifier_1.UniqueIdentifier.get();
|
|
103372
|
+
const filterRow = unique_identifier_1.UniqueIdentifier.get();
|
|
103373
|
+
const matched = unique_identifier_1.UniqueIdentifier.get();
|
|
103374
|
+
const condition = this.transpileInCondition(whereNode, traversal, sourceRow, filterRow);
|
|
103375
|
+
const key = body.findDirectExpression(core_1.Expressions.SimpleName);
|
|
103376
|
+
const filterOptions = key ? `, {usingKey: "${key.concatTokens().toLowerCase()}"}` : "";
|
|
103377
|
+
const selection = except ? `!${matched}` : matched;
|
|
103378
|
+
const ret = new chunk_1.Chunk();
|
|
103379
|
+
ret.appendString("(await (async () => {\n");
|
|
103380
|
+
ret.appendString(`const ${result} = ${target};\n`);
|
|
103381
|
+
ret.appendString(`for await (const ${sourceRow} of abap.statements.loop(${source})) {\n`);
|
|
103382
|
+
ret.appendString(`let ${matched} = false;\n`);
|
|
103383
|
+
ret.appendString(`for await (const ${filterRow} of abap.statements.loop(${filterSource}${filterOptions})) {\n`);
|
|
103384
|
+
ret.appendString(`if (${condition}) {\n`);
|
|
103385
|
+
ret.appendString(`${matched} = true;\n`);
|
|
103386
|
+
ret.appendString("break;\n}\n}\n");
|
|
103387
|
+
ret.appendString(`if (${selection}) {\n`);
|
|
103388
|
+
ret.appendString(`abap.statements.insertInternal({"table": ${result}, "data": ${sourceRow}});\n`);
|
|
103389
|
+
ret.appendString("}\n}\n");
|
|
103390
|
+
ret.appendString(`return ${result};\n`);
|
|
103391
|
+
ret.appendString("})())");
|
|
103392
|
+
return ret;
|
|
103393
|
+
}
|
|
103394
|
+
transpileInCondition(node, traversal, sourceRow, filterRow) {
|
|
103395
|
+
if (node.get() instanceof core_1.Expressions.ComponentCompare) {
|
|
103396
|
+
return this.transpileInCompare(node, traversal, sourceRow, filterRow);
|
|
103397
|
+
}
|
|
103398
|
+
let ret = "";
|
|
103399
|
+
for (const child of node.getChildren()) {
|
|
103400
|
+
if (child instanceof core_1.Nodes.ExpressionNode) {
|
|
103401
|
+
ret += this.transpileInCondition(child, traversal, sourceRow, filterRow);
|
|
103402
|
+
}
|
|
103403
|
+
else {
|
|
103404
|
+
switch (child.concatTokens().toUpperCase()) {
|
|
103405
|
+
case "AND":
|
|
103406
|
+
ret += " && ";
|
|
103407
|
+
break;
|
|
103408
|
+
case "OR":
|
|
103409
|
+
ret += " || ";
|
|
103410
|
+
break;
|
|
103411
|
+
case "NOT":
|
|
103412
|
+
ret += "!";
|
|
103413
|
+
break;
|
|
103414
|
+
case "(":
|
|
103415
|
+
ret += "(";
|
|
103416
|
+
break;
|
|
103417
|
+
case ")":
|
|
103418
|
+
ret += ")";
|
|
103419
|
+
break;
|
|
103420
|
+
default: throw new Error("FilterBodyTranspiler, unexpected condition token " + child.concatTokens());
|
|
103421
|
+
}
|
|
103422
|
+
}
|
|
103423
|
+
}
|
|
103424
|
+
return ret;
|
|
103425
|
+
}
|
|
103426
|
+
transpileInCompare(node, traversal, sourceRow, filterRow) {
|
|
103427
|
+
const leftNode = node.findDirectExpression(core_1.Expressions.ComponentChainSimple);
|
|
103428
|
+
if (leftNode === undefined) {
|
|
103429
|
+
throw new Error("FilterBodyTranspiler, comparison component not found");
|
|
103430
|
+
}
|
|
103431
|
+
const left = new component_chain_simple_1.ComponentChainSimpleTranspiler(`${sourceRow}.get().`).transpile(leftNode, traversal).getCode();
|
|
103432
|
+
const sources = node.findDirectExpressions(core_1.Expressions.Source);
|
|
103433
|
+
const concat = node.concatTokens().toUpperCase();
|
|
103434
|
+
const negate = concat.startsWith("NOT ") ? "!" : "";
|
|
103435
|
+
const operator = node.findDirectExpression(core_1.Expressions.CompareOperator);
|
|
103436
|
+
if (operator && sources[0]) {
|
|
103437
|
+
const compare = traversal.traverse(operator).getCode();
|
|
103438
|
+
return `${negate}abap.compare.${compare}(${left}, ${this.filterOperand(sources[0], traversal, filterRow)})`;
|
|
103439
|
+
}
|
|
103440
|
+
if (concat.includes(" BETWEEN ") && sources.length === 2) {
|
|
103441
|
+
const between = `abap.compare.ge(${left}, ${this.filterOperand(sources[0], traversal, filterRow)}) && `
|
|
103442
|
+
+ `abap.compare.le(${left}, ${this.filterOperand(sources[1], traversal, filterRow)})`;
|
|
103443
|
+
return concat.includes(" NOT BETWEEN ") ? `!(${between})` : `(${between})`;
|
|
103444
|
+
}
|
|
103445
|
+
if (concat.endsWith("IS INITIAL")) {
|
|
103446
|
+
return `${negate}abap.compare.initial(${left})`;
|
|
103447
|
+
}
|
|
103448
|
+
else if (concat.endsWith("IS NOT INITIAL")) {
|
|
103449
|
+
return `!abap.compare.initial(${left})`;
|
|
103450
|
+
}
|
|
103451
|
+
throw new Error("FilterBodyTranspiler, unsupported IN comparison " + node.concatTokens());
|
|
103452
|
+
}
|
|
103453
|
+
filterOperand(source, traversal, filterRow) {
|
|
103454
|
+
const code = traversal.traverse(source).getCode();
|
|
103455
|
+
const sourceField = source.findFirstExpression(core_1.Expressions.SourceField);
|
|
103456
|
+
const name = sourceField?.findDirectExpression(core_1.Expressions.Field)?.concatTokens();
|
|
103457
|
+
if (name === undefined) {
|
|
103458
|
+
return code;
|
|
103459
|
+
}
|
|
103460
|
+
const escaped = traversal_1.Traversal.escapeNamespace(name)?.replace("~", "$").toLowerCase();
|
|
103461
|
+
const variable = traversal_1.Traversal.prefixVariable(traversal_1.Traversal.escapeNamespace(name));
|
|
103462
|
+
if (escaped === undefined || code.startsWith(variable) === false) {
|
|
103463
|
+
return code;
|
|
103464
|
+
}
|
|
103465
|
+
return `${filterRow}.get().${escaped}` + code.substring(variable.length);
|
|
103466
|
+
}
|
|
102965
103467
|
}
|
|
102966
103468
|
exports.FilterBodyTranspiler = FilterBodyTranspiler;
|
|
102967
103469
|
//# sourceMappingURL=filter_body.js.map
|
|
@@ -104029,141 +104531,278 @@ const traversal_1 = __webpack_require__(/*! ../traversal */ "./node_modules/@aba
|
|
|
104029
104531
|
const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
|
|
104030
104532
|
const transpile_types_1 = __webpack_require__(/*! ../transpile_types */ "./node_modules/@abaplint/transpiler/build/src/transpile_types.js");
|
|
104031
104533
|
const target_1 = __webpack_require__(/*! ./target */ "./node_modules/@abaplint/transpiler/build/src/expressions/target.js");
|
|
104534
|
+
const let_1 = __webpack_require__(/*! ./let */ "./node_modules/@abaplint/transpiler/build/src/expressions/let.js");
|
|
104535
|
+
const statements_1 = __webpack_require__(/*! ../statements */ "./node_modules/@abaplint/transpiler/build/src/statements/index.js");
|
|
104536
|
+
const source_field_symbol_1 = __webpack_require__(/*! ./source_field_symbol */ "./node_modules/@abaplint/transpiler/build/src/expressions/source_field_symbol.js");
|
|
104537
|
+
const unique_identifier_1 = __webpack_require__(/*! ../unique_identifier */ "./node_modules/@abaplint/transpiler/build/src/unique_identifier.js");
|
|
104032
104538
|
class ReduceBodyTranspiler {
|
|
104033
104539
|
transpile(typ, body, traversal) {
|
|
104034
104540
|
if (!(typ.get() instanceof core_1.Expressions.TypeNameOrInfer)) {
|
|
104035
104541
|
throw new Error("ReduceBodyTranspiler, Expected TypeNameOrInfer");
|
|
104036
104542
|
}
|
|
104037
|
-
else if (body.findDirectExpression(core_1.Expressions.Let) !== undefined) {
|
|
104038
|
-
return new chunk_1.Chunk(`(() => { throw new Error("ReduceBodyTranspiler LET, not supported, transpiler"); })()`);
|
|
104039
|
-
}
|
|
104040
104543
|
const forExpressions = body.findDirectExpressions(core_1.Expressions.For);
|
|
104041
|
-
const forExpression = forExpressions[0];
|
|
104042
104544
|
if (forExpressions.length === 0) {
|
|
104043
104545
|
throw new Error("ReduceBodyTranspiler, expected FOR");
|
|
104044
104546
|
}
|
|
104045
|
-
else if (forExpressions.length > 1) {
|
|
104046
|
-
throw new Error("ReduceBodyTranspiler, multiple FOR not supported, " + body.concatTokens());
|
|
104047
|
-
}
|
|
104048
|
-
const loopExpression = forExpression.findDirectExpression(core_1.Expressions.InlineLoopDefinition);
|
|
104049
|
-
if (loopExpression === undefined) {
|
|
104050
|
-
// index based FOR, eg. "FOR i = 1 WHILE i <= 5"
|
|
104051
|
-
return this.transpileIndex(body, forExpression, traversal);
|
|
104052
|
-
}
|
|
104053
|
-
else if (["THEN", "UNTIL", "WHILE", "FROM", "TO", "GROUPS"].some(token => forExpression.findDirectTokenByText(token))) {
|
|
104054
|
-
throw new Error("ValueBody FOR todo, " + body.concatTokens());
|
|
104055
|
-
}
|
|
104056
|
-
const loopSource = traversal.traverse(loopExpression?.findDirectExpression(core_1.Expressions.Source)).getCode();
|
|
104057
|
-
const loopVariable = traversal.traverse(loopExpression?.findDirectExpression(core_1.Expressions.TargetField)
|
|
104058
|
-
|| loopExpression?.findDirectExpression(core_1.Expressions.TargetFieldSymbol)).getCode();
|
|
104059
|
-
// const type = new TypeNameOrInfer().findType(typ, traversal);
|
|
104060
|
-
// const target = TranspileTypes.toType(type);
|
|
104061
104547
|
const ret = new chunk_1.Chunk();
|
|
104062
104548
|
ret.appendString("(await (async () => {\n");
|
|
104063
|
-
|
|
104064
|
-
|
|
104065
|
-
|
|
104066
|
-
const where = traversal.traverse(whereNode).getCode();
|
|
104067
|
-
loopWhere = `, {"where": async ` + where + `}`;
|
|
104549
|
+
const outerLet = body.findDirectExpression(core_1.Expressions.Let);
|
|
104550
|
+
if (outerLet) {
|
|
104551
|
+
ret.appendString(new let_1.LetTranspiler().transpile(outerLet, traversal).getCode() + "\n");
|
|
104068
104552
|
}
|
|
104069
|
-
/*
|
|
104070
|
-
const returnId = UniqueIdentifier.get();
|
|
104071
|
-
ret.appendString(`const ${returnId} = ${target};\n`);
|
|
104072
|
-
*/
|
|
104073
104553
|
const returnField = this.declareInit(body, traversal, ret);
|
|
104074
|
-
|
|
104075
|
-
|
|
104076
|
-
|
|
104554
|
+
const declarations = [];
|
|
104555
|
+
const descriptors = forExpressions.map(forExpression => this.describeFor(forExpression, body, traversal, declarations));
|
|
104556
|
+
for (const declaration of declarations) {
|
|
104557
|
+
ret.appendString(declaration + "\n");
|
|
104558
|
+
}
|
|
104559
|
+
let indent = "";
|
|
104560
|
+
const levelIndents = [];
|
|
104561
|
+
for (const descriptor of descriptors) {
|
|
104562
|
+
this.appendBlocks(ret, descriptor.beforeLoop, indent);
|
|
104563
|
+
ret.appendString(indent + descriptor.open + "\n");
|
|
104564
|
+
indent += " ";
|
|
104565
|
+
levelIndents.push(indent);
|
|
104566
|
+
this.appendBlocks(ret, descriptor.preBody, indent);
|
|
104567
|
+
}
|
|
104568
|
+
this.appendBlock(ret, this.transpileNext(body, traversal), indent);
|
|
104569
|
+
for (let i = descriptors.length - 1; i >= 0; i--) {
|
|
104570
|
+
const descriptor = descriptors[i];
|
|
104571
|
+
const currentIndent = levelIndents[i];
|
|
104572
|
+
this.appendBlocks(ret, descriptor.postBody, currentIndent);
|
|
104573
|
+
indent = currentIndent.substring(0, Math.max(0, currentIndent.length - 2));
|
|
104574
|
+
ret.appendString(indent + descriptor.close + "\n");
|
|
104575
|
+
}
|
|
104077
104576
|
ret.appendString(`return ${returnField};\n`);
|
|
104078
104577
|
ret.appendString("})())");
|
|
104079
104578
|
return ret;
|
|
104080
104579
|
}
|
|
104081
|
-
|
|
104082
|
-
if (
|
|
104083
|
-
|
|
104580
|
+
describeFor(forExpression, body, traversal, declarations) {
|
|
104581
|
+
if (forExpression.findDirectTokenByText("GROUPS")) {
|
|
104582
|
+
return this.describeGroupsFor(forExpression, body, traversal);
|
|
104084
104583
|
}
|
|
104085
|
-
const
|
|
104086
|
-
if (
|
|
104087
|
-
|
|
104584
|
+
const loopExpression = forExpression.findDirectExpression(core_1.Expressions.InlineLoopDefinition);
|
|
104585
|
+
if (loopExpression === undefined) {
|
|
104586
|
+
return this.describeIndexFor(forExpression, body, traversal);
|
|
104587
|
+
}
|
|
104588
|
+
const sourceNode = loopExpression.findDirectExpression(core_1.Expressions.Source);
|
|
104589
|
+
if (sourceNode === undefined) {
|
|
104590
|
+
throw new Error("ReduceBodyTranspiler FOR missing source, " + body.concatTokens());
|
|
104591
|
+
}
|
|
104592
|
+
const loopSource = traversal.traverse(sourceNode).getCode();
|
|
104593
|
+
const options = [];
|
|
104594
|
+
const whereNode = forExpression.findDirectExpression(core_1.Expressions.ComponentCond);
|
|
104595
|
+
if (whereNode) {
|
|
104596
|
+
options.push("where: async " + traversal.traverse(whereNode).getCode());
|
|
104597
|
+
}
|
|
104598
|
+
const fromNode = forExpression.findExpressionAfterToken("FROM");
|
|
104599
|
+
if (fromNode && fromNode instanceof core_1.Nodes.ExpressionNode) {
|
|
104600
|
+
options.push("from: " + traversal.traverse(fromNode).getCode());
|
|
104601
|
+
}
|
|
104602
|
+
const toNode = forExpression.findExpressionAfterToken("TO");
|
|
104603
|
+
if (toNode && toNode instanceof core_1.Nodes.ExpressionNode) {
|
|
104604
|
+
options.push("to: " + traversal.traverse(toNode).getCode());
|
|
104605
|
+
}
|
|
104606
|
+
const keyNode = loopExpression.findExpressionAfterToken("KEY");
|
|
104607
|
+
if (keyNode) {
|
|
104608
|
+
options.push(`usingKey: "${keyNode.concatTokens().toLowerCase()}"`);
|
|
104609
|
+
}
|
|
104610
|
+
const unique = unique_identifier_1.UniqueIdentifier.get();
|
|
104611
|
+
const preBody = [];
|
|
104612
|
+
const postBody = [];
|
|
104613
|
+
const fieldSymbol = loopExpression.findDirectExpression(core_1.Expressions.TargetFieldSymbol);
|
|
104614
|
+
if (fieldSymbol) {
|
|
104615
|
+
declarations.push(new statements_1.FieldSymbolTranspiler().transpile(fieldSymbol, traversal).getCode());
|
|
104616
|
+
const target = new source_field_symbol_1.SourceFieldSymbolTranspiler().transpile(fieldSymbol, traversal).getCode();
|
|
104617
|
+
preBody.push(`${target}.assign(${unique});`);
|
|
104618
|
+
postBody.push(`${target}.unassign();`);
|
|
104619
|
+
}
|
|
104620
|
+
else {
|
|
104621
|
+
const field = loopExpression.findDirectExpression(core_1.Expressions.TargetField);
|
|
104622
|
+
if (field === undefined) {
|
|
104623
|
+
throw new Error("ReduceBodyTranspiler FOR missing target, " + body.concatTokens());
|
|
104624
|
+
}
|
|
104625
|
+
preBody.push(`const ${traversal.traverse(field).getCode()} = ${unique}.clone();`);
|
|
104088
104626
|
}
|
|
104627
|
+
const indexTarget = loopExpression.findExpressionAfterToken("INTO");
|
|
104628
|
+
const beforeLoop = [];
|
|
104629
|
+
if (indexTarget && indexTarget instanceof core_1.Nodes.ExpressionNode) {
|
|
104630
|
+
const indexName = unique_identifier_1.UniqueIdentifier.get();
|
|
104631
|
+
const indexCode = traversal.traverse(indexTarget).getCode();
|
|
104632
|
+
beforeLoop.push(`let ${indexName} = 1;`);
|
|
104633
|
+
preBody.push(`const ${indexCode} = new abap.types.Integer().set(${indexName});`);
|
|
104634
|
+
postBody.push(`${indexName}++;`);
|
|
104635
|
+
}
|
|
104636
|
+
const letNode = forExpression.findDirectExpression(core_1.Expressions.Let);
|
|
104637
|
+
if (letNode) {
|
|
104638
|
+
preBody.push(new let_1.LetTranspiler().transpile(letNode, traversal).getCode());
|
|
104639
|
+
}
|
|
104640
|
+
const opts = options.length === 0 ? "" : `, {${options.join(", ")}}`;
|
|
104641
|
+
return {
|
|
104642
|
+
beforeLoop,
|
|
104643
|
+
open: `for await (const ${unique} of abap.statements.loop(${loopSource}${opts})) {`,
|
|
104644
|
+
preBody,
|
|
104645
|
+
postBody,
|
|
104646
|
+
close: "}",
|
|
104647
|
+
};
|
|
104648
|
+
}
|
|
104649
|
+
describeGroupsFor(forExpression, body, traversal) {
|
|
104650
|
+
const targets = forExpression.findDirectExpressions(core_1.Expressions.TargetField);
|
|
104651
|
+
const source = forExpression.findDirectExpression(core_1.Expressions.Source);
|
|
104652
|
+
const groupBy = forExpression.findDirectExpression(core_1.Expressions.FieldChain);
|
|
104653
|
+
if (targets.length !== 2 || source === undefined || groupBy === undefined) {
|
|
104654
|
+
throw new Error("ReduceBodyTranspiler invalid GROUPS FOR, " + body.concatTokens());
|
|
104655
|
+
}
|
|
104656
|
+
const groupTarget = traversal.traverse(targets[0]).getCode();
|
|
104657
|
+
const memberTarget = traversal.traverse(targets[1]).getCode();
|
|
104658
|
+
const sourceCode = traversal.traverse(source).getCode();
|
|
104659
|
+
const groupByCode = traversal.traverse(groupBy).getCode();
|
|
104660
|
+
const groups = unique_identifier_1.UniqueIdentifier.get();
|
|
104661
|
+
const row = unique_identifier_1.UniqueIdentifier.get();
|
|
104662
|
+
const key = unique_identifier_1.UniqueIdentifier.get();
|
|
104663
|
+
const rawKey = unique_identifier_1.UniqueIdentifier.get();
|
|
104664
|
+
const entry = unique_identifier_1.UniqueIdentifier.get();
|
|
104665
|
+
const generator = `(async function*() {\n`
|
|
104666
|
+
+ `const ${groups} = new Map();\n`
|
|
104667
|
+
+ `for await (const ${row} of abap.statements.loop(${sourceCode})) {\n`
|
|
104668
|
+
+ `const ${memberTarget} = ${row}.clone();\n`
|
|
104669
|
+
+ `const ${key} = ${groupByCode};\n`
|
|
104670
|
+
+ `const ${rawKey} = ${key}.get();\n`
|
|
104671
|
+
+ `let ${entry} = ${groups}.get(${rawKey});\n`
|
|
104672
|
+
+ `if (${entry} === undefined) {\n`
|
|
104673
|
+
+ `${entry} = {key: ${key}.clone(), members: []};\n`
|
|
104674
|
+
+ `${groups}.set(${rawKey}, ${entry});\n`
|
|
104675
|
+
+ `}\n`
|
|
104676
|
+
+ `${entry}.members.push(${row});\n`
|
|
104677
|
+
+ `}\n`
|
|
104678
|
+
+ `for (const value of ${groups}.values()) { yield value; }\n`
|
|
104679
|
+
+ `})()`;
|
|
104680
|
+
const loopEntry = unique_identifier_1.UniqueIdentifier.get();
|
|
104681
|
+
return {
|
|
104682
|
+
beforeLoop: [],
|
|
104683
|
+
open: `for await (const ${loopEntry} of ${generator}) {`,
|
|
104684
|
+
preBody: [
|
|
104685
|
+
`const ${groupTarget} = ${loopEntry}.key.clone();`,
|
|
104686
|
+
`const ${memberTarget} = ${loopEntry}.members[0].clone();`,
|
|
104687
|
+
],
|
|
104688
|
+
postBody: [],
|
|
104689
|
+
close: "}",
|
|
104690
|
+
};
|
|
104691
|
+
}
|
|
104692
|
+
describeIndexFor(forExpression, body, traversal) {
|
|
104693
|
+
const counter = forExpression.findDirectExpression(core_1.Expressions.InlineFieldDefinition);
|
|
104089
104694
|
const cond = forExpression.findDirectExpression(core_1.Expressions.Cond);
|
|
104090
|
-
if (cond === undefined) {
|
|
104091
|
-
throw new Error("
|
|
104695
|
+
if (counter === undefined || cond === undefined) {
|
|
104696
|
+
throw new Error("ReduceBodyTranspiler invalid index FOR, " + body.concatTokens());
|
|
104092
104697
|
}
|
|
104093
104698
|
const hasUntil = forExpression.findDirectTokenByText("UNTIL") !== undefined;
|
|
104094
104699
|
const hasWhile = forExpression.findDirectTokenByText("WHILE") !== undefined;
|
|
104095
104700
|
if ((hasUntil ? 1 : 0) + (hasWhile ? 1 : 0) !== 1) {
|
|
104096
|
-
throw new Error("
|
|
104701
|
+
throw new Error("ReduceBodyTranspiler index FOR requires WHILE or UNTIL, " + body.concatTokens());
|
|
104097
104702
|
}
|
|
104098
104703
|
const fieldName = counter.findDirectExpression(core_1.Expressions.Field)?.concatTokens().toLowerCase();
|
|
104099
|
-
|
|
104100
|
-
|
|
104704
|
+
const source = counter.findDirectExpression(core_1.Expressions.Source);
|
|
104705
|
+
if (fieldName === undefined || source === undefined) {
|
|
104706
|
+
throw new Error("ReduceBodyTranspiler invalid index definition, " + body.concatTokens());
|
|
104101
104707
|
}
|
|
104102
|
-
const
|
|
104103
|
-
const variable = scope?.findVariable(fieldName);
|
|
104708
|
+
const variable = traversal.findCurrentScopeByToken(counter.getFirstToken())?.findVariable(fieldName);
|
|
104104
104709
|
if (variable === undefined) {
|
|
104105
|
-
throw new Error(
|
|
104710
|
+
throw new Error(`ReduceBodyTranspiler: variable ${fieldName} not found`);
|
|
104106
104711
|
}
|
|
104107
104712
|
const counterName = traversal_1.Traversal.prefixVariable(fieldName);
|
|
104108
|
-
const startSource = counter.findDirectExpression(core_1.Expressions.Source);
|
|
104109
|
-
if (startSource === undefined) {
|
|
104110
|
-
throw new Error("ValueBody FOR missing initial value, " + body.concatTokens());
|
|
104111
|
-
}
|
|
104112
|
-
const start = traversal.traverse(startSource).getCode();
|
|
104113
104713
|
const thenExpr = forExpression.findExpressionAfterToken("THEN");
|
|
104114
|
-
|
|
104115
|
-
|
|
104116
|
-
|
|
104117
|
-
}
|
|
104118
|
-
else {
|
|
104119
|
-
incrementExpression = `abap.operators.add(${counterName}, new abap.types.Integer().set(1))`;
|
|
104120
|
-
}
|
|
104714
|
+
const increment = thenExpr && thenExpr instanceof core_1.Nodes.ExpressionNode
|
|
104715
|
+
? traversal.traverse(thenExpr).getCode()
|
|
104716
|
+
: `abap.operators.add(${counterName}, new abap.types.Integer().set(1))`;
|
|
104121
104717
|
const condCode = traversal.traverse(cond).getCode();
|
|
104122
|
-
const
|
|
104123
|
-
|
|
104124
|
-
const returnField = this.declareInit(body, traversal, ret);
|
|
104125
|
-
ret.appendString(transpile_types_1.TranspileTypes.declare(variable) + `\n`);
|
|
104126
|
-
ret.appendString(`${counterName}.set(${start});\n`);
|
|
104127
|
-
ret.appendString(`while (true) {\n`);
|
|
104718
|
+
const preBody = [];
|
|
104719
|
+
const postBody = [`${counterName}.set(${increment});`];
|
|
104128
104720
|
if (hasWhile) {
|
|
104129
|
-
|
|
104721
|
+
preBody.push(`if (!(${condCode})) {\nbreak;\n}`);
|
|
104722
|
+
}
|
|
104723
|
+
const letNode = forExpression.findDirectExpression(core_1.Expressions.Let);
|
|
104724
|
+
if (letNode) {
|
|
104725
|
+
preBody.push(new let_1.LetTranspiler().transpile(letNode, traversal).getCode());
|
|
104130
104726
|
}
|
|
104131
|
-
ret.appendString(this.transpileNext(body, traversal));
|
|
104132
|
-
ret.appendString(`${counterName}.set(${incrementExpression});\n`);
|
|
104133
104727
|
if (hasUntil) {
|
|
104134
|
-
|
|
104728
|
+
postBody.push(`if (${condCode}) {\nbreak;\n}`);
|
|
104135
104729
|
}
|
|
104136
|
-
|
|
104137
|
-
|
|
104138
|
-
|
|
104139
|
-
|
|
104730
|
+
return {
|
|
104731
|
+
beforeLoop: [transpile_types_1.TranspileTypes.declare(variable), `${counterName}.set(${traversal.traverse(source).getCode()});`],
|
|
104732
|
+
open: "while (true) {",
|
|
104733
|
+
preBody,
|
|
104734
|
+
postBody,
|
|
104735
|
+
close: "}",
|
|
104736
|
+
};
|
|
104140
104737
|
}
|
|
104141
104738
|
declareInit(body, traversal, ret) {
|
|
104142
104739
|
let returnField = "";
|
|
104143
104740
|
for (const init of body.findDirectExpressions(core_1.Expressions.InlineFieldDefinition)) {
|
|
104144
|
-
const fieldName = init.findDirectExpression(core_1.Expressions.Field)
|
|
104145
|
-
|
|
104146
|
-
|
|
104147
|
-
|
|
104741
|
+
const fieldName = init.findDirectExpression(core_1.Expressions.Field)?.concatTokens().toLowerCase();
|
|
104742
|
+
if (fieldName === undefined) {
|
|
104743
|
+
throw new Error("ReduceBodyTranspiler INIT missing field");
|
|
104744
|
+
}
|
|
104745
|
+
if (returnField === "") {
|
|
104746
|
+
returnField = traversal_1.Traversal.prefixVariable(fieldName);
|
|
104747
|
+
}
|
|
104748
|
+
const variable = traversal.findCurrentScopeByToken(init.getFirstToken())?.findVariable(fieldName);
|
|
104148
104749
|
if (variable === undefined) {
|
|
104149
104750
|
throw new Error(`ReduceBodyTranspiler: variable ${fieldName} not found`);
|
|
104150
104751
|
}
|
|
104151
|
-
|
|
104752
|
+
const target = traversal_1.Traversal.prefixVariable(fieldName);
|
|
104753
|
+
ret.appendString(transpile_types_1.TranspileTypes.declare(variable) + "\n");
|
|
104754
|
+
const source = init.findDirectExpression(core_1.Expressions.Source);
|
|
104755
|
+
if (source) {
|
|
104756
|
+
ret.appendString(`${target}.set(${traversal.traverse(source).getCode()});\n`);
|
|
104757
|
+
}
|
|
104758
|
+
}
|
|
104759
|
+
if (returnField === "") {
|
|
104760
|
+
throw new Error("ReduceBodyTranspiler INIT missing");
|
|
104152
104761
|
}
|
|
104153
104762
|
return returnField;
|
|
104154
104763
|
}
|
|
104155
104764
|
transpileNext(body, traversal) {
|
|
104156
104765
|
let ret = "";
|
|
104157
|
-
|
|
104158
|
-
|
|
104159
|
-
|
|
104160
|
-
|
|
104161
|
-
|
|
104162
|
-
ret += traversal.traverse(nextChild).getCode() + ");\n";
|
|
104766
|
+
const children = body.findDirectExpression(core_1.Expressions.ReduceNext)?.getChildren() || [];
|
|
104767
|
+
for (let i = 0; i < children.length; i++) {
|
|
104768
|
+
const child = children[i];
|
|
104769
|
+
if (!(child instanceof core_1.Nodes.ExpressionNode) || !(child.get() instanceof core_1.Expressions.SimpleTarget)) {
|
|
104770
|
+
continue;
|
|
104163
104771
|
}
|
|
104772
|
+
const source = children.slice(i + 1).find(candidate => candidate instanceof core_1.Nodes.ExpressionNode && candidate.get() instanceof core_1.Expressions.Source);
|
|
104773
|
+
if (!(source instanceof core_1.Nodes.ExpressionNode)) {
|
|
104774
|
+
throw new Error("ReduceBodyTranspiler NEXT missing source");
|
|
104775
|
+
}
|
|
104776
|
+
const target = new target_1.TargetTranspiler().transpile(child, traversal).getCode();
|
|
104777
|
+
const value = traversal.traverse(source).getCode();
|
|
104778
|
+
const between = children.slice(i + 1, children.indexOf(source)).map(candidate => candidate.concatTokens()).join("");
|
|
104779
|
+
const operators = {
|
|
104780
|
+
"+=": "add",
|
|
104781
|
+
"-=": "minus",
|
|
104782
|
+
"*=": "multiply",
|
|
104783
|
+
"/=": "divide",
|
|
104784
|
+
"&&=": "concat",
|
|
104785
|
+
};
|
|
104786
|
+
const operator = operators[between];
|
|
104787
|
+
ret += operator
|
|
104788
|
+
? `${target}.set(abap.operators.${operator}(${target}, ${value}));\n`
|
|
104789
|
+
: `${target}.set(${value});\n`;
|
|
104790
|
+
i = children.indexOf(source);
|
|
104164
104791
|
}
|
|
104165
104792
|
return ret;
|
|
104166
104793
|
}
|
|
104794
|
+
appendBlocks(ret, blocks, indent) {
|
|
104795
|
+
for (const block of blocks) {
|
|
104796
|
+
this.appendBlock(ret, block, indent);
|
|
104797
|
+
}
|
|
104798
|
+
}
|
|
104799
|
+
appendBlock(ret, block, indent) {
|
|
104800
|
+
for (const line of block.split("\n")) {
|
|
104801
|
+
if (line.trim() !== "") {
|
|
104802
|
+
ret.appendString(indent + line.replace(/\r/g, "") + "\n");
|
|
104803
|
+
}
|
|
104804
|
+
}
|
|
104805
|
+
}
|
|
104167
104806
|
}
|
|
104168
104807
|
exports.ReduceBodyTranspiler = ReduceBodyTranspiler;
|
|
104169
104808
|
//# sourceMappingURL=reduce_body.js.map
|
|
@@ -128186,7 +128825,7 @@ module.exports = require("util");
|
|
|
128186
128825
|
\**************************************************/
|
|
128187
128826
|
(module) {
|
|
128188
128827
|
|
|
128189
|
-
(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{XMLBuilder:()=>xe,XMLParser:()=>Jt,XMLValidator:()=>be});const i=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",n=new RegExp("^["+i+"]["+i+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function r(t,e){const i=[];let n=e.exec(t);for(;n;){const r=[];r.startIndex=e.lastIndex-n[0].length;const s=n.length;for(let t=0;t<s;t++)r.push(n[t]);i.push(r),n=e.exec(t)}return i}const s=function(t){return!(null==n.exec(t))},o=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],a=["__proto__","constructor","prototype"],l={allowBooleanAttributes:!1,unpairedTags:[]};function p(t,e){e=Object.assign({},l,e);const i=[];let n=!1,r=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let s=0;s<t.length;s++)if("<"===t[s]&&"?"===t[s+1]){if(s+=2,s=h(t,s),s.err)return s}else{if("<"!==t[s]){if(c(t[s]))continue;return y("InvalidChar","char '"+t[s]+"' is not expected.",w(t,s))}{let o=s;if(s++,"!"===t[s]){s=d(t,s);continue}{let a=!1;"/"===t[s]&&(a=!0,s++);let l="";for(;s<t.length&&">"!==t[s]&&" "!==t[s]&&"\t"!==t[s]&&"\n"!==t[s]&&"\r"!==t[s];s++)l+=t[s];if(l=l.trim(),"/"===l[l.length-1]&&(l=l.substring(0,l.length-1),s--),!E(l)){let e;return e=0===l.trim().length?"Invalid space after '<'.":"Tag '"+l+"' is an invalid name.",y("InvalidTag",e,w(t,s))}const p=g(t,s);if(!1===p)return y("InvalidAttr","Attributes for '"+l+"' have open quote.",w(t,s));let u=p.value;if(s=p.index,"/"===u[u.length-1]){const i=s-u.length;u=u.substring(0,u.length-1);const r=x(u,e);if(!0!==r)return y(r.err.code,r.err.msg,w(t,i+r.err.line));n=!0}else if(a){if(!p.tagClosed)return y("InvalidTag","Closing tag '"+l+"' doesn't have proper closing.",w(t,s));if(u.trim().length>0)return y("InvalidTag","Closing tag '"+l+"' can't have attributes or invalid starting.",w(t,o));if(0===i.length)return y("InvalidTag","Closing tag '"+l+"' has not been opened.",w(t,o));{const e=i.pop();if(l!==e.tagName){let i=w(t,e.tagStartPos);return y("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+i.line+", col "+i.col+") instead of closing tag '"+l+"'.",w(t,o))}0==i.length&&(r=!0)}}else{const a=x(u,e);if(!0!==a)return y(a.err.code,a.err.msg,w(t,s-u.length+a.err.line));if(!0===r)return y("InvalidXml","Multiple possible root nodes found.",w(t,s));-1!==e.unpairedTags.indexOf(l)||i.push({tagName:l,tagStartPos:o}),n=!0}for(s++;s<t.length;s++)if("<"===t[s]){if("!"===t[s+1]){s++,s=d(t,s);continue}if("?"!==t[s+1])break;if(s=h(t,++s),s.err)return s}else if("&"===t[s]){const e=b(t,s);if(-1==e)return y("InvalidChar","char '&' is not expected.",w(t,s));s=e}else if(!0===r&&!c(t[s]))return y("InvalidXml","Extra text at the end",w(t,s));"<"===t[s]&&s--}}}return n?1==i.length?y("InvalidTag","Unclosed tag '"+i[0].tagName+"'.",w(t,i[0].tagStartPos)):!(i.length>0)||y("InvalidXml","Invalid '"+JSON.stringify(i.map(t=>t.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):y("InvalidXml","Start tag expected.",1)}function c(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function h(t,e){const i=e;for(;e<t.length;e++)if("?"==t[e]||" "==t[e]){const n=t.substr(i,e-i);if(e>5&&"xml"===n)return y("InvalidXml","XML declaration allowed only at the start of the document.",w(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}continue}return e}function d(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let i=1;for(e+=8;e<t.length;e++)if("<"===t[e])i++;else if(">"===t[e]&&(i--,0===i))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e<t.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}const u='"',f="'";function g(t,e){let i="",n="",r=!1;for(;e<t.length;e++){if(t[e]===u||t[e]===f)""===n?n=t[e]:n!==t[e]||(n="");else if(">"===t[e]&&""===n){r=!0;break}i+=t[e]}return""===n&&{value:i,index:e,tagClosed:r}}const m=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function x(t,e){const i=r(t,m),n={};for(let t=0;t<i.length;t++){if(0===i[t][1].length)return y("InvalidAttr","Attribute '"+i[t][2]+"' has no space in starting.",v(i[t]));if(void 0!==i[t][3]&&void 0===i[t][4])return y("InvalidAttr","Attribute '"+i[t][2]+"' is without value.",v(i[t]));if(void 0===i[t][3]&&!e.allowBooleanAttributes)return y("InvalidAttr","boolean attribute '"+i[t][2]+"' is not allowed.",v(i[t]));const r=i[t][2];if(!N(r))return y("InvalidAttr","Attribute '"+r+"' is an invalid name.",v(i[t]));if(Object.prototype.hasOwnProperty.call(n,r))return y("InvalidAttr","Attribute '"+r+"' is repeated.",v(i[t]));n[r]=1}return!0}function b(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){let i=/\d/;for("x"===t[e]&&(e++,i=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(i))break}return-1}(t,++e);let i=0;for(;e<t.length;e++,i++)if(!(t[e].match(/\w/)&&i<20)){if(";"===t[e])break;return-1}return e}function y(t,e,i){return{err:{code:t,msg:e,line:i.line||i,col:i.col}}}function N(t){return s(t)}function E(t){return s(t)}function w(t,e){const i=t.substring(0,e).split(/\r?\n/);return{line:i.length,col:i[i.length-1].length+1}}function v(t){return t.startIndex+t[1].length}const S=t=>o.includes(t)?"__"+t:t,A={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0,unicode:!1},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,i){return t},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:S};function T(t,e){if("string"!=typeof t)return;const i=t.toLowerCase();if(o.some(t=>i===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);if(a.some(t=>i===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`)}function _(t,e){return"boolean"==typeof t?{enabled:t,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:"object"==typeof t&&null!==t?{enabled:!1!==t.enabled,maxEntitySize:Math.max(1,t.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,t.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,t.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,t.maxExpandedLength??1e5),maxEntityCount:Math.max(1,t.maxEntityCount??1e3),allowedTags:t.allowedTags??null,tagFilter:t.tagFilter??null,appliesTo:t.appliesTo??"all"}:_(!0)}const C=function(t){const e=Object.assign({},A,t),i=[{value:e.attributeNamePrefix,name:"attributeNamePrefix"},{value:e.attributesGroupName,name:"attributesGroupName"},{value:e.textNodeName,name:"textNodeName"},{value:e.cdataPropName,name:"cdataPropName"},{value:e.commentPropName,name:"commentPropName"}];for(const{value:t,name:e}of i)t&&T(t,e);return null===e.onDangerousProperty&&(e.onDangerousProperty=S),e.processEntities=_(e.processEntities,e.htmlEntities),e.unpairedTagsSet=new Set(e.unpairedTags),e.stopNodes&&Array.isArray(e.stopNodes)&&(e.stopNodes=e.stopNodes.map(t=>"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t)),e};let $;$="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class O{constructor(t){this.tagname=t,this.child=[],this[":@"]=Object.create(null)}add(t,e){"__proto__"===t&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t,e){"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),void 0!==e&&(this.child[this.child.length-1][$]={startIndex:e})}static getMetaDataSymbol(){return $}}const P=":A-Za-z_À-ÖØ-öø-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�",j=":A-Za-z_À-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",I=j+"\\-\\.\\d·̀-ͯ҇‿-⁀",k=(t,e,i="")=>{const n=`[${t.replace(":","")}][${e.replace(":","")}]*`;return{name:new RegExp(`^[${t}][${e}]*$`,i),ncName:new RegExp(`^${n}$`,i),qName:new RegExp(`^${n}(?::${n})?$`,i),nmToken:new RegExp(`^[${e}]+$`,i),nmTokens:new RegExp(`^[${e}]+(?:\\s+[${e}]+)*$`,i)}},L=k(P,P+"\\-\\.\\d·̀-ͯ‿-⁀"),D=k(j,I,"u"),R=(t,{xmlVersion:e="1.0"}={})=>((t="1.0")=>"1.1"===t?D:L)(e).qName.test(t);class M{constructor(t,e){this.suppressValidationErr=!t,this.options=t,this.xmlVersion=e||1}setXmlVersion(t=1){this.xmlVersion=t}readDocType(t,e){const i=Object.create(null);let n=0;if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let r=1,s=!1,o=!1,a="";for(;e<t.length;e++)if("<"!==t[e]||o)if(">"===t[e]){if(o?"-"===t[e-1]&&"-"===t[e-2]&&(o=!1,r--):r--,0===r)break}else"["===t[e]?s=!0:a+=t[e];else{if(s&&q(t,"!ENTITY",e)){let r,s;if(e+=7,[r,s,e]=this.readEntityExp(t,e+1,this.suppressValidationErr),-1===s.indexOf("&")){if(!1!==this.options.enabled&&null!=this.options.maxEntityCount&&n>=this.options.maxEntityCount)throw new Error(`Entity count (${n+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);i[r]=s,n++}}else if(s&&q(t,"!ELEMENT",e)){e+=8;const{index:i}=this.readElementExp(t,e+1);e=i}else if(s&&q(t,"!ATTLIST",e))e+=8;else if(s&&q(t,"!NOTATION",e)){e+=9;const{index:i}=this.readNotationExp(t,e+1,this.suppressValidationErr);e=i}else{if(!q(t,"!--",e))throw new Error("Invalid DOCTYPE");o=!0}r++,a=""}if(0!==r)throw new Error("Unclosed DOCTYPE")}return{entities:i,i:e}}readEntityExp(t,e){const i=e=V(t,e);for(;e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)e++;let n=t.substring(i,e);if(F(n,{xmlVersion:this.xmlVersion}),e=V(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}let r="";if([e,r]=this.readIdentifierVal(t,e,"entity"),!1!==this.options.enabled&&null!=this.options.maxEntitySize&&r.length>this.options.maxEntitySize)throw new Error(`Entity "${n}" size (${r.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[n,r,--e]}readNotationExp(t,e){const i=e=V(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let n=t.substring(i,e);!this.suppressValidationErr&&F(n,{xmlVersion:this.xmlVersion}),e=V(t,e);const r=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==r&&"PUBLIC"!==r)throw new Error(`Expected SYSTEM or PUBLIC, found "${r}"`);e+=r.length,e=V(t,e);let s=null,o=null;if("PUBLIC"===r)[e,s]=this.readIdentifierVal(t,e,"publicIdentifier"),'"'!==t[e=V(t,e)]&&"'"!==t[e]||([e,o]=this.readIdentifierVal(t,e,"systemIdentifier"));else if("SYSTEM"===r&&([e,o]=this.readIdentifierVal(t,e,"systemIdentifier"),!this.suppressValidationErr&&!o))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:n,publicIdentifier:s,systemIdentifier:o,index:--e}}readIdentifierVal(t,e,i){let n="";const r=t[e];if('"'!==r&&"'"!==r)throw new Error(`Expected quoted string, found "${r}"`);const s=++e;for(;e<t.length&&t[e]!==r;)e++;if(n=t.substring(s,e),t[e]!==r)throw new Error(`Unterminated ${i} value`);return[++e,n]}readElementExp(t,e){const i=e=V(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let n=t.substring(i,e);if(!this.suppressValidationErr&&!R(n,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid element name: "${n}"`);let r="";if("E"===t[e=V(t,e)]&&q(t,"MPTY",e))e+=4;else if("A"===t[e]&&q(t,"NY",e))e+=2;else if("("===t[e]){const i=++e;for(;e<t.length&&")"!==t[e];)e++;if(r=t.substring(i,e),")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[e]}"`);return{elementName:n,contentModel:r.trim(),index:e}}readAttlistExp(t,e){let i=e=V(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let n=t.substring(i,e);for(F(n,{xmlVersion:this.xmlVersion}),i=e=V(t,e);e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(i,e);if(!F(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid attribute name: "${r}"`);e=V(t,e);let s="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(s="NOTATION","("!==t[e=V(t,e+=8)])throw new Error(`Expected '(', found "${t[e]}"`);e++;let i=[];for(;e<t.length&&")"!==t[e];){const n=e;for(;e<t.length&&"|"!==t[e]&&")"!==t[e];)e++;let r=t.substring(n,e);if(r=r.trim(),!F(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid notation name: "${r}"`);i.push(r),"|"===t[e]&&(e++,e=V(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,s+=" ("+i.join("|")+")"}else{const i=e;for(;e<t.length&&!/\s/.test(t[e]);)e++;s+=t.substring(i,e);const n=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!n.includes(s.toUpperCase()))throw new Error(`Invalid attribute type: "${s}"`)}e=V(t,e);let o="";return"#REQUIRED"===t.substring(e,e+8).toUpperCase()?(o="#REQUIRED",e+=8):"#IMPLIED"===t.substring(e,e+7).toUpperCase()?(o="#IMPLIED",e+=7):[e,o]=this.readIdentifierVal(t,e,"ATTLIST"),{elementName:n,attributeName:r,attributeType:s,defaultValue:o,index:e}}}const V=(t,e)=>{for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function q(t,e,i){for(let n=0;n<e.length;n++)if(e[n]!==t[i+n+1])return!1;return!0}function F(t,e){if(R(t,{xmlVersion:e}))return t;throw new Error(`Invalid entity name ${t}`)}const U=[48,1632,1776,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,65296,120782,120792,120802,120812,120822,66720,68912,69734,69872,69942,70096,70384,70736,70864,71248,71360,71472,71904,72016,72688,72784,73040,73120,73552,92768,92864,93008,123200,123632,124144,125264,130032],G=new Map,B=1632,W=new Uint8Array(63904).fill(255);for(const t of U)for(let e=0;e<10;e++){const i=t+e;i<=65535?W[i-B]=e:G.set(i,e)}const X=new Set([8722,65293,65123]),Y=/^[-+]?0x[a-fA-F0-9]+$/,z=/^0b[01]+$/,H=/^0o[0-7]+$/,Q=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,J={hex:!0,binary:!1,octal:!1,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original",unicode:!1};function Z(t,e={}){if(e=Object.assign({},J,e),!t||"string"!=typeof t)return t;let i=t.trim();if(0===i.length)return t;if(void 0!==e.skipLike&&e.skipLike.test(i))return t;if("0"===i)return 0;if(e.unicode&&(i=function(t){if("string"!=typeof t)return t;const e=t.length;if(0===e)return t;let i=-1;for(let n=0;n<e;n++){const r=t.charCodeAt(n);if(!(r>=48&&r<=57||45===r))if(r<B){if(X.has(r)){i=n;break}}else if(r>=55296&&r<=56319){if(n+1<e){const e=t.charCodeAt(n+1);if(e>=56320&&e<=57343){const t=65536+(r-55296<<10)+(e-56320);if(G.has(t)){i=n;break}}}}else if(255!==W[r-B]||X.has(r)){i=n;break}}if(-1===i)return t;const n=[];i>0&&n.push(t.slice(0,i));for(let r=i;r<e;r++){const i=t.charCodeAt(r);if(i>=48&&i<=57||45===i){n.push(t[r]);continue}if(i<B){n.push(X.has(i)?"-":t[r]);continue}if(i>=55296&&i<=56319){if(r+1<e){const e=t.charCodeAt(r+1);if(e>=56320&&e<=57343){const t=65536+(i-55296<<10)+(e-56320),s=G.get(t);if(void 0!==s){n.push(String.fromCharCode(s+48)),r++;continue}}}n.push(t[r]);continue}if(X.has(i)){n.push("-");continue}const s=W[i-B];n.push(255!==s?String.fromCharCode(s+48):t[r])}return n.join("")}(i),"0"===i))return 0;if(e.hex&&Y.test(i))return tt(i,16);if(e.binary&&z.test(i))return tt(i,2);if(e.octal&&H.test(i))return tt(i,8);if(isFinite(i)){if(i.includes("e")||i.includes("E"))return function(t,e,i){if(!i.eNotation)return t;const n=e.match(K);if(n){let r=n[1]||"";const s=-1===n[3].indexOf("e")?"E":"e",o=n[2],a=r?t[o.length+1]===s:t[o.length]===s;return o.length>1&&a?t:(1!==o.length||!n[3].startsWith(`.${s}`)&&n[3][0]!==s)&&o.length>0?i.leadingZeros&&!a?(e=(n[1]||"")+n[3],Number(e)):t:Number(e)}return t}(t,i,e);{const r=Q.exec(i);if(r){const s=r[1]||"",o=r[2];let a=(n=r[3])&&-1!==n.indexOf(".")?("."===(n=n.replace(/0+$/,""))?n="0":"."===n[0]?n="0"+n:"."===n[n.length-1]&&(n=n.substring(0,n.length-1)),n):n;const l=s?"."===t[o.length+1]:"."===t[o.length];if(!e.leadingZeros&&(o.length>1||1===o.length&&!l))return t;{const n=Number(i),r=String(n);if(0===n)return n;if(-1!==r.search(/[eE]/))return e.eNotation?n:t;if(-1!==i.indexOf("."))return"0"===r||r===a||r===`${s}${a}`?n:t;let l=o?a:i;return o?l===r||s+l===r?n:t:l===r||l===s+r?n:t}}return t}}var n;return function(t,e,i){const n=e===1/0;switch(i.infinity.toLowerCase()){case"null":return null;case"infinity":return e;case"string":return n?"Infinity":"-Infinity";default:return t}}(t,Number(i),e)}const K=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function tt(t,e){const i=t.trim();if(2!==e&&8!==e||(t=i.substring(2)),parseInt)return parseInt(t,e);if(Number.parseInt)return Number.parseInt(t,e);if(window&&window.parseInt)return window.parseInt(t,e);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}class et{constructor(t){this._matcher=t}get separator(){return this._matcher.separator}getCurrentTag(){const t=this._matcher.path;return t.length>0?t[t.length-1].tag:void 0}getCurrentNamespace(){const t=this._matcher.path;return t.length>0?t[t.length-1].namespace:void 0}getAttrValue(t){const e=this._matcher.path;if(0!==e.length)return e[e.length-1].values?.[t]}hasAttr(t){const e=this._matcher.path;if(0===e.length)return!1;const i=e[e.length-1];return void 0!==i.values&&t in i.values}getPosition(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].position??0}getCounter(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(t,e=!0){return this._matcher.toString(t,e)}toArray(){return this._matcher.path.map(t=>t.tag)}matches(t){return this._matcher.matches(t)}matchesAny(t){return t.matchesAny(this._matcher)}}class it{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new et(this)}push(t,e=null,i=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const n=this.path.length;this.siblingStacks[n]||(this.siblingStacks[n]=new Map);const r=this.siblingStacks[n],s=i?`${i}:${t}`:t,o=r.get(s)||0;let a=0;for(const t of r.values())a+=t;r.set(s,o+1);const l={tag:t,position:a,counter:o};null!=i&&(l.namespace=i),null!=e&&(l.values=e),this.path.push(l)}pop(){if(0===this.path.length)return;this._pathStringCache=null;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0!==this.path.length)return this.path[this.path.length-1].values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const i=t||this.separator;if(i===this.separator&&!0===e){if(null!==this._pathStringCache)return this._pathStringCache;const t=this.path.map(t=>t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(i);return this._pathStringCache=t,t}return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(i)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++)if(!this._matchSegment(t[e],this.path[e],e===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,i=t.length-1;for(;i>=0&&e>=0;){const n=t[i];if("deep-wildcard"===n.type){if(i--,i<0)return!0;const n=t[i];let r=!1;for(let t=e;t>=0;t--)if(this._matchSegment(n,this.path[t],t===this.path.length-1)){e=t-1,i--,r=!0;break}if(!r)return!1}else{if(!this._matchSegment(n,this.path[e],e===this.path.length-1))return!1;e--,i--}}return i<0}_matchSegment(t,e,i){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!i)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue&&String(e.values[t.attrName])!==String(t.attrValue))return!1}if(void 0!==t.position){if(!i)return!1;const n=e.counter??0;if("first"===t.position&&0!==n)return!1;if("odd"===t.position&&n%2!=1)return!1;if("even"===t.position&&n%2!=0)return!1;if("nth"===t.position&&n!==t.positionValue)return!1}return!0}matchesAny(t){return t.matchesAny(this)}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this._pathStringCache=null,this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}readOnly(){return this._view}}class nt{constructor(t,e={},i){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this.data=i,this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let i=0,n="";for(;i<t.length;)t[i]===this.separator?i+1<t.length&&t[i+1]===this.separator?(n.trim()&&(e.push(this._parseSegment(n.trim())),n=""),e.push({type:"deep-wildcard"}),i+=2):(n.trim()&&e.push(this._parseSegment(n.trim())),n="",i++):(n+=t[i],i++);return n.trim()&&e.push(this._parseSegment(n.trim())),e}_parseSegment(t){const e={type:"tag"};let i=null,n=t;const r=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(r&&(n=r[1]+r[3],r[2])){const t=r[2].slice(1,-1);t&&(i=t)}let s,o,a=n;if(n.includes("::")){const e=n.indexOf("::");if(s=n.substring(0,e).trim(),a=n.substring(e+2).trim(),!s)throw new Error(`Invalid namespace in pattern: ${t}`)}let l=null;if(a.includes(":")){const t=a.lastIndexOf(":"),e=a.substring(0,t).trim(),i=a.substring(t+1).trim();["first","last","odd","even"].includes(i)||/^nth\(\d+\)$/.test(i)?(o=e,l=i):o=a}else o=a;if(!o)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=o,s&&(e.namespace=s),i)if(i.includes("=")){const t=i.indexOf("=");e.attrName=i.substring(0,t).trim(),e.attrValue=i.substring(t+1).trim()}else e.attrName=i.trim();if(l){const t=l.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=l}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class rt{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._patterns=new Set,this._sealed=!1}add(t){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(t.pattern))return this;if(this._patterns.add(t.pattern),t.hasDeepWildcard())return this._deepWildcards.push(t),this;const e=t.length,i=t.segments[t.segments.length-1],n=i?.tag;if(n&&"*"!==n){const i=`${e}:${n}`;this._byDepthAndTag.has(i)||this._byDepthAndTag.set(i,[]),this._byDepthAndTag.get(i).push(t)}else this._wildcardByDepth.has(e)||this._wildcardByDepth.set(e,[]),this._wildcardByDepth.get(e).push(t);return this}addAll(t){for(const e of t)this.add(e);return this}has(t){return this._patterns.has(t.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(t){return null!==this.findMatch(t)}findMatch(t){const e=t.getDepth(),i=`${e}:${t.getCurrentTag()}`,n=this._byDepthAndTag.get(i);if(n)for(let e=0;e<n.length;e++)if(t.matches(n[e]))return n[e];const r=this._wildcardByDepth.get(e);if(r)for(let e=0;e<r.length;e++)if(t.matches(r[e]))return r[e];for(let e=0;e<this._deepWildcards.length;e++)if(t.matches(this._deepWildcards[e]))return this._deepWildcards[e];return null}}const st={cent:"¢",pound:"£",curren:"¤",yen:"¥",euro:"€",dollar:"$",fnof:"ƒ",inr:"₹",af:"؋",birr:"ብር",peso:"₱",rub:"₽",won:"₩",yuan:"¥",cedil:"¸"},ot={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'},at={nbsp:" ",copy:"©",reg:"®",trade:"™",mdash:"—",ndash:"–",hellip:"…",laquo:"«",raquo:"»",lsquo:"‘",rsquo:"’",ldquo:"“",rdquo:"”",bull:"•",para:"¶",sect:"§",deg:"°",frac12:"½",frac14:"¼",frac34:"¾"},lt=Object.freeze({ALLOW:"allow",BLOCK:"block",THROW:"throw"}),pt=new Set("!?\\\\/[]$%{}^&*()<>|+");function ct(t){if("#"===t[0])throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${t}"`);for(const e of t)if(pt.has(e))throw new Error(`[EntityReplacer] Invalid character '${e}' in entity name: "${t}"`);return t}function ht(...t){const e=Object.create(null);for(const i of t)if(i)for(const t of Object.keys(i)){const n=i[t];if("string"==typeof n)e[t]=n;else if(n&&"object"==typeof n&&void 0!==n.val){const i=n.val;"string"==typeof i&&(e[t]=i)}}return e}const dt="external",ut="base",ft="all",gt=Object.freeze({allow:0,leave:1,remove:2,throw:3}),mt=new Set([9,10,13]);class xt{constructor(t={}){var e;this._limit=t.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck="function"==typeof t.postCheck?t.postCheck:t=>t,this._limitTiers=(e=this._limit.applyLimitsTo??dt)&&e!==dt?e===ft?new Set([ft]):e===ut?new Set([ut]):Array.isArray(e)?new Set(e):new Set([dt]):new Set([dt]),this._numericAllowed=t.numericAllowed??!0,this._baseMap=ht(ot,t.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(t.remove&&Array.isArray(t.remove)?t.remove:[]),this._leaveSet=new Set(t.leave&&Array.isArray(t.leave)?t.leave:[]);const i=function(t){if(!t)return{xmlVersion:1,onLevel:gt.allow,nullLevel:gt.remove};const e=1.1===t.xmlVersion?1.1:1,i=gt[t.onNCR]??gt.allow,n=gt[t.nullNCR]??gt.remove;return{xmlVersion:e,onLevel:i,nullLevel:Math.max(n,gt.remove)}}(t.ncr);this._ncrXmlVersion=i.xmlVersion,this._ncrOnLevel=i.onLevel,this._ncrNullLevel=i.nullLevel,this._onExternalEntity="function"==typeof t.onExternalEntity?t.onExternalEntity:null,this._onInputEntity="function"==typeof t.onInputEntity?t.onInputEntity:null}_applyRegistrationHook(t,e,i,n){if(!t)return!0;const r=t(e,i);if(r===lt.BLOCK)return!1;if(r===lt.THROW)throw new Error(`[EntityDecoder] Registration of ${n} entity "&${e};" was rejected by hook`);return!0}setExternalEntities(t){if(t)for(const e of Object.keys(t))ct(e);if(!this._onExternalEntity)return void(this._externalMap=ht(t));const e=ht(t),i=Object.create(null);for(const[t,n]of Object.entries(e))this._applyRegistrationHook(this._onExternalEntity,t,n,"external")&&(i[t]=n);this._externalMap=i}addExternalEntity(t,e){ct(t),"string"==typeof e&&-1===e.indexOf("&")&&this._applyRegistrationHook(this._onExternalEntity,t,e,"external")&&(this._externalMap[t]=e)}addInputEntities(t){if(this._totalExpansions=0,this._expandedLength=0,!this._onInputEntity)return void(this._inputMap=ht(t));const e=ht(t),i=Object.create(null);for(const[t,n]of Object.entries(e))this._applyRegistrationHook(this._onInputEntity,t,n,"input")&&(i[t]=n);this._inputMap=i}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(t){this._ncrXmlVersion=1.1===t?1.1:1}decode(t){if("string"!=typeof t||0===t.length)return t;if(-1===t.indexOf("&"))return t;const e=t,i=[],n=t.length;let r=0,s=0;const o=this._maxTotalExpansions>0,a=this._maxExpandedLength>0,l=o||a;for(;s<n;){if(38!==t.charCodeAt(s)){s++;continue}let e=s+1;for(;e<n&&59!==t.charCodeAt(e)&&e-s<=32;)e++;if(e>=n||59!==t.charCodeAt(e)){s++;continue}const p=t.slice(s+1,e);if(0===p.length){s++;continue}let c,h;if(this._removeSet.has(p))c="",void 0===h&&(h=dt);else{if(this._leaveSet.has(p)){s++;continue}if(35===p.charCodeAt(0)){const t=this._resolveNCR(p);if(void 0===t){s++;continue}c=t,h=ut}else{const t=this._resolveName(p);c=t?.value,h=t?.tier}}if(void 0!==c){if(s>r&&i.push(t.slice(r,s)),i.push(c),r=e+1,s=r,l&&this._tierCounts(h)){if(o&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(a){const t=c.length-(p.length+2);if(t>0&&(this._expandedLength+=t,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}else s++}r<n&&i.push(t.slice(r));const p=0===i.length?t:i.join("");return this._postCheck(p,e)}_tierCounts(t){return!!this._limitTiers.has(ft)||this._limitTiers.has(t)}_resolveName(t){return t in this._inputMap?{value:this._inputMap[t],tier:dt}:t in this._externalMap?{value:this._externalMap[t],tier:dt}:t in this._baseMap?{value:this._baseMap[t],tier:ut}:void 0}_classifyNCR(t){return 0===t?this._ncrNullLevel:t>=55296&&t<=57343||1===this._ncrXmlVersion&&t>=1&&t<=31&&!mt.has(t)?gt.remove:-1}_applyNCRAction(t,e,i){switch(t){case gt.allow:return String.fromCodePoint(i);case gt.remove:return"";case gt.leave:return;case gt.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${e}; (U+${i.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(i)}}_resolveNCR(t){const e=t.charCodeAt(1);let i;if(i=120===e||88===e?parseInt(t.slice(2),16):parseInt(t.slice(1),10),Number.isNaN(i)||i<0||i>1114111)return;const n=this._classifyNCR(i);if(!this._numericAllowed&&n<gt.remove)return;const r=-1===n?this._ncrOnLevel:Math.max(this._ncrOnLevel,n);return this._applyNCRAction(r,t,i)}}const bt=[{id:"sql-block-comment-open",description:"SQL block comment open: /* ... */ — unusual in legitimate user text",pattern:/\/\*/},{id:"sql-union-select",description:"UNION SELECT — most common SQL injection aggregation attack",pattern:/\bUNION\s{1,20}(?:ALL\s{1,20})?SELECT\b/i},{id:"sql-drop-table",description:"DROP TABLE — destructive DDL injection",pattern:/\bDROP\s{1,20}TABLE\b/i},{id:"sql-drop-database",description:"DROP DATABASE — destructive DDL injection",pattern:/\bDROP\s{1,20}DATABASE\b/i},{id:"sql-insert-into",description:"INSERT INTO — data injection",pattern:/\bINSERT\s{1,20}INTO\b/i},{id:"sql-delete-from",description:"DELETE FROM — data deletion injection",pattern:/\bDELETE\s{1,20}FROM\b/i},{id:"sql-update-set",description:"UPDATE ... SET — data modification injection",pattern:/\bUPDATE\b[\s\S]{1,60}\bSET\b/i},{id:"sql-exec-xp",description:"EXEC xp_ — MSSQL extended stored procedure execution",pattern:/\bEXEC(?:UTE)?\s{1,20}xp_/i},{id:"sql-tautology-string",description:'Classic string tautology: \' OR \'1\'=\'1 or " OR "1"="1"',pattern:/'\s{0,10}OR\s{0,10}'[^']{0,20}'\s*=\s*'[^']{0,20}/i},{id:"sql-tautology-numeric",description:"Numeric tautology: OR 1=1",pattern:/\bOR\s{1,10}1\s*=\s*1\b/i},{id:"sql-always-true-zero",description:"Numeric tautology: OR 0=0",pattern:/\bOR\s{1,10}0\s*=\s*0\b/i},{id:"sql-sleep-benchmark",description:"Time-based blind injection: SLEEP() or BENCHMARK()",pattern:/\b(?:SLEEP|BENCHMARK)\s*\(/i},{id:"sql-waitfor-delay",description:"MSSQL time-based blind injection: WAITFOR DELAY",pattern:/\bWAITFOR\s{1,20}DELAY\b/i},{id:"sql-char-function",description:"CHAR() function — used to obfuscate injected strings",pattern:/\bCHAR\s*\(\s*\d{1,3}/i},{id:"sql-information-schema",description:"INFORMATION_SCHEMA — reconnaissance query for table/column enumeration",pattern:/\bINFORMATION_SCHEMA\b/i}],yt="[\"'\\s]*:",Nt={HTML:[{id:"html-script-open",description:"<script opening tag",pattern:/<script[\s>/]/i},{id:"html-script-close",description:"<\/script closing tag",pattern:/<\/script[\s>]/i},{id:"html-javascript-protocol",description:"javascript: URI scheme (with optional whitespace/encoding)",pattern:/j[\t\n\r ]*a[\t\n\r ]*v[\t\n\r ]*a[\t\n\r ]*s[\t\n\r ]*c[\t\n\r ]*r[\t\n\r ]*i[\t\n\r ]*p[\t\n\r ]*t[\t\n\r ]*:/i},{id:"html-vbscript-protocol",description:"vbscript: URI scheme",pattern:/vbscript[\t\n\r ]*:/i},{id:"html-data-html",description:"data:text/html URI — can execute scripts in browsers",pattern:/data[\t\n\r ]*:[\t\n\r ]*text\/html/i},{id:"html-data-xhtml",description:"data:application/xhtml+xml URI",pattern:/data[\t\n\r ]*:[\t\n\r ]*application\/xhtml/i},{id:"html-data-svg",description:"data:image/svg+xml URI — can execute scripts",pattern:/data[\t\n\r ]*:[\t\n\r ]*image\/svg\+xml/i},{id:"html-inline-event-handler",description:"Inline event handler attributes: onclick=, onerror=, onload=, etc.",pattern:/\bon\w{1,30}\s*=/i},{id:"html-entity-obfuscated-script",description:"HTML-entity-encoded <script (e.g. <script or <script)",pattern:/(?:�*3[Cc];?|�*60;?|<)\s*script/i},{id:"html-entity-obfuscated-javascript",description:'HTML-entity-encoded javascript: (partial — catches common j or j for "j")',pattern:/(?:�*6[Aa];?|�*106;?)\s*(?:�*61;?|a)[\s\S]{0,80}script\s*:/i},{id:"html-style-expression",description:"CSS expression() — IE-era code execution in style attributes",pattern:/style[\s\S]{0,20}expression\s*\(/i},{id:"html-object-embed",description:"<object or <embed tags that can load active content",pattern:/<(?:object|embed)[\s>/]/i},{id:"html-base-tag",description:"<base href= — can hijack all relative URLs on a page",pattern:/<base[\s>]/i},{id:"html-meta-refresh",description:'<meta http-equiv="refresh" — can redirect users',pattern:/<meta[\s\S]{0,40}http-equiv[\s\S]{0,20}refresh/i},{id:"html-srcdoc",description:"srcdoc= attribute on iframes — embeds HTML that can run scripts",pattern:/srcdoc\s*=/i},{id:"html-iframe",description:"<iframe tag",pattern:/<iframe[\s>/]/i},{id:"html-form",description:"<form tag — can be used for phishing / credential harvesting injection",pattern:/<form[\s>/]/i}],XML:[{id:"xml-cdata-injection",description:"CDATA section injection: <![CDATA[ breaks out of text node context",pattern:/<!\[CDATA\[/i},{id:"xml-cdata-close",description:"CDATA close sequence: ]]> can terminate an enclosing CDATA section",pattern:/\]\]>/},{id:"xml-processing-instruction",description:"XML processing instruction: <?xml-stylesheet or <?php etc.",pattern:/<\?(?:xml[\- ]|php|asp)/i},{id:"xml-doctype-injection",description:"DOCTYPE declaration embedded in content — can define entities",pattern:/<!DOCTYPE(?:[\s[]|$)/i},{id:"xml-entity-system",description:"SYSTEM keyword — used in external entity declarations (XXE)",pattern:/\bSYSTEM\s+["']/i},{id:"xml-entity-public",description:"PUBLIC keyword — used in external entity declarations (XXE)",pattern:/\bPUBLIC\s+["']/i},{id:"xml-entity-declaration",description:"<!ENTITY declaration — defines entities, potential XXE or entity expansion",pattern:/<!ENTITY[\s%]/i},{id:"xml-billion-laughs",description:"Entity reference chaining / billion laughs: repeated &eX; style references",pattern:/(?:&\w{1,20};){3,}/},{id:"xml-namespace-confusion",description:"xmlns: attribute injection — can redefine namespaces to confuse parsers",pattern:/\bxmlns\s*(?::\w{1,40})?\s*=/i},{id:"xml-comment-injection",description:"\x3c!-- comment injection — can hide content from some parsers",pattern:/<!--/},{id:"xml-comment-close",description:"--\x3e closes an enclosing XML comment",pattern:/-->/},{id:"xml-pi-close",description:"?> closes an enclosing processing instruction",pattern:/\?>/}],SVG:[{id:"svg-script-element",description:"<script element inside SVG executes JavaScript",pattern:/<script[\s>/]/i},{id:"svg-xlink-href-javascript",description:"xlink:href with javascript: — classic SVG XSS via <a> or <use>",pattern:/xlink\s*:\s*href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-href-javascript",description:"href= with javascript: in SVG context (<a>, <animate>, etc.)",pattern:/href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-foreignobject",description:"<foreignObject embeds HTML inside SVG — can execute scripts",pattern:/<foreignObject[\s>/]/i},{id:"svg-use-external",description:"<use xlink:href or href pointing to external resource (non-fragment URL)",pattern:/<use[\s\S]{0,60}(?:xlink\s*:\s*)?href\s*=\s*(?:["'][^#]|[^"'#\s>])/i},{id:"svg-animate-href",description:'<animate attributeName="href" — can dynamically change href to javascript:',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*href["']/i},{id:"svg-animate-xlinkhref",description:'<animate attributeName="xlink:href"',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*xlink\s*:\s*href["']/i},{id:"svg-set-javascript",description:'<set to="javascript:..." — sets an attribute to a javascript: URI',pattern:/<set[\s\S]{0,80}to\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-event-handler",description:"SVG-specific event handler attributes: onload=, onerror=, onactivate=, etc.",pattern:/\bon(?:load|error|activate|begin|end|repeat|focus|blur|click|mouse\w{1,20}|key\w{1,20})\s*=/i},{id:"svg-handler-generic",description:"Generic on* handler catch-all for SVG attributes",pattern:/\bon\w{1,30}\s*=/i},{id:"svg-filter-feimage",description:"<feImage href= — filter primitive that can load external resources",pattern:/<feImage[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=/i},{id:"svg-image-external",description:"<image xlink:href with http/https or javascript protocol",pattern:/<image[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=\s*["']?\s*(?:https?|javascript)\s*:/i},{id:"svg-style-javascript",description:"style= attribute containing javascript: (e.g. background:url(javascript:...))",pattern:/style\s*=[\s\S]{0,60}javascript\s*:/i}],SQL:bt,"SQL-STRICT":[...bt,{id:"sql-line-comment",description:"SQL line comment: -- followed by whitespace or end of string",pattern:/--(?:\s|$)/},{id:"sql-stacked-query",description:"Stacked queries: semicolon immediately followed by a SQL keyword",pattern:/;\s{0,10}(?:SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC)\b/i},{id:"sql-hex-encoding",description:"Hex-encoded string injection: 0x41414141 style (MySQL)",pattern:/\b0x[0-9a-f]{4,}/i}],SHELL:[{id:"shell-path-traversal-unix",description:"Unix path traversal: ../ — climbing the directory tree",pattern:/\.\.\//},{id:"shell-path-traversal-windows",description:"Windows path traversal: ..\\ — climbing the directory tree",pattern:/\.\.\\/},{id:"shell-path-traversal-encoded",description:"URL-encoded path traversal: %2e%2e or %2f variants",pattern:/%2e%2e|%2f\.\.|\.\.%2f/i},{id:"shell-null-byte",description:"Null byte injection: \\x00 or %00 — truncates strings in C-backed functions",pattern:/\x00|%00/},{id:"shell-semicolon",description:"Semicolon command separator: cmd1; cmd2",pattern:/;/},{id:"shell-pipe",description:"Pipe operator: cmd1 | cmd2",pattern:/\|/},{id:"shell-and-operator",description:"AND operator: cmd1 && cmd2",pattern:/&&/},{id:"shell-or-operator",description:"OR operator: cmd1 || cmd2",pattern:/\|\|/},{id:"shell-backtick",description:"Backtick command substitution: `cmd`",pattern:/`/},{id:"shell-dollar-paren",description:"Dollar-paren command substitution: $(cmd)",pattern:/\$\(/},{id:"shell-dollar-brace",description:"Dollar-brace variable expansion: ${var} — can be abused for injection",pattern:/\$\{/},{id:"shell-redirect-out",description:"Output redirection: cmd > file or cmd >> file",pattern:/>{1,2}/},{id:"shell-redirect-in",description:"Input redirection: cmd < file",pattern:/</},{id:"shell-newline-injection",description:"Newline injection: \\n or \\r — can inject new shell commands",pattern:/[\n\r]/},{id:"shell-glob-star",description:"Glob expansion: * or ? — can expand to unintended files",pattern:/[/\\][*?]/},{id:"shell-absolute-root",description:"Absolute root path injection: string starting with / or \\ (Windows UNC)",pattern:/^(?:\/|\\\\)/},{id:"shell-windows-drive",description:"Windows drive letter path injection: C:\\ or D:/",pattern:/^[a-zA-Z]:[/\\]/},{id:"shell-curl-wget",description:"curl/wget with URL or flags — can exfiltrate data or download payloads",pattern:/\b(?:curl|wget)\s+(?:https?:\/\/|ftp:\/\/|-)/i}],REDOS:[{id:"redos-nested-quantifier-plus",description:"Nested + quantifier inside a group with outer quantifier: (a+)+, (.+b)*, etc.",pattern:/\([^)]*\+[^)]*\)[+*]/},{id:"redos-nested-quantifier-star",description:"Nested * quantifier: (a*)* or (a*)+ — catastrophic backtracking",pattern:/\([^)]*\*[^)]*\)[*+]/},{id:"redos-nested-groups",description:"Doubly nested quantified groups: ((a+)+) — guaranteed catastrophic",pattern:/\(\([^)]{0,40}\)[+*]\)[+*]/},{id:"redos-alternation-overlap",description:"Overlapping alternation under quantifier: (a|a)+ — ambiguous NFA paths",pattern:/\(([^|()]{1,20})\|(?:\1)(?:\|[^|()]{1,20}){0,5}\)[+*?]{1,2}/},{id:"redos-star-plus-concat",description:"(x*x)+ pattern — triggers super-linear backtracking",pattern:/\([^)]{0,10}\*[^)]{0,10}\)[+*]/},{id:"redos-dot-star-greedy",description:"(.*){n,} or (.+){n,} — repeated greedy dot quantifiers",pattern:/\(\.[*+]\)\{?\d/},{id:"redos-large-repetition",description:"Very large fixed or range repetition count {1000,} or {1000,n} — denial of service via backtracking",pattern:/\{\d{4,}(?:,\d*)?\}/},{id:"redos-catastrophic-alternation",description:"Long alternation with many similar branches — polynomial backtracking risk",pattern:/\([^)]{0,200}(?:\|[^|)]{0,50}){9,}\)/}],NOSQL:[{id:"nosql-where-operator",description:"$where — executes arbitrary JavaScript server-side in MongoDB",pattern:new RegExp(`\\$where${yt}`,"i")},{id:"nosql-ne-operator",description:'$ne — "not equal" operator used to bypass equality checks',pattern:new RegExp(`\\$ne${yt}`,"i")},{id:"nosql-gt-operator",description:'$gt — "greater than" used to bypass password/value checks',pattern:new RegExp(`\\$gte?${yt}`,"i")},{id:"nosql-lt-operator",description:'$lt / $lte — "less than" bypass variants',pattern:new RegExp(`\\$lte?${yt}`,"i")},{id:"nosql-regex-operator",description:"$regex — can be used to extract data character by character (blind injection)",pattern:new RegExp(`\\$regex${yt}`,"i")},{id:"nosql-or-operator",description:"$or — logical OR; used to create always-true conditions",pattern:new RegExp(`\\$or${yt}\\s*\\[`,"i")},{id:"nosql-and-operator",description:"$and — logical AND operator injection",pattern:new RegExp(`\\$and${yt}\\s*\\[`,"i")},{id:"nosql-nor-operator",description:"$nor — logical NOR operator injection",pattern:new RegExp(`\\$nor${yt}\\s*\\[`,"i")},{id:"nosql-exists-operator",description:"$exists — can enumerate fields to determine schema",pattern:new RegExp(`\\$exists${yt}`,"i")},{id:"nosql-in-operator",description:"$in — matches any value in a list; can enumerate values",pattern:new RegExp(`\\$in${yt}\\s*\\[`,"i")},{id:"nosql-expr-operator",description:"$expr — allows aggregation expressions in queries (MongoDB 3.6+)",pattern:new RegExp(`\\$expr${yt}`,"i")},{id:"nosql-function-operator",description:"$function — executes arbitrary JavaScript in MongoDB 4.4+",pattern:new RegExp(`\\$function${yt}`,"i")},{id:"nosql-accumulator-operator",description:"$accumulator — custom aggregation with arbitrary JS execution",pattern:new RegExp(`\\$accumulator${yt}`,"i")},{id:"nosql-proto-pollution",description:"__proto__ — prototype pollution via object key injection",pattern:/__proto__/},{id:"nosql-constructor-prototype",description:"constructor.prototype — alternative prototype pollution vector (dot notation or JSON key)",pattern:/constructor[\s"':.,{\[]*prototype/i},{id:"nosql-proto-bracket",description:'["__proto__"] — bracket-notation prototype pollution',pattern:/\[["']__proto__["']\]/}],LOG:[{id:"log-crlf-injection",description:"CRLF injection: literal \\r or \\n embeds fake log lines",pattern:/[\r\n]/},{id:"log-url-encoded-crlf",description:"URL-encoded CRLF: %0d, %0a, %0D, %0A — decoded by some log parsers",pattern:/%0[dDaA]/},{id:"log-unicode-newline",description:"Unicode newline variants: U+2028 (line separator), U+2029 (paragraph separator)",pattern:/[\u2028\u2029]/},{id:"log-log4shell-jndi",description:"Log4Shell: ${jndi:...} triggers remote code execution in Apache Log4j",pattern:/\$\{jndi\s*:/i},{id:"log-log4shell-obfuscated",description:"Obfuscated Log4Shell: ${::-j}... lookup-bypass prefix used to evade WAF detection",pattern:/\$\{::-/},{id:"log-log4j-lookup",description:"Log4j lookup syntax: ${env:...}, ${sys:...}, ${ctx:...} — data exfiltration",pattern:/\$\{(?:env|sys|ctx|main|map|sd|web|docker|k8s|spring)\s*:/i},{id:"log-ssti-double-brace",description:"SSTI double-brace: {{expression}} — Jinja2, Twig, Handlebars, etc.",pattern:/\{\{[\s\S]{0,80}\}\}/},{id:"log-ssti-hash-brace",description:"SSTI hash-brace: #{expression} — Thymeleaf, Velocity, Ruby ERB",pattern:/#\{[\s\S]{0,80}\}/},{id:"log-ssti-dollar-brace",description:"SSTI/EL injection: ${expression with operators or method calls} — JSP EL, Freemarker, SpEL",pattern:/\$\{[^}]*(?:\.|\(|\*|\+|\bclass\b|\bruntime\b|\bprocess\b|\bexec\b)[^}]{0,80}\}/i},{id:"log-ssti-percent-tag",description:"SSTI ERB/ASP tag: <%= expression %> — Ruby ERB, ASP",pattern:/<%=[\s\S]{0,80}%>/},{id:"log-null-byte",description:"Null byte: \\x00 or %00 — can truncate log entries in C-backed loggers",pattern:/\x00|%00/},{id:"log-ansi-escape",description:"ANSI escape sequence: ESC[ — can manipulate terminal output when logs are tailed",pattern:/\x1b\[/}]},Et=Nt,wt=Object.freeze(Object.fromEntries(Object.keys(Nt).map(t=>[t,t])));function vt(t,e){const i=Et[e];for(const n of i)if(n.pattern.test(t))return{context:e,id:n.id,description:n.description,pattern:n.pattern};return null}function St(t,e){if(function(t){if("string"!=typeof t)throw new TypeError("is-unsafe: first argument must be a string, got "+typeof t)}(t),function(t){if(!(t instanceof RegExp))if("string"!=typeof t){if(!Array.isArray(t))throw new TypeError("is-unsafe: second argument must be a context string, array of context strings, or RegExp. Got: "+typeof t);if(0===t.length)throw new TypeError("is-unsafe: context array must not be empty");for(const e of t)if("string"!=typeof e||!Et[e])throw new TypeError(`is-unsafe: unknown context "${e}" in array. Valid contexts: ${Object.keys(wt).join(", ")}`)}else if(!Et[t])throw new TypeError(`is-unsafe: unknown context "${t}". Valid contexts: ${Object.keys(wt).join(", ")}`)}(e),e instanceof RegExp)return e.test(t);if("string"==typeof e)return null!==vt(t,e);for(const i of e)if(null!==vt(t,i))return!0;return!1}function At(t,e){if(!t)return{};const i=e.attributesGroupName?t[e.attributesGroupName]:t;if(!i)return{};const n={};for(const t in i)t.startsWith(e.attributeNamePrefix)?n[t.substring(e.attributeNamePrefix.length)]=i[t]:n[t]=i[t];return n}function Tt(t){if(!t||"string"!=typeof t)return;const e=t.indexOf(":");if(-1!==e&&e>0){const i=t.substring(0,e);if("xmlns"!==i)return i}}class _t{constructor(t,e){var i;this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=jt,this.parseTextData=Ct,this.resolveNameSpace=$t,this.buildAttributesMap=Pt,this.isItStopNode=Dt,this.replaceEntitiesValue=kt,this.readStopNodeData=qt,this.saveTextToParentTag=Lt,this.addChild=It,this.ignoreAttributesFn="function"==typeof(i=this.options.ignoreAttributes)?i:Array.isArray(i)?t=>{for(const e of i){if("string"==typeof e&&t===e)return!0;if(e instanceof RegExp&&e.test(t))return!0}}:()=>!1,this.entityExpansionCount=0,this.currentExpandedLength=0;let n={...ot};this.options.entityDecoder?this.entityDecoder=this.options.entityDecoder:("object"==typeof this.options.htmlEntities?n=this.options.htmlEntities:!0===this.options.htmlEntities&&(n={...at,...st}),this.entityDecoder=new xt({namedEntities:{...n,...e},numericAllowed:this.options.htmlEntities,limit:{maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:this.options.processEntities.appliesTo},onInputEntity:(t,e)=>St(e,[wt.HTML,wt.XML])?lt.BLOCK:lt.ALLOW})),this.matcher=new it,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new rt;const r=this.options.stopNodes;if(r&&r.length>0){for(let t=0;t<r.length;t++){const e=r[t];"string"==typeof e?this.stopNodeExpressionsSet.add(new nt(e)):e instanceof nt&&this.stopNodeExpressionsSet.add(e)}this.stopNodeExpressionsSet.seal()}}}function Ct(t,e,i,n,r,s,o){const a=this.options;if(void 0!==t&&(a.trimValues&&!n&&(t=t.trim()),t.length>0)){o||(t=this.replaceEntitiesValue(t,e,i));const n=a.jPath?i.toString():i,l=a.tagValueProcessor(e,t,n,r,s);return null==l?t:typeof l!=typeof t||l!==t?l:a.trimValues||t.trim()===t?Ft(t,a.parseTagValue,a.numberParseOptions):t}}function $t(t){if(this.options.removeNSPrefix){const e=t.split(":"),i="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=i+e[1])}return t}const Ot=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function Pt(t,e,i,n=!1){const s=this.options;if(!0===n||!0!==s.ignoreAttributes&&"string"==typeof t){const n=r(t,Ot),o=n.length,a={},l=new Array(o);let p=!1;const c={};for(let t=0;t<o;t++){const e=this.resolveNameSpace(n[t][1]),r=n[t][4];if(e.length&&void 0!==r){let n=r;s.trimValues&&(n=n.trim()),n=this.replaceEntitiesValue(n,i,this.readonlyMatcher),l[t]=n,c[e]=n,p=!0}}p&&"object"==typeof e&&e.updateCurrent&&e.updateCurrent(c);const h=s.jPath?e.toString():this.readonlyMatcher;let d=!1;for(let t=0;t<o;t++){const e=this.resolveNameSpace(n[t][1]);if(this.ignoreAttributesFn(e,h))continue;let i=s.attributeNamePrefix+e;if(e.length)if(s.transformAttributeName&&(i=s.transformAttributeName(i)),i=Gt(i,s),void 0!==n[t][4]){const n=l[t],r=s.attributeValueProcessor(e,n,h);a[i]=null==r?n:typeof r!=typeof n||r!==n?r:Ft(n,s.parseAttributeValue,s.numberParseOptions),d=!0}else s.allowBooleanAttributes&&(a[i]=!0,d=!0)}if(!d)return;if(s.attributesGroupName&&!s.preserveOrder){const t={};return t[s.attributesGroupName]=a,t}return a}}const jt=function(t){t=t.replace(/\r\n?/g,"\n");const e=new O("!xml");let i=e,n="";this.matcher.reset(),this.entityDecoder.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0;const r=this.options,s=new M(r.processEntities),o=t.length;for(let a=0;a<o;a++)if("<"===t[a]){const l=t.charCodeAt(a+1);if(47===l){const e=Rt(t,">",a,"Closing Tag is not closed.");let s=t.substring(a+2,e).trim();if(r.removeNSPrefix){const t=s.indexOf(":");-1!==t&&(s=s.substr(t+1))}s=Ut(r.transformTagName,s,"",r).tagName,i&&(n=this.saveTextToParentTag(n,i,this.readonlyMatcher));const o=this.matcher.getCurrentTag();if(s&&r.unpairedTagsSet.has(s))throw new Error(`Unpaired tag can not be used as closing tag: </${s}>`);o&&r.unpairedTagsSet.has(o)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,i=this.tagsNodeStack.pop(),n="",a=e}else if(63===l){let e=Vt(t,a,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");n=this.saveTextToParentTag(n,i,this.readonlyMatcher);const o=this.buildAttributesMap(e.tagExp,this.matcher,e.tagName,!0);if(o){const t=o[this.options.attributeNamePrefix+"version"];this.entityDecoder.setXmlVersion(Number(t)||1),s.setXmlVersion(Number(t)||1)}if(r.ignoreDeclaration&&"?xml"===e.tagName||r.ignorePiTags);else{const t=new O(e.tagName);t.add(r.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&!0!==r.ignoreAttributes&&(t[":@"]=o),this.addChild(i,t,this.readonlyMatcher,a)}a=e.closeIndex+1}else if(33===l&&45===t.charCodeAt(a+2)&&45===t.charCodeAt(a+3)){const e=Rt(t,"--\x3e",a+4,"Comment is not closed.");if(r.commentPropName){const s=t.substring(a+4,e-2);n=this.saveTextToParentTag(n,i,this.readonlyMatcher),i.add(r.commentPropName,[{[r.textNodeName]:s}])}a=e}else if(33===l&&68===t.charCodeAt(a+2)){const e=s.readDocType(t,a);this.entityDecoder.addInputEntities(e.entities),a=e.i}else if(33===l&&91===t.charCodeAt(a+2)){const e=Rt(t,"]]>",a,"CDATA is not closed.")-2,s=t.substring(a+9,e);n=this.saveTextToParentTag(n,i,this.readonlyMatcher);let o=this.parseTextData(s,i.tagname,this.readonlyMatcher,!0,!1,!0,!0);null==o&&(o=""),r.cdataPropName?i.add(r.cdataPropName,[{[r.textNodeName]:s}]):i.add(r.textNodeName,o),a=e+2}else{let s=Vt(t,a,r.removeNSPrefix);if(!s){const e=t.substring(Math.max(0,a-50),Math.min(o,a+50));throw new Error(`readTagExp returned undefined at position ${a}. Context: "${e}"`)}let l=s.tagName;const p=s.rawTagName;let c=s.tagExp,h=s.attrExpPresent,d=s.closeIndex;if(({tagName:l,tagExp:c}=Ut(r.transformTagName,l,c,r)),r.strictReservedNames&&(l===r.commentPropName||l===r.cdataPropName||l===r.textNodeName||l===r.attributesGroupName))throw new Error(`Invalid tag name: ${l}`);i&&n&&"!xml"!==i.tagname&&(n=this.saveTextToParentTag(n,i,this.readonlyMatcher,!1));const u=i;u&&r.unpairedTagsSet.has(u.tagname)&&(i=this.tagsNodeStack.pop(),this.matcher.pop());let f=!1;c.length>0&&c.lastIndexOf("/")===c.length-1&&(f=!0,"/"===l[l.length-1]?(l=l.substr(0,l.length-1),c=l):c=c.substr(0,c.length-1),h=l!==c);let g,m=null,x={};g=Tt(p),l!==e.tagname&&this.matcher.push(l,{},g),l!==c&&h&&(m=this.buildAttributesMap(c,this.matcher,l),m&&(x=At(m,r))),l!==e.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());const b=a;if(this.isCurrentNodeStopNode){let e="";if(f)a=s.closeIndex;else if(r.unpairedTagsSet.has(l))a=s.closeIndex;else{const i=this.readStopNodeData(t,p,d+1);if(!i)throw new Error(`Unexpected end of ${p}`);a=i.i,e=i.tagContent}const n=new O(l);m&&(n[":@"]=m),n.add(r.textNodeName,e),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(i,n,this.readonlyMatcher,b)}else{if(f){({tagName:l,tagExp:c}=Ut(r.transformTagName,l,c,r));const t=new O(l);m&&(t[":@"]=m),this.addChild(i,t,this.readonlyMatcher,b),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else{if(r.unpairedTagsSet.has(l)){const t=new O(l);m&&(t[":@"]=m),this.addChild(i,t,this.readonlyMatcher,b),this.matcher.pop(),this.isCurrentNodeStopNode=!1,a=s.closeIndex;continue}{const t=new O(l);if(this.tagsNodeStack.length>r.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(i),m&&(t[":@"]=m),this.addChild(i,t,this.readonlyMatcher,b),i=t}}n="",a=d}}}else n+=t[a];return e.child};function It(t,e,i,n){this.options.captureMetaData||(n=void 0);const r=this.options.jPath?i.toString():i,s=this.options.updateTag(e.tagname,r,e[":@"]);!1===s||("string"==typeof s?(e.tagname=s,t.addChild(e,n)):t.addChild(e,n))}function kt(t,e,i){const n=this.options.processEntities;if(!n||!n.enabled)return t;if(n.allowedTags){const r=this.options.jPath?i.toString():i;if(!(Array.isArray(n.allowedTags)?n.allowedTags.includes(e):n.allowedTags(e,r)))return t}if(n.tagFilter){const r=this.options.jPath?i.toString():i;if(!n.tagFilter(e,r))return t}return this.entityDecoder.decode(t)}function Lt(t,e,i,n){return t&&(void 0===n&&(n=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,i,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,n))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function Dt(){return 0!==this.stopNodeExpressionsSet.size&&this.matcher.matchesAny(this.stopNodeExpressionsSet)}function Rt(t,e,i,n){const r=t.indexOf(e,i);if(-1===r)throw new Error(n);return r+e.length-1}function Mt(t,e,i,n){const r=t.indexOf(e,i);if(-1===r)throw new Error(n);return r}function Vt(t,e,i,n=">"){const r=function(t,e,i=">"){let n=0;const r=t.length,s=i.charCodeAt(0),o=i.length>1?i.charCodeAt(1):-1;let a="",l=e;for(let i=e;i<r;i++){const e=t.charCodeAt(i);if(n)e===n&&(n=0);else if(34===e||39===e)n=e;else if(e===s){if(-1===o)return a+=t.substring(l,i),{data:a,index:i};if(t.charCodeAt(i+1)===o)return a+=t.substring(l,i),{data:a,index:i}}else 9!==e||n||(a+=t.substring(l,i)+" ",l=i+1)}}(t,e+1,n);if(!r)return;let s=r.data;const o=r.index,a=s.search(/\s/);let l=s,p=!0;-1!==a&&(l=s.substring(0,a),s=s.substring(a+1).trimStart());const c=l;if(i){const t=l.indexOf(":");-1!==t&&(l=l.substr(t+1),p=l!==r.data.substr(t+1))}return{tagName:l,tagExp:s,closeIndex:o,attrExpPresent:p,rawTagName:c}}function qt(t,e,i){const n=i;let r=1;const s=t.length;for(;i<s;i++)if("<"===t[i]){const s=t.charCodeAt(i+1);if(47===s){const s=Mt(t,">",i,`${e} is not closed`);if(t.substring(i+2,s).trim()===e&&(r--,0===r))return{tagContent:t.substring(n,i),i:s};i=s}else if(63===s)i=Rt(t,"?>",i+1,"StopNode is not closed.");else if(33===s&&45===t.charCodeAt(i+2)&&45===t.charCodeAt(i+3))i=Rt(t,"--\x3e",i+3,"StopNode is not closed.");else if(33===s&&91===t.charCodeAt(i+2))i=Rt(t,"]]>",i,"StopNode is not closed.")-2;else{const n=Vt(t,i,!1);n&&((n&&n.tagName)===e&&"/"!==n.tagExp[n.tagExp.length-1]&&r++,i=n.closeIndex)}}}function Ft(t,e,i){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&Z(t,i)}return void 0!==t?t:""}function Ut(t,e,i,n){if(t){const n=t(e);i===e&&(i=n),e=n}return{tagName:e=Gt(e,n),tagExp:i}}function Gt(t,e){if(a.includes(t))throw new Error(`[SECURITY] Invalid name: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);return o.includes(t)?e.onDangerousProperty(t):t}const Bt=O.getMetaDataSymbol();function Wt(t,e){if(!t||"object"!=typeof t)return{};if(!e)return t;const i={};for(const n in t)n.startsWith(e)?i[n.substring(e.length)]=t[n]:i[n]=t[n];return i}function Xt(t,e,i,n){return Yt(t,e,i,n)}function Yt(t,e,i,n){let r;const s={};for(let o=0;o<t.length;o++){const a=t[o],l=zt(a);if(void 0!==l&&l!==e.textNodeName){const t=Wt(a[":@"]||{},e.attributeNamePrefix);i.push(l,t)}if(l===e.textNodeName)void 0===r?r=a[l]:r+=""+a[l];else{if(void 0===l)continue;if(a[l]){let t=Yt(a[l],e,i,n);const r=Qt(t,e);if(0===Object.keys(t).length&&e.alwaysCreateTextNode&&(t[e.textNodeName]=""),a[":@"]?Ht(t,a[":@"],n,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==a[Bt]&&"object"==typeof t&&null!==t&&(t[Bt]=a[Bt]),void 0!==s[l]&&Object.prototype.hasOwnProperty.call(s,l))Array.isArray(s[l])||(s[l]=[s[l]]),s[l].push(t);else{const i=e.jPath?n.toString():n;e.isArray(l,i,r)?s[l]=[t]:s[l]=t}void 0!==l&&l!==e.textNodeName&&i.pop()}}}return"string"==typeof r?r.length>0&&(s[e.textNodeName]=r):void 0!==r&&(s[e.textNodeName]=r),s}function zt(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const i=e[t];if(":@"!==i)return i}}function Ht(t,e,i,n){if(e){const r=Object.keys(e),s=r.length;for(let o=0;o<s;o++){const s=r[o],a=s.startsWith(n.attributeNamePrefix)?s.substring(n.attributeNamePrefix.length):s,l=n.jPath?i.toString()+"."+a:i;n.isArray(s,l,!0,!0)?t[s]=[e[s]]:t[s]=e[s]}}}function Qt(t,e){const{textNodeName:i}=e,n=Object.keys(t).length;return 0===n||!(1!==n||!t[i]&&"boolean"!=typeof t[i]&&0!==t[i])}class Jt{constructor(t){this.externalEntities={},this.options=C(t)}parse(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});const i=p(t,e);if(!0!==i)throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`)}const i=new _t(this.options,this.externalEntities),n=i.parseXml(t);return this.options.preserveOrder||void 0===n?n:Xt(n,this.options,i.matcher,i.readonlyMatcher)}addEntity(t,e){if(-1!==e.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==t.indexOf("&")||-1!==t.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===e)throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=e}static getMetaDataSymbol(){return O.getMetaDataSymbol()}}function Zt(t){return String(t).replace(/--/g,"- -").replace(/--/g,"- -").replace(/-$/,"- ")}function Kt(t){return String(t).replace(/\]\]>/g,"]]]]><![CDATA[>")}function te(t){return String(t).replace(/"/g,""").replace(/'/g,"'")}function ee(t,e,i,n,r){return i.sanitizeName?R(t,{xmlVersion:r})?t:i.sanitizeName(t,{isAttribute:e,matcher:n.readOnly()}):t}function ie(t,e){let i="";e.format&&(i="\n");const n=[];if(e.stopNodes&&Array.isArray(e.stopNodes))for(let t=0;t<e.stopNodes.length;t++){const i=e.stopNodes[t];"string"==typeof i?n.push(new nt(i)):i instanceof nt&&n.push(i)}const r=function(t,e){if(!Array.isArray(t)||0===t.length)return"1.0";const i=t[0];if("?xml"===ae(i)){const t=i[":@"];if(t){const i=e.attributeNamePrefix+"version";if(t[i])return t[i]}}return"1.0"}(t,e);return ne(t,e,i,new it,n,r)}function ne(t,e,i,n,r,s){let o="",a=!1;if(e.maxNestedTags&&n.getDepth()>e.maxNestedTags)throw new Error("Maximum nested tags exceeded");if(!Array.isArray(t)){if(null!=t){let i=t.toString();return i=ce(i,e),i}return""}for(let l=0;l<t.length;l++){const p=t[l],c=ae(p);if(void 0===c)continue;const h=c===e.textNodeName||c===e.cdataPropName||c===e.commentPropName||"?"===c[0]?c:ee(c,!1,e,n,s),d=re(p[":@"],e);n.push(h,d);const u=pe(n,r);if(h===e.textNodeName){let t=p[c];u||(t=e.tagValueProcessor(h,t),t=ce(t,e)),a&&(o+=i),o+=t,a=!1,n.pop();continue}if(h===e.cdataPropName){a&&(o+=i),o+=`<![CDATA[${Kt(p[c][0][e.textNodeName])}]]>`,a=!1,n.pop();continue}if(h===e.commentPropName){o+=i+`\x3c!--${Zt(p[c][0][e.textNodeName])}--\x3e`,a=!0,n.pop();continue}if("?"===h[0]){o+=("?xml"===h?"":i)+`<${h}${le(p[":@"],e,u,n,s)}?>`,a=!0,n.pop();continue}let f=i;""!==f&&(f+=e.indentBy);const g=i+`<${h}${le(p[":@"],e,u,n,s)}`;let m;m=u?se(p[c],e):ne(p[c],e,f,n,r,s),-1!==e.unpairedTags.indexOf(h)?e.suppressUnpairedNode?o+=g+">":o+=g+"/>":m&&0!==m.length||!e.suppressEmptyNode?m&&m.endsWith(">")?o+=g+`>${m}${i}</${h}>`:(o+=g+">",m&&""!==i&&(m.includes("/>")||m.includes("</"))?o+=i+e.indentBy+m+i:o+=m,o+=`</${h}>`):o+=g+"/>",a=!0,n.pop()}return o}function re(t,e){if(!t||e.ignoreAttributes)return null;const i={};let n=!1;for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&(i[r.startsWith(e.attributeNamePrefix)?r.substr(e.attributeNamePrefix.length):r]=te(t[r]),n=!0);return n?i:null}function se(t,e){if(!Array.isArray(t))return null!=t?t.toString():"";let i="";for(let n=0;n<t.length;n++){const r=t[n],s=ae(r);if(s===e.textNodeName)i+=r[s];else if(s===e.cdataPropName)i+=r[s][0][e.textNodeName];else if(s===e.commentPropName)i+=r[s][0][e.textNodeName];else{if(s&&"?"===s[0])continue;if(s){const t=oe(r[":@"],e),n=se(r[s],e);n&&0!==n.length?i+=`<${s}${t}>${n}</${s}>`:i+=`<${s}${t}/>`}}}return i}function oe(t,e){let i="";if(t&&!e.ignoreAttributes)for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let r=t[n];!0===r&&e.suppressBooleanAttributes?i+=` ${n.substr(e.attributeNamePrefix.length)}`:i+=` ${n.substr(e.attributeNamePrefix.length)}="${te(r)}"`}return i}function ae(t){const e=Object.keys(t);for(let i=0;i<e.length;i++){const n=e[i];if(Object.prototype.hasOwnProperty.call(t,n)&&":@"!==n)return n}}function le(t,e,i,n,r){let s="";if(t&&!e.ignoreAttributes)for(let o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;const a=o.substr(e.attributeNamePrefix.length),l=i?a:ee(a,!0,e,n,r);let p;i?p=t[o]:(p=e.attributeValueProcessor(o,t[o]),p=ce(p,e)),!0===p&&e.suppressBooleanAttributes?s+=` ${l}`:s+=` ${l}="${te(p)}"`}return s}function pe(t,e){if(!e||0===e.length)return!1;for(let i=0;i<e.length;i++)if(t.matches(e[i]))return!0;return!1}function ce(t,e){if(t&&t.length>0&&e.processEntities)for(let i=0;i<e.entities.length;i++){const n=e.entities[i];t=t.replace(n.regex,n.val)}return t}const he={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1,maxNestedTags:100,jPath:!0,sanitizeName:!1};function de(t){if(this.options=Object.assign({},he,t),this.options.stopNodes&&Array.isArray(this.options.stopNodes)&&(this.options.stopNodes=this.options.stopNodes.map(t=>"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t)),this.stopNodeExpressions=[],this.options.stopNodes&&Array.isArray(this.options.stopNodes))for(let t=0;t<this.options.stopNodes.length;t++){const e=this.options.stopNodes[t];"string"==typeof e?this.stopNodeExpressions.push(new nt(e)):e instanceof nt&&this.stopNodeExpressions.push(e)}var e;!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?t=>{for(const i of e){if("string"==typeof i&&t===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}}:()=>!1,this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=me),this.processTextOrObjNode=fe,this.options.format?(this.indentate=ge,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function ue(t,e,i,n,r){return i.sanitizeName?R(t,{xmlVersion:r})?t:i.sanitizeName(t,{isAttribute:e,matcher:n.readOnly()}):t}function fe(t,e,i,n,r){const s=this.extractAttributes(t);if(n.push(e,s),this.checkStopNode(n)){const r=this.buildRawContent(t),s=this.buildAttributesForStopNode(t);return n.pop(),this.buildObjectNode(r,e,s,i)}const o=this.j2x(t,i+1,n,r);return n.pop(),"?"===e[0]?this.buildTextValNode("",e,o.attrStr,i,n):void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,o.attrStr,i,n):this.buildObjectNode(o.val,e,o.attrStr,i)}function ge(t){return this.options.indentBy.repeat(t)}function me(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}de.prototype.build=function(t){if(this.options.preserveOrder)return ie(t,this.options);{Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t});const e=new it,i=function(t,e){const i=t["?xml"];if(i&&"object"==typeof i){if(e.attributesGroupName&&i[e.attributesGroupName]){const t=i[e.attributesGroupName][e.attributeNamePrefix+"version"];if(t)return t}const t=i[e.attributeNamePrefix+"version"];if(t)return t}return"1.0"}(t,this.options);return this.j2x(t,0,e,i).val}},de.prototype.j2x=function(t,e,i,n){let r="",s="";if(this.options.maxNestedTags&&i.getDepth()>=this.options.maxNestedTags)throw new Error("Maximum nested tags exceeded");const o=this.options.jPath?i.toString():i,a=this.checkStopNode(i);for(let l in t){if(!Object.prototype.hasOwnProperty.call(t,l))continue;const p=l===this.options.textNodeName||l===this.options.cdataPropName||l===this.options.commentPropName||this.options.attributesGroupName&&l===this.options.attributesGroupName||this.isAttribute(l)||"?"===l[0]?l:ue(l,!1,this.options,i,n);if(void 0===t[l])this.isAttribute(l)&&(s+="");else if(null===t[l])this.isAttribute(l)||p===this.options.cdataPropName||p===this.options.commentPropName?s+="":"?"===p[0]?s+=this.indentate(e)+"<"+p+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+p+"/"+this.tagEndChar;else if(t[l]instanceof Date)s+=this.buildTextValNode(t[l],p,"",e,i);else if("object"!=typeof t[l]){const c=this.isAttribute(l);if(c&&!this.ignoreAttributesFn(c,o)){const e=ue(c,!0,this.options,i,n);r+=this.buildAttrPairStr(e,""+t[l],a)}else if(!c)if(l===this.options.textNodeName){let e=this.options.tagValueProcessor(l,""+t[l]);s+=this.replaceEntitiesValue(e)}else{i.push(p);const n=this.checkStopNode(i);if(i.pop(),n){const i=""+t[l];s+=""===i?this.indentate(e)+"<"+p+this.closeTag(p)+this.tagEndChar:this.indentate(e)+"<"+p+">"+i+"</"+p+this.tagEndChar}else s+=this.buildTextValNode(t[l],p,"",e,i)}}else if(Array.isArray(t[l])){const r=t[l].length;let o="",a="";for(let c=0;c<r;c++){const r=t[l][c];if(void 0===r);else if(null===r)"?"===p[0]?s+=this.indentate(e)+"<"+p+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+p+"/"+this.tagEndChar;else if("object"==typeof r)if(this.options.oneListGroup){i.push(p);const t=this.j2x(r,e+1,i,n);i.pop(),o+=t.val,this.options.attributesGroupName&&r.hasOwnProperty(this.options.attributesGroupName)&&(a+=t.attrStr)}else o+=this.processTextOrObjNode(r,p,e,i,n);else if(this.options.oneListGroup){let t=this.options.tagValueProcessor(p,r);t=this.replaceEntitiesValue(t),o+=t}else{i.push(p);const t=this.checkStopNode(i);if(i.pop(),t){const t=""+r;o+=""===t?this.indentate(e)+"<"+p+this.closeTag(p)+this.tagEndChar:this.indentate(e)+"<"+p+">"+t+"</"+p+this.tagEndChar}else o+=this.buildTextValNode(r,p,"",e,i)}}this.options.oneListGroup&&(o=this.buildObjectNode(o,p,a,e)),s+=o}else if(this.options.attributesGroupName&&l===this.options.attributesGroupName){const e=Object.keys(t[l]),s=e.length;for(let o=0;o<s;o++){const s=ue(e[o],!0,this.options,i,n);r+=this.buildAttrPairStr(s,""+t[l][e[o]],a)}}else s+=this.processTextOrObjNode(t[l],p,e,i,n)}return{attrStr:r,val:s}},de.prototype.buildAttrPairStr=function(t,e,i){return i||(e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e)),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+te(e)+'"'},de.prototype.extractAttributes=function(t){if(!t||"object"!=typeof t)return null;const e={};let i=!1;if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){const n=t[this.options.attributesGroupName];for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t.startsWith(this.options.attributeNamePrefix)?t.substring(this.options.attributeNamePrefix.length):t]=te(n[t]),i=!0)}else for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const r=this.isAttribute(n);r&&(e[r]=te(t[n]),i=!0)}return i?e:null},de.prototype.buildRawContent=function(t){if("string"==typeof t)return t;if("object"!=typeof t||null===t)return String(t);if(void 0!==t[this.options.textNodeName])return t[this.options.textNodeName];let e="";for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;if(this.isAttribute(i))continue;if(this.options.attributesGroupName&&i===this.options.attributesGroupName)continue;const n=t[i];if(i===this.options.textNodeName)e+=n;else if(Array.isArray(n)){for(let t of n)if("string"==typeof t||"number"==typeof t)e+=`<${i}>${t}</${i}>`;else if("object"==typeof t&&null!==t){const n=this.buildRawContent(t),r=this.buildAttributesForStopNode(t);e+=""===n?`<${i}${r}/>`:`<${i}${r}>${n}</${i}>`}}else if("object"==typeof n&&null!==n){const t=this.buildRawContent(n),r=this.buildAttributesForStopNode(n);e+=""===t?`<${i}${r}/>`:`<${i}${r}>${t}</${i}>`}else e+=`<${i}>${n}</${i}>`}return e},de.prototype.buildAttributesForStopNode=function(t){if(!t||"object"!=typeof t)return"";let e="";if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){const i=t[this.options.attributesGroupName];for(let t in i){if(!Object.prototype.hasOwnProperty.call(i,t))continue;const n=t.startsWith(this.options.attributeNamePrefix)?t.substring(this.options.attributeNamePrefix.length):t,r=i[t];!0===r&&this.options.suppressBooleanAttributes?e+=" "+n:e+=" "+n+'="'+r+'"'}}else for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const n=this.isAttribute(i);if(n){const r=t[i];!0===r&&this.options.suppressBooleanAttributes?e+=" "+n:e+=" "+n+'="'+r+'"'}}return e},de.prototype.buildObjectNode=function(t,e,i,n){if(""===t)return"?"===e[0]?this.indentate(n)+"<"+e+i+"?"+this.tagEndChar:this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar;if("?"===e[0])return this.indentate(n)+"<"+e+i+"?"+this.tagEndChar;{let r="</"+e+this.tagEndChar,s="";return"?"===e[0]&&(s="?",r=""),!i&&""!==i||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===s.length?this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(n)+"<"+e+i+s+this.tagEndChar+t+this.indentate(n)+r:this.indentate(n)+"<"+e+i+s+">"+t+r}},de.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},de.prototype.checkStopNode=function(t){if(!this.stopNodeExpressions||0===this.stopNodeExpressions.length)return!1;for(let e=0;e<this.stopNodeExpressions.length;e++)if(t.matches(this.stopNodeExpressions[e]))return!0;return!1},de.prototype.buildTextValNode=function(t,e,i,n,r){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName){const e=Kt(t);return this.indentate(n)+`<![CDATA[${e}]]>`+this.newLine}if(!1!==this.options.commentPropName&&e===this.options.commentPropName){const e=Zt(t);return this.indentate(n)+`\x3c!--${e}--\x3e`+this.newLine}if("?"===e[0])return this.indentate(n)+"<"+e+i+"?"+this.tagEndChar;{let r=this.options.tagValueProcessor(e,t);return r=this.replaceEntitiesValue(r),""===r?this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+i+">"+r+"</"+e+this.tagEndChar}},de.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const i=this.options.entities[e];t=t.replace(i.regex,i.val)}return t};const xe=de,be={validate:p};module.exports=e})();
|
|
128828
|
+
(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{XMLBuilder:()=>Oe,XMLParser:()=>re,XMLValidator:()=>je});const i=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",n=new RegExp("^["+i+"]["+i+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function r(t,e){const i=[];let n=e.exec(t);for(;n;){const r=[];r.startIndex=e.lastIndex-n[0].length;const s=n.length;for(let t=0;t<s;t++)r.push(n[t]);i.push(r),n=e.exec(t)}return i}const s=function(t){return!(null==n.exec(t))},o=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],a=["__proto__","constructor","prototype"],l={allowBooleanAttributes:!1,unpairedTags:[]};function p(t,e){e=Object.assign({},l,e);const i=[];let n=!1,r=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let s=0;s<t.length;s++)if("<"===t[s]&&"?"===t[s+1]){if(s+=2,s=h(t,s),s.err)return s}else{if("<"!==t[s]){if(c(t[s]))continue;return y("InvalidChar","char '"+t[s]+"' is not expected.",w(t,s))}{let o=s;if(s++,"!"===t[s]){s=d(t,s);continue}{let a=!1;"/"===t[s]&&(a=!0,s++);let l="";for(;s<t.length&&">"!==t[s]&&" "!==t[s]&&"\t"!==t[s]&&"\n"!==t[s]&&"\r"!==t[s];s++)l+=t[s];if(l=l.trim(),"/"===l[l.length-1]&&(l=l.substring(0,l.length-1),s--),!E(l)){let e;return e=0===l.trim().length?"Invalid space after '<'.":"Tag '"+l+"' is an invalid name.",y("InvalidTag",e,w(t,s))}const p=g(t,s);if(!1===p)return y("InvalidAttr","Attributes for '"+l+"' have open quote.",w(t,s));let u=p.value;if(s=p.index,"/"===u[u.length-1]){const i=s-u.length;u=u.substring(0,u.length-1);const r=x(u,e);if(!0!==r)return y(r.err.code,r.err.msg,w(t,i+r.err.line));n=!0}else if(a){if(!p.tagClosed)return y("InvalidTag","Closing tag '"+l+"' doesn't have proper closing.",w(t,s));if(u.trim().length>0)return y("InvalidTag","Closing tag '"+l+"' can't have attributes or invalid starting.",w(t,o));if(0===i.length)return y("InvalidTag","Closing tag '"+l+"' has not been opened.",w(t,o));{const e=i.pop();if(l!==e.tagName){let i=w(t,e.tagStartPos);return y("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+i.line+", col "+i.col+") instead of closing tag '"+l+"'.",w(t,o))}0==i.length&&(r=!0)}}else{const a=x(u,e);if(!0!==a)return y(a.err.code,a.err.msg,w(t,s-u.length+a.err.line));if(!0===r)return y("InvalidXml","Multiple possible root nodes found.",w(t,s));-1!==e.unpairedTags.indexOf(l)||i.push({tagName:l,tagStartPos:o}),n=!0}for(s++;s<t.length;s++)if("<"===t[s]){if("!"===t[s+1]){s++,s=d(t,s);continue}if("?"!==t[s+1])break;if(s=h(t,++s),s.err)return s}else if("&"===t[s]){const e=b(t,s);if(-1==e)return y("InvalidChar","char '&' is not expected.",w(t,s));s=e}else if(!0===r&&!c(t[s]))return y("InvalidXml","Extra text at the end",w(t,s));"<"===t[s]&&s--}}}return n?1==i.length?y("InvalidTag","Unclosed tag '"+i[0].tagName+"'.",w(t,i[0].tagStartPos)):!(i.length>0)||y("InvalidXml","Invalid '"+JSON.stringify(i.map(t=>t.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):y("InvalidXml","Start tag expected.",1)}function c(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function h(t,e){const i=e;for(;e<t.length;e++)if("?"==t[e]||" "==t[e]){const n=t.substr(i,e-i);if(e>5&&"xml"===n)return y("InvalidXml","XML declaration allowed only at the start of the document.",w(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}continue}return e}function d(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let i=1;for(e+=8;e<t.length;e++)if("<"===t[e])i++;else if(">"===t[e]&&(i--,0===i))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e<t.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}const u='"',f="'";function g(t,e){let i="",n="",r=!1;for(;e<t.length;e++){if(t[e]===u||t[e]===f)""===n?n=t[e]:n!==t[e]||(n="");else if(">"===t[e]&&""===n){r=!0;break}i+=t[e]}return""===n&&{value:i,index:e,tagClosed:r}}const m=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function x(t,e){const i=r(t,m),n={};for(let t=0;t<i.length;t++){if(0===i[t][1].length)return y("InvalidAttr","Attribute '"+i[t][2]+"' has no space in starting.",v(i[t]));if(void 0!==i[t][3]&&void 0===i[t][4])return y("InvalidAttr","Attribute '"+i[t][2]+"' is without value.",v(i[t]));if(void 0===i[t][3]&&!e.allowBooleanAttributes)return y("InvalidAttr","boolean attribute '"+i[t][2]+"' is not allowed.",v(i[t]));const r=i[t][2];if(!N(r))return y("InvalidAttr","Attribute '"+r+"' is an invalid name.",v(i[t]));if(Object.prototype.hasOwnProperty.call(n,r))return y("InvalidAttr","Attribute '"+r+"' is repeated.",v(i[t]));n[r]=1}return!0}function b(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){let i=/\d/;for("x"===t[e]&&(e++,i=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(i))break}return-1}(t,++e);let i=0;for(;e<t.length;e++,i++)if(!(t[e].match(/\w/)&&i<20)){if(";"===t[e])break;return-1}return e}function y(t,e,i){return{err:{code:t,msg:e,line:i.line||i,col:i.col}}}function N(t){return s(t)}function E(t){return s(t)}function w(t,e){const i=t.substring(0,e).split(/\r?\n/);return{line:i.length,col:i[i.length-1].length+1}}function v(t){return t.startIndex+t[1].length}const S=t=>o.includes(t)?"__"+t:t,A={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0,unicode:!1},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,i){return t},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:S};function T(t,e){if("string"!=typeof t)return;const i=t.toLowerCase();if(o.some(t=>i===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);if(a.some(t=>i===t.toLowerCase()))throw new Error(`[SECURITY] Invalid ${e}: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`)}function _(t,e){return"boolean"==typeof t?{enabled:t,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:"object"==typeof t&&null!==t?{enabled:!1!==t.enabled,maxEntitySize:Math.max(1,t.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,t.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,t.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,t.maxExpandedLength??1e5),maxEntityCount:Math.max(1,t.maxEntityCount??1e3),allowedTags:t.allowedTags??null,tagFilter:t.tagFilter??null,appliesTo:t.appliesTo??"all"}:_(!0)}const C=function(t){const e=Object.assign({},A,t),i=[{value:e.attributeNamePrefix,name:"attributeNamePrefix"},{value:e.attributesGroupName,name:"attributesGroupName"},{value:e.textNodeName,name:"textNodeName"},{value:e.cdataPropName,name:"cdataPropName"},{value:e.commentPropName,name:"commentPropName"}];for(const{value:t,name:e}of i)t&&T(t,e);return null===e.onDangerousProperty&&(e.onDangerousProperty=S),e.processEntities=_(e.processEntities,e.htmlEntities),e.unpairedTagsSet=new Set(e.unpairedTags),e.stopNodes&&Array.isArray(e.stopNodes)&&(e.stopNodes=e.stopNodes.map(t=>"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t)),e};let $;$="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class P{constructor(t){this.tagname=t,this.child=[],this[":@"]=Object.create(null)}add(t,e){"__proto__"===t&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t,e){"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),void 0!==e&&(this.child[this.child.length-1][$]={startIndex:e})}static getMetaDataSymbol(){return $}}const O=":A-Za-z_À-ÖØ-öø-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�",j=":A-Za-z_À-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",I=j+"\\-\\.\\d·̀-ͯ҇‿-⁀",k=(t,e,i="")=>{const n=`[${t.replace(":","")}][${e.replace(":","")}]*`;return{name:new RegExp(`^[${t}][${e}]*$`,i),ncName:new RegExp(`^${n}$`,i),qName:new RegExp(`^${n}(?::${n})?$`,i),nmToken:new RegExp(`^[${e}]+$`,i),nmTokens:new RegExp(`^[${e}]+(?:\\s+[${e}]+)*$`,i)}},L=k(O,O+"\\-\\.\\d·̀-ͯ‿-⁀"),D=k(j,I,"u"),R=":A-Za-z_",M=k(R,R+"\\-\\.\\d"),V=(t,{xmlVersion:e="1.0",asciiOnly:i=!1}={})=>((t="1.0",e=!1)=>e?M:"1.1"===t?D:L)(e,i).qName.test(t);class q{constructor(t,e){this.suppressValidationErr=!t,this.options=t,this.xmlVersion=e||1}setXmlVersion(t=1){this.xmlVersion=t}readDocType(t,e){const i=Object.create(null);let n=0;if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let r=1,s=!1,o=!1,a="";for(;e<t.length;e++)if("<"!==t[e]||o)if(">"===t[e]){if(o?"-"===t[e-1]&&"-"===t[e-2]&&(o=!1,r--):r--,0===r)break}else"["===t[e]?s=!0:a+=t[e];else{if(s&&U(t,"!ENTITY",e)){let r,s;if(e+=7,[r,s,e]=this.readEntityExp(t,e+1,this.suppressValidationErr),-1===s.indexOf("&")){if(!1!==this.options.enabled&&null!=this.options.maxEntityCount&&n>=this.options.maxEntityCount)throw new Error(`Entity count (${n+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);i[r]=s,n++}}else if(s&&U(t,"!ELEMENT",e)){e+=8;const{index:i}=this.readElementExp(t,e+1);e=i}else if(s&&U(t,"!ATTLIST",e))e+=8;else if(s&&U(t,"!NOTATION",e)){e+=9;const{index:i}=this.readNotationExp(t,e+1,this.suppressValidationErr);e=i}else{if(!U(t,"!--",e))throw new Error("Invalid DOCTYPE");o=!0}r++,a=""}if(0!==r)throw new Error("Unclosed DOCTYPE")}return{entities:i,i:e}}readEntityExp(t,e){const i=e=F(t,e);for(;e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)e++;let n=t.substring(i,e);if(B(n,{xmlVersion:this.xmlVersion}),e=F(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}let r="";if([e,r]=this.readIdentifierVal(t,e,"entity"),!1!==this.options.enabled&&null!=this.options.maxEntitySize&&r.length>this.options.maxEntitySize)throw new Error(`Entity "${n}" size (${r.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[n,r,--e]}readNotationExp(t,e){const i=e=F(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let n=t.substring(i,e);!this.suppressValidationErr&&B(n,{xmlVersion:this.xmlVersion}),e=F(t,e);const r=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==r&&"PUBLIC"!==r)throw new Error(`Expected SYSTEM or PUBLIC, found "${r}"`);e+=r.length,e=F(t,e);let s=null,o=null;if("PUBLIC"===r)[e,s]=this.readIdentifierVal(t,e,"publicIdentifier"),'"'!==t[e=F(t,e)]&&"'"!==t[e]||([e,o]=this.readIdentifierVal(t,e,"systemIdentifier"));else if("SYSTEM"===r&&([e,o]=this.readIdentifierVal(t,e,"systemIdentifier"),!this.suppressValidationErr&&!o))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:n,publicIdentifier:s,systemIdentifier:o,index:--e}}readIdentifierVal(t,e,i){let n="";const r=t[e];if('"'!==r&&"'"!==r)throw new Error(`Expected quoted string, found "${r}"`);const s=++e;for(;e<t.length&&t[e]!==r;)e++;if(n=t.substring(s,e),t[e]!==r)throw new Error(`Unterminated ${i} value`);return[++e,n]}readElementExp(t,e){const i=e=F(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let n=t.substring(i,e);if(!this.suppressValidationErr&&!V(n,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid element name: "${n}"`);let r="";if("E"===t[e=F(t,e)]&&U(t,"MPTY",e))e+=4;else if("A"===t[e]&&U(t,"NY",e))e+=2;else if("("===t[e]){const i=++e;for(;e<t.length&&")"!==t[e];)e++;if(r=t.substring(i,e),")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[e]}"`);return{elementName:n,contentModel:r.trim(),index:e}}readAttlistExp(t,e){let i=e=F(t,e);for(;e<t.length&&!/\s/.test(t[e]);)e++;let n=t.substring(i,e);for(B(n,{xmlVersion:this.xmlVersion}),i=e=F(t,e);e<t.length&&!/\s/.test(t[e]);)e++;let r=t.substring(i,e);if(!B(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid attribute name: "${r}"`);e=F(t,e);let s="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(s="NOTATION","("!==t[e=F(t,e+=8)])throw new Error(`Expected '(', found "${t[e]}"`);e++;let i=[];for(;e<t.length&&")"!==t[e];){const n=e;for(;e<t.length&&"|"!==t[e]&&")"!==t[e];)e++;let r=t.substring(n,e);if(r=r.trim(),!B(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid notation name: "${r}"`);i.push(r),"|"===t[e]&&(e++,e=F(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,s+=" ("+i.join("|")+")"}else{const i=e;for(;e<t.length&&!/\s/.test(t[e]);)e++;s+=t.substring(i,e);const n=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!n.includes(s.toUpperCase()))throw new Error(`Invalid attribute type: "${s}"`)}e=F(t,e);let o="";return"#REQUIRED"===t.substring(e,e+8).toUpperCase()?(o="#REQUIRED",e+=8):"#IMPLIED"===t.substring(e,e+7).toUpperCase()?(o="#IMPLIED",e+=7):[e,o]=this.readIdentifierVal(t,e,"ATTLIST"),{elementName:n,attributeName:r,attributeType:s,defaultValue:o,index:e}}}const F=(t,e)=>{for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function U(t,e,i){for(let n=0;n<e.length;n++)if(e[n]!==t[i+n+1])return!1;return!0}function B(t,e){if(V(t,{xmlVersion:e}))return t;throw new Error(`Invalid entity name ${t}`)}const G=[48,1632,1776,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,65296,120782,120792,120802,120812,120822,66720,68912,69734,69872,69942,70096,70384,70736,70864,71248,71360,71472,71904,72016,72688,72784,73040,73120,73552,92768,92864,93008,123200,123632,124144,125264,130032],X=new Map,W=1632,z=new Uint8Array(63904).fill(255);for(const t of G)for(let e=0;e<10;e++){const i=t+e;i<=65535?z[i-W]=e:X.set(i,e)}const Y=new Set([8722,65293,65123]),H=/^[-+]?0x[a-fA-F0-9]+$/,Q=/^0b[01]+$/,J=/^0o[0-7]+$/,Z=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,K={hex:!0,binary:!1,octal:!1,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original",unicode:!1};function tt(t,e={}){if(e=Object.assign({},K,e),!t||"string"!=typeof t)return t;let i=t.trim();if(0===i.length)return t;if(void 0!==e.skipLike&&e.skipLike.test(i))return t;if("0"===i)return 0;if(e.unicode&&(i=function(t){if("string"!=typeof t)return t;const e=t.length;if(0===e)return t;let i=-1;for(let n=0;n<e;n++){const r=t.charCodeAt(n);if(!(r>=48&&r<=57||45===r))if(r<W){if(Y.has(r)){i=n;break}}else if(r>=55296&&r<=56319){if(n+1<e){const e=t.charCodeAt(n+1);if(e>=56320&&e<=57343){const t=65536+(r-55296<<10)+(e-56320);if(X.has(t)){i=n;break}}}}else if(255!==z[r-W]||Y.has(r)){i=n;break}}if(-1===i)return t;const n=[];i>0&&n.push(t.slice(0,i));for(let r=i;r<e;r++){const i=t.charCodeAt(r);if(i>=48&&i<=57||45===i){n.push(t[r]);continue}if(i<W){n.push(Y.has(i)?"-":t[r]);continue}if(i>=55296&&i<=56319){if(r+1<e){const e=t.charCodeAt(r+1);if(e>=56320&&e<=57343){const t=65536+(i-55296<<10)+(e-56320),s=X.get(t);if(void 0!==s){n.push(String.fromCharCode(s+48)),r++;continue}}}n.push(t[r]);continue}if(Y.has(i)){n.push("-");continue}const s=z[i-W];n.push(255!==s?String.fromCharCode(s+48):t[r])}return n.join("")}(i),"0"===i))return 0;if(e.hex&&H.test(i))return it(i,16);if(e.binary&&Q.test(i))return it(i,2);if(e.octal&&J.test(i))return it(i,8);if(isFinite(i)){if(i.includes("e")||i.includes("E"))return function(t,e,i){if(!i.eNotation)return t;const n=e.match(et);if(n){let r=n[1]||"";const s=-1===n[3].indexOf("e")?"E":"e",o=n[2],a=r?t[o.length+1]===s:t[o.length]===s;return o.length>1&&a?t:(1!==o.length||!n[3].startsWith(`.${s}`)&&n[3][0]!==s)&&o.length>0?i.leadingZeros&&!a?(e=(n[1]||"")+n[3],Number(e)):t:Number(e)}return t}(t,i,e);{const r=Z.exec(i);if(r){const s=r[1]||"",o=r[2];let a=(n=r[3])&&-1!==n.indexOf(".")?("."===(n=n.replace(/0+$/,""))?n="0":"."===n[0]?n="0"+n:"."===n[n.length-1]&&(n=n.substring(0,n.length-1)),n):n;const l=s?"."===t[o.length+1]:"."===t[o.length];if(!e.leadingZeros&&(o.length>1||1===o.length&&!l))return t;{const n=Number(i),r=String(n);if(0===n)return n;if(-1!==r.search(/[eE]/))return e.eNotation?n:t;if(-1!==i.indexOf("."))return"0"===r||r===a||r===`${s}${a}`?n:t;let l=o?a:i;return o?l===r||s+l===r?n:t:l===r||l===s+r?n:t}}return t}}var n;return function(t,e,i){const n=e===1/0;switch(i.infinity.toLowerCase()){case"null":return null;case"infinity":return e;case"string":return n?"Infinity":"-Infinity";default:return t}}(t,Number(i),e)}const et=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function it(t,e){const i=t.trim();if(2!==e&&8!==e||(t=i.substring(2)),parseInt)return parseInt(t,e);if(Number.parseInt)return Number.parseInt(t,e);if(window&&window.parseInt)return window.parseInt(t,e);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}class nt{constructor(t){this._matcher=t}get separator(){return this._matcher.separator}getCurrentTag(){const t=this._matcher.path;return t.length>0?t[t.length-1].tag:void 0}getCurrentNamespace(){const t=this._matcher.path;return t.length>0?t[t.length-1].namespace:void 0}getAttrValue(t){const e=this._matcher.path;if(0!==e.length)return e[e.length-1].values?.[t]}hasAttr(t){const e=this._matcher.path;if(0===e.length)return!1;const i=e[e.length-1];return void 0!==i.values&&t in i.values}getAnyParentAttr(t){return this._matcher.getAnyParentAttr(t)}hasAnyParentAttr(t){return this._matcher.hasAnyParentAttr(t)}getPosition(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].position??0}getCounter(){const t=this._matcher.path;return 0===t.length?-1:t[t.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(t,e=!0){return this._matcher.toString(t,e)}toArray(){return this._matcher.path.map(t=>t.tag)}matches(t){return this._matcher.matches(t)}matchesAny(t){return t.matchesAny(this._matcher)}}class rt{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new nt(this),this._keptAttrs=[]}push(t,e=null,i=null,n=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const r=this.path.length;let s=this.siblingStacks[r];s||(s={counts:new Map,total:0},this.siblingStacks[r]=s);const o=i?`${i}:${t}`:t,a=s.counts.get(o)||0,l=s.total;s.counts.set(o,a+1),s.total++;const p={tag:t,position:l,counter:a};null!=i&&(p.namespace=i),null!=e&&(p.values=e),this.path.push(p);const c=this.path.length,h=null!==n?n.keep:null;if(null!=h&&h.length>0&&e)for(let t=0;t<h.length;t++){const i=h[t];void 0!==e[i]&&this._keptAttrs.push({depth:c,name:i,value:e[i]})}}pop(){if(0===this.path.length)return;this._pathStringCache=null;const t=this.path.pop();this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1);const e=this.path.length+1;for(;this._keptAttrs.length>0&&this._keptAttrs[this._keptAttrs.length-1].depth>=e;)this._keptAttrs.pop();return t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0!==this.path.length)return this.path[this.path.length-1].values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getAnyParentAttr(t){const e=this._keptAttrs;for(let i=e.length-1;i>=0;i--)if(e[i].name===t)return e[i].value}hasAnyParentAttr(t){const e=this._keptAttrs;for(let i=e.length-1;i>=0;i--)if(e[i].name===t)return!0;return!1}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const i=t||this.separator;if(i===this.separator&&!0===e){if(null!==this._pathStringCache)return this._pathStringCache;const t=this.path.map(t=>t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(i);return this._pathStringCache=t,t}return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(i)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[],this._keptAttrs=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++)if(!this._matchSegment(t[e],this.path[e],e===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,i=t.length-1;for(;i>=0&&e>=0;){const n=t[i];if("deep-wildcard"===n.type){if(i--,i<0)return!0;const n=t[i];let r=!1;for(let t=e;t>=0;t--)if(this._matchSegment(n,this.path[t],t===this.path.length-1)){e=t-1,i--,r=!0;break}if(!r)return!1}else{if(!this._matchSegment(n,this.path[e],e===this.path.length-1))return!1;e--,i--}}return i<0}_matchSegment(t,e,i){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!i)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue&&String(e.values[t.attrName])!==String(t.attrValue))return!1}if(void 0!==t.position){if(!i)return!1;const n=e.counter??0;if("first"===t.position&&0!==n)return!1;if("odd"===t.position&&n%2!=1)return!1;if("even"===t.position&&n%2!=0)return!1;if("nth"===t.position&&n!==t.positionValue)return!1}return!0}matchesAny(t){return t.matchesAny(this)}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>t?{counts:new Map(t.counts),total:t.total}:t),keptAttrs:this._keptAttrs.map(t=>({...t}))}}restore(t){this._pathStringCache=null,this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>t?{counts:new Map(t.counts),total:t.total}:t),this._keptAttrs=(t.keptAttrs||[]).map(t=>({...t}))}readOnly(){return this._view}}class st{constructor(t,e={},i){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this.data=i,this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let i=0,n="";for(;i<t.length;)t[i]===this.separator?i+1<t.length&&t[i+1]===this.separator?(n.trim()&&(e.push(this._parseSegment(n.trim())),n=""),e.push({type:"deep-wildcard"}),i+=2):(n.trim()&&e.push(this._parseSegment(n.trim())),n="",i++):(n+=t[i],i++);return n.trim()&&e.push(this._parseSegment(n.trim())),e}_parseSegment(t){const e={type:"tag"};let i=null,n=t;const r=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(r&&(n=r[1]+r[3],r[2])){const t=r[2].slice(1,-1);t&&(i=t)}let s,o,a=n;if(n.includes("::")){const e=n.indexOf("::");if(s=n.substring(0,e).trim(),a=n.substring(e+2).trim(),!s)throw new Error(`Invalid namespace in pattern: ${t}`)}let l=null;if(a.includes(":")){const t=a.lastIndexOf(":"),e=a.substring(0,t).trim(),i=a.substring(t+1).trim();["first","last","odd","even"].includes(i)||/^nth\(\d+\)$/.test(i)?(o=e,l=i):o=a}else o=a;if(!o)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=o,s&&(e.namespace=s),i)if(i.includes("=")){const t=i.indexOf("=");e.attrName=i.substring(0,t).trim(),e.attrValue=i.substring(t+1).trim()}else e.attrName=i.trim();if(l){const t=l.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=l}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class ot{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._deepByTerminalTag=new Map,this._patterns=new Set,this._sealed=!1}add(t){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(t.pattern))return this;if(this._patterns.add(t.pattern),t.hasDeepWildcard()){const e=t.segments[t.segments.length-1];if(e&&"deep-wildcard"!==e.type&&"*"!==e.tag){const i=e.tag;this._deepByTerminalTag.has(i)||this._deepByTerminalTag.set(i,[]),this._deepByTerminalTag.get(i).push(t)}else this._deepWildcards.push(t);return this}const e=t.length,i=t.segments[t.segments.length-1],n=i?.tag;if(n&&"*"!==n){const i=`${e}:${n}`;this._byDepthAndTag.has(i)||this._byDepthAndTag.set(i,[]),this._byDepthAndTag.get(i).push(t)}else this._wildcardByDepth.has(e)||this._wildcardByDepth.set(e,[]),this._wildcardByDepth.get(e).push(t);return this}addAll(t){for(const e of t)this.add(e);return this}has(t){return this._patterns.has(t.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(t){return null!==this.findMatch(t)}findMatch(t){const e=t.getDepth(),i=t.getCurrentTag(),n=`${e}:${i}`,r=this._byDepthAndTag.get(n);if(r)for(let e=0;e<r.length;e++)if(t.matches(r[e]))return r[e];const s=this._wildcardByDepth.get(e);if(s)for(let e=0;e<s.length;e++)if(t.matches(s[e]))return s[e];const o=this._deepByTerminalTag.get(i);if(o)for(let e=0;e<o.length;e++)if(t.matches(o[e]))return o[e];for(let e=0;e<this._deepWildcards.length;e++)if(t.matches(this._deepWildcards[e]))return this._deepWildcards[e];return null}}const at={cent:"¢",pound:"£",curren:"¤",yen:"¥",euro:"€",dollar:"$",fnof:"ƒ",inr:"₹",af:"؋",birr:"ብር",peso:"₱",rub:"₽",won:"₩",yuan:"¥",cedil:"¸"},lt={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'},pt={nbsp:" ",copy:"©",reg:"®",trade:"™",mdash:"—",ndash:"–",hellip:"…",laquo:"«",raquo:"»",lsquo:"‘",rsquo:"’",ldquo:"“",rdquo:"”",bull:"•",para:"¶",sect:"§",deg:"°",frac12:"½",frac14:"¼",frac34:"¾"},ct=Object.freeze({ALLOW:"allow",BLOCK:"block",THROW:"throw"}),ht=new Set("!?\\\\/[]$%{}^&*()<>|+");function dt(t){if("#"===t[0])throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${t}"`);for(const e of t)if(ht.has(e))throw new Error(`[EntityReplacer] Invalid character '${e}' in entity name: "${t}"`);return t}function ut(...t){const e=Object.create(null);for(const i of t)if(i)for(const t of Object.keys(i)){const n=i[t];if("string"==typeof n)e[t]=n;else if(n&&"object"==typeof n&&void 0!==n.val){const i=n.val;"string"==typeof i&&(e[t]=i)}}return e}const ft="external",gt="base",mt="all",xt=Object.freeze({allow:0,leave:1,remove:2,throw:3}),bt=new Set([9,10,13]);class yt{constructor(t={}){var e;this._limit=t.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck="function"==typeof t.postCheck?t.postCheck:t=>t,this._limitTiers=(e=this._limit.applyLimitsTo??ft)&&e!==ft?e===mt?new Set([mt]):e===gt?new Set([gt]):Array.isArray(e)?new Set(e):new Set([ft]):new Set([ft]),this._numericAllowed=t.numericAllowed??!0,this._baseMap=ut(lt,t.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(t.remove&&Array.isArray(t.remove)?t.remove:[]),this._leaveSet=new Set(t.leave&&Array.isArray(t.leave)?t.leave:[]);const i=function(t){if(!t)return{xmlVersion:1,onLevel:xt.allow,nullLevel:xt.remove};const e=1.1===t.xmlVersion?1.1:1,i=xt[t.onNCR]??xt.allow,n=xt[t.nullNCR]??xt.remove;return{xmlVersion:e,onLevel:i,nullLevel:Math.max(n,xt.remove)}}(t.ncr);this._ncrXmlVersion=i.xmlVersion,this._ncrOnLevel=i.onLevel,this._ncrNullLevel=i.nullLevel,this._onExternalEntity="function"==typeof t.onExternalEntity?t.onExternalEntity:null,this._onInputEntity="function"==typeof t.onInputEntity?t.onInputEntity:null}_applyRegistrationHook(t,e,i,n){if(!t)return!0;const r=t(e,i);if(r===ct.BLOCK)return!1;if(r===ct.THROW)throw new Error(`[EntityDecoder] Registration of ${n} entity "&${e};" was rejected by hook`);return!0}setExternalEntities(t){if(t)for(const e of Object.keys(t))dt(e);if(!this._onExternalEntity)return void(this._externalMap=ut(t));const e=ut(t),i=Object.create(null);for(const[t,n]of Object.entries(e))this._applyRegistrationHook(this._onExternalEntity,t,n,"external")&&(i[t]=n);this._externalMap=i}addExternalEntity(t,e){dt(t),"string"==typeof e&&-1===e.indexOf("&")&&this._applyRegistrationHook(this._onExternalEntity,t,e,"external")&&(this._externalMap[t]=e)}addInputEntities(t){if(this._totalExpansions=0,this._expandedLength=0,!this._onInputEntity)return void(this._inputMap=ut(t));const e=ut(t),i=Object.create(null);for(const[t,n]of Object.entries(e))this._applyRegistrationHook(this._onInputEntity,t,n,"input")&&(i[t]=n);this._inputMap=i}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(t){this._ncrXmlVersion=1.1===t?1.1:1}decode(t){if("string"!=typeof t||0===t.length)return t;if(-1===t.indexOf("&"))return t;const e=t,i=[],n=t.length;let r=0,s=0;const o=this._maxTotalExpansions>0,a=this._maxExpandedLength>0,l=o||a;for(;s<n;){if(38!==t.charCodeAt(s)){s++;continue}let e=s+1;for(;e<n&&59!==t.charCodeAt(e)&&e-s<=32;)e++;if(e>=n||59!==t.charCodeAt(e)){s++;continue}const p=t.slice(s+1,e);if(0===p.length){s++;continue}let c,h;if(this._removeSet.has(p))c="",void 0===h&&(h=ft);else{if(this._leaveSet.has(p)){s++;continue}if(35===p.charCodeAt(0)){const t=this._resolveNCR(p);if(void 0===t){s++;continue}c=t,h=gt}else{const t=this._resolveName(p);c=t?.value,h=t?.tier}}if(void 0!==c){if(s>r&&i.push(t.slice(r,s)),i.push(c),r=e+1,s=r,l&&this._tierCounts(h)){if(o&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(a){const t=c.length-(p.length+2);if(t>0&&(this._expandedLength+=t,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}else s++}r<n&&i.push(t.slice(r));const p=0===i.length?t:i.join("");return this._postCheck(p,e)}_tierCounts(t){return!!this._limitTiers.has(mt)||this._limitTiers.has(t)}_resolveName(t){return t in this._inputMap?{value:this._inputMap[t],tier:ft}:t in this._externalMap?{value:this._externalMap[t],tier:ft}:t in this._baseMap?{value:this._baseMap[t],tier:gt}:void 0}_classifyNCR(t){return 0===t?this._ncrNullLevel:t>=55296&&t<=57343||1===this._ncrXmlVersion&&t>=1&&t<=31&&!bt.has(t)?xt.remove:-1}_applyNCRAction(t,e,i){switch(t){case xt.allow:return String.fromCodePoint(i);case xt.remove:return"";case xt.leave:return;case xt.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${e}; (U+${i.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(i)}}_resolveNCR(t){const e=t.charCodeAt(1);let i;if(i=120===e||88===e?parseInt(t.slice(2),16):parseInt(t.slice(1),10),Number.isNaN(i)||i<0||i>1114111)return;const n=this._classifyNCR(i);if(!this._numericAllowed&&n<xt.remove)return;const r=-1===n?this._ncrOnLevel:Math.max(this._ncrOnLevel,n);return this._applyNCRAction(r,t,i)}}const Nt=[{id:"sql-block-comment-open",description:"SQL block comment open: /* ... */ — unusual in legitimate user text",pattern:/\/\*/},{id:"sql-union-select",description:"UNION SELECT — most common SQL injection aggregation attack",pattern:/\bUNION\s{1,20}(?:ALL\s{1,20})?SELECT\b/i},{id:"sql-drop-table",description:"DROP TABLE — destructive DDL injection",pattern:/\bDROP\s{1,20}TABLE\b/i},{id:"sql-drop-database",description:"DROP DATABASE — destructive DDL injection",pattern:/\bDROP\s{1,20}DATABASE\b/i},{id:"sql-insert-into",description:"INSERT INTO — data injection",pattern:/\bINSERT\s{1,20}INTO\b/i},{id:"sql-delete-from",description:"DELETE FROM — data deletion injection",pattern:/\bDELETE\s{1,20}FROM\b/i},{id:"sql-update-set",description:"UPDATE ... SET — data modification injection",pattern:/\bUPDATE\b[\s\S]{1,60}\bSET\b/i},{id:"sql-exec-xp",description:"EXEC xp_ — MSSQL extended stored procedure execution",pattern:/\bEXEC(?:UTE)?\s{1,20}xp_/i},{id:"sql-tautology-string",description:'Classic string tautology: \' OR \'1\'=\'1 or " OR "1"="1"',pattern:/'\s{0,10}OR\s{0,10}'[^']{0,20}'\s*=\s*'[^']{0,20}/i},{id:"sql-tautology-numeric",description:"Numeric tautology: OR 1=1",pattern:/\bOR\s{1,10}1\s*=\s*1\b/i},{id:"sql-always-true-zero",description:"Numeric tautology: OR 0=0",pattern:/\bOR\s{1,10}0\s*=\s*0\b/i},{id:"sql-sleep-benchmark",description:"Time-based blind injection: SLEEP() or BENCHMARK()",pattern:/\b(?:SLEEP|BENCHMARK)\s*\(/i},{id:"sql-waitfor-delay",description:"MSSQL time-based blind injection: WAITFOR DELAY",pattern:/\bWAITFOR\s{1,20}DELAY\b/i},{id:"sql-char-function",description:"CHAR() function — used to obfuscate injected strings",pattern:/\bCHAR\s*\(\s*\d{1,3}/i},{id:"sql-information-schema",description:"INFORMATION_SCHEMA — reconnaissance query for table/column enumeration",pattern:/\bINFORMATION_SCHEMA\b/i}],Et=[...Nt,{id:"sql-line-comment",description:"SQL line comment: -- followed by whitespace or end of string",pattern:/--(?:\s|$)/},{id:"sql-stacked-query",description:"Stacked queries: semicolon immediately followed by a SQL keyword",pattern:/;\s{0,10}(?:SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC)\b/i},{id:"sql-hex-encoding",description:"Hex-encoded string injection: 0x41414141 style (MySQL)",pattern:/\b0x[0-9a-f]{4,}/i}],wt=[{id:"html-script-open",description:"<script opening tag",pattern:/<script[\s>/]/i},{id:"html-script-close",description:"<\/script closing tag",pattern:/<\/script[\s>]/i},{id:"html-javascript-protocol",description:"javascript: URI scheme (with optional whitespace/encoding)",pattern:/j[\t\n\r ]*a[\t\n\r ]*v[\t\n\r ]*a[\t\n\r ]*s[\t\n\r ]*c[\t\n\r ]*r[\t\n\r ]*i[\t\n\r ]*p[\t\n\r ]*t[\t\n\r ]*:/i},{id:"html-vbscript-protocol",description:"vbscript: URI scheme",pattern:/vbscript[\t\n\r ]*:/i},{id:"html-data-html",description:"data:text/html URI — can execute scripts in browsers",pattern:/data[\t\n\r ]*:[\t\n\r ]*text\/html/i},{id:"html-data-xhtml",description:"data:application/xhtml+xml URI",pattern:/data[\t\n\r ]*:[\t\n\r ]*application\/xhtml/i},{id:"html-data-svg",description:"data:image/svg+xml URI — can execute scripts",pattern:/data[\t\n\r ]*:[\t\n\r ]*image\/svg\+xml/i},{id:"html-inline-event-handler",description:"Inline event handler attributes: onclick=, onerror=, onload=, etc.",pattern:/\bon\w{1,30}\s*=/i},{id:"html-entity-obfuscated-script",description:"HTML-entity-encoded <script (e.g. <script or <script)",pattern:/(?:�*3[Cc];?|�*60;?|<)\s*script/i},{id:"html-entity-obfuscated-javascript",description:'HTML-entity-encoded javascript: (partial — catches common j or j for "j")',pattern:/(?:�*6[Aa];?|�*106;?)\s*(?:�*61;?|a)[\s\S]{0,80}script\s*:/i},{id:"html-style-expression",description:"CSS expression() — IE-era code execution in style attributes",pattern:/style[\s\S]{0,20}expression\s*\(/i},{id:"html-object-embed",description:"<object or <embed tags that can load active content",pattern:/<(?:object|embed)[\s>/]/i},{id:"html-base-tag",description:"<base href= — can hijack all relative URLs on a page",pattern:/<base[\s>]/i},{id:"html-meta-refresh",description:'<meta http-equiv="refresh" — can redirect users',pattern:/<meta[\s\S]{0,40}http-equiv[\s\S]{0,20}refresh/i},{id:"html-srcdoc",description:"srcdoc= attribute on iframes — embeds HTML that can run scripts",pattern:/srcdoc\s*=/i},{id:"html-iframe",description:"<iframe tag",pattern:/<iframe[\s>/]/i},{id:"html-form",description:"<form tag — can be used for phishing / credential harvesting injection",pattern:/<form[\s>/]/i}],vt=[{id:"xml-cdata-injection",description:"CDATA section injection: <![CDATA[ breaks out of text node context",pattern:/<!\[CDATA\[/i},{id:"xml-cdata-close",description:"CDATA close sequence: ]]> can terminate an enclosing CDATA section",pattern:/\]\]>/},{id:"xml-processing-instruction",description:"XML processing instruction: <?xml-stylesheet or <?php etc.",pattern:/<\?(?:xml[\- ]|php|asp)/i},{id:"xml-doctype-injection",description:"DOCTYPE declaration embedded in content — can define entities",pattern:/<!DOCTYPE(?:[\s[]|$)/i},{id:"xml-entity-system",description:"SYSTEM keyword — used in external entity declarations (XXE)",pattern:/\bSYSTEM\s+["']/i},{id:"xml-entity-public",description:"PUBLIC keyword — used in external entity declarations (XXE)",pattern:/\bPUBLIC\s+["']/i},{id:"xml-entity-declaration",description:"<!ENTITY declaration — defines entities, potential XXE or entity expansion",pattern:/<!ENTITY[\s%]/i},{id:"xml-billion-laughs",description:"Entity reference chaining / billion laughs: repeated &eX; style references",pattern:/(?:&\w{1,20};){3,}/},{id:"xml-namespace-confusion",description:"xmlns: attribute injection — can redefine namespaces to confuse parsers",pattern:/\bxmlns\s*(?::\w{1,40})?\s*=/i},{id:"xml-comment-injection",description:"\x3c!-- comment injection — can hide content from some parsers",pattern:/<!--/},{id:"xml-comment-close",description:"--\x3e closes an enclosing XML comment",pattern:/-->/},{id:"xml-pi-close",description:"?> closes an enclosing processing instruction",pattern:/\?>/}],St=[{id:"svg-script-element",description:"<script element inside SVG executes JavaScript",pattern:/<script[\s>/]/i},{id:"svg-xlink-href-javascript",description:"xlink:href with javascript: — classic SVG XSS via <a> or <use>",pattern:/xlink\s*:\s*href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-href-javascript",description:"href= with javascript: in SVG context (<a>, <animate>, etc.)",pattern:/href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-foreignobject",description:"<foreignObject embeds HTML inside SVG — can execute scripts",pattern:/<foreignObject[\s>/]/i},{id:"svg-use-external",description:"<use xlink:href or href pointing to external resource (non-fragment URL)",pattern:/<use[\s\S]{0,60}(?:xlink\s*:\s*)?href\s*=\s*(?:["'][^#]|[^"'#\s>])/i},{id:"svg-animate-href",description:'<animate attributeName="href" — can dynamically change href to javascript:',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*href["']/i},{id:"svg-animate-xlinkhref",description:'<animate attributeName="xlink:href"',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*xlink\s*:\s*href["']/i},{id:"svg-set-javascript",description:'<set to="javascript:..." — sets an attribute to a javascript: URI',pattern:/<set[\s\S]{0,80}to\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-event-handler",description:"SVG-specific event handler attributes: onload=, onerror=, onactivate=, etc.",pattern:/\bon(?:load|error|activate|begin|end|repeat|focus|blur|click|mouse\w{1,20}|key\w{1,20})\s*=/i},{id:"svg-handler-generic",description:"Generic on* handler catch-all for SVG attributes",pattern:/\bon\w{1,30}\s*=/i},{id:"svg-filter-feimage",description:"<feImage href= — filter primitive that can load external resources",pattern:/<feImage[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=/i},{id:"svg-image-external",description:"<image xlink:href with http/https or javascript protocol",pattern:/<image[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=\s*["']?\s*(?:https?|javascript)\s*:/i},{id:"svg-style-javascript",description:"style= attribute containing javascript: (e.g. background:url(javascript:...))",pattern:/style\s*=[\s\S]{0,60}javascript\s*:/i}],At=[{id:"shell-path-traversal-unix",description:"Unix path traversal: ../ — climbing the directory tree",pattern:/\.\.\//},{id:"shell-path-traversal-windows",description:"Windows path traversal: ..\\ — climbing the directory tree",pattern:/\.\.\\/},{id:"shell-path-traversal-encoded",description:"URL-encoded path traversal: %2e%2e or %2f variants",pattern:/%2e%2e|%2f\.\.|\.\.%2f/i},{id:"shell-null-byte",description:"Null byte injection: \\x00 or %00 — truncates strings in C-backed functions",pattern:/\x00|%00/},{id:"shell-semicolon",description:"Semicolon command separator: cmd1; cmd2",pattern:/;/},{id:"shell-pipe",description:"Pipe operator: cmd1 | cmd2",pattern:/\|/},{id:"shell-and-operator",description:"AND operator: cmd1 && cmd2",pattern:/&&/},{id:"shell-or-operator",description:"OR operator: cmd1 || cmd2",pattern:/\|\|/},{id:"shell-backtick",description:"Backtick command substitution: `cmd`",pattern:/`/},{id:"shell-dollar-paren",description:"Dollar-paren command substitution: $(cmd)",pattern:/\$\(/},{id:"shell-dollar-brace",description:"Dollar-brace variable expansion: ${var} — can be abused for injection",pattern:/\$\{/},{id:"shell-redirect-out",description:"Output redirection: cmd > file or cmd >> file",pattern:/>{1,2}/},{id:"shell-redirect-in",description:"Input redirection: cmd < file",pattern:/</},{id:"shell-newline-injection",description:"Newline injection: \\n or \\r — can inject new shell commands",pattern:/[\n\r]/},{id:"shell-glob-star",description:"Glob expansion: * or ? — can expand to unintended files",pattern:/[/\\][*?]/},{id:"shell-absolute-root",description:"Absolute root path injection: string starting with / or \\ (Windows UNC)",pattern:/^(?:\/|\\\\)/},{id:"shell-windows-drive",description:"Windows drive letter path injection: C:\\ or D:/",pattern:/^[a-zA-Z]:[/\\]/},{id:"shell-curl-wget",description:"curl/wget with URL or flags — can exfiltrate data or download payloads",pattern:/\b(?:curl|wget)\s+(?:https?:\/\/|ftp:\/\/|-)/i}],Tt=[{id:"redos-nested-quantifier-plus",description:"Nested + quantifier inside a group with outer quantifier: (a+)+, (.+b)*, etc.",pattern:/\([^)]*\+[^)]*\)[+*]/},{id:"redos-nested-quantifier-star",description:"Nested * quantifier: (a*)* or (a*)+ — catastrophic backtracking",pattern:/\([^)]*\*[^)]*\)[*+]/},{id:"redos-nested-groups",description:"Doubly nested quantified groups: ((a+)+) — guaranteed catastrophic",pattern:/\(\([^)]{0,40}\)[+*]\)[+*]/},{id:"redos-alternation-overlap",description:"Overlapping alternation under quantifier: (a|a)+ — ambiguous NFA paths",pattern:/\(([^|()]{1,20})\|(?:\1)(?:\|[^|()]{1,20}){0,5}\)[+*?]{1,2}/},{id:"redos-star-plus-concat",description:"(x*x)+ pattern — triggers super-linear backtracking",pattern:/\([^)]{0,10}\*[^)]{0,10}\)[+*]/},{id:"redos-dot-star-greedy",description:"(.*){n,} or (.+){n,} — repeated greedy dot quantifiers",pattern:/\(\.[*+]\)\{?\d/},{id:"redos-large-repetition",description:"Very large fixed or range repetition count {1000,} or {1000,n} — denial of service via backtracking",pattern:/\{\d{4,}(?:,\d*)?\}/},{id:"redos-catastrophic-alternation",description:"Long alternation with many similar branches — polynomial backtracking risk",pattern:/\([^)]{0,200}(?:\|[^|)]{0,50}){9,}\)/}],_t="[\"'\\s]*:",Ct=[{id:"nosql-where-operator",description:"$where — executes arbitrary JavaScript server-side in MongoDB",pattern:new RegExp(`\\$where${_t}`,"i")},{id:"nosql-ne-operator",description:'$ne — "not equal" operator used to bypass equality checks',pattern:new RegExp(`\\$ne${_t}`,"i")},{id:"nosql-gt-operator",description:'$gt — "greater than" used to bypass password/value checks',pattern:new RegExp(`\\$gte?${_t}`,"i")},{id:"nosql-lt-operator",description:'$lt / $lte — "less than" bypass variants',pattern:new RegExp(`\\$lte?${_t}`,"i")},{id:"nosql-regex-operator",description:"$regex — can be used to extract data character by character (blind injection)",pattern:new RegExp(`\\$regex${_t}`,"i")},{id:"nosql-or-operator",description:"$or — logical OR; used to create always-true conditions",pattern:new RegExp(`\\$or${_t}\\s*\\[`,"i")},{id:"nosql-and-operator",description:"$and — logical AND operator injection",pattern:new RegExp(`\\$and${_t}\\s*\\[`,"i")},{id:"nosql-nor-operator",description:"$nor — logical NOR operator injection",pattern:new RegExp(`\\$nor${_t}\\s*\\[`,"i")},{id:"nosql-exists-operator",description:"$exists — can enumerate fields to determine schema",pattern:new RegExp(`\\$exists${_t}`,"i")},{id:"nosql-in-operator",description:"$in — matches any value in a list; can enumerate values",pattern:new RegExp(`\\$in${_t}\\s*\\[`,"i")},{id:"nosql-expr-operator",description:"$expr — allows aggregation expressions in queries (MongoDB 3.6+)",pattern:new RegExp(`\\$expr${_t}`,"i")},{id:"nosql-function-operator",description:"$function — executes arbitrary JavaScript in MongoDB 4.4+",pattern:new RegExp(`\\$function${_t}`,"i")},{id:"nosql-accumulator-operator",description:"$accumulator — custom aggregation with arbitrary JS execution",pattern:new RegExp(`\\$accumulator${_t}`,"i")},{id:"nosql-proto-pollution",description:"__proto__ — prototype pollution via object key injection",pattern:/__proto__/},{id:"nosql-constructor-prototype",description:"constructor.prototype — alternative prototype pollution vector (dot notation or JSON key)",pattern:/constructor[\s"':.,{\[]*prototype/i},{id:"nosql-proto-bracket",description:'["__proto__"] — bracket-notation prototype pollution',pattern:/\[["']__proto__["']\]/}],$t=[{id:"log-crlf-injection",description:"CRLF injection: literal \\r or \\n embeds fake log lines",pattern:/[\r\n]/},{id:"log-url-encoded-crlf",description:"URL-encoded CRLF: %0d, %0a, %0D, %0A — decoded by some log parsers",pattern:/%0[dDaA]/},{id:"log-unicode-newline",description:"Unicode newline variants: U+2028 (line separator), U+2029 (paragraph separator)",pattern:/[\u2028\u2029]/},{id:"log-log4shell-jndi",description:"Log4Shell: ${jndi:...} triggers remote code execution in Apache Log4j",pattern:/\$\{jndi\s*:/i},{id:"log-log4shell-obfuscated",description:"Obfuscated Log4Shell: ${::-j}... lookup-bypass prefix used to evade WAF detection",pattern:/\$\{::-/},{id:"log-log4j-lookup",description:"Log4j lookup syntax: ${env:...}, ${sys:...}, ${ctx:...} — data exfiltration",pattern:/\$\{(?:env|sys|ctx|main|map|sd|web|docker|k8s|spring)\s*:/i},{id:"log-ssti-double-brace",description:"SSTI double-brace: {{expression}} — Jinja2, Twig, Handlebars, etc.",pattern:/\{\{[\s\S]{0,80}\}\}/},{id:"log-ssti-hash-brace",description:"SSTI hash-brace: #{expression} — Thymeleaf, Velocity, Ruby ERB",pattern:/#\{[\s\S]{0,80}\}/},{id:"log-ssti-dollar-brace",description:"SSTI/EL injection: ${expression with operators or method calls} — JSP EL, Freemarker, SpEL",pattern:/\$\{[^}]*(?:\.|\(|\*|\+|\bclass\b|\bruntime\b|\bprocess\b|\bexec\b)[^}]{0,80}\}/i},{id:"log-ssti-percent-tag",description:"SSTI ERB/ASP tag: <%= expression %> — Ruby ERB, ASP",pattern:/<%=[\s\S]{0,80}%>/},{id:"log-null-byte",description:"Null byte: \\x00 or %00 — can truncate log entries in C-backed loggers",pattern:/\x00|%00/},{id:"log-ansi-escape",description:"ANSI escape sequence: ESC[ — can manipulate terminal output when logs are tailed",pattern:/\x1b\[/}];function Pt(t,e){const i=e.label??"CUSTOM";for(const n of e)if(n.pattern.test(t))return{context:i,id:n.id,description:n.description,pattern:n.pattern};return null}function Ot(t,e){(function(t){if("string"!=typeof t)throw new TypeError("is-unsafe: first argument must be a string, got "+typeof t)})(t),function(t){if(!(t instanceof RegExp)){if(!Array.isArray(t))throw new TypeError("is-unsafe: second argument must be a PatternList (e.g. HTML), an array of PatternLists (e.g. [HTML, XML]), or a RegExp. Got: "+typeof t);if(0===t.length)throw new TypeError("is-unsafe: context must not be an empty array");if(Array.isArray(t[0]))for(const e of t)if(!Array.isArray(e)||0===e.length)throw new TypeError("is-unsafe: each context in the array must be a non-empty pattern array (PatternList)")}}(e);const{lists:i,regex:n}=function(t){return t instanceof RegExp?{lists:null,regex:t}:Array.isArray(t[0])?{lists:t,regex:null}:{lists:[t],regex:null}}(e);if(n)return n.test(t);for(const e of i)if(null!==Pt(t,e))return!0;return!1}function jt(t,e){if(!t)return{};const i=e.attributesGroupName?t[e.attributesGroupName]:t;if(!i)return{};const n={};for(const t in i)t.startsWith(e.attributeNamePrefix)?n[t.substring(e.attributeNamePrefix.length)]=i[t]:n[t]=i[t];return n}function It(t){if(!t||"string"!=typeof t)return;const e=t.indexOf(":");if(-1!==e&&e>0){const i=t.substring(0,e);if("xmlns"!==i)return i}}wt.label="HTML",vt.label="XML",St.label="SVG",Nt.label="SQL",Et.label="SQL-STRICT",At.label="SHELL",Tt.label="REDOS",Ct.label="NOSQL",$t.label="LOG",Object.freeze({HTML:wt,XML:vt,SVG:St,SQL:Nt,"SQL-STRICT":Et,SHELL:At,REDOS:Tt,NOSQL:Ct,LOG:$t});class kt{constructor(t,e){var i;this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=Vt,this.parseTextData=Lt,this.resolveNameSpace=Dt,this.buildAttributesMap=Mt,this.isItStopNode=Bt,this.replaceEntitiesValue=Ft,this.readStopNodeData=zt,this.saveTextToParentTag=Ut,this.addChild=qt,this.ignoreAttributesFn="function"==typeof(i=this.options.ignoreAttributes)?i:Array.isArray(i)?t=>{for(const e of i){if("string"==typeof e&&t===e)return!0;if(e instanceof RegExp&&e.test(t))return!0}}:()=>!1,this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;let n={...lt};this.options.entityDecoder?this.entityDecoder=this.options.entityDecoder:("object"==typeof this.options.htmlEntities?n=this.options.htmlEntities:!0===this.options.htmlEntities&&(n={...pt,...at}),this.entityDecoder=new yt({namedEntities:{...n,...e},numericAllowed:this.options.htmlEntities,limit:{maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:this.options.processEntities.appliesTo},onInputEntity:(t,e)=>Ot(e,[wt,vt])?ct.BLOCK:ct.ALLOW})),this.matcher=new rt,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new ot;const r=this.options.stopNodes;if(r&&r.length>0){for(let t=0;t<r.length;t++){const e=r[t];"string"==typeof e?this.stopNodeExpressionsSet.add(new st(e)):e instanceof st&&this.stopNodeExpressionsSet.add(e)}this.stopNodeExpressionsSet.seal()}}}function Lt(t,e,i,n,r,s,o){const a=this.options;if(void 0!==t&&(a.trimValues&&!n&&(t=t.trim()),t.length>0)){o||(t=this.replaceEntitiesValue(t,e,i));const n=a.jPath?i.toString():i,l=a.tagValueProcessor(e,t,n,r,s);return null==l?t:typeof l!=typeof t||l!==t?l:a.trimValues||t.trim()===t?Yt(t,a.parseTagValue,a.numberParseOptions):t}}function Dt(t){if(this.options.removeNSPrefix){const e=t.split(":"),i="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=i+e[1])}return t}const Rt=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function Mt(t,e,i,n=!1){const s=this.options;if(!0===n||!0!==s.ignoreAttributes&&"string"==typeof t){const n=r(t,Rt),o=n.length,a={},l=new Array(o);let p=!1;const c={};for(let t=0;t<o;t++){const e=this.resolveNameSpace(n[t][1]),r=n[t][4];if(e.length&&void 0!==r){let n=r;s.trimValues&&(n=n.trim()),n=this.replaceEntitiesValue(n,i,this.readonlyMatcher),l[t]=n,c[e]=n,p=!0}}p&&"object"==typeof e&&e.updateCurrent&&e.updateCurrent(c);const h=s.jPath?e.toString():this.readonlyMatcher;let d=!1;for(let t=0;t<o;t++){const e=this.resolveNameSpace(n[t][1]);if(this.ignoreAttributesFn(e,h))continue;let i=s.attributeNamePrefix+e;if(e.length)if(s.transformAttributeName&&(i=s.transformAttributeName(i)),i=Qt(i,s),void 0!==n[t][4]){const n=l[t],r=s.attributeValueProcessor(e,n,h);a[i]=null==r?n:typeof r!=typeof n||r!==n?r:Yt(n,s.parseAttributeValue,s.numberParseOptions),d=!0}else s.allowBooleanAttributes&&(a[i]=!0,d=!0)}if(!d)return;if(s.attributesGroupName&&!s.preserveOrder){const t={};return t[s.attributesGroupName]=a,t}return a}}const Vt=function(t){t=t.replace(/\r\n?/g,"\n");const e=new P("!xml");let i=e,n="";this.matcher.reset(),this.entityDecoder.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;const r=this.options,s=new q(r.processEntities),o=t.length;for(let a=0;a<o;a++)if("<"===t[a]){const l=t.charCodeAt(a+1);if(47===l){const e=Gt(t,">",a,"Closing Tag is not closed.");let s=t.substring(a+2,e).trim();if(r.removeNSPrefix){const t=s.indexOf(":");-1!==t&&(s=s.substr(t+1))}s=Ht(r.transformTagName,s,"",r).tagName,i&&(n=this.saveTextToParentTag(n,i,this.readonlyMatcher));const o=this.matcher.getCurrentTag();if(s&&r.unpairedTagsSet.has(s))throw new Error(`Unpaired tag can not be used as closing tag: </${s}>`);o&&r.unpairedTagsSet.has(o)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,i=this.tagsNodeStack.pop(),n="",a=e}else if(63===l){let e=Wt(t,a,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");n=this.saveTextToParentTag(n,i,this.readonlyMatcher);const o=this.buildAttributesMap(e.tagExp,this.matcher,e.tagName,!0);if(o){const t=o[this.options.attributeNamePrefix+"version"];this.entityDecoder.setXmlVersion(Number(t)||1),s.setXmlVersion(Number(t)||1)}if(r.ignoreDeclaration&&"?xml"===e.tagName||r.ignorePiTags);else{const t=new P(e.tagName);t.add(r.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&!0!==r.ignoreAttributes&&(t[":@"]=o),this.addChild(i,t,this.readonlyMatcher,a)}a=e.closeIndex+1}else if(33===l&&45===t.charCodeAt(a+2)&&45===t.charCodeAt(a+3)){const e=Gt(t,"--\x3e",a+4,"Comment is not closed.");if(r.commentPropName){const s=t.substring(a+4,e-2);n=this.saveTextToParentTag(n,i,this.readonlyMatcher),i.add(r.commentPropName,[{[r.textNodeName]:s}])}a=e}else if(33===l&&68===t.charCodeAt(a+2)){if(this.doctypefound)throw new Error("Multiple DOCTYPE declarations found.");this.doctypefound=!0;const e=s.readDocType(t,a);this.entityDecoder.addInputEntities(e.entities),a=e.i}else if(33===l&&91===t.charCodeAt(a+2)){const e=Gt(t,"]]>",a,"CDATA is not closed.")-2,s=t.substring(a+9,e);n=this.saveTextToParentTag(n,i,this.readonlyMatcher);let o=this.parseTextData(s,i.tagname,this.readonlyMatcher,!0,!1,!0,!0);null==o&&(o=""),r.cdataPropName?i.add(r.cdataPropName,[{[r.textNodeName]:s}]):i.add(r.textNodeName,o),a=e+2}else{let s=Wt(t,a,r.removeNSPrefix);if(!s){const e=t.substring(Math.max(0,a-50),Math.min(o,a+50));throw new Error(`readTagExp returned undefined at position ${a}. Context: "${e}"`)}let l=s.tagName;const p=s.rawTagName;let c=s.tagExp,h=s.attrExpPresent,d=s.closeIndex;if(({tagName:l,tagExp:c}=Ht(r.transformTagName,l,c,r)),r.strictReservedNames&&(l===r.commentPropName||l===r.cdataPropName||l===r.textNodeName||l===r.attributesGroupName))throw new Error(`Invalid tag name: ${l}`);i&&n&&"!xml"!==i.tagname&&(n=this.saveTextToParentTag(n,i,this.readonlyMatcher,!1));const u=i;u&&r.unpairedTagsSet.has(u.tagname)&&(i=this.tagsNodeStack.pop(),this.matcher.pop());let f=!1;c.length>0&&c.lastIndexOf("/")===c.length-1&&(f=!0,"/"===l[l.length-1]?(l=l.substr(0,l.length-1),c=l):c=c.substr(0,c.length-1),h=l!==c);let g,m=null,x={};g=It(p),l!==e.tagname&&this.matcher.push(l,{},g),l!==c&&h&&(m=this.buildAttributesMap(c,this.matcher,l),m&&(x=jt(m,r))),l!==e.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());const b=a;if(this.isCurrentNodeStopNode){let e="";if(f)a=s.closeIndex;else if(r.unpairedTagsSet.has(l))a=s.closeIndex;else{const i=this.readStopNodeData(t,p,d+1);if(!i)throw new Error(`Unexpected end of ${p}`);a=i.i,e=i.tagContent}const n=new P(l);m&&(n[":@"]=m),n.add(r.textNodeName,e),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(i,n,this.readonlyMatcher,b)}else{if(f){({tagName:l,tagExp:c}=Ht(r.transformTagName,l,c,r));const t=new P(l);m&&(t[":@"]=m),this.addChild(i,t,this.readonlyMatcher,b),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else{if(r.unpairedTagsSet.has(l)){const t=new P(l);m&&(t[":@"]=m),this.addChild(i,t,this.readonlyMatcher,b),this.matcher.pop(),this.isCurrentNodeStopNode=!1,a=s.closeIndex;continue}{const t=new P(l);if(this.tagsNodeStack.length>r.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(i),m&&(t[":@"]=m),this.addChild(i,t,this.readonlyMatcher,b),i=t}}n="",a=d}}}else n+=t[a];return e.child};function qt(t,e,i,n){this.options.captureMetaData||(n=void 0);const r=this.options.jPath?i.toString():i,s=this.options.updateTag(e.tagname,r,e[":@"]);!1===s||("string"==typeof s?(e.tagname=s,t.addChild(e,n)):t.addChild(e,n))}function Ft(t,e,i){const n=this.options.processEntities;if(!n||!n.enabled)return t;if(n.allowedTags){const r=this.options.jPath?i.toString():i;if(!(Array.isArray(n.allowedTags)?n.allowedTags.includes(e):n.allowedTags(e,r)))return t}if(n.tagFilter){const r=this.options.jPath?i.toString():i;if(!n.tagFilter(e,r))return t}return this.entityDecoder.decode(t)}function Ut(t,e,i,n){return t&&(void 0===n&&(n=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,i,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,n))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function Bt(){return 0!==this.stopNodeExpressionsSet.size&&this.matcher.matchesAny(this.stopNodeExpressionsSet)}function Gt(t,e,i,n){const r=t.indexOf(e,i);if(-1===r)throw new Error(n);return r+e.length-1}function Xt(t,e,i,n){const r=t.indexOf(e,i);if(-1===r)throw new Error(n);return r}function Wt(t,e,i,n=">"){const r=function(t,e,i=">"){let n=0;const r=t.length,s=i.charCodeAt(0),o=i.length>1?i.charCodeAt(1):-1;let a="",l=e;for(let i=e;i<r;i++){const e=t.charCodeAt(i);if(n)e===n&&(n=0);else if(34===e||39===e)n=e;else if(e===s){if(-1===o)return a+=t.substring(l,i),{data:a,index:i};if(t.charCodeAt(i+1)===o)return a+=t.substring(l,i),{data:a,index:i}}else 9!==e||n||(a+=t.substring(l,i)+" ",l=i+1)}}(t,e+1,n);if(!r)return;let s=r.data;const o=r.index,a=s.search(/\s/);let l=s,p=!0;-1!==a&&(l=s.substring(0,a),s=s.substring(a+1).trimStart());const c=l;if(i){const t=l.indexOf(":");-1!==t&&(l=l.substr(t+1),p=l!==r.data.substr(t+1))}return{tagName:l,tagExp:s,closeIndex:o,attrExpPresent:p,rawTagName:c}}function zt(t,e,i){const n=i;let r=1;const s=t.length;for(;i<s;i++)if("<"===t[i]){const s=t.charCodeAt(i+1);if(47===s){const s=Xt(t,">",i,`${e} is not closed`);if(t.substring(i+2,s).trim()===e&&(r--,0===r))return{tagContent:t.substring(n,i),i:s};i=s}else if(63===s)i=Gt(t,"?>",i+1,"StopNode is not closed.");else if(33===s&&45===t.charCodeAt(i+2)&&45===t.charCodeAt(i+3))i=Gt(t,"--\x3e",i+3,"StopNode is not closed.");else if(33===s&&91===t.charCodeAt(i+2))i=Gt(t,"]]>",i,"StopNode is not closed.")-2;else{const n=Wt(t,i,!1);n&&((n&&n.tagName)===e&&"/"!==n.tagExp[n.tagExp.length-1]&&r++,i=n.closeIndex)}}}function Yt(t,e,i){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&tt(t,i)}return void 0!==t?t:""}function Ht(t,e,i,n){if(t){const n=t(e);i===e&&(i=n),e=n}return{tagName:e=Qt(e,n),tagExp:i}}function Qt(t,e){if(a.includes(t))throw new Error(`[SECURITY] Invalid name: "${t}" is a reserved JavaScript keyword that could cause prototype pollution`);return o.includes(t)?e.onDangerousProperty(t):t}const Jt=P.getMetaDataSymbol();function Zt(t,e){if(!t||"object"!=typeof t)return{};if(!e)return t;const i={};for(const n in t)n.startsWith(e)?i[n.substring(e.length)]=t[n]:i[n]=t[n];return i}function Kt(t,e,i,n){return te(t,e,i,n)}function te(t,e,i,n){let r;const s={};for(let o=0;o<t.length;o++){const a=t[o],l=ee(a);if(void 0!==l&&l!==e.textNodeName){const t=Zt(a[":@"]||{},e.attributeNamePrefix);i.push(l,t)}if(l===e.textNodeName)void 0===r?r=a[l]:r+=""+a[l];else{if(void 0===l)continue;if(a[l]){let t=te(a[l],e,i,n);const r=ne(t,e);if(0===Object.keys(t).length&&e.alwaysCreateTextNode&&(t[e.textNodeName]=""),a[":@"]?ie(t,a[":@"],n,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==a[Jt]&&"object"==typeof t&&null!==t&&(t[Jt]=a[Jt]),void 0!==s[l]&&Object.prototype.hasOwnProperty.call(s,l))Array.isArray(s[l])||(s[l]=[s[l]]),s[l].push(t);else{const i=e.jPath?n.toString():n;e.isArray(l,i,r)?s[l]=[t]:s[l]=t}void 0!==l&&l!==e.textNodeName&&i.pop()}}}return"string"==typeof r?r.length>0&&(s[e.textNodeName]=r):void 0!==r&&(s[e.textNodeName]=r),s}function ee(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const i=e[t];if(":@"!==i)return i}}function ie(t,e,i,n){if(e){const r=Object.keys(e),s=r.length;for(let o=0;o<s;o++){const s=r[o],a=s.startsWith(n.attributeNamePrefix)?s.substring(n.attributeNamePrefix.length):s,l=n.jPath?i.toString()+"."+a:i;n.isArray(s,l,!0,!0)?t[s]=[e[s]]:t[s]=e[s]}}}function ne(t,e){const{textNodeName:i}=e,n=Object.keys(t).length;return 0===n||!(1!==n||!t[i]&&"boolean"!=typeof t[i]&&0!==t[i])}class re{constructor(t){this.externalEntities={},this.options=C(t)}parse(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});const i=p(t,e);if(!0!==i)throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`)}const i=new kt(this.options,this.externalEntities),n=i.parseXml(t);return this.options.preserveOrder||void 0===n?n:Kt(n,this.options,i.matcher,i.readonlyMatcher)}addEntity(t,e){if(-1!==e.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==t.indexOf("&")||-1!==t.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===e)throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=e}static getMetaDataSymbol(){return P.getMetaDataSymbol()}}function se(t){return String(t).replace(/--/g,"- -").replace(/--/g,"- -").replace(/-$/,"- ")}function oe(t){return String(t).replace(/\]\]>/g,"]]]]><![CDATA[>")}function ae(t){return String(t).replace(/"/g,""").replace(/'/g,"'")}const le=":A-Za-z_À-ÖØ-öø-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�",pe=":A-Za-z_À-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",ce=pe+"\\-\\.\\d·̀-ͯ҇‿-⁀",he=(t,e,i="")=>{const n=`[${t.replace(":","")}][${e.replace(":","")}]*`;return{name:new RegExp(`^[${t}][${e}]*$`,i),ncName:new RegExp(`^${n}$`,i),qName:new RegExp(`^${n}(?::${n})?$`,i),nmToken:new RegExp(`^[${e}]+$`,i),nmTokens:new RegExp(`^[${e}]+(?:\\s+[${e}]+)*$`,i)}},de=he(le,le+"\\-\\.\\d·̀-ͯ‿-⁀"),ue=he(pe,ce,"u"),fe=(t,{xmlVersion:e="1.0"}={})=>((t="1.0")=>"1.1"===t?ue:de)(e).qName.test(t);function ge(t,e,i,n,r){return i.sanitizeName?fe(t,{xmlVersion:r})?t:i.sanitizeName(t,{isAttribute:e,matcher:n.readOnly()}):t}function me(t,e){let i="";e.format&&(i="\n");const n=[];if(e.stopNodes&&Array.isArray(e.stopNodes))for(let t=0;t<e.stopNodes.length;t++){const i=e.stopNodes[t];"string"==typeof i?n.push(new st(i)):i instanceof st&&n.push(i)}const r=function(t,e){if(!Array.isArray(t)||0===t.length)return"1.0";const i=t[0];if("?xml"===Ee(i)){const t=i[":@"];if(t){const i=e.attributeNamePrefix+"version";if(t[i])return t[i]}}return"1.0"}(t,e);return xe(t,e,i,new rt,n,r)}function xe(t,e,i,n,r,s){let o="",a=!1;if(e.maxNestedTags&&n.getDepth()>e.maxNestedTags)throw new Error("Maximum nested tags exceeded");if(!Array.isArray(t)){if(null!=t){let i=t.toString();return i=Se(i,e),i}return""}for(let l=0;l<t.length;l++){const p=t[l],c=Ee(p);if(void 0===c)continue;const h=c===e.textNodeName||c===e.cdataPropName||c===e.commentPropName||"?"===c[0]?c:ge(c,!1,e,n,s),d=be(p[":@"],e);n.push(h,d);const u=ve(n,r);if(h===e.textNodeName){let t=p[c];u||(t=e.tagValueProcessor(h,t),t=Se(t,e)),a&&(o+=i),o+=t,a=!1,n.pop();continue}if(h===e.cdataPropName){a&&(o+=i),o+=`<![CDATA[${oe(p[c][0][e.textNodeName])}]]>`,a=!1,n.pop();continue}if(h===e.commentPropName){o+=i+`\x3c!--${se(p[c][0][e.textNodeName])}--\x3e`,a=!0,n.pop();continue}if("?"===h[0]){o+=("?xml"===h?"":i)+`<${h}${we(p[":@"],e,u,n,s)}?>`,a=!0,n.pop();continue}let f=i;""!==f&&(f+=e.indentBy);const g=i+`<${h}${we(p[":@"],e,u,n,s)}`;let m;m=u?ye(p[c],e):xe(p[c],e,f,n,r,s),-1!==e.unpairedTags.indexOf(h)?e.suppressUnpairedNode?o+=g+">":o+=g+"/>":m&&0!==m.length||!e.suppressEmptyNode?m&&m.endsWith(">")?o+=g+`>${m}${i}</${h}>`:(o+=g+">",m&&""!==i&&(m.includes("/>")||m.includes("</"))?o+=i+e.indentBy+m+i:o+=m,o+=`</${h}>`):o+=g+"/>",a=!0,n.pop()}return o}function be(t,e){if(!t||e.ignoreAttributes)return null;const i={};let n=!1;for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&(i[r.startsWith(e.attributeNamePrefix)?r.substr(e.attributeNamePrefix.length):r]=ae(t[r]),n=!0);return n?i:null}function ye(t,e){if(!Array.isArray(t))return null!=t?t.toString():"";let i="";for(let n=0;n<t.length;n++){const r=t[n],s=Ee(r);if(s===e.textNodeName)i+=r[s];else if(s===e.cdataPropName)i+=r[s][0][e.textNodeName];else if(s===e.commentPropName)i+=r[s][0][e.textNodeName];else{if(s&&"?"===s[0])continue;if(s){const t=Ne(r[":@"],e),n=ye(r[s],e);n&&0!==n.length?i+=`<${s}${t}>${n}</${s}>`:i+=`<${s}${t}/>`}}}return i}function Ne(t,e){let i="";if(t&&!e.ignoreAttributes)for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let r=t[n];!0===r&&e.suppressBooleanAttributes?i+=` ${n.substr(e.attributeNamePrefix.length)}`:i+=` ${n.substr(e.attributeNamePrefix.length)}="${ae(r)}"`}return i}function Ee(t){const e=Object.keys(t);for(let i=0;i<e.length;i++){const n=e[i];if(Object.prototype.hasOwnProperty.call(t,n)&&":@"!==n)return n}}function we(t,e,i,n,r){let s="";if(t&&!e.ignoreAttributes)for(let o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;const a=o.substr(e.attributeNamePrefix.length),l=i?a:ge(a,!0,e,n,r);let p;i?p=t[o]:(p=e.attributeValueProcessor(o,t[o]),p=Se(p,e)),!0===p&&e.suppressBooleanAttributes?s+=` ${l}`:s+=` ${l}="${ae(p)}"`}return s}function ve(t,e){if(!e||0===e.length)return!1;for(let i=0;i<e.length;i++)if(t.matches(e[i]))return!0;return!1}function Se(t,e){if(t&&t.length>0&&e.processEntities)for(let i=0;i<e.entities.length;i++){const n=e.entities[i];t=t.replace(n.regex,n.val)}return t}const Ae={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1,maxNestedTags:100,jPath:!0,sanitizeName:!1};function Te(t){if(this.options=Object.assign({},Ae,t),this.options.stopNodes&&Array.isArray(this.options.stopNodes)&&(this.options.stopNodes=this.options.stopNodes.map(t=>"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t)),this.stopNodeExpressions=[],this.options.stopNodes&&Array.isArray(this.options.stopNodes))for(let t=0;t<this.options.stopNodes.length;t++){const e=this.options.stopNodes[t];"string"==typeof e?this.stopNodeExpressions.push(new st(e)):e instanceof st&&this.stopNodeExpressions.push(e)}var e;!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?t=>{for(const i of e){if("string"==typeof i&&t===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}}:()=>!1,this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Pe),this.processTextOrObjNode=Ce,this.options.format?(this.indentate=$e,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function _e(t,e,i,n,r){return i.sanitizeName?fe(t,{xmlVersion:r})?t:i.sanitizeName(t,{isAttribute:e,matcher:n.readOnly()}):t}function Ce(t,e,i,n,r){const s=this.extractAttributes(t);if(n.push(e,s),this.checkStopNode(n)){const r=this.buildRawContent(t),s=this.buildAttributesForStopNode(t);return n.pop(),this.buildObjectNode(r,e,s,i)}const o=this.j2x(t,i+1,n,r);return n.pop(),"?"===e[0]?this.buildTextValNode("",e,o.attrStr,i,n):void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,o.attrStr,i,n):this.buildObjectNode(o.val,e,o.attrStr,i)}function $e(t){return this.options.indentBy.repeat(t)}function Pe(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}Te.prototype.build=function(t){if(this.options.preserveOrder)return me(t,this.options);{Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t});const e=new rt,i=function(t,e){const i=t["?xml"];if(i&&"object"==typeof i){if(e.attributesGroupName&&i[e.attributesGroupName]){const t=i[e.attributesGroupName][e.attributeNamePrefix+"version"];if(t)return t}const t=i[e.attributeNamePrefix+"version"];if(t)return t}return"1.0"}(t,this.options);return this.j2x(t,0,e,i).val}},Te.prototype.j2x=function(t,e,i,n){let r="",s="";if(this.options.maxNestedTags&&i.getDepth()>=this.options.maxNestedTags)throw new Error("Maximum nested tags exceeded");const o=this.options.jPath?i.toString():i,a=this.checkStopNode(i);for(let l in t){if(!Object.prototype.hasOwnProperty.call(t,l))continue;const p=l===this.options.textNodeName||l===this.options.cdataPropName||l===this.options.commentPropName||this.options.attributesGroupName&&l===this.options.attributesGroupName||this.isAttribute(l)||"?"===l[0]?l:_e(l,!1,this.options,i,n);if(void 0===t[l])this.isAttribute(l)&&(s+="");else if(null===t[l])this.isAttribute(l)||p===this.options.cdataPropName||p===this.options.commentPropName?s+="":"?"===p[0]?s+=this.indentate(e)+"<"+p+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+p+"/"+this.tagEndChar;else if(t[l]instanceof Date)s+=this.buildTextValNode(t[l],p,"",e,i);else if("object"!=typeof t[l]){const c=this.isAttribute(l);if(c&&!this.ignoreAttributesFn(c,o)){const e=_e(c,!0,this.options,i,n);r+=this.buildAttrPairStr(e,""+t[l],a)}else if(!c)if(l===this.options.textNodeName){let e=this.options.tagValueProcessor(l,""+t[l]);s+=this.replaceEntitiesValue(e)}else{i.push(p);const n=this.checkStopNode(i);if(i.pop(),n){const i=""+t[l];s+=""===i?this.indentate(e)+"<"+p+this.closeTag(p)+this.tagEndChar:this.indentate(e)+"<"+p+">"+i+"</"+p+this.tagEndChar}else s+=this.buildTextValNode(t[l],p,"",e,i)}}else if(Array.isArray(t[l])){const r=t[l].length;let o="",a="";for(let c=0;c<r;c++){const r=t[l][c];if(void 0===r);else if(null===r)"?"===p[0]?s+=this.indentate(e)+"<"+p+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+p+"/"+this.tagEndChar;else if("object"==typeof r)if(this.options.oneListGroup){i.push(p);const t=this.j2x(r,e+1,i,n);i.pop(),o+=t.val,this.options.attributesGroupName&&r.hasOwnProperty(this.options.attributesGroupName)&&(a+=t.attrStr)}else o+=this.processTextOrObjNode(r,p,e,i,n);else if(this.options.oneListGroup){let t=this.options.tagValueProcessor(p,r);t=this.replaceEntitiesValue(t),o+=t}else{i.push(p);const t=this.checkStopNode(i);if(i.pop(),t){const t=""+r;o+=""===t?this.indentate(e)+"<"+p+this.closeTag(p)+this.tagEndChar:this.indentate(e)+"<"+p+">"+t+"</"+p+this.tagEndChar}else o+=this.buildTextValNode(r,p,"",e,i)}}this.options.oneListGroup&&(o=this.buildObjectNode(o,p,a,e)),s+=o}else if(this.options.attributesGroupName&&l===this.options.attributesGroupName){const e=Object.keys(t[l]),s=e.length;for(let o=0;o<s;o++){const s=_e(e[o],!0,this.options,i,n);r+=this.buildAttrPairStr(s,""+t[l][e[o]],a)}}else s+=this.processTextOrObjNode(t[l],p,e,i,n)}return{attrStr:r,val:s}},Te.prototype.buildAttrPairStr=function(t,e,i){return i||(e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e)),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+ae(e)+'"'},Te.prototype.extractAttributes=function(t){if(!t||"object"!=typeof t)return null;const e={};let i=!1;if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){const n=t[this.options.attributesGroupName];for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t.startsWith(this.options.attributeNamePrefix)?t.substring(this.options.attributeNamePrefix.length):t]=ae(n[t]),i=!0)}else for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const r=this.isAttribute(n);r&&(e[r]=ae(t[n]),i=!0)}return i?e:null},Te.prototype.buildRawContent=function(t){if("string"==typeof t)return t;if("object"!=typeof t||null===t)return String(t);if(void 0!==t[this.options.textNodeName])return t[this.options.textNodeName];let e="";for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;if(this.isAttribute(i))continue;if(this.options.attributesGroupName&&i===this.options.attributesGroupName)continue;const n=t[i];if(i===this.options.textNodeName)e+=n;else if(Array.isArray(n)){for(let t of n)if("string"==typeof t||"number"==typeof t)e+=`<${i}>${t}</${i}>`;else if("object"==typeof t&&null!==t){const n=this.buildRawContent(t),r=this.buildAttributesForStopNode(t);e+=""===n?`<${i}${r}/>`:`<${i}${r}>${n}</${i}>`}}else if("object"==typeof n&&null!==n){const t=this.buildRawContent(n),r=this.buildAttributesForStopNode(n);e+=""===t?`<${i}${r}/>`:`<${i}${r}>${t}</${i}>`}else e+=`<${i}>${n}</${i}>`}return e},Te.prototype.buildAttributesForStopNode=function(t){if(!t||"object"!=typeof t)return"";let e="";if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){const i=t[this.options.attributesGroupName];for(let t in i){if(!Object.prototype.hasOwnProperty.call(i,t))continue;const n=t.startsWith(this.options.attributeNamePrefix)?t.substring(this.options.attributeNamePrefix.length):t,r=i[t];!0===r&&this.options.suppressBooleanAttributes?e+=" "+n:e+=" "+n+'="'+r+'"'}}else for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const n=this.isAttribute(i);if(n){const r=t[i];!0===r&&this.options.suppressBooleanAttributes?e+=" "+n:e+=" "+n+'="'+r+'"'}}return e},Te.prototype.buildObjectNode=function(t,e,i,n){if(""===t)return"?"===e[0]?this.indentate(n)+"<"+e+i+"?"+this.tagEndChar:this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar;if("?"===e[0])return this.indentate(n)+"<"+e+i+"?"+this.tagEndChar;{let r="</"+e+this.tagEndChar,s="";return"?"===e[0]&&(s="?",r=""),!i&&""!==i||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===s.length?this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(n)+"<"+e+i+s+this.tagEndChar+t+this.indentate(n)+r:this.indentate(n)+"<"+e+i+s+">"+t+r}},Te.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},Te.prototype.checkStopNode=function(t){if(!this.stopNodeExpressions||0===this.stopNodeExpressions.length)return!1;for(let e=0;e<this.stopNodeExpressions.length;e++)if(t.matches(this.stopNodeExpressions[e]))return!0;return!1},Te.prototype.buildTextValNode=function(t,e,i,n,r){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName){const e=oe(t);return this.indentate(n)+`<![CDATA[${e}]]>`+this.newLine}if(!1!==this.options.commentPropName&&e===this.options.commentPropName){const e=se(t);return this.indentate(n)+`\x3c!--${e}--\x3e`+this.newLine}if("?"===e[0])return this.indentate(n)+"<"+e+i+"?"+this.tagEndChar;{let r=this.options.tagValueProcessor(e,t);return r=this.replaceEntitiesValue(r),""===r?this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+i+">"+r+"</"+e+this.tagEndChar}},Te.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const i=this.options.entities[e];t=t.replace(i.regex,i.val)}return t};const Oe=Te,je={validate:p};module.exports=e})();
|
|
128190
128829
|
|
|
128191
128830
|
/***/ },
|
|
128192
128831
|
|