xypriss 9.12.49 → 9.12.52

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,670 @@
1
+ import { XStringify } from 'xypriss-security';
2
+
3
+ // ---------------------------------------------------------------------------
4
+ class ObjectWrapper {
5
+ constructor(obj) {
6
+ this.current = obj;
7
+ }
8
+ /**
9
+ * **value**
10
+ *
11
+ * Unwraps and returns the underlying plain object held by this wrapper.
12
+ * Call this at the end of a chain to get back a normal object.
13
+ *
14
+ * @returns The current wrapped object.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const obj = __sys__.utils.obj.of({ a: 1 });
19
+ * obj.value(); // { a: 1 }
20
+ * ```
21
+ */
22
+ value() {
23
+ return this.current;
24
+ }
25
+ /**
26
+ * **raw**
27
+ *
28
+ * Alias for {@link value}. Useful when `value` reads awkwardly in context.
29
+ *
30
+ * @returns The current wrapped object.
31
+ */
32
+ raw() {
33
+ return this.current;
34
+ }
35
+ /**
36
+ * **clone**
37
+ *
38
+ * Deep-clones the wrapped object (via `XStringify`) and continues
39
+ * the chain on the cloned copy, leaving the original untouched.
40
+ *
41
+ * @returns `this`, now wrapping a deep copy of the previous value.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const source = { nested: { count: 1 } };
46
+ * const obj = __sys__.utils.obj.of(source).clone();
47
+ * obj.value().nested.count = 99;
48
+ * // source.nested.count is still 1
49
+ * ```
50
+ */
51
+ clone() {
52
+ this.current = JSON.parse(XStringify(this.current));
53
+ return this;
54
+ }
55
+ /**
56
+ * **pick**
57
+ *
58
+ * Narrows the wrapped object down to only the given keys.
59
+ *
60
+ * @param keys - The keys to keep.
61
+ * @returns `this`, now wrapping only the picked keys.
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * __sys__.utils.obj.of({ a: 1, b: 2, c: 3 }).pick(["a", "c"]).value();
66
+ * // { a: 1, c: 3 }
67
+ * ```
68
+ */
69
+ pick(keys) {
70
+ const result = keys.reduce((acc, key) => {
71
+ if (key in this.current)
72
+ acc[key] = this.current[key];
73
+ return acc;
74
+ }, {});
75
+ return new ObjectWrapper(result);
76
+ }
77
+ /**
78
+ * **deepPick**
79
+ *
80
+ * Extracts a subset of the wrapped object using dot-notation paths,
81
+ * preserving the original nested structure. Paths that do not exist
82
+ * in the object are silently ignored.
83
+ *
84
+ * @param paths - Dot-notation paths to extract (e.g. `"a.b.c"`).
85
+ * @param separator - Path separator (default: `"."`)
86
+ * @returns A new wrapper around the extracted nested object.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * const data = {
91
+ * user: { name: "Alice", age: 30, password: "secret" },
92
+ * meta: { created: "2024-01-01", version: 2 },
93
+ * };
94
+ *
95
+ * __sys__.utils.obj
96
+ * .of(data)
97
+ * .deepPick(["user.name", "user.age", "meta.version"])
98
+ * .value();
99
+ * // { user: { name: "Alice", age: 30 }, meta: { version: 2 } }
100
+ * ```
101
+ */
102
+ deepPick(paths, separator) {
103
+ const sep = separator ?? ".";
104
+ const result = {};
105
+ for (const path of paths) {
106
+ const parts = path.split(sep);
107
+ let src = this.current;
108
+ let dst = result;
109
+ for (let i = 0; i < parts.length; i++) {
110
+ const part = parts[i];
111
+ if (src === null || src === undefined || !(part in src)) {
112
+ break;
113
+ }
114
+ if (i === parts.length - 1) {
115
+ dst[part] = src[part];
116
+ }
117
+ else {
118
+ if (typeof dst[part] !== "object" ||
119
+ dst[part] === null ||
120
+ Array.isArray(dst[part])) {
121
+ dst[part] = {};
122
+ }
123
+ dst = dst[part];
124
+ src = src[part];
125
+ }
126
+ }
127
+ }
128
+ return new ObjectWrapper(result);
129
+ }
130
+ /**
131
+ * **omit**
132
+ *
133
+ * Removes the given keys from the wrapped object.
134
+ *
135
+ * @param keys - The keys to remove.
136
+ * @returns `this`, now wrapping the object without those keys.
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * __sys__.utils.obj.of({ a: 1, b: 2, c: 3 }).omit(["b"]).value();
141
+ * // { a: 1, c: 3 }
142
+ * ```
143
+ */
144
+ omit(keys) {
145
+ const result = { ...this.current };
146
+ keys.forEach((key) => delete result[key]);
147
+ return new ObjectWrapper(result);
148
+ }
149
+ /**
150
+ * **isEmpty**
151
+ *
152
+ * Checks whether the wrapped object has no own enumerable keys.
153
+ * This is a terminal read (does not return the wrapper), since it
154
+ * yields a boolean rather than an object.
155
+ *
156
+ * @returns `true` if the object has no own keys.
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * __sys__.utils.obj.of({}).isEmpty(); // true
161
+ * __sys__.utils.obj.of({ a: 1 }).isEmpty(); // false
162
+ * ```
163
+ */
164
+ isEmpty() {
165
+ return Object.keys(this.current).length === 0;
166
+ }
167
+ /**
168
+ * **hasEmpty / hasAnyEmpty**
169
+ *
170
+ * Checks whether at least one property value in the object is empty
171
+ * (`undefined`, `null`, `""` empty/whitespace string, empty `[]`, or empty `{}`).
172
+ * If an optional list of `keys` is provided, only those keys will be inspected.
173
+ *
174
+ * @param keys - Optional array of specific keys to inspect. If omitted, all own keys are checked.
175
+ * @param options - Optional configuration (e.g. `trim: boolean`).
176
+ * @returns `true` if at least one value is empty/undefined, `false` otherwise.
177
+ *
178
+ * @example
179
+ * ```ts
180
+ * const contact = __sys__.utils.obj.of({ name: "Alice", phone: undefined, email: "" });
181
+ * contact.hasEmpty(); // true (phone is undefined, email is empty)
182
+ * contact.hasEmpty(["name"]); // false (name is defined and non-empty)
183
+ * ```
184
+ */
185
+ hasEmpty(keys, options = { trim: true }) {
186
+ const targetKeys = keys && keys.length > 0 ? keys : Object.keys(this.current);
187
+ if (targetKeys.length === 0)
188
+ return true;
189
+ const isValueEmpty = (val) => {
190
+ if (val === undefined || val === null)
191
+ return true;
192
+ if (typeof val === "string") {
193
+ return options.trim !== false ? val.trim().length === 0 : val.length === 0;
194
+ }
195
+ if (Array.isArray(val))
196
+ return val.length === 0;
197
+ if (typeof val === "object") {
198
+ if (val instanceof Date || val instanceof RegExp)
199
+ return false;
200
+ return Object.keys(val).length === 0;
201
+ }
202
+ return false;
203
+ };
204
+ return targetKeys.some((k) => isValueEmpty(this.current[k]));
205
+ }
206
+ /**
207
+ * **hasAnyEmpty**
208
+ *
209
+ * Alias for {@link hasEmpty}. Returns `true` if at least one property value
210
+ * is `undefined`, `null`, empty string, empty array, or empty object.
211
+ */
212
+ hasAnyEmpty(keys, options) {
213
+ return this.hasEmpty(keys, options);
214
+ }
215
+ /**
216
+ * **isAllEmpty**
217
+ *
218
+ * Checks whether **all** property values in the object are empty
219
+ * (`undefined`, `null`, `""` empty/whitespace string, empty `[]`, or empty `{}`).
220
+ * If the object has no keys, returns `true`.
221
+ *
222
+ * @param keys - Optional array of specific keys to inspect.
223
+ * @param options - Optional configuration (e.g. `trim: boolean`).
224
+ * @returns `true` if all inspected values are empty/undefined, `false` otherwise.
225
+ *
226
+ * @example
227
+ * ```ts
228
+ * __sys__.utils.obj.of({ a: undefined, b: "", c: null }).isAllEmpty(); // true
229
+ * __sys__.utils.obj.of({ a: "value", b: "" }).isAllEmpty(); // false
230
+ * ```
231
+ */
232
+ isAllEmpty(keys, options = { trim: true }) {
233
+ const targetKeys = keys && keys.length > 0 ? keys : Object.keys(this.current);
234
+ if (targetKeys.length === 0)
235
+ return true;
236
+ const isValueEmpty = (val) => {
237
+ if (val === undefined || val === null)
238
+ return true;
239
+ if (typeof val === "string") {
240
+ return options.trim !== false ? val.trim().length === 0 : val.length === 0;
241
+ }
242
+ if (Array.isArray(val))
243
+ return val.length === 0;
244
+ if (typeof val === "object") {
245
+ if (val instanceof Date || val instanceof RegExp)
246
+ return false;
247
+ return Object.keys(val).length === 0;
248
+ }
249
+ return false;
250
+ };
251
+ return targetKeys.every((k) => isValueEmpty(this.current[k]));
252
+ }
253
+ /**
254
+ * **hasAny / hasAnyValue / hasPresent**
255
+ *
256
+ * Checks whether **at least one** property value in the object is present and non-empty
257
+ * (not `undefined`, not `null`, not `""` empty string, not empty `[]`, and not empty `{}`).
258
+ *
259
+ * This is the exact inverse of {@link isAllEmpty}.
260
+ *
261
+ * @param keys - Optional array of specific keys to inspect.
262
+ * @param options - Optional configuration (e.g. `trim: boolean`).
263
+ * @returns `true` if at least one property is non-empty.
264
+ *
265
+ * @example
266
+ * ```ts
267
+ * const contact = __sys__.utils.obj.of({ name: undefined, phone: "+225010203", email: "" });
268
+ * contact.hasAny(); // true (phone is filled)
269
+ *
270
+ * const emptyContact = __sys__.utils.obj.of({ name: undefined, phone: "", email: null });
271
+ * emptyContact.hasAny(); // false (all fields empty)
272
+ * ```
273
+ */
274
+ hasAny(keys, options = { trim: true }) {
275
+ return !this.isAllEmpty(keys, options);
276
+ }
277
+ /**
278
+ * **hasAnyValue**
279
+ *
280
+ * Alias for {@link hasAny}.
281
+ */
282
+ hasAnyValue(keys, options) {
283
+ return this.hasAny(keys, options);
284
+ }
285
+ /**
286
+ * **hasNonNull**
287
+ *
288
+ * Checks whether **at least one** property in the object is not `null` and not `undefined`.
289
+ * (Allows empty strings `""`, `[]` or `{}` as long as the value is defined and not `null`).
290
+ *
291
+ * @param keys - Optional array of specific keys to inspect.
292
+ * @returns `true` if at least one property is not null and not undefined.
293
+ *
294
+ * @example
295
+ * ```ts
296
+ * __sys__.utils.obj.of({ a: undefined, b: null, c: "" }).hasNonNull(); // true (c is "")
297
+ * __sys__.utils.obj.of({ a: undefined, b: null }).hasNonNull(); // false
298
+ * ```
299
+ */
300
+ hasNonNull(keys) {
301
+ const targetKeys = keys && keys.length > 0 ? keys : Object.keys(this.current);
302
+ if (targetKeys.length === 0)
303
+ return false;
304
+ return targetKeys.some((k) => this.current[k] !== null && this.current[k] !== undefined);
305
+ }
306
+ /**
307
+ * **isAllNonNull**
308
+ *
309
+ * Checks whether **all** properties in the object are not `null` and not `undefined`.
310
+ *
311
+ * @param keys - Optional array of specific keys to inspect.
312
+ * @returns `true` if all properties are not null and not undefined.
313
+ */
314
+ isAllNonNull(keys) {
315
+ const targetKeys = keys && keys.length > 0 ? keys : Object.keys(this.current);
316
+ if (targetKeys.length === 0)
317
+ return true;
318
+ return targetKeys.every((k) => this.current[k] !== null && this.current[k] !== undefined);
319
+ }
320
+ /**
321
+ * **hasUndefined**
322
+ *
323
+ * Checks whether at least one property value in the object is strictly `undefined` or missing.
324
+ *
325
+ * @param keys - Optional array of specific keys to inspect.
326
+ * @returns `true` if at least one value is `undefined`.
327
+ *
328
+ * @example
329
+ * ```ts
330
+ * __sys__.utils.obj.of({ a: "ok", b: undefined }).hasUndefined(); // true
331
+ * __sys__.utils.obj.of({ a: "ok", b: null }).hasUndefined(); // false
332
+ * ```
333
+ */
334
+ hasUndefined(keys) {
335
+ const targetKeys = keys && keys.length > 0 ? keys : Object.keys(this.current);
336
+ if (targetKeys.length === 0)
337
+ return true;
338
+ return targetKeys.some((k) => this.current[k] === undefined);
339
+ }
340
+ /**
341
+ * **compact**
342
+ *
343
+ * Returns a new {@link ObjectWrapper} with all `undefined`, `null`, and empty string
344
+ * properties removed from the wrapped object.
345
+ *
346
+ * @param options - Optional configuration (e.g. `trim: boolean`).
347
+ * @returns A new wrapper around the cleaned object.
348
+ *
349
+ * @example
350
+ * ```ts
351
+ * __sys__.utils.obj.of({ name: "Alice", email: "", phone: undefined, notes: null })
352
+ * .compact()
353
+ * .value();
354
+ * // { name: "Alice" }
355
+ * ```
356
+ */
357
+ compact(options = { trim: true }) {
358
+ const result = {};
359
+ for (const key of Object.keys(this.current)) {
360
+ const val = this.current[key];
361
+ if (val === undefined || val === null)
362
+ continue;
363
+ if (typeof val === "string") {
364
+ const isEmptyStr = options.trim !== false ? val.trim().length === 0 : val.length === 0;
365
+ if (isEmptyStr)
366
+ continue;
367
+ }
368
+ result[key] = val;
369
+ }
370
+ return new ObjectWrapper(result);
371
+ }
372
+ /**
373
+ * **flatten**
374
+ *
375
+ * Collapses the wrapped object's nested structure into flat
376
+ * dot-notation (or custom separator) keys.
377
+ *
378
+ * @param separator - Path separator (default: `"."`).
379
+ * @returns A new wrapper around the flattened object.
380
+ *
381
+ * @example
382
+ * ```ts
383
+ * __sys__.utils.obj.of({ a: { b: 1 } }).flatten().value();
384
+ * // { "a.b": 1 }
385
+ * ```
386
+ */
387
+ flatten(separator = ".") {
388
+ const result = {};
389
+ const recurse = (current, path = "") => {
390
+ for (const [key, val] of Object.entries(current)) {
391
+ const newPath = path ? `${path}${separator}${key}` : key;
392
+ if (val &&
393
+ typeof val === "object" &&
394
+ !Array.isArray(val) &&
395
+ Object.keys(val).length > 0) {
396
+ recurse(val, newPath);
397
+ }
398
+ else {
399
+ result[newPath] = val;
400
+ }
401
+ }
402
+ };
403
+ recurse(this.current);
404
+ return new ObjectWrapper(result);
405
+ }
406
+ /**
407
+ * **unflatten**
408
+ *
409
+ * Reverses {@link flatten}, expanding dot-notation (or custom
410
+ * separator) keys back into a nested object.
411
+ *
412
+ * @param separator - Path separator used in the flat keys (default: `"."`).
413
+ * @returns A new wrapper around the nested object.
414
+ *
415
+ * @example
416
+ * ```ts
417
+ * __sys__.utils.obj.of({ "a.b": 1, "a.c": 2 }).unflatten().value();
418
+ * // { a: { b: 1, c: 2 } }
419
+ * ```
420
+ */
421
+ unflatten(separator = ".") {
422
+ const result = {};
423
+ for (const [flatKey, val] of Object.entries(this.current)) {
424
+ const parts = flatKey.split(separator);
425
+ let cursor = result;
426
+ parts.forEach((part, i) => {
427
+ if (i === parts.length - 1) {
428
+ cursor[part] = val;
429
+ }
430
+ else {
431
+ if (typeof cursor[part] !== "object" ||
432
+ cursor[part] === null) {
433
+ cursor[part] = {};
434
+ }
435
+ cursor = cursor[part];
436
+ }
437
+ });
438
+ }
439
+ return new ObjectWrapper(result);
440
+ }
441
+ /**
442
+ * **merge**
443
+ *
444
+ * Deep-merges one or more source objects into the wrapped object.
445
+ * Plain object values are merged recursively; arrays and primitives
446
+ * are overwritten by the last source that defines them.
447
+ *
448
+ * @param sources - One or more partial objects to merge in.
449
+ * @returns `this`, now wrapping the merged result.
450
+ *
451
+ * @example
452
+ * ```ts
453
+ * __sys__.utils.obj.of({ a: 1, nested: { x: 1 } })
454
+ * .merge({ nested: { y: 2 } })
455
+ * .value();
456
+ * // { a: 1, nested: { x: 1, y: 2 } }
457
+ * ```
458
+ */
459
+ merge(...sources) {
460
+ const isPlainObject = (val) => !!val && typeof val === "object" && !Array.isArray(val);
461
+ const deepMerge = (target, source) => {
462
+ for (const key of Object.keys(source)) {
463
+ if (isPlainObject(source[key]) && isPlainObject(target[key])) {
464
+ deepMerge(target[key], source[key]);
465
+ }
466
+ else {
467
+ target[key] = source[key];
468
+ }
469
+ }
470
+ return target;
471
+ };
472
+ this.current = sources.reduce((acc, src) => deepMerge(acc, src), this.current);
473
+ return this;
474
+ }
475
+ /**
476
+ * **mapValues**
477
+ *
478
+ * Transforms every value of the wrapped object using `fn`, keeping
479
+ * the same keys.
480
+ *
481
+ * @param fn - Mapping function receiving `(value, key)`.
482
+ * @returns A new wrapper around the transformed object.
483
+ *
484
+ * @example
485
+ * ```ts
486
+ * __sys__.utils.obj.of({ a: 1, b: 2 }).mapValues((v) => v * 10).value();
487
+ * // { a: 10, b: 20 }
488
+ * ```
489
+ */
490
+ mapValues(fn) {
491
+ const result = {};
492
+ for (const key of Object.keys(this.current)) {
493
+ result[key] = fn(this.current[key], key);
494
+ }
495
+ return new ObjectWrapper(result);
496
+ }
497
+ /**
498
+ * **mapKeys**
499
+ *
500
+ * Transforms every key of the wrapped object using `fn`, keeping
501
+ * the same values.
502
+ *
503
+ * @param fn - Mapping function receiving `(key, value)`. Must return a string.
504
+ * @returns A new wrapper around the object with renamed keys.
505
+ *
506
+ * @example
507
+ * ```ts
508
+ * __sys__.utils.obj.of({ a: 1, b: 2 })
509
+ * .mapKeys((k) => k.toUpperCase())
510
+ * .value();
511
+ * // { A: 1, B: 2 }
512
+ * ```
513
+ */
514
+ mapKeys(fn) {
515
+ const result = {};
516
+ for (const key of Object.keys(this.current)) {
517
+ result[fn(key, this.current[key])] = this.current[key];
518
+ }
519
+ return new ObjectWrapper(result);
520
+ }
521
+ /**
522
+ * **filter**
523
+ *
524
+ * Keeps only the key-value pairs for which `predicate` returns `true`.
525
+ *
526
+ * @param predicate - Function receiving `(value, key)`.
527
+ * @returns A new wrapper around the filtered object.
528
+ *
529
+ * @example
530
+ * ```ts
531
+ * __sys__.utils.obj.of({ a: 1, b: 2, c: 3 })
532
+ * .filter((v) => v > 1)
533
+ * .value();
534
+ * // { b: 2, c: 3 }
535
+ * ```
536
+ */
537
+ filter(predicate) {
538
+ const result = {};
539
+ for (const key of Object.keys(this.current)) {
540
+ if (predicate(this.current[key], key)) {
541
+ result[key] = this.current[key];
542
+ }
543
+ }
544
+ return new ObjectWrapper(result);
545
+ }
546
+ /**
547
+ * **keys**
548
+ *
549
+ * Returns the own enumerable keys of the wrapped object.
550
+ * This is a terminal read.
551
+ *
552
+ * @returns Array of keys.
553
+ */
554
+ keys() {
555
+ return Object.keys(this.current);
556
+ }
557
+ /**
558
+ * **values**
559
+ *
560
+ * Returns the own enumerable values of the wrapped object.
561
+ * This is a terminal read.
562
+ *
563
+ * @returns Array of values.
564
+ */
565
+ values() {
566
+ return Object.values(this.current);
567
+ }
568
+ /**
569
+ * **entries**
570
+ *
571
+ * Returns the own enumerable `[key, value]` pairs of the wrapped object.
572
+ * This is a terminal read.
573
+ *
574
+ * @returns Array of `[key, value]` tuples.
575
+ */
576
+ entries() {
577
+ return Object.entries(this.current);
578
+ }
579
+ /**
580
+ * **has**
581
+ *
582
+ * Checks whether the wrapped object has the given own key.
583
+ * This is a terminal read.
584
+ *
585
+ * @param key - The key to check.
586
+ * @returns `true` if the key exists on the object.
587
+ */
588
+ has(key) {
589
+ return Object.prototype.hasOwnProperty.call(this.current, key);
590
+ }
591
+ /**
592
+ * **get**
593
+ *
594
+ * Safely reads a possibly-nested value using dot-notation path,
595
+ * returning `fallback` if any part of the path is missing.
596
+ * This is a terminal read.
597
+ *
598
+ * @param path - Dot-notation path (e.g. `"a.b.c"`).
599
+ * @param fallback - Value returned if the path can't be resolved.
600
+ * @returns The resolved value or the fallback.
601
+ *
602
+ * @example
603
+ * ```ts
604
+ * __sys__.utils.obj.of({ a: { b: { c: 42 } } }).get("a.b.c"); // 42
605
+ * __sys__.utils.obj.of({ a: {} }).get("a.b.c", "missing"); // "missing"
606
+ * ```
607
+ */
608
+ get(path, fallback = undefined) {
609
+ const parts = path.split(".");
610
+ let cursor = this.current;
611
+ for (const part of parts) {
612
+ if (cursor === null || cursor === undefined)
613
+ return fallback;
614
+ cursor = cursor[part];
615
+ }
616
+ return cursor === undefined ? fallback : cursor;
617
+ }
618
+ /**
619
+ * **set**
620
+ *
621
+ * Sets a possibly-nested value using dot-notation path, creating
622
+ * intermediate objects as needed.
623
+ *
624
+ * @param path - Dot-notation path (e.g. `"a.b.c"`).
625
+ * @param value - The value to set.
626
+ * @returns `this`, with the value set at the given path.
627
+ *
628
+ * @example
629
+ * ```ts
630
+ * __sys__.utils.obj.of<any>({}).set("a.b.c", 42).value();
631
+ * // { a: { b: { c: 42 } } }
632
+ * ```
633
+ */
634
+ set(path, value) {
635
+ const parts = path.split(".");
636
+ let cursor = this.current;
637
+ parts.forEach((part, i) => {
638
+ if (i === parts.length - 1) {
639
+ cursor[part] = value;
640
+ }
641
+ else {
642
+ if (typeof cursor[part] !== "object" || cursor[part] === null) {
643
+ cursor[part] = {};
644
+ }
645
+ cursor = cursor[part];
646
+ }
647
+ });
648
+ return this;
649
+ }
650
+ /**
651
+ * **equals**
652
+ *
653
+ * Performs a deep structural equality check between the wrapped
654
+ * object and `other`. This is a terminal read.
655
+ *
656
+ * @param other - The object to compare against.
657
+ * @returns `true` if both objects are deeply equal.
658
+ *
659
+ * @example
660
+ * ```ts
661
+ * __sys__.utils.obj.of({ a: { b: 1 } }).equals({ a: { b: 1 } }); // true
662
+ * ```
663
+ */
664
+ equals(other) {
665
+ return __sys__.utils.obj.deepEqual(this.current, other);
666
+ }
667
+ }
668
+
669
+ export { ObjectWrapper };
670
+ //# sourceMappingURL=ObjectWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectWrapper.js","sources":["../../../../../src/xhsc/utils/ObjectWrapper.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}