@dxos/util 0.8.4-main.b97322e → 0.8.4-main.bbf232bc24
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/dist/lib/browser/index.mjs +566 -207
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +566 -207
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/array-to-hex.d.ts.map +1 -1
- package/dist/types/src/array.d.ts +3 -2
- package/dist/types/src/array.d.ts.map +1 -1
- package/dist/types/src/binder.d.ts.map +1 -1
- package/dist/types/src/bitfield.d.ts.map +1 -1
- package/dist/types/src/browser-storage.d.ts +9 -0
- package/dist/types/src/browser-storage.d.ts.map +1 -0
- package/dist/types/src/callback-collection.d.ts.map +1 -1
- package/dist/types/src/callback.d.ts.map +1 -1
- package/dist/types/src/case.d.ts.map +1 -1
- package/dist/types/src/chunk-array.d.ts.map +1 -1
- package/dist/types/src/circular-buffer.d.ts +1 -0
- package/dist/types/src/circular-buffer.d.ts.map +1 -1
- package/dist/types/src/clear-undefined.d.ts.map +1 -1
- package/dist/types/src/complex.d.ts +15 -0
- package/dist/types/src/complex.d.ts.map +1 -1
- package/dist/types/src/composite-key.d.ts +10 -0
- package/dist/types/src/composite-key.d.ts.map +1 -0
- package/dist/types/src/composite-key.test.d.ts +2 -0
- package/dist/types/src/composite-key.test.d.ts.map +1 -0
- package/dist/types/src/deep.d.ts +0 -3
- package/dist/types/src/deep.d.ts.map +1 -1
- package/dist/types/src/defer-function.d.ts.map +1 -1
- package/dist/types/src/defer.d.ts +1 -1
- package/dist/types/src/defer.d.ts.map +1 -1
- package/dist/types/src/di-container.d.ts.map +1 -1
- package/dist/types/src/di-key.d.ts +7 -5
- package/dist/types/src/di-key.d.ts.map +1 -1
- package/dist/types/src/entry.d.ts.map +1 -1
- package/dist/types/src/error-format.d.ts +5 -0
- package/dist/types/src/error-format.d.ts.map +1 -0
- package/dist/types/src/filename.d.ts +9 -0
- package/dist/types/src/filename.d.ts.map +1 -0
- package/dist/types/src/for-each-async.d.ts.map +1 -1
- package/dist/types/src/human-hash.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +7 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/instance-id.d.ts.map +1 -1
- package/dist/types/src/interval.d.ts.map +1 -1
- package/dist/types/src/join-tables.d.ts.map +1 -1
- package/dist/types/src/json.d.ts.map +1 -1
- package/dist/types/src/map-values.d.ts.map +1 -1
- package/dist/types/src/map.d.ts.map +1 -1
- package/dist/types/src/object.d.ts.map +1 -1
- package/dist/types/src/order-keys.d.ts.map +1 -1
- package/dist/types/src/order.d.ts.map +1 -1
- package/dist/types/src/pick.d.ts.map +1 -1
- package/dist/types/src/platform.d.ts +5 -2
- package/dist/types/src/platform.d.ts.map +1 -1
- package/dist/types/src/position.d.ts +1 -1
- package/dist/types/src/position.d.ts.map +1 -1
- package/dist/types/src/random.d.ts.map +1 -1
- package/dist/types/src/range.d.ts.map +1 -1
- package/dist/types/src/reducers.d.ts.map +1 -1
- package/dist/types/src/remove-undefined-keys.d.ts.map +1 -1
- package/dist/types/src/retry.d.ts +32 -0
- package/dist/types/src/retry.d.ts.map +1 -0
- package/dist/types/src/safe-await.d.ts.map +1 -1
- package/dist/types/src/safe-instanceof.d.ts.map +1 -1
- package/dist/types/src/safe-parse.d.ts +7 -4
- package/dist/types/src/safe-parse.d.ts.map +1 -1
- package/dist/types/src/safe-stringify.d.ts +22 -0
- package/dist/types/src/safe-stringify.d.ts.map +1 -0
- package/dist/types/src/safe-stringify.test.d.ts +2 -0
- package/dist/types/src/safe-stringify.test.d.ts.map +1 -0
- package/dist/types/src/sliding-window-summary.d.ts.map +1 -1
- package/dist/types/src/sort.d.ts.map +1 -1
- package/dist/types/src/string.d.ts +5 -1
- package/dist/types/src/string.d.ts.map +1 -1
- package/dist/types/src/sum.d.ts.map +1 -1
- package/dist/types/src/throw-unhandled-error.d.ts.map +1 -1
- package/dist/types/src/to-fallback.d.ts +18 -4
- package/dist/types/src/to-fallback.d.ts.map +1 -1
- package/dist/types/src/tracer.d.ts.map +1 -1
- package/dist/types/src/tree.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +24 -6
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/uint8array.d.ts.map +1 -1
- package/dist/types/src/unit.d.ts +14 -0
- package/dist/types/src/unit.d.ts.map +1 -0
- package/dist/types/src/unit.test.d.ts +2 -0
- package/dist/types/src/unit.test.d.ts.map +1 -0
- package/dist/types/src/url.d.ts.map +1 -1
- package/dist/types/src/weak.d.ts +15 -0
- package/dist/types/src/weak.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -16
- package/src/array.test.ts +1 -1
- package/src/array.ts +9 -2
- package/src/binder.ts +2 -2
- package/src/browser-storage.ts +60 -0
- package/src/circular-buffer.test.ts +27 -1
- package/src/circular-buffer.ts +5 -0
- package/src/complex.test.ts +1 -1
- package/src/complex.ts +32 -0
- package/src/composite-key.test.ts +31 -0
- package/src/composite-key.ts +16 -0
- package/src/deep.ts +2 -6
- package/src/defer.ts +1 -1
- package/src/di-key.ts +10 -8
- package/src/error-format.ts +24 -0
- package/src/filename.ts +16 -0
- package/src/human-hash.test.ts +1 -1
- package/src/index.ts +7 -1
- package/src/platform.ts +35 -3
- package/src/position.test.ts +2 -2
- package/src/retry.ts +74 -0
- package/src/safe-parse.ts +29 -17
- package/src/safe-stringify.test.ts +96 -0
- package/src/safe-stringify.ts +153 -0
- package/src/sort.test.ts +1 -1
- package/src/string.test.ts +1 -1
- package/src/string.ts +36 -6
- package/src/to-fallback.ts +44 -160
- package/src/tree.test.ts +1 -1
- package/src/types.test.ts +11 -1
- package/src/types.ts +40 -12
- package/src/uint8array.test.ts +1 -1
- package/src/unit.test.ts +25 -0
- package/src/unit.ts +87 -0
- package/src/weak.test.ts +1 -1
- package/src/weak.ts +52 -14
- package/dist/types/src/explicit-resource-management-polyfill.d.ts +0 -1
- package/dist/types/src/explicit-resource-management-polyfill.d.ts.map +0 -1
- package/dist/types/src/first-two-chars.d.ts +0 -9
- package/dist/types/src/first-two-chars.d.ts.map +0 -1
- package/src/explicit-resource-management-polyfill.ts +0 -13
- package/src/first-two-chars.ts +0 -44
|
@@ -97,21 +97,28 @@ var intersectBy = (arrays, selector) => {
|
|
|
97
97
|
return lookups.every((lookup) => lookup.has(key));
|
|
98
98
|
});
|
|
99
99
|
};
|
|
100
|
+
var coerceArray = (arr) => {
|
|
101
|
+
if (arr === void 0) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
return Array.isArray(arr) ? arr : [
|
|
105
|
+
arr
|
|
106
|
+
];
|
|
107
|
+
};
|
|
100
108
|
|
|
101
109
|
// src/assume.ts
|
|
102
110
|
function assumeType(value) {
|
|
103
111
|
}
|
|
104
112
|
|
|
105
113
|
// src/binder.ts
|
|
106
|
-
import
|
|
114
|
+
import { promisify } from "node:util";
|
|
107
115
|
var createBinder = (obj) => ({
|
|
108
116
|
fn: (fn) => fn.bind(obj),
|
|
109
|
-
async: (fn) =>
|
|
117
|
+
async: (fn) => promisify(fn.bind(obj))
|
|
110
118
|
});
|
|
111
119
|
|
|
112
120
|
// src/bitfield.ts
|
|
113
121
|
import { invariant } from "@dxos/invariant";
|
|
114
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/util/src/bitfield.ts";
|
|
115
122
|
var BitField = class _BitField {
|
|
116
123
|
static get(data, idx) {
|
|
117
124
|
const bit = data[idx >> 3] >> 7 - idx % 8 & 1;
|
|
@@ -143,15 +150,7 @@ var BitField = class _BitField {
|
|
|
143
150
|
return result;
|
|
144
151
|
}
|
|
145
152
|
static and(first, second) {
|
|
146
|
-
invariant(first.length === second.length, "Bitfields must be of the same length"
|
|
147
|
-
F: __dxlog_file,
|
|
148
|
-
L: 52,
|
|
149
|
-
S: this,
|
|
150
|
-
A: [
|
|
151
|
-
"first.length === second.length",
|
|
152
|
-
"'Bitfields must be of the same length'"
|
|
153
|
-
]
|
|
154
|
-
});
|
|
153
|
+
invariant(first.length === second.length, "Bitfields must be of the same length");
|
|
155
154
|
const result = new Uint8Array(first.length);
|
|
156
155
|
for (let i = 0; i < first.length; i++) {
|
|
157
156
|
result[i] = first[i] & second[i];
|
|
@@ -179,6 +178,49 @@ var BitField = class _BitField {
|
|
|
179
178
|
}
|
|
180
179
|
};
|
|
181
180
|
|
|
181
|
+
// src/browser-storage.ts
|
|
182
|
+
var clearIndexedDB = async () => {
|
|
183
|
+
const dbs = await indexedDB.databases();
|
|
184
|
+
const results = await Promise.allSettled(dbs.filter((db) => db.name != null).map((db) => new Promise((resolve, reject) => {
|
|
185
|
+
const request = indexedDB.deleteDatabase(db.name);
|
|
186
|
+
request.onsuccess = () => resolve();
|
|
187
|
+
request.onerror = () => reject(request.error);
|
|
188
|
+
request.onblocked = () => reject(new Error(`IndexedDB deletion blocked: ${db.name}`));
|
|
189
|
+
})));
|
|
190
|
+
const failures = results.filter((r) => r.status === "rejected");
|
|
191
|
+
if (failures.length > 0) {
|
|
192
|
+
throw new AggregateError(failures.map((r) => r.reason), "Failed to delete some IndexedDB databases");
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
var clearOPFS = async () => {
|
|
196
|
+
const root = await navigator.storage.getDirectory();
|
|
197
|
+
const errors = [];
|
|
198
|
+
for await (const [name] of root.entries()) {
|
|
199
|
+
try {
|
|
200
|
+
await root.removeEntry(name, {
|
|
201
|
+
recursive: true
|
|
202
|
+
});
|
|
203
|
+
} catch (err) {
|
|
204
|
+
errors.push(err);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (errors.length > 0) {
|
|
208
|
+
throw new AggregateError(errors, "Failed to remove some OPFS entries");
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
var clearServiceWorkers = async () => {
|
|
212
|
+
const regs = await navigator.serviceWorker.getRegistrations();
|
|
213
|
+
for (const reg of regs) {
|
|
214
|
+
await reg.unregister();
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
var clearCaches = async () => {
|
|
218
|
+
const keys2 = await caches.keys();
|
|
219
|
+
for (const key of keys2) {
|
|
220
|
+
await caches.delete(key);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
|
|
182
224
|
// src/callback-collection.ts
|
|
183
225
|
var CallbackCollection = class {
|
|
184
226
|
#callbacks = [];
|
|
@@ -205,33 +247,17 @@ var CallbackCollection = class {
|
|
|
205
247
|
|
|
206
248
|
// src/callback.ts
|
|
207
249
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
208
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/util/src/callback.ts";
|
|
209
250
|
var Callback = class {
|
|
251
|
+
_callback;
|
|
210
252
|
call(...args) {
|
|
211
|
-
invariant2(this._callback, "Callback not set"
|
|
212
|
-
F: __dxlog_file2,
|
|
213
|
-
L: 20,
|
|
214
|
-
S: this,
|
|
215
|
-
A: [
|
|
216
|
-
"this._callback",
|
|
217
|
-
"'Callback not set'"
|
|
218
|
-
]
|
|
219
|
-
});
|
|
253
|
+
invariant2(this._callback, "Callback not set");
|
|
220
254
|
return this._callback(...args);
|
|
221
255
|
}
|
|
222
256
|
callIfSet(...args) {
|
|
223
257
|
return this._callback?.(...args);
|
|
224
258
|
}
|
|
225
259
|
set(callback) {
|
|
226
|
-
invariant2(!this._callback, "Callback already set"
|
|
227
|
-
F: __dxlog_file2,
|
|
228
|
-
L: 29,
|
|
229
|
-
S: this,
|
|
230
|
-
A: [
|
|
231
|
-
"!this._callback",
|
|
232
|
-
"'Callback already set'"
|
|
233
|
-
]
|
|
234
|
-
});
|
|
260
|
+
invariant2(!this._callback, "Callback already set");
|
|
235
261
|
this._callback = callback;
|
|
236
262
|
}
|
|
237
263
|
isSet() {
|
|
@@ -299,20 +325,12 @@ var chunkArray = (array, size) => {
|
|
|
299
325
|
|
|
300
326
|
// src/circular-buffer.ts
|
|
301
327
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
302
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/util/src/circular-buffer.ts";
|
|
303
328
|
var CircularBuffer = class {
|
|
329
|
+
_buffer;
|
|
330
|
+
_nextIndex = 0;
|
|
331
|
+
_elementCount = 0;
|
|
304
332
|
constructor(size) {
|
|
305
|
-
|
|
306
|
-
this._elementCount = 0;
|
|
307
|
-
invariant3(size >= 1, void 0, {
|
|
308
|
-
F: __dxlog_file3,
|
|
309
|
-
L: 13,
|
|
310
|
-
S: this,
|
|
311
|
-
A: [
|
|
312
|
-
"size >= 1",
|
|
313
|
-
""
|
|
314
|
-
]
|
|
315
|
-
});
|
|
333
|
+
invariant3(size >= 1);
|
|
316
334
|
this._buffer = new Array(size);
|
|
317
335
|
}
|
|
318
336
|
push(element) {
|
|
@@ -325,6 +343,10 @@ var CircularBuffer = class {
|
|
|
325
343
|
get elementCount() {
|
|
326
344
|
return this._elementCount;
|
|
327
345
|
}
|
|
346
|
+
clear() {
|
|
347
|
+
this._nextIndex = 0;
|
|
348
|
+
this._elementCount = 0;
|
|
349
|
+
}
|
|
328
350
|
getLast() {
|
|
329
351
|
if (this._elementCount === 0) {
|
|
330
352
|
return void 0;
|
|
@@ -374,10 +396,11 @@ import { inspect } from "node:util";
|
|
|
374
396
|
import { inspectObject, raise } from "@dxos/debug";
|
|
375
397
|
var MAX_SERIALIZATION_LENGTH = 10;
|
|
376
398
|
var ComplexSet = class {
|
|
399
|
+
_projection;
|
|
400
|
+
_values = /* @__PURE__ */ new Map();
|
|
377
401
|
// prettier-ignore
|
|
378
402
|
constructor(_projection, values) {
|
|
379
403
|
this._projection = _projection;
|
|
380
|
-
this._values = /* @__PURE__ */ new Map();
|
|
381
404
|
if (values) {
|
|
382
405
|
for (const value of values) {
|
|
383
406
|
this.add(value);
|
|
@@ -467,11 +490,12 @@ var makeSet = (projection) => {
|
|
|
467
490
|
};
|
|
468
491
|
};
|
|
469
492
|
var ComplexMap = class _ComplexMap {
|
|
493
|
+
_keyProjection;
|
|
494
|
+
_keys = /* @__PURE__ */ new Map();
|
|
495
|
+
_values = /* @__PURE__ */ new Map();
|
|
470
496
|
// prettier-ignore
|
|
471
497
|
constructor(_keyProjection, entries2) {
|
|
472
498
|
this._keyProjection = _keyProjection;
|
|
473
|
-
this._keys = /* @__PURE__ */ new Map();
|
|
474
|
-
this._values = /* @__PURE__ */ new Map();
|
|
475
499
|
if (entries2) {
|
|
476
500
|
for (const [key, value] of entries2) {
|
|
477
501
|
this.set(key, value);
|
|
@@ -516,6 +540,36 @@ var ComplexMap = class _ComplexMap {
|
|
|
516
540
|
this._values.set(primitive, value);
|
|
517
541
|
return this;
|
|
518
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Returns the value for the given key if present, otherwise inserts and returns the default value.
|
|
545
|
+
* @param key - The key to look up or insert.
|
|
546
|
+
* @param defaultValue - The value to insert if the key is not present.
|
|
547
|
+
* @returns The existing or newly inserted value.
|
|
548
|
+
*/
|
|
549
|
+
getOrInsert(key, defaultValue) {
|
|
550
|
+
const primitive = this._keyProjection(key);
|
|
551
|
+
if (this._values.has(primitive)) {
|
|
552
|
+
return this._values.get(primitive);
|
|
553
|
+
}
|
|
554
|
+
this.set(key, defaultValue);
|
|
555
|
+
return defaultValue;
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Returns the value for the given key if present, otherwise computes, inserts, and returns a new value.
|
|
559
|
+
* The callback is only invoked when the key is missing.
|
|
560
|
+
* @param key - The key to look up or insert.
|
|
561
|
+
* @param callbackfn - Function to compute the value if the key is not present.
|
|
562
|
+
* @returns The existing or newly computed value.
|
|
563
|
+
*/
|
|
564
|
+
getOrInsertComputed(key, callbackfn) {
|
|
565
|
+
const primitive = this._keyProjection(key);
|
|
566
|
+
if (this._values.has(primitive)) {
|
|
567
|
+
return this._values.get(primitive);
|
|
568
|
+
}
|
|
569
|
+
const value = callbackfn(key);
|
|
570
|
+
this.set(key, value);
|
|
571
|
+
return value;
|
|
572
|
+
}
|
|
519
573
|
get size() {
|
|
520
574
|
return this._keys.size;
|
|
521
575
|
}
|
|
@@ -555,21 +609,15 @@ var makeMap = (keyProjection) => class BoundComplexMap extends ComplexMap {
|
|
|
555
609
|
}
|
|
556
610
|
};
|
|
557
611
|
|
|
612
|
+
// src/composite-key.ts
|
|
613
|
+
var SEPARATOR = ":";
|
|
614
|
+
var compositeKey = (...parts) => parts.join(SEPARATOR);
|
|
615
|
+
var splitCompositeKey = (key) => key.split(SEPARATOR);
|
|
616
|
+
|
|
558
617
|
// src/deep.ts
|
|
559
|
-
import get from "lodash.get";
|
|
560
|
-
import set from "lodash.set";
|
|
561
618
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
562
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/util/src/deep.ts";
|
|
563
619
|
var setDeep = (obj, path, value) => {
|
|
564
|
-
invariant4(path.length > 0
|
|
565
|
-
F: __dxlog_file4,
|
|
566
|
-
L: 18,
|
|
567
|
-
S: void 0,
|
|
568
|
-
A: [
|
|
569
|
-
"path.length > 0",
|
|
570
|
-
""
|
|
571
|
-
]
|
|
572
|
-
});
|
|
620
|
+
invariant4(path.length > 0);
|
|
573
621
|
let parent = obj;
|
|
574
622
|
for (const key of path.slice(0, -1)) {
|
|
575
623
|
if (parent[key] === void 0) {
|
|
@@ -592,13 +640,11 @@ var getDeep = (obj, path) => {
|
|
|
592
640
|
// src/defer-function.ts
|
|
593
641
|
var deferFunction = (fnProvider) => (...args) => fnProvider()(...args);
|
|
594
642
|
|
|
595
|
-
// src/explicit-resource-management-polyfill.ts
|
|
596
|
-
Symbol.dispose ??= Symbol("Symbol.dispose");
|
|
597
|
-
Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
|
|
598
|
-
|
|
599
643
|
// src/defer.ts
|
|
644
|
+
import "@hazae41/symbol-dispose-polyfill";
|
|
600
645
|
var defer = (fn) => new DeferGuard(fn);
|
|
601
646
|
var DeferGuard = class {
|
|
647
|
+
_fn;
|
|
602
648
|
/**
|
|
603
649
|
* @internal
|
|
604
650
|
*/
|
|
@@ -614,6 +660,7 @@ var DeferGuard = class {
|
|
|
614
660
|
};
|
|
615
661
|
var deferAsync = (fn) => new DeferAsyncGuard(fn);
|
|
616
662
|
var DeferAsyncGuard = class {
|
|
663
|
+
_fn;
|
|
617
664
|
/**
|
|
618
665
|
* @internal
|
|
619
666
|
*/
|
|
@@ -628,6 +675,8 @@ var DeferAsyncGuard = class {
|
|
|
628
675
|
// src/entry.ts
|
|
629
676
|
var entry = (map, key) => new MapEntry(map, key);
|
|
630
677
|
var MapEntry = class {
|
|
678
|
+
_map;
|
|
679
|
+
_key;
|
|
631
680
|
/**
|
|
632
681
|
* @internal
|
|
633
682
|
*/
|
|
@@ -653,33 +702,29 @@ var MapEntry = class {
|
|
|
653
702
|
}
|
|
654
703
|
};
|
|
655
704
|
|
|
656
|
-
// src/
|
|
657
|
-
var
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
""
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
} else {
|
|
672
|
-
const textBetween = characters.slice(result[0].length, i).join("");
|
|
673
|
-
if (/[^\p{L}\p{N}_]/u.test(textBetween)) {
|
|
674
|
-
result[1] = char;
|
|
675
|
-
break;
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
return result;
|
|
705
|
+
// src/error-format.ts
|
|
706
|
+
var formatErrorWithCauses = (error) => {
|
|
707
|
+
const lines = [];
|
|
708
|
+
let current = error;
|
|
709
|
+
let level = 0;
|
|
710
|
+
while (current) {
|
|
711
|
+
const prefix = level === 0 ? "" : `Caused by: `;
|
|
712
|
+
lines.push(prefix + (current.stack ?? String(current)));
|
|
713
|
+
if (!(current.cause instanceof Error)) {
|
|
714
|
+
break;
|
|
715
|
+
}
|
|
716
|
+
current = current.cause;
|
|
717
|
+
level += 1;
|
|
718
|
+
}
|
|
719
|
+
return lines.join("\n\n");
|
|
681
720
|
};
|
|
682
721
|
|
|
722
|
+
// src/filename.ts
|
|
723
|
+
var createFilename = ({ parts = [], ext, date = /* @__PURE__ */ new Date() }) => [
|
|
724
|
+
date.toISOString().replace(/[:.]/g, "-"),
|
|
725
|
+
...parts
|
|
726
|
+
].join("_") + (ext ? `.${ext}` : "");
|
|
727
|
+
|
|
683
728
|
// src/for-each-async.ts
|
|
684
729
|
var forEachAsync = (items, fn) => Promise.all(items.map(fn));
|
|
685
730
|
|
|
@@ -944,6 +989,7 @@ var DEFAULT_WORDLIST = [
|
|
|
944
989
|
"zulu"
|
|
945
990
|
];
|
|
946
991
|
var HumanHasher = class {
|
|
992
|
+
wordlist;
|
|
947
993
|
/**
|
|
948
994
|
* Transforms hex digests to human-readable strings.
|
|
949
995
|
*
|
|
@@ -1025,7 +1071,7 @@ var defaultMap = (map, key, def) => {
|
|
|
1025
1071
|
};
|
|
1026
1072
|
|
|
1027
1073
|
// src/instance-id.ts
|
|
1028
|
-
var symbol = Symbol.for("dxos.instance-contexts");
|
|
1074
|
+
var symbol = /* @__PURE__ */ Symbol.for("dxos.instance-contexts");
|
|
1029
1075
|
var instanceContexts = globalThis[symbol] ??= /* @__PURE__ */ new WeakMap();
|
|
1030
1076
|
var getPrototypeSpecificInstanceId = (instance) => {
|
|
1031
1077
|
const prototype = Object.getPrototypeOf(instance);
|
|
@@ -1209,31 +1255,10 @@ var deepMapValues = (value, fn) => {
|
|
|
1209
1255
|
return new DeepMapper(fn).map(value);
|
|
1210
1256
|
};
|
|
1211
1257
|
var DeepMapper = class {
|
|
1258
|
+
_fn;
|
|
1259
|
+
_cyclic = /* @__PURE__ */ new Map();
|
|
1212
1260
|
constructor(_fn) {
|
|
1213
1261
|
this._fn = _fn;
|
|
1214
|
-
this._cyclic = /* @__PURE__ */ new Map();
|
|
1215
|
-
this._recurse = (value) => {
|
|
1216
|
-
if (this._cyclic.has(value)) {
|
|
1217
|
-
return this._cyclic.get(value);
|
|
1218
|
-
}
|
|
1219
|
-
if (Array.isArray(value)) {
|
|
1220
|
-
const res = new Array(value.length);
|
|
1221
|
-
this._cyclic.set(value, res);
|
|
1222
|
-
for (let i = 0; i < value.length; i++) {
|
|
1223
|
-
res[i] = this._map(value[i], i);
|
|
1224
|
-
}
|
|
1225
|
-
return res;
|
|
1226
|
-
} else if (value !== null && typeof value === "object") {
|
|
1227
|
-
const res = {};
|
|
1228
|
-
this._cyclic.set(value, res);
|
|
1229
|
-
for (const key in value) {
|
|
1230
|
-
res[key] = this._map(value[key], key);
|
|
1231
|
-
}
|
|
1232
|
-
return res;
|
|
1233
|
-
} else {
|
|
1234
|
-
return value;
|
|
1235
|
-
}
|
|
1236
|
-
};
|
|
1237
1262
|
}
|
|
1238
1263
|
map(value) {
|
|
1239
1264
|
return this._map(value, void 0);
|
|
@@ -1244,36 +1269,37 @@ var DeepMapper = class {
|
|
|
1244
1269
|
}
|
|
1245
1270
|
return this._fn(value, this._recurse, key);
|
|
1246
1271
|
}
|
|
1272
|
+
_recurse = (value) => {
|
|
1273
|
+
if (this._cyclic.has(value)) {
|
|
1274
|
+
return this._cyclic.get(value);
|
|
1275
|
+
}
|
|
1276
|
+
if (Array.isArray(value)) {
|
|
1277
|
+
const res = new Array(value.length);
|
|
1278
|
+
this._cyclic.set(value, res);
|
|
1279
|
+
for (let i = 0; i < value.length; i++) {
|
|
1280
|
+
res[i] = this._map(value[i], i);
|
|
1281
|
+
}
|
|
1282
|
+
return res;
|
|
1283
|
+
} else if (value !== null && typeof value === "object") {
|
|
1284
|
+
const res = {};
|
|
1285
|
+
this._cyclic.set(value, res);
|
|
1286
|
+
for (const key in value) {
|
|
1287
|
+
res[key] = this._map(value[key], key);
|
|
1288
|
+
}
|
|
1289
|
+
return res;
|
|
1290
|
+
} else {
|
|
1291
|
+
return value;
|
|
1292
|
+
}
|
|
1293
|
+
};
|
|
1247
1294
|
};
|
|
1248
1295
|
var deepMapValuesAsync = (value, fn) => {
|
|
1249
1296
|
return new DeepMapperAsync(fn).map(value);
|
|
1250
1297
|
};
|
|
1251
1298
|
var DeepMapperAsync = class {
|
|
1299
|
+
_fn;
|
|
1300
|
+
_cyclic = /* @__PURE__ */ new Map();
|
|
1252
1301
|
constructor(_fn) {
|
|
1253
1302
|
this._fn = _fn;
|
|
1254
|
-
this._cyclic = /* @__PURE__ */ new Map();
|
|
1255
|
-
this._recurse = async (value) => {
|
|
1256
|
-
if (this._cyclic.has(value)) {
|
|
1257
|
-
return this._cyclic.get(value);
|
|
1258
|
-
}
|
|
1259
|
-
if (Array.isArray(value)) {
|
|
1260
|
-
const res = new Array(value.length);
|
|
1261
|
-
this._cyclic.set(value, res);
|
|
1262
|
-
for (let i = 0; i < value.length; i++) {
|
|
1263
|
-
res[i] = await this._map(value[i], i);
|
|
1264
|
-
}
|
|
1265
|
-
return res;
|
|
1266
|
-
} else if (value !== null && typeof value === "object") {
|
|
1267
|
-
const res = {};
|
|
1268
|
-
this._cyclic.set(value, res);
|
|
1269
|
-
for (const key in value) {
|
|
1270
|
-
res[key] = await this._map(value[key], key);
|
|
1271
|
-
}
|
|
1272
|
-
return res;
|
|
1273
|
-
} else {
|
|
1274
|
-
return value;
|
|
1275
|
-
}
|
|
1276
|
-
};
|
|
1277
1303
|
}
|
|
1278
1304
|
map(value) {
|
|
1279
1305
|
return this._map(value, void 0);
|
|
@@ -1284,6 +1310,28 @@ var DeepMapperAsync = class {
|
|
|
1284
1310
|
}
|
|
1285
1311
|
return this._fn(value, this._recurse, key);
|
|
1286
1312
|
}
|
|
1313
|
+
_recurse = async (value) => {
|
|
1314
|
+
if (this._cyclic.has(value)) {
|
|
1315
|
+
return this._cyclic.get(value);
|
|
1316
|
+
}
|
|
1317
|
+
if (Array.isArray(value)) {
|
|
1318
|
+
const res = new Array(value.length);
|
|
1319
|
+
this._cyclic.set(value, res);
|
|
1320
|
+
for (let i = 0; i < value.length; i++) {
|
|
1321
|
+
res[i] = await this._map(value[i], i);
|
|
1322
|
+
}
|
|
1323
|
+
return res;
|
|
1324
|
+
} else if (value !== null && typeof value === "object") {
|
|
1325
|
+
const res = {};
|
|
1326
|
+
this._cyclic.set(value, res);
|
|
1327
|
+
for (const key in value) {
|
|
1328
|
+
res[key] = await this._map(value[key], key);
|
|
1329
|
+
}
|
|
1330
|
+
return res;
|
|
1331
|
+
} else {
|
|
1332
|
+
return value;
|
|
1333
|
+
}
|
|
1334
|
+
};
|
|
1287
1335
|
};
|
|
1288
1336
|
var visitValues = (object, visitor) => {
|
|
1289
1337
|
if (Array.isArray(object)) {
|
|
@@ -1372,7 +1420,18 @@ var omit = (obj, keys2) => {
|
|
|
1372
1420
|
|
|
1373
1421
|
// src/platform.ts
|
|
1374
1422
|
var isNode = () => typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
1375
|
-
var
|
|
1423
|
+
var isBun = () => globalThis.Bun !== void 0;
|
|
1424
|
+
var isTauri = () => !!globalThis.__TAURI__;
|
|
1425
|
+
var isMobile = () => {
|
|
1426
|
+
let check = false;
|
|
1427
|
+
(function(a) {
|
|
1428
|
+
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
|
|
1429
|
+
check = true;
|
|
1430
|
+
}
|
|
1431
|
+
})(navigator.userAgent || navigator.vendor || window.opera);
|
|
1432
|
+
return check;
|
|
1433
|
+
};
|
|
1434
|
+
var isMobileOrTablet = () => {
|
|
1376
1435
|
let check = false;
|
|
1377
1436
|
((a) => {
|
|
1378
1437
|
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
|
|
@@ -1394,7 +1453,7 @@ var iosCheck = () => {
|
|
|
1394
1453
|
};
|
|
1395
1454
|
var safariCheck = () => typeof navigator !== "undefined" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|
1396
1455
|
var getHostPlatform = () => {
|
|
1397
|
-
if (!("navigator" in
|
|
1456
|
+
if (!("navigator" in globalThis)) {
|
|
1398
1457
|
return "unknown";
|
|
1399
1458
|
}
|
|
1400
1459
|
const platform = (navigator.userAgentData?.platform || navigator.platform)?.toLowerCase();
|
|
@@ -1570,6 +1629,43 @@ var removeProperties = (root, condition) => {
|
|
|
1570
1629
|
return result;
|
|
1571
1630
|
};
|
|
1572
1631
|
|
|
1632
|
+
// src/retry.ts
|
|
1633
|
+
var DEFAULT_RETRY_OPTIONS = {
|
|
1634
|
+
count: 3,
|
|
1635
|
+
delayMs: 100,
|
|
1636
|
+
exponent: 2,
|
|
1637
|
+
retryOnError: async () => true,
|
|
1638
|
+
retryOnValue: async () => false
|
|
1639
|
+
};
|
|
1640
|
+
var retry = async (options, cb) => {
|
|
1641
|
+
const fullOptions = {
|
|
1642
|
+
...DEFAULT_RETRY_OPTIONS,
|
|
1643
|
+
...options
|
|
1644
|
+
};
|
|
1645
|
+
let numRetries = 0, currentDelay = fullOptions.delayMs;
|
|
1646
|
+
while (true) {
|
|
1647
|
+
let result;
|
|
1648
|
+
try {
|
|
1649
|
+
result = await cb();
|
|
1650
|
+
} catch (err) {
|
|
1651
|
+
if (numRetries > fullOptions.count || !await fullOptions.retryOnError(err)) {
|
|
1652
|
+
throw err;
|
|
1653
|
+
}
|
|
1654
|
+
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
1655
|
+
currentDelay *= fullOptions.exponent;
|
|
1656
|
+
numRetries++;
|
|
1657
|
+
continue;
|
|
1658
|
+
}
|
|
1659
|
+
if (!await fullOptions.retryOnValue(result)) {
|
|
1660
|
+
return result;
|
|
1661
|
+
}
|
|
1662
|
+
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
1663
|
+
currentDelay *= fullOptions.exponent;
|
|
1664
|
+
numRetries++;
|
|
1665
|
+
continue;
|
|
1666
|
+
}
|
|
1667
|
+
};
|
|
1668
|
+
|
|
1573
1669
|
// src/safe-await.ts
|
|
1574
1670
|
var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
1575
1671
|
const failedItems = [];
|
|
@@ -1589,7 +1685,7 @@ var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
|
1589
1685
|
};
|
|
1590
1686
|
|
|
1591
1687
|
// src/safe-instanceof.ts
|
|
1592
|
-
var instanceTag = Symbol("instanceTag");
|
|
1688
|
+
var instanceTag = /* @__PURE__ */ Symbol("instanceTag");
|
|
1593
1689
|
var safeInstanceof = (tag) => (target) => {
|
|
1594
1690
|
target.prototype[instanceTag] = tag;
|
|
1595
1691
|
Object.defineProperty(target.prototype, Symbol.hasInstance, {
|
|
@@ -1601,48 +1697,139 @@ var safeInstanceof = (tag) => (target) => {
|
|
|
1601
1697
|
};
|
|
1602
1698
|
|
|
1603
1699
|
// src/safe-parse.ts
|
|
1604
|
-
|
|
1700
|
+
function safeParseInt(str, defaultValue) {
|
|
1701
|
+
try {
|
|
1702
|
+
const value = parseInt(str ?? "");
|
|
1703
|
+
return isNaN(value) ? defaultValue : value;
|
|
1704
|
+
} catch {
|
|
1705
|
+
return defaultValue;
|
|
1706
|
+
}
|
|
1707
|
+
}
|
|
1708
|
+
function safeParseFloat(str, defaultValue) {
|
|
1605
1709
|
try {
|
|
1606
|
-
const
|
|
1607
|
-
return isNaN(
|
|
1608
|
-
} catch
|
|
1710
|
+
const value = parseFloat(str ?? "");
|
|
1711
|
+
return isNaN(value) ? defaultValue : value;
|
|
1712
|
+
} catch {
|
|
1609
1713
|
return defaultValue;
|
|
1610
1714
|
}
|
|
1715
|
+
}
|
|
1716
|
+
var safeParseJson = (str, defaultValue) => {
|
|
1717
|
+
if (str && str.length > 0) {
|
|
1718
|
+
try {
|
|
1719
|
+
return JSON.parse(str);
|
|
1720
|
+
} catch {
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
return defaultValue;
|
|
1611
1724
|
};
|
|
1612
|
-
var
|
|
1725
|
+
var safeUrl = (str) => {
|
|
1613
1726
|
try {
|
|
1614
|
-
return
|
|
1727
|
+
return new URL(str ?? "");
|
|
1615
1728
|
} catch {
|
|
1616
|
-
return
|
|
1729
|
+
return void 0;
|
|
1617
1730
|
}
|
|
1618
1731
|
};
|
|
1619
|
-
|
|
1620
|
-
|
|
1732
|
+
|
|
1733
|
+
// src/safe-stringify.ts
|
|
1734
|
+
var SKIP = Object.freeze({});
|
|
1735
|
+
function safeStringify(obj, filter = defaultFilter, indent = 2) {
|
|
1736
|
+
const seen = /* @__PURE__ */ new WeakMap();
|
|
1737
|
+
function replacer(key, value) {
|
|
1621
1738
|
try {
|
|
1622
|
-
|
|
1623
|
-
|
|
1739
|
+
let path = key;
|
|
1740
|
+
if (!key) {
|
|
1741
|
+
path = "$";
|
|
1742
|
+
if (value != null && typeof value === "object") {
|
|
1743
|
+
seen.set(value, path);
|
|
1744
|
+
}
|
|
1745
|
+
return value;
|
|
1746
|
+
} else if (this) {
|
|
1747
|
+
const parentPath = seen.get(this);
|
|
1748
|
+
path = parentPath ? `${parentPath}.${key}` : key;
|
|
1749
|
+
}
|
|
1750
|
+
if (value == null) {
|
|
1751
|
+
return value;
|
|
1752
|
+
}
|
|
1753
|
+
if (typeof value === "function") {
|
|
1754
|
+
return void 0;
|
|
1755
|
+
}
|
|
1756
|
+
if (typeof value === "object" && Object.getPrototypeOf(value) !== Object.prototype && !Array.isArray(value)) {
|
|
1757
|
+
return void 0;
|
|
1758
|
+
}
|
|
1759
|
+
if (typeof value === "object" && value !== null) {
|
|
1760
|
+
const exists = seen.get(value);
|
|
1761
|
+
if (exists) {
|
|
1762
|
+
return `[${path} => ${exists}]`;
|
|
1763
|
+
}
|
|
1764
|
+
seen.set(value, path);
|
|
1765
|
+
}
|
|
1766
|
+
if (filter) {
|
|
1767
|
+
const filteredValue = filter?.(key, value);
|
|
1768
|
+
if (filteredValue !== void 0) {
|
|
1769
|
+
return filteredValue === SKIP ? void 0 : filteredValue;
|
|
1770
|
+
}
|
|
1771
|
+
}
|
|
1772
|
+
return value;
|
|
1773
|
+
} catch (error) {
|
|
1774
|
+
return `ERROR: ${error.message}`;
|
|
1624
1775
|
}
|
|
1625
1776
|
}
|
|
1626
|
-
|
|
1777
|
+
try {
|
|
1778
|
+
return JSON.stringify(obj, replacer, indent);
|
|
1779
|
+
} catch (error) {
|
|
1780
|
+
return `ERROR: ${error.message}`;
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
var createReplacer = ({ omit: omit2, parse, maxDepth, maxArrayLen, maxStringLen } = {}) => {
|
|
1784
|
+
let currentDepth = 0;
|
|
1785
|
+
const depthMap = /* @__PURE__ */ new WeakMap();
|
|
1786
|
+
return function(key, value) {
|
|
1787
|
+
if (key === "") {
|
|
1788
|
+
currentDepth = 0;
|
|
1789
|
+
} else if (this && typeof this === "object") {
|
|
1790
|
+
const parentDepth = depthMap.get(this) ?? 0;
|
|
1791
|
+
currentDepth = parentDepth + 1;
|
|
1792
|
+
}
|
|
1793
|
+
if (typeof value === "function") {
|
|
1794
|
+
return SKIP;
|
|
1795
|
+
}
|
|
1796
|
+
if (maxArrayLen != null && Array.isArray(value) && value.length > maxArrayLen) {
|
|
1797
|
+
return `[length: ${value.length}]`;
|
|
1798
|
+
}
|
|
1799
|
+
if (value && typeof value === "object") {
|
|
1800
|
+
depthMap.set(value, currentDepth);
|
|
1801
|
+
if (maxDepth != null && currentDepth >= maxDepth) {
|
|
1802
|
+
return Array.isArray(value) ? `[{ length: ${value.length} }]` : `{ keys: ${Object.keys(value).length} }`;
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
if (omit2?.includes(key)) {
|
|
1806
|
+
return SKIP;
|
|
1807
|
+
}
|
|
1808
|
+
if (parse?.includes(key) && typeof value === "string") {
|
|
1809
|
+
try {
|
|
1810
|
+
return JSON.parse(value);
|
|
1811
|
+
} catch {
|
|
1812
|
+
return value;
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
if (maxStringLen != null && typeof value === "string" && value.length > maxStringLen) {
|
|
1816
|
+
return value.slice(0, maxStringLen) + "...";
|
|
1817
|
+
}
|
|
1818
|
+
return value;
|
|
1819
|
+
};
|
|
1627
1820
|
};
|
|
1821
|
+
var defaultFilter = createReplacer();
|
|
1628
1822
|
|
|
1629
1823
|
// src/sliding-window-summary.ts
|
|
1630
1824
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1631
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/util/src/sliding-window-summary.ts";
|
|
1632
1825
|
var SlidingWindowSummary = class {
|
|
1826
|
+
_buffer;
|
|
1827
|
+
_sum = 0;
|
|
1828
|
+
_precision;
|
|
1633
1829
|
constructor(options) {
|
|
1634
|
-
this._sum = 0;
|
|
1635
1830
|
this._buffer = new CircularBuffer(options.dataPoints);
|
|
1636
1831
|
if (options.precision != null) {
|
|
1637
|
-
invariant5(options.precision >= 0
|
|
1638
|
-
F: __dxlog_file5,
|
|
1639
|
-
L: 26,
|
|
1640
|
-
S: this,
|
|
1641
|
-
A: [
|
|
1642
|
-
"options.precision >= 0",
|
|
1643
|
-
""
|
|
1644
|
-
]
|
|
1645
|
-
});
|
|
1832
|
+
invariant5(options.precision >= 0);
|
|
1646
1833
|
this._precision = Math.pow(10, options.precision);
|
|
1647
1834
|
}
|
|
1648
1835
|
}
|
|
@@ -1711,12 +1898,28 @@ var capitalize = (str) => {
|
|
|
1711
1898
|
}
|
|
1712
1899
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
1713
1900
|
};
|
|
1714
|
-
|
|
1715
|
-
const
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1901
|
+
function trim(strings, ...values) {
|
|
1902
|
+
const raw = strings.reduce((out, str, i) => {
|
|
1903
|
+
out += str;
|
|
1904
|
+
if (i < values.length) {
|
|
1905
|
+
const match = str.match(/(^|\n)([ \t]*)$/);
|
|
1906
|
+
const baseIndent = match ? match[2] : "";
|
|
1907
|
+
const val = String(values[i]).replace(/\r?\n/g, "\n" + baseIndent);
|
|
1908
|
+
out += val;
|
|
1909
|
+
}
|
|
1910
|
+
return out;
|
|
1911
|
+
}, "");
|
|
1912
|
+
const lines = raw.split("\n");
|
|
1913
|
+
while (lines.length && !lines[0].trim()) {
|
|
1914
|
+
lines.shift();
|
|
1915
|
+
}
|
|
1916
|
+
while (lines.length && !lines[lines.length - 1].trim()) {
|
|
1917
|
+
lines.pop();
|
|
1918
|
+
}
|
|
1919
|
+
const minIndent = Math.min(...lines.filter((l) => l.trim()).map((l) => l.match(/^[ \t]*/)?.[0].length ?? 0));
|
|
1920
|
+
return lines.map((l) => l.slice(minIndent)).join("\n");
|
|
1921
|
+
}
|
|
1922
|
+
var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
|
|
1720
1923
|
|
|
1721
1924
|
// src/sum.ts
|
|
1722
1925
|
var sum = (values) => values.reduce((a, b) => a + b, 0);
|
|
@@ -1730,18 +1933,6 @@ var throwUnhandledError = (error) => {
|
|
|
1730
1933
|
|
|
1731
1934
|
// src/to-fallback.ts
|
|
1732
1935
|
var idEmoji = [
|
|
1733
|
-
// When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)
|
|
1734
|
-
// Emoji sometimes use a combination of code points, and some code points aren't visible on their own, so by adding or deleting you may unintentionally create non-visible items.
|
|
1735
|
-
// This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:
|
|
1736
|
-
// – not people or isolated anthropomorphic faces
|
|
1737
|
-
// – not flags
|
|
1738
|
-
// – more concrete than abstract
|
|
1739
|
-
// – less culturally specific
|
|
1740
|
-
// – less easily confused with another emoji in the set
|
|
1741
|
-
// – requires less special knowledge to identify
|
|
1742
|
-
// – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)
|
|
1743
|
-
// – less common as a signifier in UX
|
|
1744
|
-
// NOTE that this is intentionally an array of strings because of the way emoji graphemes work.
|
|
1745
1936
|
"\u{1F47B}",
|
|
1746
1937
|
"\u{1F479}",
|
|
1747
1938
|
"\u{1F47D}",
|
|
@@ -1877,17 +2068,18 @@ var idEmoji = [
|
|
|
1877
2068
|
];
|
|
1878
2069
|
var idHue = [
|
|
1879
2070
|
"red",
|
|
1880
|
-
|
|
2071
|
+
"orange",
|
|
1881
2072
|
"amber",
|
|
1882
|
-
|
|
2073
|
+
"yellow",
|
|
1883
2074
|
"lime",
|
|
1884
2075
|
"green",
|
|
1885
2076
|
"emerald",
|
|
1886
2077
|
"teal",
|
|
1887
2078
|
"cyan",
|
|
1888
|
-
//
|
|
1889
|
-
// '
|
|
1890
|
-
// '
|
|
2079
|
+
// Omit colors similar to primary accent.
|
|
2080
|
+
// 'sky' as const,
|
|
2081
|
+
// 'blue' as const,
|
|
2082
|
+
// 'indigo' as const,
|
|
1891
2083
|
"violet",
|
|
1892
2084
|
"purple",
|
|
1893
2085
|
"fuchsia",
|
|
@@ -1915,10 +2107,8 @@ var toFallback = (hash) => {
|
|
|
1915
2107
|
|
|
1916
2108
|
// src/tracer.ts
|
|
1917
2109
|
var Tracer = class {
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
this._recording = false;
|
|
1921
|
-
}
|
|
2110
|
+
_events = /* @__PURE__ */ new Map();
|
|
2111
|
+
_recording = false;
|
|
1922
2112
|
// TODO(burdon): Start/stop methods for recording data? By id?
|
|
1923
2113
|
// Alternatively, enable subscriptions to track/compute series.
|
|
1924
2114
|
// TODO(burdon): Hierarchical traces?
|
|
@@ -2019,7 +2209,7 @@ var stringifyTree = (node, ancestors = [], rows = []) => {
|
|
|
2019
2209
|
};
|
|
2020
2210
|
|
|
2021
2211
|
// src/types.ts
|
|
2022
|
-
var
|
|
2212
|
+
var isTruthy = (value) => !!value;
|
|
2023
2213
|
var isNonNullable = (value) => value != null;
|
|
2024
2214
|
var doAsync = async (fn) => fn();
|
|
2025
2215
|
var getProviderValue = (provider, arg) => {
|
|
@@ -2049,6 +2239,117 @@ var arrayMove = (array, from, to) => {
|
|
|
2049
2239
|
array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
|
|
2050
2240
|
return array;
|
|
2051
2241
|
};
|
|
2242
|
+
function arraySwap(array, from, to) {
|
|
2243
|
+
const current = array[from];
|
|
2244
|
+
array[from] = array[to];
|
|
2245
|
+
array[to] = current;
|
|
2246
|
+
return array;
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2249
|
+
// src/unit.ts
|
|
2250
|
+
var createFormat = (unit) => {
|
|
2251
|
+
return (n, precision = unit.precision ?? 0) => {
|
|
2252
|
+
const value = n / unit.quotient;
|
|
2253
|
+
const formattedValue = value.toLocaleString("en-US", {
|
|
2254
|
+
minimumFractionDigits: precision,
|
|
2255
|
+
maximumFractionDigits: precision
|
|
2256
|
+
});
|
|
2257
|
+
return {
|
|
2258
|
+
unit,
|
|
2259
|
+
value,
|
|
2260
|
+
formattedValue,
|
|
2261
|
+
toString: () => `${formattedValue}${unit.symbol}`
|
|
2262
|
+
};
|
|
2263
|
+
};
|
|
2264
|
+
};
|
|
2265
|
+
var MS_SECONDS = 1e3;
|
|
2266
|
+
var MS_MINUTES = 60 * MS_SECONDS;
|
|
2267
|
+
var MS_HOURS = 60 * MS_MINUTES;
|
|
2268
|
+
var Unit = {
|
|
2269
|
+
// General.
|
|
2270
|
+
Percent: createFormat({
|
|
2271
|
+
symbol: "%",
|
|
2272
|
+
quotient: 1 / 100,
|
|
2273
|
+
precision: 2
|
|
2274
|
+
}),
|
|
2275
|
+
Thousand: createFormat({
|
|
2276
|
+
symbol: "k",
|
|
2277
|
+
quotient: 1e3,
|
|
2278
|
+
precision: 2
|
|
2279
|
+
}),
|
|
2280
|
+
// Bytes (note KB vs KiB).
|
|
2281
|
+
Gigabyte: createFormat({
|
|
2282
|
+
symbol: "GB",
|
|
2283
|
+
quotient: 1e3 * 1e3 * 1e3,
|
|
2284
|
+
precision: 2
|
|
2285
|
+
}),
|
|
2286
|
+
Megabyte: createFormat({
|
|
2287
|
+
symbol: "MB",
|
|
2288
|
+
quotient: 1e3 * 1e3,
|
|
2289
|
+
precision: 2
|
|
2290
|
+
}),
|
|
2291
|
+
Kilobyte: createFormat({
|
|
2292
|
+
symbol: "KB",
|
|
2293
|
+
quotient: 1e3,
|
|
2294
|
+
precision: 2
|
|
2295
|
+
}),
|
|
2296
|
+
Byte: createFormat({
|
|
2297
|
+
symbol: "B",
|
|
2298
|
+
quotient: 1
|
|
2299
|
+
}),
|
|
2300
|
+
// Time.
|
|
2301
|
+
Hour: createFormat({
|
|
2302
|
+
symbol: "h",
|
|
2303
|
+
quotient: MS_HOURS
|
|
2304
|
+
}),
|
|
2305
|
+
Minute: createFormat({
|
|
2306
|
+
symbol: "m",
|
|
2307
|
+
quotient: MS_MINUTES
|
|
2308
|
+
}),
|
|
2309
|
+
Second: createFormat({
|
|
2310
|
+
symbol: "s",
|
|
2311
|
+
quotient: MS_SECONDS,
|
|
2312
|
+
precision: 1
|
|
2313
|
+
}),
|
|
2314
|
+
Millisecond: createFormat({
|
|
2315
|
+
symbol: "ms",
|
|
2316
|
+
quotient: 1
|
|
2317
|
+
}),
|
|
2318
|
+
Duration: (n) => {
|
|
2319
|
+
const hours = Math.floor(n / MS_HOURS);
|
|
2320
|
+
const minutes = Math.floor(n % MS_HOURS / MS_MINUTES);
|
|
2321
|
+
if (hours) {
|
|
2322
|
+
const formattedValue = minutes ? `${hours}h ${minutes}m` : `${hours}h`;
|
|
2323
|
+
return {
|
|
2324
|
+
unit: {
|
|
2325
|
+
symbol: "h",
|
|
2326
|
+
quotient: MS_HOURS
|
|
2327
|
+
},
|
|
2328
|
+
value: hours,
|
|
2329
|
+
formattedValue,
|
|
2330
|
+
toString: () => formattedValue
|
|
2331
|
+
};
|
|
2332
|
+
}
|
|
2333
|
+
if (minutes) {
|
|
2334
|
+
const seconds2 = (n - MS_MINUTES * minutes) / MS_SECONDS;
|
|
2335
|
+
const formattedValue = seconds2 ? `${minutes}m ${seconds2}s` : `${minutes}m`;
|
|
2336
|
+
return {
|
|
2337
|
+
unit: {
|
|
2338
|
+
symbol: "m",
|
|
2339
|
+
quotient: MS_MINUTES
|
|
2340
|
+
},
|
|
2341
|
+
value: minutes,
|
|
2342
|
+
formattedValue,
|
|
2343
|
+
toString: () => formattedValue
|
|
2344
|
+
};
|
|
2345
|
+
}
|
|
2346
|
+
const seconds = n >= MS_SECONDS;
|
|
2347
|
+
if (seconds) {
|
|
2348
|
+
return Unit.Second(n);
|
|
2349
|
+
}
|
|
2350
|
+
return Unit.Millisecond(n);
|
|
2351
|
+
}
|
|
2352
|
+
};
|
|
2052
2353
|
|
|
2053
2354
|
// src/url.ts
|
|
2054
2355
|
var createUrl = (url, search) => {
|
|
@@ -2061,16 +2362,20 @@ var createUrl = (url, search) => {
|
|
|
2061
2362
|
|
|
2062
2363
|
// src/weak.ts
|
|
2063
2364
|
var WeakDictionary = class {
|
|
2365
|
+
_internal = /* @__PURE__ */ new Map();
|
|
2366
|
+
_finalization = new FinalizationRegistry(({ key, ref }) => {
|
|
2367
|
+
if (this._internal.get(key) === ref) {
|
|
2368
|
+
this._internal.delete(key);
|
|
2369
|
+
}
|
|
2370
|
+
});
|
|
2064
2371
|
constructor(entries2) {
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
]));
|
|
2073
|
-
entries2?.forEach(([key, value]) => this._register(key, value));
|
|
2372
|
+
if (entries2) {
|
|
2373
|
+
for (const [key, value] of entries2) {
|
|
2374
|
+
const ref = new WeakRef(value);
|
|
2375
|
+
this._internal.set(key, ref);
|
|
2376
|
+
this._register(key, value, ref);
|
|
2377
|
+
}
|
|
2378
|
+
}
|
|
2074
2379
|
}
|
|
2075
2380
|
*entries() {
|
|
2076
2381
|
for (const [key, value] of this._internal) {
|
|
@@ -2110,10 +2415,45 @@ var WeakDictionary = class {
|
|
|
2110
2415
|
return this._internal.get(key)?.deref();
|
|
2111
2416
|
}
|
|
2112
2417
|
set(key, value) {
|
|
2113
|
-
this._internal.
|
|
2114
|
-
|
|
2418
|
+
const previous = this._internal.get(key)?.deref();
|
|
2419
|
+
if (previous) {
|
|
2420
|
+
this._unregister(previous);
|
|
2421
|
+
}
|
|
2422
|
+
const ref = new WeakRef(value);
|
|
2423
|
+
this._internal.set(key, ref);
|
|
2424
|
+
this._register(key, value, ref);
|
|
2115
2425
|
return this;
|
|
2116
2426
|
}
|
|
2427
|
+
/**
|
|
2428
|
+
* Returns the value for the given key if present, otherwise inserts and returns the default value.
|
|
2429
|
+
* @param key - The key to look up or insert.
|
|
2430
|
+
* @param defaultValue - The value to insert if the key is not present.
|
|
2431
|
+
* @returns The existing or newly inserted value.
|
|
2432
|
+
*/
|
|
2433
|
+
getOrInsert(key, defaultValue) {
|
|
2434
|
+
const existing = this.get(key);
|
|
2435
|
+
if (existing !== void 0) {
|
|
2436
|
+
return existing;
|
|
2437
|
+
}
|
|
2438
|
+
this.set(key, defaultValue);
|
|
2439
|
+
return defaultValue;
|
|
2440
|
+
}
|
|
2441
|
+
/**
|
|
2442
|
+
* Returns the value for the given key if present, otherwise computes, inserts, and returns a new value.
|
|
2443
|
+
* The callback is only invoked when the key is missing.
|
|
2444
|
+
* @param key - The key to look up or insert.
|
|
2445
|
+
* @param callbackfn - Function to compute the value if the key is not present.
|
|
2446
|
+
* @returns The existing or newly computed value.
|
|
2447
|
+
*/
|
|
2448
|
+
getOrInsertComputed(key, callbackfn) {
|
|
2449
|
+
const existing = this.get(key);
|
|
2450
|
+
if (existing !== void 0) {
|
|
2451
|
+
return existing;
|
|
2452
|
+
}
|
|
2453
|
+
const value = callbackfn(key);
|
|
2454
|
+
this.set(key, value);
|
|
2455
|
+
return value;
|
|
2456
|
+
}
|
|
2117
2457
|
has(key) {
|
|
2118
2458
|
return this._internal.has(key) && this._internal.get(key).deref() !== void 0;
|
|
2119
2459
|
}
|
|
@@ -2144,9 +2484,10 @@ var WeakDictionary = class {
|
|
|
2144
2484
|
}
|
|
2145
2485
|
});
|
|
2146
2486
|
}
|
|
2147
|
-
_register(key, value) {
|
|
2148
|
-
this._finalization.register(value,
|
|
2149
|
-
|
|
2487
|
+
_register(key, value, ref) {
|
|
2488
|
+
this._finalization.register(value, {
|
|
2489
|
+
key,
|
|
2490
|
+
ref
|
|
2150
2491
|
}, value);
|
|
2151
2492
|
}
|
|
2152
2493
|
_unregister(value) {
|
|
@@ -2162,11 +2503,14 @@ export {
|
|
|
2162
2503
|
ComplexSet,
|
|
2163
2504
|
HumanHasher,
|
|
2164
2505
|
MapEntry,
|
|
2506
|
+
SKIP,
|
|
2165
2507
|
SlidingWindowSummary,
|
|
2166
2508
|
Tracer,
|
|
2509
|
+
Unit,
|
|
2167
2510
|
WeakDictionary,
|
|
2168
2511
|
accessBy,
|
|
2169
2512
|
arrayMove,
|
|
2513
|
+
arraySwap,
|
|
2170
2514
|
arrayToBuffer,
|
|
2171
2515
|
arrayToHex,
|
|
2172
2516
|
arrayToString,
|
|
@@ -2177,19 +2521,28 @@ export {
|
|
|
2177
2521
|
capitalize,
|
|
2178
2522
|
chunkArray,
|
|
2179
2523
|
clamp,
|
|
2524
|
+
clearCaches,
|
|
2525
|
+
clearIndexedDB,
|
|
2526
|
+
clearOPFS,
|
|
2527
|
+
clearServiceWorkers,
|
|
2180
2528
|
clearUndefined,
|
|
2529
|
+
coerceArray,
|
|
2181
2530
|
compareMulti,
|
|
2182
2531
|
compareObject,
|
|
2183
2532
|
compareScalar,
|
|
2184
2533
|
compareString,
|
|
2534
|
+
compositeKey,
|
|
2185
2535
|
createBinder,
|
|
2186
2536
|
createBucketReducer,
|
|
2537
|
+
createFilename,
|
|
2187
2538
|
createGroupReducer,
|
|
2539
|
+
createReplacer,
|
|
2188
2540
|
createSetDispatch,
|
|
2189
2541
|
createUrl,
|
|
2190
2542
|
decamelize,
|
|
2191
2543
|
deepMapValues,
|
|
2192
2544
|
deepMapValuesAsync,
|
|
2545
|
+
defaultFilter,
|
|
2193
2546
|
defaultMap,
|
|
2194
2547
|
defer,
|
|
2195
2548
|
deferAsync,
|
|
@@ -2201,12 +2554,11 @@ export {
|
|
|
2201
2554
|
entry,
|
|
2202
2555
|
exponentialBackoffInterval,
|
|
2203
2556
|
forEachAsync,
|
|
2204
|
-
|
|
2557
|
+
formatErrorWithCauses,
|
|
2205
2558
|
getAsyncProviderValue,
|
|
2206
2559
|
getDate,
|
|
2207
2560
|
getDebugName,
|
|
2208
2561
|
getDeep,
|
|
2209
|
-
getFirstTwoRenderableChars,
|
|
2210
2562
|
getHostPlatform,
|
|
2211
2563
|
getPrototypeSpecificInstanceId,
|
|
2212
2564
|
getProviderValue,
|
|
@@ -2222,14 +2574,19 @@ export {
|
|
|
2222
2574
|
intersectBy,
|
|
2223
2575
|
intersection,
|
|
2224
2576
|
iosCheck,
|
|
2577
|
+
isBun,
|
|
2578
|
+
isMobile,
|
|
2579
|
+
isMobileOrTablet,
|
|
2225
2580
|
isNode,
|
|
2226
2581
|
isNonNullable,
|
|
2227
|
-
|
|
2582
|
+
isTauri,
|
|
2583
|
+
isTruthy,
|
|
2228
2584
|
joinTables,
|
|
2229
2585
|
jsonKeyReplacer,
|
|
2230
2586
|
jsonReplacer,
|
|
2231
2587
|
jsonify,
|
|
2232
2588
|
jsonlogify,
|
|
2589
|
+
kebabize,
|
|
2233
2590
|
keyToEmoji,
|
|
2234
2591
|
keyToFallback,
|
|
2235
2592
|
keyToHue,
|
|
@@ -2238,7 +2595,6 @@ export {
|
|
|
2238
2595
|
makeSet,
|
|
2239
2596
|
mapValues,
|
|
2240
2597
|
median,
|
|
2241
|
-
mobileAndTabletCheck,
|
|
2242
2598
|
numericalValues,
|
|
2243
2599
|
omit,
|
|
2244
2600
|
orderKeys,
|
|
@@ -2254,15 +2610,18 @@ export {
|
|
|
2254
2610
|
removeBy,
|
|
2255
2611
|
removeProperties,
|
|
2256
2612
|
removeUndefinedProperties,
|
|
2613
|
+
retry,
|
|
2257
2614
|
safariCheck,
|
|
2258
2615
|
safeAwaitAll,
|
|
2259
2616
|
safeInstanceof,
|
|
2260
2617
|
safeParseFloat,
|
|
2261
2618
|
safeParseInt,
|
|
2262
2619
|
safeParseJson,
|
|
2263
|
-
|
|
2620
|
+
safeStringify,
|
|
2621
|
+
safeUrl,
|
|
2264
2622
|
setDeep,
|
|
2265
2623
|
sortKeys,
|
|
2624
|
+
splitCompositeKey,
|
|
2266
2625
|
stringToArray,
|
|
2267
2626
|
stringifyTree,
|
|
2268
2627
|
stripUndefined,
|