@dxos/util 0.8.3 → 0.8.4-main.05e74ebcff
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/LICENSE +102 -5
- package/dist/lib/browser/index.mjs +672 -280
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +672 -280
- 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/id.d.ts +30 -0
- package/dist/types/src/id.d.ts.map +1 -0
- package/dist/types/src/id.test.d.ts +2 -0
- package/dist/types/src/id.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +10 -3
- 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 +5 -5
- 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 +5 -0
- package/dist/types/src/url.d.ts.map +1 -0
- package/dist/types/src/url.test.d.ts +2 -0
- package/dist/types/src/url.test.d.ts.map +1 -0
- 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 +15 -17
- 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/id.test.ts +109 -0
- package/src/id.ts +48 -0
- package/src/index.ts +10 -3
- package/src/json.ts +2 -7
- package/src/object.ts +3 -0
- package/src/platform.ts +35 -3
- package/src/position.test.ts +39 -45
- package/src/position.ts +7 -11
- 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/url.test.ts +22 -0
- package/src/url.ts +15 -0
- package/src/weak.test.ts +1 -1
- package/src/weak.ts +52 -14
- package/dist/lib/node/index.cjs +0 -2309
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "@dxos/node-std/globals";
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// src/array-to-hex.ts
|
|
4
4
|
var byteToHex = [];
|
|
5
5
|
for (let n = 0; n <= 255; ++n) {
|
|
6
6
|
const hexOctet = n.toString(16).padStart(2, "0");
|
|
@@ -15,7 +15,7 @@ var arrayToHex = (buf) => {
|
|
|
15
15
|
return hexOctets.join("");
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
//
|
|
18
|
+
// src/array.ts
|
|
19
19
|
var diff = (previous, next, comparator) => {
|
|
20
20
|
const remaining = [
|
|
21
21
|
...previous
|
|
@@ -97,17 +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
|
+
};
|
|
108
|
+
|
|
109
|
+
// src/assume.ts
|
|
110
|
+
function assumeType(value) {
|
|
111
|
+
}
|
|
100
112
|
|
|
101
|
-
//
|
|
102
|
-
import
|
|
113
|
+
// src/binder.ts
|
|
114
|
+
import { promisify } from "@dxos/node-std/util";
|
|
103
115
|
var createBinder = (obj) => ({
|
|
104
116
|
fn: (fn) => fn.bind(obj),
|
|
105
|
-
async: (fn) =>
|
|
117
|
+
async: (fn) => promisify(fn.bind(obj))
|
|
106
118
|
});
|
|
107
119
|
|
|
108
|
-
//
|
|
120
|
+
// src/bitfield.ts
|
|
109
121
|
import { invariant } from "@dxos/invariant";
|
|
110
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/util/src/bitfield.ts";
|
|
111
122
|
var BitField = class _BitField {
|
|
112
123
|
static get(data, idx) {
|
|
113
124
|
const bit = data[idx >> 3] >> 7 - idx % 8 & 1;
|
|
@@ -139,15 +150,7 @@ var BitField = class _BitField {
|
|
|
139
150
|
return result;
|
|
140
151
|
}
|
|
141
152
|
static and(first, second) {
|
|
142
|
-
invariant(first.length === second.length, "Bitfields must be of the same length"
|
|
143
|
-
F: __dxlog_file,
|
|
144
|
-
L: 52,
|
|
145
|
-
S: this,
|
|
146
|
-
A: [
|
|
147
|
-
"first.length === second.length",
|
|
148
|
-
"'Bitfields must be of the same length'"
|
|
149
|
-
]
|
|
150
|
-
});
|
|
153
|
+
invariant(first.length === second.length, "Bitfields must be of the same length");
|
|
151
154
|
const result = new Uint8Array(first.length);
|
|
152
155
|
for (let i = 0; i < first.length; i++) {
|
|
153
156
|
result[i] = first[i] & second[i];
|
|
@@ -175,7 +178,50 @@ var BitField = class _BitField {
|
|
|
175
178
|
}
|
|
176
179
|
};
|
|
177
180
|
|
|
178
|
-
//
|
|
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
|
+
|
|
224
|
+
// src/callback-collection.ts
|
|
179
225
|
var CallbackCollection = class {
|
|
180
226
|
#callbacks = [];
|
|
181
227
|
append(callback) {
|
|
@@ -199,35 +245,19 @@ var CallbackCollection = class {
|
|
|
199
245
|
}
|
|
200
246
|
};
|
|
201
247
|
|
|
202
|
-
//
|
|
248
|
+
// src/callback.ts
|
|
203
249
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
204
|
-
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/util/src/callback.ts";
|
|
205
250
|
var Callback = class {
|
|
251
|
+
_callback;
|
|
206
252
|
call(...args) {
|
|
207
|
-
invariant2(this._callback, "Callback not set"
|
|
208
|
-
F: __dxlog_file2,
|
|
209
|
-
L: 20,
|
|
210
|
-
S: this,
|
|
211
|
-
A: [
|
|
212
|
-
"this._callback",
|
|
213
|
-
"'Callback not set'"
|
|
214
|
-
]
|
|
215
|
-
});
|
|
253
|
+
invariant2(this._callback, "Callback not set");
|
|
216
254
|
return this._callback(...args);
|
|
217
255
|
}
|
|
218
256
|
callIfSet(...args) {
|
|
219
257
|
return this._callback?.(...args);
|
|
220
258
|
}
|
|
221
259
|
set(callback) {
|
|
222
|
-
invariant2(!this._callback, "Callback already set"
|
|
223
|
-
F: __dxlog_file2,
|
|
224
|
-
L: 29,
|
|
225
|
-
S: this,
|
|
226
|
-
A: [
|
|
227
|
-
"!this._callback",
|
|
228
|
-
"'Callback already set'"
|
|
229
|
-
]
|
|
230
|
-
});
|
|
260
|
+
invariant2(!this._callback, "Callback already set");
|
|
231
261
|
this._callback = callback;
|
|
232
262
|
}
|
|
233
263
|
isSet() {
|
|
@@ -251,7 +281,7 @@ var createSetDispatch = ({ handlers }) => {
|
|
|
251
281
|
});
|
|
252
282
|
};
|
|
253
283
|
|
|
254
|
-
//
|
|
284
|
+
// src/case.ts
|
|
255
285
|
var LOW_DASH = "_".codePointAt(0);
|
|
256
286
|
var HI_DASH = "-".codePointAt(0);
|
|
257
287
|
var SMALL_A = "a".codePointAt(0);
|
|
@@ -284,7 +314,7 @@ var changeCase = (str, delim) => {
|
|
|
284
314
|
var decamelize = (str) => changeCase(str, LOW_DASH);
|
|
285
315
|
var hyphenize = (str) => changeCase(str, HI_DASH);
|
|
286
316
|
|
|
287
|
-
//
|
|
317
|
+
// src/chunk-array.ts
|
|
288
318
|
var chunkArray = (array, size) => {
|
|
289
319
|
const result = [];
|
|
290
320
|
for (let i = 0; i < array.length; i += size) {
|
|
@@ -293,22 +323,14 @@ var chunkArray = (array, size) => {
|
|
|
293
323
|
return result;
|
|
294
324
|
};
|
|
295
325
|
|
|
296
|
-
//
|
|
326
|
+
// src/circular-buffer.ts
|
|
297
327
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
298
|
-
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/util/src/circular-buffer.ts";
|
|
299
328
|
var CircularBuffer = class {
|
|
329
|
+
_buffer;
|
|
330
|
+
_nextIndex = 0;
|
|
331
|
+
_elementCount = 0;
|
|
300
332
|
constructor(size) {
|
|
301
|
-
|
|
302
|
-
this._elementCount = 0;
|
|
303
|
-
invariant3(size >= 1, void 0, {
|
|
304
|
-
F: __dxlog_file3,
|
|
305
|
-
L: 13,
|
|
306
|
-
S: this,
|
|
307
|
-
A: [
|
|
308
|
-
"size >= 1",
|
|
309
|
-
""
|
|
310
|
-
]
|
|
311
|
-
});
|
|
333
|
+
invariant3(size >= 1);
|
|
312
334
|
this._buffer = new Array(size);
|
|
313
335
|
}
|
|
314
336
|
push(element) {
|
|
@@ -321,6 +343,10 @@ var CircularBuffer = class {
|
|
|
321
343
|
get elementCount() {
|
|
322
344
|
return this._elementCount;
|
|
323
345
|
}
|
|
346
|
+
clear() {
|
|
347
|
+
this._nextIndex = 0;
|
|
348
|
+
this._elementCount = 0;
|
|
349
|
+
}
|
|
324
350
|
getLast() {
|
|
325
351
|
if (this._elementCount === 0) {
|
|
326
352
|
return void 0;
|
|
@@ -352,7 +378,7 @@ var CircularBuffer = class {
|
|
|
352
378
|
}
|
|
353
379
|
};
|
|
354
380
|
|
|
355
|
-
//
|
|
381
|
+
// src/clear-undefined.ts
|
|
356
382
|
var clearUndefined = (obj) => {
|
|
357
383
|
for (const key of [
|
|
358
384
|
...Object.getOwnPropertyNames(obj),
|
|
@@ -365,15 +391,16 @@ var clearUndefined = (obj) => {
|
|
|
365
391
|
return obj;
|
|
366
392
|
};
|
|
367
393
|
|
|
368
|
-
//
|
|
394
|
+
// src/complex.ts
|
|
369
395
|
import { inspect } from "@dxos/node-std/util";
|
|
370
396
|
import { inspectObject, raise } from "@dxos/debug";
|
|
371
397
|
var MAX_SERIALIZATION_LENGTH = 10;
|
|
372
398
|
var ComplexSet = class {
|
|
399
|
+
_projection;
|
|
400
|
+
_values = /* @__PURE__ */ new Map();
|
|
373
401
|
// prettier-ignore
|
|
374
402
|
constructor(_projection, values) {
|
|
375
403
|
this._projection = _projection;
|
|
376
|
-
this._values = /* @__PURE__ */ new Map();
|
|
377
404
|
if (values) {
|
|
378
405
|
for (const value of values) {
|
|
379
406
|
this.add(value);
|
|
@@ -463,11 +490,12 @@ var makeSet = (projection) => {
|
|
|
463
490
|
};
|
|
464
491
|
};
|
|
465
492
|
var ComplexMap = class _ComplexMap {
|
|
493
|
+
_keyProjection;
|
|
494
|
+
_keys = /* @__PURE__ */ new Map();
|
|
495
|
+
_values = /* @__PURE__ */ new Map();
|
|
466
496
|
// prettier-ignore
|
|
467
497
|
constructor(_keyProjection, entries2) {
|
|
468
498
|
this._keyProjection = _keyProjection;
|
|
469
|
-
this._keys = /* @__PURE__ */ new Map();
|
|
470
|
-
this._values = /* @__PURE__ */ new Map();
|
|
471
499
|
if (entries2) {
|
|
472
500
|
for (const [key, value] of entries2) {
|
|
473
501
|
this.set(key, value);
|
|
@@ -512,6 +540,36 @@ var ComplexMap = class _ComplexMap {
|
|
|
512
540
|
this._values.set(primitive, value);
|
|
513
541
|
return this;
|
|
514
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
|
+
}
|
|
515
573
|
get size() {
|
|
516
574
|
return this._keys.size;
|
|
517
575
|
}
|
|
@@ -551,21 +609,15 @@ var makeMap = (keyProjection) => class BoundComplexMap extends ComplexMap {
|
|
|
551
609
|
}
|
|
552
610
|
};
|
|
553
611
|
|
|
554
|
-
//
|
|
555
|
-
|
|
556
|
-
|
|
612
|
+
// src/composite-key.ts
|
|
613
|
+
var SEPARATOR = ":";
|
|
614
|
+
var compositeKey = (...parts) => parts.join(SEPARATOR);
|
|
615
|
+
var splitCompositeKey = (key) => key.split(SEPARATOR);
|
|
616
|
+
|
|
617
|
+
// src/deep.ts
|
|
557
618
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
558
|
-
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/util/src/deep.ts";
|
|
559
619
|
var setDeep = (obj, path, value) => {
|
|
560
|
-
invariant4(path.length > 0
|
|
561
|
-
F: __dxlog_file4,
|
|
562
|
-
L: 18,
|
|
563
|
-
S: void 0,
|
|
564
|
-
A: [
|
|
565
|
-
"path.length > 0",
|
|
566
|
-
""
|
|
567
|
-
]
|
|
568
|
-
});
|
|
620
|
+
invariant4(path.length > 0);
|
|
569
621
|
let parent = obj;
|
|
570
622
|
for (const key of path.slice(0, -1)) {
|
|
571
623
|
if (parent[key] === void 0) {
|
|
@@ -585,16 +637,14 @@ var getDeep = (obj, path) => {
|
|
|
585
637
|
return parent;
|
|
586
638
|
};
|
|
587
639
|
|
|
588
|
-
//
|
|
640
|
+
// src/defer-function.ts
|
|
589
641
|
var deferFunction = (fnProvider) => (...args) => fnProvider()(...args);
|
|
590
642
|
|
|
591
|
-
//
|
|
592
|
-
|
|
593
|
-
Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
|
|
594
|
-
|
|
595
|
-
// packages/common/util/src/defer.ts
|
|
643
|
+
// src/defer.ts
|
|
644
|
+
import "@hazae41/symbol-dispose-polyfill";
|
|
596
645
|
var defer = (fn) => new DeferGuard(fn);
|
|
597
646
|
var DeferGuard = class {
|
|
647
|
+
_fn;
|
|
598
648
|
/**
|
|
599
649
|
* @internal
|
|
600
650
|
*/
|
|
@@ -610,6 +660,7 @@ var DeferGuard = class {
|
|
|
610
660
|
};
|
|
611
661
|
var deferAsync = (fn) => new DeferAsyncGuard(fn);
|
|
612
662
|
var DeferAsyncGuard = class {
|
|
663
|
+
_fn;
|
|
613
664
|
/**
|
|
614
665
|
* @internal
|
|
615
666
|
*/
|
|
@@ -621,9 +672,11 @@ var DeferAsyncGuard = class {
|
|
|
621
672
|
}
|
|
622
673
|
};
|
|
623
674
|
|
|
624
|
-
//
|
|
675
|
+
// src/entry.ts
|
|
625
676
|
var entry = (map, key) => new MapEntry(map, key);
|
|
626
677
|
var MapEntry = class {
|
|
678
|
+
_map;
|
|
679
|
+
_key;
|
|
627
680
|
/**
|
|
628
681
|
* @internal
|
|
629
682
|
*/
|
|
@@ -649,37 +702,33 @@ var MapEntry = class {
|
|
|
649
702
|
}
|
|
650
703
|
};
|
|
651
704
|
|
|
652
|
-
//
|
|
653
|
-
var
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
""
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
} else {
|
|
668
|
-
const textBetween = characters.slice(result[0].length, i).join("");
|
|
669
|
-
if (/[^\p{L}\p{N}_]/u.test(textBetween)) {
|
|
670
|
-
result[1] = char;
|
|
671
|
-
break;
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
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");
|
|
677
720
|
};
|
|
678
721
|
|
|
679
|
-
//
|
|
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
|
+
|
|
728
|
+
// src/for-each-async.ts
|
|
680
729
|
var forEachAsync = (items, fn) => Promise.all(items.map(fn));
|
|
681
730
|
|
|
682
|
-
//
|
|
731
|
+
// src/human-hash.ts
|
|
683
732
|
import { PublicKey } from "@dxos/keys";
|
|
684
733
|
var DEFAULT_WORDLIST = [
|
|
685
734
|
"ack",
|
|
@@ -940,6 +989,7 @@ var DEFAULT_WORDLIST = [
|
|
|
940
989
|
"zulu"
|
|
941
990
|
];
|
|
942
991
|
var HumanHasher = class {
|
|
992
|
+
wordlist;
|
|
943
993
|
/**
|
|
944
994
|
* Transforms hex digests to human-readable strings.
|
|
945
995
|
*
|
|
@@ -1010,7 +1060,20 @@ var humanize = (value) => {
|
|
|
1010
1060
|
return hasher.humanize(value);
|
|
1011
1061
|
};
|
|
1012
1062
|
|
|
1013
|
-
//
|
|
1063
|
+
// src/id.ts
|
|
1064
|
+
var PART = /^[a-zA-Z][a-zA-Z0-9]{0,62}$/;
|
|
1065
|
+
var ID = /^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)$/;
|
|
1066
|
+
function id(strings, ...values) {
|
|
1067
|
+
const raw = strings.reduce((out, str, i) => out + str + (i < values.length ? String(values[i]) : ""), "");
|
|
1068
|
+
if (!ID.test(raw)) {
|
|
1069
|
+
throw new Error(`Invalid id (expected AT Protocol NSID): ${JSON.stringify(raw)}`);
|
|
1070
|
+
}
|
|
1071
|
+
return raw;
|
|
1072
|
+
}
|
|
1073
|
+
var isWellFormedId = (value) => ID.test(value);
|
|
1074
|
+
var isWellFormedIdPart = (value) => PART.test(value);
|
|
1075
|
+
|
|
1076
|
+
// src/map.ts
|
|
1014
1077
|
var defaultMap = (map, key, def) => {
|
|
1015
1078
|
let value = map.get(key);
|
|
1016
1079
|
if (value === void 0) {
|
|
@@ -1020,8 +1083,8 @@ var defaultMap = (map, key, def) => {
|
|
|
1020
1083
|
return value;
|
|
1021
1084
|
};
|
|
1022
1085
|
|
|
1023
|
-
//
|
|
1024
|
-
var symbol = Symbol.for("dxos.instance-contexts");
|
|
1086
|
+
// src/instance-id.ts
|
|
1087
|
+
var symbol = /* @__PURE__ */ Symbol.for("dxos.instance-contexts");
|
|
1025
1088
|
var instanceContexts = globalThis[symbol] ??= /* @__PURE__ */ new WeakMap();
|
|
1026
1089
|
var getPrototypeSpecificInstanceId = (instance) => {
|
|
1027
1090
|
const prototype = Object.getPrototypeOf(instance);
|
|
@@ -1029,12 +1092,12 @@ var getPrototypeSpecificInstanceId = (instance) => {
|
|
|
1029
1092
|
nextId: 0,
|
|
1030
1093
|
instanceIds: /* @__PURE__ */ new WeakMap()
|
|
1031
1094
|
}));
|
|
1032
|
-
let
|
|
1033
|
-
if (
|
|
1034
|
-
|
|
1035
|
-
instanceCtx.instanceIds.set(instance,
|
|
1095
|
+
let id2 = instanceCtx.instanceIds.get(instance);
|
|
1096
|
+
if (id2 === void 0) {
|
|
1097
|
+
id2 = instanceCtx.nextId++;
|
|
1098
|
+
instanceCtx.instanceIds.set(instance, id2);
|
|
1036
1099
|
}
|
|
1037
|
-
return
|
|
1100
|
+
return id2;
|
|
1038
1101
|
};
|
|
1039
1102
|
var getDebugName = (instance) => {
|
|
1040
1103
|
if (instance == null) {
|
|
@@ -1044,7 +1107,7 @@ var getDebugName = (instance) => {
|
|
|
1044
1107
|
return `${prototype.constructor?.name ?? "Object"}#${getPrototypeSpecificInstanceId(instance)}`;
|
|
1045
1108
|
};
|
|
1046
1109
|
|
|
1047
|
-
//
|
|
1110
|
+
// src/interval.ts
|
|
1048
1111
|
var exponentialBackoffInterval = (cb, initialInterval) => {
|
|
1049
1112
|
let interval = initialInterval;
|
|
1050
1113
|
const repeat = () => {
|
|
@@ -1056,7 +1119,7 @@ var exponentialBackoffInterval = (cb, initialInterval) => {
|
|
|
1056
1119
|
return () => clearTimeout(timeoutId);
|
|
1057
1120
|
};
|
|
1058
1121
|
|
|
1059
|
-
//
|
|
1122
|
+
// src/join-tables.ts
|
|
1060
1123
|
var joinTables = (leftColumn, rightColumn, left, right) => {
|
|
1061
1124
|
const map = /* @__PURE__ */ new Map();
|
|
1062
1125
|
const used = /* @__PURE__ */ new Set();
|
|
@@ -1077,11 +1140,11 @@ var joinTables = (leftColumn, rightColumn, left, right) => {
|
|
|
1077
1140
|
return result;
|
|
1078
1141
|
};
|
|
1079
1142
|
|
|
1080
|
-
//
|
|
1143
|
+
// src/json.ts
|
|
1081
1144
|
import { inspect as inspect2 } from "@dxos/node-std/util";
|
|
1082
1145
|
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
1083
1146
|
|
|
1084
|
-
//
|
|
1147
|
+
// src/uint8array.ts
|
|
1085
1148
|
var arraysEqual = (a, b) => {
|
|
1086
1149
|
if (a.length !== b.length) {
|
|
1087
1150
|
return false;
|
|
@@ -1102,10 +1165,10 @@ var bufferToArray = (buffer) => {
|
|
|
1102
1165
|
var stringToArray = (string) => bufferToArray(Buffer.from(string, "hex"));
|
|
1103
1166
|
var arrayToString = (array) => arrayToBuffer(array).toString("hex");
|
|
1104
1167
|
|
|
1105
|
-
//
|
|
1168
|
+
// src/json.ts
|
|
1106
1169
|
var MAX_DEPTH = 5;
|
|
1107
1170
|
var LOG_MAX_DEPTH = 7;
|
|
1108
|
-
|
|
1171
|
+
var jsonReplacer = (key, value) => {
|
|
1109
1172
|
if (value !== null && typeof value === "object" && typeof value[inspect2.custom] === "function") {
|
|
1110
1173
|
return value[inspect2.custom]();
|
|
1111
1174
|
}
|
|
@@ -1118,7 +1181,7 @@ function jsonReplacer(key, value) {
|
|
|
1118
1181
|
}
|
|
1119
1182
|
}
|
|
1120
1183
|
return value;
|
|
1121
|
-
}
|
|
1184
|
+
};
|
|
1122
1185
|
var jsonify = (value, depth = 0, visitedObjects = /* @__PURE__ */ new WeakSet()) => {
|
|
1123
1186
|
if (depth > MAX_DEPTH) {
|
|
1124
1187
|
return null;
|
|
@@ -1193,7 +1256,7 @@ var jsonKeyReplacer = (options = {}) => (key, value) => {
|
|
|
1193
1256
|
return value;
|
|
1194
1257
|
};
|
|
1195
1258
|
|
|
1196
|
-
//
|
|
1259
|
+
// src/map-values.ts
|
|
1197
1260
|
var mapValues = (obj, fn) => {
|
|
1198
1261
|
const result = {};
|
|
1199
1262
|
Object.keys(obj).forEach((key) => {
|
|
@@ -1205,31 +1268,10 @@ var deepMapValues = (value, fn) => {
|
|
|
1205
1268
|
return new DeepMapper(fn).map(value);
|
|
1206
1269
|
};
|
|
1207
1270
|
var DeepMapper = class {
|
|
1271
|
+
_fn;
|
|
1272
|
+
_cyclic = /* @__PURE__ */ new Map();
|
|
1208
1273
|
constructor(_fn) {
|
|
1209
1274
|
this._fn = _fn;
|
|
1210
|
-
this._cyclic = /* @__PURE__ */ new Map();
|
|
1211
|
-
this._recurse = (value) => {
|
|
1212
|
-
if (this._cyclic.has(value)) {
|
|
1213
|
-
return this._cyclic.get(value);
|
|
1214
|
-
}
|
|
1215
|
-
if (Array.isArray(value)) {
|
|
1216
|
-
const res = new Array(value.length);
|
|
1217
|
-
this._cyclic.set(value, res);
|
|
1218
|
-
for (let i = 0; i < value.length; i++) {
|
|
1219
|
-
res[i] = this._map(value[i], i);
|
|
1220
|
-
}
|
|
1221
|
-
return res;
|
|
1222
|
-
} else if (value !== null && typeof value === "object") {
|
|
1223
|
-
const res = {};
|
|
1224
|
-
this._cyclic.set(value, res);
|
|
1225
|
-
for (const key in value) {
|
|
1226
|
-
res[key] = this._map(value[key], key);
|
|
1227
|
-
}
|
|
1228
|
-
return res;
|
|
1229
|
-
} else {
|
|
1230
|
-
return value;
|
|
1231
|
-
}
|
|
1232
|
-
};
|
|
1233
1275
|
}
|
|
1234
1276
|
map(value) {
|
|
1235
1277
|
return this._map(value, void 0);
|
|
@@ -1240,36 +1282,37 @@ var DeepMapper = class {
|
|
|
1240
1282
|
}
|
|
1241
1283
|
return this._fn(value, this._recurse, key);
|
|
1242
1284
|
}
|
|
1285
|
+
_recurse = (value) => {
|
|
1286
|
+
if (this._cyclic.has(value)) {
|
|
1287
|
+
return this._cyclic.get(value);
|
|
1288
|
+
}
|
|
1289
|
+
if (Array.isArray(value)) {
|
|
1290
|
+
const res = new Array(value.length);
|
|
1291
|
+
this._cyclic.set(value, res);
|
|
1292
|
+
for (let i = 0; i < value.length; i++) {
|
|
1293
|
+
res[i] = this._map(value[i], i);
|
|
1294
|
+
}
|
|
1295
|
+
return res;
|
|
1296
|
+
} else if (value !== null && typeof value === "object") {
|
|
1297
|
+
const res = {};
|
|
1298
|
+
this._cyclic.set(value, res);
|
|
1299
|
+
for (const key in value) {
|
|
1300
|
+
res[key] = this._map(value[key], key);
|
|
1301
|
+
}
|
|
1302
|
+
return res;
|
|
1303
|
+
} else {
|
|
1304
|
+
return value;
|
|
1305
|
+
}
|
|
1306
|
+
};
|
|
1243
1307
|
};
|
|
1244
1308
|
var deepMapValuesAsync = (value, fn) => {
|
|
1245
1309
|
return new DeepMapperAsync(fn).map(value);
|
|
1246
1310
|
};
|
|
1247
1311
|
var DeepMapperAsync = class {
|
|
1312
|
+
_fn;
|
|
1313
|
+
_cyclic = /* @__PURE__ */ new Map();
|
|
1248
1314
|
constructor(_fn) {
|
|
1249
1315
|
this._fn = _fn;
|
|
1250
|
-
this._cyclic = /* @__PURE__ */ new Map();
|
|
1251
|
-
this._recurse = async (value) => {
|
|
1252
|
-
if (this._cyclic.has(value)) {
|
|
1253
|
-
return this._cyclic.get(value);
|
|
1254
|
-
}
|
|
1255
|
-
if (Array.isArray(value)) {
|
|
1256
|
-
const res = new Array(value.length);
|
|
1257
|
-
this._cyclic.set(value, res);
|
|
1258
|
-
for (let i = 0; i < value.length; i++) {
|
|
1259
|
-
res[i] = await this._map(value[i], i);
|
|
1260
|
-
}
|
|
1261
|
-
return res;
|
|
1262
|
-
} else if (value !== null && typeof value === "object") {
|
|
1263
|
-
const res = {};
|
|
1264
|
-
this._cyclic.set(value, res);
|
|
1265
|
-
for (const key in value) {
|
|
1266
|
-
res[key] = await this._map(value[key], key);
|
|
1267
|
-
}
|
|
1268
|
-
return res;
|
|
1269
|
-
} else {
|
|
1270
|
-
return value;
|
|
1271
|
-
}
|
|
1272
|
-
};
|
|
1273
1316
|
}
|
|
1274
1317
|
map(value) {
|
|
1275
1318
|
return this._map(value, void 0);
|
|
@@ -1280,6 +1323,28 @@ var DeepMapperAsync = class {
|
|
|
1280
1323
|
}
|
|
1281
1324
|
return this._fn(value, this._recurse, key);
|
|
1282
1325
|
}
|
|
1326
|
+
_recurse = async (value) => {
|
|
1327
|
+
if (this._cyclic.has(value)) {
|
|
1328
|
+
return this._cyclic.get(value);
|
|
1329
|
+
}
|
|
1330
|
+
if (Array.isArray(value)) {
|
|
1331
|
+
const res = new Array(value.length);
|
|
1332
|
+
this._cyclic.set(value, res);
|
|
1333
|
+
for (let i = 0; i < value.length; i++) {
|
|
1334
|
+
res[i] = await this._map(value[i], i);
|
|
1335
|
+
}
|
|
1336
|
+
return res;
|
|
1337
|
+
} else if (value !== null && typeof value === "object") {
|
|
1338
|
+
const res = {};
|
|
1339
|
+
this._cyclic.set(value, res);
|
|
1340
|
+
for (const key in value) {
|
|
1341
|
+
res[key] = await this._map(value[key], key);
|
|
1342
|
+
}
|
|
1343
|
+
return res;
|
|
1344
|
+
} else {
|
|
1345
|
+
return value;
|
|
1346
|
+
}
|
|
1347
|
+
};
|
|
1283
1348
|
};
|
|
1284
1349
|
var visitValues = (object, visitor) => {
|
|
1285
1350
|
if (Array.isArray(object)) {
|
|
@@ -1291,11 +1356,11 @@ var visitValues = (object, visitor) => {
|
|
|
1291
1356
|
}
|
|
1292
1357
|
};
|
|
1293
1358
|
|
|
1294
|
-
//
|
|
1359
|
+
// src/object.ts
|
|
1295
1360
|
var keys = (obj) => Object.keys(obj);
|
|
1296
1361
|
var entries = (obj) => Object.entries(obj);
|
|
1297
1362
|
|
|
1298
|
-
//
|
|
1363
|
+
// src/order-keys.ts
|
|
1299
1364
|
var orderKeys = (obj, order) => {
|
|
1300
1365
|
const ordered = {};
|
|
1301
1366
|
for (const key of order) {
|
|
@@ -1311,34 +1376,34 @@ var orderKeys = (obj, order) => {
|
|
|
1311
1376
|
return ordered;
|
|
1312
1377
|
};
|
|
1313
1378
|
|
|
1314
|
-
//
|
|
1379
|
+
// src/order.ts
|
|
1315
1380
|
var inferObjectOrder = (objectMap, order = []) => {
|
|
1316
|
-
const orderedObjects = order.reduce((acc,
|
|
1317
|
-
if (
|
|
1318
|
-
acc.objects.push(objectMap[
|
|
1319
|
-
acc.ids.add(
|
|
1381
|
+
const orderedObjects = order.reduce((acc, id2) => {
|
|
1382
|
+
if (id2 in objectMap) {
|
|
1383
|
+
acc.objects.push(objectMap[id2]);
|
|
1384
|
+
acc.ids.add(id2);
|
|
1320
1385
|
}
|
|
1321
1386
|
return acc;
|
|
1322
1387
|
}, {
|
|
1323
1388
|
objects: [],
|
|
1324
1389
|
ids: /* @__PURE__ */ new Set()
|
|
1325
1390
|
});
|
|
1326
|
-
const { objects } = Object.keys(objectMap).reduce((acc,
|
|
1327
|
-
if (!acc.ids.has(
|
|
1328
|
-
acc.objects.push(objectMap[
|
|
1391
|
+
const { objects } = Object.keys(objectMap).reduce((acc, id2) => {
|
|
1392
|
+
if (!acc.ids.has(id2)) {
|
|
1393
|
+
acc.objects.push(objectMap[id2]);
|
|
1329
1394
|
}
|
|
1330
1395
|
return acc;
|
|
1331
1396
|
}, orderedObjects);
|
|
1332
1397
|
return objects;
|
|
1333
1398
|
};
|
|
1334
1399
|
var inferRecordOrder = (objectMap, order = []) => {
|
|
1335
|
-
return Object.assign(order.filter((
|
|
1336
|
-
acc[
|
|
1400
|
+
return Object.assign(order.filter((id2) => id2 in objectMap).reduce((acc, id2) => {
|
|
1401
|
+
acc[id2] = null;
|
|
1337
1402
|
return acc;
|
|
1338
1403
|
}, {}), objectMap);
|
|
1339
1404
|
};
|
|
1340
1405
|
|
|
1341
|
-
//
|
|
1406
|
+
// src/pick.ts
|
|
1342
1407
|
var pick = (obj, keys2) => {
|
|
1343
1408
|
return keys2.reduce((result, key) => {
|
|
1344
1409
|
if (obj && key in obj) {
|
|
@@ -1366,9 +1431,20 @@ var omit = (obj, keys2) => {
|
|
|
1366
1431
|
return result;
|
|
1367
1432
|
};
|
|
1368
1433
|
|
|
1369
|
-
//
|
|
1434
|
+
// src/platform.ts
|
|
1370
1435
|
var isNode = () => typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
1371
|
-
var
|
|
1436
|
+
var isBun = () => globalThis.Bun !== void 0;
|
|
1437
|
+
var isTauri = () => !!globalThis.__TAURI__;
|
|
1438
|
+
var isMobile = () => {
|
|
1439
|
+
let check = false;
|
|
1440
|
+
(function(a) {
|
|
1441
|
+
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))) {
|
|
1442
|
+
check = true;
|
|
1443
|
+
}
|
|
1444
|
+
})(navigator.userAgent || navigator.vendor || window.opera);
|
|
1445
|
+
return check;
|
|
1446
|
+
};
|
|
1447
|
+
var isMobileOrTablet = () => {
|
|
1372
1448
|
let check = false;
|
|
1373
1449
|
((a) => {
|
|
1374
1450
|
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))) {
|
|
@@ -1390,7 +1466,7 @@ var iosCheck = () => {
|
|
|
1390
1466
|
};
|
|
1391
1467
|
var safariCheck = () => typeof navigator !== "undefined" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|
1392
1468
|
var getHostPlatform = () => {
|
|
1393
|
-
if (!("navigator" in
|
|
1469
|
+
if (!("navigator" in globalThis)) {
|
|
1394
1470
|
return "unknown";
|
|
1395
1471
|
}
|
|
1396
1472
|
const platform = (navigator.userAgentData?.platform || navigator.platform)?.toLowerCase();
|
|
@@ -1407,27 +1483,27 @@ var getHostPlatform = () => {
|
|
|
1407
1483
|
}
|
|
1408
1484
|
};
|
|
1409
1485
|
|
|
1410
|
-
//
|
|
1411
|
-
var byPosition = ({ position: a
|
|
1486
|
+
// src/position.ts
|
|
1487
|
+
var byPosition = ({ position: a }, { position: b }) => {
|
|
1412
1488
|
if (a === b) {
|
|
1413
1489
|
return 0;
|
|
1414
|
-
} else if (a === "
|
|
1490
|
+
} else if (a === "first" || b === "last") {
|
|
1415
1491
|
return -1;
|
|
1416
|
-
} else if (b === "
|
|
1492
|
+
} else if (b === "first" || a === "last") {
|
|
1417
1493
|
return 1;
|
|
1418
1494
|
} else {
|
|
1419
1495
|
return 0;
|
|
1420
1496
|
}
|
|
1421
1497
|
};
|
|
1422
1498
|
|
|
1423
|
-
//
|
|
1499
|
+
// src/random.ts
|
|
1424
1500
|
var randomInt = (max, min = 0) => {
|
|
1425
1501
|
min = Math.ceil(min);
|
|
1426
1502
|
max = Math.floor(max);
|
|
1427
1503
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
1428
1504
|
};
|
|
1429
1505
|
|
|
1430
|
-
//
|
|
1506
|
+
// src/range.ts
|
|
1431
1507
|
var range = (n = 0, mapper) => {
|
|
1432
1508
|
const range2 = Array.from(Array(n).keys());
|
|
1433
1509
|
return mapper == null ? range2 : range2.map(mapper);
|
|
@@ -1439,7 +1515,7 @@ var clamp = (value, min, max) => {
|
|
|
1439
1515
|
return Math.min(Math.max(value, min), max);
|
|
1440
1516
|
};
|
|
1441
1517
|
|
|
1442
|
-
//
|
|
1518
|
+
// src/reducers.ts
|
|
1443
1519
|
var accessBy = (value, accessor) => typeof accessor === "function" ? accessor(value) : value[accessor];
|
|
1444
1520
|
var median = (values) => {
|
|
1445
1521
|
const mid = Math.floor(values.length / 2);
|
|
@@ -1525,7 +1601,7 @@ var createBucketReducer = (period) => ({
|
|
|
1525
1601
|
}
|
|
1526
1602
|
});
|
|
1527
1603
|
|
|
1528
|
-
//
|
|
1604
|
+
// src/remove-undefined-keys.ts
|
|
1529
1605
|
var removeUndefinedProperties = (object) => {
|
|
1530
1606
|
for (const prop of [
|
|
1531
1607
|
...Object.getOwnPropertyNames(object),
|
|
@@ -1566,7 +1642,44 @@ var removeProperties = (root, condition) => {
|
|
|
1566
1642
|
return result;
|
|
1567
1643
|
};
|
|
1568
1644
|
|
|
1569
|
-
//
|
|
1645
|
+
// src/retry.ts
|
|
1646
|
+
var DEFAULT_RETRY_OPTIONS = {
|
|
1647
|
+
count: 3,
|
|
1648
|
+
delayMs: 100,
|
|
1649
|
+
exponent: 2,
|
|
1650
|
+
retryOnError: async () => true,
|
|
1651
|
+
retryOnValue: async () => false
|
|
1652
|
+
};
|
|
1653
|
+
var retry = async (options, cb) => {
|
|
1654
|
+
const fullOptions = {
|
|
1655
|
+
...DEFAULT_RETRY_OPTIONS,
|
|
1656
|
+
...options
|
|
1657
|
+
};
|
|
1658
|
+
let numRetries = 0, currentDelay = fullOptions.delayMs;
|
|
1659
|
+
while (true) {
|
|
1660
|
+
let result;
|
|
1661
|
+
try {
|
|
1662
|
+
result = await cb();
|
|
1663
|
+
} catch (err) {
|
|
1664
|
+
if (numRetries > fullOptions.count || !await fullOptions.retryOnError(err)) {
|
|
1665
|
+
throw err;
|
|
1666
|
+
}
|
|
1667
|
+
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
1668
|
+
currentDelay *= fullOptions.exponent;
|
|
1669
|
+
numRetries++;
|
|
1670
|
+
continue;
|
|
1671
|
+
}
|
|
1672
|
+
if (!await fullOptions.retryOnValue(result)) {
|
|
1673
|
+
return result;
|
|
1674
|
+
}
|
|
1675
|
+
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
1676
|
+
currentDelay *= fullOptions.exponent;
|
|
1677
|
+
numRetries++;
|
|
1678
|
+
continue;
|
|
1679
|
+
}
|
|
1680
|
+
};
|
|
1681
|
+
|
|
1682
|
+
// src/safe-await.ts
|
|
1570
1683
|
var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
1571
1684
|
const failedItems = [];
|
|
1572
1685
|
await Promise.all([
|
|
@@ -1584,8 +1697,8 @@ var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
|
1584
1697
|
return failedItems;
|
|
1585
1698
|
};
|
|
1586
1699
|
|
|
1587
|
-
//
|
|
1588
|
-
var instanceTag = Symbol("instanceTag");
|
|
1700
|
+
// src/safe-instanceof.ts
|
|
1701
|
+
var instanceTag = /* @__PURE__ */ Symbol("instanceTag");
|
|
1589
1702
|
var safeInstanceof = (tag) => (target) => {
|
|
1590
1703
|
target.prototype[instanceTag] = tag;
|
|
1591
1704
|
Object.defineProperty(target.prototype, Symbol.hasInstance, {
|
|
@@ -1596,49 +1709,140 @@ var safeInstanceof = (tag) => (target) => {
|
|
|
1596
1709
|
});
|
|
1597
1710
|
};
|
|
1598
1711
|
|
|
1599
|
-
//
|
|
1600
|
-
|
|
1712
|
+
// src/safe-parse.ts
|
|
1713
|
+
function safeParseInt(str, defaultValue) {
|
|
1601
1714
|
try {
|
|
1602
|
-
const
|
|
1603
|
-
return isNaN(
|
|
1604
|
-
} catch
|
|
1715
|
+
const value = parseInt(str ?? "");
|
|
1716
|
+
return isNaN(value) ? defaultValue : value;
|
|
1717
|
+
} catch {
|
|
1605
1718
|
return defaultValue;
|
|
1606
1719
|
}
|
|
1720
|
+
}
|
|
1721
|
+
function safeParseFloat(str, defaultValue) {
|
|
1722
|
+
try {
|
|
1723
|
+
const value = parseFloat(str ?? "");
|
|
1724
|
+
return isNaN(value) ? defaultValue : value;
|
|
1725
|
+
} catch {
|
|
1726
|
+
return defaultValue;
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
var safeParseJson = (str, defaultValue) => {
|
|
1730
|
+
if (str && str.length > 0) {
|
|
1731
|
+
try {
|
|
1732
|
+
return JSON.parse(str);
|
|
1733
|
+
} catch {
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
return defaultValue;
|
|
1607
1737
|
};
|
|
1608
|
-
var
|
|
1738
|
+
var safeUrl = (str) => {
|
|
1609
1739
|
try {
|
|
1610
|
-
return
|
|
1740
|
+
return new URL(str ?? "");
|
|
1611
1741
|
} catch {
|
|
1612
|
-
return
|
|
1742
|
+
return void 0;
|
|
1613
1743
|
}
|
|
1614
1744
|
};
|
|
1615
|
-
|
|
1616
|
-
|
|
1745
|
+
|
|
1746
|
+
// src/safe-stringify.ts
|
|
1747
|
+
var SKIP = Object.freeze({});
|
|
1748
|
+
function safeStringify(obj, filter = defaultFilter, indent = 2) {
|
|
1749
|
+
const seen = /* @__PURE__ */ new WeakMap();
|
|
1750
|
+
function replacer(key, value) {
|
|
1617
1751
|
try {
|
|
1618
|
-
|
|
1619
|
-
|
|
1752
|
+
let path = key;
|
|
1753
|
+
if (!key) {
|
|
1754
|
+
path = "$";
|
|
1755
|
+
if (value != null && typeof value === "object") {
|
|
1756
|
+
seen.set(value, path);
|
|
1757
|
+
}
|
|
1758
|
+
return value;
|
|
1759
|
+
} else if (this) {
|
|
1760
|
+
const parentPath = seen.get(this);
|
|
1761
|
+
path = parentPath ? `${parentPath}.${key}` : key;
|
|
1762
|
+
}
|
|
1763
|
+
if (value == null) {
|
|
1764
|
+
return value;
|
|
1765
|
+
}
|
|
1766
|
+
if (typeof value === "function") {
|
|
1767
|
+
return void 0;
|
|
1768
|
+
}
|
|
1769
|
+
if (typeof value === "object" && Object.getPrototypeOf(value) !== Object.prototype && !Array.isArray(value)) {
|
|
1770
|
+
return void 0;
|
|
1771
|
+
}
|
|
1772
|
+
if (typeof value === "object" && value !== null) {
|
|
1773
|
+
const exists = seen.get(value);
|
|
1774
|
+
if (exists) {
|
|
1775
|
+
return `[${path} => ${exists}]`;
|
|
1776
|
+
}
|
|
1777
|
+
seen.set(value, path);
|
|
1778
|
+
}
|
|
1779
|
+
if (filter) {
|
|
1780
|
+
const filteredValue = filter?.(key, value);
|
|
1781
|
+
if (filteredValue !== void 0) {
|
|
1782
|
+
return filteredValue === SKIP ? void 0 : filteredValue;
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1785
|
+
return value;
|
|
1786
|
+
} catch (error) {
|
|
1787
|
+
return `ERROR: ${error.message}`;
|
|
1620
1788
|
}
|
|
1621
1789
|
}
|
|
1622
|
-
|
|
1790
|
+
try {
|
|
1791
|
+
return JSON.stringify(obj, replacer, indent);
|
|
1792
|
+
} catch (error) {
|
|
1793
|
+
return `ERROR: ${error.message}`;
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1796
|
+
var createReplacer = ({ omit: omit2, parse, maxDepth, maxArrayLen, maxStringLen } = {}) => {
|
|
1797
|
+
let currentDepth = 0;
|
|
1798
|
+
const depthMap = /* @__PURE__ */ new WeakMap();
|
|
1799
|
+
return function(key, value) {
|
|
1800
|
+
if (key === "") {
|
|
1801
|
+
currentDepth = 0;
|
|
1802
|
+
} else if (this && typeof this === "object") {
|
|
1803
|
+
const parentDepth = depthMap.get(this) ?? 0;
|
|
1804
|
+
currentDepth = parentDepth + 1;
|
|
1805
|
+
}
|
|
1806
|
+
if (typeof value === "function") {
|
|
1807
|
+
return SKIP;
|
|
1808
|
+
}
|
|
1809
|
+
if (maxArrayLen != null && Array.isArray(value) && value.length > maxArrayLen) {
|
|
1810
|
+
return `[length: ${value.length}]`;
|
|
1811
|
+
}
|
|
1812
|
+
if (value && typeof value === "object") {
|
|
1813
|
+
depthMap.set(value, currentDepth);
|
|
1814
|
+
if (maxDepth != null && currentDepth >= maxDepth) {
|
|
1815
|
+
return Array.isArray(value) ? `[{ length: ${value.length} }]` : `{ keys: ${Object.keys(value).length} }`;
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
if (omit2?.includes(key)) {
|
|
1819
|
+
return SKIP;
|
|
1820
|
+
}
|
|
1821
|
+
if (parse?.includes(key) && typeof value === "string") {
|
|
1822
|
+
try {
|
|
1823
|
+
return JSON.parse(value);
|
|
1824
|
+
} catch {
|
|
1825
|
+
return value;
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
if (maxStringLen != null && typeof value === "string" && value.length > maxStringLen) {
|
|
1829
|
+
return value.slice(0, maxStringLen) + "...";
|
|
1830
|
+
}
|
|
1831
|
+
return value;
|
|
1832
|
+
};
|
|
1623
1833
|
};
|
|
1834
|
+
var defaultFilter = createReplacer();
|
|
1624
1835
|
|
|
1625
|
-
//
|
|
1836
|
+
// src/sliding-window-summary.ts
|
|
1626
1837
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1627
|
-
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/common/util/src/sliding-window-summary.ts";
|
|
1628
1838
|
var SlidingWindowSummary = class {
|
|
1839
|
+
_buffer;
|
|
1840
|
+
_sum = 0;
|
|
1841
|
+
_precision;
|
|
1629
1842
|
constructor(options) {
|
|
1630
|
-
this._sum = 0;
|
|
1631
1843
|
this._buffer = new CircularBuffer(options.dataPoints);
|
|
1632
1844
|
if (options.precision != null) {
|
|
1633
|
-
invariant5(options.precision >= 0
|
|
1634
|
-
F: __dxlog_file5,
|
|
1635
|
-
L: 26,
|
|
1636
|
-
S: this,
|
|
1637
|
-
A: [
|
|
1638
|
-
"options.precision >= 0",
|
|
1639
|
-
""
|
|
1640
|
-
]
|
|
1641
|
-
});
|
|
1845
|
+
invariant5(options.precision >= 0);
|
|
1642
1846
|
this._precision = Math.pow(10, options.precision);
|
|
1643
1847
|
}
|
|
1644
1848
|
}
|
|
@@ -1678,7 +1882,7 @@ var SlidingWindowSummary = class {
|
|
|
1678
1882
|
}
|
|
1679
1883
|
};
|
|
1680
1884
|
|
|
1681
|
-
//
|
|
1885
|
+
// src/sort.ts
|
|
1682
1886
|
var compareScalar = (inc = true) => (a, b) => (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);
|
|
1683
1887
|
var compareString = (inc = true, caseInsensitive = true) => (a, b) => {
|
|
1684
1888
|
if (caseInsensitive) {
|
|
@@ -1700,38 +1904,48 @@ var compareMulti = (sorters) => (a, b) => {
|
|
|
1700
1904
|
return sort();
|
|
1701
1905
|
};
|
|
1702
1906
|
|
|
1703
|
-
//
|
|
1907
|
+
// src/string.ts
|
|
1704
1908
|
var capitalize = (str) => {
|
|
1705
1909
|
if (str.length === 0) {
|
|
1706
1910
|
return "";
|
|
1707
1911
|
}
|
|
1708
1912
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
1709
1913
|
};
|
|
1914
|
+
function trim(strings, ...values) {
|
|
1915
|
+
const raw = strings.reduce((out, str, i) => {
|
|
1916
|
+
out += str;
|
|
1917
|
+
if (i < values.length) {
|
|
1918
|
+
const match = str.match(/(^|\n)([ \t]*)$/);
|
|
1919
|
+
const baseIndent = match ? match[2] : "";
|
|
1920
|
+
const val = String(values[i]).replace(/\r?\n/g, "\n" + baseIndent);
|
|
1921
|
+
out += val;
|
|
1922
|
+
}
|
|
1923
|
+
return out;
|
|
1924
|
+
}, "");
|
|
1925
|
+
const lines = raw.split("\n");
|
|
1926
|
+
while (lines.length && !lines[0].trim()) {
|
|
1927
|
+
lines.shift();
|
|
1928
|
+
}
|
|
1929
|
+
while (lines.length && !lines[lines.length - 1].trim()) {
|
|
1930
|
+
lines.pop();
|
|
1931
|
+
}
|
|
1932
|
+
const minIndent = Math.min(...lines.filter((l) => l.trim()).map((l) => l.match(/^[ \t]*/)?.[0].length ?? 0));
|
|
1933
|
+
return lines.map((l) => l.slice(minIndent)).join("\n");
|
|
1934
|
+
}
|
|
1935
|
+
var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
|
|
1710
1936
|
|
|
1711
|
-
//
|
|
1937
|
+
// src/sum.ts
|
|
1712
1938
|
var sum = (values) => values.reduce((a, b) => a + b, 0);
|
|
1713
1939
|
|
|
1714
|
-
//
|
|
1940
|
+
// src/throw-unhandled-error.ts
|
|
1715
1941
|
var throwUnhandledError = (error) => {
|
|
1716
1942
|
queueMicrotask(() => {
|
|
1717
1943
|
throw error;
|
|
1718
1944
|
});
|
|
1719
1945
|
};
|
|
1720
1946
|
|
|
1721
|
-
//
|
|
1947
|
+
// src/to-fallback.ts
|
|
1722
1948
|
var idEmoji = [
|
|
1723
|
-
// When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)
|
|
1724
|
-
// 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.
|
|
1725
|
-
// This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:
|
|
1726
|
-
// – not people or isolated anthropomorphic faces
|
|
1727
|
-
// – not flags
|
|
1728
|
-
// – more concrete than abstract
|
|
1729
|
-
// – less culturally specific
|
|
1730
|
-
// – less easily confused with another emoji in the set
|
|
1731
|
-
// – requires less special knowledge to identify
|
|
1732
|
-
// – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)
|
|
1733
|
-
// – less common as a signifier in UX
|
|
1734
|
-
// NOTE that this is intentionally an array of strings because of the way emoji graphemes work.
|
|
1735
1949
|
"\u{1F47B}",
|
|
1736
1950
|
"\u{1F479}",
|
|
1737
1951
|
"\u{1F47D}",
|
|
@@ -1867,17 +2081,18 @@ var idEmoji = [
|
|
|
1867
2081
|
];
|
|
1868
2082
|
var idHue = [
|
|
1869
2083
|
"red",
|
|
1870
|
-
|
|
2084
|
+
"orange",
|
|
1871
2085
|
"amber",
|
|
1872
|
-
|
|
2086
|
+
"yellow",
|
|
1873
2087
|
"lime",
|
|
1874
2088
|
"green",
|
|
1875
2089
|
"emerald",
|
|
1876
2090
|
"teal",
|
|
1877
2091
|
"cyan",
|
|
1878
|
-
//
|
|
1879
|
-
// '
|
|
1880
|
-
// '
|
|
2092
|
+
// Omit colors similar to primary accent.
|
|
2093
|
+
// 'sky' as const,
|
|
2094
|
+
// 'blue' as const,
|
|
2095
|
+
// 'indigo' as const,
|
|
1881
2096
|
"violet",
|
|
1882
2097
|
"purple",
|
|
1883
2098
|
"fuchsia",
|
|
@@ -1903,12 +2118,10 @@ var toFallback = (hash) => {
|
|
|
1903
2118
|
};
|
|
1904
2119
|
};
|
|
1905
2120
|
|
|
1906
|
-
//
|
|
2121
|
+
// src/tracer.ts
|
|
1907
2122
|
var Tracer = class {
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
this._recording = false;
|
|
1911
|
-
}
|
|
2123
|
+
_events = /* @__PURE__ */ new Map();
|
|
2124
|
+
_recording = false;
|
|
1912
2125
|
// TODO(burdon): Start/stop methods for recording data? By id?
|
|
1913
2126
|
// Alternatively, enable subscriptions to track/compute series.
|
|
1914
2127
|
// TODO(burdon): Hierarchical traces?
|
|
@@ -1918,8 +2131,8 @@ var Tracer = class {
|
|
|
1918
2131
|
keys() {
|
|
1919
2132
|
return Array.from(this._events.keys());
|
|
1920
2133
|
}
|
|
1921
|
-
get(
|
|
1922
|
-
const events = this._events.get(
|
|
2134
|
+
get(id2, filter) {
|
|
2135
|
+
const events = this._events.get(id2);
|
|
1923
2136
|
if (filter) {
|
|
1924
2137
|
return events?.filter((event) => Object.entries(filter).every(([key, value]) => event?.value[key] === value));
|
|
1925
2138
|
}
|
|
@@ -1936,11 +2149,11 @@ var Tracer = class {
|
|
|
1936
2149
|
this._recording = false;
|
|
1937
2150
|
return this;
|
|
1938
2151
|
}
|
|
1939
|
-
emit(
|
|
1940
|
-
this._post(this._createEvent(
|
|
2152
|
+
emit(id2, value) {
|
|
2153
|
+
this._post(this._createEvent(id2, value));
|
|
1941
2154
|
}
|
|
1942
|
-
mark(
|
|
1943
|
-
const event = this._createEvent(
|
|
2155
|
+
mark(id2, value) {
|
|
2156
|
+
const event = this._createEvent(id2, value);
|
|
1944
2157
|
const start = performance.now();
|
|
1945
2158
|
return {
|
|
1946
2159
|
start,
|
|
@@ -1950,9 +2163,9 @@ var Tracer = class {
|
|
|
1950
2163
|
}
|
|
1951
2164
|
};
|
|
1952
2165
|
}
|
|
1953
|
-
_createEvent(
|
|
2166
|
+
_createEvent(id2, value) {
|
|
1954
2167
|
const event = {
|
|
1955
|
-
id,
|
|
2168
|
+
id: id2,
|
|
1956
2169
|
timestamp: Date.now()
|
|
1957
2170
|
};
|
|
1958
2171
|
if (value !== void 0) {
|
|
@@ -1968,7 +2181,7 @@ var Tracer = class {
|
|
|
1968
2181
|
};
|
|
1969
2182
|
var tracer = new Tracer();
|
|
1970
2183
|
|
|
1971
|
-
//
|
|
2184
|
+
// src/tree.ts
|
|
1972
2185
|
import { truncateKey } from "@dxos/debug";
|
|
1973
2186
|
var stringifyTree = (node, ancestors = [], rows = []) => {
|
|
1974
2187
|
if (node.children?.length) {
|
|
@@ -2008,8 +2221,8 @@ var stringifyTree = (node, ancestors = [], rows = []) => {
|
|
|
2008
2221
|
return rows;
|
|
2009
2222
|
};
|
|
2010
2223
|
|
|
2011
|
-
//
|
|
2012
|
-
var
|
|
2224
|
+
// src/types.ts
|
|
2225
|
+
var isTruthy = (value) => !!value;
|
|
2013
2226
|
var isNonNullable = (value) => value != null;
|
|
2014
2227
|
var doAsync = async (fn) => fn();
|
|
2015
2228
|
var getProviderValue = (provider, arg) => {
|
|
@@ -2039,19 +2252,143 @@ var arrayMove = (array, from, to) => {
|
|
|
2039
2252
|
array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
|
|
2040
2253
|
return array;
|
|
2041
2254
|
};
|
|
2255
|
+
function arraySwap(array, from, to) {
|
|
2256
|
+
const current = array[from];
|
|
2257
|
+
array[from] = array[to];
|
|
2258
|
+
array[to] = current;
|
|
2259
|
+
return array;
|
|
2260
|
+
}
|
|
2042
2261
|
|
|
2043
|
-
//
|
|
2262
|
+
// src/unit.ts
|
|
2263
|
+
var createFormat = (unit) => {
|
|
2264
|
+
return (n, precision = unit.precision ?? 0) => {
|
|
2265
|
+
const value = n / unit.quotient;
|
|
2266
|
+
const formattedValue = value.toLocaleString("en-US", {
|
|
2267
|
+
minimumFractionDigits: precision,
|
|
2268
|
+
maximumFractionDigits: precision
|
|
2269
|
+
});
|
|
2270
|
+
return {
|
|
2271
|
+
unit,
|
|
2272
|
+
value,
|
|
2273
|
+
formattedValue,
|
|
2274
|
+
toString: () => `${formattedValue}${unit.symbol}`
|
|
2275
|
+
};
|
|
2276
|
+
};
|
|
2277
|
+
};
|
|
2278
|
+
var MS_SECONDS = 1e3;
|
|
2279
|
+
var MS_MINUTES = 60 * MS_SECONDS;
|
|
2280
|
+
var MS_HOURS = 60 * MS_MINUTES;
|
|
2281
|
+
var Unit = {
|
|
2282
|
+
// General.
|
|
2283
|
+
Percent: createFormat({
|
|
2284
|
+
symbol: "%",
|
|
2285
|
+
quotient: 1 / 100,
|
|
2286
|
+
precision: 2
|
|
2287
|
+
}),
|
|
2288
|
+
Thousand: createFormat({
|
|
2289
|
+
symbol: "k",
|
|
2290
|
+
quotient: 1e3,
|
|
2291
|
+
precision: 2
|
|
2292
|
+
}),
|
|
2293
|
+
// Bytes (note KB vs KiB).
|
|
2294
|
+
Gigabyte: createFormat({
|
|
2295
|
+
symbol: "GB",
|
|
2296
|
+
quotient: 1e3 * 1e3 * 1e3,
|
|
2297
|
+
precision: 2
|
|
2298
|
+
}),
|
|
2299
|
+
Megabyte: createFormat({
|
|
2300
|
+
symbol: "MB",
|
|
2301
|
+
quotient: 1e3 * 1e3,
|
|
2302
|
+
precision: 2
|
|
2303
|
+
}),
|
|
2304
|
+
Kilobyte: createFormat({
|
|
2305
|
+
symbol: "KB",
|
|
2306
|
+
quotient: 1e3,
|
|
2307
|
+
precision: 2
|
|
2308
|
+
}),
|
|
2309
|
+
Byte: createFormat({
|
|
2310
|
+
symbol: "B",
|
|
2311
|
+
quotient: 1
|
|
2312
|
+
}),
|
|
2313
|
+
// Time.
|
|
2314
|
+
Hour: createFormat({
|
|
2315
|
+
symbol: "h",
|
|
2316
|
+
quotient: MS_HOURS
|
|
2317
|
+
}),
|
|
2318
|
+
Minute: createFormat({
|
|
2319
|
+
symbol: "m",
|
|
2320
|
+
quotient: MS_MINUTES
|
|
2321
|
+
}),
|
|
2322
|
+
Second: createFormat({
|
|
2323
|
+
symbol: "s",
|
|
2324
|
+
quotient: MS_SECONDS,
|
|
2325
|
+
precision: 1
|
|
2326
|
+
}),
|
|
2327
|
+
Millisecond: createFormat({
|
|
2328
|
+
symbol: "ms",
|
|
2329
|
+
quotient: 1
|
|
2330
|
+
}),
|
|
2331
|
+
Duration: (n) => {
|
|
2332
|
+
const hours = Math.floor(n / MS_HOURS);
|
|
2333
|
+
const minutes = Math.floor(n % MS_HOURS / MS_MINUTES);
|
|
2334
|
+
if (hours) {
|
|
2335
|
+
const formattedValue = minutes ? `${hours}h ${minutes}m` : `${hours}h`;
|
|
2336
|
+
return {
|
|
2337
|
+
unit: {
|
|
2338
|
+
symbol: "h",
|
|
2339
|
+
quotient: MS_HOURS
|
|
2340
|
+
},
|
|
2341
|
+
value: hours,
|
|
2342
|
+
formattedValue,
|
|
2343
|
+
toString: () => formattedValue
|
|
2344
|
+
};
|
|
2345
|
+
}
|
|
2346
|
+
if (minutes) {
|
|
2347
|
+
const seconds2 = (n - MS_MINUTES * minutes) / MS_SECONDS;
|
|
2348
|
+
const formattedValue = seconds2 ? `${minutes}m ${seconds2}s` : `${minutes}m`;
|
|
2349
|
+
return {
|
|
2350
|
+
unit: {
|
|
2351
|
+
symbol: "m",
|
|
2352
|
+
quotient: MS_MINUTES
|
|
2353
|
+
},
|
|
2354
|
+
value: minutes,
|
|
2355
|
+
formattedValue,
|
|
2356
|
+
toString: () => formattedValue
|
|
2357
|
+
};
|
|
2358
|
+
}
|
|
2359
|
+
const seconds = n >= MS_SECONDS;
|
|
2360
|
+
if (seconds) {
|
|
2361
|
+
return Unit.Second(n);
|
|
2362
|
+
}
|
|
2363
|
+
return Unit.Millisecond(n);
|
|
2364
|
+
}
|
|
2365
|
+
};
|
|
2366
|
+
|
|
2367
|
+
// src/url.ts
|
|
2368
|
+
var createUrl = (url, search) => {
|
|
2369
|
+
const base = typeof url === "string" ? new URL(url) : url;
|
|
2370
|
+
if (search) {
|
|
2371
|
+
base.search = new URLSearchParams(Object.entries(search).filter(([_, value]) => value != null)).toString();
|
|
2372
|
+
}
|
|
2373
|
+
return base;
|
|
2374
|
+
};
|
|
2375
|
+
|
|
2376
|
+
// src/weak.ts
|
|
2044
2377
|
var WeakDictionary = class {
|
|
2378
|
+
_internal = /* @__PURE__ */ new Map();
|
|
2379
|
+
_finalization = new FinalizationRegistry(({ key, ref }) => {
|
|
2380
|
+
if (this._internal.get(key) === ref) {
|
|
2381
|
+
this._internal.delete(key);
|
|
2382
|
+
}
|
|
2383
|
+
});
|
|
2045
2384
|
constructor(entries2) {
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
]));
|
|
2054
|
-
entries2?.forEach(([key, value]) => this._register(key, value));
|
|
2385
|
+
if (entries2) {
|
|
2386
|
+
for (const [key, value] of entries2) {
|
|
2387
|
+
const ref = new WeakRef(value);
|
|
2388
|
+
this._internal.set(key, ref);
|
|
2389
|
+
this._register(key, value, ref);
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
2055
2392
|
}
|
|
2056
2393
|
*entries() {
|
|
2057
2394
|
for (const [key, value] of this._internal) {
|
|
@@ -2091,10 +2428,45 @@ var WeakDictionary = class {
|
|
|
2091
2428
|
return this._internal.get(key)?.deref();
|
|
2092
2429
|
}
|
|
2093
2430
|
set(key, value) {
|
|
2094
|
-
this._internal.
|
|
2095
|
-
|
|
2431
|
+
const previous = this._internal.get(key)?.deref();
|
|
2432
|
+
if (previous) {
|
|
2433
|
+
this._unregister(previous);
|
|
2434
|
+
}
|
|
2435
|
+
const ref = new WeakRef(value);
|
|
2436
|
+
this._internal.set(key, ref);
|
|
2437
|
+
this._register(key, value, ref);
|
|
2096
2438
|
return this;
|
|
2097
2439
|
}
|
|
2440
|
+
/**
|
|
2441
|
+
* Returns the value for the given key if present, otherwise inserts and returns the default value.
|
|
2442
|
+
* @param key - The key to look up or insert.
|
|
2443
|
+
* @param defaultValue - The value to insert if the key is not present.
|
|
2444
|
+
* @returns The existing or newly inserted value.
|
|
2445
|
+
*/
|
|
2446
|
+
getOrInsert(key, defaultValue) {
|
|
2447
|
+
const existing = this.get(key);
|
|
2448
|
+
if (existing !== void 0) {
|
|
2449
|
+
return existing;
|
|
2450
|
+
}
|
|
2451
|
+
this.set(key, defaultValue);
|
|
2452
|
+
return defaultValue;
|
|
2453
|
+
}
|
|
2454
|
+
/**
|
|
2455
|
+
* Returns the value for the given key if present, otherwise computes, inserts, and returns a new value.
|
|
2456
|
+
* The callback is only invoked when the key is missing.
|
|
2457
|
+
* @param key - The key to look up or insert.
|
|
2458
|
+
* @param callbackfn - Function to compute the value if the key is not present.
|
|
2459
|
+
* @returns The existing or newly computed value.
|
|
2460
|
+
*/
|
|
2461
|
+
getOrInsertComputed(key, callbackfn) {
|
|
2462
|
+
const existing = this.get(key);
|
|
2463
|
+
if (existing !== void 0) {
|
|
2464
|
+
return existing;
|
|
2465
|
+
}
|
|
2466
|
+
const value = callbackfn(key);
|
|
2467
|
+
this.set(key, value);
|
|
2468
|
+
return value;
|
|
2469
|
+
}
|
|
2098
2470
|
has(key) {
|
|
2099
2471
|
return this._internal.has(key) && this._internal.get(key).deref() !== void 0;
|
|
2100
2472
|
}
|
|
@@ -2125,19 +2497,16 @@ var WeakDictionary = class {
|
|
|
2125
2497
|
}
|
|
2126
2498
|
});
|
|
2127
2499
|
}
|
|
2128
|
-
_register(key, value) {
|
|
2129
|
-
this._finalization.register(value,
|
|
2130
|
-
|
|
2500
|
+
_register(key, value, ref) {
|
|
2501
|
+
this._finalization.register(value, {
|
|
2502
|
+
key,
|
|
2503
|
+
ref
|
|
2131
2504
|
}, value);
|
|
2132
2505
|
}
|
|
2133
2506
|
_unregister(value) {
|
|
2134
2507
|
this._finalization.unregister(value);
|
|
2135
2508
|
}
|
|
2136
2509
|
};
|
|
2137
|
-
|
|
2138
|
-
// packages/common/util/src/assume.ts
|
|
2139
|
-
function assumeType(value) {
|
|
2140
|
-
}
|
|
2141
2510
|
export {
|
|
2142
2511
|
BitField,
|
|
2143
2512
|
Callback,
|
|
@@ -2147,11 +2516,14 @@ export {
|
|
|
2147
2516
|
ComplexSet,
|
|
2148
2517
|
HumanHasher,
|
|
2149
2518
|
MapEntry,
|
|
2519
|
+
SKIP,
|
|
2150
2520
|
SlidingWindowSummary,
|
|
2151
2521
|
Tracer,
|
|
2522
|
+
Unit,
|
|
2152
2523
|
WeakDictionary,
|
|
2153
2524
|
accessBy,
|
|
2154
2525
|
arrayMove,
|
|
2526
|
+
arraySwap,
|
|
2155
2527
|
arrayToBuffer,
|
|
2156
2528
|
arrayToHex,
|
|
2157
2529
|
arrayToString,
|
|
@@ -2162,18 +2534,28 @@ export {
|
|
|
2162
2534
|
capitalize,
|
|
2163
2535
|
chunkArray,
|
|
2164
2536
|
clamp,
|
|
2537
|
+
clearCaches,
|
|
2538
|
+
clearIndexedDB,
|
|
2539
|
+
clearOPFS,
|
|
2540
|
+
clearServiceWorkers,
|
|
2165
2541
|
clearUndefined,
|
|
2542
|
+
coerceArray,
|
|
2166
2543
|
compareMulti,
|
|
2167
2544
|
compareObject,
|
|
2168
2545
|
compareScalar,
|
|
2169
2546
|
compareString,
|
|
2547
|
+
compositeKey,
|
|
2170
2548
|
createBinder,
|
|
2171
2549
|
createBucketReducer,
|
|
2550
|
+
createFilename,
|
|
2172
2551
|
createGroupReducer,
|
|
2552
|
+
createReplacer,
|
|
2173
2553
|
createSetDispatch,
|
|
2554
|
+
createUrl,
|
|
2174
2555
|
decamelize,
|
|
2175
2556
|
deepMapValues,
|
|
2176
2557
|
deepMapValuesAsync,
|
|
2558
|
+
defaultFilter,
|
|
2177
2559
|
defaultMap,
|
|
2178
2560
|
defer,
|
|
2179
2561
|
deferAsync,
|
|
@@ -2185,12 +2567,11 @@ export {
|
|
|
2185
2567
|
entry,
|
|
2186
2568
|
exponentialBackoffInterval,
|
|
2187
2569
|
forEachAsync,
|
|
2188
|
-
|
|
2570
|
+
formatErrorWithCauses,
|
|
2189
2571
|
getAsyncProviderValue,
|
|
2190
2572
|
getDate,
|
|
2191
2573
|
getDebugName,
|
|
2192
2574
|
getDeep,
|
|
2193
|
-
getFirstTwoRenderableChars,
|
|
2194
2575
|
getHostPlatform,
|
|
2195
2576
|
getPrototypeSpecificInstanceId,
|
|
2196
2577
|
getProviderValue,
|
|
@@ -2199,6 +2580,7 @@ export {
|
|
|
2199
2580
|
hexToHue,
|
|
2200
2581
|
humanize,
|
|
2201
2582
|
hyphenize,
|
|
2583
|
+
id,
|
|
2202
2584
|
idEmoji,
|
|
2203
2585
|
idHue,
|
|
2204
2586
|
inferObjectOrder,
|
|
@@ -2206,14 +2588,21 @@ export {
|
|
|
2206
2588
|
intersectBy,
|
|
2207
2589
|
intersection,
|
|
2208
2590
|
iosCheck,
|
|
2591
|
+
isBun,
|
|
2592
|
+
isMobile,
|
|
2593
|
+
isMobileOrTablet,
|
|
2209
2594
|
isNode,
|
|
2210
2595
|
isNonNullable,
|
|
2211
|
-
|
|
2596
|
+
isTauri,
|
|
2597
|
+
isTruthy,
|
|
2598
|
+
isWellFormedId,
|
|
2599
|
+
isWellFormedIdPart,
|
|
2212
2600
|
joinTables,
|
|
2213
2601
|
jsonKeyReplacer,
|
|
2214
2602
|
jsonReplacer,
|
|
2215
2603
|
jsonify,
|
|
2216
2604
|
jsonlogify,
|
|
2605
|
+
kebabize,
|
|
2217
2606
|
keyToEmoji,
|
|
2218
2607
|
keyToFallback,
|
|
2219
2608
|
keyToHue,
|
|
@@ -2222,7 +2611,6 @@ export {
|
|
|
2222
2611
|
makeSet,
|
|
2223
2612
|
mapValues,
|
|
2224
2613
|
median,
|
|
2225
|
-
mobileAndTabletCheck,
|
|
2226
2614
|
numericalValues,
|
|
2227
2615
|
omit,
|
|
2228
2616
|
orderKeys,
|
|
@@ -2238,15 +2626,18 @@ export {
|
|
|
2238
2626
|
removeBy,
|
|
2239
2627
|
removeProperties,
|
|
2240
2628
|
removeUndefinedProperties,
|
|
2629
|
+
retry,
|
|
2241
2630
|
safariCheck,
|
|
2242
2631
|
safeAwaitAll,
|
|
2243
2632
|
safeInstanceof,
|
|
2244
2633
|
safeParseFloat,
|
|
2245
2634
|
safeParseInt,
|
|
2246
2635
|
safeParseJson,
|
|
2247
|
-
|
|
2636
|
+
safeStringify,
|
|
2637
|
+
safeUrl,
|
|
2248
2638
|
setDeep,
|
|
2249
2639
|
sortKeys,
|
|
2640
|
+
splitCompositeKey,
|
|
2250
2641
|
stringToArray,
|
|
2251
2642
|
stringifyTree,
|
|
2252
2643
|
stripUndefined,
|
|
@@ -2256,6 +2647,7 @@ export {
|
|
|
2256
2647
|
toFallback,
|
|
2257
2648
|
toHue,
|
|
2258
2649
|
tracer,
|
|
2650
|
+
trim,
|
|
2259
2651
|
visitValues
|
|
2260
2652
|
};
|
|
2261
2653
|
//# sourceMappingURL=index.mjs.map
|