@dxos/util 0.7.5-staging.b81e783 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs.map +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs.map +2 -2
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/position.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/position.ts +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/array.ts", "../../../src/array-to-hex.ts", "../../../src/binder.ts", "../../../src/bitfield.ts", "../../../src/callback.ts", "../../../src/callback-collection.ts", "../../../src/case.ts", "../../../src/chunk-array.ts", "../../../src/circular-buffer.ts", "../../../src/complex.ts", "../../../src/explicit-resource-management-polyfill.ts", "../../../src/defer.ts", "../../../src/defer-function.ts", "../../../src/deep.ts", "../../../src/entry.ts", "../../../src/for-each-async.ts", "../../../src/human-hash.ts", "../../../src/interval.ts", "../../../src/map.ts", "../../../src/instance-id.ts", "../../../src/join-tables.ts", "../../../src/json.ts", "../../../src/uint8array.ts", "../../../src/map-values.ts", "../../../src/order.ts", "../../../src/order-keys.ts", "../../../src/pick.ts", "../../../src/platform.ts", "../../../src/position.ts", "../../../src/random.ts", "../../../src/range.ts", "../../../src/reducers.ts", "../../../src/safe-await.ts", "../../../src/safe-instanceof.ts", "../../../src/safe-parse.ts", "../../../src/sliding-window-summary.ts", "../../../src/sort.ts", "../../../src/sum.ts", "../../../src/throw-unhandled-error.ts", "../../../src/to-fallback.ts", "../../../src/tracer.ts", "../../../src/tree.ts", "../../../src/types.ts", "../../../src/weak.ts", "../../../src/string.ts", "../../../src/remove-undefined-keys.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport type Comparator<A, B = A> = (a: A, b: B) => boolean;\n\nexport type DiffResult<A, B = A> = {\n added: B[];\n updated: B[];\n removed: A[];\n};\n\n/**\n * Compute diff between two arrays.\n * @param previous\n * @param next\n * @param comparator\n */\n// TODO(burdon): Factor out.\nexport const diff = <A, B = A>(\n previous: readonly A[],\n next: readonly B[],\n comparator: Comparator<A, B>,\n): DiffResult<A, B> => {\n const remaining = [...previous];\n const result: DiffResult<A, B> = {\n added: [],\n updated: [],\n removed: remaining,\n };\n\n // TODO(burdon): Mark and sweep.\n for (const object of next) {\n const index = remaining.findIndex((item) => comparator(item, object));\n if (index === -1) {\n result.added.push(object);\n } else {\n result.updated.push(object);\n remaining.splice(index, 1);\n }\n }\n\n return result;\n};\n\n// TODO(burdon): Factor out.\nexport const intersection = <A, B = A>(a: A[], b: B[], comparator: Comparator<A, B>): A[] =>\n a.filter((a) => b.find((b) => comparator(a, b)) !== undefined);\n\n/**\n * Returns a new array with only the first instance of each unique item\n * based on a specified property.\n *\n * @typeParam T - The type of items in the input array.\n * @param array - The array to filter for distinct items.\n * @param key - The property key to determine uniqueness for each item.\n * @returns A new array with only distinct items based on the specified property.\n */\nexport const distinctBy = <T, K>(array: T[], selector: (item: T) => K): T[] => {\n const seenKeys = new Set<K>();\n return array.filter((item) => {\n const key = selector(item);\n\n if (seenKeys.has(key)) {\n return false;\n }\n\n seenKeys.add(key);\n return true;\n });\n};\n\n/**\n * Remove elements from array.\n * @param array\n * @param test\n * @returns removed elements.\n */\nexport const removeBy = <T>(array: T[], test: (element: T, index: number) => boolean): T[] => {\n const removed: T[] = [];\n for (let i = array.length - 1; i >= 0; i--) {\n if (test(array[i], i)) {\n removed.push(...array.splice(i, 1));\n }\n }\n\n return removed;\n};\n\n/**\n * Splits an array based on a type guard predicate function.\n * Infers the output tuple types from the guard function.\n */\nexport const partition = <T>(array: T[], guard: (item: T, index: number, array: T[]) => boolean): [T[], T[]] => {\n return array.reduce<[T[], T[]]>(\n ([accepted, rejected], item, index, array) =>\n guard(item, index, array) ? [[...accepted, item], rejected] : [accepted, [...rejected, item]],\n [[], []],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// https://stackoverflow.com/a/59416332\n\n// Precomputed octet list.\nconst byteToHex: string[] = [];\nfor (let n = 0; n <= 0xff; ++n) {\n const hexOctet = n.toString(16).padStart(2, '0');\n byteToHex.push(hexOctet);\n}\n\nexport const arrayToHex = (buf: ArrayBufferLike) => {\n const buff = new Uint8Array(buf);\n const hexOctets = []; // new Array(buff.length) is even faster (preallocates necessary array size), then use hexOctets[i] instead of .push()\n\n for (let i = 0; i < buff.length; ++i) {\n hexOctets.push(byteToHex[buff[i]]);\n }\n\n return hexOctets.join('');\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 2024 DXOS.org\n//\n\n/**\n * A collection of async functions.\n */\nexport class CallbackCollection<F extends (...args: any[]) => Promise<any>> {\n #callbacks: F[] = [];\n\n append(callback: F) {\n this.#callbacks.push(callback);\n }\n\n prepend(callback: F) {\n this.#callbacks.unshift(callback);\n }\n\n remove(callback: F) {\n this.#callbacks = this.#callbacks.filter((c) => c !== callback);\n }\n\n callParallel(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>[]> {\n return Promise.all(this.#callbacks.map((callback) => callback(...args)));\n }\n\n async callSerial(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>[]> {\n const results: Awaited<ReturnType<F>>[] = [];\n for (const callback of this.#callbacks) {\n results.push(await callback(...args));\n }\n return results;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nconst LOW_DASH = '_'.codePointAt(0)!;\nconst HI_DASH = '-'.codePointAt(0)!;\nconst SMALL_A = 'a'.codePointAt(0)!;\nconst CAPITAL_A = 'A'.codePointAt(0)!;\nconst SMALL_Z = 'z'.codePointAt(0)!;\nconst CAPITAL_Z = 'Z'.codePointAt(0)!;\n\nconst isLower = (char: number) => char >= SMALL_A && char <= SMALL_Z;\n\nconst isUpper = (char: number) => char >= CAPITAL_A && char <= CAPITAL_Z;\n\nconst toLower = (char: number) => char + 0x20;\n\n/**\n * NOTE: Removed `xcase` due to CF dependency conflicts.\n */\nconst changeCase = (str: string, delim: number) => {\n const firstChar = str.charCodeAt(0);\n if (!isLower(firstChar)) {\n return str;\n }\n\n const length = str.length;\n let changed = false;\n const out: number[] = [];\n for (let i = 0; i < length; ++i) {\n const c = str.charCodeAt(i);\n if (isUpper(c)) {\n out.push(delim);\n out.push(toLower(c));\n changed = true;\n } else {\n out.push(c);\n }\n }\n\n return changed ? String.fromCharCode.apply(undefined, out) : str;\n};\n\nexport const decamelize = (str: string) => changeCase(str, LOW_DASH);\nexport const hyphenize = (str: string) => changeCase(str, HI_DASH);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const chunkArray = <T>(array: T[], size: number): T[][] => {\n const result = [];\n for (let i = 0; i < array.length; i += size) {\n result.push(array.slice(i, i + size));\n }\n return result;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nexport class CircularBuffer<T> {\n private readonly _buffer: T[];\n private _nextIndex = 0;\n private _elementCount = 0;\n\n constructor(size: number) {\n invariant(size >= 1);\n this._buffer = new Array(size);\n }\n\n public push(element: T): T | undefined {\n const evicted = this._elementCount === this._buffer.length ? this._buffer[this._nextIndex] : undefined;\n this._buffer[this._nextIndex] = element;\n this._nextIndex = (this._nextIndex + 1) % this._buffer.length;\n this._elementCount = Math.min(this._buffer.length, this._elementCount + 1);\n return evicted;\n }\n\n public get elementCount() {\n return this._elementCount;\n }\n\n public getLast(): T | undefined {\n if (this._elementCount === 0) {\n return undefined;\n }\n if (this._nextIndex === 0) {\n return this._buffer[this._buffer.length - 1];\n }\n return this._buffer[this._nextIndex - 1];\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this.values();\n }\n\n public *values(): IterableIterator<T> {\n if (this._elementCount === 0) {\n return;\n }\n if (this._elementCount < this._buffer.length) {\n for (let i = 0; i < this._elementCount; i++) {\n yield this._buffer[i];\n }\n return;\n }\n for (let i = this._nextIndex; i < this._buffer.length; i++) {\n yield this._buffer[i];\n }\n for (let i = 0; i < this._nextIndex; i++) {\n yield this._buffer[i];\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](): SetIterator<T> {\n return this._values.values();\n }\n\n *entries(): SetIterator<[T, T]> {\n for (const value of this._values.values()) {\n yield [value, value];\n }\n }\n\n keys(): SetIterator<T> {\n return this[Symbol.iterator]();\n }\n\n values(): SetIterator<T> {\n return this[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexSet';\n }\n\n union<U>(other: ReadonlySetLike<U>): Set<T | U> {\n throw new Error('Method not implemented.');\n }\n\n intersection<U>(other: ReadonlySetLike<U>): Set<T & U> {\n throw new Error('Method not implemented.');\n }\n\n difference<U>(other: ReadonlySetLike<U>): Set<T> {\n throw new Error('Method not implemented.');\n }\n\n symmetricDifference<U>(other: ReadonlySetLike<U>): Set<T | U> {\n throw new Error('Method not implemented.');\n }\n\n isSubsetOf(other: ReadonlySetLike<unknown>): boolean {\n throw new Error('Method not implemented.');\n }\n\n isSupersetOf(other: ReadonlySetLike<unknown>): boolean {\n throw new Error('Method not implemented.');\n }\n\n isDisjointFrom(other: ReadonlySetLike<unknown>): boolean {\n throw new Error('Method not implemented.');\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](): SetIterator<[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(): SetIterator<[K, V]> {\n return this[Symbol.iterator]();\n }\n\n keys(): SetIterator<K> {\n return this._keys.values();\n }\n\n values(): SetIterator<V> {\n return this._values.values();\n }\n\n mapValues<R>(mapper: (v: V, k: K) => R): ComplexMap<K, R> {\n return new ComplexMap(\n this._keyProjection,\n [...this.entries()].map(([key, value]) => [key, mapper(value, key)]),\n );\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// 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", "/**\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 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 setDeep = <T>(obj: any, path: readonly (string | number)[], value: T): T => {\n invariant(path.length > 0);\n let parent = obj;\n for (const key of path.slice(0, -1)) {\n if (parent[key] === undefined) {\n const isArrayIndex = !isNaN(Number(key));\n parent[key] = isArrayIndex ? [] : {};\n }\n parent = parent[key];\n }\n\n parent[path.at(-1)!] = value;\n return obj;\n};\n\n/**\n * Gets a value from a deeply nested object.\n * @param obj\n * @param path\n * @returns The value of the prop if it exists, otherwise undefined.\n */\nexport const getDeep = <T>(obj: any, path: readonly (string | number)[]): T | undefined => {\n let parent = obj;\n for (const key of path) {\n parent = parent?.[key];\n }\n\n return parent;\n};\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 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 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\ninterface IMap<K, V> {\n get(key: K): V | undefined;\n set(key: K, value: V): this;\n}\n\n/**\n * Get or set map value.\n */\nexport const defaultMap = <K, V>(map: IMap<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\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 ?? 'Object'}#${getPrototypeSpecificInstanceId(instance)}`;\n};\n", "/**\n * Joins two untyped tables on the given columns.\n * @param leftColumn The column to join on in the first table.\n * @param rightColumn The column to join on in the second table.\n */\n//\n// Copyright 2024 DXOS.org\n//\n\nexport const joinTables = (\n leftColumn: string,\n rightColumn: string,\n left: Record<string, any>[],\n right: Record<string, any>[],\n) => {\n const map = new Map();\n const used = new Set();\n for (const row of right) {\n map.set(row[rightColumn], row);\n }\n\n const result = [];\n for (const row of left) {\n const right = map.get(row[leftColumn]);\n used.add(right);\n\n result.push(Object.assign(right ?? {}, row));\n }\n\n // Add unmatched rows from the right table.\n for (const row of right) {\n if (!used.has(row)) {\n result.push(row);\n }\n }\n\n return result;\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\nexport type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nconst MAX_DEPTH = 5;\nconst LOG_MAX_DEPTH = 7;\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\n/**\n * Recursively converts an object into a JSON-compatible object appropriate for logging.\n */\n\n// TODO(nf): use util.inspect/[util.inspect.custom] instead?\nexport const jsonlogify = (value: any, depth = 0, visitedObjects = new WeakSet<any>()): any => {\n if (depth > LOG_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) => jsonlogify(x, depth + 1, visitedObjects));\n } else if (typeof value.toJSONL === 'function') {\n return value.toJSONL();\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] = jsonlogify(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 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/**\n * Recursively maps values traversing arrays and objects.\n * @param fn Function to apply to each value. Second argument is a function to recurse into the value.\n */\nexport const deepMapValues = (\n value: any,\n fn: (value: any, recurse: (value: any) => any, key: string | number | undefined) => any,\n): any => {\n return new DeepMapper(fn).map(value);\n};\n\nclass DeepMapper {\n private readonly _cyclic = new Map<any, any>();\n\n constructor(\n private readonly _fn: (value: any, recurse: (value: any) => any, key: string | number | undefined) => any,\n ) {}\n\n map(value: any): any {\n return this._map(value, undefined);\n }\n\n private _map(value: any, key: string | number | undefined): any {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n return this._fn(value, this._recurse, key);\n }\n\n private _recurse = (value: any) => {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n if (Array.isArray(value)) {\n const res = new Array(value.length);\n this._cyclic.set(value, res);\n for (let i = 0; i < value.length; i++) {\n res[i] = this._map(value[i], i);\n }\n return res;\n } else if (value !== null && typeof value === 'object') {\n const res: any = {};\n this._cyclic.set(value, res);\n for (const key in value) {\n res[key] = this._map(value[key], key);\n }\n return res;\n } else {\n return value;\n }\n };\n}\n\n/**\n * Recursively maps values traversing arrays and objects.\n * @param fn Function to apply to each value. Second argument is a function to recurse into the value.\n * Async version.\n */\nexport const deepMapValuesAsync = (\n value: any,\n fn: (value: any, recurse: (value: any) => Promise<any>, key: string | number | undefined) => Promise<any>,\n): Promise<any> => {\n return new DeepMapperAsync(fn).map(value);\n};\n\nclass DeepMapperAsync {\n private readonly _cyclic = new Map<any, any>();\n\n constructor(\n private readonly _fn: (\n value: any,\n recurse: (value: any) => Promise<any>,\n key: string | number | undefined,\n ) => Promise<any>,\n ) {}\n\n map(value: any): Promise<any> {\n return this._map(value, undefined);\n }\n\n private _map(value: any, key: string | number | undefined): Promise<any> {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n return this._fn(value, this._recurse, key);\n }\n\n private _recurse = async (value: any) => {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n if (Array.isArray(value)) {\n const res = new Array(value.length);\n this._cyclic.set(value, res);\n for (let i = 0; i < value.length; i++) {\n res[i] = await this._map(value[i], i);\n }\n return res;\n } else if (value !== null && typeof value === 'object') {\n const res: any = {};\n this._cyclic.set(value, res);\n for (const key in value) {\n res[key] = await this._map(value[key], key);\n }\n return res;\n } else {\n return value;\n }\n };\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 2024 DXOS.org\n//\n\nexport const orderKeys = <O extends {}>(obj: O, order: (keyof O)[]): O => {\n const ordered: Partial<O> = {};\n for (const key of order) {\n if (key in obj) {\n ordered[key] = obj[key];\n }\n }\n for (const key in obj) {\n if (!(key in ordered)) {\n ordered[key] = obj[key];\n }\n }\n return ordered as O;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// Based on https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore?tab=readme-ov-file#_pick.\n\n/**\n * Creates an object composed of the object properties predicate returns truthy for.\n */\n\nexport const pick = <T extends object, K extends keyof T = keyof T>(obj: T, keys: K[]): Pick<T, K> => {\n return keys.reduce(\n (result, key) => {\n if (obj && key in obj) {\n result[key] = obj[key];\n }\n return result;\n },\n {} as Pick<T, K>,\n );\n};\n\n/**\n * Creates an object composed of the object properties predicate returns truthy for.\n */\nexport const pickBy = (obj: Record<any, any>, predicate: (value: any) => boolean) => {\n const result: Record<any, any> = {};\n for (const key in obj) {\n if (predicate(obj[key])) {\n result[key] = obj[key];\n }\n }\n return result;\n};\n\n/**\n * Omit given props.\n * @param obj\n * @param keys\n */\nexport const omit = <T extends object, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> => {\n const result = { ...obj };\n keys.forEach((key) => {\n delete result[key];\n });\n return result;\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 2025 DXOS.org\n//\n\n/**\n * Determines priority order.\n *\n * - `static` - Remain in natural order.\n * - `hoist` - Placed before `static`.\n * - `fallback` - Placed after `static`.\n */\nexport type Position = 'static' | 'hoist' | 'fallback';\n\n/**\n * Sorting function for sorting by position.\n */\nexport const byPosition = <T extends { position?: Position }>(a: T, b: T) => {\n const aPosition = a.position ?? 'static';\n const bPosition = b.position ?? 'static';\n\n if (aPosition === bPosition) {\n return 0;\n } else if (aPosition === 'hoist' || bPosition === 'fallback') {\n return -1;\n } else if (bPosition === 'hoist' || aPosition === 'fallback') {\n return 1;\n }\n\n return 0;\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 = 0) => {\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 (n: number): number[];\n <T>(n: number, mapper: RangeMapper<T>): T[];\n} = <T>(n: number, mapper?: RangeMapper<T>) => {\n const range = Array.from(Array(n).keys());\n return mapper == null ? range : range.map(mapper);\n};\n\nexport const rangeFromTo: {\n (from: number, to: number): number[];\n <T>(from: number, to: number, mapper: RangeMapper<T>): T[];\n} = <T = number>(from: number, to: number, mapper?: RangeMapper<T>) => {\n return mapper == null ? range(to - from, (i) => i + from) : range(to - from, (i) => mapper(i + from));\n};\n\ntype RangeMapper<T> = (n: number) => T;\n\n/**\n * Clamps a value between a minimum and maximum value.\n */\nexport const clamp = (value: number, min: number, max: number): number => {\n return Math.min(Math.max(value, min), max);\n};\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 2024 DXOS.org\n//\n\n/**\n * A utility for safely performing an asynchronous action on every item from source.\n * @param source elements passed to taskFactory.\n * @param taskFactory a function that converts an elements into an async task.\n * @param onError if provided will be called for every failed task.\n * @returns elements for which task execution failed.\n */\nexport const safeAwaitAll = async <T>(\n source: Array<T> | IterableIterator<T>,\n taskFactory: (item: T) => Promise<any>,\n onError?: (error: Error, item: T, idx: number) => void,\n): Promise<T[]> => {\n const failedItems: T[] = [];\n await Promise.all(\n [...source].map(async (item, idx) => {\n try {\n await taskFactory(item);\n } catch (err: any) {\n if (onError) {\n onError(err, item, idx);\n }\n failedItems.push(item);\n }\n }),\n );\n return failedItems;\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 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\nexport const safeParseFloat = (str: string, defaultValue?: number): number | undefined => {\n try {\n return parseFloat(str);\n } catch {\n return defaultValue ?? 0;\n }\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 && data.length > 0) {\n try {\n return JSON.parse(data);\n } catch (err) {}\n }\n return defaultValue;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { CircularBuffer } from './circular-buffer';\n\nexport type SlidingWindowSummaryConfig = {\n dataPoints: number;\n /**\n * The number of digits after decimal.\n */\n precision?: number;\n};\n\nexport class SlidingWindowSummary {\n private readonly _buffer: CircularBuffer<number>;\n private _sum = 0;\n\n private readonly _precision: number | undefined;\n\n constructor(options: SlidingWindowSummaryConfig) {\n this._buffer = new CircularBuffer(options.dataPoints);\n if (options.precision != null) {\n invariant(options.precision >= 0);\n this._precision = Math.pow(10, options.precision);\n }\n }\n\n public record(value: number) {\n const evicted = this._buffer.push(value);\n this._sum += value - (evicted ?? 0);\n }\n\n public average() {\n return this._buffer.elementCount === 0 ? 0 : this._withPrecision(this._sum / this._buffer.elementCount);\n }\n\n public computeWindowSummary() {\n const mean = this.average();\n const sortedElements = [...this._buffer].sort();\n const median = this._withPrecision(\n sortedElements.length % 2 === 0\n ? (sortedElements[sortedElements.length / 2] + sortedElements[sortedElements.length / 2 - 1]) / 2\n : sortedElements[sortedElements.length / 2],\n );\n const p90 = this._withPrecision(sortedElements[Math.round(sortedElements.length * 0.9)]);\n const variance = sortedElements.reduce((acc, v) => acc + Math.pow(v - mean, 2)) / sortedElements.length;\n const stdDev = this._withPrecision(Math.sqrt(variance));\n const histogram = sortedElements.reduce(\n (acc, v) => {\n acc[v] += 1;\n return acc;\n },\n {} as { [element: number]: number },\n );\n return { mean, median, p90, stdDev, histogram };\n }\n\n private _withPrecision(value: number) {\n if (this._precision == null) {\n return value;\n }\n return Math.round(value * this._precision) / this._precision;\n }\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\nexport const sum = (values: number[]) => values.reduce((a, b) => a + b, 0);\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Throws an unhandled error for the runtime to catch.\n * Does not cause stack unwinding.\n * Error will be thrown in the next microtask.\n */\nexport const throwUnhandledError = (error: Error) => {\n queueMicrotask(() => {\n throw error;\n });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PublicKey } from '@dxos/keys';\n\nexport const idEmoji = [\n // When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)\n // Emoji sometimes use a combination of code points, and some code points aren't visible on their own, so by adding or deleting you may unintentionally create non-visible items.\n // This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:\n // – not people or isolated anthropomorphic faces\n // – not flags\n // – more concrete than abstract\n // – less culturally specific\n // – less easily confused with another emoji in the set\n // – requires less special knowledge to identify\n // – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)\n // – less common as a signifier in UX\n // NOTE that this is intentionally an array of strings because of the way emoji graphemes work.\n '👹',\n '👻',\n '👽',\n '🤖',\n '🎃',\n '🦾',\n '🦿',\n '🦷',\n '👣',\n '👁️',\n '🧶',\n '👑',\n '🐒',\n '🦆',\n '🦉',\n '🐴',\n '🦄',\n '🐝',\n '🦋',\n '🐞',\n '🪲',\n '🐢',\n '🦎',\n '🦕',\n '🦑',\n '🦀',\n '🐠',\n '🐬',\n '🐋',\n '🦭',\n '🐅',\n '🐆',\n '🦓',\n '🦍',\n '🦧',\n '🐘',\n '🐫',\n '🦒',\n '🦘',\n '🦬',\n '🐖',\n '🐏',\n '🦌',\n '🐕',\n '🐈',\n '🐓',\n '🦚',\n '🦜',\n '🦢',\n '🦩',\n '🦦',\n '🐁',\n '🐿️',\n '🌵',\n '🌲',\n '🌳',\n '🪵',\n '🌱',\n '🍁',\n '🪺',\n '🍄',\n '🐚',\n '🪸',\n '🪨',\n '🌾',\n '🌷',\n '🌻',\n '☀️',\n '🌙',\n '🪐',\n '⭐️',\n '⚡️',\n '☄️',\n '🔥',\n '🌈',\n '☁️',\n '💧',\n '⛱️',\n '🌊',\n '🍎',\n '🍋',\n '🍉',\n '🍇',\n '🫐',\n '🍈',\n '🍒',\n '🍑',\n '🥭',\n '🍍',\n '🥥',\n '🥝',\n '🥑',\n '🌶️',\n '🌽',\n '🥕',\n '🍬',\n '🥜',\n '🫖',\n '☕️',\n '🍵',\n '🧊',\n '🧂',\n '🏔️',\n '⚓️',\n '🛟',\n '🏝️',\n '🛶',\n '🚀',\n '🛰️',\n '⛲️',\n '🏰',\n '🚲',\n '⛺️',\n '🎙️',\n '🧲',\n '⚙️',\n '🔩',\n '🔮',\n '🔭',\n '🔬',\n '🧬',\n '🌡️',\n '🧺',\n '🛎️',\n '🔑',\n '🪑',\n '🧸',\n '🎈',\n '🎀',\n '🎊',\n '♻️',\n '🎵',\n];\n\nexport const idHue = [\n 'red' as const,\n // 'orange' as const, /* More shades in these palettes are considered “ugly” */\n 'amber' as const, // Amber arcs between red-orange and yellow as it gets lighter, so improves aesthetics.\n // 'yellow' as const, /* More shades in these palettes are considered “ugly” */\n 'lime' as const,\n 'green' as const,\n 'emerald' as const,\n 'teal' as const,\n 'cyan' as const,\n // 'sky' as const, /* Omitted since it is quite similar to the primary accent palette */\n // 'blue' as const, /* Omitted since it is quite similar to the primary accent palette */\n // 'indigo' as const, /* Omitted since it is quite similar to the primary accent palette */\n 'violet' as const,\n 'purple' as const,\n 'fuchsia' as const,\n 'pink' as const,\n 'rose' as const,\n];\n\nexport const keyToEmoji = (key: PublicKey) => hexToEmoji(key.toHex());\n\nexport const hexToEmoji = (hex: string) => toEmoji(parseInt(hex, 16));\n\nexport const toEmoji = (hash: number) => idEmoji[hash % idEmoji.length];\n\nexport const keyToHue = (key: PublicKey) => hexToHue(key.toHex());\n\nexport const hexToHue = (hex: string) => toHue(parseInt(hex, 16));\n\nexport const toHue = (hash: number) => idHue[hash % idHue.length];\n\nexport type FallbackValue = {\n emoji: string;\n hue: (typeof idHue)[number];\n};\n\nexport const keyToFallback = (key: PublicKey) => hexToFallback(key.toHex());\n\nexport const hexToFallback = (hex: string) => toFallback(parseInt(hex, 16));\n\nexport const toFallback = (hash: number): FallbackValue => ({ emoji: toEmoji(hash), hue: toHue(hash) });\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 2022 DXOS.org\n//\n\nimport { truncateKey } from '@dxos/debug';\n\n// TODO(burdon): See also https://www.npmjs.com/package/object-treeify\n\nexport type TreeNode = {\n id: string;\n children?: TreeNode[];\n};\n\n/**\n * Create tree using depth first traversal.\n * https://waylonwalker.com/drawing-ascii-boxes/#connectors\n */\nexport const stringifyTree = (node: TreeNode, ancestors: [TreeNode, number][] = [], rows: string[] = []) => {\n if (node.children?.length) {\n node.children!.forEach((child: TreeNode, i) => {\n stringifyTree(child, [...ancestors, [node, i]], rows);\n });\n } else {\n const keyLen = 8;\n const name = (node: TreeNode) => truncateKey(node.id, keyLen);\n\n const parts = [];\n ancestors.forEach(([node, i], j) => {\n // Current is on first row.\n const first = ancestors.slice(j).every(([_, i]) => i === 0);\n\n // Root.\n parts.push(j === 0 ? (first ? '├' : ' ') : '');\n\n // Ancestor name (if first row) or padding.\n parts.push(first ? `─(${name(node)})─` : ''.padEnd(keyLen + 4));\n\n if (node.children) {\n // Connector to children.\n if (first) {\n parts.push(node.children.length > 1 ? '┬' : '─');\n } else {\n // Child is on first row.\n const childFirst = ancestors.slice(j + 1).every(([_, i]) => i === 0);\n\n // Last child.\n if (node.children.length - 1 === i) {\n parts.push(childFirst ? '╰' : ' ');\n } else {\n parts.push(childFirst ? '├' : '│');\n }\n }\n }\n });\n\n parts.push(`─(${name(node)})`);\n rows.push(parts.join(''));\n }\n\n return rows; // .join('\\n');\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport type AsyncCallback<T> = (param: T) => Promise<void>;\n\nexport type Provider<T, V = void> = (arg: V) => T;\n\nexport type MaybeProvider<T, V = void> = T | ((arg: V) => T);\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type GuardedType<T> = T extends (value: any) => value is infer R ? R : never;\n\nexport type DeepReadonly<T> = {\n readonly [P in keyof T]: T[P] extends Record<string, any>\n ? DeepReadonly<T[P]>\n : T[P] extends Array<infer U>\n ? ReadonlyArray<DeepReadonly<U>>\n : T[P];\n};\n\nexport type DeepWriteable<T> = { -readonly [K in keyof T]: T[K] extends object ? DeepWriteable<T[K]> : T[K] };\n\n/**\n * Simplifies type (copied from effect).\n */\nexport type Simplify<A> = { [K in keyof A]: A[K] } extends infer B ? B : never;\n\n/**\n * Replace types of specified keys.\n */\nexport type Specialize<T, U> = Simplify<Omit<T, keyof U> & U>;\n\n/**\n * Make specified keys optional.\n */\n// TODO(burdon): Wrapping with Simplify fails.\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\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 * 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 */\nexport const isNotFalsy = <T>(value: T): value is Exclude<T, Falsy> => !!value;\nexport const isNonNullable = <T>(value: T | null | undefined): value is T => value != null;\n\n// TODO(burdon): Replace use of setTimeout everywhere?\n// Would remove the need to cancel (and associated errors), but would change the operation of the code\n// since the function would call immediately instead of waiting for the next tick.\n// Could this affect performance? Otherwise replace with queueMicrotask?\nexport const doAsync = async (fn: () => Promise<void>) => fn();\n\n/**\n * Get value from a provider.\n */\nexport const getProviderValue = <T, V = void>(provider: MaybeProvider<T, V>, arg?: V): T => {\n return typeof provider === 'function' ? (provider as Function)(arg) : provider;\n};\n\n/**\n * Get value from a provider, which may be async.\n */\nexport const getAsyncProviderValue = <T, V = void>(\n provider: MaybeProvider<MaybePromise<T>, V>,\n arg?: V,\n): MaybePromise<T> => {\n return getProviderValue(provider, arg);\n};\n\n/**\n * Remove keys with undefined values.\n */\nexport const stripUndefined = <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 stripUndefined(value); // TODO(burdon): Test recursion.\n }\n });\n }\n\n return obj;\n};\n\n/**\n * Return new object with sorted keys.\n */\nexport const sortKeys = <T extends object>(obj: T): T =>\n Object.keys(obj)\n .sort()\n .reduce<T>((sorted, key) => {\n (sorted as any)[key] = (obj as any)[key];\n return sorted;\n }, {} as T);\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", "//\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(): SetIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n keys(): SetIterator<K> {\n return this._internal.keys();\n }\n\n *values(): SetIterator<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](): SetIterator<[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 2025 DXOS.org\n//\n\n/**\n * Capitalizes the first letter of a string.\n */\nexport const capitalize = (str: string): string => {\n if (str.length === 0) {\n return '';\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const removeUndefinedProperties = <T extends {}>(object: T): T => {\n for (const prop of [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]) {\n if ((object as any)[prop] === undefined) {\n delete (object as any)[prop];\n }\n }\n\n return object;\n};\n"],
|
|
5
|
-
"mappings": "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;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;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,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AAAA;AACxB,QAAIW,MAAM,KAAKD,IAAIF,QAAQI,SAAS,GAAG;AACrC,aAAOH,KAAKC,IAAI,CAAA;IAClB,OAAO;AACL,aAAOC;IACT;EACF;AAEA,SAAOF,KAAAA;AACT;;;ACtCK,IAAMI,MAAM,CAACC,WAAqBA,OAAOC,OAAO,CAACC,GAAGC,MAAMD,IAAIC,GAAG,CAAA;;;ACKjE,IAAMC,sBAAsB,CAACC,UAAAA;AAClCC,iBAAe,MAAA;AACb,UAAMD;EACR,CAAA;AACF;;;ACPO,IAAME,UAAU;;;;;;;;;;;;;EAarB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAMC,QAAQ;EACnB;;EAEA;;EAEA;EACA;EACA;EACA;EACA;;;;EAIA;EACA;EACA;EACA;EACA;;AAGK,IAAMC,aAAa,CAACC,QAAmBC,WAAWD,IAAIE,MAAK,CAAA;AAE3D,IAAMD,aAAa,CAACE,QAAgBC,QAAQC,SAASF,KAAK,EAAA,CAAA;AAE1D,IAAMC,UAAU,CAACE,SAAiBT,Q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",
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport type Comparator<A, B = A> = (a: A, b: B) => boolean;\n\nexport type DiffResult<A, B = A> = {\n added: B[];\n updated: B[];\n removed: A[];\n};\n\n/**\n * Compute diff between two arrays.\n * @param previous\n * @param next\n * @param comparator\n */\n// TODO(burdon): Factor out.\nexport const diff = <A, B = A>(\n previous: readonly A[],\n next: readonly B[],\n comparator: Comparator<A, B>,\n): DiffResult<A, B> => {\n const remaining = [...previous];\n const result: DiffResult<A, B> = {\n added: [],\n updated: [],\n removed: remaining,\n };\n\n // TODO(burdon): Mark and sweep.\n for (const object of next) {\n const index = remaining.findIndex((item) => comparator(item, object));\n if (index === -1) {\n result.added.push(object);\n } else {\n result.updated.push(object);\n remaining.splice(index, 1);\n }\n }\n\n return result;\n};\n\n// TODO(burdon): Factor out.\nexport const intersection = <A, B = A>(a: A[], b: B[], comparator: Comparator<A, B>): A[] =>\n a.filter((a) => b.find((b) => comparator(a, b)) !== undefined);\n\n/**\n * Returns a new array with only the first instance of each unique item\n * based on a specified property.\n *\n * @typeParam T - The type of items in the input array.\n * @param array - The array to filter for distinct items.\n * @param key - The property key to determine uniqueness for each item.\n * @returns A new array with only distinct items based on the specified property.\n */\nexport const distinctBy = <T, K>(array: T[], selector: (item: T) => K): T[] => {\n const seenKeys = new Set<K>();\n return array.filter((item) => {\n const key = selector(item);\n\n if (seenKeys.has(key)) {\n return false;\n }\n\n seenKeys.add(key);\n return true;\n });\n};\n\n/**\n * Remove elements from array.\n * @param array\n * @param test\n * @returns removed elements.\n */\nexport const removeBy = <T>(array: T[], test: (element: T, index: number) => boolean): T[] => {\n const removed: T[] = [];\n for (let i = array.length - 1; i >= 0; i--) {\n if (test(array[i], i)) {\n removed.push(...array.splice(i, 1));\n }\n }\n\n return removed;\n};\n\n/**\n * Splits an array based on a type guard predicate function.\n * Infers the output tuple types from the guard function.\n */\nexport const partition = <T>(array: T[], guard: (item: T, index: number, array: T[]) => boolean): [T[], T[]] => {\n return array.reduce<[T[], T[]]>(\n ([accepted, rejected], item, index, array) =>\n guard(item, index, array) ? [[...accepted, item], rejected] : [accepted, [...rejected, item]],\n [[], []],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// https://stackoverflow.com/a/59416332\n\n// Precomputed octet list.\nconst byteToHex: string[] = [];\nfor (let n = 0; n <= 0xff; ++n) {\n const hexOctet = n.toString(16).padStart(2, '0');\n byteToHex.push(hexOctet);\n}\n\nexport const arrayToHex = (buf: ArrayBufferLike) => {\n const buff = new Uint8Array(buf);\n const hexOctets = []; // new Array(buff.length) is even faster (preallocates necessary array size), then use hexOctets[i] instead of .push()\n\n for (let i = 0; i < buff.length; ++i) {\n hexOctets.push(byteToHex[buff[i]]);\n }\n\n return hexOctets.join('');\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 2024 DXOS.org\n//\n\n/**\n * A collection of async functions.\n */\nexport class CallbackCollection<F extends (...args: any[]) => Promise<any>> {\n #callbacks: F[] = [];\n\n append(callback: F) {\n this.#callbacks.push(callback);\n }\n\n prepend(callback: F) {\n this.#callbacks.unshift(callback);\n }\n\n remove(callback: F) {\n this.#callbacks = this.#callbacks.filter((c) => c !== callback);\n }\n\n callParallel(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>[]> {\n return Promise.all(this.#callbacks.map((callback) => callback(...args)));\n }\n\n async callSerial(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>[]> {\n const results: Awaited<ReturnType<F>>[] = [];\n for (const callback of this.#callbacks) {\n results.push(await callback(...args));\n }\n return results;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nconst LOW_DASH = '_'.codePointAt(0)!;\nconst HI_DASH = '-'.codePointAt(0)!;\nconst SMALL_A = 'a'.codePointAt(0)!;\nconst CAPITAL_A = 'A'.codePointAt(0)!;\nconst SMALL_Z = 'z'.codePointAt(0)!;\nconst CAPITAL_Z = 'Z'.codePointAt(0)!;\n\nconst isLower = (char: number) => char >= SMALL_A && char <= SMALL_Z;\n\nconst isUpper = (char: number) => char >= CAPITAL_A && char <= CAPITAL_Z;\n\nconst toLower = (char: number) => char + 0x20;\n\n/**\n * NOTE: Removed `xcase` due to CF dependency conflicts.\n */\nconst changeCase = (str: string, delim: number) => {\n const firstChar = str.charCodeAt(0);\n if (!isLower(firstChar)) {\n return str;\n }\n\n const length = str.length;\n let changed = false;\n const out: number[] = [];\n for (let i = 0; i < length; ++i) {\n const c = str.charCodeAt(i);\n if (isUpper(c)) {\n out.push(delim);\n out.push(toLower(c));\n changed = true;\n } else {\n out.push(c);\n }\n }\n\n return changed ? String.fromCharCode.apply(undefined, out) : str;\n};\n\nexport const decamelize = (str: string) => changeCase(str, LOW_DASH);\nexport const hyphenize = (str: string) => changeCase(str, HI_DASH);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const chunkArray = <T>(array: T[], size: number): T[][] => {\n const result = [];\n for (let i = 0; i < array.length; i += size) {\n result.push(array.slice(i, i + size));\n }\n return result;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nexport class CircularBuffer<T> {\n private readonly _buffer: T[];\n private _nextIndex = 0;\n private _elementCount = 0;\n\n constructor(size: number) {\n invariant(size >= 1);\n this._buffer = new Array(size);\n }\n\n public push(element: T): T | undefined {\n const evicted = this._elementCount === this._buffer.length ? this._buffer[this._nextIndex] : undefined;\n this._buffer[this._nextIndex] = element;\n this._nextIndex = (this._nextIndex + 1) % this._buffer.length;\n this._elementCount = Math.min(this._buffer.length, this._elementCount + 1);\n return evicted;\n }\n\n public get elementCount() {\n return this._elementCount;\n }\n\n public getLast(): T | undefined {\n if (this._elementCount === 0) {\n return undefined;\n }\n if (this._nextIndex === 0) {\n return this._buffer[this._buffer.length - 1];\n }\n return this._buffer[this._nextIndex - 1];\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this.values();\n }\n\n public *values(): IterableIterator<T> {\n if (this._elementCount === 0) {\n return;\n }\n if (this._elementCount < this._buffer.length) {\n for (let i = 0; i < this._elementCount; i++) {\n yield this._buffer[i];\n }\n return;\n }\n for (let i = this._nextIndex; i < this._buffer.length; i++) {\n yield this._buffer[i];\n }\n for (let i = 0; i < this._nextIndex; i++) {\n yield this._buffer[i];\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](): SetIterator<T> {\n return this._values.values();\n }\n\n *entries(): SetIterator<[T, T]> {\n for (const value of this._values.values()) {\n yield [value, value];\n }\n }\n\n keys(): SetIterator<T> {\n return this[Symbol.iterator]();\n }\n\n values(): SetIterator<T> {\n return this[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return 'ComplexSet';\n }\n\n union<U>(other: ReadonlySetLike<U>): Set<T | U> {\n throw new Error('Method not implemented.');\n }\n\n intersection<U>(other: ReadonlySetLike<U>): Set<T & U> {\n throw new Error('Method not implemented.');\n }\n\n difference<U>(other: ReadonlySetLike<U>): Set<T> {\n throw new Error('Method not implemented.');\n }\n\n symmetricDifference<U>(other: ReadonlySetLike<U>): Set<T | U> {\n throw new Error('Method not implemented.');\n }\n\n isSubsetOf(other: ReadonlySetLike<unknown>): boolean {\n throw new Error('Method not implemented.');\n }\n\n isSupersetOf(other: ReadonlySetLike<unknown>): boolean {\n throw new Error('Method not implemented.');\n }\n\n isDisjointFrom(other: ReadonlySetLike<unknown>): boolean {\n throw new Error('Method not implemented.');\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](): SetIterator<[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(): SetIterator<[K, V]> {\n return this[Symbol.iterator]();\n }\n\n keys(): SetIterator<K> {\n return this._keys.values();\n }\n\n values(): SetIterator<V> {\n return this._values.values();\n }\n\n mapValues<R>(mapper: (v: V, k: K) => R): ComplexMap<K, R> {\n return new ComplexMap(\n this._keyProjection,\n [...this.entries()].map(([key, value]) => [key, mapper(value, key)]),\n );\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// 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", "/**\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 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 setDeep = <T>(obj: any, path: readonly (string | number)[], value: T): T => {\n invariant(path.length > 0);\n let parent = obj;\n for (const key of path.slice(0, -1)) {\n if (parent[key] === undefined) {\n const isArrayIndex = !isNaN(Number(key));\n parent[key] = isArrayIndex ? [] : {};\n }\n parent = parent[key];\n }\n\n parent[path.at(-1)!] = value;\n return obj;\n};\n\n/**\n * Gets a value from a deeply nested object.\n * @param obj\n * @param path\n * @returns The value of the prop if it exists, otherwise undefined.\n */\nexport const getDeep = <T>(obj: any, path: readonly (string | number)[]): T | undefined => {\n let parent = obj;\n for (const key of path) {\n parent = parent?.[key];\n }\n\n return parent;\n};\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 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 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\ninterface IMap<K, V> {\n get(key: K): V | undefined;\n set(key: K, value: V): this;\n}\n\n/**\n * Get or set map value.\n */\nexport const defaultMap = <K, V>(map: IMap<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\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 ?? 'Object'}#${getPrototypeSpecificInstanceId(instance)}`;\n};\n", "/**\n * Joins two untyped tables on the given columns.\n * @param leftColumn The column to join on in the first table.\n * @param rightColumn The column to join on in the second table.\n */\n//\n// Copyright 2024 DXOS.org\n//\n\nexport const joinTables = (\n leftColumn: string,\n rightColumn: string,\n left: Record<string, any>[],\n right: Record<string, any>[],\n) => {\n const map = new Map();\n const used = new Set();\n for (const row of right) {\n map.set(row[rightColumn], row);\n }\n\n const result = [];\n for (const row of left) {\n const right = map.get(row[leftColumn]);\n used.add(right);\n\n result.push(Object.assign(right ?? {}, row));\n }\n\n // Add unmatched rows from the right table.\n for (const row of right) {\n if (!used.has(row)) {\n result.push(row);\n }\n }\n\n return result;\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\nexport type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nconst MAX_DEPTH = 5;\nconst LOG_MAX_DEPTH = 7;\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\n/**\n * Recursively converts an object into a JSON-compatible object appropriate for logging.\n */\n\n// TODO(nf): use util.inspect/[util.inspect.custom] instead?\nexport const jsonlogify = (value: any, depth = 0, visitedObjects = new WeakSet<any>()): any => {\n if (depth > LOG_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) => jsonlogify(x, depth + 1, visitedObjects));\n } else if (typeof value.toJSONL === 'function') {\n return value.toJSONL();\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] = jsonlogify(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 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/**\n * Recursively maps values traversing arrays and objects.\n * @param fn Function to apply to each value. Second argument is a function to recurse into the value.\n */\nexport const deepMapValues = (\n value: any,\n fn: (value: any, recurse: (value: any) => any, key: string | number | undefined) => any,\n): any => {\n return new DeepMapper(fn).map(value);\n};\n\nclass DeepMapper {\n private readonly _cyclic = new Map<any, any>();\n\n constructor(\n private readonly _fn: (value: any, recurse: (value: any) => any, key: string | number | undefined) => any,\n ) {}\n\n map(value: any): any {\n return this._map(value, undefined);\n }\n\n private _map(value: any, key: string | number | undefined): any {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n return this._fn(value, this._recurse, key);\n }\n\n private _recurse = (value: any) => {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n if (Array.isArray(value)) {\n const res = new Array(value.length);\n this._cyclic.set(value, res);\n for (let i = 0; i < value.length; i++) {\n res[i] = this._map(value[i], i);\n }\n return res;\n } else if (value !== null && typeof value === 'object') {\n const res: any = {};\n this._cyclic.set(value, res);\n for (const key in value) {\n res[key] = this._map(value[key], key);\n }\n return res;\n } else {\n return value;\n }\n };\n}\n\n/**\n * Recursively maps values traversing arrays and objects.\n * @param fn Function to apply to each value. Second argument is a function to recurse into the value.\n * Async version.\n */\nexport const deepMapValuesAsync = (\n value: any,\n fn: (value: any, recurse: (value: any) => Promise<any>, key: string | number | undefined) => Promise<any>,\n): Promise<any> => {\n return new DeepMapperAsync(fn).map(value);\n};\n\nclass DeepMapperAsync {\n private readonly _cyclic = new Map<any, any>();\n\n constructor(\n private readonly _fn: (\n value: any,\n recurse: (value: any) => Promise<any>,\n key: string | number | undefined,\n ) => Promise<any>,\n ) {}\n\n map(value: any): Promise<any> {\n return this._map(value, undefined);\n }\n\n private _map(value: any, key: string | number | undefined): Promise<any> {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n return this._fn(value, this._recurse, key);\n }\n\n private _recurse = async (value: any) => {\n if (this._cyclic.has(value)) {\n return this._cyclic.get(value);\n }\n\n if (Array.isArray(value)) {\n const res = new Array(value.length);\n this._cyclic.set(value, res);\n for (let i = 0; i < value.length; i++) {\n res[i] = await this._map(value[i], i);\n }\n return res;\n } else if (value !== null && typeof value === 'object') {\n const res: any = {};\n this._cyclic.set(value, res);\n for (const key in value) {\n res[key] = await this._map(value[key], key);\n }\n return res;\n } else {\n return value;\n }\n };\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 2024 DXOS.org\n//\n\nexport const orderKeys = <O extends {}>(obj: O, order: (keyof O)[]): O => {\n const ordered: Partial<O> = {};\n for (const key of order) {\n if (key in obj) {\n ordered[key] = obj[key];\n }\n }\n for (const key in obj) {\n if (!(key in ordered)) {\n ordered[key] = obj[key];\n }\n }\n return ordered as O;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// Based on https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore?tab=readme-ov-file#_pick.\n\n/**\n * Creates an object composed of the object properties predicate returns truthy for.\n */\n\nexport const pick = <T extends object, K extends keyof T = keyof T>(obj: T, keys: K[]): Pick<T, K> => {\n return keys.reduce(\n (result, key) => {\n if (obj && key in obj) {\n result[key] = obj[key];\n }\n return result;\n },\n {} as Pick<T, K>,\n );\n};\n\n/**\n * Creates an object composed of the object properties predicate returns truthy for.\n */\nexport const pickBy = (obj: Record<any, any>, predicate: (value: any) => boolean) => {\n const result: Record<any, any> = {};\n for (const key in obj) {\n if (predicate(obj[key])) {\n result[key] = obj[key];\n }\n }\n return result;\n};\n\n/**\n * Omit given props.\n * @param obj\n * @param keys\n */\nexport const omit = <T extends object, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> => {\n const result = { ...obj };\n keys.forEach((key) => {\n delete result[key];\n });\n return result;\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 2025 DXOS.org\n//\n\n/**\n * Determines priority order.\n *\n * - `static` - Remain in natural order.\n * - `hoist` - Placed before `static`.\n * - `fallback` - Placed after `static`.\n */\n// TODO(wittjosiah): Change to 'static' | 'start' | 'end'.\nexport type Position = 'static' | 'hoist' | 'fallback';\n\n/**\n * Sorting function for sorting by position.\n */\nexport const byPosition = <T extends { position?: Position }>(a: T, b: T) => {\n const aPosition = a.position ?? 'static';\n const bPosition = b.position ?? 'static';\n\n if (aPosition === bPosition) {\n return 0;\n } else if (aPosition === 'hoist' || bPosition === 'fallback') {\n return -1;\n } else if (bPosition === 'hoist' || aPosition === 'fallback') {\n return 1;\n }\n\n return 0;\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 = 0) => {\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 (n: number): number[];\n <T>(n: number, mapper: RangeMapper<T>): T[];\n} = <T>(n: number, mapper?: RangeMapper<T>) => {\n const range = Array.from(Array(n).keys());\n return mapper == null ? range : range.map(mapper);\n};\n\nexport const rangeFromTo: {\n (from: number, to: number): number[];\n <T>(from: number, to: number, mapper: RangeMapper<T>): T[];\n} = <T = number>(from: number, to: number, mapper?: RangeMapper<T>) => {\n return mapper == null ? range(to - from, (i) => i + from) : range(to - from, (i) => mapper(i + from));\n};\n\ntype RangeMapper<T> = (n: number) => T;\n\n/**\n * Clamps a value between a minimum and maximum value.\n */\nexport const clamp = (value: number, min: number, max: number): number => {\n return Math.min(Math.max(value, min), max);\n};\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 2024 DXOS.org\n//\n\n/**\n * A utility for safely performing an asynchronous action on every item from source.\n * @param source elements passed to taskFactory.\n * @param taskFactory a function that converts an elements into an async task.\n * @param onError if provided will be called for every failed task.\n * @returns elements for which task execution failed.\n */\nexport const safeAwaitAll = async <T>(\n source: Array<T> | IterableIterator<T>,\n taskFactory: (item: T) => Promise<any>,\n onError?: (error: Error, item: T, idx: number) => void,\n): Promise<T[]> => {\n const failedItems: T[] = [];\n await Promise.all(\n [...source].map(async (item, idx) => {\n try {\n await taskFactory(item);\n } catch (err: any) {\n if (onError) {\n onError(err, item, idx);\n }\n failedItems.push(item);\n }\n }),\n );\n return failedItems;\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 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\nexport const safeParseFloat = (str: string, defaultValue?: number): number | undefined => {\n try {\n return parseFloat(str);\n } catch {\n return defaultValue ?? 0;\n }\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 && data.length > 0) {\n try {\n return JSON.parse(data);\n } catch (err) {}\n }\n return defaultValue;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { CircularBuffer } from './circular-buffer';\n\nexport type SlidingWindowSummaryConfig = {\n dataPoints: number;\n /**\n * The number of digits after decimal.\n */\n precision?: number;\n};\n\nexport class SlidingWindowSummary {\n private readonly _buffer: CircularBuffer<number>;\n private _sum = 0;\n\n private readonly _precision: number | undefined;\n\n constructor(options: SlidingWindowSummaryConfig) {\n this._buffer = new CircularBuffer(options.dataPoints);\n if (options.precision != null) {\n invariant(options.precision >= 0);\n this._precision = Math.pow(10, options.precision);\n }\n }\n\n public record(value: number) {\n const evicted = this._buffer.push(value);\n this._sum += value - (evicted ?? 0);\n }\n\n public average() {\n return this._buffer.elementCount === 0 ? 0 : this._withPrecision(this._sum / this._buffer.elementCount);\n }\n\n public computeWindowSummary() {\n const mean = this.average();\n const sortedElements = [...this._buffer].sort();\n const median = this._withPrecision(\n sortedElements.length % 2 === 0\n ? (sortedElements[sortedElements.length / 2] + sortedElements[sortedElements.length / 2 - 1]) / 2\n : sortedElements[sortedElements.length / 2],\n );\n const p90 = this._withPrecision(sortedElements[Math.round(sortedElements.length * 0.9)]);\n const variance = sortedElements.reduce((acc, v) => acc + Math.pow(v - mean, 2)) / sortedElements.length;\n const stdDev = this._withPrecision(Math.sqrt(variance));\n const histogram = sortedElements.reduce(\n (acc, v) => {\n acc[v] += 1;\n return acc;\n },\n {} as { [element: number]: number },\n );\n return { mean, median, p90, stdDev, histogram };\n }\n\n private _withPrecision(value: number) {\n if (this._precision == null) {\n return value;\n }\n return Math.round(value * this._precision) / this._precision;\n }\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\nexport const sum = (values: number[]) => values.reduce((a, b) => a + b, 0);\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Throws an unhandled error for the runtime to catch.\n * Does not cause stack unwinding.\n * Error will be thrown in the next microtask.\n */\nexport const throwUnhandledError = (error: Error) => {\n queueMicrotask(() => {\n throw error;\n });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PublicKey } from '@dxos/keys';\n\nexport const idEmoji = [\n // When changing this set, please check the result in a console or e.g. RunKit (https://runkit.com/thure/642214441dd6ae000855a8de)\n // Emoji sometimes use a combination of code points, and some code points aren't visible on their own, so by adding or deleting you may unintentionally create non-visible items.\n // This set was chosen from the characters in Unicode Emoji v15.0 based on the following criteria:\n // – not people or isolated anthropomorphic faces\n // – not flags\n // – more concrete than abstract\n // – less culturally specific\n // – less easily confused with another emoji in the set\n // – requires less special knowledge to identify\n // – less likely to evoke negative feelings (no meat, no drugs, no weapons, etc)\n // – less common as a signifier in UX\n // NOTE that this is intentionally an array of strings because of the way emoji graphemes work.\n '👹',\n '👻',\n '👽',\n '🤖',\n '🎃',\n '🦾',\n '🦿',\n '🦷',\n '👣',\n '👁️',\n '🧶',\n '👑',\n '🐒',\n '🦆',\n '🦉',\n '🐴',\n '🦄',\n '🐝',\n '🦋',\n '🐞',\n '🪲',\n '🐢',\n '🦎',\n '🦕',\n '🦑',\n '🦀',\n '🐠',\n '🐬',\n '🐋',\n '🦭',\n '🐅',\n '🐆',\n '🦓',\n '🦍',\n '🦧',\n '🐘',\n '🐫',\n '🦒',\n '🦘',\n '🦬',\n '🐖',\n '🐏',\n '🦌',\n '🐕',\n '🐈',\n '🐓',\n '🦚',\n '🦜',\n '🦢',\n '🦩',\n '🦦',\n '🐁',\n '🐿️',\n '🌵',\n '🌲',\n '🌳',\n '🪵',\n '🌱',\n '🍁',\n '🪺',\n '🍄',\n '🐚',\n '🪸',\n '🪨',\n '🌾',\n '🌷',\n '🌻',\n '☀️',\n '🌙',\n '🪐',\n '⭐️',\n '⚡️',\n '☄️',\n '🔥',\n '🌈',\n '☁️',\n '💧',\n '⛱️',\n '🌊',\n '🍎',\n '🍋',\n '🍉',\n '🍇',\n '🫐',\n '🍈',\n '🍒',\n '🍑',\n '🥭',\n '🍍',\n '🥥',\n '🥝',\n '🥑',\n '🌶️',\n '🌽',\n '🥕',\n '🍬',\n '🥜',\n '🫖',\n '☕️',\n '🍵',\n '🧊',\n '🧂',\n '🏔️',\n '⚓️',\n '🛟',\n '🏝️',\n '🛶',\n '🚀',\n '🛰️',\n '⛲️',\n '🏰',\n '🚲',\n '⛺️',\n '🎙️',\n '🧲',\n '⚙️',\n '🔩',\n '🔮',\n '🔭',\n '🔬',\n '🧬',\n '🌡️',\n '🧺',\n '🛎️',\n '🔑',\n '🪑',\n '🧸',\n '🎈',\n '🎀',\n '🎊',\n '♻️',\n '🎵',\n];\n\nexport const idHue = [\n 'red' as const,\n // 'orange' as const, /* More shades in these palettes are considered “ugly” */\n 'amber' as const, // Amber arcs between red-orange and yellow as it gets lighter, so improves aesthetics.\n // 'yellow' as const, /* More shades in these palettes are considered “ugly” */\n 'lime' as const,\n 'green' as const,\n 'emerald' as const,\n 'teal' as const,\n 'cyan' as const,\n // 'sky' as const, /* Omitted since it is quite similar to the primary accent palette */\n // 'blue' as const, /* Omitted since it is quite similar to the primary accent palette */\n // 'indigo' as const, /* Omitted since it is quite similar to the primary accent palette */\n 'violet' as const,\n 'purple' as const,\n 'fuchsia' as const,\n 'pink' as const,\n 'rose' as const,\n];\n\nexport const keyToEmoji = (key: PublicKey) => hexToEmoji(key.toHex());\n\nexport const hexToEmoji = (hex: string) => toEmoji(parseInt(hex, 16));\n\nexport const toEmoji = (hash: number) => idEmoji[hash % idEmoji.length];\n\nexport const keyToHue = (key: PublicKey) => hexToHue(key.toHex());\n\nexport const hexToHue = (hex: string) => toHue(parseInt(hex, 16));\n\nexport const toHue = (hash: number) => idHue[hash % idHue.length];\n\nexport type FallbackValue = {\n emoji: string;\n hue: (typeof idHue)[number];\n};\n\nexport const keyToFallback = (key: PublicKey) => hexToFallback(key.toHex());\n\nexport const hexToFallback = (hex: string) => toFallback(parseInt(hex, 16));\n\nexport const toFallback = (hash: number): FallbackValue => ({ emoji: toEmoji(hash), hue: toHue(hash) });\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 2022 DXOS.org\n//\n\nimport { truncateKey } from '@dxos/debug';\n\n// TODO(burdon): See also https://www.npmjs.com/package/object-treeify\n\nexport type TreeNode = {\n id: string;\n children?: TreeNode[];\n};\n\n/**\n * Create tree using depth first traversal.\n * https://waylonwalker.com/drawing-ascii-boxes/#connectors\n */\nexport const stringifyTree = (node: TreeNode, ancestors: [TreeNode, number][] = [], rows: string[] = []) => {\n if (node.children?.length) {\n node.children!.forEach((child: TreeNode, i) => {\n stringifyTree(child, [...ancestors, [node, i]], rows);\n });\n } else {\n const keyLen = 8;\n const name = (node: TreeNode) => truncateKey(node.id, keyLen);\n\n const parts = [];\n ancestors.forEach(([node, i], j) => {\n // Current is on first row.\n const first = ancestors.slice(j).every(([_, i]) => i === 0);\n\n // Root.\n parts.push(j === 0 ? (first ? '├' : ' ') : '');\n\n // Ancestor name (if first row) or padding.\n parts.push(first ? `─(${name(node)})─` : ''.padEnd(keyLen + 4));\n\n if (node.children) {\n // Connector to children.\n if (first) {\n parts.push(node.children.length > 1 ? '┬' : '─');\n } else {\n // Child is on first row.\n const childFirst = ancestors.slice(j + 1).every(([_, i]) => i === 0);\n\n // Last child.\n if (node.children.length - 1 === i) {\n parts.push(childFirst ? '╰' : ' ');\n } else {\n parts.push(childFirst ? '├' : '│');\n }\n }\n }\n });\n\n parts.push(`─(${name(node)})`);\n rows.push(parts.join(''));\n }\n\n return rows; // .join('\\n');\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nexport type AsyncCallback<T> = (param: T) => Promise<void>;\n\nexport type Provider<T, V = void> = (arg: V) => T;\n\nexport type MaybeProvider<T, V = void> = T | ((arg: V) => T);\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type GuardedType<T> = T extends (value: any) => value is infer R ? R : never;\n\nexport type DeepReadonly<T> = {\n readonly [P in keyof T]: T[P] extends Record<string, any>\n ? DeepReadonly<T[P]>\n : T[P] extends Array<infer U>\n ? ReadonlyArray<DeepReadonly<U>>\n : T[P];\n};\n\nexport type DeepWriteable<T> = { -readonly [K in keyof T]: T[K] extends object ? DeepWriteable<T[K]> : T[K] };\n\n/**\n * Simplifies type (copied from effect).\n */\nexport type Simplify<A> = { [K in keyof A]: A[K] } extends infer B ? B : never;\n\n/**\n * Replace types of specified keys.\n */\nexport type Specialize<T, U> = Simplify<Omit<T, keyof U> & U>;\n\n/**\n * Make specified keys optional.\n */\n// TODO(burdon): Wrapping with Simplify fails.\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\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 * 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 */\nexport const isNotFalsy = <T>(value: T): value is Exclude<T, Falsy> => !!value;\nexport const isNonNullable = <T>(value: T | null | undefined): value is T => value != null;\n\n// TODO(burdon): Replace use of setTimeout everywhere?\n// Would remove the need to cancel (and associated errors), but would change the operation of the code\n// since the function would call immediately instead of waiting for the next tick.\n// Could this affect performance? Otherwise replace with queueMicrotask?\nexport const doAsync = async (fn: () => Promise<void>) => fn();\n\n/**\n * Get value from a provider.\n */\nexport const getProviderValue = <T, V = void>(provider: MaybeProvider<T, V>, arg?: V): T => {\n return typeof provider === 'function' ? (provider as Function)(arg) : provider;\n};\n\n/**\n * Get value from a provider, which may be async.\n */\nexport const getAsyncProviderValue = <T, V = void>(\n provider: MaybeProvider<MaybePromise<T>, V>,\n arg?: V,\n): MaybePromise<T> => {\n return getProviderValue(provider, arg);\n};\n\n/**\n * Remove keys with undefined values.\n */\nexport const stripUndefined = <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 stripUndefined(value); // TODO(burdon): Test recursion.\n }\n });\n }\n\n return obj;\n};\n\n/**\n * Return new object with sorted keys.\n */\nexport const sortKeys = <T extends object>(obj: T): T =>\n Object.keys(obj)\n .sort()\n .reduce<T>((sorted, key) => {\n (sorted as any)[key] = (obj as any)[key];\n return sorted;\n }, {} as T);\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", "//\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(): SetIterator<[K, V]> {\n for (const [key, value] of this._internal) {\n yield [key, value.deref()!];\n }\n }\n\n keys(): SetIterator<K> {\n return this._internal.keys();\n }\n\n *values(): SetIterator<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](): SetIterator<[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 2025 DXOS.org\n//\n\n/**\n * Capitalizes the first letter of a string.\n */\nexport const capitalize = (str: string): string => {\n if (str.length === 0) {\n return '';\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const removeUndefinedProperties = <T extends {}>(object: T): T => {\n for (const prop of [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]) {\n if ((object as any)[prop] === undefined) {\n delete (object as any)[prop];\n }\n }\n\n return object;\n};\n"],
|
|
5
|
+
"mappings": "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;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;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,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AAAA;AACxB,QAAIW,MAAM,KAAKD,IAAIF,QAAQI,SAAS,GAAG;AACrC,aAAOH,KAAKC,IAAI,CAAA;IAClB,OAAO;AACL,aAAOC;IACT;EACF;AAEA,SAAOF,KAAAA;AACT;;;ACtCK,IAAMI,MAAM,CAACC,WAAqBA,OAAOC,OAAO,CAACC,GAAGC,MAAMD,IAAIC,GAAG,CAAA;;;ACKjE,IAAMC,sBAAsB,CAACC,UAAAA;AAClCC,iBAAe,MAAA;AACb,UAAMD;EACR,CAAA;AACF;;;ACPO,IAAME,UAAU;;;;;;;;;;;;;EAarB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAMC,QAAQ;EACnB;;EAEA;;EAEA;EACA;EACA;EACA;EACA;;;;EAIA;EACA;EACA;EACA;EACA;;AAGK,IAAMC,aAAa,CAACC,QAAmBC,WAAWD,IAAIE,MAAK,CAAA;AAE3D,IAAMD,aAAa,CAACE,QAAgBC,QAAQC,SAASF,KAAK,EAAA,CAAA;AAE1D,IAAMC,UAAU,CAACE,SAAiBT,Q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",
|
|
6
6
|
"names": ["diff", "previous", "next", "comparator", "remaining", "result", "added", "updated", "removed", "object", "index", "findIndex", "item", "push", "splice", "intersection", "a", "b", "filter", "find", "undefined", "distinctBy", "array", "selector", "seenKeys", "Set", "key", "has", "add", "removeBy", "test", "i", "length", "partition", "guard", "reduce", "accepted", "rejected", "byteToHex", "n", "hexOctet", "toString", "padStart", "push", "arrayToHex", "buf", "buff", "Uint8Array", "hexOctets", "i", "length", "join", "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", "CallbackCollection", "append", "callback", "push", "prepend", "unshift", "remove", "filter", "c", "callParallel", "args", "Promise", "all", "map", "callSerial", "results", "LOW_DASH", "codePointAt", "HI_DASH", "SMALL_A", "CAPITAL_A", "SMALL_Z", "CAPITAL_Z", "isLower", "char", "isUpper", "toLower", "changeCase", "str", "delim", "firstChar", "charCodeAt", "length", "changed", "out", "i", "c", "push", "String", "fromCharCode", "apply", "undefined", "decamelize", "hyphenize", "chunkArray", "array", "size", "result", "i", "length", "push", "slice", "invariant", "CircularBuffer", "constructor", "size", "_nextIndex", "_elementCount", "_buffer", "Array", "push", "element", "evicted", "length", "undefined", "Math", "min", "elementCount", "getLast", "Symbol", "iterator", "values", "i", "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", "union", "other", "Error", "intersection", "difference", "symmetricDifference", "isSubsetOf", "isSupersetOf", "isDisjointFrom", "makeSet", "projection", "BoundComplexSet", "ComplexMap", "_keyProjection", "_keys", "key", "keyDeleted", "valueDeleted", "primitive", "get", "raise", "mapValues", "mapper", "map", "makeMap", "keyProjection", "BoundComplexMap", "Symbol", "dispose", "asyncDispose", "defer", "fn", "DeferGuard", "constructor", "_fn", "Symbol", "dispose", "result", "Promise", "Error", "deferAsync", "DeferAsyncGuard", "asyncDispose", "deferFunction", "fnProvider", "args", "invariant", "setDeep", "obj", "path", "value", "length", "parent", "key", "slice", "undefined", "isArrayIndex", "isNaN", "Number", "at", "getDeep", "entry", "map", "key", "MapEntry", "constructor", "_map", "_key", "value", "get", "orInsert", "has", "set", "deep", "forEachAsync", "items", "fn", "Promise", "all", "map", "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", "defaultMap", "map", "key", "def", "value", "get", "undefined", "set", "symbol", "Symbol", "for", "instanceContexts", "globalThis", "WeakMap", "getPrototypeSpecificInstanceId", "instance", "prototype", "Object", "getPrototypeOf", "instanceCtx", "defaultMap", "nextId", "instanceIds", "id", "get", "undefined", "set", "getDebugName", "constructor", "name", "joinTables", "leftColumn", "rightColumn", "left", "right", "map", "Map", "used", "Set", "row", "set", "result", "get", "add", "push", "Object", "assign", "has", "inspect", "PublicKey", "arraysEqual", "a", "b", "length", "i", "arrayToBuffer", "array", "Buffer", "from", "buffer", "byteOffset", "byteLength", "bufferToArray", "Uint8Array", "stringToArray", "string", "arrayToString", "toString", "MAX_DEPTH", "LOG_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", "jsonlogify", "toJSONL", "jsonKeyReplacer", "options", "fromHex", "toHex", "truncate", "mapValues", "obj", "fn", "result", "Object", "keys", "forEach", "key", "deepMapValues", "value", "DeepMapper", "map", "constructor", "_fn", "_cyclic", "Map", "_recurse", "has", "get", "Array", "isArray", "res", "length", "set", "i", "_map", "undefined", "deepMapValuesAsync", "DeepMapperAsync", "inferObjectOrder", "objectMap", "order", "orderedObjects", "reduce", "acc", "id", "objects", "push", "ids", "add", "Set", "Object", "keys", "has", "inferRecordOrder", "assign", "filter", "orderKeys", "obj", "order", "ordered", "key", "pick", "obj", "keys", "reduce", "result", "key", "pickBy", "predicate", "omit", "forEach", "isNode", "process", "versions", "node", "mobileAndTabletCheck", "check", "a", "test", "substr", "navigator", "userAgent", "vendor", "window", "opera", "iosCheck", "includes", "platform", "document", "safariCheck", "getHostPlatform", "userAgentData", "toLowerCase", "startsWith", "byPosition", "a", "b", "aPosition", "position", "bPosition", "randomInt", "max", "min", "Math", "ceil", "floor", "random", "range", "n", "mapper", "Array", "from", "keys", "map", "rangeFromTo", "to", "i", "clamp", "value", "min", "max", "Math", "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", "safeAwaitAll", "source", "taskFactory", "onError", "failedItems", "Promise", "all", "map", "item", "idx", "err", "push", "instanceTag", "Symbol", "safeInstanceof", "tag", "target", "prototype", "Object", "defineProperty", "hasInstance", "value", "instance", "safeParseInt", "value", "defaultValue", "n", "parseInt", "isNaN", "err", "safeParseFloat", "str", "parseFloat", "safeParseJson", "data", "length", "JSON", "parse", "invariant", "SlidingWindowSummary", "constructor", "options", "_sum", "_buffer", "CircularBuffer", "dataPoints", "precision", "invariant", "_precision", "Math", "pow", "record", "value", "evicted", "push", "average", "elementCount", "_withPrecision", "computeWindowSummary", "mean", "sortedElements", "sort", "median", "length", "p90", "round", "variance", "reduce", "acc", "v", "stdDev", "sqrt", "histogram", "compareScalar", "inc", "a", "b", "compareString", "caseInsensitive", "toLowerCase", "compareObject", "prop", "sorter", "compareMulti", "sorters", "sort", "i", "s", "length", "sum", "values", "reduce", "a", "b", "throwUnhandledError", "error", "queueMicrotask", "idEmoji", "idHue", "keyToEmoji", "key", "hexToEmoji", "toHex", "hex", "toEmoji", "parseInt", "hash", "length", "keyToHue", "hexToHue", "toHue", "keyToFallback", "hexToFallback", "toFallback", "emoji", "hue", "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", "truncateKey", "stringifyTree", "node", "ancestors", "rows", "children", "length", "forEach", "child", "i", "keyLen", "name", "truncateKey", "id", "parts", "j", "first", "slice", "every", "_", "push", "padEnd", "childFirst", "join", "isNotFalsy", "value", "isNonNullable", "doAsync", "fn", "getProviderValue", "provider", "arg", "getAsyncProviderValue", "stripUndefined", "obj", "Object", "keys", "forEach", "key", "undefined", "sortKeys", "sort", "reduce", "sorted", "arrayMove", "array", "from", "to", "splice", "length", "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", "capitalize", "str", "length", "charAt", "toUpperCase", "slice", "removeUndefinedProperties", "object", "prop", "Object", "getOwnPropertyNames", "getOwnPropertySymbols", "undefined"]
|
|
7
7
|
}
|