@dxos/util 0.5.9-main.f099efe → 0.5.9-next.73dcc17
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 +497 -446
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +531 -480
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/index.d.ts +10 -9
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/params.d.ts +22 -0
- package/dist/types/src/params.d.ts.map +1 -0
- package/dist/types/src/params.test.d.ts +2 -0
- package/dist/types/src/params.test.d.ts.map +1 -0
- package/package.json +8 -6
- package/src/index.ts +10 -9
- package/src/params.test.ts +38 -0
- package/src/params.ts +68 -0
- package/src/typings.d.ts +5 -0
|
@@ -199,6 +199,60 @@ var createSetDispatch = ({ handlers }) => {
|
|
|
199
199
|
});
|
|
200
200
|
};
|
|
201
201
|
|
|
202
|
+
// packages/common/util/src/circular-buffer.ts
|
|
203
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
204
|
+
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/util/src/circular-buffer.ts";
|
|
205
|
+
var CircularBuffer = class {
|
|
206
|
+
constructor(size) {
|
|
207
|
+
this._nextIndex = 0;
|
|
208
|
+
this._elementCount = 0;
|
|
209
|
+
invariant4(size >= 1, void 0, {
|
|
210
|
+
F: __dxlog_file4,
|
|
211
|
+
L: 13,
|
|
212
|
+
S: this,
|
|
213
|
+
A: [
|
|
214
|
+
"size >= 1",
|
|
215
|
+
""
|
|
216
|
+
]
|
|
217
|
+
});
|
|
218
|
+
this._buffer = new Array(size);
|
|
219
|
+
}
|
|
220
|
+
push(element) {
|
|
221
|
+
this._buffer[this._nextIndex] = element;
|
|
222
|
+
this._nextIndex = (this._nextIndex + 1) % this._buffer.length;
|
|
223
|
+
this._elementCount = Math.min(this._buffer.length, this._elementCount + 1);
|
|
224
|
+
}
|
|
225
|
+
getLast() {
|
|
226
|
+
if (this._elementCount === 0) {
|
|
227
|
+
return void 0;
|
|
228
|
+
}
|
|
229
|
+
if (this._nextIndex === 0) {
|
|
230
|
+
return this._buffer[this._buffer.length - 1];
|
|
231
|
+
}
|
|
232
|
+
return this._buffer[this._nextIndex - 1];
|
|
233
|
+
}
|
|
234
|
+
[Symbol.iterator]() {
|
|
235
|
+
return this.values();
|
|
236
|
+
}
|
|
237
|
+
*values() {
|
|
238
|
+
if (this._elementCount === 0) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (this._elementCount < this._buffer.length) {
|
|
242
|
+
for (let i = 0; i < this._elementCount; i++) {
|
|
243
|
+
yield this._buffer[i];
|
|
244
|
+
}
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
for (let i = this._nextIndex; i < this._buffer.length; i++) {
|
|
248
|
+
yield this._buffer[i];
|
|
249
|
+
}
|
|
250
|
+
for (let i = 0; i < this._nextIndex; i++) {
|
|
251
|
+
yield this._buffer[i];
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
|
|
202
256
|
// packages/common/util/src/complex.ts
|
|
203
257
|
import { inspect } from "@dxos/node-std/util";
|
|
204
258
|
import { inspectObject, raise } from "@dxos/debug";
|
|
@@ -364,188 +418,42 @@ var makeMap = (keyProjection) => class BoundComplexMap extends ComplexMap {
|
|
|
364
418
|
}
|
|
365
419
|
};
|
|
366
420
|
|
|
421
|
+
// packages/common/util/src/explicit-resource-management-polyfill.ts
|
|
422
|
+
Symbol.dispose ??= Symbol("Symbol.dispose");
|
|
423
|
+
Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
|
|
424
|
+
|
|
425
|
+
// packages/common/util/src/defer.ts
|
|
426
|
+
var defer = (fn) => new DeferGuard(fn);
|
|
427
|
+
var DeferGuard = class {
|
|
428
|
+
/**
|
|
429
|
+
* @internal
|
|
430
|
+
*/
|
|
431
|
+
constructor(_fn) {
|
|
432
|
+
this._fn = _fn;
|
|
433
|
+
}
|
|
434
|
+
[Symbol.dispose]() {
|
|
435
|
+
const result = this._fn();
|
|
436
|
+
if (result instanceof Promise) {
|
|
437
|
+
throw new Error("Async functions in defer are not supported. Use deferAsync instead.");
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
var deferAsync = (fn) => new DeferAsyncGuard(fn);
|
|
442
|
+
var DeferAsyncGuard = class {
|
|
443
|
+
/**
|
|
444
|
+
* @internal
|
|
445
|
+
*/
|
|
446
|
+
constructor(_fn) {
|
|
447
|
+
this._fn = _fn;
|
|
448
|
+
}
|
|
449
|
+
async [Symbol.asyncDispose]() {
|
|
450
|
+
await this._fn();
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
|
|
367
454
|
// packages/common/util/src/defer-function.ts
|
|
368
455
|
var deferFunction = (fnProvider) => (...args) => fnProvider()(...args);
|
|
369
456
|
|
|
370
|
-
// packages/common/util/src/to-fallback.ts
|
|
371
|
-
var idEmoji = [
|
|
372
|
-
// When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)
|
|
373
|
-
// 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.
|
|
374
|
-
// This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:
|
|
375
|
-
// – not people or isolated anthropomorphic faces
|
|
376
|
-
// – not flags
|
|
377
|
-
// – more concrete than abstract
|
|
378
|
-
// – less culturally specific
|
|
379
|
-
// – less easily confused with another emoji in the set
|
|
380
|
-
// – requires less special knowledge to identify
|
|
381
|
-
// – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)
|
|
382
|
-
// – less common as a signifier in UX
|
|
383
|
-
// NOTE that this is intentionally an array of strings because of the way emoji graphemes work.
|
|
384
|
-
"\u{1F479}",
|
|
385
|
-
"\u{1F47B}",
|
|
386
|
-
"\u{1F47D}",
|
|
387
|
-
"\u{1F916}",
|
|
388
|
-
"\u{1F383}",
|
|
389
|
-
"\u{1F9BE}",
|
|
390
|
-
"\u{1F9BF}",
|
|
391
|
-
"\u{1F9B7}",
|
|
392
|
-
"\u{1F463}",
|
|
393
|
-
"\u{1F441}\uFE0F",
|
|
394
|
-
"\u{1F9F6}",
|
|
395
|
-
"\u{1F451}",
|
|
396
|
-
"\u{1F412}",
|
|
397
|
-
"\u{1F986}",
|
|
398
|
-
"\u{1F989}",
|
|
399
|
-
"\u{1F434}",
|
|
400
|
-
"\u{1F984}",
|
|
401
|
-
"\u{1F41D}",
|
|
402
|
-
"\u{1F98B}",
|
|
403
|
-
"\u{1F41E}",
|
|
404
|
-
"\u{1FAB2}",
|
|
405
|
-
"\u{1F422}",
|
|
406
|
-
"\u{1F98E}",
|
|
407
|
-
"\u{1F995}",
|
|
408
|
-
"\u{1F991}",
|
|
409
|
-
"\u{1F980}",
|
|
410
|
-
"\u{1F420}",
|
|
411
|
-
"\u{1F42C}",
|
|
412
|
-
"\u{1F40B}",
|
|
413
|
-
"\u{1F9AD}",
|
|
414
|
-
"\u{1F405}",
|
|
415
|
-
"\u{1F406}",
|
|
416
|
-
"\u{1F993}",
|
|
417
|
-
"\u{1F98D}",
|
|
418
|
-
"\u{1F9A7}",
|
|
419
|
-
"\u{1F418}",
|
|
420
|
-
"\u{1F42B}",
|
|
421
|
-
"\u{1F992}",
|
|
422
|
-
"\u{1F998}",
|
|
423
|
-
"\u{1F9AC}",
|
|
424
|
-
"\u{1F416}",
|
|
425
|
-
"\u{1F40F}",
|
|
426
|
-
"\u{1F98C}",
|
|
427
|
-
"\u{1F415}",
|
|
428
|
-
"\u{1F408}",
|
|
429
|
-
"\u{1F413}",
|
|
430
|
-
"\u{1F99A}",
|
|
431
|
-
"\u{1F99C}",
|
|
432
|
-
"\u{1F9A2}",
|
|
433
|
-
"\u{1F9A9}",
|
|
434
|
-
"\u{1F9A6}",
|
|
435
|
-
"\u{1F401}",
|
|
436
|
-
"\u{1F43F}\uFE0F",
|
|
437
|
-
"\u{1F335}",
|
|
438
|
-
"\u{1F332}",
|
|
439
|
-
"\u{1F333}",
|
|
440
|
-
"\u{1FAB5}",
|
|
441
|
-
"\u{1F331}",
|
|
442
|
-
"\u{1F341}",
|
|
443
|
-
"\u{1FABA}",
|
|
444
|
-
"\u{1F344}",
|
|
445
|
-
"\u{1F41A}",
|
|
446
|
-
"\u{1FAB8}",
|
|
447
|
-
"\u{1FAA8}",
|
|
448
|
-
"\u{1F33E}",
|
|
449
|
-
"\u{1F337}",
|
|
450
|
-
"\u{1F33B}",
|
|
451
|
-
"\u2600\uFE0F",
|
|
452
|
-
"\u{1F319}",
|
|
453
|
-
"\u{1FA90}",
|
|
454
|
-
"\u2B50\uFE0F",
|
|
455
|
-
"\u26A1\uFE0F",
|
|
456
|
-
"\u2604\uFE0F",
|
|
457
|
-
"\u{1F525}",
|
|
458
|
-
"\u{1F308}",
|
|
459
|
-
"\u2601\uFE0F",
|
|
460
|
-
"\u{1F4A7}",
|
|
461
|
-
"\u26F1\uFE0F",
|
|
462
|
-
"\u{1F30A}",
|
|
463
|
-
"\u{1F34E}",
|
|
464
|
-
"\u{1F34B}",
|
|
465
|
-
"\u{1F349}",
|
|
466
|
-
"\u{1F347}",
|
|
467
|
-
"\u{1FAD0}",
|
|
468
|
-
"\u{1F348}",
|
|
469
|
-
"\u{1F352}",
|
|
470
|
-
"\u{1F351}",
|
|
471
|
-
"\u{1F96D}",
|
|
472
|
-
"\u{1F34D}",
|
|
473
|
-
"\u{1F965}",
|
|
474
|
-
"\u{1F95D}",
|
|
475
|
-
"\u{1F951}",
|
|
476
|
-
"\u{1F336}\uFE0F",
|
|
477
|
-
"\u{1F33D}",
|
|
478
|
-
"\u{1F955}",
|
|
479
|
-
"\u{1F36C}",
|
|
480
|
-
"\u{1F95C}",
|
|
481
|
-
"\u{1FAD6}",
|
|
482
|
-
"\u2615\uFE0F",
|
|
483
|
-
"\u{1F375}",
|
|
484
|
-
"\u{1F9CA}",
|
|
485
|
-
"\u{1F9C2}",
|
|
486
|
-
"\u{1F3D4}\uFE0F",
|
|
487
|
-
"\u2693\uFE0F",
|
|
488
|
-
"\u{1F6DF}",
|
|
489
|
-
"\u{1F3DD}\uFE0F",
|
|
490
|
-
"\u{1F6F6}",
|
|
491
|
-
"\u{1F680}",
|
|
492
|
-
"\u{1F6F0}\uFE0F",
|
|
493
|
-
"\u26F2\uFE0F",
|
|
494
|
-
"\u{1F3F0}",
|
|
495
|
-
"\u{1F6B2}",
|
|
496
|
-
"\u26FA\uFE0F",
|
|
497
|
-
"\u{1F399}\uFE0F",
|
|
498
|
-
"\u{1F9F2}",
|
|
499
|
-
"\u2699\uFE0F",
|
|
500
|
-
"\u{1F529}",
|
|
501
|
-
"\u{1F52E}",
|
|
502
|
-
"\u{1F52D}",
|
|
503
|
-
"\u{1F52C}",
|
|
504
|
-
"\u{1F9EC}",
|
|
505
|
-
"\u{1F321}\uFE0F",
|
|
506
|
-
"\u{1F9FA}",
|
|
507
|
-
"\u{1F6CE}\uFE0F",
|
|
508
|
-
"\u{1F511}",
|
|
509
|
-
"\u{1FA91}",
|
|
510
|
-
"\u{1F9F8}",
|
|
511
|
-
"\u{1F388}",
|
|
512
|
-
"\u{1F380}",
|
|
513
|
-
"\u{1F38A}",
|
|
514
|
-
"\u267B\uFE0F",
|
|
515
|
-
"\u{1F3B5}"
|
|
516
|
-
];
|
|
517
|
-
var idHue = [
|
|
518
|
-
"red",
|
|
519
|
-
// 'orange' as const, /* More shades in these palettes are considered “ugly” */
|
|
520
|
-
"amber",
|
|
521
|
-
// 'yellow' as const, /* More shades in these palettes are considered “ugly” */
|
|
522
|
-
"lime",
|
|
523
|
-
"green",
|
|
524
|
-
"emerald",
|
|
525
|
-
"teal",
|
|
526
|
-
"cyan",
|
|
527
|
-
// 'sky' as const, /* Omitted since it is quite similar to the primary accent palette */
|
|
528
|
-
// 'blue' as const, /* Omitted since it is quite similar to the primary accent palette */
|
|
529
|
-
// 'indigo' as const, /* Omitted since it is quite similar to the primary accent palette */
|
|
530
|
-
"violet",
|
|
531
|
-
"purple",
|
|
532
|
-
"fuchsia",
|
|
533
|
-
"pink",
|
|
534
|
-
"rose"
|
|
535
|
-
];
|
|
536
|
-
var keyToEmoji = (key) => hexToEmoji(key.toHex());
|
|
537
|
-
var hexToEmoji = (hex) => toEmoji(parseInt(hex, 16));
|
|
538
|
-
var toEmoji = (hash) => idEmoji[hash % idEmoji.length];
|
|
539
|
-
var keyToHue = (key) => hexToHue(key.toHex());
|
|
540
|
-
var hexToHue = (hex) => toHue(parseInt(hex, 16));
|
|
541
|
-
var toHue = (hash) => idHue[hash % idHue.length];
|
|
542
|
-
var keyToFallback = (key) => hexToFallback(key.toHex());
|
|
543
|
-
var hexToFallback = (hex) => toFallback(parseInt(hex, 16));
|
|
544
|
-
var toFallback = (hash) => ({
|
|
545
|
-
emoji: toEmoji(hash),
|
|
546
|
-
hue: toHue(hash)
|
|
547
|
-
});
|
|
548
|
-
|
|
549
457
|
// packages/common/util/src/entry.ts
|
|
550
458
|
var entry = (map, key) => new MapEntry(map, key);
|
|
551
459
|
var MapEntry = class {
|
|
@@ -574,6 +482,9 @@ var MapEntry = class {
|
|
|
574
482
|
}
|
|
575
483
|
};
|
|
576
484
|
|
|
485
|
+
// packages/common/util/src/for-each-async.ts
|
|
486
|
+
var forEachAsync = (items, fn) => Promise.all(items.map(fn));
|
|
487
|
+
|
|
577
488
|
// packages/common/util/src/human-hash.ts
|
|
578
489
|
import { PublicKey } from "@dxos/keys";
|
|
579
490
|
var DEFAULT_WORDLIST = [
|
|
@@ -917,6 +828,61 @@ var exponentialBackoffInterval = (cb, initialInterval) => {
|
|
|
917
828
|
return () => clearTimeout(timeoutId);
|
|
918
829
|
};
|
|
919
830
|
|
|
831
|
+
// packages/common/util/src/map.ts
|
|
832
|
+
var defaultMap = (map, key, def) => {
|
|
833
|
+
let value = map.get(key);
|
|
834
|
+
if (value === void 0) {
|
|
835
|
+
value = typeof def === "function" ? def() : def;
|
|
836
|
+
map.set(key, value);
|
|
837
|
+
}
|
|
838
|
+
return value;
|
|
839
|
+
};
|
|
840
|
+
|
|
841
|
+
// packages/common/util/src/instance-id.ts
|
|
842
|
+
var symbol = Symbol.for("dxos.instance-contexts");
|
|
843
|
+
var instanceContexts = globalThis[symbol] ??= /* @__PURE__ */ new WeakMap();
|
|
844
|
+
var getPrototypeSpecificInstanceId = (instance) => {
|
|
845
|
+
const prototype = Object.getPrototypeOf(instance);
|
|
846
|
+
const instanceCtx = defaultMap(instanceContexts, prototype, () => ({
|
|
847
|
+
nextId: 0,
|
|
848
|
+
instanceIds: /* @__PURE__ */ new WeakMap()
|
|
849
|
+
}));
|
|
850
|
+
let id = instanceCtx.instanceIds.get(instance);
|
|
851
|
+
if (id === void 0) {
|
|
852
|
+
id = instanceCtx.nextId++;
|
|
853
|
+
instanceCtx.instanceIds.set(instance, id);
|
|
854
|
+
}
|
|
855
|
+
return id;
|
|
856
|
+
};
|
|
857
|
+
var getDebugName = (instance) => {
|
|
858
|
+
if (instance == null) {
|
|
859
|
+
return "null";
|
|
860
|
+
}
|
|
861
|
+
const prototype = Object.getPrototypeOf(instance);
|
|
862
|
+
return `${prototype.constructor.name}#${getPrototypeSpecificInstanceId(instance)}`;
|
|
863
|
+
};
|
|
864
|
+
|
|
865
|
+
// packages/common/util/src/join-tables.ts
|
|
866
|
+
var joinTables = (leftColumn, rightColumn, left, right) => {
|
|
867
|
+
const map = /* @__PURE__ */ new Map();
|
|
868
|
+
const used = /* @__PURE__ */ new Set();
|
|
869
|
+
for (const row of right) {
|
|
870
|
+
map.set(row[rightColumn], row);
|
|
871
|
+
}
|
|
872
|
+
const result = [];
|
|
873
|
+
for (const row of left) {
|
|
874
|
+
const right2 = map.get(row[leftColumn]);
|
|
875
|
+
used.add(right2);
|
|
876
|
+
result.push(Object.assign(right2 ?? {}, row));
|
|
877
|
+
}
|
|
878
|
+
for (const row of right) {
|
|
879
|
+
if (!used.has(row)) {
|
|
880
|
+
result.push(row);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
return result;
|
|
884
|
+
};
|
|
885
|
+
|
|
920
886
|
// packages/common/util/src/json.ts
|
|
921
887
|
import { inspect as inspect2 } from "@dxos/node-std/util";
|
|
922
888
|
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
@@ -1011,36 +977,109 @@ var jsonlogify = (value, depth = 0, visitedObjects = /* @__PURE__ */ new WeakSet
|
|
|
1011
977
|
return value.toJSON();
|
|
1012
978
|
} else {
|
|
1013
979
|
const res = {};
|
|
1014
|
-
for (const key of Object.keys(value)) {
|
|
1015
|
-
res[key] = jsonlogify(value[key], depth + 1, visitedObjects);
|
|
980
|
+
for (const key of Object.keys(value)) {
|
|
981
|
+
res[key] = jsonlogify(value[key], depth + 1, visitedObjects);
|
|
982
|
+
}
|
|
983
|
+
return res;
|
|
984
|
+
}
|
|
985
|
+
} finally {
|
|
986
|
+
visitedObjects.delete(value);
|
|
987
|
+
}
|
|
988
|
+
} else {
|
|
989
|
+
return value;
|
|
990
|
+
}
|
|
991
|
+
};
|
|
992
|
+
var jsonKeyReplacer = (options = {}) => (key, value) => {
|
|
993
|
+
if (typeof value === "string") {
|
|
994
|
+
const key2 = PublicKey2.fromHex(value);
|
|
995
|
+
if (key2.toHex() === value) {
|
|
996
|
+
return options.humanize ? humanize(key2) : options.truncate ? key2.truncate() : key2.toHex();
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
return value;
|
|
1000
|
+
};
|
|
1001
|
+
|
|
1002
|
+
// packages/common/util/src/map-values.ts
|
|
1003
|
+
var mapValues = (obj, fn) => {
|
|
1004
|
+
const result = {};
|
|
1005
|
+
Object.keys(obj).forEach((key) => {
|
|
1006
|
+
result[key] = fn(obj[key], key);
|
|
1007
|
+
});
|
|
1008
|
+
return result;
|
|
1009
|
+
};
|
|
1010
|
+
var deepMapValues = (value, fn) => {
|
|
1011
|
+
return new DeepMapper(fn).map(value);
|
|
1012
|
+
};
|
|
1013
|
+
var DeepMapper = class {
|
|
1014
|
+
constructor(_fn) {
|
|
1015
|
+
this._fn = _fn;
|
|
1016
|
+
this._cyclic = /* @__PURE__ */ new Map();
|
|
1017
|
+
this._recurse = (value) => {
|
|
1018
|
+
if (this._cyclic.has(value)) {
|
|
1019
|
+
return this._cyclic.get(value);
|
|
1020
|
+
}
|
|
1021
|
+
if (Array.isArray(value)) {
|
|
1022
|
+
const res = new Array(value.length);
|
|
1023
|
+
this._cyclic.set(value, res);
|
|
1024
|
+
for (let i = 0; i < value.length; i++) {
|
|
1025
|
+
res[i] = this.map(value[i]);
|
|
1026
|
+
}
|
|
1027
|
+
return res;
|
|
1028
|
+
} else if (value !== null && typeof value === "object") {
|
|
1029
|
+
const res = {};
|
|
1030
|
+
this._cyclic.set(value, res);
|
|
1031
|
+
for (const key in value) {
|
|
1032
|
+
res[key] = this.map(value[key]);
|
|
1033
|
+
}
|
|
1034
|
+
return res;
|
|
1035
|
+
} else {
|
|
1036
|
+
return value;
|
|
1037
|
+
}
|
|
1038
|
+
};
|
|
1039
|
+
}
|
|
1040
|
+
map(value) {
|
|
1041
|
+
if (this._cyclic.has(value)) {
|
|
1042
|
+
return this._cyclic.get(value);
|
|
1043
|
+
}
|
|
1044
|
+
return this._fn(value, this._recurse);
|
|
1045
|
+
}
|
|
1046
|
+
};
|
|
1047
|
+
var deepMapValuesAsync = (value, fn) => {
|
|
1048
|
+
return new DeepMapperAsync(fn).map(value);
|
|
1049
|
+
};
|
|
1050
|
+
var DeepMapperAsync = class {
|
|
1051
|
+
constructor(_fn) {
|
|
1052
|
+
this._fn = _fn;
|
|
1053
|
+
this._cyclic = /* @__PURE__ */ new Map();
|
|
1054
|
+
this._recurse = async (value) => {
|
|
1055
|
+
if (this._cyclic.has(value)) {
|
|
1056
|
+
return this._cyclic.get(value);
|
|
1057
|
+
}
|
|
1058
|
+
if (Array.isArray(value)) {
|
|
1059
|
+
const res = new Array(value.length);
|
|
1060
|
+
this._cyclic.set(value, res);
|
|
1061
|
+
for (let i = 0; i < value.length; i++) {
|
|
1062
|
+
res[i] = await this.map(value[i]);
|
|
1063
|
+
}
|
|
1064
|
+
return res;
|
|
1065
|
+
} else if (value !== null && typeof value === "object") {
|
|
1066
|
+
const res = {};
|
|
1067
|
+
this._cyclic.set(value, res);
|
|
1068
|
+
for (const key in value) {
|
|
1069
|
+
res[key] = await this.map(value[key]);
|
|
1016
1070
|
}
|
|
1017
1071
|
return res;
|
|
1072
|
+
} else {
|
|
1073
|
+
return value;
|
|
1018
1074
|
}
|
|
1019
|
-
}
|
|
1020
|
-
visitedObjects.delete(value);
|
|
1021
|
-
}
|
|
1022
|
-
} else {
|
|
1023
|
-
return value;
|
|
1075
|
+
};
|
|
1024
1076
|
}
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
const key2 = PublicKey2.fromHex(value);
|
|
1029
|
-
if (key2.toHex() === value) {
|
|
1030
|
-
return options.humanize ? humanize(key2) : options.truncate ? key2.truncate() : key2.toHex();
|
|
1077
|
+
map(value) {
|
|
1078
|
+
if (this._cyclic.has(value)) {
|
|
1079
|
+
return this._cyclic.get(value);
|
|
1031
1080
|
}
|
|
1081
|
+
return this._fn(value, this._recurse);
|
|
1032
1082
|
}
|
|
1033
|
-
return value;
|
|
1034
|
-
};
|
|
1035
|
-
|
|
1036
|
-
// packages/common/util/src/map.ts
|
|
1037
|
-
var defaultMap = (map, key, def) => {
|
|
1038
|
-
let value = map.get(key);
|
|
1039
|
-
if (value === void 0) {
|
|
1040
|
-
value = typeof def === "function" ? def() : def;
|
|
1041
|
-
map.set(key, value);
|
|
1042
|
-
}
|
|
1043
|
-
return value;
|
|
1044
1083
|
};
|
|
1045
1084
|
|
|
1046
1085
|
// packages/common/util/src/order.ts
|
|
@@ -1070,6 +1109,55 @@ var inferRecordOrder = (objectMap, order = []) => {
|
|
|
1070
1109
|
}, {}), objectMap);
|
|
1071
1110
|
};
|
|
1072
1111
|
|
|
1112
|
+
// packages/common/util/src/params.ts
|
|
1113
|
+
import { AST } from "@effect/schema";
|
|
1114
|
+
import { decamelize } from "xcase";
|
|
1115
|
+
var ParamKeyAnnotationId = Symbol.for("@dxos/schema/annotation/ParamKeyAnnotation");
|
|
1116
|
+
var ParamKeyAnnotation = (value) => (self) => self.annotations({
|
|
1117
|
+
[ParamKeyAnnotationId]: value
|
|
1118
|
+
});
|
|
1119
|
+
var Params = class {
|
|
1120
|
+
constructor(_schema) {
|
|
1121
|
+
this._schema = _schema;
|
|
1122
|
+
}
|
|
1123
|
+
/**
|
|
1124
|
+
* Parse URL params.
|
|
1125
|
+
* @param url
|
|
1126
|
+
*/
|
|
1127
|
+
parse(url) {
|
|
1128
|
+
return Object.entries(this._schema.fields).reduce((acc, [key, type]) => {
|
|
1129
|
+
let v = url.searchParams.get(decamelize(key));
|
|
1130
|
+
if (v == null) {
|
|
1131
|
+
v = url.searchParams.get(key);
|
|
1132
|
+
}
|
|
1133
|
+
if (v != null) {
|
|
1134
|
+
if (AST.isNumberKeyword(type.ast)) {
|
|
1135
|
+
acc[key] = parseInt(v);
|
|
1136
|
+
} else if (AST.isBooleanKeyword(type.ast)) {
|
|
1137
|
+
acc[key] = v === "true" || v === "1";
|
|
1138
|
+
} else {
|
|
1139
|
+
acc[key] = v;
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
return acc;
|
|
1143
|
+
}, {});
|
|
1144
|
+
}
|
|
1145
|
+
/**
|
|
1146
|
+
* Update URL with params.
|
|
1147
|
+
*/
|
|
1148
|
+
params(url, values) {
|
|
1149
|
+
Object.entries(values).forEach(([key, value]) => {
|
|
1150
|
+
const type = this._schema.fields[key];
|
|
1151
|
+
if (type && value != null) {
|
|
1152
|
+
const { value: alt } = AST.getAnnotation(ParamKeyAnnotationId)(type.ast);
|
|
1153
|
+
const k = alt ?? decamelize(key);
|
|
1154
|
+
url.searchParams.set(k, String(value));
|
|
1155
|
+
}
|
|
1156
|
+
});
|
|
1157
|
+
return url;
|
|
1158
|
+
}
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1073
1161
|
// packages/common/util/src/platform.ts
|
|
1074
1162
|
var isNode = () => typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
1075
1163
|
var mobileAndTabletCheck = () => {
|
|
@@ -1213,6 +1301,24 @@ var createBucketReducer = (period) => ({
|
|
|
1213
1301
|
}
|
|
1214
1302
|
});
|
|
1215
1303
|
|
|
1304
|
+
// packages/common/util/src/safe-await.ts
|
|
1305
|
+
var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
1306
|
+
const failedItems = [];
|
|
1307
|
+
await Promise.all([
|
|
1308
|
+
...source
|
|
1309
|
+
].map(async (item, idx) => {
|
|
1310
|
+
try {
|
|
1311
|
+
await taskFactory(item);
|
|
1312
|
+
} catch (err) {
|
|
1313
|
+
if (onError) {
|
|
1314
|
+
onError(err, item, idx);
|
|
1315
|
+
}
|
|
1316
|
+
failedItems.push(item);
|
|
1317
|
+
}
|
|
1318
|
+
}));
|
|
1319
|
+
return failedItems;
|
|
1320
|
+
};
|
|
1321
|
+
|
|
1216
1322
|
// packages/common/util/src/safe-instanceof.ts
|
|
1217
1323
|
var instanceTag = Symbol("instanceTag");
|
|
1218
1324
|
var safeInstanceof = (tag) => (target) => {
|
|
@@ -1258,6 +1364,192 @@ var compareMulti = (sorters) => (a, b) => {
|
|
|
1258
1364
|
return sort();
|
|
1259
1365
|
};
|
|
1260
1366
|
|
|
1367
|
+
// packages/common/util/src/throw-unhandled-error.ts
|
|
1368
|
+
var throwUnhandledError = (error) => {
|
|
1369
|
+
queueMicrotask(() => {
|
|
1370
|
+
throw error;
|
|
1371
|
+
});
|
|
1372
|
+
};
|
|
1373
|
+
|
|
1374
|
+
// packages/common/util/src/to-fallback.ts
|
|
1375
|
+
var idEmoji = [
|
|
1376
|
+
// When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)
|
|
1377
|
+
// 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.
|
|
1378
|
+
// This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:
|
|
1379
|
+
// – not people or isolated anthropomorphic faces
|
|
1380
|
+
// – not flags
|
|
1381
|
+
// – more concrete than abstract
|
|
1382
|
+
// – less culturally specific
|
|
1383
|
+
// – less easily confused with another emoji in the set
|
|
1384
|
+
// – requires less special knowledge to identify
|
|
1385
|
+
// – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)
|
|
1386
|
+
// – less common as a signifier in UX
|
|
1387
|
+
// NOTE that this is intentionally an array of strings because of the way emoji graphemes work.
|
|
1388
|
+
"\u{1F479}",
|
|
1389
|
+
"\u{1F47B}",
|
|
1390
|
+
"\u{1F47D}",
|
|
1391
|
+
"\u{1F916}",
|
|
1392
|
+
"\u{1F383}",
|
|
1393
|
+
"\u{1F9BE}",
|
|
1394
|
+
"\u{1F9BF}",
|
|
1395
|
+
"\u{1F9B7}",
|
|
1396
|
+
"\u{1F463}",
|
|
1397
|
+
"\u{1F441}\uFE0F",
|
|
1398
|
+
"\u{1F9F6}",
|
|
1399
|
+
"\u{1F451}",
|
|
1400
|
+
"\u{1F412}",
|
|
1401
|
+
"\u{1F986}",
|
|
1402
|
+
"\u{1F989}",
|
|
1403
|
+
"\u{1F434}",
|
|
1404
|
+
"\u{1F984}",
|
|
1405
|
+
"\u{1F41D}",
|
|
1406
|
+
"\u{1F98B}",
|
|
1407
|
+
"\u{1F41E}",
|
|
1408
|
+
"\u{1FAB2}",
|
|
1409
|
+
"\u{1F422}",
|
|
1410
|
+
"\u{1F98E}",
|
|
1411
|
+
"\u{1F995}",
|
|
1412
|
+
"\u{1F991}",
|
|
1413
|
+
"\u{1F980}",
|
|
1414
|
+
"\u{1F420}",
|
|
1415
|
+
"\u{1F42C}",
|
|
1416
|
+
"\u{1F40B}",
|
|
1417
|
+
"\u{1F9AD}",
|
|
1418
|
+
"\u{1F405}",
|
|
1419
|
+
"\u{1F406}",
|
|
1420
|
+
"\u{1F993}",
|
|
1421
|
+
"\u{1F98D}",
|
|
1422
|
+
"\u{1F9A7}",
|
|
1423
|
+
"\u{1F418}",
|
|
1424
|
+
"\u{1F42B}",
|
|
1425
|
+
"\u{1F992}",
|
|
1426
|
+
"\u{1F998}",
|
|
1427
|
+
"\u{1F9AC}",
|
|
1428
|
+
"\u{1F416}",
|
|
1429
|
+
"\u{1F40F}",
|
|
1430
|
+
"\u{1F98C}",
|
|
1431
|
+
"\u{1F415}",
|
|
1432
|
+
"\u{1F408}",
|
|
1433
|
+
"\u{1F413}",
|
|
1434
|
+
"\u{1F99A}",
|
|
1435
|
+
"\u{1F99C}",
|
|
1436
|
+
"\u{1F9A2}",
|
|
1437
|
+
"\u{1F9A9}",
|
|
1438
|
+
"\u{1F9A6}",
|
|
1439
|
+
"\u{1F401}",
|
|
1440
|
+
"\u{1F43F}\uFE0F",
|
|
1441
|
+
"\u{1F335}",
|
|
1442
|
+
"\u{1F332}",
|
|
1443
|
+
"\u{1F333}",
|
|
1444
|
+
"\u{1FAB5}",
|
|
1445
|
+
"\u{1F331}",
|
|
1446
|
+
"\u{1F341}",
|
|
1447
|
+
"\u{1FABA}",
|
|
1448
|
+
"\u{1F344}",
|
|
1449
|
+
"\u{1F41A}",
|
|
1450
|
+
"\u{1FAB8}",
|
|
1451
|
+
"\u{1FAA8}",
|
|
1452
|
+
"\u{1F33E}",
|
|
1453
|
+
"\u{1F337}",
|
|
1454
|
+
"\u{1F33B}",
|
|
1455
|
+
"\u2600\uFE0F",
|
|
1456
|
+
"\u{1F319}",
|
|
1457
|
+
"\u{1FA90}",
|
|
1458
|
+
"\u2B50\uFE0F",
|
|
1459
|
+
"\u26A1\uFE0F",
|
|
1460
|
+
"\u2604\uFE0F",
|
|
1461
|
+
"\u{1F525}",
|
|
1462
|
+
"\u{1F308}",
|
|
1463
|
+
"\u2601\uFE0F",
|
|
1464
|
+
"\u{1F4A7}",
|
|
1465
|
+
"\u26F1\uFE0F",
|
|
1466
|
+
"\u{1F30A}",
|
|
1467
|
+
"\u{1F34E}",
|
|
1468
|
+
"\u{1F34B}",
|
|
1469
|
+
"\u{1F349}",
|
|
1470
|
+
"\u{1F347}",
|
|
1471
|
+
"\u{1FAD0}",
|
|
1472
|
+
"\u{1F348}",
|
|
1473
|
+
"\u{1F352}",
|
|
1474
|
+
"\u{1F351}",
|
|
1475
|
+
"\u{1F96D}",
|
|
1476
|
+
"\u{1F34D}",
|
|
1477
|
+
"\u{1F965}",
|
|
1478
|
+
"\u{1F95D}",
|
|
1479
|
+
"\u{1F951}",
|
|
1480
|
+
"\u{1F336}\uFE0F",
|
|
1481
|
+
"\u{1F33D}",
|
|
1482
|
+
"\u{1F955}",
|
|
1483
|
+
"\u{1F36C}",
|
|
1484
|
+
"\u{1F95C}",
|
|
1485
|
+
"\u{1FAD6}",
|
|
1486
|
+
"\u2615\uFE0F",
|
|
1487
|
+
"\u{1F375}",
|
|
1488
|
+
"\u{1F9CA}",
|
|
1489
|
+
"\u{1F9C2}",
|
|
1490
|
+
"\u{1F3D4}\uFE0F",
|
|
1491
|
+
"\u2693\uFE0F",
|
|
1492
|
+
"\u{1F6DF}",
|
|
1493
|
+
"\u{1F3DD}\uFE0F",
|
|
1494
|
+
"\u{1F6F6}",
|
|
1495
|
+
"\u{1F680}",
|
|
1496
|
+
"\u{1F6F0}\uFE0F",
|
|
1497
|
+
"\u26F2\uFE0F",
|
|
1498
|
+
"\u{1F3F0}",
|
|
1499
|
+
"\u{1F6B2}",
|
|
1500
|
+
"\u26FA\uFE0F",
|
|
1501
|
+
"\u{1F399}\uFE0F",
|
|
1502
|
+
"\u{1F9F2}",
|
|
1503
|
+
"\u2699\uFE0F",
|
|
1504
|
+
"\u{1F529}",
|
|
1505
|
+
"\u{1F52E}",
|
|
1506
|
+
"\u{1F52D}",
|
|
1507
|
+
"\u{1F52C}",
|
|
1508
|
+
"\u{1F9EC}",
|
|
1509
|
+
"\u{1F321}\uFE0F",
|
|
1510
|
+
"\u{1F9FA}",
|
|
1511
|
+
"\u{1F6CE}\uFE0F",
|
|
1512
|
+
"\u{1F511}",
|
|
1513
|
+
"\u{1FA91}",
|
|
1514
|
+
"\u{1F9F8}",
|
|
1515
|
+
"\u{1F388}",
|
|
1516
|
+
"\u{1F380}",
|
|
1517
|
+
"\u{1F38A}",
|
|
1518
|
+
"\u267B\uFE0F",
|
|
1519
|
+
"\u{1F3B5}"
|
|
1520
|
+
];
|
|
1521
|
+
var idHue = [
|
|
1522
|
+
"red",
|
|
1523
|
+
// 'orange' as const, /* More shades in these palettes are considered “ugly” */
|
|
1524
|
+
"amber",
|
|
1525
|
+
// 'yellow' as const, /* More shades in these palettes are considered “ugly” */
|
|
1526
|
+
"lime",
|
|
1527
|
+
"green",
|
|
1528
|
+
"emerald",
|
|
1529
|
+
"teal",
|
|
1530
|
+
"cyan",
|
|
1531
|
+
// 'sky' as const, /* Omitted since it is quite similar to the primary accent palette */
|
|
1532
|
+
// 'blue' as const, /* Omitted since it is quite similar to the primary accent palette */
|
|
1533
|
+
// 'indigo' as const, /* Omitted since it is quite similar to the primary accent palette */
|
|
1534
|
+
"violet",
|
|
1535
|
+
"purple",
|
|
1536
|
+
"fuchsia",
|
|
1537
|
+
"pink",
|
|
1538
|
+
"rose"
|
|
1539
|
+
];
|
|
1540
|
+
var keyToEmoji = (key) => hexToEmoji(key.toHex());
|
|
1541
|
+
var hexToEmoji = (hex) => toEmoji(parseInt(hex, 16));
|
|
1542
|
+
var toEmoji = (hash) => idEmoji[hash % idEmoji.length];
|
|
1543
|
+
var keyToHue = (key) => hexToHue(key.toHex());
|
|
1544
|
+
var hexToHue = (hex) => toHue(parseInt(hex, 16));
|
|
1545
|
+
var toHue = (hash) => idHue[hash % idHue.length];
|
|
1546
|
+
var keyToFallback = (key) => hexToFallback(key.toHex());
|
|
1547
|
+
var hexToFallback = (hex) => toFallback(parseInt(hex, 16));
|
|
1548
|
+
var toFallback = (hash) => ({
|
|
1549
|
+
emoji: toEmoji(hash),
|
|
1550
|
+
hue: toHue(hash)
|
|
1551
|
+
});
|
|
1552
|
+
|
|
1261
1553
|
// packages/common/util/src/tracer.ts
|
|
1262
1554
|
var Tracer = class {
|
|
1263
1555
|
constructor() {
|
|
@@ -1361,36 +1653,9 @@ var safeParseInt = (value, defaultValue) => {
|
|
|
1361
1653
|
}
|
|
1362
1654
|
};
|
|
1363
1655
|
|
|
1364
|
-
// packages/common/util/src/instance-id.ts
|
|
1365
|
-
var symbol = Symbol.for("dxos.instance-contexts");
|
|
1366
|
-
var instanceContexts = globalThis[symbol] ??= /* @__PURE__ */ new WeakMap();
|
|
1367
|
-
var getPrototypeSpecificInstanceId = (instance) => {
|
|
1368
|
-
const prototype = Object.getPrototypeOf(instance);
|
|
1369
|
-
const instanceCtx = defaultMap(instanceContexts, prototype, () => ({
|
|
1370
|
-
nextId: 0,
|
|
1371
|
-
instanceIds: /* @__PURE__ */ new WeakMap()
|
|
1372
|
-
}));
|
|
1373
|
-
let id = instanceCtx.instanceIds.get(instance);
|
|
1374
|
-
if (id === void 0) {
|
|
1375
|
-
id = instanceCtx.nextId++;
|
|
1376
|
-
instanceCtx.instanceIds.set(instance, id);
|
|
1377
|
-
}
|
|
1378
|
-
return id;
|
|
1379
|
-
};
|
|
1380
|
-
var getDebugName = (instance) => {
|
|
1381
|
-
if (instance == null) {
|
|
1382
|
-
return "null";
|
|
1383
|
-
}
|
|
1384
|
-
const prototype = Object.getPrototypeOf(instance);
|
|
1385
|
-
return `${prototype.constructor.name}#${getPrototypeSpecificInstanceId(instance)}`;
|
|
1386
|
-
};
|
|
1387
|
-
|
|
1388
1656
|
// packages/common/util/src/sum.ts
|
|
1389
1657
|
var sum = (values) => values.reduce((a, b) => a + b, 0);
|
|
1390
1658
|
|
|
1391
|
-
// packages/common/util/src/for-each-async.ts
|
|
1392
|
-
var forEachAsync = (items, fn) => Promise.all(items.map(fn));
|
|
1393
|
-
|
|
1394
1659
|
// packages/common/util/src/weak.ts
|
|
1395
1660
|
var WeakDictionary = class {
|
|
1396
1661
|
constructor(entries) {
|
|
@@ -1485,222 +1750,6 @@ var WeakDictionary = class {
|
|
|
1485
1750
|
this._finalization.unregister(value);
|
|
1486
1751
|
}
|
|
1487
1752
|
};
|
|
1488
|
-
|
|
1489
|
-
// packages/common/util/src/map-values.ts
|
|
1490
|
-
var mapValues = (obj, fn) => {
|
|
1491
|
-
const result = {};
|
|
1492
|
-
Object.keys(obj).forEach((key) => {
|
|
1493
|
-
result[key] = fn(obj[key], key);
|
|
1494
|
-
});
|
|
1495
|
-
return result;
|
|
1496
|
-
};
|
|
1497
|
-
var deepMapValues = (value, fn) => {
|
|
1498
|
-
return new DeepMapper(fn).map(value);
|
|
1499
|
-
};
|
|
1500
|
-
var DeepMapper = class {
|
|
1501
|
-
constructor(_fn) {
|
|
1502
|
-
this._fn = _fn;
|
|
1503
|
-
this._cyclic = /* @__PURE__ */ new Map();
|
|
1504
|
-
this._recurse = (value) => {
|
|
1505
|
-
if (this._cyclic.has(value)) {
|
|
1506
|
-
return this._cyclic.get(value);
|
|
1507
|
-
}
|
|
1508
|
-
if (Array.isArray(value)) {
|
|
1509
|
-
const res = new Array(value.length);
|
|
1510
|
-
this._cyclic.set(value, res);
|
|
1511
|
-
for (let i = 0; i < value.length; i++) {
|
|
1512
|
-
res[i] = this.map(value[i]);
|
|
1513
|
-
}
|
|
1514
|
-
return res;
|
|
1515
|
-
} else if (value !== null && typeof value === "object") {
|
|
1516
|
-
const res = {};
|
|
1517
|
-
this._cyclic.set(value, res);
|
|
1518
|
-
for (const key in value) {
|
|
1519
|
-
res[key] = this.map(value[key]);
|
|
1520
|
-
}
|
|
1521
|
-
return res;
|
|
1522
|
-
} else {
|
|
1523
|
-
return value;
|
|
1524
|
-
}
|
|
1525
|
-
};
|
|
1526
|
-
}
|
|
1527
|
-
map(value) {
|
|
1528
|
-
if (this._cyclic.has(value)) {
|
|
1529
|
-
return this._cyclic.get(value);
|
|
1530
|
-
}
|
|
1531
|
-
return this._fn(value, this._recurse);
|
|
1532
|
-
}
|
|
1533
|
-
};
|
|
1534
|
-
var deepMapValuesAsync = (value, fn) => {
|
|
1535
|
-
return new DeepMapperAsync(fn).map(value);
|
|
1536
|
-
};
|
|
1537
|
-
var DeepMapperAsync = class {
|
|
1538
|
-
constructor(_fn) {
|
|
1539
|
-
this._fn = _fn;
|
|
1540
|
-
this._cyclic = /* @__PURE__ */ new Map();
|
|
1541
|
-
this._recurse = async (value) => {
|
|
1542
|
-
if (this._cyclic.has(value)) {
|
|
1543
|
-
return this._cyclic.get(value);
|
|
1544
|
-
}
|
|
1545
|
-
if (Array.isArray(value)) {
|
|
1546
|
-
const res = new Array(value.length);
|
|
1547
|
-
this._cyclic.set(value, res);
|
|
1548
|
-
for (let i = 0; i < value.length; i++) {
|
|
1549
|
-
res[i] = await this.map(value[i]);
|
|
1550
|
-
}
|
|
1551
|
-
return res;
|
|
1552
|
-
} else if (value !== null && typeof value === "object") {
|
|
1553
|
-
const res = {};
|
|
1554
|
-
this._cyclic.set(value, res);
|
|
1555
|
-
for (const key in value) {
|
|
1556
|
-
res[key] = await this.map(value[key]);
|
|
1557
|
-
}
|
|
1558
|
-
return res;
|
|
1559
|
-
} else {
|
|
1560
|
-
return value;
|
|
1561
|
-
}
|
|
1562
|
-
};
|
|
1563
|
-
}
|
|
1564
|
-
map(value) {
|
|
1565
|
-
if (this._cyclic.has(value)) {
|
|
1566
|
-
return this._cyclic.get(value);
|
|
1567
|
-
}
|
|
1568
|
-
return this._fn(value, this._recurse);
|
|
1569
|
-
}
|
|
1570
|
-
};
|
|
1571
|
-
|
|
1572
|
-
// packages/common/util/src/explicit-resource-management-polyfill.ts
|
|
1573
|
-
Symbol.dispose ??= Symbol("Symbol.dispose");
|
|
1574
|
-
Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
|
|
1575
|
-
|
|
1576
|
-
// packages/common/util/src/defer.ts
|
|
1577
|
-
var defer = (fn) => new DeferGuard(fn);
|
|
1578
|
-
var DeferGuard = class {
|
|
1579
|
-
/**
|
|
1580
|
-
* @internal
|
|
1581
|
-
*/
|
|
1582
|
-
constructor(_fn) {
|
|
1583
|
-
this._fn = _fn;
|
|
1584
|
-
}
|
|
1585
|
-
[Symbol.dispose]() {
|
|
1586
|
-
const result = this._fn();
|
|
1587
|
-
if (result instanceof Promise) {
|
|
1588
|
-
throw new Error("Async functions in defer are not supported. Use deferAsync instead.");
|
|
1589
|
-
}
|
|
1590
|
-
}
|
|
1591
|
-
};
|
|
1592
|
-
var deferAsync = (fn) => new DeferAsyncGuard(fn);
|
|
1593
|
-
var DeferAsyncGuard = class {
|
|
1594
|
-
/**
|
|
1595
|
-
* @internal
|
|
1596
|
-
*/
|
|
1597
|
-
constructor(_fn) {
|
|
1598
|
-
this._fn = _fn;
|
|
1599
|
-
}
|
|
1600
|
-
async [Symbol.asyncDispose]() {
|
|
1601
|
-
await this._fn();
|
|
1602
|
-
}
|
|
1603
|
-
};
|
|
1604
|
-
|
|
1605
|
-
// packages/common/util/src/circular-buffer.ts
|
|
1606
|
-
import { invariant as invariant4 } from "@dxos/invariant";
|
|
1607
|
-
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/util/src/circular-buffer.ts";
|
|
1608
|
-
var CircularBuffer = class {
|
|
1609
|
-
constructor(size) {
|
|
1610
|
-
this._nextIndex = 0;
|
|
1611
|
-
this._elementCount = 0;
|
|
1612
|
-
invariant4(size >= 1, void 0, {
|
|
1613
|
-
F: __dxlog_file4,
|
|
1614
|
-
L: 13,
|
|
1615
|
-
S: this,
|
|
1616
|
-
A: [
|
|
1617
|
-
"size >= 1",
|
|
1618
|
-
""
|
|
1619
|
-
]
|
|
1620
|
-
});
|
|
1621
|
-
this._buffer = new Array(size);
|
|
1622
|
-
}
|
|
1623
|
-
push(element) {
|
|
1624
|
-
this._buffer[this._nextIndex] = element;
|
|
1625
|
-
this._nextIndex = (this._nextIndex + 1) % this._buffer.length;
|
|
1626
|
-
this._elementCount = Math.min(this._buffer.length, this._elementCount + 1);
|
|
1627
|
-
}
|
|
1628
|
-
getLast() {
|
|
1629
|
-
if (this._elementCount === 0) {
|
|
1630
|
-
return void 0;
|
|
1631
|
-
}
|
|
1632
|
-
if (this._nextIndex === 0) {
|
|
1633
|
-
return this._buffer[this._buffer.length - 1];
|
|
1634
|
-
}
|
|
1635
|
-
return this._buffer[this._nextIndex - 1];
|
|
1636
|
-
}
|
|
1637
|
-
[Symbol.iterator]() {
|
|
1638
|
-
return this.values();
|
|
1639
|
-
}
|
|
1640
|
-
*values() {
|
|
1641
|
-
if (this._elementCount === 0) {
|
|
1642
|
-
return;
|
|
1643
|
-
}
|
|
1644
|
-
if (this._elementCount < this._buffer.length) {
|
|
1645
|
-
for (let i = 0; i < this._elementCount; i++) {
|
|
1646
|
-
yield this._buffer[i];
|
|
1647
|
-
}
|
|
1648
|
-
return;
|
|
1649
|
-
}
|
|
1650
|
-
for (let i = this._nextIndex; i < this._buffer.length; i++) {
|
|
1651
|
-
yield this._buffer[i];
|
|
1652
|
-
}
|
|
1653
|
-
for (let i = 0; i < this._nextIndex; i++) {
|
|
1654
|
-
yield this._buffer[i];
|
|
1655
|
-
}
|
|
1656
|
-
}
|
|
1657
|
-
};
|
|
1658
|
-
|
|
1659
|
-
// packages/common/util/src/join-tables.ts
|
|
1660
|
-
var joinTables = (leftColumn, rightColumn, left, right) => {
|
|
1661
|
-
const map = /* @__PURE__ */ new Map();
|
|
1662
|
-
const used = /* @__PURE__ */ new Set();
|
|
1663
|
-
for (const row of right) {
|
|
1664
|
-
map.set(row[rightColumn], row);
|
|
1665
|
-
}
|
|
1666
|
-
const result = [];
|
|
1667
|
-
for (const row of left) {
|
|
1668
|
-
const right2 = map.get(row[leftColumn]);
|
|
1669
|
-
used.add(right2);
|
|
1670
|
-
result.push(Object.assign(right2 ?? {}, row));
|
|
1671
|
-
}
|
|
1672
|
-
for (const row of right) {
|
|
1673
|
-
if (!used.has(row)) {
|
|
1674
|
-
result.push(row);
|
|
1675
|
-
}
|
|
1676
|
-
}
|
|
1677
|
-
return result;
|
|
1678
|
-
};
|
|
1679
|
-
|
|
1680
|
-
// packages/common/util/src/throw-unhandled-error.ts
|
|
1681
|
-
var throwUnhandledError = (error) => {
|
|
1682
|
-
queueMicrotask(() => {
|
|
1683
|
-
throw error;
|
|
1684
|
-
});
|
|
1685
|
-
};
|
|
1686
|
-
|
|
1687
|
-
// packages/common/util/src/safe-await.ts
|
|
1688
|
-
var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
1689
|
-
const failedItems = [];
|
|
1690
|
-
await Promise.all([
|
|
1691
|
-
...source
|
|
1692
|
-
].map(async (item, idx) => {
|
|
1693
|
-
try {
|
|
1694
|
-
await taskFactory(item);
|
|
1695
|
-
} catch (err) {
|
|
1696
|
-
if (onError) {
|
|
1697
|
-
onError(err, item, idx);
|
|
1698
|
-
}
|
|
1699
|
-
failedItems.push(item);
|
|
1700
|
-
}
|
|
1701
|
-
}));
|
|
1702
|
-
return failedItems;
|
|
1703
|
-
};
|
|
1704
1753
|
export {
|
|
1705
1754
|
BitField,
|
|
1706
1755
|
Callback,
|
|
@@ -1709,6 +1758,8 @@ export {
|
|
|
1709
1758
|
ComplexSet,
|
|
1710
1759
|
HumanHasher,
|
|
1711
1760
|
MapEntry,
|
|
1761
|
+
ParamKeyAnnotation,
|
|
1762
|
+
Params,
|
|
1712
1763
|
Tracer,
|
|
1713
1764
|
WeakDictionary,
|
|
1714
1765
|
accessBy,
|