@cdklabs/cdk-ecs-codedeploy 0.0.439 → 0.0.440

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.
Files changed (106) hide show
  1. package/.jsii +3 -3
  2. package/lib/api-canary/index.js +1 -1
  3. package/lib/ecs-appspec/index.js +1 -1
  4. package/lib/ecs-deployment/index.js +1 -1
  5. package/lib/ecs-patterns/application-load-balanced-codedeployed-fargate-service.js +1 -1
  6. package/node_modules/@aws-sdk/client-codedeploy/dist-es/waiters/waitForDeploymentSuccessful.js +1 -1
  7. package/node_modules/@aws-sdk/client-codedeploy/dist-types/CodeDeploy.d.ts +1 -1
  8. package/node_modules/@aws-sdk/client-codedeploy/dist-types/ts3.4/CodeDeploy.d.ts +1 -1
  9. package/node_modules/@aws-sdk/client-codedeploy/dist-types/ts3.4/waiters/waitForDeploymentSuccessful.d.ts +9 -3
  10. package/node_modules/@aws-sdk/client-codedeploy/dist-types/waiters/waitForDeploymentSuccessful.d.ts +4 -3
  11. package/node_modules/@aws-sdk/client-codedeploy/package.json +8 -8
  12. package/node_modules/@aws-sdk/core/dist-cjs/index.js +15 -6
  13. package/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js +15 -6
  14. package/node_modules/@aws-sdk/core/dist-es/submodules/client/emitWarningIfUnsupportedVersion.js +15 -6
  15. package/node_modules/@aws-sdk/core/dist-types/submodules/client/emitWarningIfUnsupportedVersion.d.ts +1 -2
  16. package/node_modules/@aws-sdk/core/package.json +3 -3
  17. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  18. package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
  19. package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
  20. package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
  21. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  22. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  23. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  24. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  25. package/node_modules/@aws-sdk/middleware-sdk-s3/package.json +2 -2
  26. package/node_modules/@aws-sdk/middleware-user-agent/package.json +3 -3
  27. package/node_modules/@aws-sdk/nested-clients/package.json +7 -7
  28. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
  29. package/node_modules/@aws-sdk/token-providers/package.json +3 -3
  30. package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
  31. package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-external/nodable_entities.js +336 -0
  32. package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-parser.js +26 -0
  33. package/node_modules/@aws-sdk/xml-builder/dist-es/xml-external/nodable_entities.js +332 -0
  34. package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +26 -0
  35. package/node_modules/@aws-sdk/xml-builder/dist-types/ts3.4/xml-external/nodable_entities.d.ts +66 -0
  36. package/node_modules/@aws-sdk/xml-builder/dist-types/xml-external/nodable_entities.d.ts +65 -0
  37. package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/CHANGELOG.md +8 -0
  38. package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxp.cjs +1 -1
  39. package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxp.min.js +1 -1
  40. package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -0
  41. package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxparser.min.js +1 -1
  42. package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -0
  43. package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/package.json +1 -1
  44. package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/xmlparser/OrderedObjParser.js +16 -11
  45. package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/xmlparser/XMLParser.js +2 -2
  46. package/node_modules/@aws-sdk/xml-builder/package.json +3 -2
  47. package/node_modules/@smithy/middleware-retry/package.json +2 -2
  48. package/node_modules/@smithy/util-retry/dist-cjs/index.js +7 -3
  49. package/node_modules/@smithy/util-retry/dist-es/AdaptiveRetryStrategy.js +5 -2
  50. package/node_modules/@smithy/util-retry/dist-es/DefaultRateLimiter.js +2 -1
  51. package/node_modules/@smithy/util-retry/package.json +2 -2
  52. package/node_modules/fast-xml-builder/CHANGELOG.md +13 -0
  53. package/node_modules/fast-xml-builder/lib/fxb.cjs +1 -1
  54. package/node_modules/fast-xml-builder/lib/fxb.min.js +1 -1
  55. package/node_modules/fast-xml-builder/lib/fxb.min.js.map +1 -1
  56. package/node_modules/fast-xml-builder/package.json +1 -1
  57. package/node_modules/fast-xml-builder/src/fxb.js +7 -8
  58. package/node_modules/fast-xml-builder/src/orderedJs2Xml.js +6 -7
  59. package/node_modules/fast-xml-builder/src/util.js +16 -0
  60. package/package.json +2 -2
  61. package/node_modules/fast-xml-parser/lib/fxp.min.js.map +0 -1
  62. package/node_modules/fast-xml-parser/lib/fxparser.min.js.map +0 -1
  63. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/LICENSE +0 -0
  64. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/README.md +0 -0
  65. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxbuilder.min.js +0 -0
  66. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxbuilder.min.js.map +0 -0
  67. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxp.d.cts +0 -0
  68. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxvalidator.min.js +0 -0
  69. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/lib/fxvalidator.min.js.map +0 -0
  70. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/cli/cli.js +0 -0
  71. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/cli/man.js +0 -0
  72. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/cli/read.js +0 -0
  73. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/fxp.d.ts +0 -0
  74. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/fxp.js +0 -0
  75. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/ignoreAttributes.js +0 -0
  76. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/util.js +0 -0
  77. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/CharsSymbol.js +0 -0
  78. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/EntitiesParser.js +0 -0
  79. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/OptionsBuilder.js +0 -0
  80. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/OutputBuilders/BaseOutputBuilder.js +0 -0
  81. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/OutputBuilders/JsArrBuilder.js +0 -0
  82. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/OutputBuilders/JsMinArrBuilder.js +0 -0
  83. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/OutputBuilders/JsObjBuilder.js +0 -0
  84. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/OutputBuilders/ParserOptionsBuilder.js +0 -0
  85. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/Report.js +0 -0
  86. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/TagPath.js +0 -0
  87. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/TagPathMatcher.js +0 -0
  88. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/XMLParser.js +0 -0
  89. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/Xml2JsParser.js +0 -0
  90. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/XmlPartReader.js +0 -0
  91. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/XmlSpecialTagsReader.js +0 -0
  92. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/inputSource/BufferSource.js +0 -0
  93. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/inputSource/StringSource.js +0 -0
  94. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/valueParsers/EntitiesParser.js +0 -0
  95. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/valueParsers/booleanParser.js +0 -0
  96. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/valueParsers/booleanParserExt.js +0 -0
  97. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/valueParsers/currency.js +0 -0
  98. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/valueParsers/join.js +0 -0
  99. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/valueParsers/number.js +0 -0
  100. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/v6/valueParsers/trim.js +0 -0
  101. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/validator.js +0 -0
  102. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/xmlbuilder/json2xml.js +0 -0
  103. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/xmlparser/DocTypeReader.js +0 -0
  104. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/xmlparser/OptionsBuilder.js +0 -0
  105. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/xmlparser/node2json.js +0 -0
  106. /package/node_modules/{fast-xml-parser → @aws-sdk/xml-builder/node_modules/fast-xml-parser}/src/xmlparser/xmlNode.js +0 -0
