bruh 2.0.0-beta.4 → 2.0.0-beta.5

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.
@@ -1,63 +1,81 @@
1
- export declare const isReactiveSymbol: unique symbol;
2
- export declare const isReactive: (x: unknown) => x is Reactive<unknown>;
3
- type Reaction = () => void;
4
- type StopReacting = () => void;
5
- export interface Reactive<T> {
6
- [isReactiveSymbol]: true;
7
- value: T;
8
- addReaction(reaction: Reaction): StopReacting;
9
- }
10
- export type Unreactive<T = unknown> = Exclude<T, {
11
- [isReactiveSymbol]: true;
12
- }>;
13
- export type MaybeReactive<T> = Reactive<T> | Unreactive<T>;
14
- export type NestedReactive<T extends Unreactive> = Reactive<T | NestedReactive<T>>;
15
- /**
16
- * A super simple and performant reactive value implementation
17
- */
18
- export declare class SimpleReactive<T> implements Reactive<T> {
19
- #private;
20
- [isReactiveSymbol]: true;
21
- constructor(value: T);
22
- get value(): T;
23
- set value(newValue: T);
24
- /**
25
- * @param reaction called every time that the value changes
26
- * @returns a function that stops the reactions
27
- */
28
- addReaction(reaction: Reaction): () => boolean;
1
+ interface Observer {
2
+ weakRef: WeakRef<Observer>;
3
+ dependencies: Set<Reactive<unknown>>;
4
+ isDisposed: boolean;
5
+ markDirty: () => void;
29
6
  }
7
+ export declare const untrack: <T extends unknown>(f: () => T) => T;
8
+ export declare const flush: () => void;
9
+ type StopReacting = () => void;
10
+ export type NonReactive<T = unknown> = T extends Reactive<any> ? never : T;
11
+ export type MaybeReactive<T> = Reactive<T> | NonReactive<T>;
12
+ export type NestedReactive<T extends NonReactive> = Reactive<T | NestedReactive<T>>;
30
13
  export type IsEqual<T> = {
31
14
  bivarianceHack(a: T, b: T): boolean;
32
15
  }["bivarianceHack"];
33
- export type ReactiveOptions<T> = {
16
+ export type SourceOptions<T> = {
34
17
  isEqual?: IsEqual<T>;
35
18
  };
36
- export type SourceNode<T> = FunctionalReactive<T, "source">;
37
- export type DerivativeNode<T> = FunctionalReactive<T, "derivative">;
38
- /**
39
- * A reactive implementation for building functional reactive graphs.
40
- * Ensures state consistency, minimal node updates, and transparent update batching.
41
- */
42
- export declare class FunctionalReactive<T, U extends "source" | "derivative" = any> implements Reactive<T> {
43
- #private;
44
- [isReactiveSymbol]: true;
19
+ export type DerivativeOptions<T> = {
20
+ memoKey?: () => unknown;
45
21
  isEqual?: IsEqual<T>;
46
- constructor(value: T, options?: ReactiveOptions<T>);
47
- constructor(dependencies: ReadonlyArray<FunctionalReactive<unknown>>, f: () => T, options?: ReactiveOptions<T>);
22
+ };
23
+ export type ReadonlyReactive<T> = {
24
+ readonly value: T;
25
+ peek(): T;
26
+ };
27
+ export type WritableReactive<T> = {
28
+ value: T;
29
+ peek(): T;
30
+ };
31
+ export type SourceNode<T> = Reactive<T> & WritableReactive<T>;
32
+ export type DerivativeNode<T> = Reactive<T> & ReadonlyReactive<T>;
33
+ export type ReactiveContext = {
34
+ readonly isTracking: boolean;
35
+ readonly dependencies: ReadonlyArray<Reactive<unknown>>;
36
+ readonly stackDepth: number;
37
+ };
38
+ export declare class Reactive<T> {
39
+ #private;
40
+ static get context(): ReactiveContext;
41
+ private constructor();
42
+ static source<T>(value: T, options?: SourceOptions<T>): SourceNode<T>;
43
+ static derived<T>(getter: () => T, options?: DerivativeOptions<T>): DerivativeNode<T>;
44
+ peek(): T;
48
45
  get value(): T;
49
- set value(newValue: T);
46
+ set value(next: T);
50
47
  /**
51
- * @param reaction called every time that the value changes
52
- * @returns a function that stops the reactions
48
+ * @internal
53
49
  */
54
- addReaction(reaction: Reaction): () => boolean;
50
+ removeObserver(observer: Observer): void;
51
+ }
52
+ type Cleanup = () => void;
53
+ type WatchOptionsAuto = {};
54
+ type WatchOptionsExplicit = {
55
+ skipFirst?: boolean;
56
+ };
57
+ type Watch = {
55
58
  /**
56
- * Apply pending updates from actually changed source nodes
59
+ * Auto-tracking effect: tracks all .value reads in the callback
57
60
  */
58
- static applyUpdates(): void;
59
- }
61
+ (f: () => void | Cleanup, options?: WatchOptionsAuto): StopReacting;
62
+ /**
63
+ * Explicit dependency effect: tracks only the specified dependencies,
64
+ * runs the callback untracked when any dependency changes
65
+ */
66
+ <Dependencies extends ReadonlyArray<Reactive<unknown>>>(dependencies: Dependencies | (() => Dependencies), f: () => void | Cleanup, options?: WatchOptionsExplicit): StopReacting;
67
+ };
68
+ export declare const watch: Watch;
60
69
  type R = {
70
+ /**
71
+ * A derived node with auto-tracking
72
+ */
73
+ <T>(f: () => T, options?: DerivativeOptions<T>): DerivativeNode<T>;
74
+ /**
75
+ * A derived node with explicit dependencies:
76
+ * tracks only the specified dependencies, runs the getter untracked
77
+ */
78
+ <T, Dependencies extends ReadonlyArray<Reactive<unknown>>>(dependencies: Dependencies | (() => Dependencies), f: () => T, options?: DerivativeOptions<T>): DerivativeNode<T>;
61
79
  /**
62
80
  * An initially undefined source node
63
81
  */
@@ -65,16 +83,13 @@ type R = {
65
83
  /**
66
84
  * A source node
67
85
  */
68
- <T>(value: T, options?: ReactiveOptions<T>): SourceNode<T>;
69
- /**
70
- * A derived node
71
- */
72
- <T>(dependencies: ReadonlyArray<FunctionalReactive<unknown>>, f: () => T, options?: ReactiveOptions<T>): DerivativeNode<T>;
86
+ <T>(value: T, options?: SourceOptions<T>): SourceNode<T>;
73
87
  };
74
88
  /**
75
- * A convenient wrapper for FunctionalReactive
89
+ * A convenient wrapper for Reactive
76
90
  */
77
91
  export declare const r: R;
92
+ export declare const getValue: <T extends unknown>(x: MaybeReactive<T>) => T;
78
93
  type ReactiveDo = {
79
94
  /**
80
95
  * Calls the given function with the reactive's value whenever it changes
@@ -84,7 +99,7 @@ type ReactiveDo = {
84
99
  /**
85
100
  * Calls the given function with the value once
86
101
  */
87
- <T>(value: Unreactive<T>, f: (value: Unreactive<T>) => unknown): undefined;
102
+ <T>(value: NonReactive<T>, f: (value: NonReactive<T>) => unknown): undefined;
88
103
  /**
89
104
  * If the value is not reactive, it calls the given function with that value once.
90
105
  * If it is a reactive value, it calls the given function with the reactive's value whenever it changes.
@@ -96,5 +111,5 @@ type ReactiveDo = {
96
111
  * Do something with a value, updating if it is reactive
97
112
  */
98
113
  export declare const reactiveDo: ReactiveDo;
99
- export declare const flat: <T extends Unreactive>(source: NestedReactive<T>) => FunctionalReactive<T>;
114
+ export declare const flat: <T extends unknown>(nested: NestedReactive<T>) => Reactive<T>;
100
115
  export {};
@@ -1,4 +1,5 @@
1
1
  import { LikelyAsString } from '../dom/types.mts';
2
+ export declare const isSameValueZero: (a: unknown, b: unknown) => boolean;
2
3
  /**
3
4
  * Dispatch a custom event to (capturing) and from (bubbling) a target (usually a DOM node).
4
5
  * Returns false if the event was cancelled (preventDefault()) and true otherwise.
@@ -47,11 +48,12 @@ export declare const functionAsObject: <T extends {
47
48
  }>(f: <K extends keyof T>(property: K) => T[K]) => T;
48
49
  export declare const pick: <T, K extends keyof T>(t: T, ...keys: ReadonlyArray<K>) => Pick<T, K>;
49
50
  export declare const omit: <T, K extends keyof T>(t: T, ...keys: ReadonlyArray<K>) => Omit<T, K>;
50
- export declare const mapObject: <const O extends {}, const K extends keyof O, const V extends O[K], const RK extends PropertyKey, const RV>(o: O, f: ([k, v]: [K, V]) => [RK, RV]) => { [Entry in { [Key in keyof O]: [RK, RV]; }[keyof O] as Entry[0]]: Entry[1]; };
51
+ export declare const mapObject: <O extends Record<PropertyKey, unknown>, RK extends PropertyKey, RV>(o: O, f: (entry: [keyof O, O[keyof O]]) => readonly [RK, RV]) => Record<RK, RV>;
52
+ export declare const mapValues: <O extends Record<PropertyKey, unknown>, RV>(o: O, f: (value: O[keyof O], key: keyof O) => RV) => { [K in keyof O]: RV; };
51
53
  export type InvertObject<O extends Record<PropertyKey, PropertyKey>> = {
52
- [Entry in {
53
- [Key in keyof O]: [O[Key], Key];
54
- }[keyof O] as Entry[0]]: Entry[1];
54
+ [K in O[keyof O]]: {
55
+ [Key in keyof O]: O[Key] extends K ? Key : never;
56
+ }[keyof O];
55
57
  };
56
58
  export declare const invertObject: <const O extends Record<PropertyKey, PropertyKey>>(o: O) => InvertObject<O>;
57
59
  export declare const camelToDashCase: (s: string) => string;
@@ -119,4 +121,23 @@ export declare const recursivelySearchFor: <T extends unknown>(x: unknown, f: (v
119
121
  path: SearchPath;
120
122
  value: T;
121
123
  }>;
124
+ export declare const canBeHeldWeakly: (x: unknown) => x is WeakKey;
125
+ /**
126
+ * A cache that supports nested scope paths with mixed weak/strong segments.
127
+ * Object/function segments use WeakMap (GC-able), primitives use Map.
128
+ */
129
+ export declare class NestedCache {
130
+ #private;
131
+ get<T>(path: ReadonlyArray<unknown>, compute: () => T): T;
132
+ }
133
+ export declare const memo: <In extends unknown, Out extends unknown>(f: (x: In) => Out, { scope, getKey }?: {
134
+ /**
135
+ * Defaults to [f]. Use e.g. [globalThis] to never GC memoized inputs and outputs.
136
+ */
137
+ scope?: ReadonlyArray<unknown>;
138
+ /**
139
+ * Defaults to the input itself
140
+ */
141
+ getKey?: (x: In) => unknown;
142
+ }) => (x: In) => Out;
122
143
  export {};
package/dist/utils.mjs CHANGED
@@ -1,3 +1,8 @@
1
+ const isSameValueZero = (a, b) => {
2
+ if (typeof a === "number" && typeof b === "number")
3
+ return a === b || a !== a && b !== b;
4
+ return a === b;
5
+ };
1
6
  const dispatch = (target, type, detail, options) => target.dispatchEvent(
2
7
  // Default to behave like most DOM events
3
8
  new CustomEvent(type, {
@@ -36,9 +41,12 @@ const omit = (t, ...keys) => {
36
41
  const mapObject = (o, f) => Object.fromEntries(
37
42
  Object.entries(o).map(f)
38
43
  );
39
- const invertObject = (o) => mapObject(o, ([key, value]) => [value, key]);
40
- invertObject({ a: 1, b: 2, c: 3 });
41
- mapObject({ a: 1, b: 2, c: 3 }, ([key, value]) => [value, key]);
44
+ const mapValues = (o, f) => Object.fromEntries(
45
+ Object.entries(o).map(([k, v]) => [k, f(v, k)])
46
+ );
47
+ const invertObject = (o) => Object.fromEntries(
48
+ Object.entries(o).map(([k, v]) => [v, k])
49
+ );
42
50
  const camelToDashCase = (s) => s.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase());
43
51
  const dashToCamelCase = (s) => s.replace(/-[a-z]/g, (dc) => dc[1].toUpperCase());
44
52
  const unique = (values, getKey) => {
@@ -270,18 +278,55 @@ const makeFlatRange = (firstNode, isLastNode) => {
270
278
  range2.setEndAfter(lastNode);
271
279
  return range2;
272
280
  };
273
- const recursivelySearchFor = (x3, f, path = []) => {
274
- if (f(x3)) return [{ path, value: x3 }];
275
- if (Array.isArray(x3))
276
- return x3.flatMap(
277
- (y, i) => recursivelySearchFor(y, f, [...path, { parent: x3, key: i, value: y }])
281
+ const recursivelySearchFor = (x, f, path = []) => {
282
+ if (f(x)) return [{ path, value: x }];
283
+ if (Array.isArray(x))
284
+ return x.flatMap(
285
+ (y, i) => recursivelySearchFor(y, f, [...path, { parent: x, key: i, value: y }])
278
286
  );
279
- if (x3 !== null && typeof x3 === "object")
280
- return Object.entries(x3).flatMap(
281
- ([k, v]) => recursivelySearchFor(v, f, [...path, { parent: x3, key: k, value: v }])
287
+ if (x !== null && typeof x === "object")
288
+ return Object.entries(x).flatMap(
289
+ ([k, v]) => recursivelySearchFor(v, f, [...path, { parent: x, key: k, value: v }])
282
290
  );
283
291
  return [];
284
292
  };
293
+ const canBeHeldWeakly = (x) => typeof x === "object" && x !== null || typeof x === "function" || typeof x === "symbol" && Symbol.keyFor(x) === void 0;
294
+ class NestedCache {
295
+ #root = {};
296
+ #getOrCreateNode(path) {
297
+ let node = this.#root;
298
+ for (const segment of path) {
299
+ if (canBeHeldWeakly(segment)) {
300
+ node.weakChildren ??= /* @__PURE__ */ new WeakMap();
301
+ let child = node.weakChildren.get(segment);
302
+ if (!child)
303
+ node.weakChildren.set(segment, child = {});
304
+ node = child;
305
+ } else {
306
+ node.children ??= /* @__PURE__ */ new Map();
307
+ let child = node.children.get(segment);
308
+ if (!child)
309
+ node.children.set(segment, child = {});
310
+ node = child;
311
+ }
312
+ }
313
+ return node;
314
+ }
315
+ get(path, compute) {
316
+ const node = this.#getOrCreateNode(path);
317
+ if (!Object.hasOwn(node, "value"))
318
+ node.value = compute();
319
+ return node.value;
320
+ }
321
+ }
322
+ const memoCache = new NestedCache();
323
+ const memo = (f, {
324
+ scope = [f],
325
+ getKey
326
+ } = {}) => (x) => memoCache.get(
327
+ [...scope, getKey ? getKey(x) : x],
328
+ () => f(x)
329
+ );
285
330
 
286
- export { NodeTreeIterator, attempt, basicLatin, camelToDashCase, concatenateStreams, createDestructable, dashToCamelCase, dispatch, functionAsObject, hash, invertObject, makeFlatRange, makePromiseQueue, makeRandomPassword, mapObject, modifyUrl, omit, originLock, pick, randomId, range, recursivelySearchFor, regexEscape, regexTag, unique, urlTag, urlWithParams };
331
+ export { NestedCache, NodeTreeIterator, attempt, basicLatin, camelToDashCase, canBeHeldWeakly, concatenateStreams, createDestructable, dashToCamelCase, dispatch, functionAsObject, hash, invertObject, isSameValueZero, makeFlatRange, makePromiseQueue, makeRandomPassword, mapObject, mapValues, memo, modifyUrl, omit, originLock, pick, randomId, range, recursivelySearchFor, regexEscape, regexTag, unique, urlTag, urlWithParams };
287
332
  //# sourceMappingURL=utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../src/utils/index.mts"],"sourcesContent":["import type { LikelyAsString } from \"../dom/types.mts\"\n\n/**\n * Dispatch a custom event to (capturing) and from (bubbling) a target (usually a DOM node).\n * Returns false if the event was cancelled (preventDefault()) and true otherwise.\n *\n * Note that this is synchronous\n */\nexport const dispatch = (\n target: EventTarget,\n type: string,\n detail: unknown,\n options: CustomEventInit\n) =>\n target.dispatchEvent(\n // Default to behave like most DOM events\n new CustomEvent(type, {\n detail,\n bubbles: true,\n cancelable: true,\n composed: true,\n ...options\n })\n )\n\n/**\n * Inspired by https://antfu.me/posts/destructuring-with-object-or-array#take-away\n *\n * Creates an object that is both destructable with {...} and [...]\n *\n * Useful for writing library functions à la react-use & vueuse\n *\n * @example\n * ```typescript\n * const useExample = () => {\n * const a = \"a\"\n * const b = \"b\"\n * return createDestructable(\n * { a, b },\n * [ a, b ]\n * )\n * }\n *\n * const { a, b } = useExample()\n * // or\n * const [ a, b ] = useExample()\n * ```\n */\nexport const createDestructable = <\n const T extends {},\n const U extends Iterable<unknown>\n>(\n object: T,\n iterable: U\n) => {\n const destructable = {\n ...object,\n [Symbol.iterator]: () => iterable[Symbol.iterator]()\n }\n\n Object.defineProperty(destructable, Symbol.iterator, {\n enumerable: false\n })\n\n return destructable as T & U\n}\n\n/**\n * Creates an object (as a Proxy) that acts as a function\n *\n * So functionAsObject(f).property is equivalent to f(\"property\")\n *\n * This is can be useful when combined with destructuring syntax\n *\n * @example\n * ```typescript\n * const { html, head, title, body, main, h1, p } = functionAsObject(e)\n * ```\n */\nexport const functionAsObject = <T extends { [input: PropertyKey]: any }>(\n f: <K extends keyof T>(property: K) => T[K]\n) =>\n new Proxy({}, {\n get: (_, property) => f(property)\n }) as T\n\nexport const pick = <T, K extends keyof T>(t: T, ...keys: ReadonlyArray<K>) => {\n const picked = {} as Pick<T, K>\n\n for (const key of keys)\n picked[key] = t[key]\n\n return picked\n}\n\nexport const omit = <T, K extends keyof T>(t: T, ...keys: ReadonlyArray<K>) => {\n const unomitted: Partial<T> = { ...t }\n\n for (const key of keys)\n delete unomitted[key]\n\n return unomitted as Omit<T, K>\n}\n\nexport const mapObject = <\n const O extends {},\n const K extends keyof O,\n const V extends O[K],\n const RK extends PropertyKey,\n const RV\n>(\n o: O,\n f: ([k, v]: [K, V]) => [RK, RV]\n): {\n [\n Entry in\n { [Key in keyof O]: [RK, RV] }[keyof O]\n as Entry[0]\n ]: Entry[1]\n} =>\n Object.fromEntries(\n Object.entries(o).map(f as any) as any\n ) as any\n\nexport type InvertObject<O extends Record<PropertyKey, PropertyKey>> = {\n [\n Entry in\n { [Key in keyof O]: [O[Key], Key] }[keyof O]\n as Entry[0]\n ]: Entry[1]\n}\n\nexport const invertObject = <const O extends Record<PropertyKey, PropertyKey>>(o: O): InvertObject<O> =>\n mapObject(o, ([key, value]) => [value, key] as const)\n\nconst x = invertObject({ a: 1, b: 2, c: 3 })\ntype X = typeof x\n\nconst x2 = mapObject({ a: 1, b: 2, c: 3 }, ([key, value]) => [value, key] as const)\ntype X2 = typeof x2\n\nexport const camelToDashCase = (s: string) =>\n s.replace(/[A-Z]/g, c => \"-\" + c.toLowerCase())\n\nexport const dashToCamelCase = (s: string) =>\n s.replace(/-[a-z]/g, dc => dc[1].toUpperCase())\n\nexport const unique = <T, K>(\n values: Iterable<T>,\n getKey?: (value: T) => K\n) => {\n if (!getKey)\n return [...new Set(values)]\n\n const seen = new Map<K, T>()\n for (const value of values) {\n const key = getKey(value)\n if (!seen.has(key))\n seen.set(key, value)\n }\n return [...seen.values()]\n}\n\nconst report = (e: unknown) => {\n console.error(e)\n}\nexport const attempt: {\n <T, R = undefined>(f: () => T, recover?: (e: unknown) => R): T | R,\n <T, R = undefined>(f: () => Promise<T>, recover?: (e: unknown) => R): Promise<T | R>\n} = <T extends unknown>(f: () => T | Promise<T>, recover = report) => {\n try {\n const result = f()\n\n if (result instanceof Promise)\n return result.catch(recover)\n\n return result\n }\n catch (e) {\n return recover(e)\n }\n}\n\ntype FulfilledSelfReferencingPromise<T extends unknown> =\n Promise<\n {\n promise: FulfilledSelfReferencingPromise<T>,\n settled: {\n status: \"fulfilled\",\n value: T\n }\n }\n >\n\ntype RejectedSelfReferencingPromise<E extends unknown> =\n Promise<\n {\n promise: RejectedSelfReferencingPromise<E>,\n settled: {\n status: \"rejected\",\n reason: E\n }\n }\n >\n\ntype SelfReferencingPromise<T extends unknown, E extends unknown> =\n | FulfilledSelfReferencingPromise<T>\n | RejectedSelfReferencingPromise<E>\n\nexport const makePromiseQueue = <T extends unknown, E extends unknown>() => {\n const queue = new Set<SelfReferencingPromise<T, E>>()\n\n const enqueue = (promise: Promise<T>) => {\n const recursivePromise = promise\n .then(resolved => ({\n promise: recursivePromise,\n settled: {\n status: \"fulfilled\",\n value: resolved\n }\n }))\n .catch(rejected => ({\n promise: recursivePromise,\n settled: {\n status: \"rejected\",\n reason: rejected as E\n }\n })) as SelfReferencingPromise<T, E>\n\n queue.add(recursivePromise)\n }\n\n const dequeue = async () => {\n const { promise, settled } = await Promise.race<SelfReferencingPromise<T, E>>(queue)\n queue.delete(promise)\n return settled\n }\n\n return {\n enqueue,\n\n async * [Symbol.asyncIterator]() {\n while (queue.size)\n yield await dequeue()\n }\n }\n}\n\nexport const concatenateStreams = async <T extends any>(streams: ReadonlyArray<ReadableStream<T>>) => {\n const { readable, writable } = new TransformStream<T, T>()\n\n for (let i = 0; i < streams.length; i++)\n await streams[i].pipeTo(writable, { preventClose: i + 1 !== streams.length })\n\n return readable\n}\n\nexport const originLock = async (name: string, options: LockOptions = {}) => {\n const { promise: lockAquiredPromise, resolve: lockAquired } = Promise.withResolvers<void>()\n const { promise: lockReleasedPromise, resolve: releaseLock } = Promise.withResolvers<void>()\n\n try {\n navigator.locks.request(name, options, () => {\n lockAquired()\n return lockReleasedPromise\n })\n } catch {}\n\n await lockAquiredPromise\n\n return () => {\n releaseLock()\n }\n}\n\nexport const range = (from: number, to: number, stepSize = 1) => {\n const sign = Math.sign(to - from)\n if (sign === 0)\n return []\n\n const result: number[] = []\n for (let n = from; n < to; n += sign * stepSize)\n result.push(n)\n return result\n}\n\nexport const randomId = () =>\n Math.random().toString(36).slice(2)\n\nexport const basicLatin = String.fromCharCode(...range(32, 127))\n\nexport const makeRandomPassword = ({\n length = 32,\n characters = basicLatin\n}: {\n /** Max 256 */\n length?: number,\n characters?: string | ReadonlyArray<string>\n} = {}) => {\n const entropyPerCharacter = 8\n const statesPerCharacter = 2 ** entropyPerCharacter\n\n if (characters.length > statesPerCharacter)\n throw new Error(`Character count (${characters.length}) must not exceed 2^8 (256)`)\n\n const limit = statesPerCharacter - (statesPerCharacter % characters.length)\n\n const randomValuesUnderLimit: number[] = []\n while (randomValuesUnderLimit.length < length) {\n const randomValues = crypto.getRandomValues(\n new Uint8Array(length - randomValuesUnderLimit.length)\n )\n for (const randomValue of randomValues)\n if (randomValue < limit)\n randomValuesUnderLimit.push(randomValue)\n }\n\n let result = \"\"\n for (const n of randomValuesUnderLimit)\n result += characters[n % characters.length]\n return result\n}\n\nexport const hash = async (\n data: string | BufferSource,\n algorithm: AlgorithmIdentifier = \"SHA-256\"\n) => {\n if (typeof data === \"string\")\n data = new TextEncoder().encode(data)\n\n const bytes = new Uint8Array(\n await crypto.subtle.digest(algorithm, data)\n )\n\n let result = \"\"\n for (const byte of bytes)\n result += byte.toString(16).padStart(2, \"0\")\n return result\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping\n */\nexport const regexEscape = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\nexport const regexTag = (\n\tstrings: TemplateStringsArray,\n\t...substitutions: ReadonlyArray<unknown>\n) => {\n\tlet result = \"\"\n\tfor (let i = 0; i < strings.length; i++)\n\t\tresult += strings.raw[i] + regexEscape((substitutions[i] ?? \"\") + \"\")\n\treturn (flags?: string) => new RegExp(result, flags)\n}\n\nexport const urlTag = (strings: TemplateStringsArray, ...substitutions: ReadonlyArray<unknown>) => {\n\tlet result = \"\"\n\tfor (let i = 0; i < strings.length; i++)\n\t\tresult += strings[i] + encodeURIComponent((substitutions[i] ?? \"\") + \"\")\n\treturn result\n}\n\ntype UrlParts = {\n\tpathname: string\n\tsearch: string\n\thash: string\n}\nexport const modifyUrl = (url: URL | string, f: (parts: UrlParts) => Partial<UrlParts>) => {\n\ttry {\n\t\tconst result = new URL(url)\n\t\tObject.assign(result, f(result))\n\t\treturn result.href\n\t} catch {}\n\n\tconst match = (url as string).match(/(.*?)(\\?[^#\\n]*)?(#.*)?$/m)\n\tif (!match)\n return url as string\n\n\tconst [, pathname = \"\", search = \"\", hash = \"\"] = match\n\n\tconst inputParts = { pathname, search, hash }\n\tconst parts = { ...inputParts, ...f(inputParts) }\n\treturn (\n\t\tparts.pathname +\n\t\t(parts.search ? \"?\" + parts.search.replace(/^\\?/m, \"\") : \"\") +\n\t\t(parts.hash ? \"#\" + encodeURIComponent(parts.hash.replace(/^#/m, \"\")) : \"\")\n\t)\n}\n\nexport const urlWithParams = (\n\turl: URL | string,\n\tsearchParameters?: Record<string, LikelyAsString | ReadonlyArray<LikelyAsString> | undefined>\n) =>\n\tmodifyUrl(url, ({ search }) => {\n\t\tconst searchParams = new URLSearchParams(search)\n\n\t\tfor (const key in searchParameters) {\n\t\t\tsearchParams.delete(key)\n\t\t\tconst valueOrValues = searchParameters[key]\n\t\t\tif (valueOrValues === undefined) continue\n\n\t\t\tif (Array.isArray(valueOrValues))\n\t\t\t\tfor (const value of valueOrValues as ReadonlyArray<LikelyAsString>)\n\t\t\t\t\tsearchParams.append(key, value + \"\")\n\t\t\telse\n searchParams.append(key, (valueOrValues as LikelyAsString) + \"\")\n\t\t}\n\t\tsearchParams.sort()\n\n\t\treturn { search: searchParams.toString() }\n\t})\n\nexport class NodeTreeIterator implements IterableIterator<Node> {\n #root: ParentNode\n #current: Node\n #filter?: (node: Node) => boolean\n\n constructor(root: ParentNode, filter?: (node: Node) => boolean) {\n this.#current = this.#root = root\n this.#filter = filter\n }\n\n #isSkipping = false\n /** Skip descendents of the current node */\n skip() {\n this.#isSkipping = true\n }\n\n #next() {\n let current = this.#current\n while (true) {\n const isSkipping = this.#isSkipping\n this.#isSkipping = false\n\n if (!isSkipping && current.firstChild) {\n current = current.firstChild\n }\n else if (current.nextSibling) {\n if (current === this.#root)\n return\n\n current = current.nextSibling\n }\n else {\n while (true) {\n if (!current.parentNode || current === this.#root)\n return\n\n const parent = current.parentNode\n if (parent === this.#root)\n return\n\n if (parent.nextSibling) {\n current = parent.nextSibling\n break\n }\n else {\n current = parent\n }\n }\n }\n\n if (!this.#filter || this.#filter(current))\n return this.#current = current\n }\n }\n\n next() {\n const value = this.#next()\n return { done: !value, value } as\n | { done: false, value: Node }\n | { done: true, value: undefined }\n }\n\n [Symbol.iterator]() {\n return this\n }\n}\n\nexport const makeFlatRange = (firstNode: ChildNode, isLastNode: (node: ChildNode) => boolean) => {\n\tconst range = firstNode.ownerDocument!.createRange()\n\n\trange.setStartBefore(firstNode)\n\n\tlet lastNode: ChildNode\n\tfor (\n\t\tlet currentNode: ChildNode | null = firstNode;\n\t\t(currentNode = currentNode.nextSibling);\n\t\tcurrentNode\n\t) {\n\t\tif (isLastNode(currentNode)) {\n\t\t\tlastNode = currentNode\n\t\t\tbreak\n\t\t}\n\t}\n\tlastNode ??= firstNode.parentNode!.lastChild!\n\n\trange.setEndAfter(lastNode)\n\n\treturn range\n}\n\ntype SearchPath = ReadonlyArray<{\n parent: {},\n key: PropertyKey,\n value: unknown\n}>\n\nexport const recursivelySearchFor = <T extends unknown>(\n\tx: unknown,\n\tf: (value: unknown) => value is T,\n\tpath: SearchPath = []\n): ReadonlyArray<{ path: SearchPath, value: T }> => {\n\tif (f(x)) return [{ path, value: x }]\n\n\tif (Array.isArray(x))\n\t\treturn x.flatMap((y, i) =>\n\t\t\trecursivelySearchFor(y, f, [...path, { parent: x, key: i, value: y }])\n\t\t)\n\n\tif (x !== null && typeof x === \"object\")\n\t\treturn Object.entries(x).flatMap(([k, v]) =>\n\t\t\trecursivelySearchFor(v, f, [...path, { parent: x, key: k, value: v }])\n\t\t)\n\n\treturn []\n}\n"],"names":["hash","range","x"],"mappings":"AAQO,MAAM,WAAW,CACtB,MAAA,EACA,IACA,EAAA,MAAA,EACA,YAEA,MAAO,CAAA,aAAA;AAAA;AAAA,EAEL,IAAI,YAAY,IAAM,EAAA;AAAA,IACpB,MAAA;AAAA,IACA,OAAS,EAAA,IAAA;AAAA,IACT,UAAY,EAAA,IAAA;AAAA,IACZ,QAAU,EAAA,IAAA;AAAA,IACV,GAAG;AAAA,GACJ;AACH;AAyBW,MAAA,kBAAA,GAAqB,CAIhC,MAAA,EACA,QACG,KAAA;AACH,EAAA,MAAM,YAAe,GAAA;AAAA,IACnB,GAAG,MAAA;AAAA,IACH,CAAC,OAAO,QAAQ,GAAG,MAAM,QAAS,CAAA,MAAA,CAAO,QAAQ,CAAE;AAAA,GACrD;AAEA,EAAO,MAAA,CAAA,cAAA,CAAe,YAAc,EAAA,MAAA,CAAO,QAAU,EAAA;AAAA,IACnD,UAAY,EAAA;AAAA,GACb,CAAA;AAED,EAAO,OAAA,YAAA;AACT;AAcO,MAAM,mBAAmB,CAC9B,CAAA,KAEA,IAAI,KAAA,CAAM,EAAI,EAAA;AAAA,EACZ,GAAK,EAAA,CAAC,CAAG,EAAA,QAAA,KAAa,EAAE,QAAQ;AAClC,CAAC;AAEU,MAAA,IAAA,GAAO,CAAuB,CAAA,EAAA,GAAS,IAA2B,KAAA;AAC7E,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,KAAA,MAAW,GAAO,IAAA,IAAA;AAChB,IAAO,MAAA,CAAA,GAAG,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AAErB,EAAO,OAAA,MAAA;AACT;AAEa,MAAA,IAAA,GAAO,CAAuB,CAAA,EAAA,GAAS,IAA2B,KAAA;AAC7E,EAAM,MAAA,SAAA,GAAwB,EAAE,GAAG,CAAE,EAAA;AAErC,EAAA,KAAA,MAAW,GAAO,IAAA,IAAA;AAChB,IAAA,OAAO,UAAU,GAAG,CAAA;AAEtB,EAAO,OAAA,SAAA;AACT;AAEO,MAAM,SAAY,GAAA,CAOvB,CACA,EAAA,CAAA,KAQA,MAAO,CAAA,WAAA;AAAA,EACL,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAI,CAAQ;AAChC;AAUK,MAAM,YAAe,GAAA,CAAmD,CAC7E,KAAA,SAAA,CAAU,CAAG,EAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,KAAA,EAAO,GAAG,CAAU;AAE5C,aAAa,EAAE,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG;AAGhC,SAAU,CAAA,EAAE,GAAG,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,EAAK,EAAA,CAAC,CAAC,GAAK,EAAA,KAAK,MAAM,CAAC,KAAA,EAAO,GAAG,CAAU;AAGrE,MAAA,eAAA,GAAkB,CAAC,CAAA,KAC9B,CAAE,CAAA,OAAA,CAAQ,UAAU,CAAK,CAAA,KAAA,GAAA,GAAM,CAAE,CAAA,WAAA,EAAa;AAEnC,MAAA,eAAA,GAAkB,CAAC,CAAA,KAC9B,CAAE,CAAA,OAAA,CAAQ,SAAW,EAAA,CAAA,EAAA,KAAM,EAAG,CAAA,CAAC,CAAE,CAAA,WAAA,EAAa;AAEnC,MAAA,MAAA,GAAS,CACpB,MAAA,EACA,MACG,KAAA;AACH,EAAA,IAAI,CAAC,MAAA;AACH,IAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,MAAM,CAAC,CAAA;AAE5B,EAAM,MAAA,IAAA,uBAAW,GAAU,EAAA;AAC3B,EAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,IAAM,MAAA,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,IAAI,IAAA,CAAC,IAAK,CAAA,GAAA,CAAI,GAAG,CAAA;AACf,MAAK,IAAA,CAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA;AAEvB,EAAA,OAAO,CAAC,GAAG,IAAK,CAAA,MAAA,EAAQ,CAAA;AAC1B;AAEA,MAAM,MAAA,GAAS,CAAC,CAAe,KAAA;AAC7B,EAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AACjB,CAAA;AACO,MAAM,OAGT,GAAA,CAAoB,CAAyB,EAAA,OAAA,GAAU,MAAW,KAAA;AACpE,EAAI,IAAA;AACF,IAAA,MAAM,SAAS,CAAE,EAAA;AAEjB,IAAA,IAAI,MAAkB,YAAA,OAAA;AACpB,MAAO,OAAA,MAAA,CAAO,MAAM,OAAO,CAAA;AAE7B,IAAO,OAAA,MAAA;AAAA,WAEF,CAAG,EAAA;AACR,IAAA,OAAO,QAAQ,CAAC,CAAA;AAAA;AAEpB;AA4BO,MAAM,mBAAmB,MAA4C;AAC1E,EAAM,MAAA,KAAA,uBAAY,GAAkC,EAAA;AAEpD,EAAM,MAAA,OAAA,GAAU,CAAC,OAAwB,KAAA;AACvC,IAAM,MAAA,gBAAA,GAAmB,OACtB,CAAA,IAAA,CAAK,CAAa,QAAA,MAAA;AAAA,MACjB,OAAS,EAAA,gBAAA;AAAA,MACT,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA;AAAA;AACT,KACF,CAAE,CACD,CAAA,KAAA,CAAM,CAAa,QAAA,MAAA;AAAA,MAClB,OAAS,EAAA,gBAAA;AAAA,MACT,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,UAAA;AAAA,QACR,MAAQ,EAAA;AAAA;AACV,KACA,CAAA,CAAA;AAEJ,IAAA,KAAA,CAAM,IAAI,gBAAgB,CAAA;AAAA,GAC5B;AAEA,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,MAAM,EAAE,OAAS,EAAA,OAAA,KAAY,MAAM,OAAA,CAAQ,KAAmC,KAAK,CAAA;AACnF,IAAA,KAAA,CAAM,OAAO,OAAO,CAAA;AACpB,IAAO,OAAA,OAAA;AAAA,GACT;AAEA,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IAEA,QAAS,MAAO,CAAA,aAAa,CAAI,GAAA;AAC/B,MAAA,OAAO,KAAM,CAAA,IAAA;AACX,QAAA,MAAM,MAAM,OAAQ,EAAA;AAAA;AACxB,GACF;AACF;AAEa,MAAA,kBAAA,GAAqB,OAAsB,OAA8C,KAAA;AACpG,EAAA,MAAM,EAAE,QAAA,EAAU,QAAS,EAAA,GAAI,IAAI,eAAsB,EAAA;AAEzD,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,MAAQ,EAAA,CAAA,EAAA;AAClC,IAAM,MAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAO,CAAA,QAAA,EAAU,EAAE,YAAA,EAAc,CAAI,GAAA,CAAA,KAAM,OAAQ,CAAA,MAAA,EAAQ,CAAA;AAE9E,EAAO,OAAA,QAAA;AACT;AAEO,MAAM,UAAa,GAAA,OAAO,IAAc,EAAA,OAAA,GAAuB,EAAO,KAAA;AAC3E,EAAA,MAAM,EAAE,OAAS,EAAA,kBAAA,EAAqB,SAAS,WAAY,EAAA,GAAI,QAAQ,aAAoB,EAAA;AAC3F,EAAA,MAAM,EAAE,OAAS,EAAA,mBAAA,EAAqB,SAAS,WAAY,EAAA,GAAI,QAAQ,aAAoB,EAAA;AAE3F,EAAI,IAAA;AACF,IAAA,SAAA,CAAU,KAAM,CAAA,OAAA,CAAQ,IAAM,EAAA,OAAA,EAAS,MAAM;AAC3C,MAAY,WAAA,EAAA;AACZ,MAAO,OAAA,mBAAA;AAAA,KACR,CAAA;AAAA,GACK,CAAA,MAAA;AAAA;AAER,EAAM,MAAA,kBAAA;AAEN,EAAA,OAAO,MAAM;AACX,IAAY,WAAA,EAAA;AAAA,GACd;AACF;AAEO,MAAM,KAAQ,GAAA,CAAC,IAAc,EAAA,EAAA,EAAY,WAAW,CAAM,KAAA;AAC/D,EAAA,MAAM,IAAO,GAAA,IAAA,CAAK,IAAK,CAAA,EAAA,GAAK,IAAI,CAAA;AAChC,EAAA,IAAI,IAAS,KAAA,CAAA;AACX,IAAA,OAAO,EAAC;AAEV,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,CAAI,GAAA,IAAA,EAAM,CAAI,GAAA,EAAA,EAAI,KAAK,IAAO,GAAA,QAAA;AACrC,IAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACf,EAAO,OAAA,MAAA;AACT;AAEa,MAAA,QAAA,GAAW,MACtB,IAAK,CAAA,MAAA,GAAS,QAAS,CAAA,EAAE,CAAE,CAAA,KAAA,CAAM,CAAC;AAE7B,MAAM,aAAa,MAAO,CAAA,YAAA,CAAa,GAAG,KAAM,CAAA,EAAA,EAAI,GAAG,CAAC;AAExD,MAAM,qBAAqB,CAAC;AAAA,EACjC,MAAS,GAAA,EAAA;AAAA,EACT,UAAa,GAAA;AACf,CAAA,GAII,EAAO,KAAA;AACT,EAAA,MAAM,mBAAsB,GAAA,CAAA;AAC5B,EAAA,MAAM,qBAAqB,CAAK,IAAA,mBAAA;AAEhC,EAAA,IAAI,WAAW,MAAS,GAAA,kBAAA;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAoB,iBAAA,EAAA,UAAA,CAAW,MAAM,CAA6B,2BAAA,CAAA,CAAA;AAEpF,EAAM,MAAA,KAAA,GAAQ,kBAAsB,GAAA,kBAAA,GAAqB,UAAW,CAAA,MAAA;AAEpE,EAAA,MAAM,yBAAmC,EAAC;AAC1C,EAAO,OAAA,sBAAA,CAAuB,SAAS,MAAQ,EAAA;AAC7C,IAAA,MAAM,eAAe,MAAO,CAAA,eAAA;AAAA,MAC1B,IAAI,UAAA,CAAW,MAAS,GAAA,sBAAA,CAAuB,MAAM;AAAA,KACvD;AACA,IAAA,KAAA,MAAW,WAAe,IAAA,YAAA;AACxB,MAAA,IAAI,WAAc,GAAA,KAAA;AAChB,QAAA,sBAAA,CAAuB,KAAK,WAAW,CAAA;AAAA;AAG7C,EAAA,IAAI,MAAS,GAAA,EAAA;AACb,EAAA,KAAA,MAAW,CAAK,IAAA,sBAAA;AACd,IAAU,MAAA,IAAA,UAAA,CAAW,CAAI,GAAA,UAAA,CAAW,MAAM,CAAA;AAC5C,EAAO,OAAA,MAAA;AACT;AAEO,MAAM,IAAO,GAAA,OAClB,IACA,EAAA,SAAA,GAAiC,SAC9B,KAAA;AACH,EAAA,IAAI,OAAO,IAAS,KAAA,QAAA;AAClB,IAAA,IAAA,GAAO,IAAI,WAAA,EAAc,CAAA,MAAA,CAAO,IAAI,CAAA;AAEtC,EAAA,MAAM,QAAQ,IAAI,UAAA;AAAA,IAChB,MAAM,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,WAAW,IAAI;AAAA,GAC5C;AAEA,EAAA,IAAI,MAAS,GAAA,EAAA;AACb,EAAA,KAAA,MAAW,IAAQ,IAAA,KAAA;AACjB,IAAA,MAAA,IAAU,KAAK,QAAS,CAAA,EAAE,CAAE,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AAC7C,EAAO,OAAA,MAAA;AACT;AAKO,MAAM,cAAc,CAAC,CAAA,KAAc,CAAE,CAAA,OAAA,CAAQ,uBAAuB,MAAM;AAEpE,MAAA,QAAA,GAAW,CACvB,OAAA,EAAA,GACG,aACC,KAAA;AACJ,EAAA,IAAI,MAAS,GAAA,EAAA;AACb,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,MAAQ,EAAA,CAAA,EAAA;AACnC,IAAU,MAAA,IAAA,OAAA,CAAQ,IAAI,CAAC,CAAA,GAAI,aAAa,aAAc,CAAA,CAAC,CAAK,IAAA,EAAA,IAAM,EAAE,CAAA;AACrE,EAAA,OAAO,CAAC,KAAA,KAAmB,IAAI,MAAA,CAAO,QAAQ,KAAK,CAAA;AACpD;AAEa,MAAA,MAAA,GAAS,CAAC,OAAA,EAAA,GAAkC,aAA0C,KAAA;AAClG,EAAA,IAAI,MAAS,GAAA,EAAA;AACb,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,MAAQ,EAAA,CAAA,EAAA;AACnC,IAAU,MAAA,IAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,kBAAA,CAAA,CAAoB,cAAc,CAAC,CAAA,IAAK,MAAM,EAAE,CAAA;AACxE,EAAO,OAAA,MAAA;AACR;AAOa,MAAA,SAAA,GAAY,CAAC,GAAA,EAAmB,CAA8C,KAAA;AAC1F,EAAI,IAAA;AACH,IAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,MAAA,CAAO,MAAO,CAAA,MAAA,EAAQ,CAAE,CAAA,MAAM,CAAC,CAAA;AAC/B,IAAA,OAAO,MAAO,CAAA,IAAA;AAAA,GACP,CAAA,MAAA;AAAA;AAER,EAAM,MAAA,KAAA,GAAS,GAAe,CAAA,KAAA,CAAM,2BAA2B,CAAA;AAC/D,EAAA,IAAI,CAAC,KAAA;AACF,IAAO,OAAA,GAAA;AAEV,EAAM,MAAA,GAAG,QAAW,GAAA,EAAA,EAAI,SAAS,EAAIA,EAAAA,KAAAA,GAAO,EAAE,CAAI,GAAA,KAAA;AAElD,EAAA,MAAM,UAAa,GAAA,EAAE,QAAU,EAAA,MAAA,EAAQ,MAAAA,KAAK,EAAA;AAC5C,EAAA,MAAM,QAAQ,EAAE,GAAG,YAAY,GAAG,CAAA,CAAE,UAAU,CAAE,EAAA;AAChD,EACC,OAAA,KAAA,CAAM,YACL,KAAM,CAAA,MAAA,GAAS,MAAM,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,EAAQ,EAAE,CAAA,GAAI,OACxD,KAAM,CAAA,IAAA,GAAO,MAAM,kBAAmB,CAAA,KAAA,CAAM,KAAK,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAC,CAAI,GAAA,EAAA,CAAA;AAE1E;AAEa,MAAA,aAAA,GAAgB,CAC5B,GACA,EAAA,gBAAA,KAEA,UAAU,GAAK,EAAA,CAAC,EAAE,MAAA,EAAa,KAAA;AAC9B,EAAM,MAAA,YAAA,GAAe,IAAI,eAAA,CAAgB,MAAM,CAAA;AAE/C,EAAA,KAAA,MAAW,OAAO,gBAAkB,EAAA;AACnC,IAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,IAAM,MAAA,aAAA,GAAgB,iBAAiB,GAAG,CAAA;AAC1C,IAAA,IAAI,kBAAkB,MAAW,EAAA;AAEjC,IAAI,IAAA,KAAA,CAAM,QAAQ,aAAa,CAAA;AAC9B,MAAA,KAAA,MAAW,KAAS,IAAA,aAAA;AACnB,QAAa,YAAA,CAAA,MAAA,CAAO,GAAK,EAAA,KAAA,GAAQ,EAAE,CAAA;AAAA;AAEhC,MAAa,YAAA,CAAA,MAAA,CAAO,GAAM,EAAA,aAAA,GAAmC,EAAE,CAAA;AAAA;AAErE,EAAA,YAAA,CAAa,IAAK,EAAA;AAElB,EAAA,OAAO,EAAE,MAAA,EAAQ,YAAa,CAAA,QAAA,EAAW,EAAA;AAC1C,CAAC;AAEK,MAAM,gBAAmD,CAAA;AAAA,EAC9D,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EAEA,WAAA,CAAY,MAAkB,MAAkC,EAAA;AAC9D,IAAK,IAAA,CAAA,QAAA,GAAW,KAAK,KAAQ,GAAA,IAAA;AAC7B,IAAA,IAAA,CAAK,OAAU,GAAA,MAAA;AAAA;AACjB,EAEA,WAAc,GAAA,KAAA;AAAA;AAAA,EAEd,IAAO,GAAA;AACL,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA;AAAA;AACrB,EAEA,KAAQ,GAAA;AACN,IAAA,IAAI,UAAU,IAAK,CAAA,QAAA;AACnB,IAAA,OAAO,IAAM,EAAA;AACX,MAAA,MAAM,aAAa,IAAK,CAAA,WAAA;AACxB,MAAA,IAAA,CAAK,WAAc,GAAA,KAAA;AAEnB,MAAI,IAAA,CAAC,UAAc,IAAA,OAAA,CAAQ,UAAY,EAAA;AACrC,QAAA,OAAA,GAAU,OAAQ,CAAA,UAAA;AAAA,OACpB,MAAA,IACS,QAAQ,WAAa,EAAA;AAC5B,QAAA,IAAI,YAAY,IAAK,CAAA,KAAA;AACnB,UAAA;AAEF,QAAA,OAAA,GAAU,OAAQ,CAAA,WAAA;AAAA,OAEf,MAAA;AACH,QAAA,OAAO,IAAM,EAAA;AACX,UAAA,IAAI,CAAC,OAAA,CAAQ,UAAc,IAAA,OAAA,KAAY,IAAK,CAAA,KAAA;AAC1C,YAAA;AAEF,UAAA,MAAM,SAAS,OAAQ,CAAA,UAAA;AACvB,UAAA,IAAI,WAAW,IAAK,CAAA,KAAA;AAClB,YAAA;AAEF,UAAA,IAAI,OAAO,WAAa,EAAA;AACtB,YAAA,OAAA,GAAU,MAAO,CAAA,WAAA;AACjB,YAAA;AAAA,WAEG,MAAA;AACH,YAAU,OAAA,GAAA,MAAA;AAAA;AACZ;AACF;AAGF,MAAA,IAAI,CAAC,IAAA,CAAK,OAAW,IAAA,IAAA,CAAK,QAAQ,OAAO,CAAA;AACvC,QAAA,OAAO,KAAK,QAAW,GAAA,OAAA;AAAA;AAC3B;AACF,EAEA,IAAO,GAAA;AACL,IAAM,MAAA,KAAA,GAAQ,KAAK,KAAM,EAAA;AACzB,IAAA,OAAO,EAAE,IAAA,EAAM,CAAC,KAAA,EAAO,KAAM,EAAA;AAAA;AAG/B,EAEA,CAAC,MAAO,CAAA,QAAQ,CAAI,GAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAEX;AAEa,MAAA,aAAA,GAAgB,CAAC,SAAA,EAAsB,UAA6C,KAAA;AAChG,EAAMC,MAAAA,MAAAA,GAAQ,SAAU,CAAA,aAAA,CAAe,WAAY,EAAA;AAEnD,EAAAA,MAAAA,CAAM,eAAe,SAAS,CAAA;AAE9B,EAAI,IAAA,QAAA;AACJ,EAAA,KAAA,IACK,WAAgC,GAAA,SAAA,EACnC,WAAc,GAAA,WAAA,CAAY,aAC3B,WACC,EAAA;AACD,IAAI,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC5B,MAAW,QAAA,GAAA,WAAA;AACX,MAAA;AAAA;AACD;AAED,EAAA,QAAA,KAAa,UAAU,UAAY,CAAA,SAAA;AAEnC,EAAAA,MAAAA,CAAM,YAAY,QAAQ,CAAA;AAE1B,EAAOA,OAAAA,MAAAA;AACR;AAQO,MAAM,uBAAuB,CACnCC,EAAAA,EACA,CACA,EAAA,IAAA,GAAmB,EACgC,KAAA;AACnD,EAAI,IAAA,CAAA,CAAEA,EAAC,CAAG,EAAA,OAAO,CAAC,EAAE,IAAA,EAAM,KAAOA,EAAAA,EAAAA,EAAG,CAAA;AAEpC,EAAI,IAAA,KAAA,CAAM,QAAQA,EAAC,CAAA;AAClB,IAAA,OAAOA,EAAE,CAAA,OAAA;AAAA,MAAQ,CAAC,CAAG,EAAA,CAAA,KACpB,oBAAqB,CAAA,CAAA,EAAG,GAAG,CAAC,GAAG,IAAM,EAAA,EAAE,QAAQA,EAAG,EAAA,GAAA,EAAK,GAAG,KAAO,EAAA,CAAA,EAAG,CAAC;AAAA,KACtE;AAED,EAAIA,IAAAA,EAAAA,KAAM,IAAQ,IAAA,OAAOA,EAAM,KAAA,QAAA;AAC9B,IAAO,OAAA,MAAA,CAAO,OAAQA,CAAAA,EAAC,CAAE,CAAA,OAAA;AAAA,MAAQ,CAAC,CAAC,CAAA,EAAG,CAAC,CACtC,KAAA,oBAAA,CAAqB,GAAG,CAAG,EAAA,CAAC,GAAG,IAAM,EAAA,EAAE,QAAQA,EAAG,EAAA,GAAA,EAAK,GAAG,KAAO,EAAA,CAAA,EAAG,CAAC;AAAA,KACtE;AAED,EAAA,OAAO,EAAC;AACT;;;;"}
1
+ {"version":3,"file":"utils.mjs","sources":["../src/utils/index.mts"],"sourcesContent":["import type { LikelyAsString } from \"../dom/types.mts\"\n\n// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero\nexport const isSameValueZero = (a: unknown, b: unknown) => {\n // fix NaN !== NaN\n if (\n typeof a === \"number\" &&\n typeof b === \"number\"\n )\n return (\n a === b ||\n (\n a !== a &&\n b !== b\n )\n )\n\n return a === b\n}\n\n/**\n * Dispatch a custom event to (capturing) and from (bubbling) a target (usually a DOM node).\n * Returns false if the event was cancelled (preventDefault()) and true otherwise.\n *\n * Note that this is synchronous\n */\nexport const dispatch = (\n target: EventTarget,\n type: string,\n detail: unknown,\n options: CustomEventInit\n) =>\n target.dispatchEvent(\n // Default to behave like most DOM events\n new CustomEvent(type, {\n detail,\n bubbles: true,\n cancelable: true,\n composed: true,\n ...options\n })\n )\n\n/**\n * Inspired by https://antfu.me/posts/destructuring-with-object-or-array#take-away\n *\n * Creates an object that is both destructable with {...} and [...]\n *\n * Useful for writing library functions à la react-use & vueuse\n *\n * @example\n * ```typescript\n * const useExample = () => {\n * const a = \"a\"\n * const b = \"b\"\n * return createDestructable(\n * { a, b },\n * [ a, b ]\n * )\n * }\n *\n * const { a, b } = useExample()\n * // or\n * const [ a, b ] = useExample()\n * ```\n */\nexport const createDestructable = <\n const T extends {},\n const U extends Iterable<unknown>\n>(\n object: T,\n iterable: U\n) => {\n const destructable = {\n ...object,\n [Symbol.iterator]: () => iterable[Symbol.iterator]()\n }\n\n Object.defineProperty(destructable, Symbol.iterator, {\n enumerable: false\n })\n\n return destructable as T & U\n}\n\n/**\n * Creates an object (as a Proxy) that acts as a function\n *\n * So functionAsObject(f).property is equivalent to f(\"property\")\n *\n * This is can be useful when combined with destructuring syntax\n *\n * @example\n * ```typescript\n * const { html, head, title, body, main, h1, p } = functionAsObject(e)\n * ```\n */\nexport const functionAsObject = <T extends { [input: PropertyKey]: any }>(\n f: <K extends keyof T>(property: K) => T[K]\n) =>\n new Proxy({}, {\n get: (_, property) => f(property)\n }) as T\n\nexport const pick = <T, K extends keyof T>(t: T, ...keys: ReadonlyArray<K>) => {\n const picked = {} as Pick<T, K>\n\n for (const key of keys)\n picked[key] = t[key]\n\n return picked\n}\n\nexport const omit = <T, K extends keyof T>(t: T, ...keys: ReadonlyArray<K>) => {\n const unomitted: Partial<T> = { ...t }\n\n for (const key of keys)\n delete unomitted[key]\n\n return unomitted as Omit<T, K>\n}\n\nexport const mapObject = <\n O extends Record<PropertyKey, unknown>,\n RK extends PropertyKey,\n RV\n>(\n o: O,\n f: (entry: [keyof O, O[keyof O]]) => readonly [RK, RV]\n): Record<RK, RV> =>\n Object.fromEntries(\n (Object.entries(o) as [keyof O, O[keyof O]][]).map(f)\n ) as Record<RK, RV>\n\nexport const mapValues = <\n O extends Record<PropertyKey, unknown>,\n RV\n>(\n o: O,\n f: (value: O[keyof O], key: keyof O) => RV\n): { [K in keyof O]: RV } =>\n Object.fromEntries(\n Object.entries(o).map(([k, v]) => [k, f(v as O[keyof O], k as keyof O)])\n ) as { [K in keyof O]: RV }\n\nexport type InvertObject<O extends Record<PropertyKey, PropertyKey>> = {\n [K in O[keyof O]]: {\n [Key in keyof O]: O[Key] extends K ? Key : never\n }[keyof O]\n}\n\nexport const invertObject = <const O extends Record<PropertyKey, PropertyKey>>(o: O): InvertObject<O> =>\n Object.fromEntries(\n Object.entries(o).map(([k, v]) => [v, k])\n ) as InvertObject<O>\n\n\nexport const camelToDashCase = (s: string) =>\n s.replace(/[A-Z]/g, c => \"-\" + c.toLowerCase())\n\nexport const dashToCamelCase = (s: string) =>\n s.replace(/-[a-z]/g, dc => dc[1].toUpperCase())\n\nexport const unique = <T, K>(\n values: Iterable<T>,\n getKey?: (value: T) => K\n) => {\n if (!getKey)\n return [...new Set(values)]\n\n const seen = new Map<K, T>()\n for (const value of values) {\n const key = getKey(value)\n if (!seen.has(key))\n seen.set(key, value)\n }\n return [...seen.values()]\n}\n\nconst report = (e: unknown) => {\n console.error(e)\n}\nexport const attempt: {\n <T, R = undefined>(f: () => T, recover?: (e: unknown) => R): T | R,\n <T, R = undefined>(f: () => Promise<T>, recover?: (e: unknown) => R): Promise<T | R>\n} = <T extends unknown>(f: () => T | Promise<T>, recover = report) => {\n try {\n const result = f()\n\n if (result instanceof Promise)\n return result.catch(recover)\n\n return result\n }\n catch (e) {\n return recover(e)\n }\n}\n\ntype FulfilledSelfReferencingPromise<T extends unknown> =\n Promise<\n {\n promise: FulfilledSelfReferencingPromise<T>,\n settled: {\n status: \"fulfilled\",\n value: T\n }\n }\n >\n\ntype RejectedSelfReferencingPromise<E extends unknown> =\n Promise<\n {\n promise: RejectedSelfReferencingPromise<E>,\n settled: {\n status: \"rejected\",\n reason: E\n }\n }\n >\n\ntype SelfReferencingPromise<T extends unknown, E extends unknown> =\n | FulfilledSelfReferencingPromise<T>\n | RejectedSelfReferencingPromise<E>\n\nexport const makePromiseQueue = <T extends unknown, E extends unknown>() => {\n const queue = new Set<SelfReferencingPromise<T, E>>()\n\n const enqueue = (promise: Promise<T>) => {\n const recursivePromise = promise\n .then(resolved => ({\n promise: recursivePromise,\n settled: {\n status: \"fulfilled\",\n value: resolved\n }\n }))\n .catch(rejected => ({\n promise: recursivePromise,\n settled: {\n status: \"rejected\",\n reason: rejected as E\n }\n })) as SelfReferencingPromise<T, E>\n\n queue.add(recursivePromise)\n }\n\n const dequeue = async () => {\n const { promise, settled } = await Promise.race<SelfReferencingPromise<T, E>>(queue)\n queue.delete(promise)\n return settled\n }\n\n return {\n enqueue,\n\n async * [Symbol.asyncIterator]() {\n while (queue.size)\n yield await dequeue()\n }\n }\n}\n\nexport const concatenateStreams = async <T extends any>(streams: ReadonlyArray<ReadableStream<T>>) => {\n const { readable, writable } = new TransformStream<T, T>()\n\n for (let i = 0; i < streams.length; i++)\n await streams[i].pipeTo(writable, { preventClose: i + 1 !== streams.length })\n\n return readable\n}\n\nexport const originLock = async (name: string, options: LockOptions = {}) => {\n const { promise: lockAquiredPromise, resolve: lockAquired } = Promise.withResolvers<void>()\n const { promise: lockReleasedPromise, resolve: releaseLock } = Promise.withResolvers<void>()\n\n try {\n navigator.locks.request(name, options, () => {\n lockAquired()\n return lockReleasedPromise\n })\n } catch {}\n\n await lockAquiredPromise\n\n return () => {\n releaseLock()\n }\n}\n\nexport const range = (from: number, to: number, stepSize = 1) => {\n const sign = Math.sign(to - from)\n if (sign === 0)\n return []\n\n const result: number[] = []\n for (let n = from; n < to; n += sign * stepSize)\n result.push(n)\n return result\n}\n\nexport const randomId = () =>\n Math.random().toString(36).slice(2)\n\nexport const basicLatin = String.fromCharCode(...range(32, 127))\n\nexport const makeRandomPassword = ({\n length = 32,\n characters = basicLatin\n}: {\n /** Max 256 */\n length?: number,\n characters?: string | ReadonlyArray<string>\n} = {}) => {\n const entropyPerCharacter = 8\n const statesPerCharacter = 2 ** entropyPerCharacter\n\n if (characters.length > statesPerCharacter)\n throw new Error(`Character count (${characters.length}) must not exceed 2^8 (256)`)\n\n const limit = statesPerCharacter - (statesPerCharacter % characters.length)\n\n const randomValuesUnderLimit: number[] = []\n while (randomValuesUnderLimit.length < length) {\n const randomValues = crypto.getRandomValues(\n new Uint8Array(length - randomValuesUnderLimit.length)\n )\n for (const randomValue of randomValues)\n if (randomValue < limit)\n randomValuesUnderLimit.push(randomValue)\n }\n\n let result = \"\"\n for (const n of randomValuesUnderLimit)\n result += characters[n % characters.length]\n return result\n}\n\nexport const hash = async (\n data: string | BufferSource,\n algorithm: AlgorithmIdentifier = \"SHA-256\"\n) => {\n if (typeof data === \"string\")\n data = new TextEncoder().encode(data)\n\n const bytes = new Uint8Array(\n await crypto.subtle.digest(algorithm, data)\n )\n\n let result = \"\"\n for (const byte of bytes)\n result += byte.toString(16).padStart(2, \"0\")\n return result\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping\n */\nexport const regexEscape = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\nexport const regexTag = (\n\tstrings: TemplateStringsArray,\n\t...substitutions: ReadonlyArray<unknown>\n) => {\n\tlet result = \"\"\n\tfor (let i = 0; i < strings.length; i++)\n\t\tresult += strings.raw[i] + regexEscape((substitutions[i] ?? \"\") + \"\")\n\treturn (flags?: string) => new RegExp(result, flags)\n}\n\nexport const urlTag = (strings: TemplateStringsArray, ...substitutions: ReadonlyArray<unknown>) => {\n\tlet result = \"\"\n\tfor (let i = 0; i < strings.length; i++)\n\t\tresult += strings[i] + encodeURIComponent((substitutions[i] ?? \"\") + \"\")\n\treturn result\n}\n\ntype UrlParts = {\n\tpathname: string\n\tsearch: string\n\thash: string\n}\nexport const modifyUrl = (url: URL | string, f: (parts: UrlParts) => Partial<UrlParts>) => {\n\ttry {\n\t\tconst result = new URL(url)\n\t\tObject.assign(result, f(result))\n\t\treturn result.href\n\t} catch {}\n\n\tconst match = (url as string).match(/(.*?)(\\?[^#\\n]*)?(#.*)?$/m)\n\tif (!match)\n return url as string\n\n\tconst [, pathname = \"\", search = \"\", hash = \"\"] = match\n\n\tconst inputParts = { pathname, search, hash }\n\tconst parts = { ...inputParts, ...f(inputParts) }\n\treturn (\n\t\tparts.pathname +\n\t\t(parts.search ? \"?\" + parts.search.replace(/^\\?/m, \"\") : \"\") +\n\t\t(parts.hash ? \"#\" + encodeURIComponent(parts.hash.replace(/^#/m, \"\")) : \"\")\n\t)\n}\n\nexport const urlWithParams = (\n\turl: URL | string,\n\tsearchParameters?: Record<string, LikelyAsString | ReadonlyArray<LikelyAsString> | undefined>\n) =>\n\tmodifyUrl(url, ({ search }) => {\n\t\tconst searchParams = new URLSearchParams(search)\n\n\t\tfor (const key in searchParameters) {\n\t\t\tsearchParams.delete(key)\n\t\t\tconst valueOrValues = searchParameters[key]\n\t\t\tif (valueOrValues === undefined) continue\n\n\t\t\tif (Array.isArray(valueOrValues))\n\t\t\t\tfor (const value of valueOrValues as ReadonlyArray<LikelyAsString>)\n\t\t\t\t\tsearchParams.append(key, value + \"\")\n\t\t\telse\n searchParams.append(key, (valueOrValues as LikelyAsString) + \"\")\n\t\t}\n\t\tsearchParams.sort()\n\n\t\treturn { search: searchParams.toString() }\n\t})\n\nexport class NodeTreeIterator implements IterableIterator<Node> {\n #root: ParentNode\n #current: Node\n #filter?: (node: Node) => boolean\n\n constructor(root: ParentNode, filter?: (node: Node) => boolean) {\n this.#current = this.#root = root\n this.#filter = filter\n }\n\n #isSkipping = false\n /** Skip descendents of the current node */\n skip() {\n this.#isSkipping = true\n }\n\n #next() {\n let current = this.#current\n while (true) {\n const isSkipping = this.#isSkipping\n this.#isSkipping = false\n\n if (!isSkipping && current.firstChild) {\n current = current.firstChild\n }\n else if (current.nextSibling) {\n if (current === this.#root)\n return\n\n current = current.nextSibling\n }\n else {\n while (true) {\n if (!current.parentNode || current === this.#root)\n return\n\n const parent = current.parentNode\n if (parent === this.#root)\n return\n\n if (parent.nextSibling) {\n current = parent.nextSibling\n break\n }\n else {\n current = parent\n }\n }\n }\n\n if (!this.#filter || this.#filter(current))\n return this.#current = current\n }\n }\n\n next() {\n const value = this.#next()\n return { done: !value, value } as\n | { done: false, value: Node }\n | { done: true, value: undefined }\n }\n\n [Symbol.iterator]() {\n return this\n }\n}\n\nexport const makeFlatRange = (firstNode: ChildNode, isLastNode: (node: ChildNode) => boolean) => {\n\tconst range = firstNode.ownerDocument!.createRange()\n\n\trange.setStartBefore(firstNode)\n\n\tlet lastNode: ChildNode\n\tfor (\n\t\tlet currentNode: ChildNode | null = firstNode;\n\t\t(currentNode = currentNode.nextSibling);\n\t\tcurrentNode\n\t) {\n\t\tif (isLastNode(currentNode)) {\n\t\t\tlastNode = currentNode\n\t\t\tbreak\n\t\t}\n\t}\n\tlastNode ??= firstNode.parentNode!.lastChild!\n\n\trange.setEndAfter(lastNode)\n\n\treturn range\n}\n\ntype SearchPath = ReadonlyArray<{\n parent: {},\n key: PropertyKey,\n value: unknown\n}>\n\nexport const recursivelySearchFor = <T extends unknown>(\n\tx: unknown,\n\tf: (value: unknown) => value is T,\n\tpath: SearchPath = []\n): ReadonlyArray<{ path: SearchPath, value: T }> => {\n\tif (f(x)) return [{ path, value: x }]\n\n\tif (Array.isArray(x))\n\t\treturn x.flatMap((y, i) =>\n\t\t\trecursivelySearchFor(y, f, [...path, { parent: x, key: i, value: y }])\n\t\t)\n\n\tif (x !== null && typeof x === \"object\")\n\t\treturn Object.entries(x).flatMap(([k, v]) =>\n\t\t\trecursivelySearchFor(v, f, [...path, { parent: x, key: k, value: v }])\n\t\t)\n\n\treturn []\n}\n\n// https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-canbeheldweakly\nexport const canBeHeldWeakly = (x: unknown): x is WeakKey =>\n (typeof x === \"object\" && x !== null)\n || typeof x === \"function\"\n || (typeof x === \"symbol\" && Symbol.keyFor(x) === undefined)\n\ntype ScopeNode<T = unknown> = {\n value?: T,\n weakChildren?: WeakMap<WeakKey, ScopeNode<T>>,\n children?: Map<unknown, ScopeNode<T>>\n}\n\n/**\n * A cache that supports nested scope paths with mixed weak/strong segments.\n * Object/function segments use WeakMap (GC-able), primitives use Map.\n */\nexport class NestedCache {\n #root: ScopeNode = {}\n\n #getOrCreateNode(path: ReadonlyArray<unknown>): ScopeNode {\n let node = this.#root\n for (const segment of path) {\n if (canBeHeldWeakly(segment)) {\n node.weakChildren ??= new WeakMap()\n let child = node.weakChildren.get(segment)\n if (!child)\n node.weakChildren.set(segment, child = {})\n node = child\n }\n else {\n node.children ??= new Map()\n let child = node.children.get(segment)\n if (!child)\n node.children.set(segment, child = {})\n node = child\n }\n }\n return node\n }\n\n get<T>(path: ReadonlyArray<unknown>, compute: () => T) {\n const node = this.#getOrCreateNode(path)\n if (!Object.hasOwn(node, \"value\"))\n node.value = compute()\n return node.value as T\n }\n}\n\nconst memoCache = new NestedCache()\n\nexport const memo = <\n In extends unknown,\n Out extends unknown\n>(\n f: (x: In) => Out,\n {\n scope = [f],\n getKey\n }: {\n /**\n * Defaults to [f]. Use e.g. [globalThis] to never GC memoized inputs and outputs.\n */\n scope?: ReadonlyArray<unknown>,\n /**\n * Defaults to the input itself\n */\n getKey?: (x: In) => unknown\n } = {}\n) => (x: In) =>\n memoCache.get(\n [...scope, getKey ? getKey(x) : x],\n () => f(x)\n )\n"],"names":["hash","range"],"mappings":"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"}
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "library",
11
11
  "modern"
12
12
  ],
13
- "version": "2.0.0-beta.4",
13
+ "version": "2.0.0-beta.5",
14
14
  "license": "MIT",
15
15
  "author": {
16
16
  "name": "Daniel Ethridge",
@@ -90,6 +90,10 @@
90
90
  "types": "./dist/types/components/utils.d.mts",
91
91
  "default": "./dist/components/utils.mjs"
92
92
  },
93
+ "./components/misc": {
94
+ "types": "./dist/types/components/misc.d.mts",
95
+ "default": "./dist/components/misc.mjs"
96
+ },
93
97
  "./components/custom-elements": {
94
98
  "types": "./dist/types/components/custom-elements.d.mts",
95
99
  "default": "./dist/components/custom-elements.mjs"