@dxos/util 0.4.5 → 0.4.6-main.3724cc4

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.
@@ -28,6 +28,13 @@ var assignDeep = (doc, path, value) => {
28
28
  parent[path.at(-1)] = value;
29
29
  return parent[path.at(-1)];
30
30
  };
31
+ var getDeep = (doc, path) => {
32
+ let parent = doc;
33
+ for (const key of path) {
34
+ parent = parent?.[key];
35
+ }
36
+ return parent;
37
+ };
31
38
 
32
39
  // packages/common/util/src/binder.ts
33
40
  import util from "@dxos/node-std/util";
@@ -1295,6 +1302,7 @@ export {
1295
1302
  getAsyncValue,
1296
1303
  getDate,
1297
1304
  getDebugName,
1305
+ getDeep,
1298
1306
  getHostPlatform,
1299
1307
  getPrototypeSpecificInstanceId,
1300
1308
  humanize,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/assign.ts", "../../../src/binder.ts", "../../../src/bitfield.ts", "../../../src/callback.ts", "../../../src/complex.ts", "../../../src/defer-function.ts", "../../../src/entry.ts", "../../../src/human-hash.ts", "../../../src/interval.ts", "../../../src/json.ts", "../../../src/uint8array.ts", "../../../src/map.ts", "../../../src/order.ts", "../../../src/platform.ts", "../../../src/random.ts", "../../../src/range.ts", "../../../src/reducers.ts", "../../../src/safe-instanceof.ts", "../../../src/safe-parse-json.ts", "../../../src/sort.ts", "../../../src/tracer.ts", "../../../src/types.ts", "../../../src/instance-id.ts", "../../../src/sum.ts", "../../../src/for-each-async.ts", "../../../src/weak.ts", "../../../src/map-values.ts", "../../../src/explicit-resource-management-polyfill.ts", "../../../src/defer.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Initialize a deeply nested object.\n * @returns The value of the prop after assignment.\n */\nexport const assignDeep = <T>(doc: any, path: string[], value: T): T => {\n invariant(path.length > 0);\n let parent = doc;\n for (const key of path.slice(0, -1)) {\n parent[key] ??= {};\n parent = parent[key];\n }\n parent[path.at(-1)!] = value;\n return parent[path.at(-1)!]; // NOTE: We can't just return value here since doc's getter might return a different object.\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport util from 'node:util';\n\n/**\n * Function binder replaces pify.\n */\n// TODO(burdon): Replace pify everywhere.\nexport const createBinder = (obj: any) => ({\n fn: (fn: Function) => fn.bind(obj),\n async: (fn: Function) => util.promisify(fn.bind(obj)),\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Bitfield encodes indices from MSB to LSB.\n * Index 0 is the MSB of the first byte.\n *\n *\n * #0 #1 #2 #3\n * 01010101 11110000 00001111 01010101\n * ^ ^\n * MSB LSB\n */\nexport class BitField {\n static get(data: Uint8Array, idx: number): boolean {\n const bit = (data[idx >> 3] >> (7 - (idx % 8))) & 0x1;\n return !!bit;\n }\n\n static set(data: Uint8Array, idx: number, value: boolean) {\n if (value) {\n data[idx >> 3] = data[idx >> 3] | (1 << (7 - (idx % 8)));\n } else {\n data[idx >> 3] = data[idx >> 3] & ~(1 << (7 - (idx % 8)));\n }\n }\n\n /**\n * [start; end)\n */\n static count(data: Uint8Array, begin: number, end: number): number {\n let count = 0;\n for (let i = begin; i < end; i++) {\n const bit = (data[i >> 3] >> (7 - (i % 8))) & 0x1;\n count += bit;\n }\n return count;\n }\n\n static invert(data: Uint8Array): Uint8Array {\n const result = new Uint8Array(data.length);\n for (let i = 0; i < data.length; i++) {\n result[i] = ~data[i];\n }\n return result;\n }\n\n static and(first: Uint8Array, second: Uint8Array) {\n invariant(first.length === second.length, 'Bitfields must be of the same length');\n const result = new Uint8Array(first.length);\n for (let i = 0; i < first.length; i++) {\n result[i] = first[i] & second[i];\n }\n return result;\n }\n\n static findIndexes(data: Uint8Array, opts: { start?: number; end?: number; value?: boolean } = {}): number[] {\n const { start = 0, end = data.length * 8, value = true } = opts;\n\n const result = [];\n\n for (let i = start; i < end; i++) {\n if (BitField.get(data, i) === value) {\n result.push(i);\n }\n }\n return result;\n }\n\n static ones(count: number): Uint8Array {\n const res = new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0xff);\n\n // Note: We need to calculate last byte of bitfield.\n const bitInLastByte = Math.ceil(count % 8);\n res[res.length - 1] = 0xff << (8 - bitInLastByte);\n\n return res;\n }\n\n static zeros(count: number): Uint8Array {\n return new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0);\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Represents a callback that can be set once.\n *\n * Common usage is dependency injection.\n * In contrast to events, callbacks can only have one handler,\n * are executed synchronously,\n * and can return results.\n */\n// TODO(burdon): Move to @dxos/async.\nexport class Callback<T extends (...args: any[]) => any> {\n private _callback: T | undefined;\n\n public call(...args: Parameters<T>): ReturnType<T> {\n invariant(this._callback, 'Callback not set');\n return this._callback(...args);\n }\n\n public callIfSet(...args: Parameters<T>): ReturnType<T> | undefined {\n return this._callback?.(...args);\n }\n\n public set(callback: T) {\n invariant(!this._callback, 'Callback already set');\n this._callback = callback;\n }\n\n public isSet() {\n return !!this._callback;\n }\n}\n\nexport type SetCallbacks<T> = { handlers: Set<T> };\n\n/**\n * Create a fan-out callback handler.\n * NOTE: Methods cannot return values.\n */\nexport const createSetDispatch = <T extends {}>({ handlers }: SetCallbacks<T>) => {\n type Obj = { [i: string | symbol]: any };\n return new Proxy<any>(\n {\n handlers,\n },\n {\n get: (target: Obj, prop) => {\n return (...args: any[]) => {\n handlers.forEach((handler: Obj) => {\n const method = handler[prop];\n if (method) {\n method.apply(handler, args);\n }\n });\n };\n },\n },\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { inspectObject, raise } from '@dxos/debug';\n\nexport type Primitive = string | number | boolean | null | undefined;\n\nexport type PrimitiveProjection<T> = (value: T) => Primitive;\n\nconst MAX_SERIALIZATION_LENGTH = 10;\n\n/**\n * A set implementation that can hold complex values (like Buffer).\n *\n * The user must provide a projection function which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n *\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexSet<T> implements Set<T> {\n private readonly _values = new Map<Primitive, T>();\n\n // prettier-ignore\n constructor(\n private readonly _projection: PrimitiveProjection<T>,\n values?: Iterable<T> | null,\n ) {\n if (values) {\n for (const value of values) {\n this.add(value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n add(value: T): this {\n this._values.set(this._projection(value), value);\n return this;\n }\n\n clear(): void {\n this._values.clear();\n }\n\n delete(value: T): boolean {\n return this._values.delete(this._projection(value));\n }\n\n forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._values.forEach((value) => callbackfn(value, value, this));\n }\n\n has(value: T): boolean {\n return this._values.has(this._projection(value));\n }\n\n get size(): number {\n return this._values.size;\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this._values.values();\n }\n\n *entries(): IterableIterator<[T, T]> {\n for (const value of this._values.values()) {\n yield [value, value];\n }\n }\n\n keys(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n values(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexSet';\n }\n}\n\nexport type ComplexSetConstructor<T> = new (values?: Iterable<T> | null) => ComplexSet<T>;\n\n/**\n * Create a subclass of ComplexSet with predefined projection function.\n */\nexport const makeSet = <T>(projection: PrimitiveProjection<T>): ComplexSetConstructor<T> => {\n return class BoundComplexSet extends ComplexSet<T> {\n constructor(values?: Iterable<T> | null) {\n super(projection, values);\n }\n };\n};\n\n/**\n * A map implementation that can hold complex values (like Buffer) as keys.\n * The user must provide a projection function for map keys which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexMap<K, V> implements Map<K, V> {\n private readonly _keys = new Map<Primitive, K>();\n private readonly _values = new Map<Primitive, V>();\n\n // prettier-ignore\n constructor(\n private readonly _keyProjection: PrimitiveProjection<K>,\n entries?: readonly (readonly [K, V])[] | null,\n ) {\n if (entries) {\n for (const [key, value] of entries) {\n this.set(key, value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n clear(): void {\n this._keys.clear();\n this._values.clear();\n }\n\n delete(key: K): boolean {\n const keyDeleted = this._keys.delete(this._keyProjection(key));\n const valueDeleted = this._values.delete(this._keyProjection(key));\n return keyDeleted || valueDeleted;\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._keys.forEach((key, primitive) =>\n callbackfn(this._values.get(primitive) ?? raise(new Error('Map corrupted.')), key, this),\n );\n }\n\n get(key: K): V | undefined {\n return this._values.get(this._keyProjection(key));\n }\n\n has(key: K): boolean {\n return this._keys.has(this._keyProjection(key));\n }\n\n set(key: K, value: V): this {\n const primitive = this._keyProjection(key);\n this._keys.set(primitive, key);\n this._values.set(primitive, value);\n return this;\n }\n\n get size(): number {\n return this._keys.size;\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [primitive, key] of this._keys) {\n const value = this._values.get(primitive) ?? raise(new Error('Map corrupted.'));\n yield [key, value];\n }\n }\n\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]();\n }\n\n keys(): IterableIterator<K> {\n return this._keys.values();\n }\n\n values(): IterableIterator<V> {\n return this._values.values();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexMap';\n }\n}\n\nexport type ComplexMapConstructor<K> = new <V>(entries?: readonly (readonly [K, V])[] | null) => ComplexMap<K, V>;\n\n/**\n * Create a subclass of ComplexMap with predefined key projection function.\n */\nexport const makeMap = <K>(keyProjection: PrimitiveProjection<K>): ComplexMapConstructor<K> =>\n class BoundComplexMap<V> extends ComplexMap<K, V> {\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(keyProjection, entries);\n }\n };\n", "/**\n * Wraps a function provider in a function that will defer the execution of the provided function.\n *\n * Example:\n *\n * ```typescript\n * const fn = deferFunction(() => impl);\n *\n * // Impl can be defined after the usage.\n * const impl = () => {\n * console.log('Hello World!')\n * }\n * ```\n */\n//\n// Copyright 2022 DXOS.org\n//\n\nexport const deferFunction =\n <T extends (...args: any[]) => any>(fnProvider: () => T) =>\n (...args: Parameters<T>): ReturnType<T> =>\n fnProvider()(...args);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Inspired by https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.entry\n */\nexport const entry = <K, V>(map: Map<K, V>, key: K): MapEntry<K, V, undefined> => new MapEntry(map, key);\n\nexport class MapEntry<K, V, U> {\n /**\n * @internal\n */\n // prettier-ignore\n constructor(\n private readonly _map: Map<K, V>,\n private readonly _key: K,\n ) {}\n\n get key(): K {\n return this._key;\n }\n\n get value(): V | U {\n return this._map.get(this._key) as V | U;\n }\n\n orInsert(value: V): MapEntry<K, V, never> {\n if (!this._map.has(this._key)) {\n this._map.set(this._key, value);\n }\n return this as any;\n }\n\n deep<K1, V1>(this: MapEntry<K, Map<K1, V1>, Map<K1, V1>>, key: K1): MapEntry<K1, V1, undefined> {\n return entry(this.value, key);\n }\n}\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { PublicKey, type PublicKeyLike } from '@dxos/keys';\n\n// From https://github.com/SEBv15/humanhash/blob/166c1a6f70d854fe6767cdd76be1237112d4eaf1/index.js\n\nconst DEFAULT_WORDLIST = [\n 'ack',\n 'alabama',\n 'alanine',\n 'alaska',\n 'alpha',\n 'angel',\n 'apart',\n 'april',\n 'arizona',\n 'arkansas',\n 'artist',\n 'asparagus',\n 'aspen',\n 'august',\n 'autumn',\n 'avocado',\n 'bacon',\n 'bakerloo',\n 'batman',\n 'beer',\n 'berlin',\n 'beryllium',\n 'black',\n 'blossom',\n 'blue',\n 'bluebird',\n 'bravo',\n 'bulldog',\n 'burger',\n 'butter',\n 'california',\n 'carbon',\n 'cardinal',\n 'carolina',\n 'carpet',\n 'cat',\n 'ceiling',\n 'charlie',\n 'chicken',\n 'coffee',\n 'cola',\n 'cold',\n 'colorado',\n 'comet',\n 'connecticut',\n 'crazy',\n 'cup',\n 'dakota',\n 'december',\n 'delaware',\n 'delta',\n 'diet',\n 'don',\n 'double',\n 'early',\n 'earth',\n 'east',\n 'echo',\n 'edward',\n 'eight',\n 'eighteen',\n 'eleven',\n 'emma',\n 'enemy',\n 'equal',\n 'failed',\n 'fanta',\n 'fifteen',\n 'fillet',\n 'finch',\n 'fish',\n 'five',\n 'fix',\n 'floor',\n 'florida',\n 'football',\n 'four',\n 'fourteen',\n 'foxtrot',\n 'freddie',\n 'friend',\n 'fruit',\n 'gee',\n 'georgia',\n 'glucose',\n 'golf',\n 'green',\n 'grey',\n 'hamper',\n 'happy',\n 'harry',\n 'hawaii',\n 'helium',\n 'high',\n 'hot',\n 'hotel',\n 'hydrogen',\n 'idaho',\n 'illinois',\n 'india',\n 'indigo',\n 'ink',\n 'iowa',\n 'island',\n 'item',\n 'jersey',\n 'jig',\n 'johnny',\n 'juliet',\n 'july',\n 'jupiter',\n 'kansas',\n 'kentucky',\n 'kilo',\n 'king',\n 'kitten',\n 'lactose',\n 'lake',\n 'lamp',\n 'lemon',\n 'leopard',\n 'lima',\n 'lion',\n 'lithium',\n 'london',\n 'louisiana',\n 'low',\n 'magazine',\n 'magnesium',\n 'maine',\n 'mango',\n 'march',\n 'mars',\n 'maryland',\n 'massachusetts',\n 'may',\n 'mexico',\n 'michigan',\n 'mike',\n 'minnesota',\n 'mirror',\n 'mississippi',\n 'missouri',\n 'mobile',\n 'mockingbird',\n 'monkey',\n 'montana',\n 'moon',\n 'mountain',\n 'muppet',\n 'music',\n 'nebraska',\n 'neptune',\n 'network',\n 'nevada',\n 'nine',\n 'nineteen',\n 'nitrogen',\n 'north',\n 'november',\n 'nuts',\n 'october',\n 'ohio',\n 'oklahoma',\n 'one',\n 'orange',\n 'oranges',\n 'oregon',\n 'oscar',\n 'oven',\n 'oxygen',\n 'papa',\n 'paris',\n 'pasta',\n 'pennsylvania',\n 'pip',\n 'pizza',\n 'pluto',\n 'potato',\n 'princess',\n 'purple',\n 'quebec',\n 'queen',\n 'quiet',\n 'red',\n 'river',\n 'robert',\n 'robin',\n 'romeo',\n 'rugby',\n 'sad',\n 'salami',\n 'saturn',\n 'september',\n 'seven',\n 'seventeen',\n 'shade',\n 'sierra',\n 'single',\n 'sink',\n 'six',\n 'sixteen',\n 'skylark',\n 'snake',\n 'social',\n 'sodium',\n 'solar',\n 'south',\n 'spaghetti',\n 'speaker',\n 'spring',\n 'stairway',\n 'steak',\n 'stream',\n 'summer',\n 'sweet',\n 'table',\n 'tango',\n 'ten',\n 'tennessee',\n 'tennis',\n 'texas',\n 'thirteen',\n 'three',\n 'timing',\n 'triple',\n 'twelve',\n 'twenty',\n 'two',\n 'uncle',\n 'undress',\n 'uniform',\n 'uranus',\n 'utah',\n 'vegan',\n 'venus',\n 'vermont',\n 'victor',\n 'video',\n 'violet',\n 'virginia',\n 'washington',\n 'west',\n 'whiskey',\n 'white',\n 'william',\n 'winner',\n 'winter',\n 'wisconsin',\n 'wolfram',\n 'wyoming',\n 'xray',\n 'yankee',\n 'yellow',\n 'zebra',\n 'zulu',\n];\n\n/**\n * humanhash: Human-readable representations of digests.\n */\nexport class HumanHasher {\n /**\n * Transforms hex digests to human-readable strings.\n *\n * The format of these strings will look something like:\n * `victor-bacon-zulu-lima`. The output is obtained by compressing the input\n * digest to a fixed number of bytes, then mapping those bytes to one of 256\n * words. A default wordlist is provided, but you can override this if you\n * prefer.\n * As long as you use the same wordlist, the output will be consistent (i.e.\n * the same digest will always render the same representation).\n *\n * @param wordlist A list of exactly 256 words to choose from\n */\n constructor(private readonly wordlist = DEFAULT_WORDLIST) {\n if (wordlist.length !== 256) {\n throw new Error('Wordlist must have exactly 256 items');\n }\n this.wordlist = wordlist;\n }\n\n /**\n * Humanize a given hexadecimal digest.\n *\n * Change the number of words output by specifying `words`. Change the\n * word separator with `separator`.\n *\n * @param hexdigest A string of hexadecimal characters to humanize\n * @param words How many words to output (more = safer)\n * @param separator The string used to seperate the words\n */\n humanize(hexdigest: string, words = 4, separator = '-') {\n const pairs = hexdigest.match(/(..?)/g);\n if (!pairs) {\n throw new Error('');\n }\n\n const bytes = pairs.map((x) => parseInt(x, 16));\n const compressed = this._compress(bytes, words);\n\n return compressed.map((x) => this.wordlist[x]).join(separator);\n }\n\n /**\n * Compress a list of byte values to a fixed target length.\n *\n * @param bytes A list of bytes (numbers from 0-254)\n * @param target The number of bytes to return / compress to\n */\n _compress(bytes: number[], target: number) {\n const length = bytes.length;\n if (target > length) {\n throw new Error('Fewer input bytes than requested output');\n }\n\n // Calculate the segment size (divide and round down)\n const segSize = (length / target) >> 0;\n\n // Split 'bytes' array into 'target' number of segments.\n const segments = [];\n for (let i = 0; i < segSize * target; i += segSize) {\n segments.push(bytes.slice(i, i + segSize));\n }\n\n // Catch any left-over bytes in the last segment.\n segments[segments.length - 1] = segments[segments.length - 1].concat(bytes.slice(target * segSize));\n\n const checksums = segments.map((x) => x.reduce((acc, curr) => acc ^ curr));\n return checksums;\n }\n}\n\nconst hasher = new HumanHasher();\n\nexport const humanize = (value: PublicKeyLike): string => {\n if (value instanceof Buffer || value instanceof Uint8Array || value instanceof ArrayBuffer) {\n value = PublicKey.stringify(value);\n } else if (value instanceof PublicKey) {\n value = value.toHex();\n }\n\n return hasher.humanize(value);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\n/**\n * Runs the callback in an exponentially increasing interval.\n * @returns Callback to clear the interval.\n */\nexport const exponentialBackoffInterval = (cb: () => void, initialInterval: number): (() => void) => {\n let interval = initialInterval;\n const repeat = () => {\n cb();\n interval *= 2;\n timeoutId = setTimeout(repeat, interval);\n };\n\n let timeoutId = setTimeout(repeat, interval);\n return () => clearTimeout(timeoutId);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { humanize } from './human-hash';\nimport { arrayToBuffer } from './uint8array';\n\nconst MAX_DEPTH = 5;\n\n/**\n * JSON.stringify replacer.\n */\nexport function jsonReplacer(this: any, key: string, value: any): any {\n // TODO(burdon): Why is this represented as `{ type: 'Buffer', data }`.\n if (value !== null && typeof value === 'object' && typeof value[inspect.custom] === 'function') {\n return value[inspect.custom]();\n }\n\n if (value !== null && typeof value === 'object' && value.type === 'Buffer' && Array.isArray(value.data)) {\n if (value.data.length === 32) {\n const key = Buffer.from(value.data);\n return `[${humanize(key)}]:[${PublicKey.stringify(key)}]`;\n } else {\n return Buffer.from(value.data).toString('hex');\n }\n }\n\n // TODO(burdon): Option.\n // code if (Array.isArray(value)) {\n // code return value.length;\n // code } else {\n return value;\n // code }\n}\n\n/**\n * Recursively converts an object into a JSON-compatible object.\n */\nexport const jsonify = (value: any, depth = 0, visitedObjects = new WeakSet<any>()): any => {\n if (depth > MAX_DEPTH) {\n return null;\n } else if (typeof value === 'function') {\n return null;\n } else if (typeof value === 'object' && value !== null) {\n if (visitedObjects.has(value)) {\n return null;\n }\n visitedObjects.add(value);\n\n try {\n if (value instanceof Uint8Array) {\n return arrayToBuffer(value).toString('hex');\n } else if (Array.isArray(value)) {\n return value.map((x) => jsonify(x, depth + 1, visitedObjects));\n } else if (typeof value.toJSON === 'function') {\n return value.toJSON();\n } else {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = jsonify(value[key], depth + 1, visitedObjects);\n }\n return res;\n }\n } finally {\n visitedObjects.delete(value);\n }\n } else {\n return value;\n }\n};\n\nexport type JsonKeyOptions = {\n truncate?: boolean;\n humanize?: boolean;\n};\n\nexport const jsonKeyReplacer =\n (options: JsonKeyOptions = {}) =>\n (key: string, value: any) => {\n if (typeof value === 'string') {\n const key = PublicKey.fromHex(value);\n if (key.toHex() === value) {\n // TODO(burdon): Remove humanize.\n return options.humanize ? humanize(key) : options.truncate ? key.truncate() : key.toHex();\n }\n }\n\n return value;\n };\n", "//\n// Copyright 2021 DXOS.org\n//\n\nexport const arraysEqual = (a: Uint8Array, b: Uint8Array): boolean => {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Non-copying conversion of Uint8Array to Buffer.\n * The resulting buffer will share the same allocated memory as the Uint8Array.\n */\nexport const arrayToBuffer = (array: Uint8Array): Buffer => {\n return Buffer.from(array.buffer, array.byteOffset, array.byteLength);\n};\n\n/**\n * Non-copying conversion of Buffer to Uint8Array.\n * The resulting Uint8Array will share the same allocated memory as the Buffer.\n */\nexport const bufferToArray = (buffer: Buffer): Uint8Array => {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n};\n\nexport const stringToArray = (string: string): Uint8Array => bufferToArray(Buffer.from(string, 'hex'));\n\nexport const arrayToString = (array: Uint8Array): string => arrayToBuffer(array).toString('hex');\n", "//\n// Copyright 2020 DXOS.org\n//\n\n/**\n * Get or set map value.\n */\nexport const defaultMap = <K, V>(map: Map<K, V>, key: K, def: V | (() => V)) => {\n let value = map.get(key);\n if (value === undefined) {\n value = typeof def === 'function' ? (def as () => V)() : def;\n map.set(key, value);\n }\n\n return value;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport type IdOrder = string[];\n\ntype ObjectOrderAccumulator<T> = { objects: T[]; ids: Set<string> };\n\n/**\n * Uses an array of string id’s to order a map of objects, returning an array of those objects. Objects not listed by\n * the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferObjectOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): T[] => {\n const orderedObjects = order.reduce(\n (acc, id) => {\n if (id in objectMap) {\n acc.objects.push(objectMap[id]);\n acc.ids.add(id);\n }\n return acc;\n },\n { objects: [], ids: new Set() } as ObjectOrderAccumulator<T>,\n );\n const { objects } = Object.keys(objectMap).reduce((acc, id) => {\n if (!acc.ids.has(id)) {\n acc.objects.push(objectMap[id]);\n }\n return acc;\n }, orderedObjects);\n return objects;\n};\n\n/**\n * Uses an array of string id’s to order a map of objects, returning a new map with the keys in the prescribed order.\n * Objects not listed by the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferRecordOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): Record<string, T> => {\n return Object.assign(\n order\n .filter((id) => id in objectMap)\n .reduce((acc: Record<string, null>, id) => {\n acc[id] = null;\n return acc;\n }, {}),\n objectMap,\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\n// NOTE: `!=` is required.\nexport const isNode = () => typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n/* eslint-disable */\n\n// From https://stackoverflow.com/a/11381730/2804332.\nexport const mobileAndTabletCheck = () => {\n let check = false;\n ((a) => { 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))) { check = true; } })(navigator.userAgent || navigator.vendor || (window as any).opera);\n return check;\n};\n\n/* eslint-enable */\n\n// From https://stackoverflow.com/a/9039885\nexport const iosCheck = () => {\n return (\n ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n );\n};\n\n// From https://stackoverflow.com/a/23522755/2804332\nexport const safariCheck = () =>\n typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Retrieve the host platform in a best-effort way with normalized output.\n */\n// From https://flaming.codes/posts/how-to-determine-os-in-browser.\nexport const getHostPlatform = () => {\n if (!('navigator' in window)) {\n return 'unknown';\n }\n\n // Use the modern 'web hints' provied by\n // 'userAgentData' if available, else use\n // the deprecated 'platform' as fallback.\n const platform = ((navigator as any).userAgentData?.platform || navigator.platform)?.toLowerCase();\n if (platform.startsWith('win')) {\n return 'windows';\n } else if (platform.startsWith('mac')) {\n return 'macos';\n } else if (platform.startsWith('ipad') || platform.startsWith('iphone') || platform.startsWith('ipod')) {\n return 'ios';\n } else if (platform.startsWith('linux')) {\n return 'linux';\n } else {\n return 'unknown';\n }\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\n// TODO(burdon): Random class utility.\n// TODO(burdon): Make object { min, max }.\nexport const randomInt = (max: number, min: number) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport const range = (n: number) => Array.from(Array(n).keys());\n\nexport const rangeFromTo = (from: number, to: number) => range(to - from).map((i) => i + from);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Factor out.\n// TODO(burdon): Consider mathjs for variance, standard deviations, etc.\n// https://www.npmjs.com/package/mathjs\n\nimport { defaultMap } from './map';\n\nexport type Accessor<T, V> = string | ((value: T) => V);\n\nexport const accessBy = <T, V>(value: T, accessor: Accessor<T, V>) =>\n typeof accessor === 'function' ? accessor(value) : (value as Record<any, any>)[accessor];\n\nexport const median = (values: number[]) => {\n const mid = Math.floor(values.length / 2);\n if (values.length % 2 === 1) {\n return values[mid];\n } else {\n return (values[mid - 1] + values[mid]) / 2;\n }\n};\n\n// TODO(burdon): Value Proto.\nexport type NumericalValues = {\n min?: number;\n max?: number;\n mean?: number;\n median?: number;\n total: number;\n count: number;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const numericalValues = <T>(values: T[], accessor: Accessor<T, number>) => {\n const result: NumericalValues = { total: 0, count: 0 };\n\n const sorted: number[] = values\n .map((value) => {\n const v = accessBy(value, accessor);\n if (v === undefined || isNaN(v)) {\n return undefined;\n }\n\n result.total += v;\n if (result.min === undefined || v < result.min) {\n result.min = v;\n }\n if (result.max === undefined || v > result.max) {\n result.max = v;\n }\n\n return v;\n })\n .filter((value) => value !== undefined)\n .sort((a, b) => a! - b!) as number[];\n\n if (sorted.length) {\n Object.assign(result, {\n count: sorted.length,\n mean: result.total / sorted.length,\n median: median(sorted),\n });\n }\n\n return result;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const reduceSet = <T, V>(values: T[], accessor: Accessor<T, V>): Set<V> => {\n return values.reduce((values, value) => {\n const v = accessBy(value, accessor);\n values.add(v);\n return values;\n }, new Set<V>());\n};\n\n/**\n * Returns an object containing values grouped by the given key accessor.\n */\nexport const reduceGroupBy = <T, K>(values: T[], accessor: Accessor<T, K>): Map<K, T[]> => {\n return values.reduce((values, value) => {\n const key = accessBy(value, accessor);\n defaultMap(values, key, []).push(value);\n return values;\n }, new Map<K, T[]>());\n};\n\n/**\n * Generic composable reducer interface.\n */\nexport interface Reducer<T, S> {\n /**\n * Get initial state.\n */\n initialState(): S;\n\n /**\n * Apply event to state.\n */\n reduce(state: S, event: T): S;\n}\n\n/**\n * Applies the reducer to the array of values.\n */\nexport const reduceSeries = <T, S>(reducer: Reducer<T, S>, events: T[]): S => {\n const state = reducer.initialState();\n for (const event of events) {\n reducer.reduce(state, event);\n }\n\n return state;\n};\n\n/**\n * Reducer to group values.\n */\nexport const createGroupReducer = <T, S>(\n groupBy: (value: T) => string,\n sub: Reducer<T, S>,\n): Reducer<T, Record<string, S>> => ({\n initialState: () => ({}),\n reduce: (state: Record<string, S>, event: T) => {\n const key = groupBy(event);\n state[key] = sub.reduce(state[key] ?? sub.initialState(), event);\n return state;\n },\n});\n\nexport type TimeRecord = { timestamp: Date | number | string };\nexport type TimeBucket = { start: number; period: number; count: number };\n\nexport const getDate = (value: Date | number | string): Date => (value instanceof Date ? value : new Date(value));\n\n/**\n * Reducer to group by time period.\n */\nexport const createBucketReducer = <T extends TimeRecord>(period: number): Reducer<T, TimeBucket[]> => ({\n initialState: () => [],\n reduce: (series: TimeBucket[], event: T) => {\n const timestamp = getDate(event.timestamp);\n let bucket: TimeBucket = series[series.length - 1];\n if (!bucket || bucket.start + period < timestamp.getTime()) {\n bucket = { start: timestamp.getTime(), period, count: 0 };\n series.push(bucket);\n }\n\n bucket.count++;\n return series;\n },\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nconst instanceTag = Symbol('instanceTag');\n\n/**\n * Makes instanceof work correctly even if the class definition was duplicated (e.g. when bundling).\n * The comparison is done by comparing the tag passed to this function.\n *\n * Example:\n *\n * ```typescript\n * @safeInstanceof('Tagged')\n * class Tagged {}\n * ```\n */\nexport const safeInstanceof =\n (tag: string): ClassDecorator =>\n (target: any) => {\n target.prototype[instanceTag] = tag;\n\n Object.defineProperty(target.prototype, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n\n Object.defineProperty(target, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const safeParseJson: {\n <T extends object>(data: string | undefined | null, defaultValue: T): T;\n <T extends object>(data: string | undefined | null): T | undefined;\n} = <T extends object>(data: string | undefined | null, defaultValue?: T) => {\n if (data) {\n try {\n return JSON.parse(data);\n } catch (err) {}\n }\n return defaultValue;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Unique.\n// TODO(burdon): Options for undefined to end.\n\ntype Compare<T> = (a: T, b: T) => number;\n\nexport const compareScalar =\n (inc = true) =>\n (a: any, b: any) =>\n (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n\nexport const compareString =\n (inc = true, caseInsensitive = true) =>\n (a: string, b: string) => {\n if (caseInsensitive) {\n a = a?.toLowerCase();\n b = b?.toLowerCase();\n }\n return (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n };\n\nexport const compareObject =\n <T extends Record<string, any>>(prop: string, sorter: Compare<any>, inc = true): Compare<any> =>\n (a: T, b: T) =>\n (inc ? 1 : -1) * sorter(a[prop], b[prop]);\n\nexport const compareMulti =\n <T extends Record<string, any>>(sorters: Compare<T>[]) =>\n (a: T, b: T) => {\n const sort = (i = 0): number => {\n const s = sorters[i](a, b);\n if (s === 0 && i < sorters.length - 1) {\n return sort(i + 1);\n } else {\n return s;\n }\n };\n\n return sort();\n };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\n/**\n * Tracer events form a graph.\n */\nexport type Event = {\n id: string;\n timestamp: number; // ms.\n duration?: number; // ms (float).\n value?: any;\n};\n\n/**\n * Event sink.\n */\n// TODO(burdon): Reconcile with log.trace.\nexport class Tracer {\n private readonly _events = new Map<string, Event[]>();\n\n private _recording = false;\n\n // TODO(burdon): Start/stop methods for recording data? By id?\n // Alternatively, enable subscriptions to track/compute series.\n\n // TODO(burdon): Hierarchical traces?\n\n get recording() {\n return this._recording;\n }\n\n keys() {\n return Array.from(this._events.keys());\n }\n\n get(id: string, filter?: Record<string, any>): Event[] | undefined {\n const events = this._events.get(id);\n if (filter) {\n return events?.filter((event) => Object.entries(filter).every(([key, value]) => event?.value[key] === value));\n }\n\n return events;\n }\n\n clear() {\n this._events.clear();\n }\n\n start() {\n this._recording = true;\n return this;\n }\n\n stop() {\n this._recording = false;\n return this;\n }\n\n emit(id: string, value?: any) {\n this._post(this._createEvent(id, value));\n }\n\n mark(id: string, value?: any): { start: number; end: () => void } {\n const event = this._createEvent(id, value);\n const start = performance.now();\n return {\n start,\n end: () => {\n event.duration = performance.now() - start;\n this._post(event);\n },\n };\n }\n\n private _createEvent(id: string, value?: any): Event {\n const event: Event = { id, timestamp: Date.now() };\n if (value !== undefined) {\n event.value = value;\n }\n\n return event;\n }\n\n private _post(event: Event) {\n if (this._recording) {\n defaultMap(this._events, event.id, []).push(event);\n }\n }\n}\n\n// TODO(burdon): Factor out (move to @dxos/log?)\n// TODO(burdon): Global singleton (e.g., `trace()`) or part of client services?\nexport const tracer = new Tracer();\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport type AsyncCallback<T> = (param: T) => Promise<void>;\n\nexport type Provider<T> = () => T;\n\nexport type MaybePromise<T> = T | Promise<T>;\n\n/**\n * All types that evaluate to false when cast to a boolean.\n */\nexport type Falsy = false | 0 | '' | null | undefined;\n\n/**\n * A function returning a value or a value itself.\n */\nexport type MaybeFunction<T> = T | (() => T);\n\n/**\n * Use with filter chaining instead of filter(Boolean) to preserve type.\n * NOTE: To filter by type:\n * items.filter((item: any): item is RangeSet<Decoration> => item instanceof RangeSet)\n */\n// TODO(burdon): Reconcile names.\nexport const isNotFalsy = <T>(value: T): value is Exclude<T, Falsy> => !!value;\nexport const nonNullable = <T>(value: T): value is NonNullable<T> => value !== null && value !== undefined;\nexport const isNotNullOrUndefined = <T>(value: T): value is Exclude<T, null | undefined> => value != null;\nexport const boolGuard = <T>(value: T | null | undefined): value is T => Boolean(value);\n\n/**\n * Get value from a provider.\n */\nexport const getAsyncValue = async <T>(value: MaybeFunction<MaybePromise<T>>): Promise<T> => {\n if (typeof value === 'function') {\n return (value as Function)();\n } else {\n return value;\n }\n};\n\nexport type MakeOptional<Type, Key extends keyof Type> = Omit<Type, Key> & Partial<Pick<Type, Key>>;\n\n/**\n * Remove keys with undefined values.\n */\nexport const stripUndefinedValues = <T extends { [index: string]: any }>(obj: T): T => {\n if (typeof obj === 'object') {\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n if (value === undefined) {\n delete obj[key];\n } else if (value !== null && typeof value === 'object') {\n stripUndefinedValues(value); // TODO(burdon): Test recursion.\n }\n });\n }\n\n return obj;\n};\n\n/**\n * Swap position of element within array.\n */\nexport const arrayMove = <T>(array: T[], from: number, to: number): Array<T> => {\n array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);\n return array;\n};\n\nexport const safeParseInt = (value: string | undefined, defaultValue?: number) => {\n try {\n const n = parseInt(value ?? '');\n return isNaN(n) ? defaultValue : n;\n } catch (err) {\n return defaultValue;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\nconst symbol = Symbol.for('dxos.instance-contexts');\n\nconst instanceContexts = ((globalThis as any)[symbol] ??= new WeakMap<\n any,\n {\n nextId: number;\n instanceIds: WeakMap<any, number>;\n }\n>());\n\n/**\n * Returns a unique instance id for a given object.\n * Ids are generated as incrementing numbers.\n * Ids are only unique within the scope of a given prototype.\n * Instances of different classes may have the same id.\n */\nexport const getPrototypeSpecificInstanceId = (instance: any): number => {\n const prototype = Object.getPrototypeOf(instance);\n const instanceCtx = defaultMap(instanceContexts as any, prototype, () => ({\n nextId: 0,\n instanceIds: new WeakMap(),\n }));\n\n let id = instanceCtx.instanceIds.get(instance);\n if (id === undefined) {\n id = instanceCtx.nextId++;\n instanceCtx.instanceIds.set(instance, id);\n }\n\n return id;\n};\n\nexport const getDebugName = (instance: any): string => {\n if (instance === null) {\n return 'null';\n }\n\n const prototype = Object.getPrototypeOf(instance);\n return `${prototype.constructor.name}#${getPrototypeSpecificInstanceId(instance)}`;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const sum = (values: number[]) => values.reduce((a, b) => a + b, 0);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const forEachAsync = <T>(items: T[], fn: (item: T, idx: number) => Promise<void>) => Promise.all(items.map(fn));\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Weak dictionary. It is a map that holds weak references to its values and allows garbage collection of values and keys.\n */\nexport class WeakDictionary<K, V extends object> implements Map<K, V> {\n private readonly _internal = new Map<K, WeakRef<V>>();\n private readonly _finalization = new FinalizationRegistry((cleanUpCallback: () => void) => {\n cleanUpCallback();\n });\n\n constructor(entries?: [K, V][]) {\n this._internal = new Map(entries?.map(([key, value]) => [key, new WeakRef(value)]));\n entries?.forEach(([key, value]) => this._register(key, value));\n }\n\n *entries(): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n keys(): IterableIterator<K> {\n return this._internal.keys();\n }\n\n *values(): IterableIterator<V> {\n for (const value of this._internal.values()) {\n const deref = value.deref();\n if (!deref) {\n continue;\n }\n yield deref;\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n get [Symbol.toStringTag](): string {\n return 'WeakDictionary';\n }\n\n get size(): number {\n return this._internal.size;\n }\n\n get(key: K): V | undefined {\n return this._internal.get(key)?.deref();\n }\n\n set(key: K, value: V): this {\n this._internal.set(key, new WeakRef(value));\n this._register(key, value);\n return this;\n }\n\n has(key: K): boolean {\n return this._internal.has(key) && this._internal.get(key)!.deref() !== undefined;\n }\n\n delete(key: K): boolean {\n const value = this._internal.get(key)?.deref();\n if (value) {\n this._unregister(value);\n }\n return this._internal.delete(key);\n }\n\n clear(): void {\n this._internal.forEach((value) => {\n const v = value.deref();\n if (v) {\n this._unregister(v);\n }\n });\n\n this._internal.clear();\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._internal.forEach((value, key) => {\n const v = value.deref();\n if (v) {\n callbackfn(v, key, this);\n }\n });\n }\n\n private _register(key: K, value: V) {\n this._finalization.register(\n value,\n () => {\n this._internal.delete(key);\n },\n value,\n );\n }\n\n private _unregister(value: V) {\n this._finalization.unregister(value);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const mapValues = <T, U>(obj: Record<string, T>, fn: (value: T, key: string) => U): Record<string, U> => {\n const result: Record<string, U> = {};\n Object.keys(obj).forEach((key) => {\n result[key] = fn(obj[key], key);\n });\n return result;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.dispose ??= Symbol('Symbol.dispose');\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.asyncDispose ??= Symbol('Symbol.asyncDispose');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport './explicit-resource-management-polyfill';\n\n/**\n * Run function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * using _ = defer(() => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const defer = (fn: () => void): Disposable => new DeferGuard(fn);\n\nclass DeferGuard {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => void) {}\n\n [Symbol.dispose]() {\n const result = this._fn();\n if ((result as any) instanceof Promise) {\n throw new Error('Async functions in defer are not supported. Use deferAsync instead.');\n }\n }\n}\n\n/**\n * Run async function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * await using _ = deferAsync(async () => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const deferAsync = (fn: () => Promise<void>): AsyncDisposable => new DeferAsyncGuard(fn);\n\nclass DeferAsyncGuard implements AsyncDisposable {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => Promise<void>) {}\n\n async [Symbol.asyncDispose]() {\n await this._fn();\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;AAIA,SAASA,iBAAiB;;AAMnB,IAAMC,aAAa,CAAIC,KAAUC,MAAgBC,UAAAA;AACtDJ,YAAUG,KAAKE,SAAS,GAAA,QAAA;;;;;;;;;AACxB,MAAIC,SAASJ;AACb,aAAWK,OAAOJ,KAAKK,MAAM,GAAG,EAAC,GAAI;AACnCF,WAAOC,GAAAA,MAAS,CAAC;AACjBD,aAASA,OAAOC,GAAAA;EAClB;AACAD,SAAOH,KAAKM,GAAG,EAAC,CAAA,IAAOL;AACvB,SAAOE,OAAOH,KAAKM,GAAG,EAAC,CAAA;AACzB;;;ACfA,OAAOC,UAAU;AAMV,IAAMC,eAAe,CAACC,SAAc;EACzCC,IAAI,CAACA,OAAiBA,GAAGC,KAAKF,GAAAA;EAC9BG,OAAO,CAACF,OAAiBG,KAAKC,UAAUJ,GAAGC,KAAKF,GAAAA,CAAAA;AAClD;;;ACTA,SAASM,aAAAA,kBAAiB;;AAYnB,IAAMC,WAAN,MAAMA,UAAAA;EACX,OAAOC,IAAIC,MAAkBC,KAAsB;AACjD,UAAMC,MAAOF,KAAKC,OAAO,CAAA,KAAO,IAAKA,MAAM,IAAO;AAClD,WAAO,CAAC,CAACC;EACX;EAEA,OAAOC,IAAIH,MAAkBC,KAAaG,OAAgB;AACxD,QAAIA,OAAO;AACTJ,WAAKC,OAAO,CAAA,IAAKD,KAAKC,OAAO,CAAA,IAAM,KAAM,IAAKA,MAAM;IACtD,OAAO;AACLD,WAAKC,OAAO,CAAA,IAAKD,KAAKC,OAAO,CAAA,IAAK,EAAE,KAAM,IAAKA,MAAM;IACvD;EACF;;;;EAKA,OAAOI,MAAML,MAAkBM,OAAeC,KAAqB;AACjE,QAAIF,QAAQ;AACZ,aAASG,IAAIF,OAAOE,IAAID,KAAKC,KAAK;AAChC,YAAMN,MAAOF,KAAKQ,KAAK,CAAA,KAAO,IAAKA,IAAI,IAAO;AAC9CH,eAASH;IACX;AACA,WAAOG;EACT;EAEA,OAAOI,OAAOT,MAA8B;AAC1C,UAAMU,SAAS,IAAIC,WAAWX,KAAKY,MAAM;AACzC,aAASJ,IAAI,GAAGA,IAAIR,KAAKY,QAAQJ,KAAK;AACpCE,aAAOF,CAAAA,IAAK,CAACR,KAAKQ,CAAAA;IACpB;AACA,WAAOE;EACT;EAEA,OAAOG,IAAIC,OAAmBC,QAAoB;AAChDlB,IAAAA,WAAUiB,MAAMF,WAAWG,OAAOH,QAAQ,wCAAA;;;;;;;;;AAC1C,UAAMF,SAAS,IAAIC,WAAWG,MAAMF,MAAM;AAC1C,aAASJ,IAAI,GAAGA,IAAIM,MAAMF,QAAQJ,KAAK;AACrCE,aAAOF,CAAAA,IAAKM,MAAMN,CAAAA,IAAKO,OAAOP,CAAAA;IAChC;AACA,WAAOE;EACT;EAEA,OAAOM,YAAYhB,MAAkBiB,OAA0D,CAAC,GAAa;AAC3G,UAAM,EAAEC,QAAQ,GAAGX,MAAMP,KAAKY,SAAS,GAAGR,QAAQ,KAAI,IAAKa;AAE3D,UAAMP,SAAS,CAAA;AAEf,aAASF,IAAIU,OAAOV,IAAID,KAAKC,KAAK;AAChC,UAAIV,UAASC,IAAIC,MAAMQ,CAAAA,MAAOJ,OAAO;AACnCM,eAAOS,KAAKX,CAAAA;MACd;IACF;AACA,WAAOE;EACT;EAEA,OAAOU,KAAKf,OAA2B;AACrC,UAAMgB,MAAM,IAAIV,WAAWW,KAAKC,KAAKD,KAAKC,KAAKlB,KAAAA,IAAS,CAAA,CAAA,EAAImB,KAAK,GAAA;AAGjE,UAAMC,gBAAgBH,KAAKC,KAAKlB,QAAQ,CAAA;AACxCgB,QAAIA,IAAIT,SAAS,CAAA,IAAK,OAAS,IAAIa;AAEnC,WAAOJ;EACT;EAEA,OAAOK,MAAMrB,OAA2B;AACtC,WAAO,IAAIM,WAAWW,KAAKC,KAAKD,KAAKC,KAAKlB,KAAAA,IAAS,CAAA,CAAA,EAAImB,KAAK,CAAA;EAC9D;AACF;;;ACjFA,SAASG,aAAAA,kBAAiB;;AAWnB,IAAMC,WAAN,MAAMA;EAGJC,QAAQC,MAAoC;AACjDH,IAAAA,WAAU,KAAKI,WAAW,oBAAA;;;;;;;;;AAC1B,WAAO,KAAKA,UAAS,GAAID,IAAAA;EAC3B;EAEOE,aAAaF,MAAgD;AAClE,WAAO,KAAKC,YAAS,GAAMD,IAAAA;EAC7B;EAEOG,IAAIC,UAAa;AACtBP,IAAAA,WAAU,CAAC,KAAKI,WAAW,wBAAA;;;;;;;;;AAC3B,SAAKA,YAAYG;EACnB;EAEOC,QAAQ;AACb,WAAO,CAAC,CAAC,KAAKJ;EAChB;AACF;AAQO,IAAMK,oBAAoB,CAAe,EAAEC,SAAQ,MAAmB;AAE3E,SAAO,IAAIC,MACT;IACED;EACF,GACA;IACEE,KAAK,CAACC,QAAaC,SAAAA;AACjB,aAAO,IAAIX,SAAAA;AACTO,iBAASK,QAAQ,CAACC,YAAAA;AAChB,gBAAMC,SAASD,QAAQF,IAAAA;AACvB,cAAIG,QAAQ;AACVA,mBAAOC,MAAMF,SAASb,IAAAA;UACxB;QACF,CAAA;MACF;IACF;EACF,CAAA;AAEJ;;;AC1DA,SAASgB,eAAe;AAExB,SAASC,eAAeC,aAAa;AAMrC,IAAMC,2BAA2B;AAU1B,IAAMC,aAAN,MAAMA;;EAIXC,YACmBC,aACjBC,QACA;SAFiBD,cAAAA;SAJFE,UAAU,oBAAIC,IAAAA;AAO7B,QAAIF,QAAQ;AACV,iBAAWG,SAASH,QAAQ;AAC1B,aAAKI,IAAID,KAAAA;MACX;IACF;EACF;EAEAE,WAAW;AACT,WAAOC,cAAc,IAAI;EAC3B;EAEAC,SAAS;AACP,WAAO,KAAKN,QAAQO,OAAOZ,2BACvB;MAAEY,MAAM,KAAKP,QAAQO;IAAK,IAC1BC,MAAMC,KAAK,KAAKT,QAAQD,OAAM,CAAA;EACpC;EAEA,CAACW,QAAQC,MAAM,IAAI;AACjB,WAAON,cAAc,IAAI;EAC3B;EAEAF,IAAID,OAAgB;AAClB,SAAKF,QAAQY,IAAI,KAAKd,YAAYI,KAAAA,GAAQA,KAAAA;AAC1C,WAAO;EACT;EAEAW,QAAc;AACZ,SAAKb,QAAQa,MAAK;EACpB;EAEAC,OAAOZ,OAAmB;AACxB,WAAO,KAAKF,QAAQc,OAAO,KAAKhB,YAAYI,KAAAA,CAAAA;EAC9C;EAEAa,QAAQC,YAAwDC,SAAqB;AACnF,QAAIA,SAAS;AACXD,mBAAaA,WAAWE,KAAKD,OAAAA;IAC/B;AAEA,SAAKjB,QAAQe,QAAQ,CAACb,UAAUc,WAAWd,OAAOA,OAAO,IAAI,CAAA;EAC/D;EAEAiB,IAAIjB,OAAmB;AACrB,WAAO,KAAKF,QAAQmB,IAAI,KAAKrB,YAAYI,KAAAA,CAAAA;EAC3C;EAEA,IAAIK,OAAe;AACjB,WAAO,KAAKP,QAAQO;EACtB;EAEA,CAACa,OAAOC,QAAQ,IAAyB;AACvC,WAAO,KAAKrB,QAAQD,OAAM;EAC5B;EAEA,CAACuB,UAAoC;AACnC,eAAWpB,SAAS,KAAKF,QAAQD,OAAM,GAAI;AACzC,YAAM;QAACG;QAAOA;;IAChB;EACF;EAEAqB,OAA4B;AAC1B,WAAO,KAAKH,OAAOC,QAAQ,EAAC;EAC9B;EAEAtB,SAA8B;AAC5B,WAAO,KAAKqB,OAAOC,QAAQ,EAAC;EAC9B;EAEA,KAAKD,OAAOI,WAAW,IAAY;AACjC,WAAO;EACT;AACF;AAOO,IAAMC,UAAU,CAAIC,eAAAA;AACzB,SAAO,MAAMC,wBAAwB/B,WAAAA;IACnCC,YAAYE,QAA6B;AACvC,YAAM2B,YAAY3B,MAAAA;IACpB;EACF;AACF;AAQO,IAAM6B,aAAN,MAAMA;;EAKX/B,YACmBgC,gBACjBP,SACA;SAFiBO,iBAAAA;SALFC,QAAQ,oBAAI7B,IAAAA;SACZD,UAAU,oBAAIC,IAAAA;AAO7B,QAAIqB,SAAS;AACX,iBAAW,CAACS,KAAK7B,KAAAA,KAAUoB,SAAS;AAClC,aAAKV,IAAImB,KAAK7B,KAAAA;MAChB;IACF;EACF;EAEAE,WAAW;AACT,WAAOC,cAAc,IAAI;EAC3B;EAEAC,SAAS;AACP,WAAO,KAAKN,QAAQO,OAAOZ,2BACvB;MAAEY,MAAM,KAAKP,QAAQO;IAAK,IAC1BC,MAAMC,KAAK,KAAKT,QAAQD,OAAM,CAAA;EACpC;EAEA,CAACW,QAAQC,MAAM,IAAI;AACjB,WAAON,cAAc,IAAI;EAC3B;EAEAQ,QAAc;AACZ,SAAKiB,MAAMjB,MAAK;AAChB,SAAKb,QAAQa,MAAK;EACpB;EAEAC,OAAOiB,KAAiB;AACtB,UAAMC,aAAa,KAAKF,MAAMhB,OAAO,KAAKe,eAAeE,GAAAA,CAAAA;AACzD,UAAME,eAAe,KAAKjC,QAAQc,OAAO,KAAKe,eAAeE,GAAAA,CAAAA;AAC7D,WAAOC,cAAcC;EACvB;EAEAlB,QAAQC,YAAwDC,SAAqB;AACnF,QAAIA,SAAS;AACXD,mBAAaA,WAAWE,KAAKD,OAAAA;IAC/B;AAEA,SAAKa,MAAMf,QAAQ,CAACgB,KAAKG,cACvBlB,WAAW,KAAKhB,QAAQmC,IAAID,SAAAA,KAAcE,MAAM,IAAIC,MAAM,gBAAA,CAAA,GAAoBN,KAAK,IAAI,CAAA;EAE3F;EAEAI,IAAIJ,KAAuB;AACzB,WAAO,KAAK/B,QAAQmC,IAAI,KAAKN,eAAeE,GAAAA,CAAAA;EAC9C;EAEAZ,IAAIY,KAAiB;AACnB,WAAO,KAAKD,MAAMX,IAAI,KAAKU,eAAeE,GAAAA,CAAAA;EAC5C;EAEAnB,IAAImB,KAAQ7B,OAAgB;AAC1B,UAAMgC,YAAY,KAAKL,eAAeE,GAAAA;AACtC,SAAKD,MAAMlB,IAAIsB,WAAWH,GAAAA;AAC1B,SAAK/B,QAAQY,IAAIsB,WAAWhC,KAAAA;AAC5B,WAAO;EACT;EAEA,IAAIK,OAAe;AACjB,WAAO,KAAKuB,MAAMvB;EACpB;EAEA,EAAEa,OAAOC,QAAQ,IAA8B;AAC7C,eAAW,CAACa,WAAWH,GAAAA,KAAQ,KAAKD,OAAO;AACzC,YAAM5B,QAAQ,KAAKF,QAAQmC,IAAID,SAAAA,KAAcE,MAAM,IAAIC,MAAM,gBAAA,CAAA;AAC7D,YAAM;QAACN;QAAK7B;;IACd;EACF;EAEAoB,UAAoC;AAClC,WAAO,KAAKF,OAAOC,QAAQ,EAAC;EAC9B;EAEAE,OAA4B;AAC1B,WAAO,KAAKO,MAAM/B,OAAM;EAC1B;EAEAA,SAA8B;AAC5B,WAAO,KAAKC,QAAQD,OAAM;EAC5B;EAEA,KAAKqB,OAAOI,WAAW,IAAY;AACjC,WAAO;EACT;AACF;AAOO,IAAMc,UAAU,CAAIC,kBACzB,MAAMC,wBAA2BZ,WAAAA;EAC/B/B,YAAYyB,SAA+C;AACzD,UAAMiB,eAAejB,OAAAA;EACvB;AACF;;;AChNK,IAAMmB,gBACX,CAAoCC,eACpC,IAAIC,SACFD,WAAAA,EAAAA,GAAgBC,IAAAA;;;ACdb,IAAMC,QAAQ,CAAOC,KAAgBC,QAAsC,IAAIC,SAASF,KAAKC,GAAAA;AAE7F,IAAMC,WAAN,MAAMA;;;;;EAKXC,YACmBC,MACAC,MACjB;SAFiBD,OAAAA;SACAC,OAAAA;EAChB;EAEH,IAAIJ,MAAS;AACX,WAAO,KAAKI;EACd;EAEA,IAAIC,QAAe;AACjB,WAAO,KAAKF,KAAKG,IAAI,KAAKF,IAAI;EAChC;EAEAG,SAASF,OAAiC;AACxC,QAAI,CAAC,KAAKF,KAAKK,IAAI,KAAKJ,IAAI,GAAG;AAC7B,WAAKD,KAAKM,IAAI,KAAKL,MAAMC,KAAAA;IAC3B;AACA,WAAO;EACT;EAEAK,KAA0DV,KAAsC;AAC9F,WAAOF,MAAM,KAAKO,OAAOL,GAAAA;EAC3B;AACF;;;ACjCA,SAASW,iBAAqC;AAI9C,IAAMC,mBAAmB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;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",
6
- "names": ["invariant", "assignDeep", "doc", "path", "value", "length", "parent", "key", "slice", "at", "util", "createBinder", "obj", "fn", "bind", "async", "util", "promisify", "invariant", "BitField", "get", "data", "idx", "bit", "set", "value", "count", "begin", "end", "i", "invert", "result", "Uint8Array", "length", "and", "first", "second", "findIndexes", "opts", "start", "push", "ones", "res", "Math", "ceil", "fill", "bitInLastByte", "zeros", "invariant", "Callback", "call", "args", "_callback", "callIfSet", "set", "callback", "isSet", "createSetDispatch", "handlers", "Proxy", "get", "target", "prop", "forEach", "handler", "method", "apply", "inspect", "inspectObject", "raise", "MAX_SERIALIZATION_LENGTH", "ComplexSet", "constructor", "_projection", "values", "_values", "Map", "value", "add", "toString", "inspectObject", "toJSON", "size", "Array", "from", "inspect", "custom", "set", "clear", "delete", "forEach", "callbackfn", "thisArg", "bind", "has", "Symbol", "iterator", "entries", "keys", "toStringTag", "makeSet", "projection", "BoundComplexSet", "ComplexMap", "_keyProjection", "_keys", "key", "keyDeleted", "valueDeleted", "primitive", "get", "raise", "Error", "makeMap", "keyProjection", "BoundComplexMap", "deferFunction", "fnProvider", "args", "entry", "map", "key", "MapEntry", "constructor", "_map", "_key", "value", "get", "orInsert", "has", "set", "deep", "PublicKey", "DEFAULT_WORDLIST", "HumanHasher", "constructor", "wordlist", "length", "Error", "humanize", "hexdigest", "words", "separator", "pairs", "match", "bytes", "map", "x", "parseInt", "compressed", "_compress", "join", "target", "segSize", "segments", "i", "push", "slice", "concat", "checksums", "reduce", "acc", "curr", "hasher", "value", "Buffer", "Uint8Array", "ArrayBuffer", "PublicKey", "stringify", "toHex", "exponentialBackoffInterval", "cb", "initialInterval", "interval", "repeat", "timeoutId", "setTimeout", "clearTimeout", "inspect", "PublicKey", "arraysEqual", "a", "b", "length", "i", "arrayToBuffer", "array", "Buffer", "from", "buffer", "byteOffset", "byteLength", "bufferToArray", "Uint8Array", "stringToArray", "string", "arrayToString", "toString", "MAX_DEPTH", "jsonReplacer", "key", "value", "inspect", "custom", "type", "Array", "isArray", "data", "length", "Buffer", "from", "humanize", "PublicKey", "stringify", "toString", "jsonify", "depth", "visitedObjects", "WeakSet", "has", "add", "Uint8Array", "arrayToBuffer", "map", "x", "toJSON", "res", "Object", "keys", "delete", "jsonKeyReplacer", "options", "fromHex", "toHex", "truncate", "defaultMap", "map", "key", "def", "value", "get", "undefined", "set", "inferObjectOrder", "objectMap", "order", "orderedObjects", "reduce", "acc", "id", "objects", "push", "ids", "add", "Set", "Object", "keys", "has", "inferRecordOrder", "assign", "filter", "isNode", "process", "versions", "node", "mobileAndTabletCheck", "check", "a", "test", "substr", "navigator", "userAgent", "vendor", "window", "opera", "iosCheck", "includes", "platform", "document", "safariCheck", "getHostPlatform", "userAgentData", "toLowerCase", "startsWith", "randomInt", "max", "min", "Math", "ceil", "floor", "random", "range", "n", "Array", "from", "keys", "rangeFromTo", "to", "map", "i", "accessBy", "value", "accessor", "median", "values", "mid", "Math", "floor", "length", "numericalValues", "result", "total", "count", "sorted", "map", "v", "undefined", "isNaN", "min", "max", "filter", "sort", "a", "b", "Object", "assign", "mean", "reduceSet", "reduce", "add", "Set", "reduceGroupBy", "key", "defaultMap", "push", "Map", "reduceSeries", "reducer", "events", "state", "initialState", "event", "createGroupReducer", "groupBy", "sub", "getDate", "Date", "createBucketReducer", "period", "series", "timestamp", "bucket", "start", "getTime", "instanceTag", "Symbol", "safeInstanceof", "tag", "target", "prototype", "Object", "defineProperty", "hasInstance", "value", "instance", "safeParseJson", "data", "defaultValue", "JSON", "parse", "err", "compareScalar", "inc", "a", "b", "compareString", "caseInsensitive", "toLowerCase", "compareObject", "prop", "sorter", "compareMulti", "sorters", "sort", "i", "s", "length", "Tracer", "_events", "Map", "_recording", "recording", "keys", "Array", "from", "get", "id", "filter", "events", "event", "Object", "entries", "every", "key", "value", "clear", "start", "stop", "emit", "_post", "_createEvent", "mark", "performance", "now", "end", "duration", "timestamp", "Date", "undefined", "defaultMap", "push", "tracer", "isNotFalsy", "value", "nonNullable", "undefined", "isNotNullOrUndefined", "boolGuard", "Boolean", "getAsyncValue", "stripUndefinedValues", "obj", "Object", "keys", "forEach", "key", "arrayMove", "array", "from", "to", "splice", "length", "safeParseInt", "defaultValue", "n", "parseInt", "isNaN", "err", "symbol", "Symbol", "for", "instanceContexts", "globalThis", "WeakMap", "getPrototypeSpecificInstanceId", "instance", "prototype", "Object", "getPrototypeOf", "instanceCtx", "defaultMap", "nextId", "instanceIds", "id", "get", "undefined", "set", "getDebugName", "constructor", "name", "sum", "values", "reduce", "a", "b", "forEachAsync", "items", "fn", "Promise", "all", "map", "WeakDictionary", "constructor", "entries", "_internal", "Map", "_finalization", "FinalizationRegistry", "cleanUpCallback", "map", "key", "value", "WeakRef", "forEach", "_register", "deref", "keys", "values", "Symbol", "iterator", "toStringTag", "size", "get", "set", "has", "undefined", "delete", "_unregister", "clear", "v", "callbackfn", "thisArg", "bind", "register", "unregister", "mapValues", "obj", "fn", "result", "Object", "keys", "forEach", "key", "Symbol", "dispose", "asyncDispose", "defer", "fn", "DeferGuard", "constructor", "_fn", "Symbol", "dispose", "result", "Promise", "Error", "deferAsync", "DeferAsyncGuard", "asyncDispose"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Initialize a deeply nested object.\n * @returns The value of the prop after assignment.\n */\nexport const assignDeep = <T>(doc: any, path: (string | number)[], value: T): T => {\n invariant(path.length > 0);\n let parent = doc;\n for (const key of path.slice(0, -1)) {\n parent[key] ??= {};\n parent = parent[key];\n }\n parent[path.at(-1)!] = value;\n return parent[path.at(-1)!]; // NOTE: We can't just return value here since doc's getter might return a different object.\n};\n\nexport const getDeep = (doc: any, path: (string | number)[]): unknown | undefined => {\n let parent = doc;\n for (const key of path) {\n parent = parent?.[key];\n }\n return parent;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport util from 'node:util';\n\n/**\n * Function binder replaces pify.\n */\n// TODO(burdon): Replace pify everywhere.\nexport const createBinder = (obj: any) => ({\n fn: (fn: Function) => fn.bind(obj),\n async: (fn: Function) => util.promisify(fn.bind(obj)),\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Bitfield encodes indices from MSB to LSB.\n * Index 0 is the MSB of the first byte.\n *\n *\n * #0 #1 #2 #3\n * 01010101 11110000 00001111 01010101\n * ^ ^\n * MSB LSB\n */\nexport class BitField {\n static get(data: Uint8Array, idx: number): boolean {\n const bit = (data[idx >> 3] >> (7 - (idx % 8))) & 0x1;\n return !!bit;\n }\n\n static set(data: Uint8Array, idx: number, value: boolean) {\n if (value) {\n data[idx >> 3] = data[idx >> 3] | (1 << (7 - (idx % 8)));\n } else {\n data[idx >> 3] = data[idx >> 3] & ~(1 << (7 - (idx % 8)));\n }\n }\n\n /**\n * [start; end)\n */\n static count(data: Uint8Array, begin: number, end: number): number {\n let count = 0;\n for (let i = begin; i < end; i++) {\n const bit = (data[i >> 3] >> (7 - (i % 8))) & 0x1;\n count += bit;\n }\n return count;\n }\n\n static invert(data: Uint8Array): Uint8Array {\n const result = new Uint8Array(data.length);\n for (let i = 0; i < data.length; i++) {\n result[i] = ~data[i];\n }\n return result;\n }\n\n static and(first: Uint8Array, second: Uint8Array) {\n invariant(first.length === second.length, 'Bitfields must be of the same length');\n const result = new Uint8Array(first.length);\n for (let i = 0; i < first.length; i++) {\n result[i] = first[i] & second[i];\n }\n return result;\n }\n\n static findIndexes(data: Uint8Array, opts: { start?: number; end?: number; value?: boolean } = {}): number[] {\n const { start = 0, end = data.length * 8, value = true } = opts;\n\n const result = [];\n\n for (let i = start; i < end; i++) {\n if (BitField.get(data, i) === value) {\n result.push(i);\n }\n }\n return result;\n }\n\n static ones(count: number): Uint8Array {\n const res = new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0xff);\n\n // Note: We need to calculate last byte of bitfield.\n const bitInLastByte = Math.ceil(count % 8);\n res[res.length - 1] = 0xff << (8 - bitInLastByte);\n\n return res;\n }\n\n static zeros(count: number): Uint8Array {\n return new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0);\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Represents a callback that can be set once.\n *\n * Common usage is dependency injection.\n * In contrast to events, callbacks can only have one handler,\n * are executed synchronously,\n * and can return results.\n */\n// TODO(burdon): Move to @dxos/async.\nexport class Callback<T extends (...args: any[]) => any> {\n private _callback: T | undefined;\n\n public call(...args: Parameters<T>): ReturnType<T> {\n invariant(this._callback, 'Callback not set');\n return this._callback(...args);\n }\n\n public callIfSet(...args: Parameters<T>): ReturnType<T> | undefined {\n return this._callback?.(...args);\n }\n\n public set(callback: T) {\n invariant(!this._callback, 'Callback already set');\n this._callback = callback;\n }\n\n public isSet() {\n return !!this._callback;\n }\n}\n\nexport type SetCallbacks<T> = { handlers: Set<T> };\n\n/**\n * Create a fan-out callback handler.\n * NOTE: Methods cannot return values.\n */\nexport const createSetDispatch = <T extends {}>({ handlers }: SetCallbacks<T>) => {\n type Obj = { [i: string | symbol]: any };\n return new Proxy<any>(\n {\n handlers,\n },\n {\n get: (target: Obj, prop) => {\n return (...args: any[]) => {\n handlers.forEach((handler: Obj) => {\n const method = handler[prop];\n if (method) {\n method.apply(handler, args);\n }\n });\n };\n },\n },\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { inspectObject, raise } from '@dxos/debug';\n\nexport type Primitive = string | number | boolean | null | undefined;\n\nexport type PrimitiveProjection<T> = (value: T) => Primitive;\n\nconst MAX_SERIALIZATION_LENGTH = 10;\n\n/**\n * A set implementation that can hold complex values (like Buffer).\n *\n * The user must provide a projection function which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n *\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexSet<T> implements Set<T> {\n private readonly _values = new Map<Primitive, T>();\n\n // prettier-ignore\n constructor(\n private readonly _projection: PrimitiveProjection<T>,\n values?: Iterable<T> | null,\n ) {\n if (values) {\n for (const value of values) {\n this.add(value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n add(value: T): this {\n this._values.set(this._projection(value), value);\n return this;\n }\n\n clear(): void {\n this._values.clear();\n }\n\n delete(value: T): boolean {\n return this._values.delete(this._projection(value));\n }\n\n forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._values.forEach((value) => callbackfn(value, value, this));\n }\n\n has(value: T): boolean {\n return this._values.has(this._projection(value));\n }\n\n get size(): number {\n return this._values.size;\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this._values.values();\n }\n\n *entries(): IterableIterator<[T, T]> {\n for (const value of this._values.values()) {\n yield [value, value];\n }\n }\n\n keys(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n values(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexSet';\n }\n}\n\nexport type ComplexSetConstructor<T> = new (values?: Iterable<T> | null) => ComplexSet<T>;\n\n/**\n * Create a subclass of ComplexSet with predefined projection function.\n */\nexport const makeSet = <T>(projection: PrimitiveProjection<T>): ComplexSetConstructor<T> => {\n return class BoundComplexSet extends ComplexSet<T> {\n constructor(values?: Iterable<T> | null) {\n super(projection, values);\n }\n };\n};\n\n/**\n * A map implementation that can hold complex values (like Buffer) as keys.\n * The user must provide a projection function for map keys which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexMap<K, V> implements Map<K, V> {\n private readonly _keys = new Map<Primitive, K>();\n private readonly _values = new Map<Primitive, V>();\n\n // prettier-ignore\n constructor(\n private readonly _keyProjection: PrimitiveProjection<K>,\n entries?: readonly (readonly [K, V])[] | null,\n ) {\n if (entries) {\n for (const [key, value] of entries) {\n this.set(key, value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n clear(): void {\n this._keys.clear();\n this._values.clear();\n }\n\n delete(key: K): boolean {\n const keyDeleted = this._keys.delete(this._keyProjection(key));\n const valueDeleted = this._values.delete(this._keyProjection(key));\n return keyDeleted || valueDeleted;\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._keys.forEach((key, primitive) =>\n callbackfn(this._values.get(primitive) ?? raise(new Error('Map corrupted.')), key, this),\n );\n }\n\n get(key: K): V | undefined {\n return this._values.get(this._keyProjection(key));\n }\n\n has(key: K): boolean {\n return this._keys.has(this._keyProjection(key));\n }\n\n set(key: K, value: V): this {\n const primitive = this._keyProjection(key);\n this._keys.set(primitive, key);\n this._values.set(primitive, value);\n return this;\n }\n\n get size(): number {\n return this._keys.size;\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [primitive, key] of this._keys) {\n const value = this._values.get(primitive) ?? raise(new Error('Map corrupted.'));\n yield [key, value];\n }\n }\n\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]();\n }\n\n keys(): IterableIterator<K> {\n return this._keys.values();\n }\n\n values(): IterableIterator<V> {\n return this._values.values();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexMap';\n }\n}\n\nexport type ComplexMapConstructor<K> = new <V>(entries?: readonly (readonly [K, V])[] | null) => ComplexMap<K, V>;\n\n/**\n * Create a subclass of ComplexMap with predefined key projection function.\n */\nexport const makeMap = <K>(keyProjection: PrimitiveProjection<K>): ComplexMapConstructor<K> =>\n class BoundComplexMap<V> extends ComplexMap<K, V> {\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(keyProjection, entries);\n }\n };\n", "/**\n * Wraps a function provider in a function that will defer the execution of the provided function.\n *\n * Example:\n *\n * ```typescript\n * const fn = deferFunction(() => impl);\n *\n * // Impl can be defined after the usage.\n * const impl = () => {\n * console.log('Hello World!')\n * }\n * ```\n */\n//\n// Copyright 2022 DXOS.org\n//\n\nexport const deferFunction =\n <T extends (...args: any[]) => any>(fnProvider: () => T) =>\n (...args: Parameters<T>): ReturnType<T> =>\n fnProvider()(...args);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Inspired by https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.entry\n */\nexport const entry = <K, V>(map: Map<K, V>, key: K): MapEntry<K, V, undefined> => new MapEntry(map, key);\n\nexport class MapEntry<K, V, U> {\n /**\n * @internal\n */\n // prettier-ignore\n constructor(\n private readonly _map: Map<K, V>,\n private readonly _key: K,\n ) {}\n\n get key(): K {\n return this._key;\n }\n\n get value(): V | U {\n return this._map.get(this._key) as V | U;\n }\n\n orInsert(value: V): MapEntry<K, V, never> {\n if (!this._map.has(this._key)) {\n this._map.set(this._key, value);\n }\n return this as any;\n }\n\n deep<K1, V1>(this: MapEntry<K, Map<K1, V1>, Map<K1, V1>>, key: K1): MapEntry<K1, V1, undefined> {\n return entry(this.value, key);\n }\n}\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { PublicKey, type PublicKeyLike } from '@dxos/keys';\n\n// From https://github.com/SEBv15/humanhash/blob/166c1a6f70d854fe6767cdd76be1237112d4eaf1/index.js\n\nconst DEFAULT_WORDLIST = [\n 'ack',\n 'alabama',\n 'alanine',\n 'alaska',\n 'alpha',\n 'angel',\n 'apart',\n 'april',\n 'arizona',\n 'arkansas',\n 'artist',\n 'asparagus',\n 'aspen',\n 'august',\n 'autumn',\n 'avocado',\n 'bacon',\n 'bakerloo',\n 'batman',\n 'beer',\n 'berlin',\n 'beryllium',\n 'black',\n 'blossom',\n 'blue',\n 'bluebird',\n 'bravo',\n 'bulldog',\n 'burger',\n 'butter',\n 'california',\n 'carbon',\n 'cardinal',\n 'carolina',\n 'carpet',\n 'cat',\n 'ceiling',\n 'charlie',\n 'chicken',\n 'coffee',\n 'cola',\n 'cold',\n 'colorado',\n 'comet',\n 'connecticut',\n 'crazy',\n 'cup',\n 'dakota',\n 'december',\n 'delaware',\n 'delta',\n 'diet',\n 'don',\n 'double',\n 'early',\n 'earth',\n 'east',\n 'echo',\n 'edward',\n 'eight',\n 'eighteen',\n 'eleven',\n 'emma',\n 'enemy',\n 'equal',\n 'failed',\n 'fanta',\n 'fifteen',\n 'fillet',\n 'finch',\n 'fish',\n 'five',\n 'fix',\n 'floor',\n 'florida',\n 'football',\n 'four',\n 'fourteen',\n 'foxtrot',\n 'freddie',\n 'friend',\n 'fruit',\n 'gee',\n 'georgia',\n 'glucose',\n 'golf',\n 'green',\n 'grey',\n 'hamper',\n 'happy',\n 'harry',\n 'hawaii',\n 'helium',\n 'high',\n 'hot',\n 'hotel',\n 'hydrogen',\n 'idaho',\n 'illinois',\n 'india',\n 'indigo',\n 'ink',\n 'iowa',\n 'island',\n 'item',\n 'jersey',\n 'jig',\n 'johnny',\n 'juliet',\n 'july',\n 'jupiter',\n 'kansas',\n 'kentucky',\n 'kilo',\n 'king',\n 'kitten',\n 'lactose',\n 'lake',\n 'lamp',\n 'lemon',\n 'leopard',\n 'lima',\n 'lion',\n 'lithium',\n 'london',\n 'louisiana',\n 'low',\n 'magazine',\n 'magnesium',\n 'maine',\n 'mango',\n 'march',\n 'mars',\n 'maryland',\n 'massachusetts',\n 'may',\n 'mexico',\n 'michigan',\n 'mike',\n 'minnesota',\n 'mirror',\n 'mississippi',\n 'missouri',\n 'mobile',\n 'mockingbird',\n 'monkey',\n 'montana',\n 'moon',\n 'mountain',\n 'muppet',\n 'music',\n 'nebraska',\n 'neptune',\n 'network',\n 'nevada',\n 'nine',\n 'nineteen',\n 'nitrogen',\n 'north',\n 'november',\n 'nuts',\n 'october',\n 'ohio',\n 'oklahoma',\n 'one',\n 'orange',\n 'oranges',\n 'oregon',\n 'oscar',\n 'oven',\n 'oxygen',\n 'papa',\n 'paris',\n 'pasta',\n 'pennsylvania',\n 'pip',\n 'pizza',\n 'pluto',\n 'potato',\n 'princess',\n 'purple',\n 'quebec',\n 'queen',\n 'quiet',\n 'red',\n 'river',\n 'robert',\n 'robin',\n 'romeo',\n 'rugby',\n 'sad',\n 'salami',\n 'saturn',\n 'september',\n 'seven',\n 'seventeen',\n 'shade',\n 'sierra',\n 'single',\n 'sink',\n 'six',\n 'sixteen',\n 'skylark',\n 'snake',\n 'social',\n 'sodium',\n 'solar',\n 'south',\n 'spaghetti',\n 'speaker',\n 'spring',\n 'stairway',\n 'steak',\n 'stream',\n 'summer',\n 'sweet',\n 'table',\n 'tango',\n 'ten',\n 'tennessee',\n 'tennis',\n 'texas',\n 'thirteen',\n 'three',\n 'timing',\n 'triple',\n 'twelve',\n 'twenty',\n 'two',\n 'uncle',\n 'undress',\n 'uniform',\n 'uranus',\n 'utah',\n 'vegan',\n 'venus',\n 'vermont',\n 'victor',\n 'video',\n 'violet',\n 'virginia',\n 'washington',\n 'west',\n 'whiskey',\n 'white',\n 'william',\n 'winner',\n 'winter',\n 'wisconsin',\n 'wolfram',\n 'wyoming',\n 'xray',\n 'yankee',\n 'yellow',\n 'zebra',\n 'zulu',\n];\n\n/**\n * humanhash: Human-readable representations of digests.\n */\nexport class HumanHasher {\n /**\n * Transforms hex digests to human-readable strings.\n *\n * The format of these strings will look something like:\n * `victor-bacon-zulu-lima`. The output is obtained by compressing the input\n * digest to a fixed number of bytes, then mapping those bytes to one of 256\n * words. A default wordlist is provided, but you can override this if you\n * prefer.\n * As long as you use the same wordlist, the output will be consistent (i.e.\n * the same digest will always render the same representation).\n *\n * @param wordlist A list of exactly 256 words to choose from\n */\n constructor(private readonly wordlist = DEFAULT_WORDLIST) {\n if (wordlist.length !== 256) {\n throw new Error('Wordlist must have exactly 256 items');\n }\n this.wordlist = wordlist;\n }\n\n /**\n * Humanize a given hexadecimal digest.\n *\n * Change the number of words output by specifying `words`. Change the\n * word separator with `separator`.\n *\n * @param hexdigest A string of hexadecimal characters to humanize\n * @param words How many words to output (more = safer)\n * @param separator The string used to seperate the words\n */\n humanize(hexdigest: string, words = 4, separator = '-') {\n const pairs = hexdigest.match(/(..?)/g);\n if (!pairs) {\n throw new Error('');\n }\n\n const bytes = pairs.map((x) => parseInt(x, 16));\n const compressed = this._compress(bytes, words);\n\n return compressed.map((x) => this.wordlist[x]).join(separator);\n }\n\n /**\n * Compress a list of byte values to a fixed target length.\n *\n * @param bytes A list of bytes (numbers from 0-254)\n * @param target The number of bytes to return / compress to\n */\n _compress(bytes: number[], target: number) {\n const length = bytes.length;\n if (target > length) {\n throw new Error('Fewer input bytes than requested output');\n }\n\n // Calculate the segment size (divide and round down)\n const segSize = (length / target) >> 0;\n\n // Split 'bytes' array into 'target' number of segments.\n const segments = [];\n for (let i = 0; i < segSize * target; i += segSize) {\n segments.push(bytes.slice(i, i + segSize));\n }\n\n // Catch any left-over bytes in the last segment.\n segments[segments.length - 1] = segments[segments.length - 1].concat(bytes.slice(target * segSize));\n\n const checksums = segments.map((x) => x.reduce((acc, curr) => acc ^ curr));\n return checksums;\n }\n}\n\nconst hasher = new HumanHasher();\n\nexport const humanize = (value: PublicKeyLike): string => {\n if (value instanceof Buffer || value instanceof Uint8Array || value instanceof ArrayBuffer) {\n value = PublicKey.stringify(value);\n } else if (value instanceof PublicKey) {\n value = value.toHex();\n }\n\n return hasher.humanize(value);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\n/**\n * Runs the callback in an exponentially increasing interval.\n * @returns Callback to clear the interval.\n */\nexport const exponentialBackoffInterval = (cb: () => void, initialInterval: number): (() => void) => {\n let interval = initialInterval;\n const repeat = () => {\n cb();\n interval *= 2;\n timeoutId = setTimeout(repeat, interval);\n };\n\n let timeoutId = setTimeout(repeat, interval);\n return () => clearTimeout(timeoutId);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { humanize } from './human-hash';\nimport { arrayToBuffer } from './uint8array';\n\nconst MAX_DEPTH = 5;\n\n/**\n * JSON.stringify replacer.\n */\nexport function jsonReplacer(this: any, key: string, value: any): any {\n // TODO(burdon): Why is this represented as `{ type: 'Buffer', data }`.\n if (value !== null && typeof value === 'object' && typeof value[inspect.custom] === 'function') {\n return value[inspect.custom]();\n }\n\n if (value !== null && typeof value === 'object' && value.type === 'Buffer' && Array.isArray(value.data)) {\n if (value.data.length === 32) {\n const key = Buffer.from(value.data);\n return `[${humanize(key)}]:[${PublicKey.stringify(key)}]`;\n } else {\n return Buffer.from(value.data).toString('hex');\n }\n }\n\n // TODO(burdon): Option.\n // code if (Array.isArray(value)) {\n // code return value.length;\n // code } else {\n return value;\n // code }\n}\n\n/**\n * Recursively converts an object into a JSON-compatible object.\n */\nexport const jsonify = (value: any, depth = 0, visitedObjects = new WeakSet<any>()): any => {\n if (depth > MAX_DEPTH) {\n return null;\n } else if (typeof value === 'function') {\n return null;\n } else if (typeof value === 'object' && value !== null) {\n if (visitedObjects.has(value)) {\n return null;\n }\n visitedObjects.add(value);\n\n try {\n if (value instanceof Uint8Array) {\n return arrayToBuffer(value).toString('hex');\n } else if (Array.isArray(value)) {\n return value.map((x) => jsonify(x, depth + 1, visitedObjects));\n } else if (typeof value.toJSON === 'function') {\n return value.toJSON();\n } else {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = jsonify(value[key], depth + 1, visitedObjects);\n }\n return res;\n }\n } finally {\n visitedObjects.delete(value);\n }\n } else {\n return value;\n }\n};\n\nexport type JsonKeyOptions = {\n truncate?: boolean;\n humanize?: boolean;\n};\n\nexport const jsonKeyReplacer =\n (options: JsonKeyOptions = {}) =>\n (key: string, value: any) => {\n if (typeof value === 'string') {\n const key = PublicKey.fromHex(value);\n if (key.toHex() === value) {\n // TODO(burdon): Remove humanize.\n return options.humanize ? humanize(key) : options.truncate ? key.truncate() : key.toHex();\n }\n }\n\n return value;\n };\n", "//\n// Copyright 2021 DXOS.org\n//\n\nexport const arraysEqual = (a: Uint8Array, b: Uint8Array): boolean => {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Non-copying conversion of Uint8Array to Buffer.\n * The resulting buffer will share the same allocated memory as the Uint8Array.\n */\nexport const arrayToBuffer = (array: Uint8Array): Buffer => {\n return Buffer.from(array.buffer, array.byteOffset, array.byteLength);\n};\n\n/**\n * Non-copying conversion of Buffer to Uint8Array.\n * The resulting Uint8Array will share the same allocated memory as the Buffer.\n */\nexport const bufferToArray = (buffer: Buffer): Uint8Array => {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n};\n\nexport const stringToArray = (string: string): Uint8Array => bufferToArray(Buffer.from(string, 'hex'));\n\nexport const arrayToString = (array: Uint8Array): string => arrayToBuffer(array).toString('hex');\n", "//\n// Copyright 2020 DXOS.org\n//\n\n/**\n * Get or set map value.\n */\nexport const defaultMap = <K, V>(map: Map<K, V>, key: K, def: V | (() => V)) => {\n let value = map.get(key);\n if (value === undefined) {\n value = typeof def === 'function' ? (def as () => V)() : def;\n map.set(key, value);\n }\n\n return value;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport type IdOrder = string[];\n\ntype ObjectOrderAccumulator<T> = { objects: T[]; ids: Set<string> };\n\n/**\n * Uses an array of string id’s to order a map of objects, returning an array of those objects. Objects not listed by\n * the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferObjectOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): T[] => {\n const orderedObjects = order.reduce(\n (acc, id) => {\n if (id in objectMap) {\n acc.objects.push(objectMap[id]);\n acc.ids.add(id);\n }\n return acc;\n },\n { objects: [], ids: new Set() } as ObjectOrderAccumulator<T>,\n );\n const { objects } = Object.keys(objectMap).reduce((acc, id) => {\n if (!acc.ids.has(id)) {\n acc.objects.push(objectMap[id]);\n }\n return acc;\n }, orderedObjects);\n return objects;\n};\n\n/**\n * Uses an array of string id’s to order a map of objects, returning a new map with the keys in the prescribed order.\n * Objects not listed by the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferRecordOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): Record<string, T> => {\n return Object.assign(\n order\n .filter((id) => id in objectMap)\n .reduce((acc: Record<string, null>, id) => {\n acc[id] = null;\n return acc;\n }, {}),\n objectMap,\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\n// NOTE: `!=` is required.\nexport const isNode = () => typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n/* eslint-disable */\n\n// From https://stackoverflow.com/a/11381730/2804332.\nexport const mobileAndTabletCheck = () => {\n let check = false;\n ((a) => { 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))) { check = true; } })(navigator.userAgent || navigator.vendor || (window as any).opera);\n return check;\n};\n\n/* eslint-enable */\n\n// From https://stackoverflow.com/a/9039885\nexport const iosCheck = () => {\n return (\n ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n );\n};\n\n// From https://stackoverflow.com/a/23522755/2804332\nexport const safariCheck = () =>\n typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Retrieve the host platform in a best-effort way with normalized output.\n */\n// From https://flaming.codes/posts/how-to-determine-os-in-browser.\nexport const getHostPlatform = () => {\n if (!('navigator' in window)) {\n return 'unknown';\n }\n\n // Use the modern 'web hints' provied by\n // 'userAgentData' if available, else use\n // the deprecated 'platform' as fallback.\n const platform = ((navigator as any).userAgentData?.platform || navigator.platform)?.toLowerCase();\n if (platform.startsWith('win')) {\n return 'windows';\n } else if (platform.startsWith('mac')) {\n return 'macos';\n } else if (platform.startsWith('ipad') || platform.startsWith('iphone') || platform.startsWith('ipod')) {\n return 'ios';\n } else if (platform.startsWith('linux')) {\n return 'linux';\n } else {\n return 'unknown';\n }\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\n// TODO(burdon): Random class utility.\n// TODO(burdon): Make object { min, max }.\nexport const randomInt = (max: number, min: number) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport const range = (n: number) => Array.from(Array(n).keys());\n\nexport const rangeFromTo = (from: number, to: number) => range(to - from).map((i) => i + from);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Factor out.\n// TODO(burdon): Consider mathjs for variance, standard deviations, etc.\n// https://www.npmjs.com/package/mathjs\n\nimport { defaultMap } from './map';\n\nexport type Accessor<T, V> = string | ((value: T) => V);\n\nexport const accessBy = <T, V>(value: T, accessor: Accessor<T, V>) =>\n typeof accessor === 'function' ? accessor(value) : (value as Record<any, any>)[accessor];\n\nexport const median = (values: number[]) => {\n const mid = Math.floor(values.length / 2);\n if (values.length % 2 === 1) {\n return values[mid];\n } else {\n return (values[mid - 1] + values[mid]) / 2;\n }\n};\n\n// TODO(burdon): Value Proto.\nexport type NumericalValues = {\n min?: number;\n max?: number;\n mean?: number;\n median?: number;\n total: number;\n count: number;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const numericalValues = <T>(values: T[], accessor: Accessor<T, number>) => {\n const result: NumericalValues = { total: 0, count: 0 };\n\n const sorted: number[] = values\n .map((value) => {\n const v = accessBy(value, accessor);\n if (v === undefined || isNaN(v)) {\n return undefined;\n }\n\n result.total += v;\n if (result.min === undefined || v < result.min) {\n result.min = v;\n }\n if (result.max === undefined || v > result.max) {\n result.max = v;\n }\n\n return v;\n })\n .filter((value) => value !== undefined)\n .sort((a, b) => a! - b!) as number[];\n\n if (sorted.length) {\n Object.assign(result, {\n count: sorted.length,\n mean: result.total / sorted.length,\n median: median(sorted),\n });\n }\n\n return result;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const reduceSet = <T, V>(values: T[], accessor: Accessor<T, V>): Set<V> => {\n return values.reduce((values, value) => {\n const v = accessBy(value, accessor);\n values.add(v);\n return values;\n }, new Set<V>());\n};\n\n/**\n * Returns an object containing values grouped by the given key accessor.\n */\nexport const reduceGroupBy = <T, K>(values: T[], accessor: Accessor<T, K>): Map<K, T[]> => {\n return values.reduce((values, value) => {\n const key = accessBy(value, accessor);\n defaultMap(values, key, []).push(value);\n return values;\n }, new Map<K, T[]>());\n};\n\n/**\n * Generic composable reducer interface.\n */\nexport interface Reducer<T, S> {\n /**\n * Get initial state.\n */\n initialState(): S;\n\n /**\n * Apply event to state.\n */\n reduce(state: S, event: T): S;\n}\n\n/**\n * Applies the reducer to the array of values.\n */\nexport const reduceSeries = <T, S>(reducer: Reducer<T, S>, events: T[]): S => {\n const state = reducer.initialState();\n for (const event of events) {\n reducer.reduce(state, event);\n }\n\n return state;\n};\n\n/**\n * Reducer to group values.\n */\nexport const createGroupReducer = <T, S>(\n groupBy: (value: T) => string,\n sub: Reducer<T, S>,\n): Reducer<T, Record<string, S>> => ({\n initialState: () => ({}),\n reduce: (state: Record<string, S>, event: T) => {\n const key = groupBy(event);\n state[key] = sub.reduce(state[key] ?? sub.initialState(), event);\n return state;\n },\n});\n\nexport type TimeRecord = { timestamp: Date | number | string };\nexport type TimeBucket = { start: number; period: number; count: number };\n\nexport const getDate = (value: Date | number | string): Date => (value instanceof Date ? value : new Date(value));\n\n/**\n * Reducer to group by time period.\n */\nexport const createBucketReducer = <T extends TimeRecord>(period: number): Reducer<T, TimeBucket[]> => ({\n initialState: () => [],\n reduce: (series: TimeBucket[], event: T) => {\n const timestamp = getDate(event.timestamp);\n let bucket: TimeBucket = series[series.length - 1];\n if (!bucket || bucket.start + period < timestamp.getTime()) {\n bucket = { start: timestamp.getTime(), period, count: 0 };\n series.push(bucket);\n }\n\n bucket.count++;\n return series;\n },\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nconst instanceTag = Symbol('instanceTag');\n\n/**\n * Makes instanceof work correctly even if the class definition was duplicated (e.g. when bundling).\n * The comparison is done by comparing the tag passed to this function.\n *\n * Example:\n *\n * ```typescript\n * @safeInstanceof('Tagged')\n * class Tagged {}\n * ```\n */\nexport const safeInstanceof =\n (tag: string): ClassDecorator =>\n (target: any) => {\n target.prototype[instanceTag] = tag;\n\n Object.defineProperty(target.prototype, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n\n Object.defineProperty(target, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const safeParseJson: {\n <T extends object>(data: string | undefined | null, defaultValue: T): T;\n <T extends object>(data: string | undefined | null): T | undefined;\n} = <T extends object>(data: string | undefined | null, defaultValue?: T) => {\n if (data) {\n try {\n return JSON.parse(data);\n } catch (err) {}\n }\n return defaultValue;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Unique.\n// TODO(burdon): Options for undefined to end.\n\ntype Compare<T> = (a: T, b: T) => number;\n\nexport const compareScalar =\n (inc = true) =>\n (a: any, b: any) =>\n (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n\nexport const compareString =\n (inc = true, caseInsensitive = true) =>\n (a: string, b: string) => {\n if (caseInsensitive) {\n a = a?.toLowerCase();\n b = b?.toLowerCase();\n }\n return (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n };\n\nexport const compareObject =\n <T extends Record<string, any>>(prop: string, sorter: Compare<any>, inc = true): Compare<any> =>\n (a: T, b: T) =>\n (inc ? 1 : -1) * sorter(a[prop], b[prop]);\n\nexport const compareMulti =\n <T extends Record<string, any>>(sorters: Compare<T>[]) =>\n (a: T, b: T) => {\n const sort = (i = 0): number => {\n const s = sorters[i](a, b);\n if (s === 0 && i < sorters.length - 1) {\n return sort(i + 1);\n } else {\n return s;\n }\n };\n\n return sort();\n };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\n/**\n * Tracer events form a graph.\n */\nexport type Event = {\n id: string;\n timestamp: number; // ms.\n duration?: number; // ms (float).\n value?: any;\n};\n\n/**\n * Event sink.\n */\n// TODO(burdon): Reconcile with log.trace.\nexport class Tracer {\n private readonly _events = new Map<string, Event[]>();\n\n private _recording = false;\n\n // TODO(burdon): Start/stop methods for recording data? By id?\n // Alternatively, enable subscriptions to track/compute series.\n\n // TODO(burdon): Hierarchical traces?\n\n get recording() {\n return this._recording;\n }\n\n keys() {\n return Array.from(this._events.keys());\n }\n\n get(id: string, filter?: Record<string, any>): Event[] | undefined {\n const events = this._events.get(id);\n if (filter) {\n return events?.filter((event) => Object.entries(filter).every(([key, value]) => event?.value[key] === value));\n }\n\n return events;\n }\n\n clear() {\n this._events.clear();\n }\n\n start() {\n this._recording = true;\n return this;\n }\n\n stop() {\n this._recording = false;\n return this;\n }\n\n emit(id: string, value?: any) {\n this._post(this._createEvent(id, value));\n }\n\n mark(id: string, value?: any): { start: number; end: () => void } {\n const event = this._createEvent(id, value);\n const start = performance.now();\n return {\n start,\n end: () => {\n event.duration = performance.now() - start;\n this._post(event);\n },\n };\n }\n\n private _createEvent(id: string, value?: any): Event {\n const event: Event = { id, timestamp: Date.now() };\n if (value !== undefined) {\n event.value = value;\n }\n\n return event;\n }\n\n private _post(event: Event) {\n if (this._recording) {\n defaultMap(this._events, event.id, []).push(event);\n }\n }\n}\n\n// TODO(burdon): Factor out (move to @dxos/log?)\n// TODO(burdon): Global singleton (e.g., `trace()`) or part of client services?\nexport const tracer = new Tracer();\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport type AsyncCallback<T> = (param: T) => Promise<void>;\n\nexport type Provider<T> = () => T;\n\nexport type MaybePromise<T> = T | Promise<T>;\n\n/**\n * All types that evaluate to false when cast to a boolean.\n */\nexport type Falsy = false | 0 | '' | null | undefined;\n\n/**\n * A function returning a value or a value itself.\n */\nexport type MaybeFunction<T> = T | (() => T);\n\n/**\n * Use with filter chaining instead of filter(Boolean) to preserve type.\n * NOTE: To filter by type:\n * items.filter((item: any): item is RangeSet<Decoration> => item instanceof RangeSet)\n */\n// TODO(burdon): Reconcile names.\nexport const isNotFalsy = <T>(value: T): value is Exclude<T, Falsy> => !!value;\nexport const nonNullable = <T>(value: T): value is NonNullable<T> => value !== null && value !== undefined;\nexport const isNotNullOrUndefined = <T>(value: T): value is Exclude<T, null | undefined> => value != null;\nexport const boolGuard = <T>(value: T | null | undefined): value is T => Boolean(value);\n\n/**\n * Get value from a provider.\n */\nexport const getAsyncValue = async <T>(value: MaybeFunction<MaybePromise<T>>): Promise<T> => {\n if (typeof value === 'function') {\n return (value as Function)();\n } else {\n return value;\n }\n};\n\nexport type MakeOptional<Type, Key extends keyof Type> = Omit<Type, Key> & Partial<Pick<Type, Key>>;\n\n/**\n * Remove keys with undefined values.\n */\nexport const stripUndefinedValues = <T extends { [index: string]: any }>(obj: T): T => {\n if (typeof obj === 'object') {\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n if (value === undefined) {\n delete obj[key];\n } else if (value !== null && typeof value === 'object') {\n stripUndefinedValues(value); // TODO(burdon): Test recursion.\n }\n });\n }\n\n return obj;\n};\n\n/**\n * Swap position of element within array.\n */\nexport const arrayMove = <T>(array: T[], from: number, to: number): Array<T> => {\n array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);\n return array;\n};\n\nexport const safeParseInt = (value: string | undefined, defaultValue?: number) => {\n try {\n const n = parseInt(value ?? '');\n return isNaN(n) ? defaultValue : n;\n } catch (err) {\n return defaultValue;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\nconst symbol = Symbol.for('dxos.instance-contexts');\n\nconst instanceContexts = ((globalThis as any)[symbol] ??= new WeakMap<\n any,\n {\n nextId: number;\n instanceIds: WeakMap<any, number>;\n }\n>());\n\n/**\n * Returns a unique instance id for a given object.\n * Ids are generated as incrementing numbers.\n * Ids are only unique within the scope of a given prototype.\n * Instances of different classes may have the same id.\n */\nexport const getPrototypeSpecificInstanceId = (instance: any): number => {\n const prototype = Object.getPrototypeOf(instance);\n const instanceCtx = defaultMap(instanceContexts as any, prototype, () => ({\n nextId: 0,\n instanceIds: new WeakMap(),\n }));\n\n let id = instanceCtx.instanceIds.get(instance);\n if (id === undefined) {\n id = instanceCtx.nextId++;\n instanceCtx.instanceIds.set(instance, id);\n }\n\n return id;\n};\n\nexport const getDebugName = (instance: any): string => {\n if (instance === null) {\n return 'null';\n }\n\n const prototype = Object.getPrototypeOf(instance);\n return `${prototype.constructor.name}#${getPrototypeSpecificInstanceId(instance)}`;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const sum = (values: number[]) => values.reduce((a, b) => a + b, 0);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const forEachAsync = <T>(items: T[], fn: (item: T, idx: number) => Promise<void>) => Promise.all(items.map(fn));\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Weak dictionary. It is a map that holds weak references to its values and allows garbage collection of values and keys.\n */\nexport class WeakDictionary<K, V extends object> implements Map<K, V> {\n private readonly _internal = new Map<K, WeakRef<V>>();\n private readonly _finalization = new FinalizationRegistry((cleanUpCallback: () => void) => {\n cleanUpCallback();\n });\n\n constructor(entries?: [K, V][]) {\n this._internal = new Map(entries?.map(([key, value]) => [key, new WeakRef(value)]));\n entries?.forEach(([key, value]) => this._register(key, value));\n }\n\n *entries(): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n keys(): IterableIterator<K> {\n return this._internal.keys();\n }\n\n *values(): IterableIterator<V> {\n for (const value of this._internal.values()) {\n const deref = value.deref();\n if (!deref) {\n continue;\n }\n yield deref;\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n get [Symbol.toStringTag](): string {\n return 'WeakDictionary';\n }\n\n get size(): number {\n return this._internal.size;\n }\n\n get(key: K): V | undefined {\n return this._internal.get(key)?.deref();\n }\n\n set(key: K, value: V): this {\n this._internal.set(key, new WeakRef(value));\n this._register(key, value);\n return this;\n }\n\n has(key: K): boolean {\n return this._internal.has(key) && this._internal.get(key)!.deref() !== undefined;\n }\n\n delete(key: K): boolean {\n const value = this._internal.get(key)?.deref();\n if (value) {\n this._unregister(value);\n }\n return this._internal.delete(key);\n }\n\n clear(): void {\n this._internal.forEach((value) => {\n const v = value.deref();\n if (v) {\n this._unregister(v);\n }\n });\n\n this._internal.clear();\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._internal.forEach((value, key) => {\n const v = value.deref();\n if (v) {\n callbackfn(v, key, this);\n }\n });\n }\n\n private _register(key: K, value: V) {\n this._finalization.register(\n value,\n () => {\n this._internal.delete(key);\n },\n value,\n );\n }\n\n private _unregister(value: V) {\n this._finalization.unregister(value);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const mapValues = <T, U>(obj: Record<string, T>, fn: (value: T, key: string) => U): Record<string, U> => {\n const result: Record<string, U> = {};\n Object.keys(obj).forEach((key) => {\n result[key] = fn(obj[key], key);\n });\n return result;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.dispose ??= Symbol('Symbol.dispose');\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.asyncDispose ??= Symbol('Symbol.asyncDispose');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport './explicit-resource-management-polyfill';\n\n/**\n * Run function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * using _ = defer(() => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const defer = (fn: () => void): Disposable => new DeferGuard(fn);\n\nclass DeferGuard {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => void) {}\n\n [Symbol.dispose]() {\n const result = this._fn();\n if ((result as any) instanceof Promise) {\n throw new Error('Async functions in defer are not supported. Use deferAsync instead.');\n }\n }\n}\n\n/**\n * Run async function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * await using _ = deferAsync(async () => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const deferAsync = (fn: () => Promise<void>): AsyncDisposable => new DeferAsyncGuard(fn);\n\nclass DeferAsyncGuard implements AsyncDisposable {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => Promise<void>) {}\n\n async [Symbol.asyncDispose]() {\n await this._fn();\n }\n}\n"],
5
+ "mappings": "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ASF,KAAKC,GAAAA;AAE7F,IAAMC,WAAN,MAAMA;;;;;EAKXC,YACmBC,MACAC,MACjB;SAFiBD,OAAAA;SACAC,OAAAA;EAChB;EAEH,IAAIJ,MAAS;AACX,WAAO,KAAKI;EACd;EAEA,IAAIC,QAAe;AACjB,WAAO,KAAKF,KAAKG,IAAI,KAAKF,IAAI;EAChC;EAEAG,SAASF,OAAiC;AACxC,QAAI,CAAC,KAAKF,KAAKK,IAAI,KAAKJ,IAAI,GAAG;AAC7B,WAAKD,KAAKM,IAAI,KAAKL,MAAMC,KAAAA;IAC3B;AACA,WAAO;EACT;EAEAK,KAA0DV,KAAsC;AAC9F,WAAOF,MAAM,KAAKO,OAAOL,GAAAA;EAC3B;AACF;;;ACjCA,SAASW,iBAAqC;AAI9C,IAAMC,mBAAmB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMK,IAAMC,cAAN,MAAMA;;;;;;;;;;;;;;EAcXC,YAA6BC,WAAWH,kBAAkB;SAA7BG,WAAAA;AAC3B,QAAIA,SAASC,WAAW,KAAK;AAC3B,YAAM,IAAIC,MAAM,sCAAA;IAClB;AACA,SAAKF,WAAWA;EAClB;;;;;;;;;;;EAYAG,SAASC,WAAmBC,QAAQ,GAAGC,YAAY,KAAK;AACtD,UAAMC,QAAQH,UAAUI,MAAM,QAAA;AAC9B,QAAI,CAACD,OAAO;AACV,YAAM,IAAIL,MAAM,EAAA;IAClB;AAEA,UAAMO,QAAQF,MAAMG,IAAI,CAACC,MAAMC,SAASD,GAAG,EAAA,CAAA;AAC3C,UAAME,aAAa,KAAKC,UAAUL,OAAOJ,KAAAA;AAEzC,WAAOQ,WAAWH,IAAI,CAACC,MAAM,KAAKX,SAASW,CAAAA,CAAE,EAAEI,KAAKT,SAAAA;EACtD;;;;;;;EAQAQ,UAAUL,OAAiBO,QAAgB;AACzC,UAAMf,SAASQ,MAAMR;AACrB,QAAIe,SAASf,QAAQ;AACnB,YAAM,IAAIC,MAAM,yCAAA;IAClB;AAGA,UAAMe,UAAWhB,SAASe,UAAW;AAGrC,UAAME,WAAW,CAAA;AACjB,aAASC,IAAI,GAAGA,IAAIF,UAAUD,QAAQG,KAA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",
6
+ "names": ["invariant", "assignDeep", "doc", "path", "value", "length", "parent", "key", "slice", "at", "getDeep", "util", "createBinder", "obj", "fn", "bind", "async", "util", "promisify", "invariant", "BitField", "get", "data", "idx", "bit", "set", "value", "count", "begin", "end", "i", "invert", "result", "Uint8Array", "length", "and", "first", "second", "findIndexes", "opts", "start", "push", "ones", "res", "Math", "ceil", "fill", "bitInLastByte", "zeros", "invariant", "Callback", "call", "args", "_callback", "callIfSet", "set", "callback", "isSet", "createSetDispatch", "handlers", "Proxy", "get", "target", "prop", "forEach", "handler", "method", "apply", "inspect", "inspectObject", "raise", "MAX_SERIALIZATION_LENGTH", "ComplexSet", "constructor", "_projection", "values", "_values", "Map", "value", "add", "toString", "inspectObject", "toJSON", "size", "Array", "from", "inspect", "custom", "set", "clear", "delete", "forEach", "callbackfn", "thisArg", "bind", "has", "Symbol", "iterator", "entries", "keys", "toStringTag", "makeSet", "projection", "BoundComplexSet", "ComplexMap", "_keyProjection", "_keys", "key", "keyDeleted", "valueDeleted", "primitive", "get", "raise", "Error", "makeMap", "keyProjection", "BoundComplexMap", "deferFunction", "fnProvider", "args", "entry", "map", "key", "MapEntry", "constructor", "_map", "_key", "value", "get", "orInsert", "has", "set", "deep", "PublicKey", "DEFAULT_WORDLIST", "HumanHasher", "constructor", "wordlist", "length", "Error", "humanize", "hexdigest", "words", "separator", "pairs", "match", "bytes", "map", "x", "parseInt", "compressed", "_compress", "join", "target", "segSize", "segments", "i", "push", "slice", "concat", "checksums", "reduce", "acc", "curr", "hasher", "value", "Buffer", "Uint8Array", "ArrayBuffer", "PublicKey", "stringify", "toHex", "exponentialBackoffInterval", "cb", "initialInterval", "interval", "repeat", "timeoutId", "setTimeout", "clearTimeout", "inspect", "PublicKey", "arraysEqual", "a", "b", "length", "i", "arrayToBuffer", "array", "Buffer", "from", "buffer", "byteOffset", "byteLength", "bufferToArray", "Uint8Array", "stringToArray", "string", "arrayToString", "toString", "MAX_DEPTH", "jsonReplacer", "key", "value", "inspect", "custom", "type", "Array", "isArray", "data", "length", "Buffer", "from", "humanize", "PublicKey", "stringify", "toString", "jsonify", "depth", "visitedObjects", "WeakSet", "has", "add", "Uint8Array", "arrayToBuffer", "map", "x", "toJSON", "res", "Object", "keys", "delete", "jsonKeyReplacer", "options", "fromHex", "toHex", "truncate", "defaultMap", "map", "key", "def", "value", "get", "undefined", "set", "inferObjectOrder", "objectMap", "order", "orderedObjects", "reduce", "acc", "id", "objects", "push", "ids", "add", "Set", "Object", "keys", "has", "inferRecordOrder", "assign", "filter", "isNode", "process", "versions", "node", "mobileAndTabletCheck", "check", "a", "test", "substr", "navigator", "userAgent", "vendor", "window", "opera", "iosCheck", "includes", "platform", "document", "safariCheck", "getHostPlatform", "userAgentData", "toLowerCase", "startsWith", "randomInt", "max", "min", "Math", "ceil", "floor", "random", "range", "n", "Array", "from", "keys", "rangeFromTo", "to", "map", "i", "accessBy", "value", "accessor", "median", "values", "mid", "Math", "floor", "length", "numericalValues", "result", "total", "count", "sorted", "map", "v", "undefined", "isNaN", "min", "max", "filter", "sort", "a", "b", "Object", "assign", "mean", "reduceSet", "reduce", "add", "Set", "reduceGroupBy", "key", "defaultMap", "push", "Map", "reduceSeries", "reducer", "events", "state", "initialState", "event", "createGroupReducer", "groupBy", "sub", "getDate", "Date", "createBucketReducer", "period", "series", "timestamp", "bucket", "start", "getTime", "instanceTag", "Symbol", "safeInstanceof", "tag", "target", "prototype", "Object", "defineProperty", "hasInstance", "value", "instance", "safeParseJson", "data", "defaultValue", "JSON", "parse", "err", "compareScalar", "inc", "a", "b", "compareString", "caseInsensitive", "toLowerCase", "compareObject", "prop", "sorter", "compareMulti", "sorters", "sort", "i", "s", "length", "Tracer", "_events", "Map", "_recording", "recording", "keys", "Array", "from", "get", "id", "filter", "events", "event", "Object", "entries", "every", "key", "value", "clear", "start", "stop", "emit", "_post", "_createEvent", "mark", "performance", "now", "end", "duration", "timestamp", "Date", "undefined", "defaultMap", "push", "tracer", "isNotFalsy", "value", "nonNullable", "undefined", "isNotNullOrUndefined", "boolGuard", "Boolean", "getAsyncValue", "stripUndefinedValues", "obj", "Object", "keys", "forEach", "key", "arrayMove", "array", "from", "to", "splice", "length", "safeParseInt", "defaultValue", "n", "parseInt", "isNaN", "err", "symbol", "Symbol", "for", "instanceContexts", "globalThis", "WeakMap", "getPrototypeSpecificInstanceId", "instance", "prototype", "Object", "getPrototypeOf", "instanceCtx", "defaultMap", "nextId", "instanceIds", "id", "get", "undefined", "set", "getDebugName", "constructor", "name", "sum", "values", "reduce", "a", "b", "forEachAsync", "items", "fn", "Promise", "all", "map", "WeakDictionary", "constructor", "entries", "_internal", "Map", "_finalization", "FinalizationRegistry", "cleanUpCallback", "map", "key", "value", "WeakRef", "forEach", "_register", "deref", "keys", "values", "Symbol", "iterator", "toStringTag", "size", "get", "set", "has", "undefined", "delete", "_unregister", "clear", "v", "callbackfn", "thisArg", "bind", "register", "unregister", "mapValues", "obj", "fn", "result", "Object", "keys", "forEach", "key", "Symbol", "dispose", "asyncDispose", "defer", "fn", "DeferGuard", "constructor", "_fn", "Symbol", "dispose", "result", "Promise", "Error", "deferAsync", "DeferAsyncGuard", "asyncDispose"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/assign.ts":{"bytes":2364,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/binder.ts":{"bytes":1323,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/bitfield.ts":{"bytes":8442,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback.ts":{"bytes":5193,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/complex.ts":{"bytes":18701,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/defer-function.ts":{"bytes":1571,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/entry.ts":{"bytes":3035,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/human-hash.ts":{"bytes":19770,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/interval.ts":{"bytes":1832,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/uint8array.ts":{"bytes":3758,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/json.ts":{"bytes":9252,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/map.ts":{"bytes":1378,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/order.ts":{"bytes":4984,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/platform.ts":{"bytes":11252,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/random.ts":{"bytes":1304,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/range.ts":{"bytes":1027,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/reducers.ts":{"bytes":12825,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/safe-instanceof.ts":{"bytes":2693,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/safe-parse-json.ts":{"bytes":1341,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/sort.ts":{"bytes":3944,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/tracer.ts":{"bytes":7182,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/types.ts":{"bytes":6688,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/instance-id.ts":{"bytes":4243,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/sum.ts":{"bytes":688,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/for-each-async.ts":{"bytes":798,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/weak.ts":{"bytes":9636,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/map-values.ts":{"bytes":1239,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytes":1442,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}]},"packages/common/util/src/defer.ts":{"bytes":3679,"imports":[{"path":"packages/common/util/src/explicit-resource-management-polyfill.ts","kind":"import-statement","original":"./explicit-resource-management-polyfill"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/index.ts":{"bytes":2825,"imports":[{"path":"packages/common/util/src/assign.ts","kind":"import-statement","original":"./assign"},{"path":"packages/common/util/src/binder.ts","kind":"import-statement","original":"./binder"},{"path":"packages/common/util/src/bitfield.ts","kind":"import-statement","original":"./bitfield"},{"path":"packages/common/util/src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"packages/common/util/src/complex.ts","kind":"import-statement","original":"./complex"},{"path":"packages/common/util/src/defer-function.ts","kind":"import-statement","original":"./defer-function"},{"path":"packages/common/util/src/entry.ts","kind":"import-statement","original":"./entry"},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/interval.ts","kind":"import-statement","original":"./interval"},{"path":"packages/common/util/src/json.ts","kind":"import-statement","original":"./json"},{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"packages/common/util/src/order.ts","kind":"import-statement","original":"./order"},{"path":"packages/common/util/src/platform.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/util/src/random.ts","kind":"import-statement","original":"./random"},{"path":"packages/common/util/src/range.ts","kind":"import-statement","original":"./range"},{"path":"packages/common/util/src/reducers.ts","kind":"import-statement","original":"./reducers"},{"path":"packages/common/util/src/safe-instanceof.ts","kind":"import-statement","original":"./safe-instanceof"},{"path":"packages/common/util/src/safe-parse-json.ts","kind":"import-statement","original":"./safe-parse-json"},{"path":"packages/common/util/src/sort.ts","kind":"import-statement","original":"./sort"},{"path":"packages/common/util/src/tracer.ts","kind":"import-statement","original":"./tracer"},{"path":"packages/common/util/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"packages/common/util/src/instance-id.ts","kind":"import-statement","original":"./instance-id"},{"path":"packages/common/util/src/sum.ts","kind":"import-statement","original":"./sum"},{"path":"packages/common/util/src/for-each-async.ts","kind":"import-statement","original":"./for-each-async"},{"path":"packages/common/util/src/weak.ts","kind":"import-statement","original":"./weak"},{"path":"packages/common/util/src/map-values.ts","kind":"import-statement","original":"./map-values"},{"path":"packages/common/util/src/defer.ts","kind":"import-statement","original":"./defer"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/common/util/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":74326},"packages/common/util/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["BitField","Callback","ComplexMap","ComplexSet","HumanHasher","MapEntry","Tracer","WeakDictionary","accessBy","arrayMove","arrayToBuffer","arrayToString","arraysEqual","assignDeep","boolGuard","bufferToArray","compareMulti","compareObject","compareScalar","compareString","createBinder","createBucketReducer","createGroupReducer","createSetDispatch","defaultMap","defer","deferAsync","deferFunction","entry","exponentialBackoffInterval","forEachAsync","getAsyncValue","getDate","getDebugName","getHostPlatform","getPrototypeSpecificInstanceId","humanize","inferObjectOrder","inferRecordOrder","iosCheck","isNode","isNotFalsy","isNotNullOrUndefined","jsonKeyReplacer","jsonReplacer","jsonify","makeMap","makeSet","mapValues","median","mobileAndTabletCheck","nonNullable","numericalValues","randomInt","range","rangeFromTo","reduceGroupBy","reduceSeries","reduceSet","safariCheck","safeInstanceof","safeParseInt","safeParseJson","stringToArray","stripUndefinedValues","sum","tracer"],"entryPoint":"packages/common/util/src/index.ts","inputs":{"inject-globals:@inject-globals":{"bytesInOutput":79},"packages/common/util/src/assign.ts":{"bytesInOutput":491},"packages/common/util/src/index.ts":{"bytesInOutput":0},"packages/common/util/src/binder.ts":{"bytesInOutput":149},"packages/common/util/src/bitfield.ts":{"bytesInOutput":1911},"packages/common/util/src/callback.ts":{"bytesInOutput":1113},"packages/common/util/src/complex.ts":{"bytesInOutput":3706},"packages/common/util/src/defer-function.ts":{"bytesInOutput":72},"packages/common/util/src/entry.ts":{"bytesInOutput":471},"packages/common/util/src/human-hash.ts":{"bytesInOutput":5662},"packages/common/util/src/interval.ts":{"bytesInOutput":290},"packages/common/util/src/json.ts":{"bytesInOutput":1897},"packages/common/util/src/uint8array.ts":{"bytesInOutput":562},"packages/common/util/src/map.ts":{"bytesInOutput":193},"packages/common/util/src/order.ts":{"bytesInOutput":676},"packages/common/util/src/platform.ts":{"bytesInOutput":3211},"packages/common/util/src/random.ts":{"bytesInOutput":144},"packages/common/util/src/range.ts":{"bytesInOutput":119},"packages/common/util/src/reducers.ts":{"bytesInOutput":2326},"packages/common/util/src/safe-instanceof.ts":{"bytesInOutput":371},"packages/common/util/src/safe-parse-json.ts":{"bytesInOutput":157},"packages/common/util/src/sort.ts":{"bytesInOutput":643},"packages/common/util/src/tracer.ts":{"bytesInOutput":1426},"packages/common/util/src/types.ts":{"bytesInOutput":981},"packages/common/util/src/instance-id.ts":{"bytesInOutput":772},"packages/common/util/src/sum.ts":{"bytesInOutput":57},"packages/common/util/src/for-each-async.ts":{"bytesInOutput":62},"packages/common/util/src/weak.ts":{"bytesInOutput":2069},"packages/common/util/src/map-values.ts":{"bytesInOutput":153},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytesInOutput":100},"packages/common/util/src/defer.ts":{"bytesInOutput":546}},"bytes":32815}}}
1
+ {"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/assign.ts":{"bytes":2981,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/binder.ts":{"bytes":1323,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/bitfield.ts":{"bytes":8442,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback.ts":{"bytes":5193,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/complex.ts":{"bytes":18701,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/defer-function.ts":{"bytes":1571,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/entry.ts":{"bytes":3035,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/human-hash.ts":{"bytes":19770,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/interval.ts":{"bytes":1832,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/uint8array.ts":{"bytes":3758,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/json.ts":{"bytes":9252,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/map.ts":{"bytes":1378,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/order.ts":{"bytes":4984,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/platform.ts":{"bytes":11252,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/random.ts":{"bytes":1304,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/range.ts":{"bytes":1027,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/reducers.ts":{"bytes":12825,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/safe-instanceof.ts":{"bytes":2693,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/safe-parse-json.ts":{"bytes":1341,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/sort.ts":{"bytes":3944,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/tracer.ts":{"bytes":7182,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/types.ts":{"bytes":6688,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/instance-id.ts":{"bytes":4243,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/sum.ts":{"bytes":688,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/for-each-async.ts":{"bytes":798,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/weak.ts":{"bytes":9636,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/map-values.ts":{"bytes":1239,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytes":1442,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}]},"packages/common/util/src/defer.ts":{"bytes":3679,"imports":[{"path":"packages/common/util/src/explicit-resource-management-polyfill.ts","kind":"import-statement","original":"./explicit-resource-management-polyfill"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/index.ts":{"bytes":2825,"imports":[{"path":"packages/common/util/src/assign.ts","kind":"import-statement","original":"./assign"},{"path":"packages/common/util/src/binder.ts","kind":"import-statement","original":"./binder"},{"path":"packages/common/util/src/bitfield.ts","kind":"import-statement","original":"./bitfield"},{"path":"packages/common/util/src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"packages/common/util/src/complex.ts","kind":"import-statement","original":"./complex"},{"path":"packages/common/util/src/defer-function.ts","kind":"import-statement","original":"./defer-function"},{"path":"packages/common/util/src/entry.ts","kind":"import-statement","original":"./entry"},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/interval.ts","kind":"import-statement","original":"./interval"},{"path":"packages/common/util/src/json.ts","kind":"import-statement","original":"./json"},{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"packages/common/util/src/order.ts","kind":"import-statement","original":"./order"},{"path":"packages/common/util/src/platform.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/util/src/random.ts","kind":"import-statement","original":"./random"},{"path":"packages/common/util/src/range.ts","kind":"import-statement","original":"./range"},{"path":"packages/common/util/src/reducers.ts","kind":"import-statement","original":"./reducers"},{"path":"packages/common/util/src/safe-instanceof.ts","kind":"import-statement","original":"./safe-instanceof"},{"path":"packages/common/util/src/safe-parse-json.ts","kind":"import-statement","original":"./safe-parse-json"},{"path":"packages/common/util/src/sort.ts","kind":"import-statement","original":"./sort"},{"path":"packages/common/util/src/tracer.ts","kind":"import-statement","original":"./tracer"},{"path":"packages/common/util/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"packages/common/util/src/instance-id.ts","kind":"import-statement","original":"./instance-id"},{"path":"packages/common/util/src/sum.ts","kind":"import-statement","original":"./sum"},{"path":"packages/common/util/src/for-each-async.ts","kind":"import-statement","original":"./for-each-async"},{"path":"packages/common/util/src/weak.ts","kind":"import-statement","original":"./weak"},{"path":"packages/common/util/src/map-values.ts","kind":"import-statement","original":"./map-values"},{"path":"packages/common/util/src/defer.ts","kind":"import-statement","original":"./defer"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/common/util/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":74666},"packages/common/util/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["BitField","Callback","ComplexMap","ComplexSet","HumanHasher","MapEntry","Tracer","WeakDictionary","accessBy","arrayMove","arrayToBuffer","arrayToString","arraysEqual","assignDeep","boolGuard","bufferToArray","compareMulti","compareObject","compareScalar","compareString","createBinder","createBucketReducer","createGroupReducer","createSetDispatch","defaultMap","defer","deferAsync","deferFunction","entry","exponentialBackoffInterval","forEachAsync","getAsyncValue","getDate","getDebugName","getDeep","getHostPlatform","getPrototypeSpecificInstanceId","humanize","inferObjectOrder","inferRecordOrder","iosCheck","isNode","isNotFalsy","isNotNullOrUndefined","jsonKeyReplacer","jsonReplacer","jsonify","makeMap","makeSet","mapValues","median","mobileAndTabletCheck","nonNullable","numericalValues","randomInt","range","rangeFromTo","reduceGroupBy","reduceSeries","reduceSet","safariCheck","safeInstanceof","safeParseInt","safeParseJson","stringToArray","stripUndefinedValues","sum","tracer"],"entryPoint":"packages/common/util/src/index.ts","inputs":{"inject-globals:@inject-globals":{"bytesInOutput":79},"packages/common/util/src/assign.ts":{"bytesInOutput":622},"packages/common/util/src/index.ts":{"bytesInOutput":0},"packages/common/util/src/binder.ts":{"bytesInOutput":149},"packages/common/util/src/bitfield.ts":{"bytesInOutput":1911},"packages/common/util/src/callback.ts":{"bytesInOutput":1113},"packages/common/util/src/complex.ts":{"bytesInOutput":3706},"packages/common/util/src/defer-function.ts":{"bytesInOutput":72},"packages/common/util/src/entry.ts":{"bytesInOutput":471},"packages/common/util/src/human-hash.ts":{"bytesInOutput":5662},"packages/common/util/src/interval.ts":{"bytesInOutput":290},"packages/common/util/src/json.ts":{"bytesInOutput":1897},"packages/common/util/src/uint8array.ts":{"bytesInOutput":562},"packages/common/util/src/map.ts":{"bytesInOutput":193},"packages/common/util/src/order.ts":{"bytesInOutput":676},"packages/common/util/src/platform.ts":{"bytesInOutput":3211},"packages/common/util/src/random.ts":{"bytesInOutput":144},"packages/common/util/src/range.ts":{"bytesInOutput":119},"packages/common/util/src/reducers.ts":{"bytesInOutput":2326},"packages/common/util/src/safe-instanceof.ts":{"bytesInOutput":371},"packages/common/util/src/safe-parse-json.ts":{"bytesInOutput":157},"packages/common/util/src/sort.ts":{"bytesInOutput":643},"packages/common/util/src/tracer.ts":{"bytesInOutput":1426},"packages/common/util/src/types.ts":{"bytesInOutput":981},"packages/common/util/src/instance-id.ts":{"bytesInOutput":772},"packages/common/util/src/sum.ts":{"bytesInOutput":57},"packages/common/util/src/for-each-async.ts":{"bytesInOutput":62},"packages/common/util/src/weak.ts":{"bytesInOutput":2069},"packages/common/util/src/map-values.ts":{"bytesInOutput":153},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytesInOutput":100},"packages/common/util/src/defer.ts":{"bytesInOutput":546}},"bytes":32957}}}
@@ -62,6 +62,7 @@ __export(node_exports, {
62
62
  getAsyncValue: () => getAsyncValue,
63
63
  getDate: () => getDate,
64
64
  getDebugName: () => getDebugName,
65
+ getDeep: () => getDeep,
65
66
  getHostPlatform: () => getHostPlatform,
66
67
  getPrototypeSpecificInstanceId: () => getPrototypeSpecificInstanceId,
67
68
  humanize: () => humanize,
@@ -125,6 +126,13 @@ var assignDeep = (doc, path, value) => {
125
126
  parent[path.at(-1)] = value;
126
127
  return parent[path.at(-1)];
127
128
  };
129
+ var getDeep = (doc, path) => {
130
+ let parent = doc;
131
+ for (const key of path) {
132
+ parent = parent?.[key];
133
+ }
134
+ return parent;
135
+ };
128
136
  var createBinder = (obj) => ({
129
137
  fn: (fn) => fn.bind(obj),
130
138
  async: (fn) => import_node_util.default.promisify(fn.bind(obj))
@@ -1327,6 +1335,7 @@ var DeferAsyncGuard = class {
1327
1335
  getAsyncValue,
1328
1336
  getDate,
1329
1337
  getDebugName,
1338
+ getDeep,
1330
1339
  getHostPlatform,
1331
1340
  getPrototypeSpecificInstanceId,
1332
1341
  humanize,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/assign.ts", "../../../src/binder.ts", "../../../src/bitfield.ts", "../../../src/callback.ts", "../../../src/complex.ts", "../../../src/defer-function.ts", "../../../src/entry.ts", "../../../src/human-hash.ts", "../../../src/interval.ts", "../../../src/json.ts", "../../../src/uint8array.ts", "../../../src/map.ts", "../../../src/order.ts", "../../../src/platform.ts", "../../../src/random.ts", "../../../src/range.ts", "../../../src/reducers.ts", "../../../src/safe-instanceof.ts", "../../../src/safe-parse-json.ts", "../../../src/sort.ts", "../../../src/tracer.ts", "../../../src/types.ts", "../../../src/instance-id.ts", "../../../src/sum.ts", "../../../src/for-each-async.ts", "../../../src/weak.ts", "../../../src/map-values.ts", "../../../src/explicit-resource-management-polyfill.ts", "../../../src/defer.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Initialize a deeply nested object.\n * @returns The value of the prop after assignment.\n */\nexport const assignDeep = <T>(doc: any, path: string[], value: T): T => {\n invariant(path.length > 0);\n let parent = doc;\n for (const key of path.slice(0, -1)) {\n parent[key] ??= {};\n parent = parent[key];\n }\n parent[path.at(-1)!] = value;\n return parent[path.at(-1)!]; // NOTE: We can't just return value here since doc's getter might return a different object.\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport util from 'node:util';\n\n/**\n * Function binder replaces pify.\n */\n// TODO(burdon): Replace pify everywhere.\nexport const createBinder = (obj: any) => ({\n fn: (fn: Function) => fn.bind(obj),\n async: (fn: Function) => util.promisify(fn.bind(obj)),\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Bitfield encodes indices from MSB to LSB.\n * Index 0 is the MSB of the first byte.\n *\n *\n * #0 #1 #2 #3\n * 01010101 11110000 00001111 01010101\n * ^ ^\n * MSB LSB\n */\nexport class BitField {\n static get(data: Uint8Array, idx: number): boolean {\n const bit = (data[idx >> 3] >> (7 - (idx % 8))) & 0x1;\n return !!bit;\n }\n\n static set(data: Uint8Array, idx: number, value: boolean) {\n if (value) {\n data[idx >> 3] = data[idx >> 3] | (1 << (7 - (idx % 8)));\n } else {\n data[idx >> 3] = data[idx >> 3] & ~(1 << (7 - (idx % 8)));\n }\n }\n\n /**\n * [start; end)\n */\n static count(data: Uint8Array, begin: number, end: number): number {\n let count = 0;\n for (let i = begin; i < end; i++) {\n const bit = (data[i >> 3] >> (7 - (i % 8))) & 0x1;\n count += bit;\n }\n return count;\n }\n\n static invert(data: Uint8Array): Uint8Array {\n const result = new Uint8Array(data.length);\n for (let i = 0; i < data.length; i++) {\n result[i] = ~data[i];\n }\n return result;\n }\n\n static and(first: Uint8Array, second: Uint8Array) {\n invariant(first.length === second.length, 'Bitfields must be of the same length');\n const result = new Uint8Array(first.length);\n for (let i = 0; i < first.length; i++) {\n result[i] = first[i] & second[i];\n }\n return result;\n }\n\n static findIndexes(data: Uint8Array, opts: { start?: number; end?: number; value?: boolean } = {}): number[] {\n const { start = 0, end = data.length * 8, value = true } = opts;\n\n const result = [];\n\n for (let i = start; i < end; i++) {\n if (BitField.get(data, i) === value) {\n result.push(i);\n }\n }\n return result;\n }\n\n static ones(count: number): Uint8Array {\n const res = new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0xff);\n\n // Note: We need to calculate last byte of bitfield.\n const bitInLastByte = Math.ceil(count % 8);\n res[res.length - 1] = 0xff << (8 - bitInLastByte);\n\n return res;\n }\n\n static zeros(count: number): Uint8Array {\n return new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0);\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Represents a callback that can be set once.\n *\n * Common usage is dependency injection.\n * In contrast to events, callbacks can only have one handler,\n * are executed synchronously,\n * and can return results.\n */\n// TODO(burdon): Move to @dxos/async.\nexport class Callback<T extends (...args: any[]) => any> {\n private _callback: T | undefined;\n\n public call(...args: Parameters<T>): ReturnType<T> {\n invariant(this._callback, 'Callback not set');\n return this._callback(...args);\n }\n\n public callIfSet(...args: Parameters<T>): ReturnType<T> | undefined {\n return this._callback?.(...args);\n }\n\n public set(callback: T) {\n invariant(!this._callback, 'Callback already set');\n this._callback = callback;\n }\n\n public isSet() {\n return !!this._callback;\n }\n}\n\nexport type SetCallbacks<T> = { handlers: Set<T> };\n\n/**\n * Create a fan-out callback handler.\n * NOTE: Methods cannot return values.\n */\nexport const createSetDispatch = <T extends {}>({ handlers }: SetCallbacks<T>) => {\n type Obj = { [i: string | symbol]: any };\n return new Proxy<any>(\n {\n handlers,\n },\n {\n get: (target: Obj, prop) => {\n return (...args: any[]) => {\n handlers.forEach((handler: Obj) => {\n const method = handler[prop];\n if (method) {\n method.apply(handler, args);\n }\n });\n };\n },\n },\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { inspectObject, raise } from '@dxos/debug';\n\nexport type Primitive = string | number | boolean | null | undefined;\n\nexport type PrimitiveProjection<T> = (value: T) => Primitive;\n\nconst MAX_SERIALIZATION_LENGTH = 10;\n\n/**\n * A set implementation that can hold complex values (like Buffer).\n *\n * The user must provide a projection function which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n *\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexSet<T> implements Set<T> {\n private readonly _values = new Map<Primitive, T>();\n\n // prettier-ignore\n constructor(\n private readonly _projection: PrimitiveProjection<T>,\n values?: Iterable<T> | null,\n ) {\n if (values) {\n for (const value of values) {\n this.add(value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n add(value: T): this {\n this._values.set(this._projection(value), value);\n return this;\n }\n\n clear(): void {\n this._values.clear();\n }\n\n delete(value: T): boolean {\n return this._values.delete(this._projection(value));\n }\n\n forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._values.forEach((value) => callbackfn(value, value, this));\n }\n\n has(value: T): boolean {\n return this._values.has(this._projection(value));\n }\n\n get size(): number {\n return this._values.size;\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this._values.values();\n }\n\n *entries(): IterableIterator<[T, T]> {\n for (const value of this._values.values()) {\n yield [value, value];\n }\n }\n\n keys(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n values(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexSet';\n }\n}\n\nexport type ComplexSetConstructor<T> = new (values?: Iterable<T> | null) => ComplexSet<T>;\n\n/**\n * Create a subclass of ComplexSet with predefined projection function.\n */\nexport const makeSet = <T>(projection: PrimitiveProjection<T>): ComplexSetConstructor<T> => {\n return class BoundComplexSet extends ComplexSet<T> {\n constructor(values?: Iterable<T> | null) {\n super(projection, values);\n }\n };\n};\n\n/**\n * A map implementation that can hold complex values (like Buffer) as keys.\n * The user must provide a projection function for map keys which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexMap<K, V> implements Map<K, V> {\n private readonly _keys = new Map<Primitive, K>();\n private readonly _values = new Map<Primitive, V>();\n\n // prettier-ignore\n constructor(\n private readonly _keyProjection: PrimitiveProjection<K>,\n entries?: readonly (readonly [K, V])[] | null,\n ) {\n if (entries) {\n for (const [key, value] of entries) {\n this.set(key, value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n clear(): void {\n this._keys.clear();\n this._values.clear();\n }\n\n delete(key: K): boolean {\n const keyDeleted = this._keys.delete(this._keyProjection(key));\n const valueDeleted = this._values.delete(this._keyProjection(key));\n return keyDeleted || valueDeleted;\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._keys.forEach((key, primitive) =>\n callbackfn(this._values.get(primitive) ?? raise(new Error('Map corrupted.')), key, this),\n );\n }\n\n get(key: K): V | undefined {\n return this._values.get(this._keyProjection(key));\n }\n\n has(key: K): boolean {\n return this._keys.has(this._keyProjection(key));\n }\n\n set(key: K, value: V): this {\n const primitive = this._keyProjection(key);\n this._keys.set(primitive, key);\n this._values.set(primitive, value);\n return this;\n }\n\n get size(): number {\n return this._keys.size;\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [primitive, key] of this._keys) {\n const value = this._values.get(primitive) ?? raise(new Error('Map corrupted.'));\n yield [key, value];\n }\n }\n\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]();\n }\n\n keys(): IterableIterator<K> {\n return this._keys.values();\n }\n\n values(): IterableIterator<V> {\n return this._values.values();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexMap';\n }\n}\n\nexport type ComplexMapConstructor<K> = new <V>(entries?: readonly (readonly [K, V])[] | null) => ComplexMap<K, V>;\n\n/**\n * Create a subclass of ComplexMap with predefined key projection function.\n */\nexport const makeMap = <K>(keyProjection: PrimitiveProjection<K>): ComplexMapConstructor<K> =>\n class BoundComplexMap<V> extends ComplexMap<K, V> {\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(keyProjection, entries);\n }\n };\n", "/**\n * Wraps a function provider in a function that will defer the execution of the provided function.\n *\n * Example:\n *\n * ```typescript\n * const fn = deferFunction(() => impl);\n *\n * // Impl can be defined after the usage.\n * const impl = () => {\n * console.log('Hello World!')\n * }\n * ```\n */\n//\n// Copyright 2022 DXOS.org\n//\n\nexport const deferFunction =\n <T extends (...args: any[]) => any>(fnProvider: () => T) =>\n (...args: Parameters<T>): ReturnType<T> =>\n fnProvider()(...args);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Inspired by https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.entry\n */\nexport const entry = <K, V>(map: Map<K, V>, key: K): MapEntry<K, V, undefined> => new MapEntry(map, key);\n\nexport class MapEntry<K, V, U> {\n /**\n * @internal\n */\n // prettier-ignore\n constructor(\n private readonly _map: Map<K, V>,\n private readonly _key: K,\n ) {}\n\n get key(): K {\n return this._key;\n }\n\n get value(): V | U {\n return this._map.get(this._key) as V | U;\n }\n\n orInsert(value: V): MapEntry<K, V, never> {\n if (!this._map.has(this._key)) {\n this._map.set(this._key, value);\n }\n return this as any;\n }\n\n deep<K1, V1>(this: MapEntry<K, Map<K1, V1>, Map<K1, V1>>, key: K1): MapEntry<K1, V1, undefined> {\n return entry(this.value, key);\n }\n}\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { PublicKey, type PublicKeyLike } from '@dxos/keys';\n\n// From https://github.com/SEBv15/humanhash/blob/166c1a6f70d854fe6767cdd76be1237112d4eaf1/index.js\n\nconst DEFAULT_WORDLIST = [\n 'ack',\n 'alabama',\n 'alanine',\n 'alaska',\n 'alpha',\n 'angel',\n 'apart',\n 'april',\n 'arizona',\n 'arkansas',\n 'artist',\n 'asparagus',\n 'aspen',\n 'august',\n 'autumn',\n 'avocado',\n 'bacon',\n 'bakerloo',\n 'batman',\n 'beer',\n 'berlin',\n 'beryllium',\n 'black',\n 'blossom',\n 'blue',\n 'bluebird',\n 'bravo',\n 'bulldog',\n 'burger',\n 'butter',\n 'california',\n 'carbon',\n 'cardinal',\n 'carolina',\n 'carpet',\n 'cat',\n 'ceiling',\n 'charlie',\n 'chicken',\n 'coffee',\n 'cola',\n 'cold',\n 'colorado',\n 'comet',\n 'connecticut',\n 'crazy',\n 'cup',\n 'dakota',\n 'december',\n 'delaware',\n 'delta',\n 'diet',\n 'don',\n 'double',\n 'early',\n 'earth',\n 'east',\n 'echo',\n 'edward',\n 'eight',\n 'eighteen',\n 'eleven',\n 'emma',\n 'enemy',\n 'equal',\n 'failed',\n 'fanta',\n 'fifteen',\n 'fillet',\n 'finch',\n 'fish',\n 'five',\n 'fix',\n 'floor',\n 'florida',\n 'football',\n 'four',\n 'fourteen',\n 'foxtrot',\n 'freddie',\n 'friend',\n 'fruit',\n 'gee',\n 'georgia',\n 'glucose',\n 'golf',\n 'green',\n 'grey',\n 'hamper',\n 'happy',\n 'harry',\n 'hawaii',\n 'helium',\n 'high',\n 'hot',\n 'hotel',\n 'hydrogen',\n 'idaho',\n 'illinois',\n 'india',\n 'indigo',\n 'ink',\n 'iowa',\n 'island',\n 'item',\n 'jersey',\n 'jig',\n 'johnny',\n 'juliet',\n 'july',\n 'jupiter',\n 'kansas',\n 'kentucky',\n 'kilo',\n 'king',\n 'kitten',\n 'lactose',\n 'lake',\n 'lamp',\n 'lemon',\n 'leopard',\n 'lima',\n 'lion',\n 'lithium',\n 'london',\n 'louisiana',\n 'low',\n 'magazine',\n 'magnesium',\n 'maine',\n 'mango',\n 'march',\n 'mars',\n 'maryland',\n 'massachusetts',\n 'may',\n 'mexico',\n 'michigan',\n 'mike',\n 'minnesota',\n 'mirror',\n 'mississippi',\n 'missouri',\n 'mobile',\n 'mockingbird',\n 'monkey',\n 'montana',\n 'moon',\n 'mountain',\n 'muppet',\n 'music',\n 'nebraska',\n 'neptune',\n 'network',\n 'nevada',\n 'nine',\n 'nineteen',\n 'nitrogen',\n 'north',\n 'november',\n 'nuts',\n 'october',\n 'ohio',\n 'oklahoma',\n 'one',\n 'orange',\n 'oranges',\n 'oregon',\n 'oscar',\n 'oven',\n 'oxygen',\n 'papa',\n 'paris',\n 'pasta',\n 'pennsylvania',\n 'pip',\n 'pizza',\n 'pluto',\n 'potato',\n 'princess',\n 'purple',\n 'quebec',\n 'queen',\n 'quiet',\n 'red',\n 'river',\n 'robert',\n 'robin',\n 'romeo',\n 'rugby',\n 'sad',\n 'salami',\n 'saturn',\n 'september',\n 'seven',\n 'seventeen',\n 'shade',\n 'sierra',\n 'single',\n 'sink',\n 'six',\n 'sixteen',\n 'skylark',\n 'snake',\n 'social',\n 'sodium',\n 'solar',\n 'south',\n 'spaghetti',\n 'speaker',\n 'spring',\n 'stairway',\n 'steak',\n 'stream',\n 'summer',\n 'sweet',\n 'table',\n 'tango',\n 'ten',\n 'tennessee',\n 'tennis',\n 'texas',\n 'thirteen',\n 'three',\n 'timing',\n 'triple',\n 'twelve',\n 'twenty',\n 'two',\n 'uncle',\n 'undress',\n 'uniform',\n 'uranus',\n 'utah',\n 'vegan',\n 'venus',\n 'vermont',\n 'victor',\n 'video',\n 'violet',\n 'virginia',\n 'washington',\n 'west',\n 'whiskey',\n 'white',\n 'william',\n 'winner',\n 'winter',\n 'wisconsin',\n 'wolfram',\n 'wyoming',\n 'xray',\n 'yankee',\n 'yellow',\n 'zebra',\n 'zulu',\n];\n\n/**\n * humanhash: Human-readable representations of digests.\n */\nexport class HumanHasher {\n /**\n * Transforms hex digests to human-readable strings.\n *\n * The format of these strings will look something like:\n * `victor-bacon-zulu-lima`. The output is obtained by compressing the input\n * digest to a fixed number of bytes, then mapping those bytes to one of 256\n * words. A default wordlist is provided, but you can override this if you\n * prefer.\n * As long as you use the same wordlist, the output will be consistent (i.e.\n * the same digest will always render the same representation).\n *\n * @param wordlist A list of exactly 256 words to choose from\n */\n constructor(private readonly wordlist = DEFAULT_WORDLIST) {\n if (wordlist.length !== 256) {\n throw new Error('Wordlist must have exactly 256 items');\n }\n this.wordlist = wordlist;\n }\n\n /**\n * Humanize a given hexadecimal digest.\n *\n * Change the number of words output by specifying `words`. Change the\n * word separator with `separator`.\n *\n * @param hexdigest A string of hexadecimal characters to humanize\n * @param words How many words to output (more = safer)\n * @param separator The string used to seperate the words\n */\n humanize(hexdigest: string, words = 4, separator = '-') {\n const pairs = hexdigest.match(/(..?)/g);\n if (!pairs) {\n throw new Error('');\n }\n\n const bytes = pairs.map((x) => parseInt(x, 16));\n const compressed = this._compress(bytes, words);\n\n return compressed.map((x) => this.wordlist[x]).join(separator);\n }\n\n /**\n * Compress a list of byte values to a fixed target length.\n *\n * @param bytes A list of bytes (numbers from 0-254)\n * @param target The number of bytes to return / compress to\n */\n _compress(bytes: number[], target: number) {\n const length = bytes.length;\n if (target > length) {\n throw new Error('Fewer input bytes than requested output');\n }\n\n // Calculate the segment size (divide and round down)\n const segSize = (length / target) >> 0;\n\n // Split 'bytes' array into 'target' number of segments.\n const segments = [];\n for (let i = 0; i < segSize * target; i += segSize) {\n segments.push(bytes.slice(i, i + segSize));\n }\n\n // Catch any left-over bytes in the last segment.\n segments[segments.length - 1] = segments[segments.length - 1].concat(bytes.slice(target * segSize));\n\n const checksums = segments.map((x) => x.reduce((acc, curr) => acc ^ curr));\n return checksums;\n }\n}\n\nconst hasher = new HumanHasher();\n\nexport const humanize = (value: PublicKeyLike): string => {\n if (value instanceof Buffer || value instanceof Uint8Array || value instanceof ArrayBuffer) {\n value = PublicKey.stringify(value);\n } else if (value instanceof PublicKey) {\n value = value.toHex();\n }\n\n return hasher.humanize(value);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\n/**\n * Runs the callback in an exponentially increasing interval.\n * @returns Callback to clear the interval.\n */\nexport const exponentialBackoffInterval = (cb: () => void, initialInterval: number): (() => void) => {\n let interval = initialInterval;\n const repeat = () => {\n cb();\n interval *= 2;\n timeoutId = setTimeout(repeat, interval);\n };\n\n let timeoutId = setTimeout(repeat, interval);\n return () => clearTimeout(timeoutId);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { humanize } from './human-hash';\nimport { arrayToBuffer } from './uint8array';\n\nconst MAX_DEPTH = 5;\n\n/**\n * JSON.stringify replacer.\n */\nexport function jsonReplacer(this: any, key: string, value: any): any {\n // TODO(burdon): Why is this represented as `{ type: 'Buffer', data }`.\n if (value !== null && typeof value === 'object' && typeof value[inspect.custom] === 'function') {\n return value[inspect.custom]();\n }\n\n if (value !== null && typeof value === 'object' && value.type === 'Buffer' && Array.isArray(value.data)) {\n if (value.data.length === 32) {\n const key = Buffer.from(value.data);\n return `[${humanize(key)}]:[${PublicKey.stringify(key)}]`;\n } else {\n return Buffer.from(value.data).toString('hex');\n }\n }\n\n // TODO(burdon): Option.\n // code if (Array.isArray(value)) {\n // code return value.length;\n // code } else {\n return value;\n // code }\n}\n\n/**\n * Recursively converts an object into a JSON-compatible object.\n */\nexport const jsonify = (value: any, depth = 0, visitedObjects = new WeakSet<any>()): any => {\n if (depth > MAX_DEPTH) {\n return null;\n } else if (typeof value === 'function') {\n return null;\n } else if (typeof value === 'object' && value !== null) {\n if (visitedObjects.has(value)) {\n return null;\n }\n visitedObjects.add(value);\n\n try {\n if (value instanceof Uint8Array) {\n return arrayToBuffer(value).toString('hex');\n } else if (Array.isArray(value)) {\n return value.map((x) => jsonify(x, depth + 1, visitedObjects));\n } else if (typeof value.toJSON === 'function') {\n return value.toJSON();\n } else {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = jsonify(value[key], depth + 1, visitedObjects);\n }\n return res;\n }\n } finally {\n visitedObjects.delete(value);\n }\n } else {\n return value;\n }\n};\n\nexport type JsonKeyOptions = {\n truncate?: boolean;\n humanize?: boolean;\n};\n\nexport const jsonKeyReplacer =\n (options: JsonKeyOptions = {}) =>\n (key: string, value: any) => {\n if (typeof value === 'string') {\n const key = PublicKey.fromHex(value);\n if (key.toHex() === value) {\n // TODO(burdon): Remove humanize.\n return options.humanize ? humanize(key) : options.truncate ? key.truncate() : key.toHex();\n }\n }\n\n return value;\n };\n", "//\n// Copyright 2021 DXOS.org\n//\n\nexport const arraysEqual = (a: Uint8Array, b: Uint8Array): boolean => {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Non-copying conversion of Uint8Array to Buffer.\n * The resulting buffer will share the same allocated memory as the Uint8Array.\n */\nexport const arrayToBuffer = (array: Uint8Array): Buffer => {\n return Buffer.from(array.buffer, array.byteOffset, array.byteLength);\n};\n\n/**\n * Non-copying conversion of Buffer to Uint8Array.\n * The resulting Uint8Array will share the same allocated memory as the Buffer.\n */\nexport const bufferToArray = (buffer: Buffer): Uint8Array => {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n};\n\nexport const stringToArray = (string: string): Uint8Array => bufferToArray(Buffer.from(string, 'hex'));\n\nexport const arrayToString = (array: Uint8Array): string => arrayToBuffer(array).toString('hex');\n", "//\n// Copyright 2020 DXOS.org\n//\n\n/**\n * Get or set map value.\n */\nexport const defaultMap = <K, V>(map: Map<K, V>, key: K, def: V | (() => V)) => {\n let value = map.get(key);\n if (value === undefined) {\n value = typeof def === 'function' ? (def as () => V)() : def;\n map.set(key, value);\n }\n\n return value;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport type IdOrder = string[];\n\ntype ObjectOrderAccumulator<T> = { objects: T[]; ids: Set<string> };\n\n/**\n * Uses an array of string id’s to order a map of objects, returning an array of those objects. Objects not listed by\n * the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferObjectOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): T[] => {\n const orderedObjects = order.reduce(\n (acc, id) => {\n if (id in objectMap) {\n acc.objects.push(objectMap[id]);\n acc.ids.add(id);\n }\n return acc;\n },\n { objects: [], ids: new Set() } as ObjectOrderAccumulator<T>,\n );\n const { objects } = Object.keys(objectMap).reduce((acc, id) => {\n if (!acc.ids.has(id)) {\n acc.objects.push(objectMap[id]);\n }\n return acc;\n }, orderedObjects);\n return objects;\n};\n\n/**\n * Uses an array of string id’s to order a map of objects, returning a new map with the keys in the prescribed order.\n * Objects not listed by the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferRecordOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): Record<string, T> => {\n return Object.assign(\n order\n .filter((id) => id in objectMap)\n .reduce((acc: Record<string, null>, id) => {\n acc[id] = null;\n return acc;\n }, {}),\n objectMap,\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\n// NOTE: `!=` is required.\nexport const isNode = () => typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n/* eslint-disable */\n\n// From https://stackoverflow.com/a/11381730/2804332.\nexport const mobileAndTabletCheck = () => {\n let check = false;\n ((a) => { 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))) { check = true; } })(navigator.userAgent || navigator.vendor || (window as any).opera);\n return check;\n};\n\n/* eslint-enable */\n\n// From https://stackoverflow.com/a/9039885\nexport const iosCheck = () => {\n return (\n ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n );\n};\n\n// From https://stackoverflow.com/a/23522755/2804332\nexport const safariCheck = () =>\n typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Retrieve the host platform in a best-effort way with normalized output.\n */\n// From https://flaming.codes/posts/how-to-determine-os-in-browser.\nexport const getHostPlatform = () => {\n if (!('navigator' in window)) {\n return 'unknown';\n }\n\n // Use the modern 'web hints' provied by\n // 'userAgentData' if available, else use\n // the deprecated 'platform' as fallback.\n const platform = ((navigator as any).userAgentData?.platform || navigator.platform)?.toLowerCase();\n if (platform.startsWith('win')) {\n return 'windows';\n } else if (platform.startsWith('mac')) {\n return 'macos';\n } else if (platform.startsWith('ipad') || platform.startsWith('iphone') || platform.startsWith('ipod')) {\n return 'ios';\n } else if (platform.startsWith('linux')) {\n return 'linux';\n } else {\n return 'unknown';\n }\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\n// TODO(burdon): Random class utility.\n// TODO(burdon): Make object { min, max }.\nexport const randomInt = (max: number, min: number) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport const range = (n: number) => Array.from(Array(n).keys());\n\nexport const rangeFromTo = (from: number, to: number) => range(to - from).map((i) => i + from);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Factor out.\n// TODO(burdon): Consider mathjs for variance, standard deviations, etc.\n// https://www.npmjs.com/package/mathjs\n\nimport { defaultMap } from './map';\n\nexport type Accessor<T, V> = string | ((value: T) => V);\n\nexport const accessBy = <T, V>(value: T, accessor: Accessor<T, V>) =>\n typeof accessor === 'function' ? accessor(value) : (value as Record<any, any>)[accessor];\n\nexport const median = (values: number[]) => {\n const mid = Math.floor(values.length / 2);\n if (values.length % 2 === 1) {\n return values[mid];\n } else {\n return (values[mid - 1] + values[mid]) / 2;\n }\n};\n\n// TODO(burdon): Value Proto.\nexport type NumericalValues = {\n min?: number;\n max?: number;\n mean?: number;\n median?: number;\n total: number;\n count: number;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const numericalValues = <T>(values: T[], accessor: Accessor<T, number>) => {\n const result: NumericalValues = { total: 0, count: 0 };\n\n const sorted: number[] = values\n .map((value) => {\n const v = accessBy(value, accessor);\n if (v === undefined || isNaN(v)) {\n return undefined;\n }\n\n result.total += v;\n if (result.min === undefined || v < result.min) {\n result.min = v;\n }\n if (result.max === undefined || v > result.max) {\n result.max = v;\n }\n\n return v;\n })\n .filter((value) => value !== undefined)\n .sort((a, b) => a! - b!) as number[];\n\n if (sorted.length) {\n Object.assign(result, {\n count: sorted.length,\n mean: result.total / sorted.length,\n median: median(sorted),\n });\n }\n\n return result;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const reduceSet = <T, V>(values: T[], accessor: Accessor<T, V>): Set<V> => {\n return values.reduce((values, value) => {\n const v = accessBy(value, accessor);\n values.add(v);\n return values;\n }, new Set<V>());\n};\n\n/**\n * Returns an object containing values grouped by the given key accessor.\n */\nexport const reduceGroupBy = <T, K>(values: T[], accessor: Accessor<T, K>): Map<K, T[]> => {\n return values.reduce((values, value) => {\n const key = accessBy(value, accessor);\n defaultMap(values, key, []).push(value);\n return values;\n }, new Map<K, T[]>());\n};\n\n/**\n * Generic composable reducer interface.\n */\nexport interface Reducer<T, S> {\n /**\n * Get initial state.\n */\n initialState(): S;\n\n /**\n * Apply event to state.\n */\n reduce(state: S, event: T): S;\n}\n\n/**\n * Applies the reducer to the array of values.\n */\nexport const reduceSeries = <T, S>(reducer: Reducer<T, S>, events: T[]): S => {\n const state = reducer.initialState();\n for (const event of events) {\n reducer.reduce(state, event);\n }\n\n return state;\n};\n\n/**\n * Reducer to group values.\n */\nexport const createGroupReducer = <T, S>(\n groupBy: (value: T) => string,\n sub: Reducer<T, S>,\n): Reducer<T, Record<string, S>> => ({\n initialState: () => ({}),\n reduce: (state: Record<string, S>, event: T) => {\n const key = groupBy(event);\n state[key] = sub.reduce(state[key] ?? sub.initialState(), event);\n return state;\n },\n});\n\nexport type TimeRecord = { timestamp: Date | number | string };\nexport type TimeBucket = { start: number; period: number; count: number };\n\nexport const getDate = (value: Date | number | string): Date => (value instanceof Date ? value : new Date(value));\n\n/**\n * Reducer to group by time period.\n */\nexport const createBucketReducer = <T extends TimeRecord>(period: number): Reducer<T, TimeBucket[]> => ({\n initialState: () => [],\n reduce: (series: TimeBucket[], event: T) => {\n const timestamp = getDate(event.timestamp);\n let bucket: TimeBucket = series[series.length - 1];\n if (!bucket || bucket.start + period < timestamp.getTime()) {\n bucket = { start: timestamp.getTime(), period, count: 0 };\n series.push(bucket);\n }\n\n bucket.count++;\n return series;\n },\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nconst instanceTag = Symbol('instanceTag');\n\n/**\n * Makes instanceof work correctly even if the class definition was duplicated (e.g. when bundling).\n * The comparison is done by comparing the tag passed to this function.\n *\n * Example:\n *\n * ```typescript\n * @safeInstanceof('Tagged')\n * class Tagged {}\n * ```\n */\nexport const safeInstanceof =\n (tag: string): ClassDecorator =>\n (target: any) => {\n target.prototype[instanceTag] = tag;\n\n Object.defineProperty(target.prototype, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n\n Object.defineProperty(target, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const safeParseJson: {\n <T extends object>(data: string | undefined | null, defaultValue: T): T;\n <T extends object>(data: string | undefined | null): T | undefined;\n} = <T extends object>(data: string | undefined | null, defaultValue?: T) => {\n if (data) {\n try {\n return JSON.parse(data);\n } catch (err) {}\n }\n return defaultValue;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Unique.\n// TODO(burdon): Options for undefined to end.\n\ntype Compare<T> = (a: T, b: T) => number;\n\nexport const compareScalar =\n (inc = true) =>\n (a: any, b: any) =>\n (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n\nexport const compareString =\n (inc = true, caseInsensitive = true) =>\n (a: string, b: string) => {\n if (caseInsensitive) {\n a = a?.toLowerCase();\n b = b?.toLowerCase();\n }\n return (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n };\n\nexport const compareObject =\n <T extends Record<string, any>>(prop: string, sorter: Compare<any>, inc = true): Compare<any> =>\n (a: T, b: T) =>\n (inc ? 1 : -1) * sorter(a[prop], b[prop]);\n\nexport const compareMulti =\n <T extends Record<string, any>>(sorters: Compare<T>[]) =>\n (a: T, b: T) => {\n const sort = (i = 0): number => {\n const s = sorters[i](a, b);\n if (s === 0 && i < sorters.length - 1) {\n return sort(i + 1);\n } else {\n return s;\n }\n };\n\n return sort();\n };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\n/**\n * Tracer events form a graph.\n */\nexport type Event = {\n id: string;\n timestamp: number; // ms.\n duration?: number; // ms (float).\n value?: any;\n};\n\n/**\n * Event sink.\n */\n// TODO(burdon): Reconcile with log.trace.\nexport class Tracer {\n private readonly _events = new Map<string, Event[]>();\n\n private _recording = false;\n\n // TODO(burdon): Start/stop methods for recording data? By id?\n // Alternatively, enable subscriptions to track/compute series.\n\n // TODO(burdon): Hierarchical traces?\n\n get recording() {\n return this._recording;\n }\n\n keys() {\n return Array.from(this._events.keys());\n }\n\n get(id: string, filter?: Record<string, any>): Event[] | undefined {\n const events = this._events.get(id);\n if (filter) {\n return events?.filter((event) => Object.entries(filter).every(([key, value]) => event?.value[key] === value));\n }\n\n return events;\n }\n\n clear() {\n this._events.clear();\n }\n\n start() {\n this._recording = true;\n return this;\n }\n\n stop() {\n this._recording = false;\n return this;\n }\n\n emit(id: string, value?: any) {\n this._post(this._createEvent(id, value));\n }\n\n mark(id: string, value?: any): { start: number; end: () => void } {\n const event = this._createEvent(id, value);\n const start = performance.now();\n return {\n start,\n end: () => {\n event.duration = performance.now() - start;\n this._post(event);\n },\n };\n }\n\n private _createEvent(id: string, value?: any): Event {\n const event: Event = { id, timestamp: Date.now() };\n if (value !== undefined) {\n event.value = value;\n }\n\n return event;\n }\n\n private _post(event: Event) {\n if (this._recording) {\n defaultMap(this._events, event.id, []).push(event);\n }\n }\n}\n\n// TODO(burdon): Factor out (move to @dxos/log?)\n// TODO(burdon): Global singleton (e.g., `trace()`) or part of client services?\nexport const tracer = new Tracer();\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport type AsyncCallback<T> = (param: T) => Promise<void>;\n\nexport type Provider<T> = () => T;\n\nexport type MaybePromise<T> = T | Promise<T>;\n\n/**\n * All types that evaluate to false when cast to a boolean.\n */\nexport type Falsy = false | 0 | '' | null | undefined;\n\n/**\n * A function returning a value or a value itself.\n */\nexport type MaybeFunction<T> = T | (() => T);\n\n/**\n * Use with filter chaining instead of filter(Boolean) to preserve type.\n * NOTE: To filter by type:\n * items.filter((item: any): item is RangeSet<Decoration> => item instanceof RangeSet)\n */\n// TODO(burdon): Reconcile names.\nexport const isNotFalsy = <T>(value: T): value is Exclude<T, Falsy> => !!value;\nexport const nonNullable = <T>(value: T): value is NonNullable<T> => value !== null && value !== undefined;\nexport const isNotNullOrUndefined = <T>(value: T): value is Exclude<T, null | undefined> => value != null;\nexport const boolGuard = <T>(value: T | null | undefined): value is T => Boolean(value);\n\n/**\n * Get value from a provider.\n */\nexport const getAsyncValue = async <T>(value: MaybeFunction<MaybePromise<T>>): Promise<T> => {\n if (typeof value === 'function') {\n return (value as Function)();\n } else {\n return value;\n }\n};\n\nexport type MakeOptional<Type, Key extends keyof Type> = Omit<Type, Key> & Partial<Pick<Type, Key>>;\n\n/**\n * Remove keys with undefined values.\n */\nexport const stripUndefinedValues = <T extends { [index: string]: any }>(obj: T): T => {\n if (typeof obj === 'object') {\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n if (value === undefined) {\n delete obj[key];\n } else if (value !== null && typeof value === 'object') {\n stripUndefinedValues(value); // TODO(burdon): Test recursion.\n }\n });\n }\n\n return obj;\n};\n\n/**\n * Swap position of element within array.\n */\nexport const arrayMove = <T>(array: T[], from: number, to: number): Array<T> => {\n array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);\n return array;\n};\n\nexport const safeParseInt = (value: string | undefined, defaultValue?: number) => {\n try {\n const n = parseInt(value ?? '');\n return isNaN(n) ? defaultValue : n;\n } catch (err) {\n return defaultValue;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\nconst symbol = Symbol.for('dxos.instance-contexts');\n\nconst instanceContexts = ((globalThis as any)[symbol] ??= new WeakMap<\n any,\n {\n nextId: number;\n instanceIds: WeakMap<any, number>;\n }\n>());\n\n/**\n * Returns a unique instance id for a given object.\n * Ids are generated as incrementing numbers.\n * Ids are only unique within the scope of a given prototype.\n * Instances of different classes may have the same id.\n */\nexport const getPrototypeSpecificInstanceId = (instance: any): number => {\n const prototype = Object.getPrototypeOf(instance);\n const instanceCtx = defaultMap(instanceContexts as any, prototype, () => ({\n nextId: 0,\n instanceIds: new WeakMap(),\n }));\n\n let id = instanceCtx.instanceIds.get(instance);\n if (id === undefined) {\n id = instanceCtx.nextId++;\n instanceCtx.instanceIds.set(instance, id);\n }\n\n return id;\n};\n\nexport const getDebugName = (instance: any): string => {\n if (instance === null) {\n return 'null';\n }\n\n const prototype = Object.getPrototypeOf(instance);\n return `${prototype.constructor.name}#${getPrototypeSpecificInstanceId(instance)}`;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const sum = (values: number[]) => values.reduce((a, b) => a + b, 0);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const forEachAsync = <T>(items: T[], fn: (item: T, idx: number) => Promise<void>) => Promise.all(items.map(fn));\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Weak dictionary. It is a map that holds weak references to its values and allows garbage collection of values and keys.\n */\nexport class WeakDictionary<K, V extends object> implements Map<K, V> {\n private readonly _internal = new Map<K, WeakRef<V>>();\n private readonly _finalization = new FinalizationRegistry((cleanUpCallback: () => void) => {\n cleanUpCallback();\n });\n\n constructor(entries?: [K, V][]) {\n this._internal = new Map(entries?.map(([key, value]) => [key, new WeakRef(value)]));\n entries?.forEach(([key, value]) => this._register(key, value));\n }\n\n *entries(): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n keys(): IterableIterator<K> {\n return this._internal.keys();\n }\n\n *values(): IterableIterator<V> {\n for (const value of this._internal.values()) {\n const deref = value.deref();\n if (!deref) {\n continue;\n }\n yield deref;\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n get [Symbol.toStringTag](): string {\n return 'WeakDictionary';\n }\n\n get size(): number {\n return this._internal.size;\n }\n\n get(key: K): V | undefined {\n return this._internal.get(key)?.deref();\n }\n\n set(key: K, value: V): this {\n this._internal.set(key, new WeakRef(value));\n this._register(key, value);\n return this;\n }\n\n has(key: K): boolean {\n return this._internal.has(key) && this._internal.get(key)!.deref() !== undefined;\n }\n\n delete(key: K): boolean {\n const value = this._internal.get(key)?.deref();\n if (value) {\n this._unregister(value);\n }\n return this._internal.delete(key);\n }\n\n clear(): void {\n this._internal.forEach((value) => {\n const v = value.deref();\n if (v) {\n this._unregister(v);\n }\n });\n\n this._internal.clear();\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._internal.forEach((value, key) => {\n const v = value.deref();\n if (v) {\n callbackfn(v, key, this);\n }\n });\n }\n\n private _register(key: K, value: V) {\n this._finalization.register(\n value,\n () => {\n this._internal.delete(key);\n },\n value,\n );\n }\n\n private _unregister(value: V) {\n this._finalization.unregister(value);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const mapValues = <T, U>(obj: Record<string, T>, fn: (value: T, key: string) => U): Record<string, U> => {\n const result: Record<string, U> = {};\n Object.keys(obj).forEach((key) => {\n result[key] = fn(obj[key], key);\n });\n return result;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.dispose ??= Symbol('Symbol.dispose');\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.asyncDispose ??= Symbol('Symbol.asyncDispose');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport './explicit-resource-management-polyfill';\n\n/**\n * Run function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * using _ = defer(() => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const defer = (fn: () => void): Disposable => new DeferGuard(fn);\n\nclass DeferGuard {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => void) {}\n\n [Symbol.dispose]() {\n const result = this._fn();\n if ((result as any) instanceof Promise) {\n throw new Error('Async functions in defer are not supported. Use deferAsync instead.');\n }\n }\n}\n\n/**\n * Run async function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * await using _ = deferAsync(async () => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const deferAsync = (fn: () => Promise<void>): AsyncDisposable => new DeferAsyncGuard(fn);\n\nclass DeferAsyncGuard implements AsyncDisposable {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => Promise<void>) {}\n\n async [Symbol.asyncDispose]() {\n await this._fn();\n }\n}\n"],
5
- "mappings": "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,GAAgBvD,IAAAA;ACdb,IAAMwD,QAAQ,CAAOC,KAAgBhG,QAAsC,IAAIiG,SAASD,KAAKhG,GAAAA;AAE7F,IAAMiG,WAAN,MAAMA;;;;;EAKX1C,YACmB2C,MACAC,MACjB;SAFiBD,OAAAA;SACAC,OAAAA;EAChB;EAEH,IAAInG,MAAS;AACX,WAAO,KAAKmG;EACd;EAEA,IAAIvG,QAAe;AACjB,WAAO,KAAKsG,KAAKvF,IAAI,KAAKwF,IAAI;EAChC;EAEAC,SAASxG,OAAiC;AACxC,QAAI,CAAC,KAAKsG,KAAKzB,IAAI,KAAK0B,IAAI,GAAG;AAC7B,WAAKD,KAAKnF,IAAI,KAAKoF,MAAMvG,KAAAA;IAC3B;AACA,WAAO;EACT;EAEAyG,KAA0DrG,KAAsC;AAC9F,WAAO+F,MAAM,KAAKnG,OAAOI,GAAAA;EAC3B;AACF;AC7BA,IAAMsG,mBAAmB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMK,IAAMC,cAAN,MAAMA;;;;;;;;;;;;;;EAcXhD,YAA6BiD,WAAWF,kBAAkB;SAA7BE,WAAAA;AAC3B,QAAIA,SAAS1G,WAAW,KAAK;AAC3B,YAAM,IAAI2F,MAAM,sCAAA;IAClB;AACA,SAAKe,WAAWA;EAClB;;;;;;;;;;;EAYAC,SAASC,WAAmBC,QAAQ,GAAGC,YAAY,KAAK;AACtD,UAAMC,QAAQH,UAAUI,MAAM,QAAA;AAC9B,QAAI,CAACD,OAAO;AACV,YAAM,IAAIpB,MAAM,EAAA;IAClB;AAEA,UAAMsB,QAAQF,MAAMb,IAAI,CAACgB,MAAMC,SAASD,GAAG,EAAA,CAAA;AAC3C,UAAME,aAAa,KAAKC,UAAUJ,OAAOJ,KAAAA;AAEzC,WAAOO,WAAWlB,IAAI,CAACgB,MAAM,KAAKR,SAASQ,CAAAA,CAAE,EAAEI,KAAKR,SAAAA;EACtD;;;;;;;EAQAO,UAAUJ,OAAiBhE,QAAgB;AACzC,UAAMjD,SAASiH,MAAMjH;AACrB,QAAIiD,SAASjD,QAAQ;AACnB,YAAM,IAAI2F,MAAM,yCAAA;IAClB;AAGA,UAAM4B,UAAWv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",
6
- "names": ["import_invariant", "import_node_util", "import_keys", "assignDeep", "doc", "path", "value", "invariant", "length", "parent", "key", "slice", "at", "createBinder", "obj", "fn", "bind", "async", "util", "promisify", "BitField", "get", "data", "idx", "bit", "set", "count", "begin", "end", "i", "invert", "result", "Uint8Array", "and", "first", "second", "findIndexes", "opts", "start", "push", "ones", "res", "Math", "ceil", "fill", "bitInLastByte", "zeros", "Callback", "call", "args", "_callback", "callIfSet", "callback", "isSet", "createSetDispatch", "handlers", "Proxy", "target", "prop", "forEach", "handler", "method", "apply", "MAX_SERIALIZATION_LENGTH", "ComplexSet", "constructor", "_projection", "values", "_values", "Map", "add", "toString", "inspectObject", "toJSON", "size", "Array", "from", "inspect", "custom", "clear", "delete", "callbackfn", "thisArg", "has", "Symbol", "iterator", "entries", "keys", "toStringTag", "makeSet", "projection", "BoundComplexSet", "ComplexMap", "_keyProjection", "_keys", "keyDeleted", "valueDeleted", "primitive", "raise", "Error", "makeMap", "keyProjection", "BoundComplexMap", "deferFunction", "fnProvider", "entry", "map", "MapEntry", "_map", "_key", "orInsert", "deep", "DEFAULT_WORDLIST", "HumanHasher", "wordlist", "humanize", "hexdigest", "words", "separator", "pairs", "match", "bytes", "x", "parseInt", "compressed", "_compress", "join", "segSize", "segments", "concat", "checksums", "reduce", "acc", "curr", "hasher", "Buffer", "ArrayBuffer", "PublicKey", "stringify", "toHex", "exponentialBackoffInterval", "cb", "initialInterval", "interval", "repeat", "timeoutId", "setTimeout", "clearTimeout", "arraysEqual", "a", "b", "arrayToBuffer", "array", "buffer", "byteOffset", "byteLength", "bufferToArray", "stringToArray", "string", "arrayToString", "MAX_DEPTH", "jsonReplacer", "type", "isArray", "jsonify", "depth", "visitedObjects", "WeakSet", "Object", "jsonKeyReplacer", "options", "fromHex", "truncate", "defaultMap", "def", "undefined", "inferObjectOrder", "objectMap", "order", "orderedObjects", "id", "objects", "ids", "Set", "inferRecordOrder", "assign", "filter", "isNode", "process", "versions", "node", "mobileAndTabletCheck", "check", "test", "substr", "navigator", "userAgent", "vendor", "window", "opera", "iosCheck", "includes", "platform", "document", "safariCheck", "getHostPlatform", "userAgentData", "toLowerCase", "startsWith", "randomInt", "max", "min", "floor", "random", "range", "n", "rangeFromTo", "to", "accessBy", "accessor", "median", "mid", "numericalValues", "total", "sorted", "v", "isNaN", "sort", "mean", "reduceSet", "reduceGroupBy", "reduceSeries", "reducer", "events", "state", "initialState", "event", "createGroupReducer", "groupBy", "sub", "getDate", "Date", "createBucketReducer", "period", "series", "timestamp", "bucket", "getTime", "instanceTag", "safeInstanceof", "tag", "prototype", "defineProperty", "hasInstance", "instance", "safeParseJson", "defaultValue", "JSON", "parse", "err", "compareScalar", "inc", "compareString", "caseInsensitive", "compareObject", "sorter", "compareMulti", "sorters", "s", "Tracer", "_events", "_recording", "recording", "every", "stop", "emit", "_post", "_createEvent", "mark", "performance", "now", "duration", "tracer", "isNotFalsy", "nonNullable", "isNotNullOrUndefined", "boolGuard", "Boolean", "getAsyncValue", "stripUndefinedValues", "arrayMove", "splice", "safeParseInt", "symbol", "for", "instanceContexts", "globalThis", "WeakMap", "getPrototypeSpecificInstanceId", "getPrototypeOf", "instanceCtx", "nextId", "instanceIds", "getDebugName", "name", "sum", "forEachAsync", "items", "Promise", "all", "WeakDictionary", "_internal", "_finalization", "FinalizationRegistry", "cleanUpCallback", "WeakRef", "_register", "deref", "_unregister", "register", "unregister", "mapValues", "dispose", "asyncDispose", "defer", "DeferGuard", "_fn", "deferAsync", "DeferAsyncGuard"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Initialize a deeply nested object.\n * @returns The value of the prop after assignment.\n */\nexport const assignDeep = <T>(doc: any, path: (string | number)[], value: T): T => {\n invariant(path.length > 0);\n let parent = doc;\n for (const key of path.slice(0, -1)) {\n parent[key] ??= {};\n parent = parent[key];\n }\n parent[path.at(-1)!] = value;\n return parent[path.at(-1)!]; // NOTE: We can't just return value here since doc's getter might return a different object.\n};\n\nexport const getDeep = (doc: any, path: (string | number)[]): unknown | undefined => {\n let parent = doc;\n for (const key of path) {\n parent = parent?.[key];\n }\n return parent;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport util from 'node:util';\n\n/**\n * Function binder replaces pify.\n */\n// TODO(burdon): Replace pify everywhere.\nexport const createBinder = (obj: any) => ({\n fn: (fn: Function) => fn.bind(obj),\n async: (fn: Function) => util.promisify(fn.bind(obj)),\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Bitfield encodes indices from MSB to LSB.\n * Index 0 is the MSB of the first byte.\n *\n *\n * #0 #1 #2 #3\n * 01010101 11110000 00001111 01010101\n * ^ ^\n * MSB LSB\n */\nexport class BitField {\n static get(data: Uint8Array, idx: number): boolean {\n const bit = (data[idx >> 3] >> (7 - (idx % 8))) & 0x1;\n return !!bit;\n }\n\n static set(data: Uint8Array, idx: number, value: boolean) {\n if (value) {\n data[idx >> 3] = data[idx >> 3] | (1 << (7 - (idx % 8)));\n } else {\n data[idx >> 3] = data[idx >> 3] & ~(1 << (7 - (idx % 8)));\n }\n }\n\n /**\n * [start; end)\n */\n static count(data: Uint8Array, begin: number, end: number): number {\n let count = 0;\n for (let i = begin; i < end; i++) {\n const bit = (data[i >> 3] >> (7 - (i % 8))) & 0x1;\n count += bit;\n }\n return count;\n }\n\n static invert(data: Uint8Array): Uint8Array {\n const result = new Uint8Array(data.length);\n for (let i = 0; i < data.length; i++) {\n result[i] = ~data[i];\n }\n return result;\n }\n\n static and(first: Uint8Array, second: Uint8Array) {\n invariant(first.length === second.length, 'Bitfields must be of the same length');\n const result = new Uint8Array(first.length);\n for (let i = 0; i < first.length; i++) {\n result[i] = first[i] & second[i];\n }\n return result;\n }\n\n static findIndexes(data: Uint8Array, opts: { start?: number; end?: number; value?: boolean } = {}): number[] {\n const { start = 0, end = data.length * 8, value = true } = opts;\n\n const result = [];\n\n for (let i = start; i < end; i++) {\n if (BitField.get(data, i) === value) {\n result.push(i);\n }\n }\n return result;\n }\n\n static ones(count: number): Uint8Array {\n const res = new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0xff);\n\n // Note: We need to calculate last byte of bitfield.\n const bitInLastByte = Math.ceil(count % 8);\n res[res.length - 1] = 0xff << (8 - bitInLastByte);\n\n return res;\n }\n\n static zeros(count: number): Uint8Array {\n return new Uint8Array(Math.ceil(Math.ceil(count) / 8)).fill(0);\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Represents a callback that can be set once.\n *\n * Common usage is dependency injection.\n * In contrast to events, callbacks can only have one handler,\n * are executed synchronously,\n * and can return results.\n */\n// TODO(burdon): Move to @dxos/async.\nexport class Callback<T extends (...args: any[]) => any> {\n private _callback: T | undefined;\n\n public call(...args: Parameters<T>): ReturnType<T> {\n invariant(this._callback, 'Callback not set');\n return this._callback(...args);\n }\n\n public callIfSet(...args: Parameters<T>): ReturnType<T> | undefined {\n return this._callback?.(...args);\n }\n\n public set(callback: T) {\n invariant(!this._callback, 'Callback already set');\n this._callback = callback;\n }\n\n public isSet() {\n return !!this._callback;\n }\n}\n\nexport type SetCallbacks<T> = { handlers: Set<T> };\n\n/**\n * Create a fan-out callback handler.\n * NOTE: Methods cannot return values.\n */\nexport const createSetDispatch = <T extends {}>({ handlers }: SetCallbacks<T>) => {\n type Obj = { [i: string | symbol]: any };\n return new Proxy<any>(\n {\n handlers,\n },\n {\n get: (target: Obj, prop) => {\n return (...args: any[]) => {\n handlers.forEach((handler: Obj) => {\n const method = handler[prop];\n if (method) {\n method.apply(handler, args);\n }\n });\n };\n },\n },\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { inspectObject, raise } from '@dxos/debug';\n\nexport type Primitive = string | number | boolean | null | undefined;\n\nexport type PrimitiveProjection<T> = (value: T) => Primitive;\n\nconst MAX_SERIALIZATION_LENGTH = 10;\n\n/**\n * A set implementation that can hold complex values (like Buffer).\n *\n * The user must provide a projection function which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n *\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexSet<T> implements Set<T> {\n private readonly _values = new Map<Primitive, T>();\n\n // prettier-ignore\n constructor(\n private readonly _projection: PrimitiveProjection<T>,\n values?: Iterable<T> | null,\n ) {\n if (values) {\n for (const value of values) {\n this.add(value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n add(value: T): this {\n this._values.set(this._projection(value), value);\n return this;\n }\n\n clear(): void {\n this._values.clear();\n }\n\n delete(value: T): boolean {\n return this._values.delete(this._projection(value));\n }\n\n forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._values.forEach((value) => callbackfn(value, value, this));\n }\n\n has(value: T): boolean {\n return this._values.has(this._projection(value));\n }\n\n get size(): number {\n return this._values.size;\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this._values.values();\n }\n\n *entries(): IterableIterator<[T, T]> {\n for (const value of this._values.values()) {\n yield [value, value];\n }\n }\n\n keys(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n values(): IterableIterator<T> {\n return this[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexSet';\n }\n}\n\nexport type ComplexSetConstructor<T> = new (values?: Iterable<T> | null) => ComplexSet<T>;\n\n/**\n * Create a subclass of ComplexSet with predefined projection function.\n */\nexport const makeSet = <T>(projection: PrimitiveProjection<T>): ComplexSetConstructor<T> => {\n return class BoundComplexSet extends ComplexSet<T> {\n constructor(values?: Iterable<T> | null) {\n super(projection, values);\n }\n };\n};\n\n/**\n * A map implementation that can hold complex values (like Buffer) as keys.\n * The user must provide a projection function for map keys which returns a primitive\n * representation of the complex value. This function must be 1-to-1 mapping.\n * Look at `../complex.test.ts` for usage examples.\n */\nexport class ComplexMap<K, V> implements Map<K, V> {\n private readonly _keys = new Map<Primitive, K>();\n private readonly _values = new Map<Primitive, V>();\n\n // prettier-ignore\n constructor(\n private readonly _keyProjection: PrimitiveProjection<K>,\n entries?: readonly (readonly [K, V])[] | null,\n ) {\n if (entries) {\n for (const [key, value] of entries) {\n this.set(key, value);\n }\n }\n }\n\n toString() {\n return inspectObject(this);\n }\n\n toJSON() {\n return this._values.size > MAX_SERIALIZATION_LENGTH\n ? { size: this._values.size }\n : Array.from(this._values.values());\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n clear(): void {\n this._keys.clear();\n this._values.clear();\n }\n\n delete(key: K): boolean {\n const keyDeleted = this._keys.delete(this._keyProjection(key));\n const valueDeleted = this._values.delete(this._keyProjection(key));\n return keyDeleted || valueDeleted;\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._keys.forEach((key, primitive) =>\n callbackfn(this._values.get(primitive) ?? raise(new Error('Map corrupted.')), key, this),\n );\n }\n\n get(key: K): V | undefined {\n return this._values.get(this._keyProjection(key));\n }\n\n has(key: K): boolean {\n return this._keys.has(this._keyProjection(key));\n }\n\n set(key: K, value: V): this {\n const primitive = this._keyProjection(key);\n this._keys.set(primitive, key);\n this._values.set(primitive, value);\n return this;\n }\n\n get size(): number {\n return this._keys.size;\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [primitive, key] of this._keys) {\n const value = this._values.get(primitive) ?? raise(new Error('Map corrupted.'));\n yield [key, value];\n }\n }\n\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]();\n }\n\n keys(): IterableIterator<K> {\n return this._keys.values();\n }\n\n values(): IterableIterator<V> {\n return this._values.values();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexMap';\n }\n}\n\nexport type ComplexMapConstructor<K> = new <V>(entries?: readonly (readonly [K, V])[] | null) => ComplexMap<K, V>;\n\n/**\n * Create a subclass of ComplexMap with predefined key projection function.\n */\nexport const makeMap = <K>(keyProjection: PrimitiveProjection<K>): ComplexMapConstructor<K> =>\n class BoundComplexMap<V> extends ComplexMap<K, V> {\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(keyProjection, entries);\n }\n };\n", "/**\n * Wraps a function provider in a function that will defer the execution of the provided function.\n *\n * Example:\n *\n * ```typescript\n * const fn = deferFunction(() => impl);\n *\n * // Impl can be defined after the usage.\n * const impl = () => {\n * console.log('Hello World!')\n * }\n * ```\n */\n//\n// Copyright 2022 DXOS.org\n//\n\nexport const deferFunction =\n <T extends (...args: any[]) => any>(fnProvider: () => T) =>\n (...args: Parameters<T>): ReturnType<T> =>\n fnProvider()(...args);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Inspired by https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.entry\n */\nexport const entry = <K, V>(map: Map<K, V>, key: K): MapEntry<K, V, undefined> => new MapEntry(map, key);\n\nexport class MapEntry<K, V, U> {\n /**\n * @internal\n */\n // prettier-ignore\n constructor(\n private readonly _map: Map<K, V>,\n private readonly _key: K,\n ) {}\n\n get key(): K {\n return this._key;\n }\n\n get value(): V | U {\n return this._map.get(this._key) as V | U;\n }\n\n orInsert(value: V): MapEntry<K, V, never> {\n if (!this._map.has(this._key)) {\n this._map.set(this._key, value);\n }\n return this as any;\n }\n\n deep<K1, V1>(this: MapEntry<K, Map<K1, V1>, Map<K1, V1>>, key: K1): MapEntry<K1, V1, undefined> {\n return entry(this.value, key);\n }\n}\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { PublicKey, type PublicKeyLike } from '@dxos/keys';\n\n// From https://github.com/SEBv15/humanhash/blob/166c1a6f70d854fe6767cdd76be1237112d4eaf1/index.js\n\nconst DEFAULT_WORDLIST = [\n 'ack',\n 'alabama',\n 'alanine',\n 'alaska',\n 'alpha',\n 'angel',\n 'apart',\n 'april',\n 'arizona',\n 'arkansas',\n 'artist',\n 'asparagus',\n 'aspen',\n 'august',\n 'autumn',\n 'avocado',\n 'bacon',\n 'bakerloo',\n 'batman',\n 'beer',\n 'berlin',\n 'beryllium',\n 'black',\n 'blossom',\n 'blue',\n 'bluebird',\n 'bravo',\n 'bulldog',\n 'burger',\n 'butter',\n 'california',\n 'carbon',\n 'cardinal',\n 'carolina',\n 'carpet',\n 'cat',\n 'ceiling',\n 'charlie',\n 'chicken',\n 'coffee',\n 'cola',\n 'cold',\n 'colorado',\n 'comet',\n 'connecticut',\n 'crazy',\n 'cup',\n 'dakota',\n 'december',\n 'delaware',\n 'delta',\n 'diet',\n 'don',\n 'double',\n 'early',\n 'earth',\n 'east',\n 'echo',\n 'edward',\n 'eight',\n 'eighteen',\n 'eleven',\n 'emma',\n 'enemy',\n 'equal',\n 'failed',\n 'fanta',\n 'fifteen',\n 'fillet',\n 'finch',\n 'fish',\n 'five',\n 'fix',\n 'floor',\n 'florida',\n 'football',\n 'four',\n 'fourteen',\n 'foxtrot',\n 'freddie',\n 'friend',\n 'fruit',\n 'gee',\n 'georgia',\n 'glucose',\n 'golf',\n 'green',\n 'grey',\n 'hamper',\n 'happy',\n 'harry',\n 'hawaii',\n 'helium',\n 'high',\n 'hot',\n 'hotel',\n 'hydrogen',\n 'idaho',\n 'illinois',\n 'india',\n 'indigo',\n 'ink',\n 'iowa',\n 'island',\n 'item',\n 'jersey',\n 'jig',\n 'johnny',\n 'juliet',\n 'july',\n 'jupiter',\n 'kansas',\n 'kentucky',\n 'kilo',\n 'king',\n 'kitten',\n 'lactose',\n 'lake',\n 'lamp',\n 'lemon',\n 'leopard',\n 'lima',\n 'lion',\n 'lithium',\n 'london',\n 'louisiana',\n 'low',\n 'magazine',\n 'magnesium',\n 'maine',\n 'mango',\n 'march',\n 'mars',\n 'maryland',\n 'massachusetts',\n 'may',\n 'mexico',\n 'michigan',\n 'mike',\n 'minnesota',\n 'mirror',\n 'mississippi',\n 'missouri',\n 'mobile',\n 'mockingbird',\n 'monkey',\n 'montana',\n 'moon',\n 'mountain',\n 'muppet',\n 'music',\n 'nebraska',\n 'neptune',\n 'network',\n 'nevada',\n 'nine',\n 'nineteen',\n 'nitrogen',\n 'north',\n 'november',\n 'nuts',\n 'october',\n 'ohio',\n 'oklahoma',\n 'one',\n 'orange',\n 'oranges',\n 'oregon',\n 'oscar',\n 'oven',\n 'oxygen',\n 'papa',\n 'paris',\n 'pasta',\n 'pennsylvania',\n 'pip',\n 'pizza',\n 'pluto',\n 'potato',\n 'princess',\n 'purple',\n 'quebec',\n 'queen',\n 'quiet',\n 'red',\n 'river',\n 'robert',\n 'robin',\n 'romeo',\n 'rugby',\n 'sad',\n 'salami',\n 'saturn',\n 'september',\n 'seven',\n 'seventeen',\n 'shade',\n 'sierra',\n 'single',\n 'sink',\n 'six',\n 'sixteen',\n 'skylark',\n 'snake',\n 'social',\n 'sodium',\n 'solar',\n 'south',\n 'spaghetti',\n 'speaker',\n 'spring',\n 'stairway',\n 'steak',\n 'stream',\n 'summer',\n 'sweet',\n 'table',\n 'tango',\n 'ten',\n 'tennessee',\n 'tennis',\n 'texas',\n 'thirteen',\n 'three',\n 'timing',\n 'triple',\n 'twelve',\n 'twenty',\n 'two',\n 'uncle',\n 'undress',\n 'uniform',\n 'uranus',\n 'utah',\n 'vegan',\n 'venus',\n 'vermont',\n 'victor',\n 'video',\n 'violet',\n 'virginia',\n 'washington',\n 'west',\n 'whiskey',\n 'white',\n 'william',\n 'winner',\n 'winter',\n 'wisconsin',\n 'wolfram',\n 'wyoming',\n 'xray',\n 'yankee',\n 'yellow',\n 'zebra',\n 'zulu',\n];\n\n/**\n * humanhash: Human-readable representations of digests.\n */\nexport class HumanHasher {\n /**\n * Transforms hex digests to human-readable strings.\n *\n * The format of these strings will look something like:\n * `victor-bacon-zulu-lima`. The output is obtained by compressing the input\n * digest to a fixed number of bytes, then mapping those bytes to one of 256\n * words. A default wordlist is provided, but you can override this if you\n * prefer.\n * As long as you use the same wordlist, the output will be consistent (i.e.\n * the same digest will always render the same representation).\n *\n * @param wordlist A list of exactly 256 words to choose from\n */\n constructor(private readonly wordlist = DEFAULT_WORDLIST) {\n if (wordlist.length !== 256) {\n throw new Error('Wordlist must have exactly 256 items');\n }\n this.wordlist = wordlist;\n }\n\n /**\n * Humanize a given hexadecimal digest.\n *\n * Change the number of words output by specifying `words`. Change the\n * word separator with `separator`.\n *\n * @param hexdigest A string of hexadecimal characters to humanize\n * @param words How many words to output (more = safer)\n * @param separator The string used to seperate the words\n */\n humanize(hexdigest: string, words = 4, separator = '-') {\n const pairs = hexdigest.match(/(..?)/g);\n if (!pairs) {\n throw new Error('');\n }\n\n const bytes = pairs.map((x) => parseInt(x, 16));\n const compressed = this._compress(bytes, words);\n\n return compressed.map((x) => this.wordlist[x]).join(separator);\n }\n\n /**\n * Compress a list of byte values to a fixed target length.\n *\n * @param bytes A list of bytes (numbers from 0-254)\n * @param target The number of bytes to return / compress to\n */\n _compress(bytes: number[], target: number) {\n const length = bytes.length;\n if (target > length) {\n throw new Error('Fewer input bytes than requested output');\n }\n\n // Calculate the segment size (divide and round down)\n const segSize = (length / target) >> 0;\n\n // Split 'bytes' array into 'target' number of segments.\n const segments = [];\n for (let i = 0; i < segSize * target; i += segSize) {\n segments.push(bytes.slice(i, i + segSize));\n }\n\n // Catch any left-over bytes in the last segment.\n segments[segments.length - 1] = segments[segments.length - 1].concat(bytes.slice(target * segSize));\n\n const checksums = segments.map((x) => x.reduce((acc, curr) => acc ^ curr));\n return checksums;\n }\n}\n\nconst hasher = new HumanHasher();\n\nexport const humanize = (value: PublicKeyLike): string => {\n if (value instanceof Buffer || value instanceof Uint8Array || value instanceof ArrayBuffer) {\n value = PublicKey.stringify(value);\n } else if (value instanceof PublicKey) {\n value = value.toHex();\n }\n\n return hasher.humanize(value);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\n/**\n * Runs the callback in an exponentially increasing interval.\n * @returns Callback to clear the interval.\n */\nexport const exponentialBackoffInterval = (cb: () => void, initialInterval: number): (() => void) => {\n let interval = initialInterval;\n const repeat = () => {\n cb();\n interval *= 2;\n timeoutId = setTimeout(repeat, interval);\n };\n\n let timeoutId = setTimeout(repeat, interval);\n return () => clearTimeout(timeoutId);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { humanize } from './human-hash';\nimport { arrayToBuffer } from './uint8array';\n\nconst MAX_DEPTH = 5;\n\n/**\n * JSON.stringify replacer.\n */\nexport function jsonReplacer(this: any, key: string, value: any): any {\n // TODO(burdon): Why is this represented as `{ type: 'Buffer', data }`.\n if (value !== null && typeof value === 'object' && typeof value[inspect.custom] === 'function') {\n return value[inspect.custom]();\n }\n\n if (value !== null && typeof value === 'object' && value.type === 'Buffer' && Array.isArray(value.data)) {\n if (value.data.length === 32) {\n const key = Buffer.from(value.data);\n return `[${humanize(key)}]:[${PublicKey.stringify(key)}]`;\n } else {\n return Buffer.from(value.data).toString('hex');\n }\n }\n\n // TODO(burdon): Option.\n // code if (Array.isArray(value)) {\n // code return value.length;\n // code } else {\n return value;\n // code }\n}\n\n/**\n * Recursively converts an object into a JSON-compatible object.\n */\nexport const jsonify = (value: any, depth = 0, visitedObjects = new WeakSet<any>()): any => {\n if (depth > MAX_DEPTH) {\n return null;\n } else if (typeof value === 'function') {\n return null;\n } else if (typeof value === 'object' && value !== null) {\n if (visitedObjects.has(value)) {\n return null;\n }\n visitedObjects.add(value);\n\n try {\n if (value instanceof Uint8Array) {\n return arrayToBuffer(value).toString('hex');\n } else if (Array.isArray(value)) {\n return value.map((x) => jsonify(x, depth + 1, visitedObjects));\n } else if (typeof value.toJSON === 'function') {\n return value.toJSON();\n } else {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = jsonify(value[key], depth + 1, visitedObjects);\n }\n return res;\n }\n } finally {\n visitedObjects.delete(value);\n }\n } else {\n return value;\n }\n};\n\nexport type JsonKeyOptions = {\n truncate?: boolean;\n humanize?: boolean;\n};\n\nexport const jsonKeyReplacer =\n (options: JsonKeyOptions = {}) =>\n (key: string, value: any) => {\n if (typeof value === 'string') {\n const key = PublicKey.fromHex(value);\n if (key.toHex() === value) {\n // TODO(burdon): Remove humanize.\n return options.humanize ? humanize(key) : options.truncate ? key.truncate() : key.toHex();\n }\n }\n\n return value;\n };\n", "//\n// Copyright 2021 DXOS.org\n//\n\nexport const arraysEqual = (a: Uint8Array, b: Uint8Array): boolean => {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Non-copying conversion of Uint8Array to Buffer.\n * The resulting buffer will share the same allocated memory as the Uint8Array.\n */\nexport const arrayToBuffer = (array: Uint8Array): Buffer => {\n return Buffer.from(array.buffer, array.byteOffset, array.byteLength);\n};\n\n/**\n * Non-copying conversion of Buffer to Uint8Array.\n * The resulting Uint8Array will share the same allocated memory as the Buffer.\n */\nexport const bufferToArray = (buffer: Buffer): Uint8Array => {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n};\n\nexport const stringToArray = (string: string): Uint8Array => bufferToArray(Buffer.from(string, 'hex'));\n\nexport const arrayToString = (array: Uint8Array): string => arrayToBuffer(array).toString('hex');\n", "//\n// Copyright 2020 DXOS.org\n//\n\n/**\n * Get or set map value.\n */\nexport const defaultMap = <K, V>(map: Map<K, V>, key: K, def: V | (() => V)) => {\n let value = map.get(key);\n if (value === undefined) {\n value = typeof def === 'function' ? (def as () => V)() : def;\n map.set(key, value);\n }\n\n return value;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport type IdOrder = string[];\n\ntype ObjectOrderAccumulator<T> = { objects: T[]; ids: Set<string> };\n\n/**\n * Uses an array of string id’s to order a map of objects, returning an array of those objects. Objects not listed by\n * the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferObjectOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): T[] => {\n const orderedObjects = order.reduce(\n (acc, id) => {\n if (id in objectMap) {\n acc.objects.push(objectMap[id]);\n acc.ids.add(id);\n }\n return acc;\n },\n { objects: [], ids: new Set() } as ObjectOrderAccumulator<T>,\n );\n const { objects } = Object.keys(objectMap).reduce((acc, id) => {\n if (!acc.ids.has(id)) {\n acc.objects.push(objectMap[id]);\n }\n return acc;\n }, orderedObjects);\n return objects;\n};\n\n/**\n * Uses an array of string id’s to order a map of objects, returning a new map with the keys in the prescribed order.\n * Objects not listed by the array of id’s occur later in the resulting array of objects based on the map’s key order.\n * @param objectMap\n * @param order\n */\nexport const inferRecordOrder = <T = any>(objectMap: Record<string, T>, order: IdOrder = []): Record<string, T> => {\n return Object.assign(\n order\n .filter((id) => id in objectMap)\n .reduce((acc: Record<string, null>, id) => {\n acc[id] = null;\n return acc;\n }, {}),\n objectMap,\n );\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\n// NOTE: `!=` is required.\nexport const isNode = () => typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n/* eslint-disable */\n\n// From https://stackoverflow.com/a/11381730/2804332.\nexport const mobileAndTabletCheck = () => {\n let check = false;\n ((a) => { 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))) { check = true; } })(navigator.userAgent || navigator.vendor || (window as any).opera);\n return check;\n};\n\n/* eslint-enable */\n\n// From https://stackoverflow.com/a/9039885\nexport const iosCheck = () => {\n return (\n ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n );\n};\n\n// From https://stackoverflow.com/a/23522755/2804332\nexport const safariCheck = () =>\n typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Retrieve the host platform in a best-effort way with normalized output.\n */\n// From https://flaming.codes/posts/how-to-determine-os-in-browser.\nexport const getHostPlatform = () => {\n if (!('navigator' in window)) {\n return 'unknown';\n }\n\n // Use the modern 'web hints' provied by\n // 'userAgentData' if available, else use\n // the deprecated 'platform' as fallback.\n const platform = ((navigator as any).userAgentData?.platform || navigator.platform)?.toLowerCase();\n if (platform.startsWith('win')) {\n return 'windows';\n } else if (platform.startsWith('mac')) {\n return 'macos';\n } else if (platform.startsWith('ipad') || platform.startsWith('iphone') || platform.startsWith('ipod')) {\n return 'ios';\n } else if (platform.startsWith('linux')) {\n return 'linux';\n } else {\n return 'unknown';\n }\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\n// TODO(burdon): Random class utility.\n// TODO(burdon): Make object { min, max }.\nexport const randomInt = (max: number, min: number) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport const range = (n: number) => Array.from(Array(n).keys());\n\nexport const rangeFromTo = (from: number, to: number) => range(to - from).map((i) => i + from);\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Factor out.\n// TODO(burdon): Consider mathjs for variance, standard deviations, etc.\n// https://www.npmjs.com/package/mathjs\n\nimport { defaultMap } from './map';\n\nexport type Accessor<T, V> = string | ((value: T) => V);\n\nexport const accessBy = <T, V>(value: T, accessor: Accessor<T, V>) =>\n typeof accessor === 'function' ? accessor(value) : (value as Record<any, any>)[accessor];\n\nexport const median = (values: number[]) => {\n const mid = Math.floor(values.length / 2);\n if (values.length % 2 === 1) {\n return values[mid];\n } else {\n return (values[mid - 1] + values[mid]) / 2;\n }\n};\n\n// TODO(burdon): Value Proto.\nexport type NumericalValues = {\n min?: number;\n max?: number;\n mean?: number;\n median?: number;\n total: number;\n count: number;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const numericalValues = <T>(values: T[], accessor: Accessor<T, number>) => {\n const result: NumericalValues = { total: 0, count: 0 };\n\n const sorted: number[] = values\n .map((value) => {\n const v = accessBy(value, accessor);\n if (v === undefined || isNaN(v)) {\n return undefined;\n }\n\n result.total += v;\n if (result.min === undefined || v < result.min) {\n result.min = v;\n }\n if (result.max === undefined || v > result.max) {\n result.max = v;\n }\n\n return v;\n })\n .filter((value) => value !== undefined)\n .sort((a, b) => a! - b!) as number[];\n\n if (sorted.length) {\n Object.assign(result, {\n count: sorted.length,\n mean: result.total / sorted.length,\n median: median(sorted),\n });\n }\n\n return result;\n};\n\n/**\n * Returns an array of unique values.\n */\nexport const reduceSet = <T, V>(values: T[], accessor: Accessor<T, V>): Set<V> => {\n return values.reduce((values, value) => {\n const v = accessBy(value, accessor);\n values.add(v);\n return values;\n }, new Set<V>());\n};\n\n/**\n * Returns an object containing values grouped by the given key accessor.\n */\nexport const reduceGroupBy = <T, K>(values: T[], accessor: Accessor<T, K>): Map<K, T[]> => {\n return values.reduce((values, value) => {\n const key = accessBy(value, accessor);\n defaultMap(values, key, []).push(value);\n return values;\n }, new Map<K, T[]>());\n};\n\n/**\n * Generic composable reducer interface.\n */\nexport interface Reducer<T, S> {\n /**\n * Get initial state.\n */\n initialState(): S;\n\n /**\n * Apply event to state.\n */\n reduce(state: S, event: T): S;\n}\n\n/**\n * Applies the reducer to the array of values.\n */\nexport const reduceSeries = <T, S>(reducer: Reducer<T, S>, events: T[]): S => {\n const state = reducer.initialState();\n for (const event of events) {\n reducer.reduce(state, event);\n }\n\n return state;\n};\n\n/**\n * Reducer to group values.\n */\nexport const createGroupReducer = <T, S>(\n groupBy: (value: T) => string,\n sub: Reducer<T, S>,\n): Reducer<T, Record<string, S>> => ({\n initialState: () => ({}),\n reduce: (state: Record<string, S>, event: T) => {\n const key = groupBy(event);\n state[key] = sub.reduce(state[key] ?? sub.initialState(), event);\n return state;\n },\n});\n\nexport type TimeRecord = { timestamp: Date | number | string };\nexport type TimeBucket = { start: number; period: number; count: number };\n\nexport const getDate = (value: Date | number | string): Date => (value instanceof Date ? value : new Date(value));\n\n/**\n * Reducer to group by time period.\n */\nexport const createBucketReducer = <T extends TimeRecord>(period: number): Reducer<T, TimeBucket[]> => ({\n initialState: () => [],\n reduce: (series: TimeBucket[], event: T) => {\n const timestamp = getDate(event.timestamp);\n let bucket: TimeBucket = series[series.length - 1];\n if (!bucket || bucket.start + period < timestamp.getTime()) {\n bucket = { start: timestamp.getTime(), period, count: 0 };\n series.push(bucket);\n }\n\n bucket.count++;\n return series;\n },\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nconst instanceTag = Symbol('instanceTag');\n\n/**\n * Makes instanceof work correctly even if the class definition was duplicated (e.g. when bundling).\n * The comparison is done by comparing the tag passed to this function.\n *\n * Example:\n *\n * ```typescript\n * @safeInstanceof('Tagged')\n * class Tagged {}\n * ```\n */\nexport const safeInstanceof =\n (tag: string): ClassDecorator =>\n (target: any) => {\n target.prototype[instanceTag] = tag;\n\n Object.defineProperty(target.prototype, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n\n Object.defineProperty(target, Symbol.hasInstance, {\n value: (instance: any) => instance?.[instanceTag] === tag,\n });\n };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const safeParseJson: {\n <T extends object>(data: string | undefined | null, defaultValue: T): T;\n <T extends object>(data: string | undefined | null): T | undefined;\n} = <T extends object>(data: string | undefined | null, defaultValue?: T) => {\n if (data) {\n try {\n return JSON.parse(data);\n } catch (err) {}\n }\n return defaultValue;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Unique.\n// TODO(burdon): Options for undefined to end.\n\ntype Compare<T> = (a: T, b: T) => number;\n\nexport const compareScalar =\n (inc = true) =>\n (a: any, b: any) =>\n (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n\nexport const compareString =\n (inc = true, caseInsensitive = true) =>\n (a: string, b: string) => {\n if (caseInsensitive) {\n a = a?.toLowerCase();\n b = b?.toLowerCase();\n }\n return (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);\n };\n\nexport const compareObject =\n <T extends Record<string, any>>(prop: string, sorter: Compare<any>, inc = true): Compare<any> =>\n (a: T, b: T) =>\n (inc ? 1 : -1) * sorter(a[prop], b[prop]);\n\nexport const compareMulti =\n <T extends Record<string, any>>(sorters: Compare<T>[]) =>\n (a: T, b: T) => {\n const sort = (i = 0): number => {\n const s = sorters[i](a, b);\n if (s === 0 && i < sorters.length - 1) {\n return sort(i + 1);\n } else {\n return s;\n }\n };\n\n return sort();\n };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\n/**\n * Tracer events form a graph.\n */\nexport type Event = {\n id: string;\n timestamp: number; // ms.\n duration?: number; // ms (float).\n value?: any;\n};\n\n/**\n * Event sink.\n */\n// TODO(burdon): Reconcile with log.trace.\nexport class Tracer {\n private readonly _events = new Map<string, Event[]>();\n\n private _recording = false;\n\n // TODO(burdon): Start/stop methods for recording data? By id?\n // Alternatively, enable subscriptions to track/compute series.\n\n // TODO(burdon): Hierarchical traces?\n\n get recording() {\n return this._recording;\n }\n\n keys() {\n return Array.from(this._events.keys());\n }\n\n get(id: string, filter?: Record<string, any>): Event[] | undefined {\n const events = this._events.get(id);\n if (filter) {\n return events?.filter((event) => Object.entries(filter).every(([key, value]) => event?.value[key] === value));\n }\n\n return events;\n }\n\n clear() {\n this._events.clear();\n }\n\n start() {\n this._recording = true;\n return this;\n }\n\n stop() {\n this._recording = false;\n return this;\n }\n\n emit(id: string, value?: any) {\n this._post(this._createEvent(id, value));\n }\n\n mark(id: string, value?: any): { start: number; end: () => void } {\n const event = this._createEvent(id, value);\n const start = performance.now();\n return {\n start,\n end: () => {\n event.duration = performance.now() - start;\n this._post(event);\n },\n };\n }\n\n private _createEvent(id: string, value?: any): Event {\n const event: Event = { id, timestamp: Date.now() };\n if (value !== undefined) {\n event.value = value;\n }\n\n return event;\n }\n\n private _post(event: Event) {\n if (this._recording) {\n defaultMap(this._events, event.id, []).push(event);\n }\n }\n}\n\n// TODO(burdon): Factor out (move to @dxos/log?)\n// TODO(burdon): Global singleton (e.g., `trace()`) or part of client services?\nexport const tracer = new Tracer();\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport type AsyncCallback<T> = (param: T) => Promise<void>;\n\nexport type Provider<T> = () => T;\n\nexport type MaybePromise<T> = T | Promise<T>;\n\n/**\n * All types that evaluate to false when cast to a boolean.\n */\nexport type Falsy = false | 0 | '' | null | undefined;\n\n/**\n * A function returning a value or a value itself.\n */\nexport type MaybeFunction<T> = T | (() => T);\n\n/**\n * Use with filter chaining instead of filter(Boolean) to preserve type.\n * NOTE: To filter by type:\n * items.filter((item: any): item is RangeSet<Decoration> => item instanceof RangeSet)\n */\n// TODO(burdon): Reconcile names.\nexport const isNotFalsy = <T>(value: T): value is Exclude<T, Falsy> => !!value;\nexport const nonNullable = <T>(value: T): value is NonNullable<T> => value !== null && value !== undefined;\nexport const isNotNullOrUndefined = <T>(value: T): value is Exclude<T, null | undefined> => value != null;\nexport const boolGuard = <T>(value: T | null | undefined): value is T => Boolean(value);\n\n/**\n * Get value from a provider.\n */\nexport const getAsyncValue = async <T>(value: MaybeFunction<MaybePromise<T>>): Promise<T> => {\n if (typeof value === 'function') {\n return (value as Function)();\n } else {\n return value;\n }\n};\n\nexport type MakeOptional<Type, Key extends keyof Type> = Omit<Type, Key> & Partial<Pick<Type, Key>>;\n\n/**\n * Remove keys with undefined values.\n */\nexport const stripUndefinedValues = <T extends { [index: string]: any }>(obj: T): T => {\n if (typeof obj === 'object') {\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n if (value === undefined) {\n delete obj[key];\n } else if (value !== null && typeof value === 'object') {\n stripUndefinedValues(value); // TODO(burdon): Test recursion.\n }\n });\n }\n\n return obj;\n};\n\n/**\n * Swap position of element within array.\n */\nexport const arrayMove = <T>(array: T[], from: number, to: number): Array<T> => {\n array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);\n return array;\n};\n\nexport const safeParseInt = (value: string | undefined, defaultValue?: number) => {\n try {\n const n = parseInt(value ?? '');\n return isNaN(n) ? defaultValue : n;\n } catch (err) {\n return defaultValue;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { defaultMap } from './map';\n\nconst symbol = Symbol.for('dxos.instance-contexts');\n\nconst instanceContexts = ((globalThis as any)[symbol] ??= new WeakMap<\n any,\n {\n nextId: number;\n instanceIds: WeakMap<any, number>;\n }\n>());\n\n/**\n * Returns a unique instance id for a given object.\n * Ids are generated as incrementing numbers.\n * Ids are only unique within the scope of a given prototype.\n * Instances of different classes may have the same id.\n */\nexport const getPrototypeSpecificInstanceId = (instance: any): number => {\n const prototype = Object.getPrototypeOf(instance);\n const instanceCtx = defaultMap(instanceContexts as any, prototype, () => ({\n nextId: 0,\n instanceIds: new WeakMap(),\n }));\n\n let id = instanceCtx.instanceIds.get(instance);\n if (id === undefined) {\n id = instanceCtx.nextId++;\n instanceCtx.instanceIds.set(instance, id);\n }\n\n return id;\n};\n\nexport const getDebugName = (instance: any): string => {\n if (instance === null) {\n return 'null';\n }\n\n const prototype = Object.getPrototypeOf(instance);\n return `${prototype.constructor.name}#${getPrototypeSpecificInstanceId(instance)}`;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const sum = (values: number[]) => values.reduce((a, b) => a + b, 0);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const forEachAsync = <T>(items: T[], fn: (item: T, idx: number) => Promise<void>) => Promise.all(items.map(fn));\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * Weak dictionary. It is a map that holds weak references to its values and allows garbage collection of values and keys.\n */\nexport class WeakDictionary<K, V extends object> implements Map<K, V> {\n private readonly _internal = new Map<K, WeakRef<V>>();\n private readonly _finalization = new FinalizationRegistry((cleanUpCallback: () => void) => {\n cleanUpCallback();\n });\n\n constructor(entries?: [K, V][]) {\n this._internal = new Map(entries?.map(([key, value]) => [key, new WeakRef(value)]));\n entries?.forEach(([key, value]) => this._register(key, value));\n }\n\n *entries(): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n keys(): IterableIterator<K> {\n return this._internal.keys();\n }\n\n *values(): IterableIterator<V> {\n for (const value of this._internal.values()) {\n const deref = value.deref();\n if (!deref) {\n continue;\n }\n yield deref;\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n get [Symbol.toStringTag](): string {\n return 'WeakDictionary';\n }\n\n get size(): number {\n return this._internal.size;\n }\n\n get(key: K): V | undefined {\n return this._internal.get(key)?.deref();\n }\n\n set(key: K, value: V): this {\n this._internal.set(key, new WeakRef(value));\n this._register(key, value);\n return this;\n }\n\n has(key: K): boolean {\n return this._internal.has(key) && this._internal.get(key)!.deref() !== undefined;\n }\n\n delete(key: K): boolean {\n const value = this._internal.get(key)?.deref();\n if (value) {\n this._unregister(value);\n }\n return this._internal.delete(key);\n }\n\n clear(): void {\n this._internal.forEach((value) => {\n const v = value.deref();\n if (v) {\n this._unregister(v);\n }\n });\n\n this._internal.clear();\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\n if (thisArg) {\n callbackfn = callbackfn.bind(thisArg);\n }\n\n this._internal.forEach((value, key) => {\n const v = value.deref();\n if (v) {\n callbackfn(v, key, this);\n }\n });\n }\n\n private _register(key: K, value: V) {\n this._finalization.register(\n value,\n () => {\n this._internal.delete(key);\n },\n value,\n );\n }\n\n private _unregister(value: V) {\n this._finalization.unregister(value);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const mapValues = <T, U>(obj: Record<string, T>, fn: (value: T, key: string) => U): Record<string, U> => {\n const result: Record<string, U> = {};\n Object.keys(obj).forEach((key) => {\n result[key] = fn(obj[key], key);\n });\n return result;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.dispose ??= Symbol('Symbol.dispose');\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSymbol.asyncDispose ??= Symbol('Symbol.asyncDispose');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport './explicit-resource-management-polyfill';\n\n/**\n * Run function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * using _ = defer(() => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const defer = (fn: () => void): Disposable => new DeferGuard(fn);\n\nclass DeferGuard {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => void) {}\n\n [Symbol.dispose]() {\n const result = this._fn();\n if ((result as any) instanceof Promise) {\n throw new Error('Async functions in defer are not supported. Use deferAsync instead.');\n }\n }\n}\n\n/**\n * Run async function on scope exit. Go style.\n *\n * @example\n * ```ts\n * {\n * await using _ = deferAsync(async () => console.log('exiting'));\n *\n * ...\n * }\n */\nexport const deferAsync = (fn: () => Promise<void>): AsyncDisposable => new DeferAsyncGuard(fn);\n\nclass DeferAsyncGuard implements AsyncDisposable {\n /**\n * @internal\n */\n constructor(private readonly _fn: () => Promise<void>) {}\n\n async [Symbol.asyncDispose]() {\n await this._fn();\n }\n}\n"],
5
+ "mappings": "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BAA2BV,WAAAA;EAC/B3B,YAAYqB,SAA+C;AACzD,UAAMe,eAAef,OAAAA;EACvB;AACF;AChNK,IAAMiB,gBACX,CAAoCC,eACpC,IAAIvD,SACFuD,WAAAA,EAAAA,GAAgBvD,IAAAA;ACdb,IAAMwD,QAAQ,CAAOC,KAAgBjG,QAAsC,IAAIkG,SAASD,KAAKjG,GAAAA;AAE7F,IAAMkG,WAAN,MAAMA;;;;;EAKX1C,YACmB2C,MACAC,MACjB;SAFiBD,OAAAA;SACAC,OAAAA;EAChB;EAEH,IAAIpG,MAAS;AACX,WAAO,KAAKoG;EACd;EAEA,IAAIxG,QAAe;AACjB,WAAO,KAAKuG,KAAKvF,IAAI,KAAKwF,IAAI;EAChC;EAEAC,SAASzG,OAAiC;AACxC,QAAI,CAAC,KAAKuG,KAAKzB,IAAI,KAAK0B,IAAI,GAAG;AAC7B,WAAKD,KAAKnF,IAAI,KAAKoF,MAAMxG,KAAAA;IAC3B;AACA,WAAO;EACT;EAEA0G,KAA0DtG,KAAsC;AAC9F,WAAOgG,MAAM,KAAKpG,OAAOI,GAAAA;EAC3B;AACF;AC7BA,IAAMuG,mBAAmB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMK,IAAMC,cAAN,MAAMA;;;;;;;;;;;;;;EAcXhD,YAA6BiD,WAAWF,kBAAkB;SAA7BE,WAAAA;AAC3B,QAAIA,SAAS3G,WAAW,KAAK;AAC3B,YAAM,IAAI4F,MAAM,sCAAA;IAClB;AACA,SAAKe,WAAWA;EAClB;;;;;;;;;;;EAYAC,SAASC,WAAmBC,QAAQ,GAAGC,YAAY,KAAK;AACtD,UAAMC,QAAQH,UAAUI,MAAM,QAAA;AAC9B,QAAI,CAACD,OAAO;AACV,YAAM,IAAIpB,MAAM,EAAA;IAClB;AAEA,UAAMsB,QAAQF,MAAMb,IAAI,CAACgB,MAAMC,SAASD,GAAG,EAAA,CAAA;AAC3C,UAAME,aAAa,KAAKC,UAAUJ,OAAOJ,KAAAA;AAEzC,WAAOO,WAAWlB,IAAI,CAACgB,MAAM,KAAKR,SAASQ,CAAAA,CAAE,EAAEI,KAAKR,SAAAA;EACtD;;;;;;;EAQA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",
6
+ "names": ["import_invariant", "import_node_util", "import_keys", "assignDeep", "doc", "path", "value", "invariant", "length", "parent", "key", "slice", "at", "getDeep", "createBinder", "obj", "fn", "bind", "async", "util", "promisify", "BitField", "get", "data", "idx", "bit", "set", "count", "begin", "end", "i", "invert", "result", "Uint8Array", "and", "first", "second", "findIndexes", "opts", "start", "push", "ones", "res", "Math", "ceil", "fill", "bitInLastByte", "zeros", "Callback", "call", "args", "_callback", "callIfSet", "callback", "isSet", "createSetDispatch", "handlers", "Proxy", "target", "prop", "forEach", "handler", "method", "apply", "MAX_SERIALIZATION_LENGTH", "ComplexSet", "constructor", "_projection", "values", "_values", "Map", "add", "toString", "inspectObject", "toJSON", "size", "Array", "from", "inspect", "custom", "clear", "delete", "callbackfn", "thisArg", "has", "Symbol", "iterator", "entries", "keys", "toStringTag", "makeSet", "projection", "BoundComplexSet", "ComplexMap", "_keyProjection", "_keys", "keyDeleted", "valueDeleted", "primitive", "raise", "Error", "makeMap", "keyProjection", "BoundComplexMap", "deferFunction", "fnProvider", "entry", "map", "MapEntry", "_map", "_key", "orInsert", "deep", "DEFAULT_WORDLIST", "HumanHasher", "wordlist", "humanize", "hexdigest", "words", "separator", "pairs", "match", "bytes", "x", "parseInt", "compressed", "_compress", "join", "segSize", "segments", "concat", "checksums", "reduce", "acc", "curr", "hasher", "Buffer", "ArrayBuffer", "PublicKey", "stringify", "toHex", "exponentialBackoffInterval", "cb", "initialInterval", "interval", "repeat", "timeoutId", "setTimeout", "clearTimeout", "arraysEqual", "a", "b", "arrayToBuffer", "array", "buffer", "byteOffset", "byteLength", "bufferToArray", "stringToArray", "string", "arrayToString", "MAX_DEPTH", "jsonReplacer", "type", "isArray", "jsonify", "depth", "visitedObjects", "WeakSet", "Object", "jsonKeyReplacer", "options", "fromHex", "truncate", "defaultMap", "def", "undefined", "inferObjectOrder", "objectMap", "order", "orderedObjects", "id", "objects", "ids", "Set", "inferRecordOrder", "assign", "filter", "isNode", "process", "versions", "node", "mobileAndTabletCheck", "check", "test", "substr", "navigator", "userAgent", "vendor", "window", "opera", "iosCheck", "includes", "platform", "document", "safariCheck", "getHostPlatform", "userAgentData", "toLowerCase", "startsWith", "randomInt", "max", "min", "floor", "random", "range", "n", "rangeFromTo", "to", "accessBy", "accessor", "median", "mid", "numericalValues", "total", "sorted", "v", "isNaN", "sort", "mean", "reduceSet", "reduceGroupBy", "reduceSeries", "reducer", "events", "state", "initialState", "event", "createGroupReducer", "groupBy", "sub", "getDate", "Date", "createBucketReducer", "period", "series", "timestamp", "bucket", "getTime", "instanceTag", "safeInstanceof", "tag", "prototype", "defineProperty", "hasInstance", "instance", "safeParseJson", "defaultValue", "JSON", "parse", "err", "compareScalar", "inc", "compareString", "caseInsensitive", "compareObject", "sorter", "compareMulti", "sorters", "s", "Tracer", "_events", "_recording", "recording", "every", "stop", "emit", "_post", "_createEvent", "mark", "performance", "now", "duration", "tracer", "isNotFalsy", "nonNullable", "isNotNullOrUndefined", "boolGuard", "Boolean", "getAsyncValue", "stripUndefinedValues", "arrayMove", "splice", "safeParseInt", "symbol", "for", "instanceContexts", "globalThis", "WeakMap", "getPrototypeSpecificInstanceId", "getPrototypeOf", "instanceCtx", "nextId", "instanceIds", "getDebugName", "name", "sum", "forEachAsync", "items", "Promise", "all", "WeakDictionary", "_internal", "_finalization", "FinalizationRegistry", "cleanUpCallback", "WeakRef", "_register", "deref", "_unregister", "register", "unregister", "mapValues", "dispose", "asyncDispose", "defer", "DeferGuard", "_fn", "deferAsync", "DeferAsyncGuard"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/util/src/assign.ts":{"bytes":2364,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/binder.ts":{"bytes":1323,"imports":[{"path":"node:util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/bitfield.ts":{"bytes":8442,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback.ts":{"bytes":5193,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/complex.ts":{"bytes":18701,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/defer-function.ts":{"bytes":1571,"imports":[],"format":"esm"},"packages/common/util/src/entry.ts":{"bytes":3035,"imports":[],"format":"esm"},"packages/common/util/src/human-hash.ts":{"bytes":19770,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/interval.ts":{"bytes":1832,"imports":[],"format":"esm"},"packages/common/util/src/uint8array.ts":{"bytes":3758,"imports":[],"format":"esm"},"packages/common/util/src/json.ts":{"bytes":9252,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"}],"format":"esm"},"packages/common/util/src/map.ts":{"bytes":1378,"imports":[],"format":"esm"},"packages/common/util/src/order.ts":{"bytes":4984,"imports":[],"format":"esm"},"packages/common/util/src/platform.ts":{"bytes":11252,"imports":[],"format":"esm"},"packages/common/util/src/random.ts":{"bytes":1304,"imports":[],"format":"esm"},"packages/common/util/src/range.ts":{"bytes":1027,"imports":[],"format":"esm"},"packages/common/util/src/reducers.ts":{"bytes":12825,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/safe-instanceof.ts":{"bytes":2693,"imports":[],"format":"esm"},"packages/common/util/src/safe-parse-json.ts":{"bytes":1341,"imports":[],"format":"esm"},"packages/common/util/src/sort.ts":{"bytes":3944,"imports":[],"format":"esm"},"packages/common/util/src/tracer.ts":{"bytes":7182,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/types.ts":{"bytes":6688,"imports":[],"format":"esm"},"packages/common/util/src/instance-id.ts":{"bytes":4243,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/sum.ts":{"bytes":688,"imports":[],"format":"esm"},"packages/common/util/src/for-each-async.ts":{"bytes":798,"imports":[],"format":"esm"},"packages/common/util/src/weak.ts":{"bytes":9636,"imports":[],"format":"esm"},"packages/common/util/src/map-values.ts":{"bytes":1239,"imports":[],"format":"esm"},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytes":1442,"imports":[]},"packages/common/util/src/defer.ts":{"bytes":3679,"imports":[{"path":"packages/common/util/src/explicit-resource-management-polyfill.ts","kind":"import-statement","original":"./explicit-resource-management-polyfill"}],"format":"esm"},"packages/common/util/src/index.ts":{"bytes":2825,"imports":[{"path":"packages/common/util/src/assign.ts","kind":"import-statement","original":"./assign"},{"path":"packages/common/util/src/binder.ts","kind":"import-statement","original":"./binder"},{"path":"packages/common/util/src/bitfield.ts","kind":"import-statement","original":"./bitfield"},{"path":"packages/common/util/src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"packages/common/util/src/complex.ts","kind":"import-statement","original":"./complex"},{"path":"packages/common/util/src/defer-function.ts","kind":"import-statement","original":"./defer-function"},{"path":"packages/common/util/src/entry.ts","kind":"import-statement","original":"./entry"},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/interval.ts","kind":"import-statement","original":"./interval"},{"path":"packages/common/util/src/json.ts","kind":"import-statement","original":"./json"},{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"packages/common/util/src/order.ts","kind":"import-statement","original":"./order"},{"path":"packages/common/util/src/platform.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/util/src/random.ts","kind":"import-statement","original":"./random"},{"path":"packages/common/util/src/range.ts","kind":"import-statement","original":"./range"},{"path":"packages/common/util/src/reducers.ts","kind":"import-statement","original":"./reducers"},{"path":"packages/common/util/src/safe-instanceof.ts","kind":"import-statement","original":"./safe-instanceof"},{"path":"packages/common/util/src/safe-parse-json.ts","kind":"import-statement","original":"./safe-parse-json"},{"path":"packages/common/util/src/sort.ts","kind":"import-statement","original":"./sort"},{"path":"packages/common/util/src/tracer.ts","kind":"import-statement","original":"./tracer"},{"path":"packages/common/util/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"packages/common/util/src/instance-id.ts","kind":"import-statement","original":"./instance-id"},{"path":"packages/common/util/src/sum.ts","kind":"import-statement","original":"./sum"},{"path":"packages/common/util/src/for-each-async.ts","kind":"import-statement","original":"./for-each-async"},{"path":"packages/common/util/src/weak.ts","kind":"import-statement","original":"./weak"},{"path":"packages/common/util/src/map-values.ts","kind":"import-statement","original":"./map-values"},{"path":"packages/common/util/src/defer.ts","kind":"import-statement","original":"./defer"}],"format":"esm"}},"outputs":{"packages/common/util/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":74317},"packages/common/util/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["BitField","Callback","ComplexMap","ComplexSet","HumanHasher","MapEntry","Tracer","WeakDictionary","accessBy","arrayMove","arrayToBuffer","arrayToString","arraysEqual","assignDeep","boolGuard","bufferToArray","compareMulti","compareObject","compareScalar","compareString","createBinder","createBucketReducer","createGroupReducer","createSetDispatch","defaultMap","defer","deferAsync","deferFunction","entry","exponentialBackoffInterval","forEachAsync","getAsyncValue","getDate","getDebugName","getHostPlatform","getPrototypeSpecificInstanceId","humanize","inferObjectOrder","inferRecordOrder","iosCheck","isNode","isNotFalsy","isNotNullOrUndefined","jsonKeyReplacer","jsonReplacer","jsonify","makeMap","makeSet","mapValues","median","mobileAndTabletCheck","nonNullable","numericalValues","randomInt","range","rangeFromTo","reduceGroupBy","reduceSeries","reduceSet","safariCheck","safeInstanceof","safeParseInt","safeParseJson","stringToArray","stripUndefinedValues","sum","tracer"],"entryPoint":"packages/common/util/src/index.ts","inputs":{"packages/common/util/src/assign.ts":{"bytesInOutput":491},"packages/common/util/src/index.ts":{"bytesInOutput":0},"packages/common/util/src/binder.ts":{"bytesInOutput":139},"packages/common/util/src/bitfield.ts":{"bytesInOutput":1911},"packages/common/util/src/callback.ts":{"bytesInOutput":1113},"packages/common/util/src/complex.ts":{"bytesInOutput":3696},"packages/common/util/src/defer-function.ts":{"bytesInOutput":72},"packages/common/util/src/entry.ts":{"bytesInOutput":471},"packages/common/util/src/human-hash.ts":{"bytesInOutput":5662},"packages/common/util/src/interval.ts":{"bytesInOutput":290},"packages/common/util/src/json.ts":{"bytesInOutput":1887},"packages/common/util/src/uint8array.ts":{"bytesInOutput":562},"packages/common/util/src/map.ts":{"bytesInOutput":193},"packages/common/util/src/order.ts":{"bytesInOutput":676},"packages/common/util/src/platform.ts":{"bytesInOutput":3211},"packages/common/util/src/random.ts":{"bytesInOutput":144},"packages/common/util/src/range.ts":{"bytesInOutput":119},"packages/common/util/src/reducers.ts":{"bytesInOutput":2326},"packages/common/util/src/safe-instanceof.ts":{"bytesInOutput":371},"packages/common/util/src/safe-parse-json.ts":{"bytesInOutput":157},"packages/common/util/src/sort.ts":{"bytesInOutput":643},"packages/common/util/src/tracer.ts":{"bytesInOutput":1426},"packages/common/util/src/types.ts":{"bytesInOutput":981},"packages/common/util/src/instance-id.ts":{"bytesInOutput":772},"packages/common/util/src/sum.ts":{"bytesInOutput":57},"packages/common/util/src/for-each-async.ts":{"bytesInOutput":62},"packages/common/util/src/weak.ts":{"bytesInOutput":2069},"packages/common/util/src/map-values.ts":{"bytesInOutput":153},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytesInOutput":100},"packages/common/util/src/defer.ts":{"bytesInOutput":546}},"bytes":32637}}}
1
+ {"inputs":{"packages/common/util/src/assign.ts":{"bytes":2981,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/binder.ts":{"bytes":1323,"imports":[{"path":"node:util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/bitfield.ts":{"bytes":8442,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback.ts":{"bytes":5193,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/complex.ts":{"bytes":18701,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/defer-function.ts":{"bytes":1571,"imports":[],"format":"esm"},"packages/common/util/src/entry.ts":{"bytes":3035,"imports":[],"format":"esm"},"packages/common/util/src/human-hash.ts":{"bytes":19770,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/interval.ts":{"bytes":1832,"imports":[],"format":"esm"},"packages/common/util/src/uint8array.ts":{"bytes":3758,"imports":[],"format":"esm"},"packages/common/util/src/json.ts":{"bytes":9252,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"}],"format":"esm"},"packages/common/util/src/map.ts":{"bytes":1378,"imports":[],"format":"esm"},"packages/common/util/src/order.ts":{"bytes":4984,"imports":[],"format":"esm"},"packages/common/util/src/platform.ts":{"bytes":11252,"imports":[],"format":"esm"},"packages/common/util/src/random.ts":{"bytes":1304,"imports":[],"format":"esm"},"packages/common/util/src/range.ts":{"bytes":1027,"imports":[],"format":"esm"},"packages/common/util/src/reducers.ts":{"bytes":12825,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/safe-instanceof.ts":{"bytes":2693,"imports":[],"format":"esm"},"packages/common/util/src/safe-parse-json.ts":{"bytes":1341,"imports":[],"format":"esm"},"packages/common/util/src/sort.ts":{"bytes":3944,"imports":[],"format":"esm"},"packages/common/util/src/tracer.ts":{"bytes":7182,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/types.ts":{"bytes":6688,"imports":[],"format":"esm"},"packages/common/util/src/instance-id.ts":{"bytes":4243,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/sum.ts":{"bytes":688,"imports":[],"format":"esm"},"packages/common/util/src/for-each-async.ts":{"bytes":798,"imports":[],"format":"esm"},"packages/common/util/src/weak.ts":{"bytes":9636,"imports":[],"format":"esm"},"packages/common/util/src/map-values.ts":{"bytes":1239,"imports":[],"format":"esm"},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytes":1442,"imports":[]},"packages/common/util/src/defer.ts":{"bytes":3679,"imports":[{"path":"packages/common/util/src/explicit-resource-management-polyfill.ts","kind":"import-statement","original":"./explicit-resource-management-polyfill"}],"format":"esm"},"packages/common/util/src/index.ts":{"bytes":2825,"imports":[{"path":"packages/common/util/src/assign.ts","kind":"import-statement","original":"./assign"},{"path":"packages/common/util/src/binder.ts","kind":"import-statement","original":"./binder"},{"path":"packages/common/util/src/bitfield.ts","kind":"import-statement","original":"./bitfield"},{"path":"packages/common/util/src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"packages/common/util/src/complex.ts","kind":"import-statement","original":"./complex"},{"path":"packages/common/util/src/defer-function.ts","kind":"import-statement","original":"./defer-function"},{"path":"packages/common/util/src/entry.ts","kind":"import-statement","original":"./entry"},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/interval.ts","kind":"import-statement","original":"./interval"},{"path":"packages/common/util/src/json.ts","kind":"import-statement","original":"./json"},{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"packages/common/util/src/order.ts","kind":"import-statement","original":"./order"},{"path":"packages/common/util/src/platform.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/util/src/random.ts","kind":"import-statement","original":"./random"},{"path":"packages/common/util/src/range.ts","kind":"import-statement","original":"./range"},{"path":"packages/common/util/src/reducers.ts","kind":"import-statement","original":"./reducers"},{"path":"packages/common/util/src/safe-instanceof.ts","kind":"import-statement","original":"./safe-instanceof"},{"path":"packages/common/util/src/safe-parse-json.ts","kind":"import-statement","original":"./safe-parse-json"},{"path":"packages/common/util/src/sort.ts","kind":"import-statement","original":"./sort"},{"path":"packages/common/util/src/tracer.ts","kind":"import-statement","original":"./tracer"},{"path":"packages/common/util/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"packages/common/util/src/instance-id.ts","kind":"import-statement","original":"./instance-id"},{"path":"packages/common/util/src/sum.ts","kind":"import-statement","original":"./sum"},{"path":"packages/common/util/src/for-each-async.ts","kind":"import-statement","original":"./for-each-async"},{"path":"packages/common/util/src/weak.ts","kind":"import-statement","original":"./weak"},{"path":"packages/common/util/src/map-values.ts","kind":"import-statement","original":"./map-values"},{"path":"packages/common/util/src/defer.ts","kind":"import-statement","original":"./defer"}],"format":"esm"}},"outputs":{"packages/common/util/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":74657},"packages/common/util/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["BitField","Callback","ComplexMap","ComplexSet","HumanHasher","MapEntry","Tracer","WeakDictionary","accessBy","arrayMove","arrayToBuffer","arrayToString","arraysEqual","assignDeep","boolGuard","bufferToArray","compareMulti","compareObject","compareScalar","compareString","createBinder","createBucketReducer","createGroupReducer","createSetDispatch","defaultMap","defer","deferAsync","deferFunction","entry","exponentialBackoffInterval","forEachAsync","getAsyncValue","getDate","getDebugName","getDeep","getHostPlatform","getPrototypeSpecificInstanceId","humanize","inferObjectOrder","inferRecordOrder","iosCheck","isNode","isNotFalsy","isNotNullOrUndefined","jsonKeyReplacer","jsonReplacer","jsonify","makeMap","makeSet","mapValues","median","mobileAndTabletCheck","nonNullable","numericalValues","randomInt","range","rangeFromTo","reduceGroupBy","reduceSeries","reduceSet","safariCheck","safeInstanceof","safeParseInt","safeParseJson","stringToArray","stripUndefinedValues","sum","tracer"],"entryPoint":"packages/common/util/src/index.ts","inputs":{"packages/common/util/src/assign.ts":{"bytesInOutput":622},"packages/common/util/src/index.ts":{"bytesInOutput":0},"packages/common/util/src/binder.ts":{"bytesInOutput":139},"packages/common/util/src/bitfield.ts":{"bytesInOutput":1911},"packages/common/util/src/callback.ts":{"bytesInOutput":1113},"packages/common/util/src/complex.ts":{"bytesInOutput":3696},"packages/common/util/src/defer-function.ts":{"bytesInOutput":72},"packages/common/util/src/entry.ts":{"bytesInOutput":471},"packages/common/util/src/human-hash.ts":{"bytesInOutput":5662},"packages/common/util/src/interval.ts":{"bytesInOutput":290},"packages/common/util/src/json.ts":{"bytesInOutput":1887},"packages/common/util/src/uint8array.ts":{"bytesInOutput":562},"packages/common/util/src/map.ts":{"bytesInOutput":193},"packages/common/util/src/order.ts":{"bytesInOutput":676},"packages/common/util/src/platform.ts":{"bytesInOutput":3211},"packages/common/util/src/random.ts":{"bytesInOutput":144},"packages/common/util/src/range.ts":{"bytesInOutput":119},"packages/common/util/src/reducers.ts":{"bytesInOutput":2326},"packages/common/util/src/safe-instanceof.ts":{"bytesInOutput":371},"packages/common/util/src/safe-parse-json.ts":{"bytesInOutput":157},"packages/common/util/src/sort.ts":{"bytesInOutput":643},"packages/common/util/src/tracer.ts":{"bytesInOutput":1426},"packages/common/util/src/types.ts":{"bytesInOutput":981},"packages/common/util/src/instance-id.ts":{"bytesInOutput":772},"packages/common/util/src/sum.ts":{"bytesInOutput":57},"packages/common/util/src/for-each-async.ts":{"bytesInOutput":62},"packages/common/util/src/weak.ts":{"bytesInOutput":2069},"packages/common/util/src/map-values.ts":{"bytesInOutput":153},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytesInOutput":100},"packages/common/util/src/defer.ts":{"bytesInOutput":546}},"bytes":32779}}}
@@ -2,5 +2,6 @@
2
2
  * Initialize a deeply nested object.
3
3
  * @returns The value of the prop after assignment.
4
4
  */
5
- export declare const assignDeep: <T>(doc: any, path: string[], value: T) => T;
5
+ export declare const assignDeep: <T>(doc: any, path: (string | number)[], value: T) => T;
6
+ export declare const getDeep: (doc: any, path: (string | number)[]) => unknown | undefined;
6
7
  //# sourceMappingURL=assign.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../src/assign.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,UAAU,WAAY,GAAG,QAAQ,MAAM,EAAE,gBASrD,CAAC"}
1
+ {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../src/assign.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,UAAU,WAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,gBAShE,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,OAAO,GAAG,SAMvE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/util",
3
- "version": "0.4.5",
3
+ "version": "0.4.6-main.3724cc4",
4
4
  "description": "Temporary bucket for misc functions, which should graduate into separate packages.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -16,13 +16,13 @@
16
16
  "src"
17
17
  ],
18
18
  "dependencies": {
19
- "@dxos/invariant": "0.4.5",
20
- "@dxos/debug": "0.4.5",
21
- "@dxos/keys": "0.4.5",
22
- "@dxos/node-std": "0.4.5"
19
+ "@dxos/debug": "0.4.6-main.3724cc4",
20
+ "@dxos/invariant": "0.4.6-main.3724cc4",
21
+ "@dxos/keys": "0.4.6-main.3724cc4",
22
+ "@dxos/node-std": "0.4.6-main.3724cc4"
23
23
  },
24
24
  "devDependencies": {
25
- "@dxos/crypto": "0.4.5"
25
+ "@dxos/crypto": "0.4.6-main.3724cc4"
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"
package/src/assign.ts CHANGED
@@ -8,7 +8,7 @@ import { invariant } from '@dxos/invariant';
8
8
  * Initialize a deeply nested object.
9
9
  * @returns The value of the prop after assignment.
10
10
  */
11
- export const assignDeep = <T>(doc: any, path: string[], value: T): T => {
11
+ export const assignDeep = <T>(doc: any, path: (string | number)[], value: T): T => {
12
12
  invariant(path.length > 0);
13
13
  let parent = doc;
14
14
  for (const key of path.slice(0, -1)) {
@@ -18,3 +18,11 @@ export const assignDeep = <T>(doc: any, path: string[], value: T): T => {
18
18
  parent[path.at(-1)!] = value;
19
19
  return parent[path.at(-1)!]; // NOTE: We can't just return value here since doc's getter might return a different object.
20
20
  };
21
+
22
+ export const getDeep = (doc: any, path: (string | number)[]): unknown | undefined => {
23
+ let parent = doc;
24
+ for (const key of path) {
25
+ parent = parent?.[key];
26
+ }
27
+ return parent;
28
+ };