@@ -0,0 +1,332 @@
1
+ export const XML = {
2
+ amp: "&",
3
+ apos: "'",
4
+ gt: ">",
5
+ lt: "<",
6
+ quot: '"',
7
+ };
8
+ export const COMMON_HTML = {
9
+ nbsp: "\u00a0",
10
+ copy: "\u00a9",
11
+ reg: "\u00ae",
12
+ trade: "\u2122",
13
+ mdash: "\u2014",
14
+ ndash: "\u2013",
15
+ hellip: "\u2026",
16
+ laquo: "\u00ab",
17
+ raquo: "\u00bb",
18
+ lsquo: "\u2018",
19
+ rsquo: "\u2019",
20
+ ldquo: "\u201c",
21
+ rdquo: "\u201d",
22
+ bull: "\u2022",
23
+ para: "\u00b6",
24
+ sect: "\u00a7",
25
+ deg: "\u00b0",
26
+ frac12: "\u00bd",
27
+ frac14: "\u00bc",
28
+ frac34: "\u00be",
29
+ };
30
+ export const CURRENCY = {
31
+ cent: "\u00a2",
32
+ pound: "\u00a3",
33
+ curren: "\u00a4",
34
+ yen: "\u00a5",
35
+ euro: "\u20ac",
36
+ dollar: "$",
37
+ fnof: "\u0192",
38
+ inr: "\u20b9",
39
+ af: "\u060b",
40
+ birr: "\u1265\u122d",
41
+ peso: "\u20b1",
42
+ rub: "\u20bd",
43
+ won: "\u20a9",
44
+ yuan: "\u00a5",
45
+ cedil: "\u00b8",
46
+ };
47
+ const SPECIAL_CHARS = new Set("!?\\/[]$%{}^&*()<>|+");
48
+ function validateEntityName(name) {
49
+ if (name[0] === "#") {
50
+ throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${name}"`);
51
+ }
52
+ for (const ch of name) {
53
+ if (SPECIAL_CHARS.has(ch)) {
54
+ throw new Error(`[EntityReplacer] Invalid character '${ch}' in entity name: "${name}"`);
55
+ }
56
+ }
57
+ return name;
58
+ }
59
+ function mergeEntityMaps(...maps) {
60
+ const out = Object.create(null);
61
+ for (const map of maps) {
62
+ if (!map) {
63
+ continue;
64
+ }
65
+ for (const key of Object.keys(map)) {
66
+ const raw = map[key];
67
+ if (typeof raw === "string") {
68
+ out[key] = raw;
69
+ }
70
+ else if (raw && typeof raw === "object" && raw.val !== undefined) {
71
+ const val = raw.val;
72
+ if (typeof val === "string") {
73
+ out[key] = val;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ return out;
79
+ }
80
+ const LIMIT_TIER_EXTERNAL = "external";
81
+ const LIMIT_TIER_BASE = "base";
82
+ const LIMIT_TIER_ALL = "all";
83
+ function parseLimitTiers(raw) {
84
+ if (!raw || raw === LIMIT_TIER_EXTERNAL) {
85
+ return new Set([LIMIT_TIER_EXTERNAL]);
86
+ }
87
+ if (raw === LIMIT_TIER_ALL) {
88
+ return new Set([LIMIT_TIER_ALL]);
89
+ }
90
+ if (raw === LIMIT_TIER_BASE) {
91
+ return new Set([LIMIT_TIER_BASE]);
92
+ }
93
+ if (Array.isArray(raw)) {
94
+ return new Set(raw);
95
+ }
96
+ return new Set([LIMIT_TIER_EXTERNAL]);
97
+ }
98
+ const NCR_LEVEL = Object.freeze({ allow: 0, leave: 1, remove: 2, throw: 3 });
99
+ const XML10_ALLOWED_C0 = new Set([0x09, 0x0a, 0x0d]);
100
+ function parseNCRConfig(ncr) {
101
+ if (!ncr) {
102
+ return { xmlVersion: 1.0, onLevel: NCR_LEVEL.allow, nullLevel: NCR_LEVEL.remove };
103
+ }
104
+ const xmlVersion = ncr.xmlVersion === 1.1 ? 1.1 : 1.0;
105
+ const onLevel = NCR_LEVEL[ncr.onNCR ?? "allow"] ?? NCR_LEVEL.allow;
106
+ const nullLevel = NCR_LEVEL[ncr.nullNCR ?? "remove"] ?? NCR_LEVEL.remove;
107
+ const clampedNull = Math.max(nullLevel, NCR_LEVEL.remove);
108
+ return { xmlVersion, onLevel, nullLevel: clampedNull };
109
+ }
110
+ export const EntityDecoderImpl = class EntityDecoderImpl {
111
+ _limit;
112
+ _maxTotalExpansions;
113
+ _maxExpandedLength;
114
+ _postCheck;
115
+ _limitTiers;
116
+ _numericAllowed;
117
+ _baseMap;
118
+ _externalMap;
119
+ _inputMap;
120
+ _totalExpansions;
121
+ _expandedLength;
122
+ _removeSet;
123
+ _leaveSet;
124
+ _ncrXmlVersion;
125
+ _ncrOnLevel;
126
+ _ncrNullLevel;
127
+ constructor(options = {}) {
128
+ this._limit = options.limit || {};
129
+ this._maxTotalExpansions = this._limit.maxTotalExpansions || 0;
130
+ this._maxExpandedLength = this._limit.maxExpandedLength || 0;
131
+ this._postCheck = typeof options.postCheck === "function" ? options.postCheck : (r) => r;
132
+ this._limitTiers = parseLimitTiers(this._limit.applyLimitsTo ?? LIMIT_TIER_EXTERNAL);
133
+ this._numericAllowed = options.numericAllowed ?? true;
134
+ this._baseMap = mergeEntityMaps(XML, options.namedEntities || null);
135
+ this._externalMap = Object.create(null);
136
+ this._inputMap = Object.create(null);
137
+ this._totalExpansions = 0;
138
+ this._expandedLength = 0;
139
+ this._removeSet = new Set(options.remove && Array.isArray(options.remove) ? options.remove : []);
140
+ this._leaveSet = new Set(options.leave && Array.isArray(options.leave) ? options.leave : []);
141
+ const ncrCfg = parseNCRConfig(options.ncr);
142
+ this._ncrXmlVersion = ncrCfg.xmlVersion;
143
+ this._ncrOnLevel = ncrCfg.onLevel;
144
+ this._ncrNullLevel = ncrCfg.nullLevel;
145
+ }
146
+ setExternalEntities(map) {
147
+ if (map) {
148
+ for (const key of Object.keys(map)) {
149
+ validateEntityName(key);
150
+ }
151
+ }
152
+ this._externalMap = mergeEntityMaps(map);
153
+ }
154
+ addExternalEntity(key, value) {
155
+ validateEntityName(key);
156
+ if (typeof value === "string" && value.indexOf("&") === -1) {
157
+ this._externalMap[key] = value;
158
+ }
159
+ }
160
+ addInputEntities(map) {
161
+ this._totalExpansions = 0;
162
+ this._expandedLength = 0;
163
+ this._inputMap = mergeEntityMaps(map);
164
+ }
165
+ reset() {
166
+ this._inputMap = Object.create(null);
167
+ this._totalExpansions = 0;
168
+ this._expandedLength = 0;
169
+ return this;
170
+ }
171
+ setXmlVersion(version) {
172
+ this._ncrXmlVersion = version === "1.1" || version === 1.1 ? 1.1 : 1.0;
173
+ }
174
+ decode(str) {
175
+ if (typeof str !== "string" || str.length === 0) {
176
+ return str;
177
+ }
178
+ const original = str;
179
+ const chunks = [];
180
+ const len = str.length;
181
+ let last = 0;
182
+ let i = 0;
183
+ const limitExpansions = this._maxTotalExpansions > 0;
184
+ const limitLength = this._maxExpandedLength > 0;
185
+ const checkLimits = limitExpansions || limitLength;
186
+ while (i < len) {
187
+ if (str.charCodeAt(i) !== 38) {
188
+ i++;
189
+ continue;
190
+ }
191
+ let j = i + 1;
192
+ while (j < len && str.charCodeAt(j) !== 59 && j - i <= 32) {
193
+ j++;
194
+ }
195
+ if (j >= len || str.charCodeAt(j) !== 59) {
196
+ i++;
197
+ continue;
198
+ }
199
+ const token = str.slice(i + 1, j);
200
+ if (token.length === 0) {
201
+ i++;
202
+ continue;
203
+ }
204
+ let replacement;
205
+ let tier;
206
+ if (this._removeSet.has(token)) {
207
+ replacement = "";
208
+ if (tier === undefined) {
209
+ tier = LIMIT_TIER_EXTERNAL;
210
+ }
211
+ }
212
+ else if (this._leaveSet.has(token)) {
213
+ i++;
214
+ continue;
215
+ }
216
+ else if (token.charCodeAt(0) === 35) {
217
+ const ncrResult = this._resolveNCR(token);
218
+ if (ncrResult === undefined) {
219
+ i++;
220
+ continue;
221
+ }
222
+ replacement = ncrResult;
223
+ tier = LIMIT_TIER_BASE;
224
+ }
225
+ else {
226
+ const resolved = this._resolveName(token);
227
+ replacement = resolved?.value;
228
+ tier = resolved?.tier;
229
+ }
230
+ if (replacement === undefined) {
231
+ i++;
232
+ continue;
233
+ }
234
+ if (i > last) {
235
+ chunks.push(str.slice(last, i));
236
+ }
237
+ chunks.push(replacement);
238
+ last = j + 1;
239
+ i = last;
240
+ if (checkLimits && this._tierCounts(tier)) {
241
+ if (limitExpansions) {
242
+ this._totalExpansions++;
243
+ if (this._totalExpansions > this._maxTotalExpansions) {
244
+ throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ` +
245
+ `${this._totalExpansions} > ${this._maxTotalExpansions}`);
246
+ }
247
+ }
248
+ if (limitLength) {
249
+ const delta = replacement.length - (token.length + 2);
250
+ if (delta > 0) {
251
+ this._expandedLength += delta;
252
+ if (this._expandedLength > this._maxExpandedLength) {
253
+ throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ` +
254
+ `${this._expandedLength} > ${this._maxExpandedLength}`);
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ if (last < len) {
261
+ chunks.push(str.slice(last));
262
+ }
263
+ const result = chunks.length === 0 ? str : chunks.join("");
264
+ return this._postCheck(result, original);
265
+ }
266
+ _tierCounts(tier) {
267
+ if (this._limitTiers.has(LIMIT_TIER_ALL)) {
268
+ return true;
269
+ }
270
+ return this._limitTiers.has(tier);
271
+ }
272
+ _resolveName(name) {
273
+ if (name in this._inputMap) {
274
+ return { value: this._inputMap[name], tier: LIMIT_TIER_EXTERNAL };
275
+ }
276
+ if (name in this._externalMap) {
277
+ return { value: this._externalMap[name], tier: LIMIT_TIER_EXTERNAL };
278
+ }
279
+ if (name in this._baseMap) {
280
+ return { value: this._baseMap[name], tier: LIMIT_TIER_BASE };
281
+ }
282
+ return undefined;
283
+ }
284
+ _classifyNCR(cp) {
285
+ if (cp === 0) {
286
+ return this._ncrNullLevel;
287
+ }
288
+ if (cp >= 0xd800 && cp <= 0xdfff) {
289
+ return NCR_LEVEL.remove;
290
+ }
291
+ if (this._ncrXmlVersion === 1.0) {
292
+ if (cp >= 0x01 && cp <= 0x1f && !XML10_ALLOWED_C0.has(cp)) {
293
+ return NCR_LEVEL.remove;
294
+ }
295
+ }
296
+ return -1;
297
+ }
298
+ _applyNCRAction(action, token, cp) {
299
+ switch (action) {
300
+ case NCR_LEVEL.allow:
301
+ return String.fromCodePoint(cp);
302
+ case NCR_LEVEL.remove:
303
+ return "";
304
+ case NCR_LEVEL.leave:
305
+ return undefined;
306
+ case NCR_LEVEL.throw:
307
+ throw new Error(`[EntityDecoder] Prohibited numeric character reference ` +
308
+ `&${token}; (U+${cp.toString(16).toUpperCase().padStart(4, "0")})`);
309
+ default:
310
+ return String.fromCodePoint(cp);
311
+ }
312
+ }
313
+ _resolveNCR(token) {
314
+ const second = token.charCodeAt(1);
315
+ let cp;
316
+ if (second === 120 || second === 88) {
317
+ cp = parseInt(token.slice(2), 16);
318
+ }
319
+ else {
320
+ cp = parseInt(token.slice(1), 10);
321
+ }
322
+ if (Number.isNaN(cp) || cp < 0 || cp > 0x10ffff) {
323
+ return undefined;
324
+ }
325
+ const minimum = this._classifyNCR(cp);
326
+ if (!this._numericAllowed && minimum < NCR_LEVEL.remove) {
327
+ return undefined;
328
+ }
329
+ const effective = minimum === -1 ? this._ncrOnLevel : Math.max(this._ncrOnLevel, minimum);
330
+ return this._applyNCRAction(effective, token, cp);
331
+ }
332
+ };
@@ -1,4 +1,15 @@
1
1
  import { XMLParser } from "fast-xml-parser";
2
+ import { COMMON_HTML, CURRENCY, EntityDecoderImpl, XML } from "./xml-external/nodable_entities";
3
+ const entityDecoder = new EntityDecoderImpl({
4
+ namedEntities: { ...XML, ...COMMON_HTML, ...CURRENCY },
5
+ numericAllowed: true,
6
+ limit: {
7
+ maxTotalExpansions: Infinity,
8
+ },
9
+ ncr: {
10
+ xmlVersion: 1.1,
11
+ },
12
+ });
2
13
  const parser = new XMLParser({
3
14
  attributeNamePrefix: "",
4
15
  processEntities: {
@@ -6,6 +17,21 @@ const parser = new XMLParser({
6
17
  maxTotalExpansions: Infinity,
7
18
  },
8
19
  htmlEntities: true,
20
+ entityDecoder: {
21
+ setExternalEntities: (entities) => {
22
+ entityDecoder.setExternalEntities(entities);
23
+ },
24
+ addInputEntities: (entities) => {
25
+ entityDecoder.addInputEntities(entities);
26
+ },
27
+ reset: () => {
28
+ entityDecoder.reset();
29
+ },
30
+ decode: (text) => {
31
+ return entityDecoder.decode(text);
32
+ },
33
+ setXmlVersion: (version) => void {},
34
+ },
9
35
  ignoreAttributes: false,
10
36
  ignoreDeclaration: true,
11
37
  parseTagValue: false,
@@ -0,0 +1,66 @@
1
+ export declare const XML: Record<string, string>;
2
+ export declare const COMMON_HTML: Record<string, string>;
3
+ export declare const CURRENCY: Record<string, string>;
4
+ type EntityValFn = (
5
+ match: string,
6
+ captured: string,
7
+ ...rest: unknown[]
8
+ ) => string;
9
+ type ApplyLimitsTo = "external" | "base" | "all" | Array<"external" | "base">;
10
+ interface EntityDecoderLimitOptions {
11
+ maxTotalExpansions?: number;
12
+ maxExpandedLength?: number;
13
+ applyLimitsTo?: ApplyLimitsTo;
14
+ }
15
+ interface EntityDecoderNCROptions {
16
+ xmlVersion?: 1.0 | 1.1;
17
+ onNCR?: "allow" | "leave" | "remove" | "throw";
18
+ nullNCR?: "remove" | "throw";
19
+ }
20
+ interface EntityDecoderOptions {
21
+ namedEntities?: Record<
22
+ string,
23
+ | string
24
+ | {
25
+ regex: RegExp;
26
+ val: string | EntityValFn;
27
+ }
28
+ > | null;
29
+ postCheck?: ((resolved: string, original: string) => string) | null;
30
+ numericAllowed?: boolean;
31
+ leave?: string[];
32
+ remove?: string[];
33
+ limit?: EntityDecoderLimitOptions;
34
+ ncr?: EntityDecoderNCROptions;
35
+ }
36
+ export interface EntityDecoder {
37
+ setExternalEntities(
38
+ map: Record<
39
+ string,
40
+ | string
41
+ | {
42
+ regex: RegExp;
43
+ val: string | EntityValFn;
44
+ }
45
+ >
46
+ ): void;
47
+ addExternalEntity(key: string, value: string): void;
48
+ addInputEntities(
49
+ map: Record<
50
+ string,
51
+ | string
52
+ | {
53
+ regx?: RegExp;
54
+ regex?: RegExp;
55
+ val: string | EntityValFn;
56
+ }
57
+ >
58
+ ): void;
59
+ reset(): this;
60
+ decode(str: string): string;
61
+ setXmlVersion(version: string): void;
62
+ }
63
+ export declare const EntityDecoderImpl: new (
64
+ options?: EntityDecoderOptions
65
+ ) => EntityDecoder;
66
+ export {};
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Contains code from \@nodable/entities v2.1.0
3
+ * Copyright (c) Amit Gupta (https://solothought.com)
4
+ * https://github.com/nodable/val-parsers
5
+ *
6
+ * This file bundles the EntityDecoder class and the named-entity maps
7
+ * (XML, COMMON_HTML, CURRENCY).
8
+ *
9
+ * This is a temporary solution while using this particular custom
10
+ * EntityDecoder class. The module-only nature of the original version
11
+ * is incompatible with some of our users' applications.
12
+ *
13
+ * Given that our CJS dist must call `require` to bring in the module, and
14
+ * because the EntityDecoder class and object are inaccessible via the runtime object surface
15
+ * of the XMLParser, we must inline the package.
16
+ *
17
+ * Q: Why is this necessary given that fast-xml-parser itself uses \@nodable/entities?
18
+ * A: FXP only uses \@nodable/entities when imported in ESM mode. When importing FXP
19
+ * via require, a bundled version is used, unaffected by the module-only nature
20
+ * of the entities package.
21
+ */
22
+ export declare const XML: Record<string, string>;
23
+ export declare const COMMON_HTML: Record<string, string>;
24
+ export declare const CURRENCY: Record<string, string>;
25
+ type EntityValFn = (match: string, captured: string, ...rest: unknown[]) => string;
26
+ type ApplyLimitsTo = "external" | "base" | "all" | Array<"external" | "base">;
27
+ interface EntityDecoderLimitOptions {
28
+ maxTotalExpansions?: number;
29
+ maxExpandedLength?: number;
30
+ applyLimitsTo?: ApplyLimitsTo;
31
+ }
32
+ interface EntityDecoderNCROptions {
33
+ xmlVersion?: 1.0 | 1.1;
34
+ onNCR?: "allow" | "leave" | "remove" | "throw";
35
+ nullNCR?: "remove" | "throw";
36
+ }
37
+ interface EntityDecoderOptions {
38
+ namedEntities?: Record<string, string | {
39
+ regex: RegExp;
40
+ val: string | EntityValFn;
41
+ }> | null;
42
+ postCheck?: ((resolved: string, original: string) => string) | null;
43
+ numericAllowed?: boolean;
44
+ leave?: string[];
45
+ remove?: string[];
46
+ limit?: EntityDecoderLimitOptions;
47
+ ncr?: EntityDecoderNCROptions;
48
+ }
49
+ export interface EntityDecoder {
50
+ setExternalEntities(map: Record<string, string | {
51
+ regex: RegExp;
52
+ val: string | EntityValFn;
53
+ }>): void;
54
+ addExternalEntity(key: string, value: string): void;
55
+ addInputEntities(map: Record<string, string | {
56
+ regx?: RegExp;
57
+ regex?: RegExp;
58
+ val: string | EntityValFn;
59
+ }>): void;
60
+ reset(): this;
61
+ decode(str: string): string;
62
+ setXmlVersion(version: string): void;
63
+ }
64
+ export declare const EntityDecoderImpl: new (options?: EntityDecoderOptions) => EntityDecoder;
65
+ export {};
@@ -2,6 +2,14 @@
2
2
 
3
3
  Note: Due to some last quick changes on v4, detail of v4.5.3 & v4.5.4 are not updated here. v4.5.4x is the last tag of v4 in github repository. I'm extremely sorry for the confusion
4
4
 
5
+ **5.7.2 / 2026-04-25**
6
+ - allow numerical external entity for backward compatibility
7
+ - fix #705: attributesGroupName working with preserveOrder
8
+ - fix #817: stackoverflow when tag expression is very long
9
+
10
+ **5.7.1 / 2026-04-20**
11
+ - fix typo in CJS typing file
12
+
5
13
  **5.7.0 / 2026-04-17**
6
14
  - Use `@nodable/entities` v2.1.0
7
15
  - breaking changes