@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.
@@ -0,0 +1,522 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { describe, expect, it } from "vitest";
18
+ import { isInterfaceActionParam, isMediaReference, matchesOntologyDataType } from "./validateAction.js";
19
+ describe("matchesOntologyDataType", () => {
20
+ describe("any type", () => {
21
+ it("should return true for any value", () => {
22
+ const dataType = {
23
+ type: "any"
24
+ };
25
+ expect(matchesOntologyDataType(dataType, undefined)).toBe(true);
26
+ expect(matchesOntologyDataType(dataType, null)).toBe(true);
27
+ expect(matchesOntologyDataType(dataType, "string")).toBe(true);
28
+ expect(matchesOntologyDataType(dataType, 123)).toBe(true);
29
+ expect(matchesOntologyDataType(dataType, true)).toBe(true);
30
+ expect(matchesOntologyDataType(dataType, {})).toBe(true);
31
+ expect(matchesOntologyDataType(dataType, [])).toBe(true);
32
+ });
33
+ });
34
+ describe("boolean type", () => {
35
+ const dataType = {
36
+ type: "boolean"
37
+ };
38
+ it("should return true for boolean values", () => {
39
+ expect(matchesOntologyDataType(dataType, true)).toBe(true);
40
+ expect(matchesOntologyDataType(dataType, false)).toBe(true);
41
+ });
42
+ it("should return false for non-boolean values", () => {
43
+ expect(matchesOntologyDataType(dataType, "true")).toBe(false);
44
+ expect(matchesOntologyDataType(dataType, 1)).toBe(false);
45
+ expect(matchesOntologyDataType(dataType, 0)).toBe(false);
46
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
47
+ expect(matchesOntologyDataType(dataType, undefined)).toBe(false);
48
+ });
49
+ });
50
+ describe("string type", () => {
51
+ const dataType = {
52
+ type: "string"
53
+ };
54
+ it("should return true for string values", () => {
55
+ expect(matchesOntologyDataType(dataType, "")).toBe(true);
56
+ expect(matchesOntologyDataType(dataType, "hello")).toBe(true);
57
+ expect(matchesOntologyDataType(dataType, "123")).toBe(true);
58
+ });
59
+ it("should return false for non-string values", () => {
60
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
61
+ expect(matchesOntologyDataType(dataType, true)).toBe(false);
62
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
63
+ expect(matchesOntologyDataType(dataType, undefined)).toBe(false);
64
+ expect(matchesOntologyDataType(dataType, {})).toBe(false);
65
+ });
66
+ });
67
+ describe("integer type", () => {
68
+ const dataType = {
69
+ type: "integer"
70
+ };
71
+ it("should return true for valid integer values within bounds", () => {
72
+ expect(matchesOntologyDataType(dataType, 0)).toBe(true);
73
+ expect(matchesOntologyDataType(dataType, 1)).toBe(true);
74
+ expect(matchesOntologyDataType(dataType, -1)).toBe(true);
75
+ expect(matchesOntologyDataType(dataType, 2147483647)).toBe(true); // max int
76
+ expect(matchesOntologyDataType(dataType, -2147483648)).toBe(true); // min int
77
+ });
78
+ it("should return false for non-integer values", () => {
79
+ expect(matchesOntologyDataType(dataType, 1.5)).toBe(false);
80
+ expect(matchesOntologyDataType(dataType, "123")).toBe(false);
81
+ expect(matchesOntologyDataType(dataType, true)).toBe(false);
82
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
83
+ });
84
+ it("should return false for integers out of bounds", () => {
85
+ expect(matchesOntologyDataType(dataType, 2147483648)).toBe(false); // max + 1
86
+ expect(matchesOntologyDataType(dataType, -2147483649)).toBe(false); // min - 1
87
+ });
88
+ });
89
+ describe("long type", () => {
90
+ const dataType = {
91
+ type: "long"
92
+ };
93
+ it("should return true for valid long values within safe integer bounds", () => {
94
+ expect(matchesOntologyDataType(dataType, 0)).toBe(true);
95
+ expect(matchesOntologyDataType(dataType, Number.MAX_SAFE_INTEGER)).toBe(true);
96
+ expect(matchesOntologyDataType(dataType, Number.MIN_SAFE_INTEGER)).toBe(true);
97
+ });
98
+ it("should return false for non-integer values", () => {
99
+ expect(matchesOntologyDataType(dataType, 1.5)).toBe(false);
100
+ expect(matchesOntologyDataType(dataType, "123")).toBe(false);
101
+ });
102
+ it("should return false for values outside safe integer range", () => {
103
+ expect(matchesOntologyDataType(dataType, Number.MAX_SAFE_INTEGER + 1)).toBe(false);
104
+ expect(matchesOntologyDataType(dataType, Number.MIN_SAFE_INTEGER - 1)).toBe(false);
105
+ });
106
+ });
107
+ describe("double type", () => {
108
+ const dataType = {
109
+ type: "double"
110
+ };
111
+ it("should return true for valid double values", () => {
112
+ expect(matchesOntologyDataType(dataType, 0)).toBe(true);
113
+ expect(matchesOntologyDataType(dataType, 1.5)).toBe(true);
114
+ expect(matchesOntologyDataType(dataType, -1.5)).toBe(true);
115
+ expect(matchesOntologyDataType(dataType, Number.MAX_VALUE)).toBe(true);
116
+ expect(matchesOntologyDataType(dataType, -Number.MAX_VALUE)).toBe(true);
117
+ });
118
+ it("should return false for non-number values", () => {
119
+ expect(matchesOntologyDataType(dataType, "123")).toBe(false);
120
+ expect(matchesOntologyDataType(dataType, true)).toBe(false);
121
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
122
+ });
123
+ it("should return false for Infinity", () => {
124
+ expect(matchesOntologyDataType(dataType, Infinity)).toBe(false);
125
+ expect(matchesOntologyDataType(dataType, -Infinity)).toBe(false);
126
+ });
127
+ });
128
+ describe("float type", () => {
129
+ const dataType = {
130
+ type: "float"
131
+ };
132
+ it("should return true for valid float values within bounds", () => {
133
+ expect(matchesOntologyDataType(dataType, 0)).toBe(true);
134
+ expect(matchesOntologyDataType(dataType, 1.5)).toBe(true);
135
+ expect(matchesOntologyDataType(dataType, -1.5)).toBe(true);
136
+ expect(matchesOntologyDataType(dataType, 3.4028235e38)).toBe(true);
137
+ expect(matchesOntologyDataType(dataType, -3.4028235e38)).toBe(true);
138
+ });
139
+ it("should return false for values outside float bounds", () => {
140
+ expect(matchesOntologyDataType(dataType, 3.5e38)).toBe(false);
141
+ expect(matchesOntologyDataType(dataType, -3.5e38)).toBe(false);
142
+ });
143
+ });
144
+ describe("byte type", () => {
145
+ const dataType = {
146
+ type: "byte"
147
+ };
148
+ it("should return true for valid byte values", () => {
149
+ expect(matchesOntologyDataType(dataType, 0)).toBe(true);
150
+ expect(matchesOntologyDataType(dataType, 127)).toBe(true);
151
+ expect(matchesOntologyDataType(dataType, -128)).toBe(true);
152
+ });
153
+ it("should return false for values outside byte bounds", () => {
154
+ expect(matchesOntologyDataType(dataType, 128)).toBe(false);
155
+ expect(matchesOntologyDataType(dataType, -129)).toBe(false);
156
+ });
157
+ it("should return false for non-integer values", () => {
158
+ expect(matchesOntologyDataType(dataType, 1.5)).toBe(true); // Note: isInBounds doesn't check for integers for byte
159
+ });
160
+ });
161
+ describe("short type", () => {
162
+ const dataType = {
163
+ type: "short"
164
+ };
165
+ it("should return true for valid short values", () => {
166
+ expect(matchesOntologyDataType(dataType, 0)).toBe(true);
167
+ expect(matchesOntologyDataType(dataType, 32767)).toBe(true);
168
+ expect(matchesOntologyDataType(dataType, -32768)).toBe(true);
169
+ });
170
+ it("should return false for values outside short bounds", () => {
171
+ expect(matchesOntologyDataType(dataType, 32768)).toBe(false);
172
+ expect(matchesOntologyDataType(dataType, -32769)).toBe(false);
173
+ });
174
+ });
175
+ describe("date type", () => {
176
+ const dataType = {
177
+ type: "date"
178
+ };
179
+ it("should return true for valid date strings", () => {
180
+ expect(matchesOntologyDataType(dataType, "2025-01-15")).toBe(true);
181
+ expect(matchesOntologyDataType(dataType, "2000-12-31")).toBe(true);
182
+ expect(matchesOntologyDataType(dataType, "1970-01-01")).toBe(true);
183
+ });
184
+ it("should return false for invalid date strings", () => {
185
+ expect(matchesOntologyDataType(dataType, "2025-13-01")).toBe(false); // invalid month
186
+ expect(matchesOntologyDataType(dataType, "2025-01-32")).toBe(false); // invalid day
187
+ expect(matchesOntologyDataType(dataType, "2025/01/15")).toBe(false); // wrong format
188
+ expect(matchesOntologyDataType(dataType, "01-15-2025")).toBe(false); // wrong format
189
+ expect(matchesOntologyDataType(dataType, "not a date")).toBe(false);
190
+ });
191
+ it("should return false for non-string values", () => {
192
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
193
+ expect(matchesOntologyDataType(dataType, new Date())).toBe(false);
194
+ });
195
+ });
196
+ describe("timestamp type", () => {
197
+ const dataType = {
198
+ type: "timestamp"
199
+ };
200
+ it("should return true for valid timestamp strings", () => {
201
+ expect(matchesOntologyDataType(dataType, "2025-01-15T10:30:00Z")).toBe(true);
202
+ expect(matchesOntologyDataType(dataType, "2025-01-15T10:30:00.123Z")).toBe(true);
203
+ expect(matchesOntologyDataType(dataType, "2025-01-15")).toBe(true);
204
+ });
205
+ it("should return false for invalid timestamp strings", () => {
206
+ expect(matchesOntologyDataType(dataType, "not a timestamp")).toBe(false);
207
+ expect(matchesOntologyDataType(dataType, "")).toBe(false);
208
+ });
209
+ it("should return false for non-string values", () => {
210
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
211
+ expect(matchesOntologyDataType(dataType, new Date())).toBe(false);
212
+ });
213
+ });
214
+ describe("decimal type", () => {
215
+ const dataType = {
216
+ type: "decimal"
217
+ };
218
+ it("should return true for valid decimal strings", () => {
219
+ expect(matchesOntologyDataType(dataType, "0")).toBe(true);
220
+ expect(matchesOntologyDataType(dataType, "123")).toBe(true);
221
+ expect(matchesOntologyDataType(dataType, "123.456")).toBe(true);
222
+ expect(matchesOntologyDataType(dataType, "-123.456")).toBe(true);
223
+ expect(matchesOntologyDataType(dataType, "+123.456")).toBe(true);
224
+ expect(matchesOntologyDataType(dataType, ".5")).toBe(true);
225
+ expect(matchesOntologyDataType(dataType, "-.5")).toBe(true);
226
+ expect(matchesOntologyDataType(dataType, "123.")).toBe(true);
227
+ });
228
+ it("should return true for valid decimal strings with scientific notation", () => {
229
+ expect(matchesOntologyDataType(dataType, "1E10")).toBe(true);
230
+ expect(matchesOntologyDataType(dataType, "1.5E10")).toBe(true);
231
+ expect(matchesOntologyDataType(dataType, "1.5E+10")).toBe(true);
232
+ expect(matchesOntologyDataType(dataType, "1.5E-10")).toBe(true);
233
+ expect(matchesOntologyDataType(dataType, "-1.5E10")).toBe(true);
234
+ });
235
+ it("should return false for invalid decimal strings", () => {
236
+ expect(matchesOntologyDataType(dataType, "abc")).toBe(false);
237
+ expect(matchesOntologyDataType(dataType, "12.34.56")).toBe(false);
238
+ expect(matchesOntologyDataType(dataType, "1.2.3E10")).toBe(false);
239
+ expect(matchesOntologyDataType(dataType, "")).toBe(false);
240
+ expect(matchesOntologyDataType(dataType, "E10")).toBe(false);
241
+ expect(matchesOntologyDataType(dataType, "1E")).toBe(false);
242
+ expect(matchesOntologyDataType(dataType, "1e10")).toBe(false);
243
+ });
244
+ it("should return false for non-string values", () => {
245
+ expect(matchesOntologyDataType(dataType, 123.456)).toBe(false);
246
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
247
+ expect(matchesOntologyDataType(dataType, true)).toBe(false);
248
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
249
+ expect(matchesOntologyDataType(dataType, undefined)).toBe(false);
250
+ expect(matchesOntologyDataType(dataType, {})).toBe(false);
251
+ });
252
+ });
253
+ describe("marking type", () => {
254
+ const dataType = {
255
+ type: "marking"
256
+ };
257
+ it("should return true for string values", () => {
258
+ expect(matchesOntologyDataType(dataType, "marking1")).toBe(true);
259
+ expect(matchesOntologyDataType(dataType, "")).toBe(true);
260
+ });
261
+ it("should return false for non-string values", () => {
262
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
263
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
264
+ });
265
+ });
266
+ describe("object type", () => {
267
+ const dataType = {
268
+ type: "object",
269
+ objectApiName: "Employee",
270
+ objectTypeApiName: "Employee"
271
+ };
272
+ it("should return true for string (RID) values", () => {
273
+ expect(matchesOntologyDataType(dataType, "ri.object.123")).toBe(true);
274
+ expect(matchesOntologyDataType(dataType, "someId")).toBe(true);
275
+ });
276
+ it("should return true for objects with $primaryKey", () => {
277
+ expect(matchesOntologyDataType(dataType, {
278
+ $primaryKey: "123"
279
+ })).toBe(true);
280
+ expect(matchesOntologyDataType(dataType, {
281
+ $primaryKey: "123",
282
+ name: "test"
283
+ })).toBe(true);
284
+ });
285
+ it("should return false for objects without $primaryKey", () => {
286
+ expect(matchesOntologyDataType(dataType, {
287
+ name: "test"
288
+ })).toBe(false);
289
+ expect(matchesOntologyDataType(dataType, {})).toBe(false);
290
+ });
291
+ it("should return false for other value types", () => {
292
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
293
+ expect(matchesOntologyDataType(dataType, true)).toBe(false);
294
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
295
+ });
296
+ });
297
+ describe("objectSet type", () => {
298
+ const dataType = {
299
+ type: "objectSet"
300
+ };
301
+ it("should return true for RID strings", () => {
302
+ expect(matchesOntologyDataType(dataType, "ri.objectSet.123")).toBe(true);
303
+ expect(matchesOntologyDataType(dataType, "ri.anything.456")).toBe(true);
304
+ });
305
+ it("should return true for objects with objectSet property", () => {
306
+ expect(matchesOntologyDataType(dataType, {
307
+ objectSet: "definition"
308
+ })).toBe(true);
309
+ });
310
+ it("should return false for non-RID strings", () => {
311
+ expect(matchesOntologyDataType(dataType, "not a rid")).toBe(false);
312
+ expect(matchesOntologyDataType(dataType, "objectSet")).toBe(false);
313
+ });
314
+ it("should return false for objects without objectSet property", () => {
315
+ expect(matchesOntologyDataType(dataType, {
316
+ name: "test"
317
+ })).toBe(false);
318
+ });
319
+ });
320
+ describe("array type", () => {
321
+ it("should return true for arrays with matching item types", () => {
322
+ const dataType = {
323
+ type: "array",
324
+ itemType: {
325
+ type: "string"
326
+ }
327
+ };
328
+ expect(matchesOntologyDataType(dataType, [])).toBe(true);
329
+ expect(matchesOntologyDataType(dataType, ["a", "b", "c"])).toBe(true);
330
+ });
331
+ it("should return false for arrays with non-matching item types", () => {
332
+ const dataType = {
333
+ type: "array",
334
+ itemType: {
335
+ type: "string"
336
+ }
337
+ };
338
+ expect(matchesOntologyDataType(dataType, [1, 2, 3])).toBe(false);
339
+ expect(matchesOntologyDataType(dataType, ["a", 1, "c"])).toBe(false);
340
+ });
341
+ it("should work with nested arrays", () => {
342
+ const dataType = {
343
+ type: "array",
344
+ itemType: {
345
+ type: "array",
346
+ itemType: {
347
+ type: "integer"
348
+ }
349
+ }
350
+ };
351
+ expect(matchesOntologyDataType(dataType, [[1, 2], [3, 4]])).toBe(true);
352
+ expect(matchesOntologyDataType(dataType, [[1, 2], ["a", "b"]])).toBe(false);
353
+ });
354
+ it("should return false for non-array values", () => {
355
+ const dataType = {
356
+ type: "array",
357
+ itemType: {
358
+ type: "string"
359
+ }
360
+ };
361
+ expect(matchesOntologyDataType(dataType, "not an array")).toBe(false);
362
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
363
+ expect(matchesOntologyDataType(dataType, {
364
+ length: 0
365
+ })).toBe(false);
366
+ });
367
+ });
368
+ describe("cipherText type", () => {
369
+ const dataType = {
370
+ type: "cipherText"
371
+ };
372
+ it("should return true for valid CIPHER format", () => {
373
+ expect(matchesOntologyDataType(dataType, "CIPHER::ri.channel.123::encrypted::CIPHER")).toBe(true);
374
+ });
375
+ it("should return true for valid BELLASO format", () => {
376
+ expect(matchesOntologyDataType(dataType, "BELLASO::ri.channel.123::encrypted::BELLASO")).toBe(true);
377
+ });
378
+ it("should return true for valid BELLASO format without suffix", () => {
379
+ expect(matchesOntologyDataType(dataType, "BELLASO::ri.channel.123::encrypted")).toBe(true);
380
+ });
381
+ it("should return false for invalid cipher format", () => {
382
+ expect(matchesOntologyDataType(dataType, "CIPHER::channel::data")).toBe(false); // missing ri. prefix
383
+ expect(matchesOntologyDataType(dataType, "CIPHER::ri.channel.123::")).toBe(false); // empty encrypted value
384
+ expect(matchesOntologyDataType(dataType, "INVALID::ri.channel.123::data::INVALID")).toBe(false);
385
+ });
386
+ it("should return false for non-string values", () => {
387
+ expect(matchesOntologyDataType(dataType, 123)).toBe(false);
388
+ expect(matchesOntologyDataType(dataType, null)).toBe(false);
389
+ });
390
+ });
391
+ describe("binary type", () => {
392
+ const dataType = {
393
+ type: "binary"
394
+ };
395
+ it("should throw an error", () => {
396
+ expect(() => matchesOntologyDataType(dataType, "data")).toThrow("validateDataType: binary not implemented yet.");
397
+ });
398
+ });
399
+ describe("map type", () => {
400
+ const dataType = {
401
+ type: "map",
402
+ keyType: {
403
+ type: "string"
404
+ },
405
+ valueType: {
406
+ type: "integer"
407
+ }
408
+ };
409
+ it("should throw an error", () => {
410
+ expect(() => matchesOntologyDataType(dataType, {})).toThrow("matchesOntologyDataType: map not implemented yet.");
411
+ });
412
+ });
413
+ describe("set type", () => {
414
+ const dataType = {
415
+ type: "set",
416
+ itemType: {
417
+ type: "string"
418
+ }
419
+ };
420
+ it("should throw an error", () => {
421
+ expect(() => matchesOntologyDataType(dataType, new Set())).toThrow("matchesOntologyDataType: set not implemented yet.");
422
+ });
423
+ });
424
+ describe("struct type", () => {
425
+ const dataType = {
426
+ type: "struct",
427
+ fields: []
428
+ };
429
+ it("should throw an error", () => {
430
+ expect(() => matchesOntologyDataType(dataType, {})).toThrow("matchesOntologyDataType: struct not implemented yet.");
431
+ });
432
+ });
433
+ describe("unsupported type", () => {
434
+ const dataType = {
435
+ type: "unsupported",
436
+ unsupportedType: "someCustomType"
437
+ };
438
+ it("should throw an error", () => {
439
+ expect(() => matchesOntologyDataType(dataType, "anything")).toThrow("matchesOntologyDataType: unsupported not implemented yet.");
440
+ });
441
+ });
442
+ });
443
+ describe("isMediaReference", () => {
444
+ it("should return true for valid MediaReference objects", () => {
445
+ expect(isMediaReference({
446
+ mimeType: "image/png",
447
+ reference: {
448
+ type: "mediaSetViewItem",
449
+ mediaSetViewItem: {
450
+ mediaSetRid: "ri.mediaset.123",
451
+ mediaSetViewRid: "ri.mediasetview.456",
452
+ mediaItemRid: "ri.mediaitem.789"
453
+ }
454
+ }
455
+ })).toBe(true);
456
+ });
457
+ it("should return false for objects missing required properties", () => {
458
+ expect(isMediaReference({
459
+ mimeType: "image/png"
460
+ })).toBe(false);
461
+ expect(isMediaReference({
462
+ reference: {
463
+ type: "mediaSetViewItem",
464
+ mediaSetViewItem: {}
465
+ }
466
+ })).toBe(false);
467
+ });
468
+ it("should return false for objects with incorrect reference type", () => {
469
+ expect(isMediaReference({
470
+ mimeType: "image/png",
471
+ reference: {
472
+ type: "wrongType",
473
+ mediaSetViewItem: {
474
+ mediaSetRid: "ri.mediaset.123",
475
+ mediaSetViewRid: "ri.mediasetview.456",
476
+ mediaItemRid: "ri.mediaitem.789"
477
+ }
478
+ }
479
+ })).toBe(false);
480
+ });
481
+ });
482
+ describe("isInterfaceActionParam", () => {
483
+ it("should return true for valid interface action params with string primary key", () => {
484
+ expect(isInterfaceActionParam({
485
+ objectTypeApiName: "Employee",
486
+ primaryKeyValue: "emp-123"
487
+ })).toBe(true);
488
+ });
489
+ it("should return true for valid interface action params with number primary key", () => {
490
+ expect(isInterfaceActionParam({
491
+ objectTypeApiName: "Employee",
492
+ primaryKeyValue: 123
493
+ })).toBe(true);
494
+ });
495
+ it("should return true for valid interface action params with boolean primary key", () => {
496
+ expect(isInterfaceActionParam({
497
+ objectTypeApiName: "Employee",
498
+ primaryKeyValue: true
499
+ })).toBe(true);
500
+ });
501
+ it("should return false for objects missing objectTypeApiName", () => {
502
+ expect(isInterfaceActionParam({
503
+ primaryKeyValue: "123"
504
+ })).toBe(false);
505
+ });
506
+ it("should return false for objects missing primaryKeyValue", () => {
507
+ expect(isInterfaceActionParam({
508
+ objectTypeApiName: "Employee"
509
+ })).toBe(false);
510
+ });
511
+ it("should return false for objects with invalid primaryKeyValue type", () => {
512
+ expect(isInterfaceActionParam({
513
+ objectTypeApiName: "Employee",
514
+ primaryKeyValue: {}
515
+ })).toBe(false);
516
+ expect(isInterfaceActionParam({
517
+ objectTypeApiName: "Employee",
518
+ primaryKeyValue: []
519
+ })).toBe(false);
520
+ });
521
+ });
522
+ //# sourceMappingURL=validateAction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateAction.test.js","names":["describe","expect","it","isInterfaceActionParam","isMediaReference","matchesOntologyDataType","dataType","type","undefined","toBe","Number","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","MAX_VALUE","Infinity","Date","objectApiName","objectTypeApiName","$primaryKey","name","objectSet","itemType","length","toThrow","keyType","valueType","Set","fields","unsupportedType","mimeType","reference","mediaSetViewItem","mediaSetRid","mediaSetViewRid","mediaItemRid","primaryKeyValue"],"sources":["validateAction.test.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 { OntologyDataType } from \"@osdk/foundry.ontologies\";\nimport { describe, expect, it } from \"vitest\";\nimport {\n isInterfaceActionParam,\n isMediaReference,\n matchesOntologyDataType,\n} from \"./validateAction.js\";\n\ndescribe(\"matchesOntologyDataType\", () => {\n describe(\"any type\", () => {\n it(\"should return true for any value\", () => {\n const dataType: OntologyDataType = { type: \"any\" };\n\n expect(matchesOntologyDataType(dataType, undefined)).toBe(true);\n expect(matchesOntologyDataType(dataType, null)).toBe(true);\n expect(matchesOntologyDataType(dataType, \"string\")).toBe(true);\n expect(matchesOntologyDataType(dataType, 123)).toBe(true);\n expect(matchesOntologyDataType(dataType, true)).toBe(true);\n expect(matchesOntologyDataType(dataType, {})).toBe(true);\n expect(matchesOntologyDataType(dataType, [])).toBe(true);\n });\n });\n\n describe(\"boolean type\", () => {\n const dataType: OntologyDataType = { type: \"boolean\" };\n\n it(\"should return true for boolean values\", () => {\n expect(matchesOntologyDataType(dataType, true)).toBe(true);\n expect(matchesOntologyDataType(dataType, false)).toBe(true);\n });\n\n it(\"should return false for non-boolean values\", () => {\n expect(matchesOntologyDataType(dataType, \"true\")).toBe(false);\n expect(matchesOntologyDataType(dataType, 1)).toBe(false);\n expect(matchesOntologyDataType(dataType, 0)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n expect(matchesOntologyDataType(dataType, undefined)).toBe(false);\n });\n });\n\n describe(\"string type\", () => {\n const dataType: OntologyDataType = { type: \"string\" };\n\n it(\"should return true for string values\", () => {\n expect(matchesOntologyDataType(dataType, \"\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"hello\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"123\")).toBe(true);\n });\n\n it(\"should return false for non-string values\", () => {\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, true)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n expect(matchesOntologyDataType(dataType, undefined)).toBe(false);\n expect(matchesOntologyDataType(dataType, {})).toBe(false);\n });\n });\n\n describe(\"integer type\", () => {\n const dataType: OntologyDataType = { type: \"integer\" };\n\n it(\"should return true for valid integer values within bounds\", () => {\n expect(matchesOntologyDataType(dataType, 0)).toBe(true);\n expect(matchesOntologyDataType(dataType, 1)).toBe(true);\n expect(matchesOntologyDataType(dataType, -1)).toBe(true);\n expect(matchesOntologyDataType(dataType, 2147483647)).toBe(true); // max int\n expect(matchesOntologyDataType(dataType, -2147483648)).toBe(true); // min int\n });\n\n it(\"should return false for non-integer values\", () => {\n expect(matchesOntologyDataType(dataType, 1.5)).toBe(false);\n expect(matchesOntologyDataType(dataType, \"123\")).toBe(false);\n expect(matchesOntologyDataType(dataType, true)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n });\n\n it(\"should return false for integers out of bounds\", () => {\n expect(matchesOntologyDataType(dataType, 2147483648)).toBe(false); // max + 1\n expect(matchesOntologyDataType(dataType, -2147483649)).toBe(false); // min - 1\n });\n });\n\n describe(\"long type\", () => {\n const dataType: OntologyDataType = { type: \"long\" };\n\n it(\"should return true for valid long values within safe integer bounds\", () => {\n expect(matchesOntologyDataType(dataType, 0)).toBe(true);\n expect(matchesOntologyDataType(dataType, Number.MAX_SAFE_INTEGER)).toBe(\n true,\n );\n expect(matchesOntologyDataType(dataType, Number.MIN_SAFE_INTEGER)).toBe(\n true,\n );\n });\n\n it(\"should return false for non-integer values\", () => {\n expect(matchesOntologyDataType(dataType, 1.5)).toBe(false);\n expect(matchesOntologyDataType(dataType, \"123\")).toBe(false);\n });\n\n it(\"should return false for values outside safe integer range\", () => {\n expect(\n matchesOntologyDataType(dataType, Number.MAX_SAFE_INTEGER + 1),\n ).toBe(false);\n expect(\n matchesOntologyDataType(dataType, Number.MIN_SAFE_INTEGER - 1),\n ).toBe(false);\n });\n });\n\n describe(\"double type\", () => {\n const dataType: OntologyDataType = { type: \"double\" };\n\n it(\"should return true for valid double values\", () => {\n expect(matchesOntologyDataType(dataType, 0)).toBe(true);\n expect(matchesOntologyDataType(dataType, 1.5)).toBe(true);\n expect(matchesOntologyDataType(dataType, -1.5)).toBe(true);\n expect(matchesOntologyDataType(dataType, Number.MAX_VALUE)).toBe(true);\n expect(matchesOntologyDataType(dataType, -Number.MAX_VALUE)).toBe(true);\n });\n\n it(\"should return false for non-number values\", () => {\n expect(matchesOntologyDataType(dataType, \"123\")).toBe(false);\n expect(matchesOntologyDataType(dataType, true)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n });\n\n it(\"should return false for Infinity\", () => {\n expect(matchesOntologyDataType(dataType, Infinity)).toBe(false);\n expect(matchesOntologyDataType(dataType, -Infinity)).toBe(false);\n });\n });\n\n describe(\"float type\", () => {\n const dataType: OntologyDataType = { type: \"float\" };\n\n it(\"should return true for valid float values within bounds\", () => {\n expect(matchesOntologyDataType(dataType, 0)).toBe(true);\n expect(matchesOntologyDataType(dataType, 1.5)).toBe(true);\n expect(matchesOntologyDataType(dataType, -1.5)).toBe(true);\n expect(matchesOntologyDataType(dataType, 3.4028235e38)).toBe(true);\n expect(matchesOntologyDataType(dataType, -3.4028235e38)).toBe(true);\n });\n\n it(\"should return false for values outside float bounds\", () => {\n expect(matchesOntologyDataType(dataType, 3.5e38)).toBe(false);\n expect(matchesOntologyDataType(dataType, -3.5e38)).toBe(false);\n });\n });\n\n describe(\"byte type\", () => {\n const dataType: OntologyDataType = { type: \"byte\" };\n\n it(\"should return true for valid byte values\", () => {\n expect(matchesOntologyDataType(dataType, 0)).toBe(true);\n expect(matchesOntologyDataType(dataType, 127)).toBe(true);\n expect(matchesOntologyDataType(dataType, -128)).toBe(true);\n });\n\n it(\"should return false for values outside byte bounds\", () => {\n expect(matchesOntologyDataType(dataType, 128)).toBe(false);\n expect(matchesOntologyDataType(dataType, -129)).toBe(false);\n });\n\n it(\"should return false for non-integer values\", () => {\n expect(matchesOntologyDataType(dataType, 1.5)).toBe(true); // Note: isInBounds doesn't check for integers for byte\n });\n });\n\n describe(\"short type\", () => {\n const dataType: OntologyDataType = { type: \"short\" };\n\n it(\"should return true for valid short values\", () => {\n expect(matchesOntologyDataType(dataType, 0)).toBe(true);\n expect(matchesOntologyDataType(dataType, 32767)).toBe(true);\n expect(matchesOntologyDataType(dataType, -32768)).toBe(true);\n });\n\n it(\"should return false for values outside short bounds\", () => {\n expect(matchesOntologyDataType(dataType, 32768)).toBe(false);\n expect(matchesOntologyDataType(dataType, -32769)).toBe(false);\n });\n });\n\n describe(\"date type\", () => {\n const dataType: OntologyDataType = { type: \"date\" };\n\n it(\"should return true for valid date strings\", () => {\n expect(matchesOntologyDataType(dataType, \"2025-01-15\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"2000-12-31\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"1970-01-01\")).toBe(true);\n });\n\n it(\"should return false for invalid date strings\", () => {\n expect(matchesOntologyDataType(dataType, \"2025-13-01\")).toBe(false); // invalid month\n expect(matchesOntologyDataType(dataType, \"2025-01-32\")).toBe(false); // invalid day\n expect(matchesOntologyDataType(dataType, \"2025/01/15\")).toBe(false); // wrong format\n expect(matchesOntologyDataType(dataType, \"01-15-2025\")).toBe(false); // wrong format\n expect(matchesOntologyDataType(dataType, \"not a date\")).toBe(false);\n });\n\n it(\"should return false for non-string values\", () => {\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, new Date())).toBe(false);\n });\n });\n\n describe(\"timestamp type\", () => {\n const dataType: OntologyDataType = { type: \"timestamp\" };\n\n it(\"should return true for valid timestamp strings\", () => {\n expect(matchesOntologyDataType(dataType, \"2025-01-15T10:30:00Z\")).toBe(\n true,\n );\n expect(\n matchesOntologyDataType(dataType, \"2025-01-15T10:30:00.123Z\"),\n ).toBe(true);\n expect(matchesOntologyDataType(dataType, \"2025-01-15\")).toBe(true);\n });\n\n it(\"should return false for invalid timestamp strings\", () => {\n expect(matchesOntologyDataType(dataType, \"not a timestamp\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"\")).toBe(false);\n });\n\n it(\"should return false for non-string values\", () => {\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, new Date())).toBe(false);\n });\n });\n\n describe(\"decimal type\", () => {\n const dataType: OntologyDataType = { type: \"decimal\" };\n\n it(\"should return true for valid decimal strings\", () => {\n expect(matchesOntologyDataType(dataType, \"0\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"123\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"123.456\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"-123.456\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"+123.456\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \".5\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"-.5\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"123.\")).toBe(true);\n });\n\n it(\"should return true for valid decimal strings with scientific notation\", () => {\n expect(matchesOntologyDataType(dataType, \"1E10\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"1.5E10\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"1.5E+10\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"1.5E-10\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"-1.5E10\")).toBe(true);\n });\n\n it(\"should return false for invalid decimal strings\", () => {\n expect(matchesOntologyDataType(dataType, \"abc\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"12.34.56\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"1.2.3E10\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"E10\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"1E\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"1e10\")).toBe(false);\n });\n\n it(\"should return false for non-string values\", () => {\n expect(matchesOntologyDataType(dataType, 123.456)).toBe(false);\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, true)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n expect(matchesOntologyDataType(dataType, undefined)).toBe(false);\n expect(matchesOntologyDataType(dataType, {})).toBe(false);\n });\n });\n\n describe(\"marking type\", () => {\n const dataType: OntologyDataType = { type: \"marking\" };\n\n it(\"should return true for string values\", () => {\n expect(matchesOntologyDataType(dataType, \"marking1\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"\")).toBe(true);\n });\n\n it(\"should return false for non-string values\", () => {\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n });\n });\n\n describe(\"object type\", () => {\n const dataType: OntologyDataType = {\n type: \"object\",\n objectApiName: \"Employee\",\n objectTypeApiName: \"Employee\",\n };\n\n it(\"should return true for string (RID) values\", () => {\n expect(matchesOntologyDataType(dataType, \"ri.object.123\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"someId\")).toBe(true);\n });\n\n it(\"should return true for objects with $primaryKey\", () => {\n expect(matchesOntologyDataType(dataType, { $primaryKey: \"123\" })).toBe(\n true,\n );\n expect(\n matchesOntologyDataType(dataType, {\n $primaryKey: \"123\",\n name: \"test\",\n }),\n ).toBe(true);\n });\n\n it(\"should return false for objects without $primaryKey\", () => {\n expect(matchesOntologyDataType(dataType, { name: \"test\" })).toBe(false);\n expect(matchesOntologyDataType(dataType, {})).toBe(false);\n });\n\n it(\"should return false for other value types\", () => {\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, true)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n });\n });\n\n describe(\"objectSet type\", () => {\n const dataType: OntologyDataType = { type: \"objectSet\" };\n\n it(\"should return true for RID strings\", () => {\n expect(matchesOntologyDataType(dataType, \"ri.objectSet.123\")).toBe(true);\n expect(matchesOntologyDataType(dataType, \"ri.anything.456\")).toBe(true);\n });\n\n it(\"should return true for objects with objectSet property\", () => {\n expect(\n matchesOntologyDataType(dataType, { objectSet: \"definition\" }),\n ).toBe(true);\n });\n\n it(\"should return false for non-RID strings\", () => {\n expect(matchesOntologyDataType(dataType, \"not a rid\")).toBe(false);\n expect(matchesOntologyDataType(dataType, \"objectSet\")).toBe(false);\n });\n\n it(\"should return false for objects without objectSet property\", () => {\n expect(matchesOntologyDataType(dataType, { name: \"test\" })).toBe(false);\n });\n });\n\n describe(\"array type\", () => {\n it(\"should return true for arrays with matching item types\", () => {\n const dataType: OntologyDataType = {\n type: \"array\",\n itemType: { type: \"string\" },\n };\n\n expect(matchesOntologyDataType(dataType, [])).toBe(true);\n expect(matchesOntologyDataType(dataType, [\"a\", \"b\", \"c\"])).toBe(true);\n });\n\n it(\"should return false for arrays with non-matching item types\", () => {\n const dataType: OntologyDataType = {\n type: \"array\",\n itemType: { type: \"string\" },\n };\n\n expect(matchesOntologyDataType(dataType, [1, 2, 3])).toBe(false);\n expect(matchesOntologyDataType(dataType, [\"a\", 1, \"c\"])).toBe(false);\n });\n\n it(\"should work with nested arrays\", () => {\n const dataType: OntologyDataType = {\n type: \"array\",\n itemType: {\n type: \"array\",\n itemType: { type: \"integer\" },\n },\n };\n\n expect(matchesOntologyDataType(dataType, [[1, 2], [3, 4]])).toBe(true);\n expect(matchesOntologyDataType(dataType, [[1, 2], [\"a\", \"b\"]])).toBe(\n false,\n );\n });\n\n it(\"should return false for non-array values\", () => {\n const dataType: OntologyDataType = {\n type: \"array\",\n itemType: { type: \"string\" },\n };\n\n expect(matchesOntologyDataType(dataType, \"not an array\")).toBe(false);\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, { length: 0 })).toBe(false);\n });\n });\n\n describe(\"cipherText type\", () => {\n const dataType: OntologyDataType = { type: \"cipherText\" };\n\n it(\"should return true for valid CIPHER format\", () => {\n expect(\n matchesOntologyDataType(\n dataType,\n \"CIPHER::ri.channel.123::encrypted::CIPHER\",\n ),\n ).toBe(true);\n });\n\n it(\"should return true for valid BELLASO format\", () => {\n expect(\n matchesOntologyDataType(\n dataType,\n \"BELLASO::ri.channel.123::encrypted::BELLASO\",\n ),\n ).toBe(true);\n });\n\n it(\"should return true for valid BELLASO format without suffix\", () => {\n expect(\n matchesOntologyDataType(dataType, \"BELLASO::ri.channel.123::encrypted\"),\n ).toBe(true);\n });\n\n it(\"should return false for invalid cipher format\", () => {\n expect(matchesOntologyDataType(dataType, \"CIPHER::channel::data\")).toBe(\n false,\n ); // missing ri. prefix\n expect(\n matchesOntologyDataType(dataType, \"CIPHER::ri.channel.123::\"),\n ).toBe(false); // empty encrypted value\n expect(\n matchesOntologyDataType(\n dataType,\n \"INVALID::ri.channel.123::data::INVALID\",\n ),\n ).toBe(false);\n });\n\n it(\"should return false for non-string values\", () => {\n expect(matchesOntologyDataType(dataType, 123)).toBe(false);\n expect(matchesOntologyDataType(dataType, null)).toBe(false);\n });\n });\n\n describe(\"binary type\", () => {\n const dataType: OntologyDataType = { type: \"binary\" };\n\n it(\"should throw an error\", () => {\n expect(() => matchesOntologyDataType(dataType, \"data\")).toThrow(\n \"validateDataType: binary not implemented yet.\",\n );\n });\n });\n\n describe(\"map type\", () => {\n const dataType: OntologyDataType = {\n type: \"map\",\n keyType: { type: \"string\" },\n valueType: { type: \"integer\" },\n };\n\n it(\"should throw an error\", () => {\n expect(() => matchesOntologyDataType(dataType, {})).toThrow(\n \"matchesOntologyDataType: map not implemented yet.\",\n );\n });\n });\n\n describe(\"set type\", () => {\n const dataType: OntologyDataType = {\n type: \"set\",\n itemType: { type: \"string\" },\n };\n\n it(\"should throw an error\", () => {\n expect(() => matchesOntologyDataType(dataType, new Set())).toThrow(\n \"matchesOntologyDataType: set not implemented yet.\",\n );\n });\n });\n\n describe(\"struct type\", () => {\n const dataType: OntologyDataType = {\n type: \"struct\",\n fields: [],\n };\n\n it(\"should throw an error\", () => {\n expect(() => matchesOntologyDataType(dataType, {})).toThrow(\n \"matchesOntologyDataType: struct not implemented yet.\",\n );\n });\n });\n\n describe(\"unsupported type\", () => {\n const dataType: OntologyDataType = {\n type: \"unsupported\",\n unsupportedType: \"someCustomType\",\n };\n\n it(\"should throw an error\", () => {\n expect(() => matchesOntologyDataType(dataType, \"anything\")).toThrow(\n \"matchesOntologyDataType: unsupported not implemented yet.\",\n );\n });\n });\n});\n\ndescribe(\"isMediaReference\", () => {\n it(\"should return true for valid MediaReference objects\", () => {\n const validMediaRef = {\n mimeType: \"image/png\",\n reference: {\n type: \"mediaSetViewItem\",\n mediaSetViewItem: {\n mediaSetRid: \"ri.mediaset.123\",\n mediaSetViewRid: \"ri.mediasetview.456\",\n mediaItemRid: \"ri.mediaitem.789\",\n },\n },\n };\n\n expect(isMediaReference(validMediaRef)).toBe(true);\n });\n\n it(\"should return false for objects missing required properties\", () => {\n expect(isMediaReference({ mimeType: \"image/png\" })).toBe(false);\n expect(\n isMediaReference({\n reference: {\n type: \"mediaSetViewItem\",\n mediaSetViewItem: {},\n },\n }),\n ).toBe(false);\n });\n\n it(\"should return false for objects with incorrect reference type\", () => {\n const invalidMediaRef = {\n mimeType: \"image/png\",\n reference: {\n type: \"wrongType\",\n mediaSetViewItem: {\n mediaSetRid: \"ri.mediaset.123\",\n mediaSetViewRid: \"ri.mediasetview.456\",\n mediaItemRid: \"ri.mediaitem.789\",\n },\n },\n };\n\n expect(isMediaReference(invalidMediaRef)).toBe(false);\n });\n});\n\ndescribe(\"isInterfaceActionParam\", () => {\n it(\"should return true for valid interface action params with string primary key\", () => {\n expect(\n isInterfaceActionParam({\n objectTypeApiName: \"Employee\",\n primaryKeyValue: \"emp-123\",\n }),\n ).toBe(true);\n });\n\n it(\"should return true for valid interface action params with number primary key\", () => {\n expect(\n isInterfaceActionParam({\n objectTypeApiName: \"Employee\",\n primaryKeyValue: 123,\n }),\n ).toBe(true);\n });\n\n it(\"should return true for valid interface action params with boolean primary key\", () => {\n expect(\n isInterfaceActionParam({\n objectTypeApiName: \"Employee\",\n primaryKeyValue: true,\n }),\n ).toBe(true);\n });\n\n it(\"should return false for objects missing objectTypeApiName\", () => {\n expect(\n isInterfaceActionParam({\n primaryKeyValue: \"123\",\n }),\n ).toBe(false);\n });\n\n it(\"should return false for objects missing primaryKeyValue\", () => {\n expect(\n isInterfaceActionParam({\n objectTypeApiName: \"Employee\",\n }),\n ).toBe(false);\n });\n\n it(\"should return false for objects with invalid primaryKeyValue type\", () => {\n expect(\n isInterfaceActionParam({\n objectTypeApiName: \"Employee\",\n primaryKeyValue: {},\n }),\n ).toBe(false);\n\n expect(\n isInterfaceActionParam({\n objectTypeApiName: \"Employee\",\n primaryKeyValue: [],\n }),\n ).toBe(false);\n });\n});\n"],"mappings":"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","ignoreList":[]}