@cdklabs/cdk-ecs-codedeploy 0.0.433 → 0.0.434
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/.jsii +3 -3
- package/.jsii.tabl.json +1 -1
- package/lib/api-canary/index.js +1 -1
- package/lib/ecs-appspec/index.js +1 -1
- package/lib/ecs-deployment/index.js +1 -1
- package/lib/ecs-patterns/application-load-balanced-codedeployed-fargate-service.js +1 -1
- package/node_modules/@aws-sdk/client-codedeploy/package.json +15 -15
- package/node_modules/@aws-sdk/core/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
- package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +3 -3
- package/node_modules/@aws-sdk/nested-clients/package.json +14 -14
- package/node_modules/@aws-sdk/region-config-resolver/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/index.js +21 -11
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-parser.js +5 -1
- package/node_modules/@aws-sdk/xml-builder/dist-es/escape-attribute.js +8 -1
- package/node_modules/@aws-sdk/xml-builder/dist-es/escape-element.js +13 -10
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +5 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/CHANGELOG.md +40 -4
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/README.md +8 -7
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxbuilder.min.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxbuilder.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.cjs +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.d.cts +82 -20
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.min.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxparser.min.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxvalidator.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/pem.d.cts +148 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/package.json +4 -3
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/fxp.d.ts +75 -19
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/pem.d.ts +135 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/util.js +18 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js +37 -18
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js +76 -5
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +298 -116
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js +2 -2
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/node2json.js +65 -15
- package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/CHANGELOG.md +9 -2
- package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/package.json +1 -1
- package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/strnum.js +12 -6
- package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/tests/strnum_test.js +3 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/strnum/tests/temp.js +8 -0
- package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
- package/node_modules/@smithy/config-resolver/dist-cjs/index.js +12 -0
- package/node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseDualstackEndpointConfigOptions.js +5 -0
- package/node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseFipsEndpointConfigOptions.js +5 -0
- package/node_modules/@smithy/config-resolver/dist-types/endpointsConfig/NodeUseDualstackEndpointConfigOptions.d.ts +6 -0
- package/node_modules/@smithy/config-resolver/dist-types/endpointsConfig/NodeUseFipsEndpointConfigOptions.d.ts +6 -0
- package/node_modules/@smithy/config-resolver/dist-types/ts3.4/endpointsConfig/NodeUseDualstackEndpointConfigOptions.d.ts +6 -0
- package/node_modules/@smithy/config-resolver/dist-types/ts3.4/endpointsConfig/NodeUseFipsEndpointConfigOptions.d.ts +6 -0
- package/node_modules/@smithy/config-resolver/package.json +1 -1
- package/node_modules/@smithy/middleware-endpoint/dist-types/resolveEndpointConfig.d.ts +2 -2
- package/node_modules/@smithy/middleware-endpoint/dist-types/ts3.4/resolveEndpointConfig.d.ts +2 -2
- package/node_modules/@smithy/middleware-endpoint/package.json +1 -1
- package/node_modules/@smithy/middleware-retry/package.json +2 -2
- package/node_modules/@smithy/smithy-client/package.json +2 -2
- package/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
- package/node_modules/@smithy/util-defaults-mode-node/package.json +3 -3
- package/node_modules/path-expression-matcher/README.md +98 -13
- package/node_modules/path-expression-matcher/lib/pem.cjs +1 -1
- package/node_modules/path-expression-matcher/lib/pem.d.cts +188 -0
- package/node_modules/path-expression-matcher/lib/pem.min.js +1 -1
- package/node_modules/path-expression-matcher/lib/pem.min.js.map +1 -1
- package/node_modules/path-expression-matcher/package.json +2 -2
- package/node_modules/path-expression-matcher/src/Matcher.js +84 -0
- package/node_modules/path-expression-matcher/src/index.d.ts +152 -0
- package/package.json +4 -4
- /package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/.github/SECURITY.md +0 -0
- /package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/.vscode/launch.json +0 -0
- /package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/LICENSE +0 -0
- /package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/README.md +0 -0
- /package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/algo.stflow +0 -0
- /package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/tests/infinity_test.js +0 -0
|
@@ -7,8 +7,9 @@ export default class DocTypeReader {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
readDocType(xmlData, i) {
|
|
10
|
-
|
|
11
10
|
const entities = Object.create(null);
|
|
11
|
+
let entityCount = 0;
|
|
12
|
+
|
|
12
13
|
if (xmlData[i + 3] === 'O' &&
|
|
13
14
|
xmlData[i + 4] === 'C' &&
|
|
14
15
|
xmlData[i + 5] === 'T' &&
|
|
@@ -26,11 +27,20 @@ export default class DocTypeReader {
|
|
|
26
27
|
let entityName, val;
|
|
27
28
|
[entityName, val, i] = this.readEntityExp(xmlData, i + 1, this.suppressValidationErr);
|
|
28
29
|
if (val.indexOf("&") === -1) { //Parameter entities are not supported
|
|
29
|
-
|
|
30
|
+
if (this.options.enabled !== false &&
|
|
31
|
+
this.options.maxEntityCount != null &&
|
|
32
|
+
entityCount >= this.options.maxEntityCount) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Entity count (${entityCount + 1}) exceeds maximum allowed (${this.options.maxEntityCount})`
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
//const escaped = entityName.replace(/[.\-+*:]/g, '\\.');
|
|
38
|
+
const escaped = entityName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
30
39
|
entities[entityName] = {
|
|
31
40
|
regx: RegExp(`&${escaped};`, "g"),
|
|
32
41
|
val: val
|
|
33
42
|
};
|
|
43
|
+
entityCount++;
|
|
34
44
|
}
|
|
35
45
|
}
|
|
36
46
|
else if (hasBody && hasSeq(xmlData, "!ELEMENT", i)) {
|
|
@@ -90,11 +100,12 @@ export default class DocTypeReader {
|
|
|
90
100
|
i = skipWhitespace(xmlData, i);
|
|
91
101
|
|
|
92
102
|
// Read entity name
|
|
93
|
-
|
|
103
|
+
const startIndex = i;
|
|
94
104
|
while (i < xmlData.length && !/\s/.test(xmlData[i]) && xmlData[i] !== '"' && xmlData[i] !== "'") {
|
|
95
|
-
entityName += xmlData[i];
|
|
96
105
|
i++;
|
|
97
106
|
}
|
|
107
|
+
let entityName = xmlData.substring(startIndex, i);
|
|
108
|
+
|
|
98
109
|
validateEntityName(entityName);
|
|
99
110
|
|
|
100
111
|
// Skip whitespace after entity name
|
|
@@ -115,7 +126,7 @@ export default class DocTypeReader {
|
|
|
115
126
|
|
|
116
127
|
// Validate entity size
|
|
117
128
|
if (this.options.enabled !== false &&
|
|
118
|
-
this.options.maxEntitySize &&
|
|
129
|
+
this.options.maxEntitySize != null &&
|
|
119
130
|
entityValue.length > this.options.maxEntitySize) {
|
|
120
131
|
throw new Error(
|
|
121
132
|
`Entity "${entityName}" size (${entityValue.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`
|
|
@@ -131,11 +142,13 @@ export default class DocTypeReader {
|
|
|
131
142
|
i = skipWhitespace(xmlData, i);
|
|
132
143
|
|
|
133
144
|
// Read notation name
|
|
134
|
-
|
|
145
|
+
|
|
146
|
+
const startIndex = i;
|
|
135
147
|
while (i < xmlData.length && !/\s/.test(xmlData[i])) {
|
|
136
|
-
notationName += xmlData[i];
|
|
137
148
|
i++;
|
|
138
149
|
}
|
|
150
|
+
let notationName = xmlData.substring(startIndex, i);
|
|
151
|
+
|
|
139
152
|
!this.suppressValidationErr && validateEntityName(notationName);
|
|
140
153
|
|
|
141
154
|
// Skip whitespace after notation name
|
|
@@ -185,10 +198,11 @@ export default class DocTypeReader {
|
|
|
185
198
|
}
|
|
186
199
|
i++;
|
|
187
200
|
|
|
201
|
+
const startIndex = i;
|
|
188
202
|
while (i < xmlData.length && xmlData[i] !== startChar) {
|
|
189
|
-
identifierVal += xmlData[i];
|
|
190
203
|
i++;
|
|
191
204
|
}
|
|
205
|
+
identifierVal = xmlData.substring(startIndex, i);
|
|
192
206
|
|
|
193
207
|
if (xmlData[i] !== startChar) {
|
|
194
208
|
throw new Error(`Unterminated ${type} value`);
|
|
@@ -208,11 +222,11 @@ export default class DocTypeReader {
|
|
|
208
222
|
i = skipWhitespace(xmlData, i);
|
|
209
223
|
|
|
210
224
|
// Read element name
|
|
211
|
-
|
|
225
|
+
const startIndex = i;
|
|
212
226
|
while (i < xmlData.length && !/\s/.test(xmlData[i])) {
|
|
213
|
-
elementName += xmlData[i];
|
|
214
227
|
i++;
|
|
215
228
|
}
|
|
229
|
+
let elementName = xmlData.substring(startIndex, i);
|
|
216
230
|
|
|
217
231
|
// Validate element name
|
|
218
232
|
if (!this.suppressValidationErr && !isName(elementName)) {
|
|
@@ -229,10 +243,12 @@ export default class DocTypeReader {
|
|
|
229
243
|
i++; // Move past '('
|
|
230
244
|
|
|
231
245
|
// Read content model
|
|
246
|
+
const startIndex = i;
|
|
232
247
|
while (i < xmlData.length && xmlData[i] !== ")") {
|
|
233
|
-
contentModel += xmlData[i];
|
|
234
248
|
i++;
|
|
235
249
|
}
|
|
250
|
+
contentModel = xmlData.substring(startIndex, i);
|
|
251
|
+
|
|
236
252
|
if (xmlData[i] !== ")") {
|
|
237
253
|
throw new Error("Unterminated content model");
|
|
238
254
|
}
|
|
@@ -253,11 +269,11 @@ export default class DocTypeReader {
|
|
|
253
269
|
i = skipWhitespace(xmlData, i);
|
|
254
270
|
|
|
255
271
|
// Read element name
|
|
256
|
-
let
|
|
272
|
+
let startIndex = i;
|
|
257
273
|
while (i < xmlData.length && !/\s/.test(xmlData[i])) {
|
|
258
|
-
elementName += xmlData[i];
|
|
259
274
|
i++;
|
|
260
275
|
}
|
|
276
|
+
let elementName = xmlData.substring(startIndex, i);
|
|
261
277
|
|
|
262
278
|
// Validate element name
|
|
263
279
|
validateEntityName(elementName)
|
|
@@ -266,11 +282,11 @@ export default class DocTypeReader {
|
|
|
266
282
|
i = skipWhitespace(xmlData, i);
|
|
267
283
|
|
|
268
284
|
// Read attribute name
|
|
269
|
-
|
|
285
|
+
startIndex = i;
|
|
270
286
|
while (i < xmlData.length && !/\s/.test(xmlData[i])) {
|
|
271
|
-
attributeName += xmlData[i];
|
|
272
287
|
i++;
|
|
273
288
|
}
|
|
289
|
+
let attributeName = xmlData.substring(startIndex, i);
|
|
274
290
|
|
|
275
291
|
// Validate attribute name
|
|
276
292
|
if (!validateEntityName(attributeName)) {
|
|
@@ -298,11 +314,13 @@ export default class DocTypeReader {
|
|
|
298
314
|
// Read the list of allowed notations
|
|
299
315
|
let allowedNotations = [];
|
|
300
316
|
while (i < xmlData.length && xmlData[i] !== ")") {
|
|
301
|
-
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
const startIndex = i;
|
|
302
320
|
while (i < xmlData.length && xmlData[i] !== "|" && xmlData[i] !== ")") {
|
|
303
|
-
notation += xmlData[i];
|
|
304
321
|
i++;
|
|
305
322
|
}
|
|
323
|
+
let notation = xmlData.substring(startIndex, i);
|
|
306
324
|
|
|
307
325
|
// Validate notation name
|
|
308
326
|
notation = notation.trim();
|
|
@@ -328,10 +346,11 @@ export default class DocTypeReader {
|
|
|
328
346
|
attributeType += " (" + allowedNotations.join("|") + ")";
|
|
329
347
|
} else {
|
|
330
348
|
// Handle simple types (e.g., CDATA, ID, IDREF, etc.)
|
|
349
|
+
const startIndex = i;
|
|
331
350
|
while (i < xmlData.length && !/\s/.test(xmlData[i])) {
|
|
332
|
-
attributeType += xmlData[i];
|
|
333
351
|
i++;
|
|
334
352
|
}
|
|
353
|
+
attributeType += xmlData.substring(startIndex, i);
|
|
335
354
|
|
|
336
355
|
// Validate simple attribute type
|
|
337
356
|
const validTypes = ["CDATA", "ID", "IDREF", "IDREFS", "ENTITY", "ENTITIES", "NMTOKEN", "NMTOKENS"];
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import { DANGEROUS_PROPERTY_NAMES, criticalProperties } from "../util.js";
|
|
2
|
+
|
|
3
|
+
const defaultOnDangerousProperty = (name) => {
|
|
4
|
+
if (DANGEROUS_PROPERTY_NAMES.includes(name)) {
|
|
5
|
+
return "__" + name;
|
|
6
|
+
}
|
|
7
|
+
return name;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
|
|
1
11
|
export const defaultOptions = {
|
|
2
12
|
preserveOrder: false,
|
|
3
13
|
attributeNamePrefix: '@_',
|
|
@@ -40,8 +50,36 @@ export const defaultOptions = {
|
|
|
40
50
|
captureMetaData: false,
|
|
41
51
|
maxNestedTags: 100,
|
|
42
52
|
strictReservedNames: true,
|
|
53
|
+
jPath: true, // if true, pass jPath string to callbacks; if false, pass matcher instance
|
|
54
|
+
onDangerousProperty: defaultOnDangerousProperty
|
|
43
55
|
};
|
|
44
56
|
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Validates that a property name is safe to use
|
|
60
|
+
* @param {string} propertyName - The property name to validate
|
|
61
|
+
* @param {string} optionName - The option field name (for error message)
|
|
62
|
+
* @throws {Error} If property name is dangerous
|
|
63
|
+
*/
|
|
64
|
+
function validatePropertyName(propertyName, optionName) {
|
|
65
|
+
if (typeof propertyName !== 'string') {
|
|
66
|
+
return; // Only validate string property names
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const normalized = propertyName.toLowerCase();
|
|
70
|
+
if (DANGEROUS_PROPERTY_NAMES.some(dangerous => normalized === dangerous.toLowerCase())) {
|
|
71
|
+
throw new Error(
|
|
72
|
+
`[SECURITY] Invalid ${optionName}: "${propertyName}" is a reserved JavaScript keyword that could cause prototype pollution`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (criticalProperties.some(dangerous => normalized === dangerous.toLowerCase())) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
`[SECURITY] Invalid ${optionName}: "${propertyName}" is a reserved JavaScript keyword that could cause prototype pollution`
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
45
83
|
/**
|
|
46
84
|
* Normalizes processEntities option for backward compatibility
|
|
47
85
|
* @param {boolean|object} value
|
|
@@ -56,6 +94,7 @@ function normalizeProcessEntities(value) {
|
|
|
56
94
|
maxExpansionDepth: 10,
|
|
57
95
|
maxTotalExpansions: 1000,
|
|
58
96
|
maxExpandedLength: 100000,
|
|
97
|
+
maxEntityCount: 100,
|
|
59
98
|
allowedTags: null,
|
|
60
99
|
tagFilter: null
|
|
61
100
|
};
|
|
@@ -64,11 +103,12 @@ function normalizeProcessEntities(value) {
|
|
|
64
103
|
// Object config - merge with defaults
|
|
65
104
|
if (typeof value === 'object' && value !== null) {
|
|
66
105
|
return {
|
|
67
|
-
enabled: value.enabled !== false,
|
|
68
|
-
maxEntitySize: value.maxEntitySize ?? 10000,
|
|
69
|
-
maxExpansionDepth: value.maxExpansionDepth ?? 10,
|
|
70
|
-
maxTotalExpansions: value.maxTotalExpansions ?? 1000,
|
|
71
|
-
maxExpandedLength: value.maxExpandedLength ?? 100000,
|
|
106
|
+
enabled: value.enabled !== false,
|
|
107
|
+
maxEntitySize: Math.max(1, value.maxEntitySize ?? 10000),
|
|
108
|
+
maxExpansionDepth: Math.max(1, value.maxExpansionDepth ?? 10),
|
|
109
|
+
maxTotalExpansions: Math.max(1, value.maxTotalExpansions ?? 1000),
|
|
110
|
+
maxExpandedLength: Math.max(1, value.maxExpandedLength ?? 100000),
|
|
111
|
+
maxEntityCount: Math.max(1, value.maxEntityCount ?? 100),
|
|
72
112
|
allowedTags: value.allowedTags ?? null,
|
|
73
113
|
tagFilter: value.tagFilter ?? null
|
|
74
114
|
};
|
|
@@ -81,8 +121,39 @@ function normalizeProcessEntities(value) {
|
|
|
81
121
|
export const buildOptions = function (options) {
|
|
82
122
|
const built = Object.assign({}, defaultOptions, options);
|
|
83
123
|
|
|
124
|
+
// Validate property names to prevent prototype pollution
|
|
125
|
+
const propertyNameOptions = [
|
|
126
|
+
{ value: built.attributeNamePrefix, name: 'attributeNamePrefix' },
|
|
127
|
+
{ value: built.attributesGroupName, name: 'attributesGroupName' },
|
|
128
|
+
{ value: built.textNodeName, name: 'textNodeName' },
|
|
129
|
+
{ value: built.cdataPropName, name: 'cdataPropName' },
|
|
130
|
+
{ value: built.commentPropName, name: 'commentPropName' }
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
for (const { value, name } of propertyNameOptions) {
|
|
134
|
+
if (value) {
|
|
135
|
+
validatePropertyName(value, name);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (built.onDangerousProperty === null) {
|
|
140
|
+
built.onDangerousProperty = defaultOnDangerousProperty;
|
|
141
|
+
}
|
|
142
|
+
|
|
84
143
|
// Always normalize processEntities for backward compatibility and validation
|
|
85
144
|
built.processEntities = normalizeProcessEntities(built.processEntities);
|
|
145
|
+
|
|
146
|
+
// Convert old-style stopNodes for backward compatibility
|
|
147
|
+
if (built.stopNodes && Array.isArray(built.stopNodes)) {
|
|
148
|
+
built.stopNodes = built.stopNodes.map(node => {
|
|
149
|
+
if (typeof node === 'string' && node.startsWith('*.')) {
|
|
150
|
+
// Old syntax: *.tagname meant "tagname anywhere"
|
|
151
|
+
// Convert to new syntax: ..tagname
|
|
152
|
+
return '..' + node.substring(2);
|
|
153
|
+
}
|
|
154
|
+
return node;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
86
157
|
//console.debug(built.processEntities)
|
|
87
158
|
return built;
|
|
88
159
|
};
|