@dxos/util 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33
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 +569 -203
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +569 -203
- 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/assume.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 -2
- 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 +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 +3 -0
- 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 +8 -0
- package/dist/types/src/string.d.ts.map +1 -1
- package/dist/types/src/string.test.d.ts +2 -0
- package/dist/types/src/string.test.d.ts.map +1 -0
- 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 -4
- package/src/assume.ts +0 -1
- 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 -2
- package/src/json.ts +2 -7
- package/src/object.ts +3 -0
- 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 -15
- 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 +19 -0
- package/src/string.ts +40 -0
- 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);
|
|
@@ -1109,7 +1155,7 @@ var arrayToString = (array) => arrayToBuffer(array).toString("hex");
|
|
|
1109
1155
|
// src/json.ts
|
|
1110
1156
|
var MAX_DEPTH = 5;
|
|
1111
1157
|
var LOG_MAX_DEPTH = 7;
|
|
1112
|
-
|
|
1158
|
+
var jsonReplacer = (key, value) => {
|
|
1113
1159
|
if (value !== null && typeof value === "object" && typeof value[inspect2.custom] === "function") {
|
|
1114
1160
|
return value[inspect2.custom]();
|
|
1115
1161
|
}
|
|
@@ -1122,7 +1168,7 @@ function jsonReplacer(key, value) {
|
|
|
1122
1168
|
}
|
|
1123
1169
|
}
|
|
1124
1170
|
return value;
|
|
1125
|
-
}
|
|
1171
|
+
};
|
|
1126
1172
|
var jsonify = (value, depth = 0, visitedObjects = /* @__PURE__ */ new WeakSet()) => {
|
|
1127
1173
|
if (depth > MAX_DEPTH) {
|
|
1128
1174
|
return null;
|
|
@@ -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) {
|
|
1605
1701
|
try {
|
|
1606
|
-
const
|
|
1607
|
-
return isNaN(
|
|
1608
|
-
} catch
|
|
1702
|
+
const value = parseInt(str ?? "");
|
|
1703
|
+
return isNaN(value) ? defaultValue : value;
|
|
1704
|
+
} catch {
|
|
1705
|
+
return defaultValue;
|
|
1706
|
+
}
|
|
1707
|
+
}
|
|
1708
|
+
function safeParseFloat(str, defaultValue) {
|
|
1709
|
+
try {
|
|
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,6 +1898,28 @@ var capitalize = (str) => {
|
|
|
1711
1898
|
}
|
|
1712
1899
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
1713
1900
|
};
|
|
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());
|
|
1714
1923
|
|
|
1715
1924
|
// src/sum.ts
|
|
1716
1925
|
var sum = (values) => values.reduce((a, b) => a + b, 0);
|
|
@@ -1724,18 +1933,6 @@ var throwUnhandledError = (error) => {
|
|
|
1724
1933
|
|
|
1725
1934
|
// src/to-fallback.ts
|
|
1726
1935
|
var idEmoji = [
|
|
1727
|
-
// When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)
|
|
1728
|
-
// 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.
|
|
1729
|
-
// This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:
|
|
1730
|
-
// – not people or isolated anthropomorphic faces
|
|
1731
|
-
// – not flags
|
|
1732
|
-
// – more concrete than abstract
|
|
1733
|
-
// – less culturally specific
|
|
1734
|
-
// – less easily confused with another emoji in the set
|
|
1735
|
-
// – requires less special knowledge to identify
|
|
1736
|
-
// – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)
|
|
1737
|
-
// – less common as a signifier in UX
|
|
1738
|
-
// NOTE that this is intentionally an array of strings because of the way emoji graphemes work.
|
|
1739
1936
|
"\u{1F47B}",
|
|
1740
1937
|
"\u{1F479}",
|
|
1741
1938
|
"\u{1F47D}",
|
|
@@ -1871,17 +2068,18 @@ var idEmoji = [
|
|
|
1871
2068
|
];
|
|
1872
2069
|
var idHue = [
|
|
1873
2070
|
"red",
|
|
1874
|
-
|
|
2071
|
+
"orange",
|
|
1875
2072
|
"amber",
|
|
1876
|
-
|
|
2073
|
+
"yellow",
|
|
1877
2074
|
"lime",
|
|
1878
2075
|
"green",
|
|
1879
2076
|
"emerald",
|
|
1880
2077
|
"teal",
|
|
1881
2078
|
"cyan",
|
|
1882
|
-
//
|
|
1883
|
-
// '
|
|
1884
|
-
// '
|
|
2079
|
+
// Omit colors similar to primary accent.
|
|
2080
|
+
// 'sky' as const,
|
|
2081
|
+
// 'blue' as const,
|
|
2082
|
+
// 'indigo' as const,
|
|
1885
2083
|
"violet",
|
|
1886
2084
|
"purple",
|
|
1887
2085
|
"fuchsia",
|
|
@@ -1909,10 +2107,8 @@ var toFallback = (hash) => {
|
|
|
1909
2107
|
|
|
1910
2108
|
// src/tracer.ts
|
|
1911
2109
|
var Tracer = class {
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
this._recording = false;
|
|
1915
|
-
}
|
|
2110
|
+
_events = /* @__PURE__ */ new Map();
|
|
2111
|
+
_recording = false;
|
|
1916
2112
|
// TODO(burdon): Start/stop methods for recording data? By id?
|
|
1917
2113
|
// Alternatively, enable subscriptions to track/compute series.
|
|
1918
2114
|
// TODO(burdon): Hierarchical traces?
|
|
@@ -2013,7 +2209,7 @@ var stringifyTree = (node, ancestors = [], rows = []) => {
|
|
|
2013
2209
|
};
|
|
2014
2210
|
|
|
2015
2211
|
// src/types.ts
|
|
2016
|
-
var
|
|
2212
|
+
var isTruthy = (value) => !!value;
|
|
2017
2213
|
var isNonNullable = (value) => value != null;
|
|
2018
2214
|
var doAsync = async (fn) => fn();
|
|
2019
2215
|
var getProviderValue = (provider, arg) => {
|
|
@@ -2043,6 +2239,117 @@ var arrayMove = (array, from, to) => {
|
|
|
2043
2239
|
array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
|
|
2044
2240
|
return array;
|
|
2045
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
|
+
};
|
|
2046
2353
|
|
|
2047
2354
|
// src/url.ts
|
|
2048
2355
|
var createUrl = (url, search) => {
|
|
@@ -2055,16 +2362,20 @@ var createUrl = (url, search) => {
|
|
|
2055
2362
|
|
|
2056
2363
|
// src/weak.ts
|
|
2057
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
|
+
});
|
|
2058
2371
|
constructor(entries2) {
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
]));
|
|
2067
|
-
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
|
+
}
|
|
2068
2379
|
}
|
|
2069
2380
|
*entries() {
|
|
2070
2381
|
for (const [key, value] of this._internal) {
|
|
@@ -2104,10 +2415,45 @@ var WeakDictionary = class {
|
|
|
2104
2415
|
return this._internal.get(key)?.deref();
|
|
2105
2416
|
}
|
|
2106
2417
|
set(key, value) {
|
|
2107
|
-
this._internal.
|
|
2108
|
-
|
|
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);
|
|
2109
2425
|
return this;
|
|
2110
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
|
+
}
|
|
2111
2457
|
has(key) {
|
|
2112
2458
|
return this._internal.has(key) && this._internal.get(key).deref() !== void 0;
|
|
2113
2459
|
}
|
|
@@ -2138,9 +2484,10 @@ var WeakDictionary = class {
|
|
|
2138
2484
|
}
|
|
2139
2485
|
});
|
|
2140
2486
|
}
|
|
2141
|
-
_register(key, value) {
|
|
2142
|
-
this._finalization.register(value,
|
|
2143
|
-
|
|
2487
|
+
_register(key, value, ref) {
|
|
2488
|
+
this._finalization.register(value, {
|
|
2489
|
+
key,
|
|
2490
|
+
ref
|
|
2144
2491
|
}, value);
|
|
2145
2492
|
}
|
|
2146
2493
|
_unregister(value) {
|
|
@@ -2156,11 +2503,14 @@ export {
|
|
|
2156
2503
|
ComplexSet,
|
|
2157
2504
|
HumanHasher,
|
|
2158
2505
|
MapEntry,
|
|
2506
|
+
SKIP,
|
|
2159
2507
|
SlidingWindowSummary,
|
|
2160
2508
|
Tracer,
|
|
2509
|
+
Unit,
|
|
2161
2510
|
WeakDictionary,
|
|
2162
2511
|
accessBy,
|
|
2163
2512
|
arrayMove,
|
|
2513
|
+
arraySwap,
|
|
2164
2514
|
arrayToBuffer,
|
|
2165
2515
|
arrayToHex,
|
|
2166
2516
|
arrayToString,
|
|
@@ -2171,19 +2521,28 @@ export {
|
|
|
2171
2521
|
capitalize,
|
|
2172
2522
|
chunkArray,
|
|
2173
2523
|
clamp,
|
|
2524
|
+
clearCaches,
|
|
2525
|
+
clearIndexedDB,
|
|
2526
|
+
clearOPFS,
|
|
2527
|
+
clearServiceWorkers,
|
|
2174
2528
|
clearUndefined,
|
|
2529
|
+
coerceArray,
|
|
2175
2530
|
compareMulti,
|
|
2176
2531
|
compareObject,
|
|
2177
2532
|
compareScalar,
|
|
2178
2533
|
compareString,
|
|
2534
|
+
compositeKey,
|
|
2179
2535
|
createBinder,
|
|
2180
2536
|
createBucketReducer,
|
|
2537
|
+
createFilename,
|
|
2181
2538
|
createGroupReducer,
|
|
2539
|
+
createReplacer,
|
|
2182
2540
|
createSetDispatch,
|
|
2183
2541
|
createUrl,
|
|
2184
2542
|
decamelize,
|
|
2185
2543
|
deepMapValues,
|
|
2186
2544
|
deepMapValuesAsync,
|
|
2545
|
+
defaultFilter,
|
|
2187
2546
|
defaultMap,
|
|
2188
2547
|
defer,
|
|
2189
2548
|
deferAsync,
|
|
@@ -2195,12 +2554,11 @@ export {
|
|
|
2195
2554
|
entry,
|
|
2196
2555
|
exponentialBackoffInterval,
|
|
2197
2556
|
forEachAsync,
|
|
2198
|
-
|
|
2557
|
+
formatErrorWithCauses,
|
|
2199
2558
|
getAsyncProviderValue,
|
|
2200
2559
|
getDate,
|
|
2201
2560
|
getDebugName,
|
|
2202
2561
|
getDeep,
|
|
2203
|
-
getFirstTwoRenderableChars,
|
|
2204
2562
|
getHostPlatform,
|
|
2205
2563
|
getPrototypeSpecificInstanceId,
|
|
2206
2564
|
getProviderValue,
|
|
@@ -2216,14 +2574,19 @@ export {
|
|
|
2216
2574
|
intersectBy,
|
|
2217
2575
|
intersection,
|
|
2218
2576
|
iosCheck,
|
|
2577
|
+
isBun,
|
|
2578
|
+
isMobile,
|
|
2579
|
+
isMobileOrTablet,
|
|
2219
2580
|
isNode,
|
|
2220
2581
|
isNonNullable,
|
|
2221
|
-
|
|
2582
|
+
isTauri,
|
|
2583
|
+
isTruthy,
|
|
2222
2584
|
joinTables,
|
|
2223
2585
|
jsonKeyReplacer,
|
|
2224
2586
|
jsonReplacer,
|
|
2225
2587
|
jsonify,
|
|
2226
2588
|
jsonlogify,
|
|
2589
|
+
kebabize,
|
|
2227
2590
|
keyToEmoji,
|
|
2228
2591
|
keyToFallback,
|
|
2229
2592
|
keyToHue,
|
|
@@ -2232,7 +2595,6 @@ export {
|
|
|
2232
2595
|
makeSet,
|
|
2233
2596
|
mapValues,
|
|
2234
2597
|
median,
|
|
2235
|
-
mobileAndTabletCheck,
|
|
2236
2598
|
numericalValues,
|
|
2237
2599
|
omit,
|
|
2238
2600
|
orderKeys,
|
|
@@ -2248,15 +2610,18 @@ export {
|
|
|
2248
2610
|
removeBy,
|
|
2249
2611
|
removeProperties,
|
|
2250
2612
|
removeUndefinedProperties,
|
|
2613
|
+
retry,
|
|
2251
2614
|
safariCheck,
|
|
2252
2615
|
safeAwaitAll,
|
|
2253
2616
|
safeInstanceof,
|
|
2254
2617
|
safeParseFloat,
|
|
2255
2618
|
safeParseInt,
|
|
2256
2619
|
safeParseJson,
|
|
2257
|
-
|
|
2620
|
+
safeStringify,
|
|
2621
|
+
safeUrl,
|
|
2258
2622
|
setDeep,
|
|
2259
2623
|
sortKeys,
|
|
2624
|
+
splitCompositeKey,
|
|
2260
2625
|
stringToArray,
|
|
2261
2626
|
stringifyTree,
|
|
2262
2627
|
stripUndefined,
|
|
@@ -2266,6 +2631,7 @@ export {
|
|
|
2266
2631
|
toFallback,
|
|
2267
2632
|
toHue,
|
|
2268
2633
|
tracer,
|
|
2634
|
+
trim,
|
|
2269
2635
|
visitValues
|
|
2270
2636
|
};
|
|
2271
2637
|
//# sourceMappingURL=index.mjs.map
|