@dxos/util 0.8.4-main.ae835ea → 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 +455 -157
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +455 -157
- 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 +6 -0
- 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.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 +23 -5
- 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 +12 -13
- package/dist/types/src/unit.d.ts.map +1 -1
- 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 +12 -14
- 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 +26 -0
- package/src/circular-buffer.ts +5 -0
- 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/index.ts +6 -0
- package/src/platform.ts +35 -3
- package/src/retry.ts +74 -0
- package/src/safe-parse.ts +27 -16
- package/src/safe-stringify.test.ts +96 -0
- package/src/safe-stringify.ts +153 -0
- package/src/string.ts +6 -2
- package/src/to-fallback.ts +39 -156
- package/src/types.test.ts +11 -1
- package/src/types.ts +39 -11
- package/src/unit.test.ts +1 -1
- package/src/unit.ts +63 -28
- 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/src/explicit-resource-management-polyfill.ts +0 -13
|
@@ -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 "@dxos/node-std/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,34 +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 {
|
|
210
251
|
_callback;
|
|
211
252
|
call(...args) {
|
|
212
|
-
invariant2(this._callback, "Callback not set"
|
|
213
|
-
F: __dxlog_file2,
|
|
214
|
-
L: 20,
|
|
215
|
-
S: this,
|
|
216
|
-
A: [
|
|
217
|
-
"this._callback",
|
|
218
|
-
"'Callback not set'"
|
|
219
|
-
]
|
|
220
|
-
});
|
|
253
|
+
invariant2(this._callback, "Callback not set");
|
|
221
254
|
return this._callback(...args);
|
|
222
255
|
}
|
|
223
256
|
callIfSet(...args) {
|
|
224
257
|
return this._callback?.(...args);
|
|
225
258
|
}
|
|
226
259
|
set(callback) {
|
|
227
|
-
invariant2(!this._callback, "Callback already set"
|
|
228
|
-
F: __dxlog_file2,
|
|
229
|
-
L: 29,
|
|
230
|
-
S: this,
|
|
231
|
-
A: [
|
|
232
|
-
"!this._callback",
|
|
233
|
-
"'Callback already set'"
|
|
234
|
-
]
|
|
235
|
-
});
|
|
260
|
+
invariant2(!this._callback, "Callback already set");
|
|
236
261
|
this._callback = callback;
|
|
237
262
|
}
|
|
238
263
|
isSet() {
|
|
@@ -300,21 +325,12 @@ var chunkArray = (array, size) => {
|
|
|
300
325
|
|
|
301
326
|
// src/circular-buffer.ts
|
|
302
327
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
303
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/util/src/circular-buffer.ts";
|
|
304
328
|
var CircularBuffer = class {
|
|
305
329
|
_buffer;
|
|
306
330
|
_nextIndex = 0;
|
|
307
331
|
_elementCount = 0;
|
|
308
332
|
constructor(size) {
|
|
309
|
-
invariant3(size >= 1
|
|
310
|
-
F: __dxlog_file3,
|
|
311
|
-
L: 13,
|
|
312
|
-
S: this,
|
|
313
|
-
A: [
|
|
314
|
-
"size >= 1",
|
|
315
|
-
""
|
|
316
|
-
]
|
|
317
|
-
});
|
|
333
|
+
invariant3(size >= 1);
|
|
318
334
|
this._buffer = new Array(size);
|
|
319
335
|
}
|
|
320
336
|
push(element) {
|
|
@@ -327,6 +343,10 @@ var CircularBuffer = class {
|
|
|
327
343
|
get elementCount() {
|
|
328
344
|
return this._elementCount;
|
|
329
345
|
}
|
|
346
|
+
clear() {
|
|
347
|
+
this._nextIndex = 0;
|
|
348
|
+
this._elementCount = 0;
|
|
349
|
+
}
|
|
330
350
|
getLast() {
|
|
331
351
|
if (this._elementCount === 0) {
|
|
332
352
|
return void 0;
|
|
@@ -520,6 +540,36 @@ var ComplexMap = class _ComplexMap {
|
|
|
520
540
|
this._values.set(primitive, value);
|
|
521
541
|
return this;
|
|
522
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
|
+
}
|
|
523
573
|
get size() {
|
|
524
574
|
return this._keys.size;
|
|
525
575
|
}
|
|
@@ -559,21 +609,15 @@ var makeMap = (keyProjection) => class BoundComplexMap extends ComplexMap {
|
|
|
559
609
|
}
|
|
560
610
|
};
|
|
561
611
|
|
|
612
|
+
// src/composite-key.ts
|
|
613
|
+
var SEPARATOR = ":";
|
|
614
|
+
var compositeKey = (...parts) => parts.join(SEPARATOR);
|
|
615
|
+
var splitCompositeKey = (key) => key.split(SEPARATOR);
|
|
616
|
+
|
|
562
617
|
// src/deep.ts
|
|
563
|
-
import get from "lodash.get";
|
|
564
|
-
import set from "lodash.set";
|
|
565
618
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
566
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/util/src/deep.ts";
|
|
567
619
|
var setDeep = (obj, path, value) => {
|
|
568
|
-
invariant4(path.length > 0
|
|
569
|
-
F: __dxlog_file4,
|
|
570
|
-
L: 18,
|
|
571
|
-
S: void 0,
|
|
572
|
-
A: [
|
|
573
|
-
"path.length > 0",
|
|
574
|
-
""
|
|
575
|
-
]
|
|
576
|
-
});
|
|
620
|
+
invariant4(path.length > 0);
|
|
577
621
|
let parent = obj;
|
|
578
622
|
for (const key of path.slice(0, -1)) {
|
|
579
623
|
if (parent[key] === void 0) {
|
|
@@ -596,11 +640,8 @@ var getDeep = (obj, path) => {
|
|
|
596
640
|
// src/defer-function.ts
|
|
597
641
|
var deferFunction = (fnProvider) => (...args) => fnProvider()(...args);
|
|
598
642
|
|
|
599
|
-
// src/explicit-resource-management-polyfill.ts
|
|
600
|
-
Symbol.dispose ??= Symbol("Symbol.dispose");
|
|
601
|
-
Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
|
|
602
|
-
|
|
603
643
|
// src/defer.ts
|
|
644
|
+
import "@hazae41/symbol-dispose-polyfill";
|
|
604
645
|
var defer = (fn) => new DeferGuard(fn);
|
|
605
646
|
var DeferGuard = class {
|
|
606
647
|
_fn;
|
|
@@ -661,6 +702,29 @@ var MapEntry = class {
|
|
|
661
702
|
}
|
|
662
703
|
};
|
|
663
704
|
|
|
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");
|
|
720
|
+
};
|
|
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
|
+
|
|
664
728
|
// src/for-each-async.ts
|
|
665
729
|
var forEachAsync = (items, fn) => Promise.all(items.map(fn));
|
|
666
730
|
|
|
@@ -1007,7 +1071,7 @@ var defaultMap = (map, key, def) => {
|
|
|
1007
1071
|
};
|
|
1008
1072
|
|
|
1009
1073
|
// src/instance-id.ts
|
|
1010
|
-
var symbol = Symbol.for("dxos.instance-contexts");
|
|
1074
|
+
var symbol = /* @__PURE__ */ Symbol.for("dxos.instance-contexts");
|
|
1011
1075
|
var instanceContexts = globalThis[symbol] ??= /* @__PURE__ */ new WeakMap();
|
|
1012
1076
|
var getPrototypeSpecificInstanceId = (instance) => {
|
|
1013
1077
|
const prototype = Object.getPrototypeOf(instance);
|
|
@@ -1356,7 +1420,18 @@ var omit = (obj, keys2) => {
|
|
|
1356
1420
|
|
|
1357
1421
|
// src/platform.ts
|
|
1358
1422
|
var isNode = () => typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
1359
|
-
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 = () => {
|
|
1360
1435
|
let check = false;
|
|
1361
1436
|
((a) => {
|
|
1362
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))) {
|
|
@@ -1378,7 +1453,7 @@ var iosCheck = () => {
|
|
|
1378
1453
|
};
|
|
1379
1454
|
var safariCheck = () => typeof navigator !== "undefined" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|
1380
1455
|
var getHostPlatform = () => {
|
|
1381
|
-
if (!("navigator" in
|
|
1456
|
+
if (!("navigator" in globalThis)) {
|
|
1382
1457
|
return "unknown";
|
|
1383
1458
|
}
|
|
1384
1459
|
const platform = (navigator.userAgentData?.platform || navigator.platform)?.toLowerCase();
|
|
@@ -1554,6 +1629,43 @@ var removeProperties = (root, condition) => {
|
|
|
1554
1629
|
return result;
|
|
1555
1630
|
};
|
|
1556
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
|
+
|
|
1557
1669
|
// src/safe-await.ts
|
|
1558
1670
|
var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
1559
1671
|
const failedItems = [];
|
|
@@ -1573,7 +1685,7 @@ var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
|
1573
1685
|
};
|
|
1574
1686
|
|
|
1575
1687
|
// src/safe-instanceof.ts
|
|
1576
|
-
var instanceTag = Symbol("instanceTag");
|
|
1688
|
+
var instanceTag = /* @__PURE__ */ Symbol("instanceTag");
|
|
1577
1689
|
var safeInstanceof = (tag) => (target) => {
|
|
1578
1690
|
target.prototype[instanceTag] = tag;
|
|
1579
1691
|
Object.defineProperty(target.prototype, Symbol.hasInstance, {
|
|
@@ -1585,34 +1697,131 @@ var safeInstanceof = (tag) => (target) => {
|
|
|
1585
1697
|
};
|
|
1586
1698
|
|
|
1587
1699
|
// src/safe-parse.ts
|
|
1588
|
-
|
|
1700
|
+
function safeParseInt(str, defaultValue) {
|
|
1589
1701
|
try {
|
|
1590
|
-
const
|
|
1591
|
-
return isNaN(
|
|
1702
|
+
const value = parseInt(str ?? "");
|
|
1703
|
+
return isNaN(value) ? defaultValue : value;
|
|
1592
1704
|
} catch {
|
|
1593
1705
|
return defaultValue;
|
|
1594
1706
|
}
|
|
1595
|
-
}
|
|
1596
|
-
|
|
1707
|
+
}
|
|
1708
|
+
function safeParseFloat(str, defaultValue) {
|
|
1597
1709
|
try {
|
|
1598
|
-
|
|
1710
|
+
const value = parseFloat(str ?? "");
|
|
1711
|
+
return isNaN(value) ? defaultValue : value;
|
|
1599
1712
|
} catch {
|
|
1600
|
-
return defaultValue
|
|
1713
|
+
return defaultValue;
|
|
1601
1714
|
}
|
|
1602
|
-
}
|
|
1603
|
-
var safeParseJson = (
|
|
1604
|
-
if (
|
|
1715
|
+
}
|
|
1716
|
+
var safeParseJson = (str, defaultValue) => {
|
|
1717
|
+
if (str && str.length > 0) {
|
|
1605
1718
|
try {
|
|
1606
|
-
return JSON.parse(
|
|
1719
|
+
return JSON.parse(str);
|
|
1607
1720
|
} catch {
|
|
1608
1721
|
}
|
|
1609
1722
|
}
|
|
1610
1723
|
return defaultValue;
|
|
1611
1724
|
};
|
|
1725
|
+
var safeUrl = (str) => {
|
|
1726
|
+
try {
|
|
1727
|
+
return new URL(str ?? "");
|
|
1728
|
+
} catch {
|
|
1729
|
+
return void 0;
|
|
1730
|
+
}
|
|
1731
|
+
};
|
|
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) {
|
|
1738
|
+
try {
|
|
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}`;
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
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
|
+
};
|
|
1820
|
+
};
|
|
1821
|
+
var defaultFilter = createReplacer();
|
|
1612
1822
|
|
|
1613
1823
|
// src/sliding-window-summary.ts
|
|
1614
1824
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1615
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/util/src/sliding-window-summary.ts";
|
|
1616
1825
|
var SlidingWindowSummary = class {
|
|
1617
1826
|
_buffer;
|
|
1618
1827
|
_sum = 0;
|
|
@@ -1620,15 +1829,7 @@ var SlidingWindowSummary = class {
|
|
|
1620
1829
|
constructor(options) {
|
|
1621
1830
|
this._buffer = new CircularBuffer(options.dataPoints);
|
|
1622
1831
|
if (options.precision != null) {
|
|
1623
|
-
invariant5(options.precision >= 0
|
|
1624
|
-
F: __dxlog_file5,
|
|
1625
|
-
L: 26,
|
|
1626
|
-
S: this,
|
|
1627
|
-
A: [
|
|
1628
|
-
"options.precision >= 0",
|
|
1629
|
-
""
|
|
1630
|
-
]
|
|
1631
|
-
});
|
|
1832
|
+
invariant5(options.precision >= 0);
|
|
1632
1833
|
this._precision = Math.pow(10, options.precision);
|
|
1633
1834
|
}
|
|
1634
1835
|
}
|
|
@@ -1709,8 +1910,12 @@ function trim(strings, ...values) {
|
|
|
1709
1910
|
return out;
|
|
1710
1911
|
}, "");
|
|
1711
1912
|
const lines = raw.split("\n");
|
|
1712
|
-
while (lines.length && !lines[0].trim())
|
|
1713
|
-
|
|
1913
|
+
while (lines.length && !lines[0].trim()) {
|
|
1914
|
+
lines.shift();
|
|
1915
|
+
}
|
|
1916
|
+
while (lines.length && !lines[lines.length - 1].trim()) {
|
|
1917
|
+
lines.pop();
|
|
1918
|
+
}
|
|
1714
1919
|
const minIndent = Math.min(...lines.filter((l) => l.trim()).map((l) => l.match(/^[ \t]*/)?.[0].length ?? 0));
|
|
1715
1920
|
return lines.map((l) => l.slice(minIndent)).join("\n");
|
|
1716
1921
|
}
|
|
@@ -1728,18 +1933,6 @@ var throwUnhandledError = (error) => {
|
|
|
1728
1933
|
|
|
1729
1934
|
// src/to-fallback.ts
|
|
1730
1935
|
var idEmoji = [
|
|
1731
|
-
// When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)
|
|
1732
|
-
// 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.
|
|
1733
|
-
// This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:
|
|
1734
|
-
// – not people or isolated anthropomorphic faces
|
|
1735
|
-
// – not flags
|
|
1736
|
-
// – more concrete than abstract
|
|
1737
|
-
// – less culturally specific
|
|
1738
|
-
// – less easily confused with another emoji in the set
|
|
1739
|
-
// – requires less special knowledge to identify
|
|
1740
|
-
// – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)
|
|
1741
|
-
// – less common as a signifier in UX
|
|
1742
|
-
// NOTE that this is intentionally an array of strings because of the way emoji graphemes work.
|
|
1743
1936
|
"\u{1F47B}",
|
|
1744
1937
|
"\u{1F479}",
|
|
1745
1938
|
"\u{1F47D}",
|
|
@@ -1875,17 +2068,18 @@ var idEmoji = [
|
|
|
1875
2068
|
];
|
|
1876
2069
|
var idHue = [
|
|
1877
2070
|
"red",
|
|
1878
|
-
|
|
2071
|
+
"orange",
|
|
1879
2072
|
"amber",
|
|
1880
|
-
|
|
2073
|
+
"yellow",
|
|
1881
2074
|
"lime",
|
|
1882
2075
|
"green",
|
|
1883
2076
|
"emerald",
|
|
1884
2077
|
"teal",
|
|
1885
2078
|
"cyan",
|
|
1886
|
-
//
|
|
1887
|
-
// '
|
|
1888
|
-
// '
|
|
2079
|
+
// Omit colors similar to primary accent.
|
|
2080
|
+
// 'sky' as const,
|
|
2081
|
+
// 'blue' as const,
|
|
2082
|
+
// 'indigo' as const,
|
|
1889
2083
|
"violet",
|
|
1890
2084
|
"purple",
|
|
1891
2085
|
"fuchsia",
|
|
@@ -2045,69 +2239,116 @@ var arrayMove = (array, from, to) => {
|
|
|
2045
2239
|
array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
|
|
2046
2240
|
return array;
|
|
2047
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
|
+
}
|
|
2048
2248
|
|
|
2049
2249
|
// src/unit.ts
|
|
2050
|
-
var
|
|
2051
|
-
return (n, precision =
|
|
2250
|
+
var createFormat = (unit) => {
|
|
2251
|
+
return (n, precision = unit.precision ?? 0) => {
|
|
2052
2252
|
const value = n / unit.quotient;
|
|
2053
|
-
|
|
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
|
+
};
|
|
2054
2263
|
};
|
|
2055
2264
|
};
|
|
2265
|
+
var MS_SECONDS = 1e3;
|
|
2266
|
+
var MS_MINUTES = 60 * MS_SECONDS;
|
|
2267
|
+
var MS_HOURS = 60 * MS_MINUTES;
|
|
2056
2268
|
var Unit = {
|
|
2057
|
-
//
|
|
2058
|
-
|
|
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({
|
|
2059
2302
|
symbol: "h",
|
|
2060
|
-
quotient:
|
|
2303
|
+
quotient: MS_HOURS
|
|
2061
2304
|
}),
|
|
2062
|
-
Minute:
|
|
2305
|
+
Minute: createFormat({
|
|
2063
2306
|
symbol: "m",
|
|
2064
|
-
quotient:
|
|
2307
|
+
quotient: MS_MINUTES
|
|
2065
2308
|
}),
|
|
2066
|
-
Second:
|
|
2309
|
+
Second: createFormat({
|
|
2067
2310
|
symbol: "s",
|
|
2068
|
-
quotient:
|
|
2311
|
+
quotient: MS_SECONDS,
|
|
2312
|
+
precision: 1
|
|
2069
2313
|
}),
|
|
2070
|
-
Millisecond:
|
|
2314
|
+
Millisecond: createFormat({
|
|
2071
2315
|
symbol: "ms",
|
|
2072
2316
|
quotient: 1
|
|
2073
2317
|
}),
|
|
2074
2318
|
Duration: (n) => {
|
|
2075
|
-
const hours = Math.floor(n /
|
|
2076
|
-
const minutes = Math.floor(n %
|
|
2319
|
+
const hours = Math.floor(n / MS_HOURS);
|
|
2320
|
+
const minutes = Math.floor(n % MS_HOURS / MS_MINUTES);
|
|
2077
2321
|
if (hours) {
|
|
2078
|
-
|
|
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
|
+
};
|
|
2079
2332
|
}
|
|
2080
|
-
const seconds = Math.floor(n % (60 * 1e3) / 1e3);
|
|
2081
2333
|
if (minutes) {
|
|
2082
|
-
|
|
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
|
+
};
|
|
2083
2345
|
}
|
|
2346
|
+
const seconds = n >= MS_SECONDS;
|
|
2084
2347
|
if (seconds) {
|
|
2085
|
-
return
|
|
2348
|
+
return Unit.Second(n);
|
|
2086
2349
|
}
|
|
2087
|
-
return
|
|
2088
|
-
}
|
|
2089
|
-
// bytes (note KB via KiB).
|
|
2090
|
-
Gigabyte: Formatter({
|
|
2091
|
-
symbol: "GB",
|
|
2092
|
-
quotient: 1e3 * 1e3 * 1e3
|
|
2093
|
-
}),
|
|
2094
|
-
Megabyte: Formatter({
|
|
2095
|
-
symbol: "MB",
|
|
2096
|
-
quotient: 1e3 * 1e3
|
|
2097
|
-
}),
|
|
2098
|
-
Kilobyte: Formatter({
|
|
2099
|
-
symbol: "KB",
|
|
2100
|
-
quotient: 1e3
|
|
2101
|
-
}),
|
|
2102
|
-
// general.
|
|
2103
|
-
Thousand: Formatter({
|
|
2104
|
-
symbol: "k",
|
|
2105
|
-
quotient: 1e3
|
|
2106
|
-
}),
|
|
2107
|
-
Percent: Formatter({
|
|
2108
|
-
symbol: "%",
|
|
2109
|
-
quotient: 1 / 100
|
|
2110
|
-
})
|
|
2350
|
+
return Unit.Millisecond(n);
|
|
2351
|
+
}
|
|
2111
2352
|
};
|
|
2112
2353
|
|
|
2113
2354
|
// src/url.ts
|
|
@@ -2122,15 +2363,19 @@ var createUrl = (url, search) => {
|
|
|
2122
2363
|
// src/weak.ts
|
|
2123
2364
|
var WeakDictionary = class {
|
|
2124
2365
|
_internal = /* @__PURE__ */ new Map();
|
|
2125
|
-
_finalization = new FinalizationRegistry((
|
|
2126
|
-
|
|
2366
|
+
_finalization = new FinalizationRegistry(({ key, ref }) => {
|
|
2367
|
+
if (this._internal.get(key) === ref) {
|
|
2368
|
+
this._internal.delete(key);
|
|
2369
|
+
}
|
|
2127
2370
|
});
|
|
2128
2371
|
constructor(entries2) {
|
|
2129
|
-
|
|
2130
|
-
key,
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
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
|
+
}
|
|
2134
2379
|
}
|
|
2135
2380
|
*entries() {
|
|
2136
2381
|
for (const [key, value] of this._internal) {
|
|
@@ -2170,10 +2415,45 @@ var WeakDictionary = class {
|
|
|
2170
2415
|
return this._internal.get(key)?.deref();
|
|
2171
2416
|
}
|
|
2172
2417
|
set(key, value) {
|
|
2173
|
-
this._internal.
|
|
2174
|
-
|
|
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);
|
|
2175
2425
|
return this;
|
|
2176
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
|
+
}
|
|
2177
2457
|
has(key) {
|
|
2178
2458
|
return this._internal.has(key) && this._internal.get(key).deref() !== void 0;
|
|
2179
2459
|
}
|
|
@@ -2204,9 +2484,10 @@ var WeakDictionary = class {
|
|
|
2204
2484
|
}
|
|
2205
2485
|
});
|
|
2206
2486
|
}
|
|
2207
|
-
_register(key, value) {
|
|
2208
|
-
this._finalization.register(value,
|
|
2209
|
-
|
|
2487
|
+
_register(key, value, ref) {
|
|
2488
|
+
this._finalization.register(value, {
|
|
2489
|
+
key,
|
|
2490
|
+
ref
|
|
2210
2491
|
}, value);
|
|
2211
2492
|
}
|
|
2212
2493
|
_unregister(value) {
|
|
@@ -2222,12 +2503,14 @@ export {
|
|
|
2222
2503
|
ComplexSet,
|
|
2223
2504
|
HumanHasher,
|
|
2224
2505
|
MapEntry,
|
|
2506
|
+
SKIP,
|
|
2225
2507
|
SlidingWindowSummary,
|
|
2226
2508
|
Tracer,
|
|
2227
2509
|
Unit,
|
|
2228
2510
|
WeakDictionary,
|
|
2229
2511
|
accessBy,
|
|
2230
2512
|
arrayMove,
|
|
2513
|
+
arraySwap,
|
|
2231
2514
|
arrayToBuffer,
|
|
2232
2515
|
arrayToHex,
|
|
2233
2516
|
arrayToString,
|
|
@@ -2238,19 +2521,28 @@ export {
|
|
|
2238
2521
|
capitalize,
|
|
2239
2522
|
chunkArray,
|
|
2240
2523
|
clamp,
|
|
2524
|
+
clearCaches,
|
|
2525
|
+
clearIndexedDB,
|
|
2526
|
+
clearOPFS,
|
|
2527
|
+
clearServiceWorkers,
|
|
2241
2528
|
clearUndefined,
|
|
2529
|
+
coerceArray,
|
|
2242
2530
|
compareMulti,
|
|
2243
2531
|
compareObject,
|
|
2244
2532
|
compareScalar,
|
|
2245
2533
|
compareString,
|
|
2534
|
+
compositeKey,
|
|
2246
2535
|
createBinder,
|
|
2247
2536
|
createBucketReducer,
|
|
2537
|
+
createFilename,
|
|
2248
2538
|
createGroupReducer,
|
|
2539
|
+
createReplacer,
|
|
2249
2540
|
createSetDispatch,
|
|
2250
2541
|
createUrl,
|
|
2251
2542
|
decamelize,
|
|
2252
2543
|
deepMapValues,
|
|
2253
2544
|
deepMapValuesAsync,
|
|
2545
|
+
defaultFilter,
|
|
2254
2546
|
defaultMap,
|
|
2255
2547
|
defer,
|
|
2256
2548
|
deferAsync,
|
|
@@ -2262,7 +2554,7 @@ export {
|
|
|
2262
2554
|
entry,
|
|
2263
2555
|
exponentialBackoffInterval,
|
|
2264
2556
|
forEachAsync,
|
|
2265
|
-
|
|
2557
|
+
formatErrorWithCauses,
|
|
2266
2558
|
getAsyncProviderValue,
|
|
2267
2559
|
getDate,
|
|
2268
2560
|
getDebugName,
|
|
@@ -2282,8 +2574,12 @@ export {
|
|
|
2282
2574
|
intersectBy,
|
|
2283
2575
|
intersection,
|
|
2284
2576
|
iosCheck,
|
|
2577
|
+
isBun,
|
|
2578
|
+
isMobile,
|
|
2579
|
+
isMobileOrTablet,
|
|
2285
2580
|
isNode,
|
|
2286
2581
|
isNonNullable,
|
|
2582
|
+
isTauri,
|
|
2287
2583
|
isTruthy,
|
|
2288
2584
|
joinTables,
|
|
2289
2585
|
jsonKeyReplacer,
|
|
@@ -2299,7 +2595,6 @@ export {
|
|
|
2299
2595
|
makeSet,
|
|
2300
2596
|
mapValues,
|
|
2301
2597
|
median,
|
|
2302
|
-
mobileAndTabletCheck,
|
|
2303
2598
|
numericalValues,
|
|
2304
2599
|
omit,
|
|
2305
2600
|
orderKeys,
|
|
@@ -2315,15 +2610,18 @@ export {
|
|
|
2315
2610
|
removeBy,
|
|
2316
2611
|
removeProperties,
|
|
2317
2612
|
removeUndefinedProperties,
|
|
2613
|
+
retry,
|
|
2318
2614
|
safariCheck,
|
|
2319
2615
|
safeAwaitAll,
|
|
2320
2616
|
safeInstanceof,
|
|
2321
2617
|
safeParseFloat,
|
|
2322
2618
|
safeParseInt,
|
|
2323
2619
|
safeParseJson,
|
|
2324
|
-
|
|
2620
|
+
safeStringify,
|
|
2621
|
+
safeUrl,
|
|
2325
2622
|
setDeep,
|
|
2326
2623
|
sortKeys,
|
|
2624
|
+
splitCompositeKey,
|
|
2327
2625
|
stringToArray,
|
|
2328
2626
|
stringifyTree,
|
|
2329
2627
|
stripUndefined,
|