@osdk/faux 0.4.0-beta.2 → 0.4.0-beta.3
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/CHANGELOG.md +12 -0
- package/build/browser/FauxFoundry/validateAction.js +85 -13
- package/build/browser/FauxFoundry/validateAction.js.map +1 -1
- package/build/browser/FauxFoundry/validateAction.test.js +522 -0
- package/build/browser/FauxFoundry/validateAction.test.js.map +1 -0
- package/build/cjs/index.cjs +86 -12
- package/build/cjs/index.cjs.map +1 -1
- package/build/esm/FauxFoundry/validateAction.js +85 -13
- package/build/esm/FauxFoundry/validateAction.js.map +1 -1
- package/build/esm/FauxFoundry/validateAction.test.js +522 -0
- package/build/esm/FauxFoundry/validateAction.test.js.map +1 -0
- package/build/types/FauxFoundry/validateAction.d.ts +2 -1
- package/build/types/FauxFoundry/validateAction.d.ts.map +1 -1
- package/build/types/FauxFoundry/validateAction.test.d.ts +1 -0
- package/build/types/FauxFoundry/validateAction.test.d.ts.map +1 -0
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @osdk/shared.test
|
|
2
2
|
|
|
3
|
+
## 0.4.0-beta.3
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 98cdfee: Added more object type validation
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [e7bf02a]
|
|
12
|
+
- @osdk/api@2.6.0-beta.4
|
|
13
|
+
- @osdk/generator-converters@2.6.0-beta.4
|
|
14
|
+
|
|
3
15
|
## 0.4.0-beta.2
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -14,6 +14,40 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
const NUMERIC_LITERAL_BOUNDS = {
|
|
18
|
+
byte: {
|
|
19
|
+
// Java min/max byte bounds
|
|
20
|
+
minimum: -128,
|
|
21
|
+
maximum: 127
|
|
22
|
+
},
|
|
23
|
+
double: {
|
|
24
|
+
// These numbers are smaller than the actual min/max of a java double,
|
|
25
|
+
// but going higher will require using BigInt in our input fields.
|
|
26
|
+
minimum: -Number.MAX_VALUE,
|
|
27
|
+
maximum: Number.MAX_VALUE
|
|
28
|
+
},
|
|
29
|
+
float: {
|
|
30
|
+
// Java min/max float bounds
|
|
31
|
+
minimum: -3.4028235e38,
|
|
32
|
+
maximum: 3.4028235e38
|
|
33
|
+
},
|
|
34
|
+
integer: {
|
|
35
|
+
// Java min/max integer bounds
|
|
36
|
+
minimum: -2147483648,
|
|
37
|
+
maximum: 2147483647
|
|
38
|
+
},
|
|
39
|
+
long: {
|
|
40
|
+
// These numbers are smaller than the actual min/max of a java long,
|
|
41
|
+
// but going higher will require using BigInt in our input fields.
|
|
42
|
+
minimum: Number.MIN_SAFE_INTEGER,
|
|
43
|
+
maximum: Number.MAX_SAFE_INTEGER
|
|
44
|
+
},
|
|
45
|
+
short: {
|
|
46
|
+
// Java min/max short bounds
|
|
47
|
+
minimum: -32768,
|
|
48
|
+
maximum: 32767
|
|
49
|
+
}
|
|
50
|
+
};
|
|
17
51
|
export function validateAction(payload, def, dataStore) {
|
|
18
52
|
const ret = {
|
|
19
53
|
parameters: {},
|
|
@@ -183,7 +217,7 @@ function validateActionParameterType(dataType, paramDef, value, ret, paramKey, d
|
|
|
183
217
|
}
|
|
184
218
|
}
|
|
185
219
|
}
|
|
186
|
-
function matchesOntologyDataType(odt, value) {
|
|
220
|
+
export function matchesOntologyDataType(odt, value) {
|
|
187
221
|
switch (odt.type) {
|
|
188
222
|
case "any":
|
|
189
223
|
return true;
|
|
@@ -194,39 +228,39 @@ function matchesOntologyDataType(odt, value) {
|
|
|
194
228
|
case "boolean":
|
|
195
229
|
return typeof value === "boolean";
|
|
196
230
|
case "byte":
|
|
197
|
-
|
|
231
|
+
return typeof value === "number" && isInBounds(value, NUMERIC_LITERAL_BOUNDS.byte);
|
|
198
232
|
case "cipherText":
|
|
199
|
-
|
|
233
|
+
return isValidCipherText(value);
|
|
200
234
|
case "date":
|
|
201
|
-
|
|
235
|
+
return isValidDateString(value);
|
|
202
236
|
case "decimal":
|
|
203
|
-
|
|
237
|
+
return isValidDecimalString(value);
|
|
204
238
|
case "double":
|
|
205
|
-
return typeof value === "number";
|
|
239
|
+
return typeof value === "number" && isInBounds(value, NUMERIC_LITERAL_BOUNDS.double);
|
|
206
240
|
case "float":
|
|
207
|
-
|
|
241
|
+
return typeof value === "number" && isInBounds(value, NUMERIC_LITERAL_BOUNDS.float);
|
|
208
242
|
case "integer":
|
|
209
|
-
return typeof value === "number" && Number.isInteger(value);
|
|
243
|
+
return typeof value === "number" && Number.isInteger(value) && isInBounds(value, NUMERIC_LITERAL_BOUNDS.integer);
|
|
210
244
|
case "long":
|
|
211
|
-
|
|
245
|
+
return typeof value === "number" && Number.isInteger(value) && isInBounds(value, NUMERIC_LITERAL_BOUNDS.long);
|
|
212
246
|
case "map":
|
|
213
247
|
throw new Error(`matchesOntologyDataType: ${odt.type} not implemented yet.`);
|
|
214
248
|
case "marking":
|
|
215
|
-
|
|
249
|
+
return typeof value === "string";
|
|
216
250
|
case "object":
|
|
217
251
|
return typeof value === "string" || value != null && typeof value === "object" && "$primaryKey" in value;
|
|
218
252
|
case "objectSet":
|
|
219
|
-
|
|
253
|
+
return typeof value === "string" && value.startsWith("ri.") || value != null && typeof value === "object" && "objectSet" in value;
|
|
220
254
|
case "set":
|
|
221
255
|
throw new Error(`matchesOntologyDataType: ${odt.type} not implemented yet.`);
|
|
222
256
|
case "short":
|
|
223
|
-
|
|
257
|
+
return typeof value === "number" && isInBounds(value, NUMERIC_LITERAL_BOUNDS.short);
|
|
224
258
|
case "string":
|
|
225
259
|
return typeof value === "string";
|
|
226
260
|
case "struct":
|
|
227
261
|
throw new Error(`matchesOntologyDataType: ${odt.type} not implemented yet.`);
|
|
228
262
|
case "timestamp":
|
|
229
|
-
|
|
263
|
+
return isValidTimestampString(value);
|
|
230
264
|
case "unsupported":
|
|
231
265
|
throw new Error(`matchesOntologyDataType: ${odt.type} not implemented yet.`);
|
|
232
266
|
default:
|
|
@@ -242,4 +276,42 @@ export function isInterfaceActionParam(value) {
|
|
|
242
276
|
function isPoint(obj) {
|
|
243
277
|
return obj.type === "Point" && Array.isArray(obj.coordinates) && obj.coordinates.length === 2 && typeof obj.coordinates[0] === "number" && typeof obj.coordinates[1] === "number";
|
|
244
278
|
}
|
|
279
|
+
function isInBounds(value, bounds) {
|
|
280
|
+
return bounds.minimum <= value && value <= bounds.maximum;
|
|
281
|
+
}
|
|
282
|
+
function isValidDateString(value) {
|
|
283
|
+
if (typeof value !== "string") {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
const date = new Date(value);
|
|
290
|
+
return !isNaN(date.getTime()) && date.toISOString().startsWith(value);
|
|
291
|
+
}
|
|
292
|
+
function isValidTimestampString(value) {
|
|
293
|
+
return typeof value === "string" && !isNaN(new Date(value).getTime());
|
|
294
|
+
}
|
|
295
|
+
function isValidCipherText(value) {
|
|
296
|
+
if (typeof value !== "string") {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
const parts = value.split("::");
|
|
300
|
+
if (!(isValidCipherAffix(parts, "CIPHER") || isValidCipherAffix(parts, "BELLASO") || isValidCipherAffix(parts, "BELLASO", true))) {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
const channelRid = parts[1];
|
|
304
|
+
const encryptedValue = parts[2];
|
|
305
|
+
return channelRid.startsWith("ri.") && encryptedValue !== "";
|
|
306
|
+
}
|
|
307
|
+
function isValidCipherAffix(parts, affix, prefixOnly = false) {
|
|
308
|
+
const totalParts = prefixOnly ? 3 : 4;
|
|
309
|
+
return parts.length === totalParts && parts[0] === affix && (prefixOnly || parts[3] === affix);
|
|
310
|
+
}
|
|
311
|
+
function isValidDecimalString(value) {
|
|
312
|
+
if (typeof value !== "string") {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
return /^[+-]?(\d+\.?\d*|\.\d+)(E[+-]?\d+)?$/.test(value) && !isNaN(parseFloat(value));
|
|
316
|
+
}
|
|
245
317
|
//# sourceMappingURL=validateAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateAction.js","names":["validateAction","payload","def","dataStore","ret","parameters","submissionCriteria","result","k","v","Object","entries","value","validateActionParameterType","dataType","paramDef","paramKey","required","evaluatedConstraints","baseParam","type","Array","isArray","item","subType","matchesOntologyDataType","isInterfaceActionParam","getObject","objectTypeApiName","primaryKeyValue","isMediaReference","name","fieldType","fields","fieldValue","ontology","getObjectTypeFullMetadata","Error","odt","every","itemType","Number","isInteger","o","mimeType","reference","mediaSetViewItem","mediaSetRid","mediaSetViewRid","mediaItemRid","isPoint","obj","coordinates","length"],"sources":["validateAction.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { MediaReference } from \"@osdk/foundry.core\";\nimport type {\n ActionParameterType,\n ActionParameterV2,\n ActionTypeV2,\n ApplyActionRequestV2,\n BatchApplyActionRequestItem,\n OntologyDataType,\n ParameterEvaluationResult,\n ValidateActionResponseV2,\n} from \"@osdk/foundry.ontologies\";\nimport type { FauxDataStore } from \"./FauxDataStore.js\";\n\nexport function validateAction(\n payload: ApplyActionRequestV2 | BatchApplyActionRequestItem,\n def: ActionTypeV2,\n dataStore: FauxDataStore,\n): ValidateActionResponseV2 {\n const ret: ValidateActionResponseV2 = {\n parameters: {},\n submissionCriteria: [],\n result: \"VALID\",\n };\n for (const [k, v] of Object.entries(def.parameters)) {\n const value = payload.parameters[k];\n validateActionParameterType(v.dataType, v, value, ret, k, dataStore);\n }\n\n return ret;\n}\n\n// So far these all basically return the same thing\n// and can likely be rewritten as a function that return boolean\nfunction validateActionParameterType(\n dataType: ActionParameterType,\n paramDef: ActionParameterV2,\n value: unknown,\n ret: ValidateActionResponseV2,\n paramKey: string,\n dataStore: FauxDataStore,\n) {\n if (paramDef.required && value == null) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n result: \"INVALID\",\n evaluatedConstraints: [],\n required: true,\n };\n return;\n }\n if (!paramDef.required && value == null) {\n return;\n }\n\n const baseParam: ParameterEvaluationResult = {\n result: \"INVALID\",\n evaluatedConstraints: [],\n required: paramDef.required,\n };\n\n switch (dataType.type) {\n case \"array\": {\n if (!Array.isArray(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n for (const item of value) {\n validateActionParameterType(\n dataType.subType,\n paramDef,\n item,\n ret,\n paramKey,\n dataStore,\n );\n }\n return;\n }\n\n case \"attachment\": {\n if (typeof value !== \"string\") {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n }\n\n case \"boolean\":\n case \"date\":\n case \"long\":\n case \"double\":\n case \"integer\":\n case \"marking\":\n case \"objectSet\":\n case \"timestamp\":\n case \"object\":\n case \"string\":\n if (!matchesOntologyDataType(dataType, value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n case \"geohash\":\n if (!(typeof value === \"string\")) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n\n case \"geoshape\":\n if (\n !(typeof value === \"object\"\n && (\"coordinates\" in value! || \"geometries\" in value!\n || \"features\" in value!))\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n case \"interfaceObject\": {\n if (!isInterfaceActionParam(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n } else if (\n dataStore.getObject(\n value.objectTypeApiName,\n value.primaryKeyValue,\n ) == null\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n evaluatedConstraints: [{\n type: \"objectPropertyValue\",\n }],\n };\n }\n return;\n }\n\n case \"mediaReference\": {\n if (!isMediaReference(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n }\n\n case \"vector\": {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n\n case \"struct\": {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n\n for (const { name, fieldType, required } of dataType.fields) {\n const fieldValue = (value as Record<string, unknown>)[name];\n if (\n (required && fieldValue == null)\n || !matchesOntologyDataType(fieldType, fieldValue)\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n\n return;\n }\n }\n\n return;\n }\n\n case \"objectType\": {\n if (\n typeof value !== \"string\"\n || !dataStore.ontology.getObjectTypeFullMetadata(value)\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n\n return;\n }\n\n default: {\n const _assertNever: never = dataType;\n throw new Error(\n `validateDataType: unknown type`,\n );\n }\n }\n}\n\nfunction matchesOntologyDataType(\n odt: OntologyDataType,\n value: unknown,\n): boolean {\n switch (odt.type) {\n case \"any\":\n return true;\n case \"array\":\n return Array.isArray(value)\n && value.every((v) => matchesOntologyDataType(odt.itemType, v));\n case \"binary\":\n throw new Error(`validateDataType: ${odt.type} not implemented yet.`);\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"byte\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"cipherText\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"date\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"decimal\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"double\":\n return typeof value === \"number\";\n\n case \"float\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"integer\":\n return (typeof value === \"number\" && Number.isInteger(value));\n\n case \"long\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"map\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"marking\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"object\":\n return typeof value === \"string\"\n || (value != null && typeof value === \"object\"\n && \"$primaryKey\" in value);\n case \"objectSet\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"set\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"short\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"string\":\n return (typeof value === \"string\");\n\n case \"struct\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"timestamp\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"unsupported\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n default:\n const _assertNever = odt;\n throw new Error(\n `matchesOntologyDataType: ${(odt as any).type} not implemented yet.`,\n );\n }\n}\n\nexport function isMediaReference(o: any): o is MediaReference {\n return typeof o === `object`\n && typeof o.mimeType === \"string\"\n && \"reference\" in o\n && typeof o.reference === \"object\"\n && o.reference.type === \"mediaSetViewItem\"\n && \"mediaSetViewItem\" in o.reference\n && typeof o.reference.mediaSetViewItem === \"object\"\n && typeof o.reference.mediaSetViewItem.mediaSetRid === \"string\"\n && typeof o.reference.mediaSetViewItem.mediaSetViewRid === \"string\"\n && typeof o.reference.mediaSetViewItem.mediaItemRid === \"string\";\n}\n\nexport function isInterfaceActionParam(value: any): value is {\n objectTypeApiName: string;\n primaryKeyValue: string | number | boolean;\n} {\n return (\n typeof value === \"object\"\n && \"objectTypeApiName\" in value\n && typeof value.objectTypeApiName === \"string\"\n && \"primaryKeyValue\" in value\n && (typeof value.primaryKeyValue === \"string\"\n || typeof value.primaryKeyValue === \"number\"\n || typeof value.primaryKeyValue === \"boolean\")\n );\n}\n\nfunction isPoint(obj: any): obj is GeoJSON.Point {\n return obj.type === \"Point\"\n && Array.isArray(obj.coordinates)\n && obj.coordinates.length === 2\n && typeof obj.coordinates[0] === \"number\"\n && typeof obj.coordinates[1] === \"number\";\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"validateAction.js","names":["NUMERIC_LITERAL_BOUNDS","byte","minimum","maximum","double","Number","MAX_VALUE","float","integer","long","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","short","validateAction","payload","def","dataStore","ret","parameters","submissionCriteria","result","k","v","Object","entries","value","validateActionParameterType","dataType","paramDef","paramKey","required","evaluatedConstraints","baseParam","type","Array","isArray","item","subType","matchesOntologyDataType","isInterfaceActionParam","getObject","objectTypeApiName","primaryKeyValue","isMediaReference","name","fieldType","fields","fieldValue","ontology","getObjectTypeFullMetadata","Error","odt","every","itemType","isInBounds","isValidCipherText","isValidDateString","isValidDecimalString","isInteger","startsWith","isValidTimestampString","o","mimeType","reference","mediaSetViewItem","mediaSetRid","mediaSetViewRid","mediaItemRid","isPoint","obj","coordinates","length","bounds","test","date","Date","isNaN","getTime","toISOString","parts","split","isValidCipherAffix","channelRid","encryptedValue","affix","prefixOnly","totalParts","parseFloat"],"sources":["validateAction.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { MediaReference } from \"@osdk/foundry.core\";\nimport type {\n ActionParameterType,\n ActionParameterV2,\n ActionTypeV2,\n ApplyActionRequestV2,\n BatchApplyActionRequestItem,\n OntologyDataType,\n ParameterEvaluationResult,\n ValidateActionResponseV2,\n} from \"@osdk/foundry.ontologies\";\nimport type { FauxDataStore } from \"./FauxDataStore.js\";\n\ninterface Bounds {\n minimum: number;\n maximum: number;\n}\n\nconst NUMERIC_LITERAL_BOUNDS: Record<\n Extract<\n OntologyDataType[\"type\"],\n \"double\" | \"integer\" | \"long\" | \"float\" | \"byte\" | \"short\"\n >,\n Bounds\n> = {\n byte: {\n // Java min/max byte bounds\n minimum: -128,\n maximum: 127,\n },\n double: {\n // These numbers are smaller than the actual min/max of a java double,\n // but going higher will require using BigInt in our input fields.\n minimum: -Number.MAX_VALUE,\n maximum: Number.MAX_VALUE,\n },\n float: {\n // Java min/max float bounds\n minimum: -3.4028235e38,\n maximum: 3.4028235e38,\n },\n integer: {\n // Java min/max integer bounds\n minimum: -2147483648,\n maximum: 2147483647,\n },\n long: {\n // These numbers are smaller than the actual min/max of a java long,\n // but going higher will require using BigInt in our input fields.\n minimum: Number.MIN_SAFE_INTEGER,\n maximum: Number.MAX_SAFE_INTEGER,\n },\n short: {\n // Java min/max short bounds\n minimum: -32768,\n maximum: 32767,\n },\n} as const;\n\nexport function validateAction(\n payload: ApplyActionRequestV2 | BatchApplyActionRequestItem,\n def: ActionTypeV2,\n dataStore: FauxDataStore,\n): ValidateActionResponseV2 {\n const ret: ValidateActionResponseV2 = {\n parameters: {},\n submissionCriteria: [],\n result: \"VALID\",\n };\n for (const [k, v] of Object.entries(def.parameters)) {\n const value = payload.parameters[k];\n validateActionParameterType(v.dataType, v, value, ret, k, dataStore);\n }\n\n return ret;\n}\n\n// So far these all basically return the same thing\n// and can likely be rewritten as a function that return boolean\nfunction validateActionParameterType(\n dataType: ActionParameterType,\n paramDef: ActionParameterV2,\n value: unknown,\n ret: ValidateActionResponseV2,\n paramKey: string,\n dataStore: FauxDataStore,\n) {\n if (paramDef.required && value == null) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n result: \"INVALID\",\n evaluatedConstraints: [],\n required: true,\n };\n return;\n }\n if (!paramDef.required && value == null) {\n return;\n }\n\n const baseParam: ParameterEvaluationResult = {\n result: \"INVALID\",\n evaluatedConstraints: [],\n required: paramDef.required,\n };\n\n switch (dataType.type) {\n case \"array\": {\n if (!Array.isArray(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n for (const item of value) {\n validateActionParameterType(\n dataType.subType,\n paramDef,\n item,\n ret,\n paramKey,\n dataStore,\n );\n }\n return;\n }\n\n case \"attachment\": {\n if (typeof value !== \"string\") {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n }\n\n case \"boolean\":\n case \"date\":\n case \"long\":\n case \"double\":\n case \"integer\":\n case \"marking\":\n case \"objectSet\":\n case \"timestamp\":\n case \"object\":\n case \"string\":\n if (!matchesOntologyDataType(dataType, value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n case \"geohash\":\n if (!(typeof value === \"string\")) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n\n case \"geoshape\":\n if (\n !(typeof value === \"object\"\n && (\"coordinates\" in value! || \"geometries\" in value!\n || \"features\" in value!))\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n case \"interfaceObject\": {\n if (!isInterfaceActionParam(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n } else if (\n dataStore.getObject(\n value.objectTypeApiName,\n value.primaryKeyValue,\n ) == null\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n evaluatedConstraints: [{\n type: \"objectPropertyValue\",\n }],\n };\n }\n return;\n }\n\n case \"mediaReference\": {\n if (!isMediaReference(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n }\n return;\n }\n\n case \"vector\": {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n\n case \"struct\": {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n\n for (const { name, fieldType, required } of dataType.fields) {\n const fieldValue = (value as Record<string, unknown>)[name];\n if (\n (required && fieldValue == null)\n || !matchesOntologyDataType(fieldType, fieldValue)\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n\n return;\n }\n }\n\n return;\n }\n\n case \"objectType\": {\n if (\n typeof value !== \"string\"\n || !dataStore.ontology.getObjectTypeFullMetadata(value)\n ) {\n ret.result = \"INVALID\";\n ret.parameters[paramKey] = {\n ...baseParam,\n };\n return;\n }\n\n return;\n }\n\n default: {\n const _assertNever: never = dataType;\n throw new Error(\n `validateDataType: unknown type`,\n );\n }\n }\n}\n\nexport function matchesOntologyDataType(\n odt: OntologyDataType,\n value: unknown,\n): boolean {\n switch (odt.type) {\n case \"any\":\n return true;\n case \"array\":\n return Array.isArray(value)\n && value.every((v) => matchesOntologyDataType(odt.itemType, v));\n case \"binary\":\n throw new Error(`validateDataType: ${odt.type} not implemented yet.`);\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"byte\":\n return typeof value === \"number\"\n && isInBounds(value, NUMERIC_LITERAL_BOUNDS.byte);\n case \"cipherText\":\n return isValidCipherText(value);\n case \"date\":\n return isValidDateString(value);\n case \"decimal\":\n return isValidDecimalString(value);\n case \"double\":\n return typeof value === \"number\"\n && isInBounds(value, NUMERIC_LITERAL_BOUNDS.double);\n case \"float\":\n return typeof value === \"number\"\n && isInBounds(value, NUMERIC_LITERAL_BOUNDS.float);\n case \"integer\":\n return (typeof value === \"number\" && Number.isInteger(value)\n && isInBounds(value, NUMERIC_LITERAL_BOUNDS.integer));\n case \"long\":\n return (typeof value === \"number\" && Number.isInteger(value)\n && isInBounds(value, NUMERIC_LITERAL_BOUNDS.long));\n case \"map\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"marking\":\n return typeof value === \"string\";\n case \"object\":\n return typeof value === \"string\"\n || (value != null && typeof value === \"object\"\n && \"$primaryKey\" in value);\n case \"objectSet\":\n return typeof value === \"string\" && value.startsWith(\"ri.\")\n || (value != null && typeof value === \"object\"\n && \"objectSet\" in value);\n case \"set\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"short\":\n return typeof value === \"number\"\n && isInBounds(value, NUMERIC_LITERAL_BOUNDS.short);\n case \"string\":\n return (typeof value === \"string\");\n case \"struct\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n case \"timestamp\":\n return isValidTimestampString(value);\n case \"unsupported\":\n throw new Error(\n `matchesOntologyDataType: ${odt.type} not implemented yet.`,\n );\n default:\n const _assertNever = odt;\n throw new Error(\n `matchesOntologyDataType: ${(odt as any).type} not implemented yet.`,\n );\n }\n}\n\nexport function isMediaReference(o: any): o is MediaReference {\n return typeof o === `object`\n && typeof o.mimeType === \"string\"\n && \"reference\" in o\n && typeof o.reference === \"object\"\n && o.reference.type === \"mediaSetViewItem\"\n && \"mediaSetViewItem\" in o.reference\n && typeof o.reference.mediaSetViewItem === \"object\"\n && typeof o.reference.mediaSetViewItem.mediaSetRid === \"string\"\n && typeof o.reference.mediaSetViewItem.mediaSetViewRid === \"string\"\n && typeof o.reference.mediaSetViewItem.mediaItemRid === \"string\";\n}\n\nexport function isInterfaceActionParam(value: any): value is {\n objectTypeApiName: string;\n primaryKeyValue: string | number | boolean;\n} {\n return (\n typeof value === \"object\"\n && \"objectTypeApiName\" in value\n && typeof value.objectTypeApiName === \"string\"\n && \"primaryKeyValue\" in value\n && (typeof value.primaryKeyValue === \"string\"\n || typeof value.primaryKeyValue === \"number\"\n || typeof value.primaryKeyValue === \"boolean\")\n );\n}\n\nfunction isPoint(obj: any): obj is GeoJSON.Point {\n return obj.type === \"Point\"\n && Array.isArray(obj.coordinates)\n && obj.coordinates.length === 2\n && typeof obj.coordinates[0] === \"number\"\n && typeof obj.coordinates[1] === \"number\";\n}\n\nfunction isInBounds(\n value: number,\n bounds: { minimum: number; maximum: number },\n) {\n return bounds.minimum <= value && value <= bounds.maximum;\n}\n\nfunction isValidDateString(value: unknown): boolean {\n if (typeof value !== \"string\") {\n return false;\n }\n\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(value)) {\n return false;\n }\n const date = new Date(value);\n return !isNaN(date.getTime()) && date.toISOString().startsWith(value);\n}\n\nfunction isValidTimestampString(value: unknown): boolean {\n return typeof value === \"string\" && !isNaN(new Date(value).getTime());\n}\n\nfunction isValidCipherText(value: unknown): boolean {\n if (typeof value !== \"string\") {\n return false;\n }\n\n const parts = value.split(\"::\");\n\n if (\n !(isValidCipherAffix(parts, \"CIPHER\")\n || isValidCipherAffix(parts, \"BELLASO\")\n || isValidCipherAffix(parts, \"BELLASO\", true))\n ) {\n return false;\n }\n\n const channelRid = parts[1];\n const encryptedValue = parts[2];\n\n return channelRid.startsWith(\"ri.\") && encryptedValue !== \"\";\n}\n\nfunction isValidCipherAffix(\n parts: string[],\n affix: \"BELLASO\" | \"CIPHER\",\n prefixOnly: boolean = false,\n): boolean {\n const totalParts = prefixOnly ? 3 : 4;\n\n return parts.length === totalParts && parts[0] === affix\n && (prefixOnly || parts[3] === affix);\n}\n\nfunction isValidDecimalString(value: unknown): boolean {\n if (typeof value !== \"string\") {\n return false;\n }\n\n const decimalRegex = /^[+-]?(\\d+\\.?\\d*|\\.\\d+)(E[+-]?\\d+)?$/;\n return decimalRegex.test(value) && !isNaN(parseFloat(value));\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoBA,MAAMA,sBAML,GAAG;EACFC,IAAI,EAAE;IACJ;IACAC,OAAO,EAAE,CAAC,GAAG;IACbC,OAAO,EAAE;EACX,CAAC;EACDC,MAAM,EAAE;IACN;IACA;IACAF,OAAO,EAAE,CAACG,MAAM,CAACC,SAAS;IAC1BH,OAAO,EAAEE,MAAM,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACL;IACAL,OAAO,EAAE,CAAC,YAAY;IACtBC,OAAO,EAAE;EACX,CAAC;EACDK,OAAO,EAAE;IACP;IACAN,OAAO,EAAE,CAAC,UAAU;IACpBC,OAAO,EAAE;EACX,CAAC;EACDM,IAAI,EAAE;IACJ;IACA;IACAP,OAAO,EAAEG,MAAM,CAACK,gBAAgB;IAChCP,OAAO,EAAEE,MAAM,CAACM;EAClB,CAAC;EACDC,KAAK,EAAE;IACL;IACAV,OAAO,EAAE,CAAC,KAAK;IACfC,OAAO,EAAE;EACX;AACF,CAAU;AAEV,OAAO,SAASU,cAAcA,CAC5BC,OAA2D,EAC3DC,GAAiB,EACjBC,SAAwB,EACE;EAC1B,MAAMC,GAA6B,GAAG;IACpCC,UAAU,EAAE,CAAC,CAAC;IACdC,kBAAkB,EAAE,EAAE;IACtBC,MAAM,EAAE;EACV,CAAC;EACD,KAAK,MAAM,CAACC,CAAC,EAAEC,CAAC,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACT,GAAG,CAACG,UAAU,CAAC,EAAE;IACnD,MAAMO,KAAK,GAAGX,OAAO,CAACI,UAAU,CAACG,CAAC,CAAC;IACnCK,2BAA2B,CAACJ,CAAC,CAACK,QAAQ,EAAEL,CAAC,EAAEG,KAAK,EAAER,GAAG,EAAEI,CAAC,EAAEL,SAAS,CAAC;EACtE;EAEA,OAAOC,GAAG;AACZ;;AAEA;AACA;AACA,SAASS,2BAA2BA,CAClCC,QAA6B,EAC7BC,QAA2B,EAC3BH,KAAc,EACdR,GAA6B,EAC7BY,QAAgB,EAChBb,SAAwB,EACxB;EACA,IAAIY,QAAQ,CAACE,QAAQ,IAAIL,KAAK,IAAI,IAAI,EAAE;IACtCR,GAAG,CAACG,MAAM,GAAG,SAAS;IACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;MACzBT,MAAM,EAAE,SAAS;MACjBW,oBAAoB,EAAE,EAAE;MACxBD,QAAQ,EAAE;IACZ,CAAC;IACD;EACF;EACA,IAAI,CAACF,QAAQ,CAACE,QAAQ,IAAIL,KAAK,IAAI,IAAI,EAAE;IACvC;EACF;EAEA,MAAMO,SAAoC,GAAG;IAC3CZ,MAAM,EAAE,SAAS;IACjBW,oBAAoB,EAAE,EAAE;IACxBD,QAAQ,EAAEF,QAAQ,CAACE;EACrB,CAAC;EAED,QAAQH,QAAQ,CAACM,IAAI;IACnB,KAAK,OAAO;MAAE;QACZ,IAAI,CAACC,KAAK,CAACC,OAAO,CAACV,KAAK,CAAC,EAAE;UACzBR,GAAG,CAACG,MAAM,GAAG,SAAS;UACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;YACzB,GAAGG;UACL,CAAC;UACD;QACF;QACA,KAAK,MAAMI,IAAI,IAAIX,KAAK,EAAE;UACxBC,2BAA2B,CACzBC,QAAQ,CAACU,OAAO,EAChBT,QAAQ,EACRQ,IAAI,EACJnB,GAAG,EACHY,QAAQ,EACRb,SACF,CAAC;QACH;QACA;MACF;IAEA,KAAK,YAAY;MAAE;QACjB,IAAI,OAAOS,KAAK,KAAK,QAAQ,EAAE;UAC7BR,GAAG,CAACG,MAAM,GAAG,SAAS;UACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;YACzB,GAAGG;UACL,CAAC;QACH;QACA;MACF;IAEA,KAAK,SAAS;IACd,KAAK,MAAM;IACX,KAAK,MAAM;IACX,KAAK,QAAQ;IACb,KAAK,SAAS;IACd,KAAK,SAAS;IACd,KAAK,WAAW;IAChB,KAAK,WAAW;IAChB,KAAK,QAAQ;IACb,KAAK,QAAQ;MACX,IAAI,CAACM,uBAAuB,CAACX,QAAQ,EAAEF,KAAK,CAAC,EAAE;QAC7CR,GAAG,CAACG,MAAM,GAAG,SAAS;QACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;UACzB,GAAGG;QACL,CAAC;MACH;MACA;IACF,KAAK,SAAS;MACZ,IAAI,EAAE,OAAOP,KAAK,KAAK,QAAQ,CAAC,EAAE;QAChCR,GAAG,CAACG,MAAM,GAAG,SAAS;QACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;UACzB,GAAGG;QACL,CAAC;MACH;MACA;IAEF,KAAK,UAAU;MACb,IACE,EAAE,OAAOP,KAAK,KAAK,QAAQ,KACrB,aAAa,IAAIA,KAAM,IAAI,YAAY,IAAIA,KAAM,IAChD,UAAU,IAAIA,KAAM,CAAC,CAAC,EAC7B;QACAR,GAAG,CAACG,MAAM,GAAG,SAAS;QACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;UACzB,GAAGG;QACL,CAAC;MACH;MACA;IACF,KAAK,iBAAiB;MAAE;QACtB,IAAI,CAACO,sBAAsB,CAACd,KAAK,CAAC,EAAE;UAClCR,GAAG,CAACG,MAAM,GAAG,SAAS;UACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;YACzB,GAAGG;UACL,CAAC;QACH,CAAC,MAAM,IACLhB,SAAS,CAACwB,SAAS,CACjBf,KAAK,CAACgB,iBAAiB,EACvBhB,KAAK,CAACiB,eACR,CAAC,IAAI,IAAI,EACT;UACAzB,GAAG,CAACG,MAAM,GAAG,SAAS;UACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;YACzB,GAAGG,SAAS;YACZD,oBAAoB,EAAE,CAAC;cACrBE,IAAI,EAAE;YACR,CAAC;UACH,CAAC;QACH;QACA;MACF;IAEA,KAAK,gBAAgB;MAAE;QACrB,IAAI,CAACU,gBAAgB,CAAClB,KAAK,CAAC,EAAE;UAC5BR,GAAG,CAACG,MAAM,GAAG,SAAS;UACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;YACzB,GAAGG;UACL,CAAC;QACH;QACA;MACF;IAEA,KAAK,QAAQ;MAAE;QACbf,GAAG,CAACG,MAAM,GAAG,SAAS;QACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;UACzB,GAAGG;QACL,CAAC;QACD;MACF;IAEA,KAAK,QAAQ;MAAE;QACb,IAAI,CAACP,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIS,KAAK,CAACC,OAAO,CAACV,KAAK,CAAC,EAAE;UAC/DR,GAAG,CAACG,MAAM,GAAG,SAAS;UACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;YACzB,GAAGG;UACL,CAAC;UACD;QACF;QAEA,KAAK,MAAM;UAAEY,IAAI;UAAEC,SAAS;UAAEf;QAAS,CAAC,IAAIH,QAAQ,CAACmB,MAAM,EAAE;UAC3D,MAAMC,UAAU,GAAItB,KAAK,CAA6BmB,IAAI,CAAC;UAC3D,IACGd,QAAQ,IAAIiB,UAAU,IAAI,IAAI,IAC5B,CAACT,uBAAuB,CAACO,SAAS,EAAEE,UAAU,CAAC,EAClD;YACA9B,GAAG,CAACG,MAAM,GAAG,SAAS;YACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;cACzB,GAAGG;YACL,CAAC;YAED;UACF;QACF;QAEA;MACF;IAEA,KAAK,YAAY;MAAE;QACjB,IACE,OAAOP,KAAK,KAAK,QAAQ,IACtB,CAACT,SAAS,CAACgC,QAAQ,CAACC,yBAAyB,CAACxB,KAAK,CAAC,EACvD;UACAR,GAAG,CAACG,MAAM,GAAG,SAAS;UACtBH,GAAG,CAACC,UAAU,CAACW,QAAQ,CAAC,GAAG;YACzB,GAAGG;UACL,CAAC;UACD;QACF;QAEA;MACF;IAEA;MAAS;QAEP,MAAM,IAAIkB,KAAK,CACb,gCACF,CAAC;MACH;EACF;AACF;AAEA,OAAO,SAASZ,uBAAuBA,CACrCa,GAAqB,EACrB1B,KAAc,EACL;EACT,QAAQ0B,GAAG,CAAClB,IAAI;IACd,KAAK,KAAK;MACR,OAAO,IAAI;IACb,KAAK,OAAO;MACV,OAAOC,KAAK,CAACC,OAAO,CAACV,KAAK,CAAC,IACtBA,KAAK,CAAC2B,KAAK,CAAE9B,CAAC,IAAKgB,uBAAuB,CAACa,GAAG,CAACE,QAAQ,EAAE/B,CAAC,CAAC,CAAC;IACnE,KAAK,QAAQ;MACX,MAAM,IAAI4B,KAAK,CAAC,qBAAqBC,GAAG,CAAClB,IAAI,uBAAuB,CAAC;IACvE,KAAK,SAAS;MACZ,OAAO,OAAOR,KAAK,KAAK,SAAS;IACnC,KAAK,MAAM;MACT,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAC3B6B,UAAU,CAAC7B,KAAK,EAAEzB,sBAAsB,CAACC,IAAI,CAAC;IACrD,KAAK,YAAY;MACf,OAAOsD,iBAAiB,CAAC9B,KAAK,CAAC;IACjC,KAAK,MAAM;MACT,OAAO+B,iBAAiB,CAAC/B,KAAK,CAAC;IACjC,KAAK,SAAS;MACZ,OAAOgC,oBAAoB,CAAChC,KAAK,CAAC;IACpC,KAAK,QAAQ;MACX,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAC3B6B,UAAU,CAAC7B,KAAK,EAAEzB,sBAAsB,CAACI,MAAM,CAAC;IACvD,KAAK,OAAO;MACV,OAAO,OAAOqB,KAAK,KAAK,QAAQ,IAC3B6B,UAAU,CAAC7B,KAAK,EAAEzB,sBAAsB,CAACO,KAAK,CAAC;IACtD,KAAK,SAAS;MACZ,OAAQ,OAAOkB,KAAK,KAAK,QAAQ,IAAIpB,MAAM,CAACqD,SAAS,CAACjC,KAAK,CAAC,IACvD6B,UAAU,CAAC7B,KAAK,EAAEzB,sBAAsB,CAACQ,OAAO,CAAC;IACxD,KAAK,MAAM;MACT,OAAQ,OAAOiB,KAAK,KAAK,QAAQ,IAAIpB,MAAM,CAACqD,SAAS,CAACjC,KAAK,CAAC,IACvD6B,UAAU,CAAC7B,KAAK,EAAEzB,sBAAsB,CAACS,IAAI,CAAC;IACrD,KAAK,KAAK;MACR,MAAM,IAAIyC,KAAK,CACb,4BAA4BC,GAAG,CAAClB,IAAI,uBACtC,CAAC;IACH,KAAK,SAAS;MACZ,OAAO,OAAOR,KAAK,KAAK,QAAQ;IAClC,KAAK,QAAQ;MACX,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAC1BA,KAAK,IAAI,IAAI,IAAI,OAAOA,KAAK,KAAK,QAAQ,IACzC,aAAa,IAAIA,KAAM;IAChC,KAAK,WAAW;MACd,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACkC,UAAU,CAAC,KAAK,CAAC,IACrDlC,KAAK,IAAI,IAAI,IAAI,OAAOA,KAAK,KAAK,QAAQ,IACzC,WAAW,IAAIA,KAAM;IAC9B,KAAK,KAAK;MACR,MAAM,IAAIyB,KAAK,CACb,4BAA4BC,GAAG,CAAClB,IAAI,uBACtC,CAAC;IACH,KAAK,OAAO;MACV,OAAO,OAAOR,KAAK,KAAK,QAAQ,IAC3B6B,UAAU,CAAC7B,KAAK,EAAEzB,sBAAsB,CAACY,KAAK,CAAC;IACtD,KAAK,QAAQ;MACX,OAAQ,OAAOa,KAAK,KAAK,QAAQ;IACnC,KAAK,QAAQ;MACX,MAAM,IAAIyB,KAAK,CACb,4BAA4BC,GAAG,CAAClB,IAAI,uBACtC,CAAC;IACH,KAAK,WAAW;MACd,OAAO2B,sBAAsB,CAACnC,KAAK,CAAC;IACtC,KAAK,aAAa;MAChB,MAAM,IAAIyB,KAAK,CACb,4BAA4BC,GAAG,CAAClB,IAAI,uBACtC,CAAC;IACH;MAEE,MAAM,IAAIiB,KAAK,CACb,4BAA6BC,GAAG,CAASlB,IAAI,uBAC/C,CAAC;EACL;AACF;AAEA,OAAO,SAASU,gBAAgBA,CAACkB,CAAM,EAAuB;EAC5D,OAAO,OAAOA,CAAC,KAAK,QAAQ,IACvB,OAAOA,CAAC,CAACC,QAAQ,KAAK,QAAQ,IAC9B,WAAW,IAAID,CAAC,IAChB,OAAOA,CAAC,CAACE,SAAS,KAAK,QAAQ,IAC/BF,CAAC,CAACE,SAAS,CAAC9B,IAAI,KAAK,kBAAkB,IACvC,kBAAkB,IAAI4B,CAAC,CAACE,SAAS,IACjC,OAAOF,CAAC,CAACE,SAAS,CAACC,gBAAgB,KAAK,QAAQ,IAChD,OAAOH,CAAC,CAACE,SAAS,CAACC,gBAAgB,CAACC,WAAW,KAAK,QAAQ,IAC5D,OAAOJ,CAAC,CAACE,SAAS,CAACC,gBAAgB,CAACE,eAAe,KAAK,QAAQ,IAChE,OAAOL,CAAC,CAACE,SAAS,CAACC,gBAAgB,CAACG,YAAY,KAAK,QAAQ;AACpE;AAEA,OAAO,SAAS5B,sBAAsBA,CAACd,KAAU,EAG/C;EACA,OACE,OAAOA,KAAK,KAAK,QAAQ,IACtB,mBAAmB,IAAIA,KAAK,IAC5B,OAAOA,KAAK,CAACgB,iBAAiB,KAAK,QAAQ,IAC3C,iBAAiB,IAAIhB,KAAK,KACzB,OAAOA,KAAK,CAACiB,eAAe,KAAK,QAAQ,IACxC,OAAOjB,KAAK,CAACiB,eAAe,KAAK,QAAQ,IACzC,OAAOjB,KAAK,CAACiB,eAAe,KAAK,SAAS,CAAC;AAEpD;AAEA,SAAS0B,OAAOA,CAACC,GAAQ,EAAwB;EAC/C,OAAOA,GAAG,CAACpC,IAAI,KAAK,OAAO,IACtBC,KAAK,CAACC,OAAO,CAACkC,GAAG,CAACC,WAAW,CAAC,IAC9BD,GAAG,CAACC,WAAW,CAACC,MAAM,KAAK,CAAC,IAC5B,OAAOF,GAAG,CAACC,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ,IACtC,OAAOD,GAAG,CAACC,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ;AAC7C;AAEA,SAAShB,UAAUA,CACjB7B,KAAa,EACb+C,MAA4C,EAC5C;EACA,OAAOA,MAAM,CAACtE,OAAO,IAAIuB,KAAK,IAAIA,KAAK,IAAI+C,MAAM,CAACrE,OAAO;AAC3D;AAEA,SAASqD,iBAAiBA,CAAC/B,KAAc,EAAW;EAClD,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,KAAK;EACd;EAGA,IAAI,CADc,qBAAqB,CACxBgD,IAAI,CAAChD,KAAK,CAAC,EAAE;IAC1B,OAAO,KAAK;EACd;EACA,MAAMiD,IAAI,GAAG,IAAIC,IAAI,CAAClD,KAAK,CAAC;EAC5B,OAAO,CAACmD,KAAK,CAACF,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,IAAIH,IAAI,CAACI,WAAW,CAAC,CAAC,CAACnB,UAAU,CAAClC,KAAK,CAAC;AACvE;AAEA,SAASmC,sBAAsBA,CAACnC,KAAc,EAAW;EACvD,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACmD,KAAK,CAAC,IAAID,IAAI,CAAClD,KAAK,CAAC,CAACoD,OAAO,CAAC,CAAC,CAAC;AACvE;AAEA,SAAStB,iBAAiBA,CAAC9B,KAAc,EAAW;EAClD,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,KAAK;EACd;EAEA,MAAMsD,KAAK,GAAGtD,KAAK,CAACuD,KAAK,CAAC,IAAI,CAAC;EAE/B,IACE,EAAEC,kBAAkB,CAACF,KAAK,EAAE,QAAQ,CAAC,IAChCE,kBAAkB,CAACF,KAAK,EAAE,SAAS,CAAC,IACpCE,kBAAkB,CAACF,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,EAChD;IACA,OAAO,KAAK;EACd;EAEA,MAAMG,UAAU,GAAGH,KAAK,CAAC,CAAC,CAAC;EAC3B,MAAMI,cAAc,GAAGJ,KAAK,CAAC,CAAC,CAAC;EAE/B,OAAOG,UAAU,CAACvB,UAAU,CAAC,KAAK,CAAC,IAAIwB,cAAc,KAAK,EAAE;AAC9D;AAEA,SAASF,kBAAkBA,CACzBF,KAAe,EACfK,KAA2B,EAC3BC,UAAmB,GAAG,KAAK,EAClB;EACT,MAAMC,UAAU,GAAGD,UAAU,GAAG,CAAC,GAAG,CAAC;EAErC,OAAON,KAAK,CAACR,MAAM,KAAKe,UAAU,IAAIP,KAAK,CAAC,CAAC,CAAC,KAAKK,KAAK,KAClDC,UAAU,IAAIN,KAAK,CAAC,CAAC,CAAC,KAAKK,KAAK,CAAC;AACzC;AAEA,SAAS3B,oBAAoBA,CAAChC,KAAc,EAAW;EACrD,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,KAAK;EACd;EAGA,OADqB,sCAAsC,CACvCgD,IAAI,CAAChD,KAAK,CAAC,IAAI,CAACmD,KAAK,CAACW,UAAU,CAAC9D,KAAK,CAAC,CAAC;AAC9D","ignoreList":[]}
|