atom.io 0.4.0 → 0.5.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.
Files changed (59) hide show
  1. package/README.md +38 -10
  2. package/dist/index.d.mts +598 -0
  3. package/dist/index.d.ts +52 -14
  4. package/dist/index.js +143 -28
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +142 -28
  7. package/dist/index.mjs.map +1 -1
  8. package/json/dist/index.d.mts +18 -0
  9. package/json/dist/index.d.ts +18 -0
  10. package/json/dist/index.js +51 -0
  11. package/json/dist/index.js.map +1 -0
  12. package/json/dist/index.mjs +15 -0
  13. package/json/dist/index.mjs.map +1 -0
  14. package/json/package.json +15 -0
  15. package/package.json +35 -8
  16. package/react/dist/index.d.mts +17 -0
  17. package/react-devtools/dist/index.d.mts +15 -0
  18. package/react-devtools/dist/index.js +13 -10
  19. package/react-devtools/dist/index.js.map +1 -1
  20. package/react-devtools/dist/index.mjs +10 -7
  21. package/react-devtools/dist/index.mjs.map +1 -1
  22. package/realtime/dist/index.d.mts +25 -0
  23. package/realtime/dist/index.d.ts +25 -0
  24. package/realtime/dist/index.js +168 -0
  25. package/realtime/dist/index.js.map +1 -0
  26. package/realtime/dist/index.mjs +130 -0
  27. package/realtime/dist/index.mjs.map +1 -0
  28. package/realtime/package.json +15 -0
  29. package/src/index.ts +22 -0
  30. package/src/internal/atom-internal.ts +1 -1
  31. package/src/internal/families-internal.ts +3 -3
  32. package/src/internal/get.ts +22 -12
  33. package/src/internal/selector-internal.ts +10 -0
  34. package/src/internal/set.ts +1 -1
  35. package/src/internal/store.ts +1 -1
  36. package/src/internal/subscribe-internal.ts +5 -0
  37. package/src/internal/timeline-internal.ts +13 -1
  38. package/src/internal/transaction-internal.ts +24 -9
  39. package/src/json/index.ts +1 -0
  40. package/src/json/select-json.ts +18 -0
  41. package/src/react-devtools/TokenList.tsx +13 -5
  42. package/src/react-explorer/explorer-states.ts +5 -5
  43. package/src/react-explorer/index.ts +1 -1
  44. package/src/react-explorer/space-states.ts +6 -7
  45. package/src/realtime/hook-composition/expose-family.ts +101 -0
  46. package/src/realtime/hook-composition/expose-single.ts +38 -0
  47. package/src/realtime/hook-composition/index.ts +11 -0
  48. package/src/realtime/hook-composition/receive-transaction.ts +19 -0
  49. package/src/realtime/index.ts +1 -0
  50. package/src/realtime-client/hook-composition/compose-realtime-hooks.ts +62 -0
  51. package/src/realtime-client/hook-composition/realtime-client-family-member.ts +28 -0
  52. package/src/realtime-client/hook-composition/realtime-client-family.ts +26 -0
  53. package/src/realtime-client/hook-composition/realtime-client-single.ts +24 -0
  54. package/src/realtime-client/hook-composition/realtime-client-transaction.ts +35 -0
  55. package/src/realtime-client/index.ts +1 -0
  56. package/src/selector.ts +9 -6
  57. package/src/silo.ts +45 -0
  58. package/src/subscribe.ts +13 -1
  59. package/src/transaction.ts +13 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/index.ts","../src/internal/atom-internal.ts","../src/internal/get.ts","../src/internal/is-default.ts","../src/internal/operation.ts","../src/internal/store.ts","../../anvl/src/function/index.ts","../../anvl/src/join/core-relation-data.ts","../../anvl/src/array/venn.ts","../../anvl/src/array/index.ts","../../anvl/src/object/refinement.ts","../../anvl/src/object/access.ts","../../anvl/src/object/entries.ts","../../anvl/src/object/mapObject.ts","../../anvl/src/nullish/index.ts","../../anvl/src/refinement/index.ts","../../anvl/src/join/get-related-ids.ts","../../anvl/src/join/relation-contents.ts","../../anvl/src/join/relation-record.ts","../../anvl/src/join/remove-relation.ts","../../anvl/src/object/index.ts","../../anvl/src/string/split.ts","../../anvl/src/join/set-relation.ts","../../anvl/src/join/index.ts","../src/internal/transaction-internal.ts","../src/internal/families-internal.ts","../../anvl/src/json/index.ts","../src/internal/meta/index.ts","../src/internal/meta/meta-state.ts","../src/internal/meta/attach-meta.ts","../src/internal/selector-internal.ts","../src/internal/set.ts","../src/internal/subscribe-internal.ts","../src/internal/time-travel-internal.ts","../src/internal/timeline-internal.ts","../src/atom.ts","../src/logger.ts","../src/selector.ts","../src/subscribe.ts","../src/timeline.ts","../src/transaction.ts","../src/index.ts"],"sourcesContent":["export * from \"./atom-internal\"\nexport * from \"./families-internal\"\nexport * from \"./get\"\nexport * from \"./is-default\"\nexport * as META from \"./meta\"\nexport * from \"./operation\"\nexport * from \"./selector-internal\"\nexport * from \"./set\"\nexport * from \"./store\"\nexport * from \"./subscribe-internal\"\nexport * from \"./time-travel-internal\"\nexport * from \"./timeline-internal\"\nexport * from \"./transaction-internal\"\n","import HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport { deposit } from \"./get\"\nimport { markAtomAsDefault } from \"./is-default\"\nimport { cacheValue, hasKeyBeenUsed } from \"./operation\"\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\nimport { target } from \"./transaction-internal\"\nimport type { AtomToken, FamilyMetadata, UpdateHandler } from \"..\"\nimport { setState, subscribe } from \"..\"\nimport type { AtomOptions } from \"../atom\"\n\nexport type Atom<T> = {\n key: string\n type: `atom`\n family?: FamilyMetadata\n subject: Rx.Subject<{ newValue: T; oldValue: T }>\n default: T\n}\n\nexport function atom__INTERNAL<T>(\n options: AtomOptions<T>,\n family?: FamilyMetadata,\n store: Store = IMPLICIT.STORE\n): AtomToken<T> {\n const core = target(store)\n if (hasKeyBeenUsed(options.key, store)) {\n store.config.logger?.error?.(\n `Key \"${options.key}\" already exists in the store.`\n )\n return deposit(core.atoms.get(options.key))\n }\n const subject = new Rx.Subject<{ newValue: T; oldValue: T }>()\n const newAtom = {\n ...options,\n subject,\n type: `atom`,\n ...(family && { family }),\n } as const\n const initialValue =\n options.default instanceof Function ? options.default() : options.default\n core.atoms = HAMT.set(newAtom.key, newAtom, core.atoms)\n markAtomAsDefault(options.key, store)\n cacheValue(options.key, initialValue, store)\n const token = deposit(newAtom)\n options.effects?.forEach((effect) =>\n effect({\n setSelf: (next) => setState(token, next, store),\n onSet: (handle: UpdateHandler<T>) => subscribe(token, handle, store),\n })\n )\n store.subject.atomCreation.next(token)\n return token\n}\n","import HAMT from \"hamt_plus\"\n\nimport type { Atom, ReadonlySelector, Selector, Store } from \".\"\nimport { target, isValueCached, readCachedValue, IMPLICIT } from \".\"\nimport type {\n AtomToken,\n ReadonlySelectorToken,\n SelectorToken,\n StateToken,\n Transaction,\n TransactionToken,\n ƒn,\n} from \"..\"\n\nexport const computeSelectorState = <T>(\n selector: ReadonlySelector<T> | Selector<T>\n): T => selector.get()\n\nexport function lookup(\n key: string,\n store: Store\n): AtomToken<unknown> | ReadonlySelectorToken<unknown> | SelectorToken<unknown> {\n const core = target(store)\n const type = HAMT.has(key, core.atoms)\n ? `atom`\n : HAMT.has(key, core.selectors)\n ? `selector`\n : `readonly_selector`\n return { key, type }\n}\n\nexport function withdraw<T>(token: AtomToken<T>, store: Store): Atom<T>\nexport function withdraw<T>(token: SelectorToken<T>, store: Store): Selector<T>\nexport function withdraw<T>(\n token: StateToken<T>,\n store: Store\n): Atom<T> | Selector<T>\nexport function withdraw<T>(\n token: ReadonlySelectorToken<T>,\n store: Store\n): ReadonlySelector<T>\nexport function withdraw<T>(\n token: TransactionToken<T>,\n store: Store\n): Transaction<T extends ƒn ? T : never>\nexport function withdraw<T>(\n token: ReadonlySelectorToken<T> | StateToken<T>,\n store: Store\n): Atom<T> | ReadonlySelector<T> | Selector<T>\nexport function withdraw<T>(\n token: ReadonlySelectorToken<T> | StateToken<T> | TransactionToken<T>,\n store: Store\n):\n | Atom<T>\n | ReadonlySelector<T>\n | Selector<T>\n | Transaction<T extends ƒn ? T : never> {\n const core = target(store)\n return (\n HAMT.get(token.key, core.atoms) ??\n HAMT.get(token.key, core.selectors) ??\n HAMT.get(token.key, core.readonlySelectors) ??\n HAMT.get(token.key, core.transactions)\n )\n}\n\nexport function deposit<T>(state: Atom<T>): AtomToken<T>\nexport function deposit<T>(state: Selector<T>): SelectorToken<T>\nexport function deposit<T>(state: Atom<T> | Selector<T>): StateToken<T>\nexport function deposit<T>(state: ReadonlySelector<T>): ReadonlySelectorToken<T>\nexport function deposit<T>(\n state: Transaction<T extends ƒn ? T : never>\n): TransactionToken<T>\nexport function deposit<T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>\n): ReadonlySelectorToken<T> | StateToken<T>\nexport function deposit<T>(\n state:\n | Atom<T>\n | ReadonlySelector<T>\n | Selector<T>\n | Transaction<T extends ƒn ? T : never>\n): ReadonlySelectorToken<T> | StateToken<T> | TransactionToken<T> {\n return {\n key: state.key,\n type: state.type,\n ...(`family` in state && { family: state.family }),\n }\n}\n\nexport const getState__INTERNAL = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n store: Store = IMPLICIT.STORE\n): T => {\n if (isValueCached(state.key, store)) {\n store.config.logger?.info(`>> read \"${state.key}\"`)\n return readCachedValue(state.key, store)\n }\n if (state.type !== `atom`) {\n store.config.logger?.info(`-> calc \"${state.key}\"`)\n return computeSelectorState(state)\n }\n store.config.logger?.error(\n `Attempted to get atom \"${state.key}\", which was never initialized in store \"${store.config.name}\".`\n )\n return state.default\n}\n","import type { Store } from \".\"\nimport { target, IMPLICIT, traceAllSelectorAtoms } from \".\"\n\nexport const isAtomDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => {\n const core = target(store)\n return core.atomsThatAreDefault.has(key)\n}\n\nexport const markAtomAsDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.atomsThatAreDefault = new Set(core.atomsThatAreDefault).add(key)\n}\n\nexport const markAtomAsNotDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.atomsThatAreDefault = new Set(target(store).atomsThatAreDefault)\n core.atomsThatAreDefault.delete(key)\n}\n\nexport const isSelectorDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => {\n const roots = traceAllSelectorAtoms(key, store)\n return roots.every((root) => isAtomDefault(root.key, store))\n}\n","import type { Hamt } from \"hamt_plus\"\nimport HAMT from \"hamt_plus\"\n\nimport type { Atom, ReadonlySelector, Selector } from \".\"\nimport { target } from \".\"\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\nimport type { StateToken } from \"..\"\n\nexport type OperationProgress =\n | {\n open: false\n }\n | {\n open: true\n done: Set<string>\n prev: Hamt<any, string>\n time: number\n token: StateToken<any>\n }\n\nexport const openOperation = (token: StateToken<any>, store: Store): void => {\n const core = target(store)\n if (core.operation.open) {\n store.config.logger?.error(\n `❌ failed to setState to \"${token.key}\" during a setState for \"${core.operation.token.key}\"`\n )\n throw Symbol(`violation`)\n }\n core.operation = {\n open: true,\n done: new Set(),\n prev: store.valueMap,\n time: Date.now(),\n token,\n }\n store.config.logger?.info(`⭕ operation start from \"${token.key}\"`)\n}\nexport const closeOperation = (store: Store): void => {\n const core = target(store)\n core.operation = { open: false }\n store.config.logger?.info(`🔴 operation done`)\n}\n\nexport const isDone = (key: string, store: Store = IMPLICIT.STORE): boolean => {\n const core = target(store)\n if (!core.operation.open) {\n store.config.logger?.warn(\n `isDone called outside of an operation. This is probably a bug.`\n )\n return true\n }\n return core.operation.done.has(key)\n}\nexport const markDone = (key: string, store: Store = IMPLICIT.STORE): void => {\n const core = target(store)\n if (!core.operation.open) {\n store.config.logger?.warn(\n `markDone called outside of an operation. This is probably a bug.`\n )\n return\n }\n core.operation.done.add(key)\n}\nexport const recallState = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n store: Store = IMPLICIT.STORE\n): T => {\n const core = target(store)\n if (!core.operation.open) {\n store.config.logger?.warn(\n `recall called outside of an operation. This is probably a bug.`\n )\n return HAMT.get(state.key, core.valueMap)\n }\n return HAMT.get(state.key, core.operation.prev)\n}\n\nexport const cacheValue = (\n key: string,\n value: unknown,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.valueMap = HAMT.set(key, value, core.valueMap)\n}\n\nexport const evictCachedValue = (\n key: string,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.valueMap = HAMT.remove(key, core.valueMap)\n}\nexport const readCachedValue = <T>(\n key: string,\n store: Store = IMPLICIT.STORE\n): T => HAMT.get(key, target(store).valueMap)\n\nexport const isValueCached = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => HAMT.has(key, target(store).valueMap)\n\nexport const storeAtom = (\n atom: Atom<any>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.atoms = HAMT.set(atom.key, atom, core.atoms)\n}\n\nexport const storeSelector = (\n selector: Selector<any>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.selectors = HAMT.set(selector.key, selector, core.selectors)\n}\n\nexport const storeReadonlySelector = (\n selector: ReadonlySelector<any>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.readonlySelectors = HAMT.set(\n selector.key,\n selector,\n core.readonlySelectors\n )\n}\n\nexport const hasKeyBeenUsed = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => {\n const core = target(store)\n return (\n HAMT.has(key, core.atoms) ||\n HAMT.has(key, core.selectors) ||\n HAMT.has(key, core.readonlySelectors)\n )\n}\n","import type { Hamt } from \"hamt_plus\"\nimport HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport { doNothing } from \"~/packages/anvl/src/function\"\nimport { Join } from \"~/packages/anvl/src/join\"\n\nimport type {\n Atom,\n OperationProgress,\n ReadonlySelector,\n Selector,\n TransactionStatus,\n Timeline,\n TimelineData,\n} from \".\"\nimport type {\n AtomToken,\n Logger,\n ReadonlySelectorToken,\n SelectorToken,\n TimelineToken,\n Transaction,\n TransactionToken,\n ƒn,\n} from \"..\"\n\nexport type StoreCore = Pick<\n Store,\n | `atoms`\n | `atomsThatAreDefault`\n | `operation`\n | `readonlySelectors`\n | `selectorAtoms`\n | `selectorGraph`\n | `selectors`\n | `timelineAtoms`\n | `timelines`\n | `transactions`\n | `valueMap`\n>\n\nexport interface Store {\n atoms: Hamt<Atom<any>, string>\n atomsThatAreDefault: Set<string>\n readonlySelectors: Hamt<ReadonlySelector<any>, string>\n selectorAtoms: Join<null, `selectorKey`, `atomKey`>\n selectorGraph: Join<{ source: string }>\n selectors: Hamt<Selector<any>, string>\n timelines: Hamt<Timeline, string>\n timelineAtoms: Join<null, `timelineKey`, `atomKey`>\n timelineStore: Hamt<TimelineData, string>\n transactions: Hamt<Transaction<any>, string>\n valueMap: Hamt<any, string>\n\n subject: {\n atomCreation: Rx.Subject<AtomToken<unknown>>\n selectorCreation: Rx.Subject<\n ReadonlySelectorToken<unknown> | SelectorToken<unknown>\n >\n transactionCreation: Rx.Subject<TransactionToken<unknown>>\n timelineCreation: Rx.Subject<TimelineToken>\n }\n\n operation: OperationProgress\n transactionStatus: TransactionStatus<ƒn>\n config: {\n name: string\n logger: Logger | null\n logger__INTERNAL: Logger\n }\n}\n\nexport const createStore = (name: string): Store =>\n ({\n atoms: HAMT.make<Atom<any>, string>(),\n atomsThatAreDefault: new Set(),\n readonlySelectors: HAMT.make<ReadonlySelector<any>, string>(),\n selectorAtoms: new Join({ relationType: `n:n` })\n .from(`selectorKey`)\n .to(`atomKey`),\n selectorGraph: new Join({ relationType: `n:n` }),\n selectors: HAMT.make<Selector<any>, string>(),\n timelines: HAMT.make<Timeline, string>(),\n timelineAtoms: new Join({ relationType: `1:n` })\n .from(`timelineKey`)\n .to(`atomKey`),\n timelineStore: HAMT.make<TimelineData, string>(),\n transactions: HAMT.make<Transaction<any>, string>(),\n valueMap: HAMT.make<any, string>(),\n\n subject: {\n atomCreation: new Rx.Subject(),\n selectorCreation: new Rx.Subject(),\n transactionCreation: new Rx.Subject(),\n timelineCreation: new Rx.Subject(),\n },\n\n operation: {\n open: false,\n },\n transactionStatus: {\n phase: `idle`,\n },\n config: {\n name,\n logger: {\n ...console,\n info: doNothing,\n },\n logger__INTERNAL: console,\n },\n } satisfies Store)\n\nexport const IMPLICIT = {\n STORE_INTERNAL: undefined as Store | undefined,\n get STORE(): Store {\n return this.STORE_INTERNAL ?? (this.STORE_INTERNAL = createStore(`DEFAULT`))\n },\n}\n\nexport const clearStore = (store: Store = IMPLICIT.STORE): void => {\n const { config } = store\n Object.assign(store, createStore(config.name))\n store.config = config\n}\n","import type { Refinement } from \"fp-ts/Refinement\"\nexport * from \"./curry\"\n\nexport const doNothing = (): void => undefined\n\n/* eslint-disable prettier/prettier */\nexport const become =\n <T>\n (nextVersionOfThing: Modifier<T> | T) =>\n (originalThing: T | (() => T)): T =>\n nextVersionOfThing instanceof Function\n ? nextVersionOfThing(originalThing instanceof Function \n ? originalThing() \n : originalThing\n )\n : nextVersionOfThing\n/* eslint-enable prettier/prettier */\n\nexport type Applicator<X, Y> = (next: Modifier<X> | X) => Modifier<Y>\nexport type Modifier<T> = (thing: T) => T\n\nexport type OneOrMany<T> = T | T[]\n\nexport const isModifier =\n <T>(validate: Refinement<unknown, T>) =>\n (sample: T): Refinement<unknown, Modifier<T>> => {\n const sampleIsValid = validate(sample)\n if (!sampleIsValid) {\n throw new Error(`Invalid test case: JSON.stringify(${sample})`)\n }\n return (input: unknown): input is Modifier<T> => {\n if (typeof input !== `function`) return false\n const testResult = input(sample)\n return validate(testResult)\n }\n }\n\nexport const pass =\n <Params extends ReadonlyArray<any>, Out>(...params: Params) =>\n (fn: (...params: Params) => Out): Out =>\n fn(...params)\n\nexport const typeOf =\n <T>(input: unknown) =>\n (isType: Refinement<unknown, T>): boolean =>\n isType(input)\n\nexport const raiseError = (message: string): never => {\n throw new Error(message)\n}\n\nexport type Encapsulate<T extends (...args: any[]) => any> = (\n ...args: Parameters<T>\n) => void\n\nexport const attempt = (fn: () => void): boolean => {\n try {\n fn()\n return true\n } catch (_) {\n return false\n }\n}\n","import { isString } from \"fp-ts/string\"\n\nimport type { Json, JsonObj } from \"~/packages/anvl/src/json\"\n\nimport { isArray } from \"../array\"\nimport { hasExactProperties, isRecord } from \"../object/refinement\"\nimport { isLiteral } from \"../refinement\"\n\nexport const RELATION_TYPES = [`1:1`, `1:n`, `n:n`] as const\n\nexport type RelationType = (typeof RELATION_TYPES)[number]\n\nexport const isRelationType = (x: unknown): x is RelationType =>\n RELATION_TYPES.includes(x as RelationType)\n\nexport type RelationData<\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n> = {\n contents: JsonObj<string, CONTENT>\n relations: JsonObj<string, string[]>\n relationType: RelationType\n a: A\n b: B\n}\n\nexport const EMPTY_RELATION_DATA: RelationData = {\n contents: {},\n relations: {},\n relationType: `n:n`,\n a: `from`,\n b: `to`,\n}\n\nexport const isRelationData =\n <\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n >(\n isContent?: (json: Json) => json is CONTENT,\n a: A = `from` as A,\n b: B = `to` as B\n ) =>\n (input: unknown): input is RelationData<CONTENT, A, B> =>\n hasExactProperties<RelationData<CONTENT, A, B>>({\n contents: isContent\n ? isRecord(isString, isContent)\n : hasExactProperties({}),\n relations: isRecord(isString, isArray(isString)),\n relationType: isRelationType,\n a: isLiteral(a),\n b: isLiteral(b),\n })(input)\n","export type VennCheck = (\n items: ReadonlyArray<unknown> | unknown[]\n) => (array: ReadonlyArray<unknown> | unknown[]) => boolean\n\nexport type VennTally = (\n items: ReadonlyArray<unknown> | unknown[]\n) => (array: ReadonlyArray<unknown> | unknown[]) => number\n\nexport const includesAll: VennCheck = (items) => (array) => {\n for (const item of items) {\n if (!array.includes(item)) return false\n }\n return true\n}\n\nexport const includesAny: VennCheck = (items) => (array) => {\n for (const item of items) {\n if (array.includes(item)) return true\n }\n return false\n}\n\nexport const excludesAll: VennCheck = (items) => (array) =>\n !includesAny(items)(array)\n\nexport const excludesAny: VennCheck = (items) => (array) =>\n !includesAll(items)(array)\n\nexport const comprises: VennCheck = (items) => (array) =>\n includesAll(items)(array) && includesAll(array)(items)\n\nexport const overlaps: VennTally = (items) => (array) => {\n let incidences = 0\n for (const item of items) {\n if (array.includes(item)) incidences += 1\n }\n return incidences\n}\n","export * from \"./match\"\nexport * from \"./venn\"\n\nimport type { Refinement } from \"fp-ts/Refinement\"\n\nexport const each =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): T[] =>\n isType(input) ? [input] : Array.isArray(input) ? input.filter(isType) : []\n\nexport const lastOf = <T>(input: ReadonlyArray<T>): T | undefined =>\n input[input.length - 1]\n\nexport const isArray =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): input is T[] =>\n Array.isArray(input) && input.every((item) => isType(item))\n\nexport const at =\n <T>(index: number) =>\n (input: T[]): T | undefined =>\n input.at(index)\n\nexport const content =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): input is T | T[] =>\n isType(input) || isArray(isType)(input)\n\nexport const join =\n (separator?: string) =>\n (a: string[]): string =>\n a.join(separator)\n\nexport const map =\n <I, O>(f: (value: I, index: number, array: I[]) => O) =>\n (a: I[]): O[] =>\n a.map(f)\n\nexport const reduce =\n <I, O>(f: (acc: O, value: I, index: number, array: I[]) => O, initial: O) =>\n (a: I[]): O =>\n a.reduce(f, initial)\n\nexport const slice =\n (start: number, end?: number) =>\n <I>(a: I[]): I[] =>\n a.slice(start, end)\n\nexport const using =\n <I, O>(a: I[]) =>\n (f: (acc: O, value: I, index: number, array: I[]) => O) =>\n (initial: O): O =>\n a.reduce(f, initial)\n\nexport const reduceRight =\n <I, O>(f: (acc: O, value: I, index: number, array: I[]) => O, initial: O) =>\n (a: I[]): O =>\n a.reduceRight(f, initial)\n\nexport const reverse = <I>(a: I[]): I[] => a.reverse()\n\nexport const sort =\n <I>(a: I[]) =>\n (f?: (x: I, y: I) => number): I[] =>\n f ? a.sort(f) : a.sort()\n\nexport const sortBy =\n <I>(f: (value: I) => number) =>\n (a: I[]): I[] =>\n a.sort((x, y) => f(x) - f(y))\n\nexport const sortByDesc =\n <I>(f: (value: I) => number) =>\n (a: I[]): I[] =>\n a.sort((x, y) => f(y) - f(x))\n\nexport const every =\n <I>(f: (value: I, index: number, array: I[]) => boolean = Boolean) =>\n (a: I[]): boolean =>\n a.every(f)\n\nexport const allTrue = every((x: boolean) => x === true)\n\nexport const addTo =\n <I>(a: I[]) =>\n (x: I): I[] =>\n a.includes(x) ? a : [...a, x]\n\nexport const isEmptyArray = (input: unknown): input is [] =>\n Array.isArray(input) && input.length === 0\n\nexport const isOneOf =\n <T>(...args: ReadonlyArray<T>) =>\n (input: unknown): input is T =>\n args.includes(input as T)\n\nexport const filter =\n <I, O extends I>(f: (value: I, index: number, array: I[]) => value is O) =>\n (a: I[]): O[] =>\n a.filter(f)\n","import { pipe } from \"fp-ts/function\"\nimport type { Refinement } from \"fp-ts/Refinement\"\n\nimport { access } from \"./access\"\nimport { recordToEntries } from \"./entries\"\nimport { mob } from \"./mapObject\"\nimport { allTrue, every } from \"../array\"\nimport { pass } from \"../function\"\nimport { ifNullish } from \"../nullish\"\n\nexport type PlainObject = Record<keyof any, unknown>\nexport type EmptyObject = Record<keyof any, never>\n\nexport const isNonNullObject = (input: unknown): input is object =>\n typeof input === `object` && input !== null\n\nexport const isPlainObject = (input: unknown): input is PlainObject =>\n isNonNullObject(input) && Object.getPrototypeOf(input) === Object.prototype\n\nexport const isEmptyObject = (input: unknown): input is EmptyObject =>\n isPlainObject(input) && Object.keys(input).length === 0\n\n/* prettier-ignore */\nexport const isRecord = <\n KEY extends keyof any, \n VAL\n >( \n isKey: Refinement<keyof any, KEY>,\n isValue: Refinement<unknown, VAL>\n ) =>\n (input: unknown): input is Record<KEY, VAL> =>\n isPlainObject(input) &&\n Object.entries(input).every(([k, v]) => isKey(k) && isValue(v))\n/* prettier-ignore-end */\n\nexport type HasPropertiesOptions = {\n readonly allowExtraProperties?: boolean\n}\nexport const hasProperties = <OBJ extends object>(\n isValue: {\n [K in keyof OBJ]: Refinement<unknown, OBJ[K]>\n },\n options: HasPropertiesOptions = { allowExtraProperties: false }\n): Refinement<unknown, OBJ> => {\n const name = `{${recordToEntries(\n isValue as Record<keyof any, Refinement<any, any>>\n )\n .map(([k, v]) => String(k) + `:` + v.name)\n .join(`,`)}}`\n\n const _ = {\n [name]: (input: unknown): input is OBJ =>\n isPlainObject(input) &&\n pipe(\n isValue,\n Object.entries,\n every(([key, val]) => key in input || val(undefined))\n ) &&\n pipe(\n input,\n mob((val, key) =>\n pipe(\n isValue,\n access(key),\n ifNullish(() => options.allowExtraProperties),\n pass(val)\n )\n ),\n Object.values,\n allTrue\n ),\n }\n return _[name]\n}\n\nexport const doesExtend =\n /* alias for hasExactProperties with allowExtraProperties */\n <OBJ extends object>(isValue: {\n [K in keyof OBJ]: Refinement<unknown, OBJ[K]>\n }): Refinement<unknown, OBJ> =>\n hasProperties(isValue, { allowExtraProperties: true })\n\nexport const hasExactProperties =\n /* alias for hasProperties without allowExtraProperties */\n <OBJ extends object>(isValue: {\n [K in keyof OBJ]: Refinement<unknown, OBJ[K]>\n }): Refinement<unknown, OBJ> =>\n hasProperties(isValue, { allowExtraProperties: false })\n","export const key =\n <T extends object>(k: keyof T) =>\n (obj: Exclude<object, null>): unknown =>\n (obj as Record<keyof any, any>)[k]\n\nexport const access = <V, T extends Record<keyof any, V>>(\n k: keyof any\n): {\n (obj: T): T[keyof T] | undefined\n in: (obj: T) => T[keyof T] | undefined\n} =>\n Object.assign((obj: T) => obj[k as keyof T], {\n in: (obj: T) => obj[k as keyof T],\n })\n","export type Entries<K extends keyof any, V> = [key: K, value: V][]\n\nexport const recordToEntries = <K extends keyof any, V>(\n obj: Record<K, V>\n): Entries<K, V> => Object.entries(obj) as Entries<K, V>\n\nexport const entriesToRecord = <K extends keyof any, V>(\n entries: Entries<K, V>\n): Record<K, V> => Object.fromEntries(entries) as Record<K, V>\n","import { pipe } from \"fp-ts/lib/function\"\n\nimport { entriesToRecord, recordToEntries } from \"./entries\"\nimport { map } from \"../array\"\n\nexport const mapObject = <K extends keyof any, I, O>(\n obj: Record<K, I>,\n fn: (val: I, key: K) => O\n): Record<K, O> =>\n pipe(\n obj,\n recordToEntries,\n map(([key, val]) => [key, fn(val, key)] as const),\n entriesToRecord\n )\n\nexport const mob =\n <K extends keyof any, I, O>(fn: (val: I, key: K) => O) =>\n (obj: Record<K, I>): Record<K, O> =>\n mapObject(obj, fn)\n","import type { Refinement } from \"fp-ts/Refinement\"\n\nexport const isUndefined = (input: unknown): input is undefined =>\n input === undefined\n\nexport const ifDefined = <T>(\n validate: Refinement<unknown, T>\n): Refinement<unknown, T | undefined> =>\n ((input) => isUndefined(input) || validate(input)) as Refinement<\n unknown,\n T | undefined\n >\n\nexport const isNull = (input: unknown): input is null => input === null\n\nexport const isNullish = (input: unknown): input is null | undefined =>\n isUndefined(input) || isNull(input)\n\nexport type NullSafeUnion<Base, Extension> = Extension extends null\n ? Base\n : Base & Extension\n\nexport type NullSafeRest<MaybeArg> = MaybeArg extends null\n ? [] | [undefined]\n : [MaybeArg]\n\nexport interface Discard {\n readonly _discard: unique symbol\n}\n\nexport const ifNullish =\n <X, Y>(alt: Y) =>\n (input: X): Exclude<X, null | undefined> | Y =>\n (input ?? alt) as Exclude<X, null | undefined> | Y\n","import type { Refinement } from \"fp-ts/Refinement\"\n\nexport * from \"./refined\"\n\nexport const canExist = (_: unknown): _ is unknown => true\nexport const cannotExist = (_: unknown): _ is never => false\n\nexport const isLiteral =\n <T extends boolean | number | string>(value: T): Refinement<unknown, T> =>\n (input: unknown): input is T =>\n input === value\n\nexport const isWithin =\n <Options extends ReadonlyArray<any>>(args: Options) =>\n (input: unknown): input is Options[number] =>\n args.includes(input as Options[number])\n\nexport const ensure =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): T => {\n if (!isType(input)) {\n throw new TypeError(`Expected ${input} to be of type ${isType.name}`)\n }\n return input as T\n }\n\nexport const ensureAgainst =\n <A, B>(isType: Refinement<unknown, A>) =>\n (input: A | B): Exclude<A | B, A> => {\n if (isType(input)) {\n throw new TypeError(`Expected ${input} to not be of type ${isType.name}`)\n }\n return input as Exclude<A | B, A>\n }\n\nexport type ExtendsSome<A, B> = Refinement<unknown, A | B> & {\n or: <C>(isType: Refinement<unknown, C>) => ExtendsSome<unknown, A | B | C>\n}\nexport const couldBe = <A>(\n isTypeA: Refinement<unknown, A>,\n logging = false,\n refinements: Refinement<unknown, any>[] = [isTypeA]\n): {\n (input: unknown): input is A\n or: <B>(isTypeB: Refinement<unknown, B>) => ExtendsSome<A, B>\n} => {\n const name = `(${refinements.map((r) => r.name || `anon`).join(` | `)})`\n const _ = {\n [name]: (input: unknown): input is A =>\n refinements.some(\n (refinement) => (\n logging &&\n console.log(\n refinements.map((r) => r.name || `anon`).join(` | `),\n `>`,\n refinement.name ?? `anon`,\n `:`,\n refinement(input)\n ),\n refinement(input)\n )\n ),\n }\n const checkTypes: {\n (input: unknown): input is A\n or: <B>(isTypeB: Refinement<unknown, B>) => ExtendsSome<A, B>\n } = Object.assign(_[name], {\n or: <B>(isTypeB: Refinement<unknown, B>): ExtendsSome<A, B> =>\n couldBe(isTypeB, logging, [...refinements, isTypeB]),\n })\n return checkTypes\n}\n\nexport const isUnion = couldBe(cannotExist)\n\nexport type ExtendsAll<A, B> = Refinement<unknown, A & B> & {\n and: <C>(isType: Refinement<unknown, C>) => ExtendsAll<A & B, C>\n}\n\nexport const mustBe = <A>(\n isTypeA: Refinement<unknown, A>,\n logging = false,\n refinements: Refinement<unknown, any>[] = [isTypeA]\n): {\n (input: unknown): input is A\n and: <B>(isTypeB: Refinement<unknown, B>) => ExtendsAll<A, B>\n} => {\n const name = `(${refinements.map((r) => r.name || `anon`).join(` & `)})`\n const _ = {\n [name]: (input: unknown): input is A =>\n refinements.every(\n (refinement) => (\n logging &&\n console.log(\n refinements.map((r) => r.name || `anon`).join(` & `),\n `>`,\n refinement.name || `anon`,\n `:`,\n refinement(input)\n ),\n refinement(input)\n )\n ),\n }\n const checkTypes: {\n (input: unknown): input is A\n and: <B>(isTypeB: Refinement<unknown, B>) => ExtendsAll<A, B>\n } = Object.assign(_[name], {\n and: <B>(isTypeB: Refinement<unknown, B>): ExtendsAll<A, B> =>\n mustBe(isTypeB, logging, [...refinements, isTypeB]) as ExtendsAll<A, B>,\n })\n return checkTypes\n}\n\nexport const isIntersection = mustBe(canExist)\n\nexport const isClass =\n <ClassSignature extends abstract new (...args: any) => any>(\n C: ClassSignature\n ) =>\n (input: unknown): input is InstanceType<ClassSignature> =>\n input instanceof C\n","import type { RelationData } from \"./core-relation-data\"\nimport type { JsonObj } from \"../json\"\n\nexport const getRelatedIds = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): string[] => relationMap.relations[id] ?? []\n\nexport const getRelatedId = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): string | undefined => {\n const relations = getRelatedIds(relationMap, id)\n if (relations.length > 1) {\n console.warn(\n `entry with id ${id} was not expected to have multiple relations`\n )\n }\n return relations[0]\n}\n","import { pipe } from \"fp-ts/function\"\n\nimport type { Identified } from \"~/packages/anvl/src/id/identified\"\nimport { isEmptyObject } from \"~/packages/anvl/src/object/refinement\"\n\nimport type { RelationData } from \"./core-relation-data\"\nimport { getRelatedIds } from \"./get-related-ids\"\nimport { getRelationEntries } from \"./relation-record\"\nimport { removeRelation } from \"./remove-relation\"\nimport { setRelationWithContent } from \"./set-relation\"\nimport type { JsonObj } from \"../json\"\nimport type { NullSafeRest } from \"../nullish\"\n\nexport const makeContentId = (idA: string, idB: string): string =>\n [idA, idB].sort().join(`/`)\n\nexport const getContent = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string\n): CONTENT | undefined => relationMap.contents[makeContentId(idA, idB)]\n\nexport const setContent = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n map: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string,\n content: CONTENT\n): RelationData<CONTENT, A, B> => ({\n ...map,\n contents: {\n ...map.contents,\n [makeContentId(idA, idB)]: content,\n },\n})\n\nexport const getRelations = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): (CONTENT extends null ? Identified : CONTENT & Identified)[] =>\n getRelationEntries(relationMap, id).map(\n ([id, content]) =>\n ({\n id,\n ...content,\n } as CONTENT extends null ? Identified : CONTENT & Identified)\n )\n\nexport const setRelations = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n subject: { [from in A]: string } | { [to in B]: string },\n relations: (CONTENT extends null ? Identified : CONTENT & Identified)[]\n): RelationData<CONTENT, A, B> => {\n const idA: string | undefined = (subject as { [from in A]: string })[current.a]\n const idB: string | undefined = (subject as { [to in B]: string })[current.b]\n return pipe(\n current,\n (relationData) => {\n const relatedIds = getRelatedIds(current, idA)\n const removedIds = relatedIds.filter(\n (id) => !relations.some((r) => r.id === id)\n )\n let step = relationData\n for (const id of removedIds) {\n const remove = {\n [current.a]: idA ?? id,\n [current.b]: idB ?? id,\n } as Record<A | B, string>\n step = removeRelation(step, remove)\n }\n return step\n },\n (relationData) => {\n let step = relationData\n for (const { id, ...rest } of relations) {\n const content = isEmptyObject(rest) ? undefined : rest\n step = setRelationWithContent(\n step,\n { [current.a]: idA ?? id, [current.b]: idB ?? id } as Record<\n A | B,\n string\n >,\n // @ts-expect-error hacky\n content as NullSafeRest<CONTENT>\n )\n }\n return step\n },\n (relationData) => {\n const newlyOrderedIds = relations.map((r) => r.id)\n return {\n ...relationData,\n relations: {\n ...relationData.relations,\n [idA ?? idB]: newlyOrderedIds,\n },\n }\n }\n )\n}\n","import type { RelationData } from \"./core-relation-data\"\nimport { getRelatedIds } from \"./get-related-ids\"\nimport { getContent } from \"./relation-contents\"\nimport type { JsonObj } from \"../json\"\n\nexport const getRelationEntries = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n idA: string\n): [string, CONTENT][] =>\n getRelatedIds(relationMap, idA).map((idB) => [\n idB,\n getContent(relationMap, idA, idB) as CONTENT,\n ])\n\nexport const getRelationRecord = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): Record<string, CONTENT> =>\n Object.fromEntries(getRelationEntries(relationMap, id))\n","import { pipe } from \"fp-ts/function\"\nimport { isString } from \"fp-ts/string\"\n\nimport type { RelationData } from \"./core-relation-data\"\nimport { isEmptyArray, isOneOf, map } from \"../array\"\nimport { comprises } from \"../array/venn\"\nimport type { JsonObj } from \"../json\"\nimport type { RequireAtLeastOne } from \"../object\"\nimport { treeShake as removeProperties } from \"../object\"\nimport { entriesToRecord, recordToEntries } from \"../object/entries\"\nimport { split } from \"../string/split\"\n\nexport const removeSpecific = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string\n): RelationData<CONTENT, A, B> => {\n const isIdForRemoval = isOneOf(idA, idB)\n return {\n ...current,\n relations: pipe(\n current.relations,\n recordToEntries,\n map(([id, relations]): [id: string, fewerRelations: string[]] => [\n id,\n isIdForRemoval(id)\n ? relations.filter((relation) => !isIdForRemoval(relation))\n : relations,\n ]),\n entriesToRecord,\n removeProperties(isEmptyArray)\n ),\n contents: pipe(\n current.contents,\n removeProperties(\n (_, key) => isString(key) && pipe(key, split(`/`), comprises([idA, idB]))\n )\n ),\n }\n}\n\nexport const removeAll = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n idToRemove: string\n): RelationData<CONTENT, A, B> => {\n const next: RelationData<CONTENT, A, B> = {\n ...current,\n relations: pipe(\n current.relations,\n recordToEntries,\n map(([id, relations]): [id: string, fewerRelations: string[]] => [\n id,\n relations.filter((relation) => relation !== idToRemove),\n ]),\n entriesToRecord,\n removeProperties((val, key) => key === idToRemove || isEmptyArray(val))\n ),\n contents: pipe(\n current.contents,\n removeProperties(\n (_, key) => isString(key) && key.split(`/`).includes(idToRemove)\n )\n ),\n }\n return next\n}\n\nexport const removeRelation = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n relation: Partial<Record<A | B, string>>\n): RelationData<CONTENT, A, B> => {\n const idA: string | undefined = (relation as { [key in A | B]: string })[\n current.a\n ]\n const idB: string | undefined = (relation as { [key in A | B]: string })[\n current.b\n ]\n return idB ? removeSpecific(current, idA, idB) : removeAll(current, idA)\n}\n","import { flow, pipe } from \"fp-ts/function\"\nimport type { Refinement } from \"fp-ts/lib/Refinement\"\n\nimport { deepMob } from \"./deepMob\"\nimport { entriesToRecord, recordToEntries } from \"./entries\"\nimport { isPlainObject } from \"./refinement\"\nimport { includesAny, map, reduce, filter } from \"../array\"\nimport { isUndefined } from \"../nullish\"\n\nexport * from \"./access\"\nexport * from \"./deepMob\"\nexport * from \"./entries\"\nexport * from \"./mapObject\"\nexport * from \"./modify\"\nexport * from \"./patch\"\nexport * from \"./refinement\"\nexport * from \"./sprawl\"\n\nexport const redact =\n <K extends keyof any>(...args: K[]) =>\n <O extends Record<K, any>>(obj: O): Omit<O, K> =>\n reduce<K, O>((acc, key) => (delete acc[key], acc), obj)(args)\n\nexport type Redacted<Holder, RedactProp extends keyof any> = Omit<\n {\n [K in keyof Holder]: Holder[K] extends (infer Item)[]\n ? Redacted<Item, RedactProp>[]\n : Redacted<Omit<Holder[K], RedactProp>, RedactProp>\n },\n RedactProp\n>\nexport const redactDeep =\n <K extends keyof any>(...args: K[]) =>\n <O extends Record<K, any>>(base: O): Redacted<O, K> =>\n deepMob(base, (node, path) =>\n includesAny(args)(path)\n ? {\n meta: { pathComplete: true },\n }\n : {\n data: isPlainObject(node)\n ? redact(...args)(node as Record<keyof any, any>)\n : node,\n }\n )\n\nexport const select =\n <Key extends keyof any>(...args: Key[]) =>\n <Obj extends object>(\n obj: Obj\n ): {\n // @ts-expect-error fuk u\n [K in keyof Pick<Obj, Key>]: any extends Pick<Obj, Key>[K]\n ? undefined\n : // @ts-expect-error fuk u\n Pick<Obj, Key>[K]\n } =>\n // @ts-expect-error fuk u ts\n reduce<Key, Pick<Obj, Key>>(\n // @ts-expect-error i will fite u\n (acc, key) => (key in obj ? (acc[key] = obj[key as keyof Obj]) : acc, acc),\n // @ts-expect-error fuk u\n {} as Pick<Obj, Key>\n )(args)\n\nexport const treeShake =\n (shouldDiscard: (val: unknown, key: keyof any) => boolean = isUndefined) =>\n <T extends object>(\n obj: T\n ): T extends Record<keyof any, unknown> ? T : Partial<T> => {\n const newObj = {} as T\n const entries = Object.entries(obj) as [keyof T, any][]\n entries.forEach(([key, val]) =>\n !shouldDiscard(val, key) ? (newObj[key] = val) : null\n )\n return newObj as T extends Record<keyof any, unknown> ? T : Partial<T>\n }\n\nexport type KeysExtending<T, V> = keyof {\n [K in keyof T]: T[K] extends V ? K : never\n}\n\nconst a: never | null = null\n\nexport const filterProperties =\n <DiscardVal, DiscardKey extends keyof any>(\n shouldDiscardVal: Refinement<unknown, DiscardVal>,\n shouldDiscardKey: Refinement<unknown, DiscardKey>\n ) =>\n <P extends Record<keyof any, any>>(\n props: P\n ): DiscardVal extends never\n ? DiscardKey extends never\n ? P\n : Omit<P, DiscardKey>\n : Omit<P, DiscardKey | KeysExtending<P, DiscardVal>> =>\n // @ts-expect-error oh well\n pipe(\n props,\n recordToEntries,\n filter(\n (\n entry\n ): entry is [\n Exclude<keyof P, DiscardKey>,\n Exclude<P[keyof P], DiscardVal>\n ] => !shouldDiscardKey(entry[0]) || !shouldDiscardVal(entry[1])\n ),\n entriesToRecord\n )\n\nexport const delve = (\n obj: Record<keyof any, any>,\n path: ReadonlyArray<keyof any>\n): Error | { found: unknown } => {\n const found = path.reduce((acc, key) => acc?.[key], obj)\n return found === undefined ? new Error(`Not found`) : { found }\n}\n\nexport const tweak = (\n obj: Record<keyof any, any>,\n path: ReadonlyArray<keyof any>,\n value: unknown\n): void =>\n path.reduce((acc, key, i) => {\n if (i === path.length - 1) {\n acc[key] = value\n }\n if (acc[key] === undefined) {\n acc[key] = typeof key === `number` ? [] : {}\n }\n return acc[key]\n }, obj)\n\nexport type RequireAtLeastOne<T> = {\n [K in keyof T]-?: Partial<Pick<T, Exclude<keyof T, K>>> & Required<Pick<T, K>>\n}[keyof T]\n","export const split =\n (separator: string) =>\n (str: string): string[] =>\n str.split(separator)\n","import type { RelationData } from \"./core-relation-data\"\nimport { getRelatedId } from \"./get-related-ids\"\nimport { setContent } from \"./relation-contents\"\nimport { addTo, isEmptyArray } from \"../array\"\nimport type { JsonObj } from \"../json\"\nimport type { NullSafeRest } from \"../nullish\"\nimport { treeShake as removeProperties } from \"../object\"\n\nexport const setManyToMany = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n map: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const next = {\n ...map,\n relations: {\n ...map.relations,\n [idA]: addTo(map.relations[idA] ?? [])(idB),\n [idB]: addTo(map.relations[idB] ?? [])(idA),\n },\n }\n const content = rest[0] as CONTENT | undefined\n return content ? setContent(next, idA, idB, content) : next\n}\n\nconst removeEmpties = removeProperties(isEmptyArray)\n\nexport const set1ToMany = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n leaderId: string,\n followerId: string,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const relations = { ...current.relations }\n const prevLeaderId = getRelatedId(current, followerId)\n const next = {\n ...current,\n relations: removeEmpties({\n ...relations,\n ...(prevLeaderId &&\n prevLeaderId !== leaderId && {\n [prevLeaderId]: relations[prevLeaderId].filter(\n (id) => id !== followerId\n ),\n }),\n [followerId]: [leaderId],\n [leaderId]: addTo(relations[leaderId] ?? [])(followerId),\n }),\n }\n const content = rest[0] as CONTENT | undefined\n return content ? setContent(next, leaderId, followerId, content) : next\n}\n\nexport const set1To1 = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n wifeId: string,\n husbandId: string,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const prevWifeId = getRelatedId(current, husbandId)\n const prevHusbandId = getRelatedId(current, wifeId)\n const next = {\n ...current,\n relations: removeEmpties({\n ...current.relations,\n ...(prevWifeId && { [prevWifeId]: [] }),\n ...(prevHusbandId && { [prevHusbandId]: [] }),\n [wifeId]: [husbandId],\n [husbandId]: [wifeId],\n }),\n }\n\n const content = rest[0] as CONTENT | undefined\n return content ? setContent(next, wifeId, husbandId, content) : next\n}\n\nexport const setRelationWithContent = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n relation: Record<A | B, string>,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const { [current.a]: idA, [current.b]: idB } = relation\n // console.log({\n // current,\n // relation,\n // idA,\n // idB,\n // })\n switch (current.relationType) {\n case `1:1`:\n return set1To1(current, idA, idB, ...rest)\n case `1:n`:\n return set1ToMany(current, idA, idB, ...rest)\n case `n:n`:\n return setManyToMany(current, idA, idB, ...rest)\n }\n}\n","import type { Refinement } from \"fp-ts/Refinement\"\n\nimport type { Identified } from \"~/packages/anvl/src/id/identified\"\n\nimport type { RelationData } from \"./core-relation-data\"\nimport { EMPTY_RELATION_DATA, isRelationData } from \"./core-relation-data\"\nimport { getRelatedId, getRelatedIds } from \"./get-related-ids\"\nimport { getContent, getRelations, setRelations } from \"./relation-contents\"\nimport { getRelationEntries, getRelationRecord } from \"./relation-record\"\nimport { removeRelation } from \"./remove-relation\"\nimport { setRelationWithContent } from \"./set-relation\"\nimport type { Json, JsonObj } from \"../json\"\nimport type { NullSafeRest, NullSafeUnion } from \"../nullish\"\nimport { cannotExist } from \"../refinement\"\n\nexport class Join<\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n> implements RelationData<CONTENT, A, B>\n{\n public readonly relationType: `1:1` | `1:n` | `n:n`\n public readonly a: A = `from` as A\n public readonly b: B = `to` as B\n public readonly relations: Record<string, string[]>\n public readonly contents: Record<string, CONTENT>\n public constructor(json?: Partial<RelationData<CONTENT, A, B>>) {\n Object.assign(this, { ...EMPTY_RELATION_DATA, ...json })\n }\n public toJSON(): RelationData<CONTENT, A, B> {\n return {\n relationType: this.relationType,\n relations: this.relations,\n contents: this.contents,\n a: this.a,\n b: this.b,\n }\n }\n public static fromJSON<\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n >(\n json: Json,\n isContent: Refinement<unknown, CONTENT> = cannotExist,\n a: A = `from` as A,\n b: B = `to` as B\n ): Join<CONTENT, A, B> {\n const isValid = isRelationData<CONTENT, A, B>(isContent, a, b)(json)\n if (isValid) {\n return new Join<CONTENT, A, B>(json)\n }\n throw new Error(\n `Saved JSON for this Join is invalid: ${JSON.stringify(json)}`\n )\n }\n\n public from<AA extends string>(newA: AA): Join<CONTENT, AA, B> {\n return new Join({ ...this, a: newA })\n }\n\n public to<BB extends string>(newB: BB): Join<CONTENT, A, BB> {\n return new Join({ ...this, b: newB })\n }\n\n public getRelatedId(id: string): string | undefined {\n return getRelatedId(this, id)\n }\n public getRelatedIds(id: string): string[] {\n return getRelatedIds(this, id)\n }\n public getContent(idA: string, idB: string): CONTENT | undefined {\n return getContent(this, idA, idB)\n }\n public getRelationEntries(id: string): [string, CONTENT][] {\n return getRelationEntries(this, id)\n }\n public getRelationRecord(id: string): Record<string, CONTENT> {\n return getRelationRecord(this, id)\n }\n public getRelation(\n id: string\n ): NullSafeUnion<Identified, CONTENT> | undefined {\n return getRelations(this, id)[0]\n }\n public getRelations(id: string): NullSafeUnion<Identified, CONTENT>[] {\n return getRelations(this, id)\n }\n public setRelations(\n subject: { [from in A]: string } | { [to in B]: string },\n relations: NullSafeUnion<Identified, CONTENT>[]\n ): Join<CONTENT, A, B> {\n return new Join(setRelations(this, subject, relations))\n }\n public set(\n relation: { [key in A | B]: string },\n ...rest: NullSafeRest<CONTENT>\n ): Join<CONTENT, A, B> {\n return new Join(setRelationWithContent(this, relation, ...rest))\n }\n public remove(relation: Partial<Record<A | B, string>>): Join<CONTENT, A, B> {\n return new Join(\n removeRelation(this, relation as Partial<Record<A | B, string>>)\n )\n }\n}\n","import HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport type { Store, StoreCore } from \".\"\nimport { cacheValue, deposit, withdraw, IMPLICIT } from \".\"\nimport { getState, setState } from \"..\"\nimport type {\n AtomToken,\n StateUpdate,\n Transaction,\n TransactionOptions,\n TransactionToken,\n ƒn,\n} from \"..\"\n\nexport const TRANSACTION_PHASES = [`idle`, `building`, `applying`] as const\nexport type TransactionPhase = (typeof TRANSACTION_PHASES)[number]\n\nexport type KeyedStateUpdate<T> = StateUpdate<T> & {\n key: string\n}\nexport type TransactionUpdate<ƒ extends ƒn> = {\n key: string\n atomUpdates: KeyedStateUpdate<unknown>[]\n params: Parameters<ƒ>\n output: ReturnType<ƒ>\n}\n\nexport type TransactionUpdateInProgress<ƒ extends ƒn> = TransactionUpdate<ƒ> & {\n phase: `applying` | `building`\n core: StoreCore\n}\nexport type TransactionIdle = {\n phase: `idle`\n}\nexport type TransactionStatus<ƒ extends ƒn> =\n | TransactionIdle\n | TransactionUpdateInProgress<ƒ>\n\nexport const buildTransaction = (\n key: string,\n params: any[],\n store: Store\n): void => {\n store.transactionStatus = {\n key,\n phase: `building`,\n core: {\n atoms: store.atoms,\n atomsThatAreDefault: store.atomsThatAreDefault,\n operation: { open: false },\n readonlySelectors: store.readonlySelectors,\n timelines: store.timelines,\n timelineAtoms: store.timelineAtoms,\n transactions: store.transactions,\n selectorAtoms: store.selectorAtoms,\n selectorGraph: store.selectorGraph,\n selectors: store.selectors,\n valueMap: store.valueMap,\n },\n atomUpdates: [],\n params,\n output: undefined,\n }\n store.config.logger?.info(`🛫`, `transaction \"${key}\" started`)\n}\nexport const applyTransaction = <ƒ extends ƒn>(\n output: ReturnType<ƒ>,\n store: Store\n): void => {\n if (store.transactionStatus.phase !== `building`) {\n store.config.logger?.warn(\n `abortTransaction called outside of a transaction. This is probably a bug.`\n )\n return\n }\n store.config.logger?.info(\n `🛃 apply transaction \"${store.transactionStatus.key}\"`\n )\n store.transactionStatus.phase = `applying`\n store.transactionStatus.output = output\n const { atomUpdates } = store.transactionStatus\n\n for (const { key, newValue } of atomUpdates) {\n const token: AtomToken<unknown> = { key, type: `atom` }\n if (!HAMT.has(token.key, store.valueMap)) {\n const atom = HAMT.get(token.key, store.transactionStatus.core.atoms)\n store.atoms = HAMT.set(atom.key, atom, store.atoms)\n store.valueMap = HAMT.set(atom.key, atom.default, store.valueMap)\n store.config.logger?.info(`🔧`, `add atom \"${atom.key}\"`)\n }\n const state = withdraw(token, store)\n\n setState(state, newValue, store)\n }\n const myTransaction = withdraw<ƒ>(\n { key: store.transactionStatus.key, type: `transaction` },\n store\n )\n myTransaction.subject.next({\n key: store.transactionStatus.key,\n atomUpdates,\n output,\n params: store.transactionStatus.params as Parameters<ƒ>,\n })\n store.transactionStatus = { phase: `idle` }\n store.config.logger?.info(`🛬`, `transaction done`)\n}\nexport const undoTransactionUpdate = <ƒ extends ƒn>(\n update: TransactionUpdate<ƒ>,\n store: Store\n): void => {\n store.config.logger?.info(` ⏮ undo transaction \"${update.key}\" (undo)`)\n for (const { key, oldValue } of update.atomUpdates) {\n const token: AtomToken<unknown> = { key, type: `atom` }\n const state = withdraw(token, store)\n setState(state, oldValue, store)\n }\n}\nexport const redoTransactionUpdate = <ƒ extends ƒn>(\n update: TransactionUpdate<ƒ>,\n store: Store\n): void => {\n store.config.logger?.info(` ⏭ redo transaction \"${update.key}\" (redo)`)\n for (const { key, newValue } of update.atomUpdates) {\n const token: AtomToken<unknown> = { key, type: `atom` }\n const state = withdraw(token, store)\n setState(state, newValue, store)\n }\n}\n\nexport const abortTransaction = (store: Store): void => {\n if (store.transactionStatus.phase === `idle`) {\n store.config.logger?.warn(\n `abortTransaction called outside of a transaction. This is probably a bug.`\n )\n return\n }\n store.transactionStatus = { phase: `idle` }\n store.config.logger?.info(`🪂`, `transaction fail`)\n}\n\nexport function transaction__INTERNAL<ƒ extends ƒn>(\n options: TransactionOptions<ƒ>,\n store: Store = IMPLICIT.STORE\n): TransactionToken<ƒ> {\n const newTransaction: Transaction<ƒ> = {\n key: options.key,\n type: `transaction`,\n run: (...params: Parameters<ƒ>) => {\n buildTransaction(options.key, params, store)\n try {\n const output = options.do(\n {\n get: (token) => getState(token, store),\n set: (token, value) => setState(token, value, store),\n },\n ...params\n )\n applyTransaction(output, store)\n return output\n } catch (thrown) {\n abortTransaction(store)\n store.config.logger?.error(`Transaction ${options.key} failed`, thrown)\n throw thrown\n }\n },\n subject: new Rx.Subject(),\n }\n const core = target(store)\n core.transactions = HAMT.set(\n newTransaction.key,\n newTransaction,\n core.transactions\n )\n const token = deposit(newTransaction)\n store.subject.transactionCreation.next(token)\n return token\n}\n\nexport const target = (store: Store = IMPLICIT.STORE): StoreCore =>\n store.transactionStatus.phase === `building`\n ? store.transactionStatus.core\n : store\n","import * as Rx from \"rxjs\"\n\nimport type { Serializable } from \"~/packages/anvl/src/json\"\nimport { stringifyJson } from \"~/packages/anvl/src/json\"\n\nimport type { Store } from \".\"\nimport {\n atom__INTERNAL,\n withdraw,\n selector__INTERNAL,\n target,\n deposit,\n IMPLICIT,\n} from \".\"\nimport type {\n AtomFamily,\n AtomFamilyOptions,\n AtomToken,\n FamilyMetadata,\n ReadonlySelectorFamily,\n ReadonlySelectorFamilyOptions,\n ReadonlySelectorToken,\n SelectorFamily,\n SelectorFamilyOptions,\n SelectorToken,\n} from \"..\"\n\nexport function atomFamily__INTERNAL<T, K extends Serializable>(\n options: AtomFamilyOptions<T, K>,\n store: Store = IMPLICIT.STORE\n): AtomFamily<T, K> {\n const subject = new Rx.Subject<AtomToken<T>>()\n return Object.assign(\n (key: K): AtomToken<T> => {\n const subKey = stringifyJson(key)\n const family: FamilyMetadata = { key: options.key, subKey }\n const fullKey = `${options.key}(${subKey})`\n const existing = withdraw({ key: fullKey, type: `atom` }, store)\n const token = existing\n ? deposit(existing)\n : atom__INTERNAL<T>(\n {\n key: fullKey,\n default:\n options.default instanceof Function\n ? options.default(key)\n : options.default,\n effects: options.effects?.(key),\n },\n family,\n store\n )\n subject.next(token)\n return token\n },\n {\n key: options.key,\n type: `atom_family`,\n subject,\n } as const\n )\n}\n\nexport function readonlySelectorFamily__INTERNAL<T, K extends Serializable>(\n options: SelectorFamilyOptions<T, K>,\n store?: Store\n): ReadonlySelectorFamily<T, K> {\n const core = target(store)\n const subject = new Rx.Subject<ReadonlySelectorToken<T>>()\n return Object.assign(\n (key: K): ReadonlySelectorToken<T> => {\n const subKey = stringifyJson(key)\n const family: FamilyMetadata = { key: options.key, subKey }\n const fullKey = `${options.key}(${subKey})`\n const existing = core.readonlySelectors.get(fullKey)\n if (existing) {\n return deposit(existing)\n }\n return selector__INTERNAL<T>(\n {\n key: fullKey,\n get: options.get(key),\n },\n family,\n store\n ) as ReadonlySelectorToken<T>\n },\n {\n key: options.key,\n type: `readonly_selector_family`,\n subject,\n } as const\n ) as ReadonlySelectorFamily<T, K>\n}\n\nexport function selectorFamily__INTERNAL<T, K extends Serializable>(\n options: SelectorFamilyOptions<T, K>,\n store?: Store\n): SelectorFamily<T, K>\nexport function selectorFamily__INTERNAL<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K>,\n store?: Store\n): ReadonlySelectorFamily<T, K>\nexport function selectorFamily__INTERNAL<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K> | SelectorFamilyOptions<T, K>,\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorFamily<T, K> | SelectorFamily<T, K> {\n const isReadonly = !(`set` in options)\n\n if (isReadonly) {\n return readonlySelectorFamily__INTERNAL(options as any, store)\n }\n const core = target(store)\n const subject = new Rx.Subject<SelectorToken<T>>()\n\n return Object.assign(\n (key: K): SelectorToken<T> => {\n const subKey = stringifyJson(key)\n const family: FamilyMetadata = { key: options.key, subKey }\n const fullKey = `${options.key}(${subKey})`\n const existing = core.selectors.get(fullKey)\n if (existing) {\n return deposit(existing)\n }\n const token = selector__INTERNAL<T>(\n {\n key: fullKey,\n get: options.get(key),\n set: options.set(key),\n },\n family,\n store\n )\n subject.next(token)\n return token\n },\n {\n key: options.key,\n type: `selector_family`,\n } as const\n ) as SelectorFamily<T, K>\n}\n","import { pipe } from \"fp-ts/function\"\n\nexport * from \"./refine\"\n\nexport const serializeSet = <T>(set: Set<T>): string =>\n pipe(set, Array.from, JSON.stringify)\n\nexport const deserializeSet = <T>(str: string): Set<T> =>\n pipe(str, JSON.parse, Array.from, (a) => new Set(a as T[]))\n\nexport type Primitive = boolean | number | string | null\n\nexport type Serializable =\n | Primitive\n | Readonly<{ [key: string]: Serializable }>\n | ReadonlyArray<Serializable>\n\nexport type JsonObj<\n Key extends string = string,\n Value extends Serializable = Serializable\n> = Record<Key, Value>\n\nexport type JsonArr<Element extends Serializable = Serializable> =\n ReadonlyArray<Element>\n\nexport type Json = JsonArr | JsonObj | Primitive\n\nexport const parseJson = <J extends Json, S extends Stringified<J> | string>(\n str: S | string\n): S extends Stringified<J> ? J : Json => JSON.parse(str)\n\nexport type Stringified<J extends Json> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json>(json: J): Stringified<J> =>\n JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n `array`,\n `boolean`,\n `null`,\n `number`,\n `object`,\n `string`,\n] as const\n\nexport type JsonTypeName = (typeof JSON_TYPE_NAMES)[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json> {\n array: JsonArr\n boolean: boolean\n null: null\n number: number\n object: JsonObj\n string: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n array: [],\n boolean: false,\n null: null,\n number: 0,\n object: {},\n string: ``,\n}\n\nexport type JsonInterface<T, J extends Json = Json> = {\n toJson: (t: T) => J\n fromJson: (json: J) => T\n}\n","export * from \"./attach-meta\"\nexport * from \"./meta-state\"\nexport * from \"./meta-timelines\"\nexport * from \"./meta-transactions\"\n","import type { AtomToken, ReadonlySelectorToken, SelectorToken } from \"../..\"\nimport { selector, atom } from \"../..\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\n\nexport type StateTokenIndex<\n Token extends\n | AtomToken<unknown>\n | ReadonlySelectorToken<unknown>\n | SelectorToken<unknown>\n> = Record<\n string,\n | Token\n | {\n key: string\n familyMembers: Record<string, Token>\n }\n>\n\nexport type AtomTokenIndex = StateTokenIndex<AtomToken<unknown>>\nexport type SelectorTokenIndex = StateTokenIndex<\n ReadonlySelectorToken<unknown> | SelectorToken<unknown>\n>\n\nexport const attachMetaAtoms = (\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorToken<AtomTokenIndex> => {\n const atomTokenIndexState__INTERNAL = atom<AtomTokenIndex>({\n key: `👁‍🗨_atom_token_index__INTERNAL`,\n default: () =>\n [...store.atoms].reduce<AtomTokenIndex>((acc, [key]) => {\n acc[key] = { key, type: `atom` }\n return acc\n }, {}),\n effects: [\n ({ setSelf }) => {\n store.subject.atomCreation.subscribe((atomToken) => {\n if (store.operation.open) {\n return\n }\n setSelf((state) => {\n const { key, family } = atomToken\n if (family) {\n const { key: familyKey, subKey } = family\n const current = state[familyKey]\n if (current === undefined || `familyMembers` in current) {\n const familyKeyState = current || {\n key: familyKey,\n familyMembers: {},\n }\n return {\n ...state,\n [familyKey]: {\n ...familyKeyState,\n familyMembers: {\n ...familyKeyState.familyMembers,\n [subKey]: atomToken,\n },\n },\n }\n }\n }\n return {\n ...state,\n [key]: atomToken,\n }\n })\n })\n },\n ],\n })\n return selector({\n key: `👁‍🗨_atom_token_index`,\n get: ({ get }) => get(atomTokenIndexState__INTERNAL),\n })\n}\n\nexport const attachMetaSelectors = (\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorToken<SelectorTokenIndex> => {\n const readonlySelectorTokenIndexState__INTERNAL = atom<SelectorTokenIndex>({\n key: `👁‍🗨_selector_token_index__INTERNAL`,\n default: () =>\n Object.assign(\n [...store.readonlySelectors].reduce<SelectorTokenIndex>((acc, [key]) => {\n acc[key] = { key, type: `readonly_selector` }\n return acc\n }, {}),\n [...store.selectors].reduce<SelectorTokenIndex>((acc, [key]) => {\n acc[key] = { key, type: `selector` }\n return acc\n }, {})\n ),\n effects: [\n ({ setSelf }) => {\n store.subject.selectorCreation.subscribe((selectorToken) => {\n if (store.operation.open) {\n return\n }\n setSelf((state) => {\n const { key, family } = selectorToken\n if (family) {\n const { key: familyKey, subKey } = family\n const current = state[familyKey]\n if (current === undefined || `familyMembers` in current) {\n const familyKeyState = current || {\n key: familyKey,\n familyMembers: {},\n }\n return {\n ...state,\n [familyKey]: {\n ...familyKeyState,\n familyMembers: {\n ...familyKeyState.familyMembers,\n [subKey]: selectorToken,\n },\n },\n }\n }\n }\n return {\n ...state,\n [key]: selectorToken,\n }\n })\n })\n },\n ],\n })\n return selector({\n key: `👁‍🗨_selector_token_index`,\n get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL),\n })\n}\n","import type { AtomTokenIndex, SelectorTokenIndex } from \"./meta-state\"\nimport { attachMetaAtoms, attachMetaSelectors } from \"./meta-state\"\nimport type { ReadonlySelectorToken } from \"../..\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\n\nexport const attachMetaState = (\n store: Store = IMPLICIT.STORE\n): {\n atomTokenIndexState: ReadonlySelectorToken<AtomTokenIndex>\n selectorTokenIndexState: ReadonlySelectorToken<SelectorTokenIndex>\n} => {\n return {\n atomTokenIndexState: attachMetaAtoms(store),\n selectorTokenIndexState: attachMetaSelectors(store),\n }\n}\n","import HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport { become } from \"~/packages/anvl/src/function\"\n\nimport type { Store } from \".\"\nimport {\n target,\n cacheValue,\n markDone,\n lookup,\n IMPLICIT,\n getState__INTERNAL,\n setState__INTERNAL,\n withdraw,\n} from \".\"\nimport type {\n AtomToken,\n FamilyMetadata,\n ReadonlySelectorOptions,\n ReadonlySelectorToken,\n SelectorOptions,\n SelectorToken,\n StateToken,\n} from \"..\"\nimport type { Transactors } from \"../transaction\"\n\nexport type Selector<T> = {\n key: string\n type: `selector`\n family?: FamilyMetadata\n subject: Rx.Subject<{ newValue: T; oldValue: T }>\n get: () => T\n set: (newValue: T | ((oldValue: T) => T)) => void\n}\nexport type ReadonlySelector<T> = {\n key: string\n type: `readonly_selector`\n family?: FamilyMetadata\n subject: Rx.Subject<{ newValue: T; oldValue: T }>\n get: () => T\n}\n\nexport const lookupSelectorSources = (\n key: string,\n store: Store\n): (\n | AtomToken<unknown>\n | ReadonlySelectorToken<unknown>\n | SelectorToken<unknown>\n)[] =>\n target(store)\n .selectorGraph.getRelations(key)\n .filter(({ source }) => source !== key)\n .map(({ source }) => lookup(source, store))\n\nexport const traceSelectorAtoms = (\n selectorKey: string,\n dependency: ReadonlySelectorToken<unknown> | StateToken<unknown>,\n store: Store\n): AtomToken<unknown>[] => {\n const roots: AtomToken<unknown>[] = []\n\n const sources = lookupSelectorSources(dependency.key, store)\n let depth = 0\n while (sources.length > 0) {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const source = sources.shift()!\n ++depth\n if (depth > 999) {\n throw new Error(\n `Maximum selector dependency depth exceeded in selector \"${selectorKey}\".`\n )\n }\n\n if (source.type !== `atom`) {\n sources.push(...lookupSelectorSources(source.key, store))\n } else {\n roots.push(source)\n }\n }\n\n return roots\n}\n\nexport const traceAllSelectorAtoms = (\n selectorKey: string,\n store: Store\n): AtomToken<unknown>[] => {\n const sources = lookupSelectorSources(selectorKey, store)\n return sources.flatMap((source) =>\n source.type === `atom`\n ? source\n : traceSelectorAtoms(selectorKey, source, store)\n )\n}\n\nexport const updateSelectorAtoms = (\n selectorKey: string,\n dependency: ReadonlySelectorToken<unknown> | StateToken<unknown>,\n store: Store\n): void => {\n const core = target(store)\n if (dependency.type === `atom`) {\n core.selectorAtoms = core.selectorAtoms.set({\n selectorKey,\n atomKey: dependency.key,\n })\n store.config.logger?.info(\n ` || adding root for \"${selectorKey}\": ${dependency.key}`\n )\n return\n }\n const roots = traceSelectorAtoms(selectorKey, dependency, store)\n store.config.logger?.info(\n ` || adding roots for \"${selectorKey}\":`,\n roots.map((r) => r.key)\n )\n for (const root of roots) {\n core.selectorAtoms = core.selectorAtoms.set({\n selectorKey,\n atomKey: root.key,\n })\n }\n}\n\nexport const registerSelector = (\n selectorKey: string,\n store: Store = IMPLICIT.STORE\n): Transactors => ({\n get: (dependency) => {\n const core = target(store)\n const alreadyRegistered = core.selectorGraph\n .getRelations(selectorKey)\n .some(({ source }) => source === dependency.key)\n\n const dependencyState = withdraw(dependency, store)\n const dependencyValue = getState__INTERNAL(dependencyState, store)\n\n if (alreadyRegistered) {\n store.config.logger?.info(\n ` || ${selectorKey} <- ${dependency.key} =`,\n dependencyValue\n )\n } else {\n store.config.logger?.info(\n `🔌 registerSelector \"${selectorKey}\" <- ( \"${dependency.key}\" =`,\n dependencyValue,\n `)`\n )\n core.selectorGraph = core.selectorGraph.set(\n { from: dependency.key, to: selectorKey },\n {\n source: dependency.key,\n }\n )\n }\n updateSelectorAtoms(selectorKey, dependency, store)\n return dependencyValue\n },\n set: (stateToken, newValue) => {\n const state = withdraw(stateToken, store)\n setState__INTERNAL(state, newValue, store)\n },\n})\n\nexport function selector__INTERNAL<T>(\n options: SelectorOptions<T>,\n family?: FamilyMetadata,\n store?: Store\n): SelectorToken<T>\nexport function selector__INTERNAL<T>(\n options: ReadonlySelectorOptions<T>,\n family?: FamilyMetadata,\n store?: Store\n): ReadonlySelectorToken<T>\nexport function selector__INTERNAL<T>(\n options: ReadonlySelectorOptions<T> | SelectorOptions<T>,\n family?: FamilyMetadata,\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorToken<T> | SelectorToken<T> {\n const core = target(store)\n if (HAMT.has(options.key, core.selectors)) {\n store.config.logger?.error(\n `Key \"${options.key}\" already exists in the store.`\n )\n }\n\n const subject = new Rx.Subject<{ newValue: T; oldValue: T }>()\n\n const { get, set } = registerSelector(options.key, store)\n const getSelf = () => {\n const value = options.get({ get })\n cacheValue(options.key, value, store)\n return value\n }\n if (!(`set` in options)) {\n const readonlySelector: ReadonlySelector<T> = {\n ...options,\n subject,\n get: getSelf,\n type: `readonly_selector`,\n ...(family && { family }),\n }\n core.readonlySelectors = HAMT.set(\n options.key,\n readonlySelector,\n core.readonlySelectors\n )\n const initialValue = getSelf()\n store.config.logger?.info(` ✨ \"${options.key}\" =`, initialValue)\n const token: ReadonlySelectorToken<T> = {\n key: options.key,\n type: `readonly_selector`,\n family,\n }\n store.subject.selectorCreation.next(token)\n return token\n }\n const setSelf = (next: T | ((oldValue: T) => T)): void => {\n store.config.logger?.info(` <- \"${options.key}\" became`, next)\n const oldValue = getSelf()\n const newValue = become(next)(oldValue)\n cacheValue(options.key, newValue, store)\n markDone(options.key, store)\n if (store.transactionStatus.phase === `idle`) {\n subject.next({ newValue, oldValue })\n }\n options.set({ get, set }, newValue)\n }\n const mySelector: Selector<T> = {\n ...options,\n subject,\n get: getSelf,\n set: setSelf,\n type: `selector`,\n ...(family && { family }),\n }\n core.selectors = HAMT.set(options.key, mySelector, core.selectors)\n const initialValue = getSelf()\n store.config.logger?.info(` ✨ \"${options.key}\" =`, initialValue)\n const token: SelectorToken<T> = {\n key: options.key,\n type: `selector`,\n family,\n }\n store.subject.selectorCreation.next(token)\n return token\n}\n","import HAMT from \"hamt_plus\"\n\nimport { become } from \"~/packages/anvl/src/function\"\n\nimport type { Atom, Selector, Store } from \".\"\nimport {\n IMPLICIT,\n cacheValue,\n emitUpdate,\n evictCachedValue,\n getState__INTERNAL,\n isAtomDefault,\n isDone,\n markAtomAsNotDefault,\n markDone,\n stowUpdate,\n target,\n} from \".\"\n\nexport const evictDownStream = <T>(\n state: Atom<T>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n const downstream = core.selectorAtoms.getRelations(state.key)\n const downstreamKeys = downstream.map(({ id }) => id)\n store.config.logger?.info(\n ` || ${downstreamKeys.length} downstream:`,\n downstreamKeys\n )\n if (core.operation.open) {\n store.config.logger?.info(` ||`, [...core.operation.done], `already done`)\n }\n downstream.forEach(({ id: stateKey }) => {\n if (isDone(stateKey, store)) {\n store.config.logger?.info(` || ${stateKey} already done`)\n return\n }\n const state =\n HAMT.get(stateKey, core.selectors) ??\n HAMT.get(stateKey, core.readonlySelectors)\n if (!state) {\n store.config.logger?.info(\n ` || ${stateKey} is an atom, and can't be downstream`\n )\n return\n }\n evictCachedValue(stateKey, store)\n store.config.logger?.info(` xx evicted \"${stateKey}\"`)\n\n markDone(stateKey, store)\n })\n}\n\nexport const setAtomState = <T>(\n atom: Atom<T>,\n next: T | ((oldValue: T) => T),\n store: Store = IMPLICIT.STORE\n): void => {\n const oldValue = getState__INTERNAL(atom, store)\n const newValue = become(next)(oldValue)\n store.config.logger?.info(`<< setting atom \"${atom.key}\" to`, newValue)\n cacheValue(atom.key, newValue, store)\n if (isAtomDefault(atom.key)) {\n markAtomAsNotDefault(atom.key, store)\n }\n markDone(atom.key, store)\n store.config.logger?.info(\n ` || evicting caches downstream from \"${atom.key}\"`\n )\n evictDownStream(atom, store)\n const update = { oldValue, newValue }\n if (store.transactionStatus.phase !== `building`) {\n emitUpdate(atom, update, store)\n } else {\n stowUpdate(atom, update, store)\n }\n}\nexport const setSelectorState = <T>(\n selector: Selector<T>,\n next: T | ((oldValue: T) => T),\n store: Store = IMPLICIT.STORE\n): void => {\n const oldValue = getState__INTERNAL(selector, store)\n const newValue = become(next)(oldValue)\n\n store.config.logger?.info(`<< setting selector \"${selector.key}\" to`, newValue)\n store.config.logger?.info(` || propagating change made to \"${selector.key}\"`)\n\n selector.set(newValue)\n}\nexport const setState__INTERNAL = <T>(\n state: Atom<T> | Selector<T>,\n value: T | ((oldValue: T) => T),\n store: Store = IMPLICIT.STORE\n): void => {\n if (`set` in state) {\n setSelectorState(state, value, store)\n } else {\n setAtomState(state, value, store)\n }\n}\n","import {\n getState__INTERNAL,\n withdraw,\n recallState,\n traceAllSelectorAtoms,\n} from \".\"\nimport type { Atom, ReadonlySelector, Selector, Store } from \".\"\nimport type { StateUpdate } from \"..\"\n\nexport const prepareUpdate = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n store: Store\n): StateUpdate<T> => {\n const oldValue = recallState(state, store)\n const newValue = getState__INTERNAL(state, store)\n return { newValue, oldValue }\n}\n\nexport const stowUpdate = <T>(\n state: Atom<T>,\n update: StateUpdate<T>,\n store: Store\n): void => {\n const { key } = state\n const { logger } = store.config\n if (store.transactionStatus.phase !== `building`) {\n store.config.logger?.warn(\n `stowUpdate called outside of a transaction. This is probably a bug.`\n )\n return\n }\n store.transactionStatus.atomUpdates.push({ key, ...update })\n logger?.info(`📝 ${key} stowed (`, update.oldValue, `->`, update.newValue, `)`)\n}\n\nexport const emitUpdate = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n update: StateUpdate<T>,\n store: Store\n): void => {\n const { key } = state\n const { logger } = store.config\n logger?.info(\n `📢 ${state.type} \"${key}\" went (`,\n update.oldValue,\n `->`,\n update.newValue,\n `)`\n )\n state.subject.next(update)\n}\n\nexport const subscribeToRootAtoms = <T>(\n state: ReadonlySelector<T> | Selector<T>,\n store: Store\n): { unsubscribe: () => void }[] | null => {\n const dependencySubscriptions =\n `default` in state\n ? null\n : traceAllSelectorAtoms(state.key, store).map((atomToken) => {\n const atom = withdraw(atomToken, store)\n return atom.subject.subscribe((atomChange) => {\n store.config.logger?.info(\n `📢 selector \"${state.key}\" saw root \"${atomToken.key}\" go (`,\n atomChange.oldValue,\n `->`,\n atomChange.newValue,\n `)`\n )\n const oldValue = recallState(state, store)\n const newValue = getState__INTERNAL(state, store)\n store.config.logger?.info(` <- ${state.key} became`, newValue)\n state.subject.next({ newValue, oldValue })\n })\n })\n return dependencySubscriptions\n}\n","import type { Store } from \".\"\nimport { IMPLICIT } from \".\"\nimport { setState } from \"..\"\nimport type { TimelineToken } from \"..\"\n\nexport const redo__INTERNAL = (\n token: TimelineToken,\n store: Store = IMPLICIT.STORE\n): void => {\n store.config.logger?.info(`⏩ redo \"${token.key}\"`)\n const timelineData = store.timelineStore.get(token.key)\n if (!timelineData) {\n store.config.logger?.error(\n `Failed to redo on timeline \"${token.key}\". This timeline has not been initialized.`\n )\n return\n }\n if (timelineData.at === timelineData.history.length) {\n store.config.logger?.warn(\n `Failed to redo at the end of timeline \"${token.key}\". There is nothing to redo.`\n )\n return\n }\n timelineData.timeTraveling = true\n const update = timelineData.history[timelineData.at]\n switch (update.type) {\n case `atom_update`: {\n const { key, newValue } = update\n setState({ key, type: `atom` }, newValue)\n break\n }\n case `selector_update`:\n case `transaction_update`: {\n for (const atomUpdate of update.atomUpdates) {\n const { key, newValue } = atomUpdate\n setState({ key, type: `atom` }, newValue)\n }\n break\n }\n }\n ++timelineData.at\n timelineData.timeTraveling = false\n store.config.logger?.info(\n `⏹️ \"${token.key}\" is now at ${timelineData.at} / ${timelineData.history.length}`\n )\n}\n\nexport const undo__INTERNAL = (\n token: TimelineToken,\n store: Store = IMPLICIT.STORE\n): void => {\n store.config.logger?.info(`⏪ undo \"${token.key}\"`)\n const timelineData = store.timelineStore.get(token.key)\n if (!timelineData) {\n store.config.logger?.error(\n `Failed to undo on timeline \"${token.key}\". This timeline has not been initialized.`\n )\n return\n }\n if (timelineData.at === 0) {\n store.config.logger?.warn(\n `Failed to undo at the beginning of timeline \"${token.key}\". There is nothing to undo.`\n )\n return\n }\n timelineData.timeTraveling = true\n\n --timelineData.at\n const update = timelineData.history[timelineData.at]\n switch (update.type) {\n case `atom_update`: {\n const { key, oldValue } = update\n setState({ key, type: `atom` }, oldValue)\n break\n }\n case `selector_update`:\n case `transaction_update`: {\n for (const atomUpdate of update.atomUpdates) {\n const { key, oldValue } = atomUpdate\n setState({ key, type: `atom` }, oldValue)\n }\n break\n }\n }\n timelineData.timeTraveling = false\n store.config.logger?.info(\n `⏹️ \"${token.key}\" is now at ${timelineData.at} / ${timelineData.history.length}`\n )\n}\n","import HAMT from \"hamt_plus\"\n\nimport type { KeyedStateUpdate, TransactionUpdate, Store } from \".\"\nimport { target, IMPLICIT, withdraw } from \".\"\nimport type { AtomToken, TimelineOptions, TimelineToken, ƒn } from \"..\"\n\nexport type Timeline = {\n key: string\n type: `timeline`\n next: () => void\n prev: () => void\n}\n\nexport type TimelineAtomUpdate = KeyedStateUpdate<unknown> & {\n type: `atom_update`\n}\nexport type TimelineSelectorUpdate = {\n key: string\n type: `selector_update`\n atomUpdates: TimelineAtomUpdate[]\n}\nexport type TimelineTransactionUpdate = TransactionUpdate<ƒn> & {\n type: `transaction_update`\n}\n\nexport type TimelineData = {\n at: number\n timeTraveling: boolean\n history: (\n | TimelineAtomUpdate\n | TimelineSelectorUpdate\n | TimelineTransactionUpdate\n )[]\n selectorTime: number | null\n transactionKey: string | null\n}\n\nexport function timeline__INTERNAL(\n options: TimelineOptions,\n store: Store = IMPLICIT.STORE\n): TimelineToken {\n const timelineData: TimelineData = {\n at: 0,\n timeTraveling: false,\n history: [],\n selectorTime: null,\n transactionKey: null,\n }\n\n const subscribeToAtom = (token: AtomToken<any>) => {\n const state = withdraw(token, store)\n state.subject.subscribe((update) => {\n const storeCurrentSelectorKey =\n store.operation.open && store.operation.token.type === `selector`\n ? store.operation.token.key\n : null\n const storeCurrentSelectorTime =\n store.operation.open && store.operation.token.type === `selector`\n ? store.operation.time\n : null\n\n const storeCurrentTransactionKey =\n store.transactionStatus.phase === `applying`\n ? store.transactionStatus.key\n : null\n store.config.logger?.info(\n `⏳ timeline \"${options.key}\" saw atom \"${token.key}\" go (`,\n update.oldValue,\n `->`,\n update.newValue,\n storeCurrentTransactionKey\n ? `) in transaction \"${storeCurrentTransactionKey}\"`\n : storeCurrentSelectorKey\n ? `) in selector \"${storeCurrentSelectorKey}\"`\n : `)`\n )\n\n if (\n storeCurrentTransactionKey &&\n store.transactionStatus.phase === `applying`\n ) {\n const currentTransaction = withdraw(\n { key: storeCurrentTransactionKey, type: `transaction` },\n store\n )\n if (timelineData.transactionKey !== storeCurrentTransactionKey) {\n if (timelineData.transactionKey) {\n store.config.logger?.error(\n `Timeline \"${options.key}\" was unable to resolve transaction \"${timelineData.transactionKey}. This is probably a bug.`\n )\n }\n timelineData.transactionKey = storeCurrentTransactionKey\n const subscription = currentTransaction.subject.subscribe((update) => {\n if (timelineData.timeTraveling === false) {\n if (timelineData.at !== timelineData.history.length) {\n timelineData.history.splice(timelineData.at)\n }\n timelineData.history.push({\n type: `transaction_update`,\n ...update,\n atomUpdates: update.atomUpdates.filter((atomUpdate) =>\n options.atoms.some((atom) => atom.key === atomUpdate.key)\n ),\n })\n }\n timelineData.at = timelineData.history.length\n subscription.unsubscribe()\n timelineData.transactionKey = null\n store.config.logger?.info(\n `⌛ timeline \"${options.key}\" got a transaction_update \"${update.key}\"`\n )\n })\n }\n } else if (storeCurrentSelectorKey) {\n if (timelineData.timeTraveling === false) {\n if (storeCurrentSelectorTime !== timelineData.selectorTime) {\n const newSelectorUpdate: TimelineSelectorUpdate = {\n type: `selector_update`,\n key: storeCurrentSelectorKey,\n atomUpdates: [],\n }\n newSelectorUpdate.atomUpdates.push({\n key: token.key,\n type: `atom_update`,\n ...update,\n })\n if (timelineData.at !== timelineData.history.length) {\n timelineData.history.splice(timelineData.at)\n }\n timelineData.history.push(newSelectorUpdate)\n\n store.config.logger?.info(\n `⌛ timeline \"${options.key}\" got a selector_update \"${storeCurrentSelectorKey}\" with`,\n newSelectorUpdate.atomUpdates.map((atomUpdate) => atomUpdate.key)\n )\n timelineData.at = timelineData.history.length\n timelineData.selectorTime = storeCurrentSelectorTime\n } else {\n const latestUpdate = timelineData.history.at(-1)\n if (latestUpdate?.type === `selector_update`) {\n latestUpdate.atomUpdates.push({\n key: token.key,\n type: `atom_update`,\n ...update,\n })\n store.config.logger?.info(\n ` ⌛ timeline \"${options.key}\" set selector_update \"${storeCurrentSelectorKey}\" to`,\n latestUpdate?.atomUpdates.map((atomUpdate) => atomUpdate.key)\n )\n }\n }\n }\n } else {\n if (timelineData.timeTraveling === false) {\n timelineData.selectorTime = null\n if (timelineData.at !== timelineData.history.length) {\n timelineData.history.splice(timelineData.at)\n }\n timelineData.history.push({\n type: `atom_update`,\n key: token.key,\n oldValue: update.oldValue,\n newValue: update.newValue,\n })\n store.config.logger?.info(\n `⌛ timeline \"${options.key}\" got a state_update to \"${token.key}\"`\n )\n timelineData.at = timelineData.history.length\n }\n }\n })\n }\n const core = target(store)\n for (const tokenOrFamily of options.atoms) {\n const timelineKey = core.timelineAtoms.getRelatedId(tokenOrFamily.key)\n if (timelineKey) {\n store.config.logger?.error(\n `❌ Failed to add atom \"${tokenOrFamily.key}\" to timeline \"${options.key}\" because it belongs to timeline \"${timelineKey}\"`\n )\n continue\n }\n if (tokenOrFamily.type === `atom_family`) {\n const family = tokenOrFamily\n family.subject.subscribe((token) => subscribeToAtom(token))\n } else {\n const token = tokenOrFamily\n if (`family` in token && token.family) {\n const familyTimelineKey = core.timelineAtoms.getRelatedId(\n token.family.key\n )\n if (familyTimelineKey) {\n store.config.logger?.error(\n `❌ Failed to add atom \"${token.key}\" to timeline \"${options.key}\" because its family \"${token.family.key}\" belongs to timeline \"${familyTimelineKey}\"`\n )\n continue\n }\n }\n subscribeToAtom(token)\n }\n core.timelineAtoms = core.timelineAtoms.set({\n atomKey: tokenOrFamily.key,\n timelineKey: options.key,\n })\n }\n\n store.timelineStore = HAMT.set(options.key, timelineData, store.timelineStore)\n const token: TimelineToken = {\n key: options.key,\n type: `timeline`,\n }\n store.subject.timelineCreation.next(token)\n return token\n}\n","import type * as Rx from \"rxjs\"\n\nimport type { Serializable } from \"~/packages/anvl/src/json\"\n\nimport type { AtomToken } from \".\"\nimport { atomFamily__INTERNAL, atom__INTERNAL } from \"./internal\"\n\nexport type Effectors<T> = {\n setSelf: <V extends T>(next: V | ((oldValue: T) => V)) => void\n onSet: (callback: (options: { newValue: T; oldValue: T }) => void) => void\n}\n\nexport type AtomEffect<T> = (tools: Effectors<T>) => void\n\nexport type AtomOptions<T> = {\n key: string\n default: T | (() => T)\n effects?: AtomEffect<T>[]\n}\n\nexport function atom<T>(options: AtomOptions<T>): AtomToken<T> {\n return atom__INTERNAL<T>(options)\n}\n\nexport type AtomFamilyOptions<T, K extends Serializable> = {\n key: string\n default: T | ((key: K) => T)\n effects?: (key: K) => AtomEffect<T>[]\n}\n\nexport type AtomFamily<T, K extends Serializable = Serializable> = ((\n key: K\n) => AtomToken<T>) & {\n key: string\n type: `atom_family`\n subject: Rx.Subject<AtomToken<T>>\n}\n\nexport function atomFamily<T, K extends Serializable>(\n options: AtomFamilyOptions<T, K>\n): AtomFamily<T, K> {\n return atomFamily__INTERNAL<T, K>(options)\n}\n","import { doNothing } from \"~/packages/anvl/src/function\"\n\nimport type { Store } from \"./internal/store\"\nimport { IMPLICIT } from \"./internal/store\"\n\nexport type Logger = Pick<Console, `error` | `info` | `warn`>\nexport const LOG_LEVELS: ReadonlyArray<keyof Logger> = [\n `info`,\n `warn`,\n `error`,\n] as const\n\nexport const setLogLevel = (\n preferredLevel: `error` | `info` | `warn` | null,\n store: Store = IMPLICIT.STORE\n): void => {\n const { logger__INTERNAL } = store.config\n if (preferredLevel === null) {\n store.config.logger = null\n } else {\n store.config.logger = { ...console }\n LOG_LEVELS.forEach((logLevel) => {\n if (LOG_LEVELS.indexOf(logLevel) < LOG_LEVELS.indexOf(preferredLevel)) {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n store.config.logger![logLevel] = doNothing\n } else {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n store.config.logger![logLevel] = logger__INTERNAL[logLevel]\n }\n })\n }\n}\n\nexport const useLogger = (\n logger: Logger,\n store: Store = IMPLICIT.STORE\n): void => {\n const currentLogLevel =\n store.config.logger === null\n ? null\n : LOG_LEVELS.find(\n (logLevel) => store.config.logger?.[logLevel] !== doNothing\n ) ?? null\n store.config.logger__INTERNAL = { ...logger }\n setLogLevel(currentLogLevel, store)\n}\n","import type * as Rx from \"rxjs\"\n\nimport type { Serializable } from \"~/packages/anvl/src/json\"\n\nimport type { ReadonlySelectorToken, SelectorToken } from \".\"\nimport { selectorFamily__INTERNAL, selector__INTERNAL } from \"./internal\"\nimport type { Read, Write } from \"./transaction\"\n\nexport type SelectorOptions<T> = {\n key: string\n get: Read<() => T>\n set: Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorOptions<T> = Omit<SelectorOptions<T>, `set`>\n\nexport function selector<T>(\n options: ReadonlySelectorOptions<T>\n): ReadonlySelectorToken<T>\nexport function selector<T>(options: SelectorOptions<T>): SelectorToken<T>\nexport function selector<T>(\n options: ReadonlySelectorOptions<T> | SelectorOptions<T>\n): ReadonlySelectorToken<T> | SelectorToken<T> {\n return selector__INTERNAL(options)\n}\n\nexport type SelectorFamilyOptions<T, K extends Serializable> = {\n key: string\n get: (key: K) => Read<() => T>\n set: (key: K) => Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorFamilyOptions<T, K extends Serializable> = Omit<\n SelectorFamilyOptions<T, K>,\n `set`\n>\n\nexport type SelectorFamily<T, K extends Serializable = Serializable> = ((\n key: K\n) => SelectorToken<T>) & {\n key: string\n type: `selector_family`\n subject: Rx.Subject<SelectorToken<T>>\n}\n\nexport type ReadonlySelectorFamily<T, K extends Serializable = Serializable> = ((\n key: K\n) => ReadonlySelectorToken<T>) & {\n key: string\n type: `readonly_selector_family`\n subject: Rx.Subject<ReadonlySelectorToken<T>>\n}\n\nexport function selectorFamily<T, K extends Serializable>(\n options: SelectorFamilyOptions<T, K>\n): SelectorFamily<T, K>\nexport function selectorFamily<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K>\n): ReadonlySelectorFamily<T, K>\nexport function selectorFamily<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K> | SelectorFamilyOptions<T, K>\n): ReadonlySelectorFamily<T, K> | SelectorFamily<T, K> {\n return selectorFamily__INTERNAL(options)\n}\n","import type { ReadonlySelectorToken, StateToken, TransactionToken, ƒn } from \".\"\nimport type { Store, TransactionUpdate } from \"./internal\"\nimport { IMPLICIT, subscribeToRootAtoms, withdraw } from \"./internal\"\n\nexport type StateUpdate<T> = { newValue: T; oldValue: T }\nexport type UpdateHandler<T> = (update: StateUpdate<T>) => void\n\nexport const subscribe = <T>(\n token: ReadonlySelectorToken<T> | StateToken<T>,\n handleUpdate: UpdateHandler<T>,\n store: Store = IMPLICIT.STORE\n): (() => void) => {\n const state = withdraw<T>(token, store)\n const subscription = state.subject.subscribe(handleUpdate)\n store.config.logger?.info(`👀 subscribe to \"${state.key}\"`)\n const dependencySubscriptions =\n state.type !== `atom` ? subscribeToRootAtoms(state, store) : null\n\n const unsubscribe =\n dependencySubscriptions === null\n ? () => {\n store.config.logger?.info(`🙈 unsubscribe from \"${state.key}\"`)\n subscription.unsubscribe()\n }\n : () => {\n store.config.logger?.info(\n `🙈 unsubscribe from \"${state.key}\" and its dependencies`\n )\n subscription.unsubscribe()\n for (const dependencySubscription of dependencySubscriptions) {\n dependencySubscription.unsubscribe()\n }\n }\n\n return unsubscribe\n}\n\nexport type TransactionUpdateHandler<ƒ extends ƒn> = (\n data: TransactionUpdate<ƒ>\n) => void\n\nexport const subscribeToTransaction = <ƒ extends ƒn>(\n token: TransactionToken<ƒ>,\n handleUpdate: TransactionUpdateHandler<ƒ>,\n store = IMPLICIT.STORE\n): (() => void) => {\n const tx = withdraw(token, store)\n store.config.logger?.info(`👀 subscribe to transaction \"${token.key}\"`)\n const subscription = tx.subject.subscribe(handleUpdate)\n const unsubscribe = () => {\n store.config.logger?.info(`🙈 unsubscribe from transaction \"${token.key}\"`)\n subscription.unsubscribe()\n }\n return unsubscribe\n}\n","import type { AtomFamily, AtomToken } from \".\"\nimport { IMPLICIT } from \"./internal\"\nimport { redo__INTERNAL, timeline__INTERNAL, undo__INTERNAL } from \"./internal/\"\n\nexport type TimelineToken = {\n key: string\n type: `timeline`\n}\n\nexport type TimelineOptions = {\n key: string\n atoms: (AtomFamily<any> | AtomToken<any>)[]\n}\n\nexport const timeline = (options: TimelineOptions): TimelineToken => {\n return timeline__INTERNAL(options)\n}\n\nexport const redo = (token: TimelineToken): void => {\n return redo__INTERNAL(token, IMPLICIT.STORE)\n}\n\nexport const undo = (token: TimelineToken): void => {\n return undo__INTERNAL(token, IMPLICIT.STORE)\n}\n","import type * as Rx from \"rxjs\"\n\nimport type { ReadonlySelectorToken, StateToken, TransactionToken } from \".\"\nimport type { Store, TransactionUpdate } from \"./internal\"\nimport { IMPLICIT, transaction__INTERNAL, withdraw } from \"./internal\"\n\nexport type ƒn = (...parameters: any[]) => any\n\nexport type Transactors = {\n get: <S>(state: ReadonlySelectorToken<S> | StateToken<S>) => S\n set: <S>(state: StateToken<S>, newValue: S | ((oldValue: S) => S)) => void\n}\nexport type ReadonlyTransactors = Pick<Transactors, `get`>\n\nexport type Read<ƒ extends ƒn> = (\n transactors: ReadonlyTransactors,\n ...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type Write<ƒ extends ƒn> = (\n transactors: Transactors,\n ...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type TransactionOptions<ƒ extends ƒn> = {\n key: string\n do: Write<ƒ>\n}\n\nexport type Transaction<ƒ extends ƒn> = {\n key: string\n type: `transaction`\n run: (...parameters: Parameters<ƒ>) => ReturnType<ƒ>\n subject: Rx.Subject<TransactionUpdate<ƒ>>\n}\n\nexport function transaction<ƒ extends ƒn>(\n options: TransactionOptions<ƒ>\n): TransactionToken<ƒ> {\n return transaction__INTERNAL(options)\n}\n\nexport const runTransaction =\n <ƒ extends ƒn>(token: TransactionToken<ƒ>, store: Store = IMPLICIT.STORE) =>\n (...parameters: Parameters<ƒ>): ReturnType<ƒ> =>\n withdraw(token, store).run(...parameters)\n","import {\n IMPLICIT,\n closeOperation,\n openOperation,\n getState__INTERNAL,\n setState__INTERNAL,\n isAtomDefault,\n isSelectorDefault,\n withdraw,\n} from \"./internal\"\nimport * as __INTERNAL__ from \"./internal\"\nimport type { Store } from \"./internal/store\"\n\nexport * from \"./atom\"\nexport * from \"./logger\"\nexport * from \"./selector\"\nexport * from \"./subscribe\"\nexport * from \"./timeline\"\nexport * from \"./transaction\"\nexport { __INTERNAL__ }\nexport type { Serializable } from \"~/packages/anvl/src/json\"\n\nexport type AtomToken<_> = {\n key: string\n type: `atom`\n family?: FamilyMetadata\n}\nexport type SelectorToken<_> = {\n key: string\n type: `selector`\n family?: FamilyMetadata\n}\nexport type StateToken<T> = AtomToken<T> | SelectorToken<T>\n\nexport type ReadonlySelectorToken<_> = {\n key: string\n type: `readonly_selector`\n family?: FamilyMetadata\n}\n\nexport type FamilyMetadata = {\n key: string\n subKey: string\n}\n\nexport type TransactionToken<_> = {\n key: string\n type: `transaction`\n}\n\nexport const getState = <T>(\n token: ReadonlySelectorToken<T> | StateToken<T>,\n store: Store = IMPLICIT.STORE\n): T => {\n const state = withdraw<T>(token, store)\n return getState__INTERNAL(state, store)\n}\n\nexport const setState = <T, New extends T>(\n token: StateToken<T>,\n value: New | ((oldValue: T) => New),\n store: Store = IMPLICIT.STORE\n): void => {\n try {\n openOperation(token, store)\n } catch (thrown) {\n if (!(typeof thrown === `symbol`)) {\n throw thrown\n }\n return\n }\n const state = withdraw(token, store)\n setState__INTERNAL(state, value, store)\n closeOperation(store)\n}\n\nexport const isDefault = (\n token: ReadonlySelectorToken<unknown> | StateToken<unknown>,\n store: Store = IMPLICIT.STORE\n): boolean =>\n token.type === `atom`\n ? isAtomDefault(token.key, store)\n : isSelectorDefault(token.key, store)\n"],"mappings":"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","names":["HAMT","Rx","selector","HAMT","HAMT","pipe","pipe","pipe","pipe","isString","pipe","pipe","isString","map","map","id","pipe","HAMT","HAMT","atom","selector","HAMT","Rx","HAMT","atom","token","HAMT","Rx","pipe","HAMT","Rx","HAMT","initialValue","token","_a","HAMT","_a","_b","state","HAMT","atom","selector","atom","HAMT","token","_a","_b","update","atom","HAMT","_a","_a"]}
1
+ {"version":3,"sources":["../../anvl/src/string/capitalize.ts","../src/internal/index.ts","../src/internal/atom-internal.ts","../src/internal/get.ts","../src/internal/is-default.ts","../src/internal/operation.ts","../src/internal/store.ts","../../anvl/src/function/index.ts","../../anvl/src/join/core-relation-data.ts","../../anvl/src/array/venn.ts","../../anvl/src/array/index.ts","../../anvl/src/object/refinement.ts","../../anvl/src/object/access.ts","../../anvl/src/object/entries.ts","../../anvl/src/object/mapObject.ts","../../anvl/src/nullish/index.ts","../../anvl/src/refinement/index.ts","../../anvl/src/join/get-related-ids.ts","../../anvl/src/join/make-json-interface.ts","../../anvl/src/join/relation-contents.ts","../../anvl/src/join/relation-record.ts","../../anvl/src/join/remove-relation.ts","../../anvl/src/object/index.ts","../../anvl/src/string/split.ts","../../anvl/src/join/set-relation.ts","../../anvl/src/join/index.ts","../src/internal/transaction-internal.ts","../src/internal/families-internal.ts","../../anvl/src/json/index.ts","../src/internal/meta/index.ts","../src/internal/meta/meta-state.ts","../src/internal/meta/attach-meta.ts","../src/internal/selector-internal.ts","../src/internal/set.ts","../src/internal/subscribe-internal.ts","../src/internal/time-travel-internal.ts","../src/internal/timeline-internal.ts","../src/atom.ts","../src/logger.ts","../src/selector.ts","../src/silo.ts","../src/subscribe.ts","../src/timeline.ts","../src/transaction.ts","../src/index.ts"],"sourcesContent":["export const capitalize = (str: string): string =>\n str[0].toUpperCase() + str.slice(1)\n","export * from \"./atom-internal\"\nexport * from \"./families-internal\"\nexport * from \"./get\"\nexport * from \"./is-default\"\nexport * as META from \"./meta\"\nexport * from \"./operation\"\nexport * from \"./selector-internal\"\nexport * from \"./set\"\nexport * from \"./store\"\nexport * from \"./subscribe-internal\"\nexport * from \"./time-travel-internal\"\nexport * from \"./timeline-internal\"\nexport * from \"./transaction-internal\"\n","import HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport { deposit } from \"./get\"\nimport { markAtomAsDefault } from \"./is-default\"\nimport { cacheValue, hasKeyBeenUsed } from \"./operation\"\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\nimport { target } from \"./transaction-internal\"\nimport type { AtomToken, FamilyMetadata, UpdateHandler } from \"..\"\nimport { setState, subscribe } from \"..\"\nimport type { AtomOptions } from \"../atom\"\n\nexport type Atom<T> = {\n key: string\n type: `atom`\n family?: FamilyMetadata\n subject: Rx.Subject<{ newValue: T; oldValue: T }>\n default: T\n}\n\nexport function atom__INTERNAL<T>(\n options: AtomOptions<T>,\n family?: FamilyMetadata,\n store: Store = IMPLICIT.STORE\n): AtomToken<T> {\n const core = target(store)\n if (hasKeyBeenUsed(options.key, store)) {\n store.config.logger?.error?.(\n `Key \"${options.key}\" already exists in the store.`\n )\n return deposit(core.atoms.get(options.key))\n }\n const subject = new Rx.Subject<{ newValue: T; oldValue: T }>()\n const newAtom = {\n ...options,\n subject,\n type: `atom`,\n ...(family && { family }),\n } as const\n const initialValue =\n options.default instanceof Function ? options.default() : options.default\n core.atoms = HAMT.set(newAtom.key, newAtom, core.atoms)\n markAtomAsDefault(options.key, store)\n cacheValue(options.key, initialValue, store)\n const token = deposit(newAtom)\n options.effects?.forEach((effect) =>\n effect({\n setSelf: (next) => setState(token, next, store),\n onSet: (handle: UpdateHandler<T>) => subscribe(token, handle, store),\n })\n )\n store.subject.atomCreation.next(token)\n return token as AtomToken<T>\n}\n","import HAMT from \"hamt_plus\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { Atom, ReadonlySelector, Selector, Store } from \".\"\nimport { target, isValueCached, readCachedValue, IMPLICIT } from \".\"\nimport type {\n AtomToken,\n ReadonlySelectorToken,\n SelectorToken,\n StateToken,\n Transaction,\n TransactionToken,\n} from \"..\"\n\nexport const computeSelectorState = <T>(\n selector: ReadonlySelector<T> | Selector<T>\n): T => selector.get()\n\nexport function lookup(\n key: string,\n store: Store\n): AtomToken<unknown> | ReadonlySelectorToken<unknown> | SelectorToken<unknown> {\n const core = target(store)\n const type = HAMT.has(key, core.atoms)\n ? `atom`\n : HAMT.has(key, core.selectors)\n ? `selector`\n : `readonly_selector`\n return { key, type } as any\n}\n\nexport function withdraw<T>(token: AtomToken<T>, store: Store): Atom<T> | null\nexport function withdraw<T>(\n token: SelectorToken<T>,\n store: Store\n): Selector<T> | null\nexport function withdraw<T>(\n token: StateToken<T>,\n store: Store\n): Atom<T> | Selector<T> | null\nexport function withdraw<T>(\n token: ReadonlySelectorToken<T>,\n store: Store\n): ReadonlySelector<T> | null\nexport function withdraw<T>(\n token: TransactionToken<T>,\n store: Store\n): Transaction<T extends ƒn ? T : never> | null\nexport function withdraw<T>(\n token: ReadonlySelectorToken<T> | StateToken<T>,\n store: Store\n): Atom<T> | ReadonlySelector<T> | Selector<T> | null\nexport function withdraw<T>(\n token: ReadonlySelectorToken<T> | StateToken<T> | TransactionToken<T>,\n store: Store\n):\n | Atom<T>\n | ReadonlySelector<T>\n | Selector<T>\n | Transaction<T extends ƒn ? T : never>\n | null {\n const core = target(store)\n return (\n HAMT.get(token.key, core.atoms) ??\n HAMT.get(token.key, core.selectors) ??\n HAMT.get(token.key, core.readonlySelectors) ??\n HAMT.get(token.key, core.transactions) ??\n null\n )\n}\n\nexport function deposit<T>(state: Atom<T>): AtomToken<T>\nexport function deposit<T>(state: Selector<T>): SelectorToken<T>\nexport function deposit<T>(state: Atom<T> | Selector<T>): StateToken<T>\nexport function deposit<T>(state: ReadonlySelector<T>): ReadonlySelectorToken<T>\nexport function deposit<T>(\n state: Transaction<T extends ƒn ? T : never>\n): TransactionToken<T>\nexport function deposit<T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>\n): ReadonlySelectorToken<T> | StateToken<T>\nexport function deposit<T>(\n state:\n | Atom<T>\n | ReadonlySelector<T>\n | Selector<T>\n | Transaction<T extends ƒn ? T : never>\n):\n | AtomToken<T>\n | ReadonlySelectorToken<T>\n | SelectorToken<T>\n | TransactionToken<T> {\n return {\n key: state.key,\n type: state.type,\n ...(`family` in state && { family: state.family }),\n } as any\n}\n\nexport const getState__INTERNAL = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n store: Store = IMPLICIT.STORE\n): T => {\n if (isValueCached(state.key, store)) {\n store.config.logger?.info(`>> read \"${state.key}\"`)\n return readCachedValue(state.key, store)\n }\n if (state.type !== `atom`) {\n store.config.logger?.info(`-> calc \"${state.key}\"`)\n return computeSelectorState(state)\n }\n store.config.logger?.error(\n `Attempted to get atom \"${state.key}\", which was never initialized in store \"${store.config.name}\".`\n )\n return state.default\n}\n","import type { Store } from \".\"\nimport { target, IMPLICIT, traceAllSelectorAtoms } from \".\"\n\nexport const isAtomDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => {\n const core = target(store)\n return core.atomsThatAreDefault.has(key)\n}\n\nexport const markAtomAsDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.atomsThatAreDefault = new Set(core.atomsThatAreDefault).add(key)\n}\n\nexport const markAtomAsNotDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.atomsThatAreDefault = new Set(target(store).atomsThatAreDefault)\n core.atomsThatAreDefault.delete(key)\n}\n\nexport const isSelectorDefault = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => {\n const roots = traceAllSelectorAtoms(key, store)\n return roots.every((root) => isAtomDefault(root.key, store))\n}\n","import type { Hamt } from \"hamt_plus\"\nimport HAMT from \"hamt_plus\"\n\nimport type { Atom, ReadonlySelector, Selector } from \".\"\nimport { target } from \".\"\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\nimport type { StateToken } from \"..\"\n\nexport type OperationProgress =\n | {\n open: false\n }\n | {\n open: true\n done: Set<string>\n prev: Hamt<any, string>\n time: number\n token: StateToken<any>\n }\n\nexport const openOperation = (token: StateToken<any>, store: Store): void => {\n const core = target(store)\n if (core.operation.open) {\n store.config.logger?.error(\n `❌ failed to setState to \"${token.key}\" during a setState for \"${core.operation.token.key}\"`\n )\n throw Symbol(`violation`)\n }\n core.operation = {\n open: true,\n done: new Set(),\n prev: store.valueMap,\n time: Date.now(),\n token,\n }\n store.config.logger?.info(`⭕ operation start from \"${token.key}\"`)\n}\nexport const closeOperation = (store: Store): void => {\n const core = target(store)\n core.operation = { open: false }\n store.config.logger?.info(`🔴 operation done`)\n}\n\nexport const isDone = (key: string, store: Store = IMPLICIT.STORE): boolean => {\n const core = target(store)\n if (!core.operation.open) {\n store.config.logger?.warn(\n `isDone called outside of an operation. This is probably a bug.`\n )\n return true\n }\n return core.operation.done.has(key)\n}\nexport const markDone = (key: string, store: Store = IMPLICIT.STORE): void => {\n const core = target(store)\n if (!core.operation.open) {\n store.config.logger?.warn(\n `markDone called outside of an operation. This is probably a bug.`\n )\n return\n }\n core.operation.done.add(key)\n}\nexport const recallState = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n store: Store = IMPLICIT.STORE\n): T => {\n const core = target(store)\n if (!core.operation.open) {\n store.config.logger?.warn(\n `recall called outside of an operation. This is probably a bug.`\n )\n return HAMT.get(state.key, core.valueMap)\n }\n return HAMT.get(state.key, core.operation.prev)\n}\n\nexport const cacheValue = (\n key: string,\n value: unknown,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.valueMap = HAMT.set(key, value, core.valueMap)\n}\n\nexport const evictCachedValue = (\n key: string,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.valueMap = HAMT.remove(key, core.valueMap)\n}\nexport const readCachedValue = <T>(\n key: string,\n store: Store = IMPLICIT.STORE\n): T => HAMT.get(key, target(store).valueMap)\n\nexport const isValueCached = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => HAMT.has(key, target(store).valueMap)\n\nexport const storeAtom = (\n atom: Atom<any>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.atoms = HAMT.set(atom.key, atom, core.atoms)\n}\n\nexport const storeSelector = (\n selector: Selector<any>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.selectors = HAMT.set(selector.key, selector, core.selectors)\n}\n\nexport const storeReadonlySelector = (\n selector: ReadonlySelector<any>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n core.readonlySelectors = HAMT.set(\n selector.key,\n selector,\n core.readonlySelectors\n )\n}\n\nexport const hasKeyBeenUsed = (\n key: string,\n store: Store = IMPLICIT.STORE\n): boolean => {\n const core = target(store)\n return (\n HAMT.has(key, core.atoms) ||\n HAMT.has(key, core.selectors) ||\n HAMT.has(key, core.readonlySelectors)\n )\n}\n","import type { Hamt } from \"hamt_plus\"\nimport HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\nimport { doNothing } from \"~/packages/anvl/src/function\"\nimport { Join } from \"~/packages/anvl/src/join\"\n\nimport type {\n Atom,\n OperationProgress,\n ReadonlySelector,\n Selector,\n TransactionStatus,\n Timeline,\n TimelineData,\n} from \".\"\nimport type {\n AtomToken,\n Logger,\n ReadonlySelectorToken,\n SelectorToken,\n TimelineToken,\n Transaction,\n TransactionToken,\n} from \"..\"\n\nexport type StoreCore = Pick<\n Store,\n | `atoms`\n | `atomsThatAreDefault`\n | `operation`\n | `readonlySelectors`\n | `selectorAtoms`\n | `selectorGraph`\n | `selectors`\n | `timelineAtoms`\n | `timelines`\n | `transactions`\n | `valueMap`\n>\n\nexport interface Store {\n atoms: Hamt<Atom<any>, string>\n atomsThatAreDefault: Set<string>\n readonlySelectors: Hamt<ReadonlySelector<any>, string>\n selectorAtoms: Join<null, `selectorKey`, `atomKey`>\n selectorGraph: Join<{ source: string }>\n selectors: Hamt<Selector<any>, string>\n timelines: Hamt<Timeline, string>\n timelineAtoms: Join<null, `timelineKey`, `atomKey`>\n timelineStore: Hamt<TimelineData, string>\n transactions: Hamt<Transaction<any>, string>\n valueMap: Hamt<any, string>\n\n subject: {\n atomCreation: Rx.Subject<AtomToken<unknown>>\n selectorCreation: Rx.Subject<\n ReadonlySelectorToken<unknown> | SelectorToken<unknown>\n >\n transactionCreation: Rx.Subject<TransactionToken<unknown>>\n timelineCreation: Rx.Subject<TimelineToken>\n }\n\n operation: OperationProgress\n transactionStatus: TransactionStatus<ƒn>\n config: {\n name: string\n logger: Logger | null\n logger__INTERNAL: Logger\n }\n}\n\nexport const createStore = (name: string): Store =>\n ({\n atoms: HAMT.make<Atom<any>, string>(),\n atomsThatAreDefault: new Set(),\n readonlySelectors: HAMT.make<ReadonlySelector<any>, string>(),\n selectorAtoms: new Join({ relationType: `n:n` })\n .from(`selectorKey`)\n .to(`atomKey`),\n selectorGraph: new Join({ relationType: `n:n` }),\n selectors: HAMT.make<Selector<any>, string>(),\n timelines: HAMT.make<Timeline, string>(),\n timelineAtoms: new Join({ relationType: `1:n` })\n .from(`timelineKey`)\n .to(`atomKey`),\n timelineStore: HAMT.make<TimelineData, string>(),\n transactions: HAMT.make<Transaction<any>, string>(),\n valueMap: HAMT.make<any, string>(),\n\n subject: {\n atomCreation: new Rx.Subject(),\n selectorCreation: new Rx.Subject(),\n transactionCreation: new Rx.Subject(),\n timelineCreation: new Rx.Subject(),\n },\n\n operation: {\n open: false,\n },\n transactionStatus: {\n phase: `idle`,\n },\n config: {\n name,\n logger: {\n ...console,\n info: doNothing,\n },\n logger__INTERNAL: console,\n },\n } satisfies Store)\n\nexport const IMPLICIT = {\n STORE_INTERNAL: undefined as Store | undefined,\n get STORE(): Store {\n return this.STORE_INTERNAL ?? (this.STORE_INTERNAL = createStore(`DEFAULT`))\n },\n}\n\nexport const clearStore = (store: Store = IMPLICIT.STORE): void => {\n const { config } = store\n Object.assign(store, createStore(config.name))\n store.config = config\n}\n","import type { Refinement } from \"fp-ts/Refinement\"\nexport * from \"./curry\"\n\nexport type ƒn = (...parameters: any[]) => any\n\nexport const doNothing = (): void => undefined\n\n/* eslint-disable prettier/prettier */\nexport const become =\n <T>\n (nextVersionOfThing: Modifier<T> | T) =>\n (originalThing: T | (() => T)): T =>\n nextVersionOfThing instanceof Function\n ? nextVersionOfThing(originalThing instanceof Function \n ? originalThing() \n : originalThing\n )\n : nextVersionOfThing\n/* eslint-enable prettier/prettier */\n\nexport type Applicator<X, Y> = (next: Modifier<X> | X) => Modifier<Y>\nexport type Modifier<T> = (thing: T) => T\n\nexport type OneOrMany<T> = T | T[]\n\nexport const isModifier =\n <T>(validate: Refinement<unknown, T>) =>\n (sample: T): Refinement<unknown, Modifier<T>> => {\n const sampleIsValid = validate(sample)\n if (!sampleIsValid) {\n throw new Error(`Invalid test case: JSON.stringify(${sample})`)\n }\n return (input: unknown): input is Modifier<T> => {\n if (typeof input !== `function`) return false\n const testResult = input(sample)\n return validate(testResult)\n }\n }\n\nexport const pass =\n <Params extends ReadonlyArray<any>, Out>(...params: Params) =>\n (fn: (...params: Params) => Out): Out =>\n fn(...params)\n\nexport const typeOf =\n <T>(input: unknown) =>\n (isType: Refinement<unknown, T>): boolean =>\n isType(input)\n\nexport const raiseError = (message: string): never => {\n throw new Error(message)\n}\n\nexport type Encapsulate<T extends (...args: any[]) => any> = (\n ...args: Parameters<T>\n) => void\n\nexport const attempt = (fn: () => void): boolean => {\n try {\n fn()\n return true\n } catch (_) {\n return false\n }\n}\n","import { isString } from \"fp-ts/string\"\n\nimport type { Json, JsonObj } from \"~/packages/anvl/src/json\"\n\nimport { isArray } from \"../array\"\nimport { hasExactProperties, isRecord } from \"../object/refinement\"\nimport { isLiteral } from \"../refinement\"\n\nexport const RELATION_TYPES = [`1:1`, `1:n`, `n:n`] as const\n\nexport type RelationType = (typeof RELATION_TYPES)[number]\n\nexport const isRelationType = (x: unknown): x is RelationType =>\n RELATION_TYPES.includes(x as RelationType)\n\nexport type RelationData<\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n> = {\n contents: JsonObj<string, CONTENT>\n relations: JsonObj<string, string[]>\n relationType: RelationType\n a: A\n b: B\n}\n\nexport const EMPTY_RELATION_DATA: RelationData = {\n contents: {},\n relations: {},\n relationType: `n:n`,\n a: `from`,\n b: `to`,\n}\n\nexport type IsRelationDataOptions<\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n> = {\n from?: A\n to?: B\n isContent?: (json: Json) => json is CONTENT\n}\nexport const isRelationData =\n <\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n >({\n from: a = `from` as A,\n to: b = `to` as B,\n isContent,\n }: IsRelationDataOptions<CONTENT, A, B> = {}) =>\n (input: unknown): input is RelationData<CONTENT, A, B> => {\n return hasExactProperties<RelationData<CONTENT, A, B>>({\n contents: isContent\n ? isRecord(isString, isContent)\n : hasExactProperties({}),\n relations: isRecord(isString, isArray(isString)),\n relationType: isRelationType,\n a: isLiteral(a),\n b: isLiteral(b),\n })(input)\n }\n","export type VennCheck = (\n items: ReadonlyArray<unknown> | unknown[]\n) => (array: ReadonlyArray<unknown> | unknown[]) => boolean\n\nexport type VennTally = (\n items: ReadonlyArray<unknown> | unknown[]\n) => (array: ReadonlyArray<unknown> | unknown[]) => number\n\nexport const includesAll: VennCheck = (items) => (array) => {\n for (const item of items) {\n if (!array.includes(item)) return false\n }\n return true\n}\n\nexport const includesAny: VennCheck = (items) => (array) => {\n for (const item of items) {\n if (array.includes(item)) return true\n }\n return false\n}\n\nexport const excludesAll: VennCheck = (items) => (array) =>\n !includesAny(items)(array)\n\nexport const excludesAny: VennCheck = (items) => (array) =>\n !includesAll(items)(array)\n\nexport const comprises: VennCheck = (items) => (array) =>\n includesAll(items)(array) && includesAll(array)(items)\n\nexport const overlaps: VennTally = (items) => (array) => {\n let incidences = 0\n for (const item of items) {\n if (array.includes(item)) incidences += 1\n }\n return incidences\n}\n","export * from \"./match\"\nexport * from \"./venn\"\n\nimport type { Refinement } from \"fp-ts/Refinement\"\n\nexport const each =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): T[] =>\n isType(input) ? [input] : Array.isArray(input) ? input.filter(isType) : []\n\nexport const lastOf = <T>(input: ReadonlyArray<T>): T | undefined =>\n input[input.length - 1]\n\nexport const isArray =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): input is T[] =>\n Array.isArray(input) && input.every((item) => isType(item))\n\nexport const at =\n <T>(index: number) =>\n (input: T[]): T | undefined =>\n input.at(index)\n\nexport const content =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): input is T | T[] =>\n isType(input) || isArray(isType)(input)\n\nexport const join =\n (separator?: string) =>\n (a: string[]): string =>\n a.join(separator)\n\nexport const map =\n <I, O>(f: (value: I, index: number, array: I[]) => O) =>\n (a: I[]): O[] =>\n a.map(f)\n\nexport const reduce =\n <I, O>(f: (acc: O, value: I, index: number, array: I[]) => O, initial: O) =>\n (a: I[]): O =>\n a.reduce(f, initial)\n\nexport const slice =\n (start: number, end?: number) =>\n <I>(a: I[]): I[] =>\n a.slice(start, end)\n\nexport const using =\n <I, O>(a: I[]) =>\n (f: (acc: O, value: I, index: number, array: I[]) => O) =>\n (initial: O): O =>\n a.reduce(f, initial)\n\nexport const reduceRight =\n <I, O>(f: (acc: O, value: I, index: number, array: I[]) => O, initial: O) =>\n (a: I[]): O =>\n a.reduceRight(f, initial)\n\nexport const reverse = <I>(a: I[]): I[] => a.reverse()\n\nexport const sort =\n <I>(a: I[]) =>\n (f?: (x: I, y: I) => number): I[] =>\n f ? a.sort(f) : a.sort()\n\nexport const sortBy =\n <I>(f: (value: I) => number) =>\n (a: I[]): I[] =>\n a.sort((x, y) => f(x) - f(y))\n\nexport const sortByDesc =\n <I>(f: (value: I) => number) =>\n (a: I[]): I[] =>\n a.sort((x, y) => f(y) - f(x))\n\nexport const every =\n <I>(f: (value: I, index: number, array: I[]) => boolean = Boolean) =>\n (a: I[]): boolean =>\n a.every(f)\n\nexport const allTrue = every((x: boolean) => x === true)\n\nexport const addTo =\n <I>(a: I[]) =>\n (x: I): I[] =>\n a.includes(x) ? a : [...a, x]\n\nexport const isEmptyArray = (input: unknown): input is [] =>\n Array.isArray(input) && input.length === 0\n\nexport const isOneOf =\n <T>(...args: ReadonlyArray<T>) =>\n (input: unknown): input is T =>\n args.includes(input as T)\n\nexport const filter =\n <I, O extends I>(f: (value: I, index: number, array: I[]) => value is O) =>\n (a: I[]): O[] =>\n a.filter(f)\n","import { pipe } from \"fp-ts/function\"\nimport type { Refinement } from \"fp-ts/Refinement\"\n\nimport { access } from \"./access\"\nimport { recordToEntries } from \"./entries\"\nimport { mob } from \"./mapObject\"\nimport { allTrue, every } from \"../array\"\nimport { pass } from \"../function\"\nimport { ifNullish } from \"../nullish\"\n\nexport type PlainObject = Record<keyof any, unknown>\nexport type EmptyObject = Record<keyof any, never>\n\nexport const isNonNullObject = (input: unknown): input is object =>\n typeof input === `object` && input !== null\n\nexport const isPlainObject = (input: unknown): input is PlainObject =>\n isNonNullObject(input) && Object.getPrototypeOf(input) === Object.prototype\n\nexport const isEmptyObject = (input: unknown): input is EmptyObject =>\n isPlainObject(input) && Object.keys(input).length === 0\n\n/* prettier-ignore */\nexport const isRecord = <\n KEY extends keyof any, \n VAL\n >( \n isKey: Refinement<keyof any, KEY>,\n isValue: Refinement<unknown, VAL>\n ) =>\n (input: unknown): input is Record<KEY, VAL> =>\n isPlainObject(input) &&\n Object.entries(input).every(([k, v]) => isKey(k) && isValue(v))\n/* prettier-ignore-end */\n\nexport type HasPropertiesOptions = {\n readonly allowExtraProperties?: boolean\n}\nexport const hasProperties = <OBJ extends object>(\n isValue: {\n [K in keyof OBJ]: Refinement<unknown, OBJ[K]>\n },\n options: HasPropertiesOptions = { allowExtraProperties: false }\n): Refinement<unknown, OBJ> => {\n const name = `{${recordToEntries(\n isValue as Record<keyof any, Refinement<any, any>>\n )\n .map(([k, v]) => String(k) + `:` + v.name)\n .join(`,`)}}`\n\n const _ = {\n [name]: (input: unknown): input is OBJ =>\n isPlainObject(input) &&\n pipe(\n isValue,\n Object.entries,\n every(([key, val]) => key in input || val(undefined))\n ) &&\n pipe(\n input,\n mob((val, key) =>\n pipe(\n isValue,\n access(key),\n ifNullish(() => options.allowExtraProperties),\n pass(val)\n )\n ),\n Object.values,\n allTrue\n ),\n }\n return _[name]\n}\n\nexport const doesExtend =\n /* alias for hasExactProperties with allowExtraProperties */\n <OBJ extends object>(isValue: {\n [K in keyof OBJ]: Refinement<unknown, OBJ[K]>\n }): Refinement<unknown, OBJ> =>\n hasProperties(isValue, { allowExtraProperties: true })\n\nexport const hasExactProperties =\n /* alias for hasProperties without allowExtraProperties */\n <OBJ extends object>(isValue: {\n [K in keyof OBJ]: Refinement<unknown, OBJ[K]>\n }): Refinement<unknown, OBJ> =>\n hasProperties(isValue, { allowExtraProperties: false })\n","export const key =\n <T extends object>(k: keyof T) =>\n (obj: Exclude<object, null>): unknown =>\n (obj as Record<keyof any, any>)[k]\n\nexport const access = <V, T extends Record<keyof any, V>>(\n k: keyof any\n): {\n (obj: T): T[keyof T] | undefined\n in: (obj: T) => T[keyof T] | undefined\n} =>\n Object.assign((obj: T) => obj[k as keyof T], {\n in: (obj: T) => obj[k as keyof T],\n })\n","export type Entries<K extends keyof any, V> = [key: K, value: V][]\n\nexport const recordToEntries = <K extends keyof any, V>(\n obj: Record<K, V>\n): Entries<K, V> => Object.entries(obj) as Entries<K, V>\n\nexport const entriesToRecord = <K extends keyof any, V>(\n entries: Entries<K, V>\n): Record<K, V> => Object.fromEntries(entries) as Record<K, V>\n","import { pipe } from \"fp-ts/function\"\n\nimport { entriesToRecord, recordToEntries } from \"./entries\"\nimport { map } from \"../array\"\n\nexport const mapObject = <K extends keyof any, I, O>(\n obj: Record<K, I>,\n fn: (val: I, key: K) => O\n): Record<K, O> =>\n pipe(\n obj,\n recordToEntries,\n map(([key, val]) => [key, fn(val, key)] as const),\n entriesToRecord\n )\n\nexport const mob =\n <K extends keyof any, I, O>(fn: (val: I, key: K) => O) =>\n (obj: Record<K, I>): Record<K, O> =>\n mapObject(obj, fn)\n","import type { Refinement } from \"fp-ts/Refinement\"\n\nexport const isUndefined = (input: unknown): input is undefined =>\n input === undefined\n\nexport const ifDefined = <T>(\n validate: Refinement<unknown, T>\n): Refinement<unknown, T | undefined> =>\n ((input) => isUndefined(input) || validate(input)) as Refinement<\n unknown,\n T | undefined\n >\n\nexport const isNull = (input: unknown): input is null => input === null\n\nexport const isNullish = (input: unknown): input is null | undefined =>\n isUndefined(input) || isNull(input)\n\nexport type NullSafeUnion<Base, Extension> = Extension extends null\n ? Base\n : Base & Extension\n\nexport type NullSafeRest<MaybeArg> = MaybeArg extends null\n ? [] | [undefined]\n : [MaybeArg]\n\nexport interface Discard {\n readonly _discard: unique symbol\n}\n\nexport const ifNullish =\n <X, Y>(alt: Y) =>\n (input: X): Exclude<X, null | undefined> | Y =>\n (input ?? alt) as Exclude<X, null | undefined> | Y\n","import type { Refinement } from \"fp-ts/Refinement\"\n\nexport * from \"./refined\"\n\nexport const canExist = (_: unknown): _ is unknown => true\nexport const cannotExist = (_: unknown): _ is never => false\n\nexport const isLiteral =\n <T extends boolean | number | string>(value: T): Refinement<unknown, T> =>\n (input: unknown): input is T =>\n input === value\n\nexport const isWithin =\n <Options extends ReadonlyArray<any>>(args: Options) =>\n (input: unknown): input is Options[number] =>\n args.includes(input as Options[number])\n\nexport const ensure =\n <T>(isType: Refinement<unknown, T>) =>\n (input: unknown): T => {\n if (!isType(input)) {\n throw new TypeError(`Expected ${input} to be of type ${isType.name}`)\n }\n return input as T\n }\n\nexport const ensureAgainst =\n <A, B>(isType: Refinement<unknown, A>) =>\n (input: A | B): Exclude<A | B, A> => {\n if (isType(input)) {\n throw new TypeError(`Expected ${input} to not be of type ${isType.name}`)\n }\n return input as Exclude<A | B, A>\n }\n\nexport type ExtendsSome<A, B> = Refinement<unknown, A | B> & {\n or: <C>(isType: Refinement<unknown, C>) => ExtendsSome<unknown, A | B | C>\n}\nexport const couldBe = <A>(\n isTypeA: Refinement<unknown, A>,\n logging = false,\n refinements: Refinement<unknown, any>[] = [isTypeA]\n): {\n (input: unknown): input is A\n or: <B>(isTypeB: Refinement<unknown, B>) => ExtendsSome<A, B>\n} => {\n const name = `(${refinements.map((r) => r.name || `anon`).join(` | `)})`\n const _ = {\n [name]: (input: unknown): input is A =>\n refinements.some(\n (refinement) => (\n logging &&\n console.log(\n refinements.map((r) => r.name || `anon`).join(` | `),\n `>`,\n refinement.name ?? `anon`,\n `:`,\n refinement(input)\n ),\n refinement(input)\n )\n ),\n }\n const checkTypes: {\n (input: unknown): input is A\n or: <B>(isTypeB: Refinement<unknown, B>) => ExtendsSome<A, B>\n } = Object.assign(_[name], {\n or: <B>(isTypeB: Refinement<unknown, B>): ExtendsSome<A, B> =>\n couldBe(isTypeB, logging, [...refinements, isTypeB]),\n })\n return checkTypes\n}\n\nexport const isUnion = couldBe(cannotExist)\n\nexport type ExtendsAll<A, B> = Refinement<unknown, A & B> & {\n and: <C>(isType: Refinement<unknown, C>) => ExtendsAll<A & B, C>\n}\n\nexport const mustBe = <A>(\n isTypeA: Refinement<unknown, A>,\n logging = false,\n refinements: Refinement<unknown, any>[] = [isTypeA]\n): {\n (input: unknown): input is A\n and: <B>(isTypeB: Refinement<unknown, B>) => ExtendsAll<A, B>\n} => {\n const name = `(${refinements.map((r) => r.name || `anon`).join(` & `)})`\n const _ = {\n [name]: (input: unknown): input is A =>\n refinements.every(\n (refinement) => (\n logging &&\n console.log(\n refinements.map((r) => r.name || `anon`).join(` & `),\n `>`,\n refinement.name || `anon`,\n `:`,\n refinement(input)\n ),\n refinement(input)\n )\n ),\n }\n const checkTypes: {\n (input: unknown): input is A\n and: <B>(isTypeB: Refinement<unknown, B>) => ExtendsAll<A, B>\n } = Object.assign(_[name], {\n and: <B>(isTypeB: Refinement<unknown, B>): ExtendsAll<A, B> =>\n mustBe(isTypeB, logging, [...refinements, isTypeB]) as ExtendsAll<A, B>,\n })\n return checkTypes\n}\n\nexport const isIntersection = mustBe(canExist)\n\nexport const isClass =\n <ClassSignature extends abstract new (...args: any) => any>(\n C: ClassSignature\n ) =>\n (input: unknown): input is InstanceType<ClassSignature> =>\n input instanceof C\n","import type { RelationData } from \"./core-relation-data\"\nimport type { JsonObj } from \"../json\"\n\nexport const getRelatedIds = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): string[] => relationMap.relations[id] ?? []\n\nexport const getRelatedId = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): string | undefined => {\n const relations = getRelatedIds(relationMap, id)\n if (relations.length > 1) {\n console.warn(\n `entry with id ${id} was not expected to have multiple relations`\n )\n }\n return relations[0]\n}\n","import type { Json, JsonInterface, JsonObj } from \"~/packages/anvl/src/json\"\n\nimport { Join } from \".\"\nimport type { IsRelationDataOptions, RelationData } from \"./core-relation-data\"\n\nexport const makeJsonInterface = <\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n>(\n join: Join<CONTENT, A, B>,\n ...params: CONTENT extends null ? [] : [(x: Json) => x is CONTENT]\n): JsonInterface<Join<CONTENT, A, B>, RelationData<CONTENT, A, B>> => {\n const isContent = params[0] as (x: Json) => x is CONTENT\n const { a, b } = join\n const options: IsRelationDataOptions<CONTENT, A, B> = {\n from: a,\n to: b,\n isContent,\n }\n return {\n toJson: (join) => join.toJSON(),\n fromJson: (json) => Join.fromJSON(json, options),\n }\n}\n","import { pipe } from \"fp-ts/function\"\n\nimport type { Identified } from \"~/packages/anvl/src/id/identified\"\nimport { isEmptyObject } from \"~/packages/anvl/src/object/refinement\"\n\nimport type { RelationData } from \"./core-relation-data\"\nimport { getRelatedIds } from \"./get-related-ids\"\nimport { getRelationEntries } from \"./relation-record\"\nimport { removeRelation } from \"./remove-relation\"\nimport { setRelationWithContent } from \"./set-relation\"\nimport type { JsonObj } from \"../json\"\nimport type { NullSafeRest } from \"../nullish\"\n\nexport const makeContentId = (idA: string, idB: string): string =>\n [idA, idB].sort().join(`/`)\n\nexport const getContent = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string\n): CONTENT | undefined => relationMap.contents[makeContentId(idA, idB)]\n\nexport const setContent = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n map: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string,\n content: CONTENT\n): RelationData<CONTENT, A, B> => ({\n ...map,\n contents: {\n ...map.contents,\n [makeContentId(idA, idB)]: content,\n },\n})\n\nexport const getRelations = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): (CONTENT extends null ? Identified : CONTENT & Identified)[] =>\n getRelationEntries(relationMap, id).map(\n ([id, content]) =>\n ({\n id,\n ...content,\n } as CONTENT extends null ? Identified : CONTENT & Identified)\n )\n\nexport const setRelations = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n subject: { [from in A]: string } | { [to in B]: string },\n relations: (CONTENT extends null ? Identified : CONTENT & Identified)[]\n): RelationData<CONTENT, A, B> => {\n const idA: string | undefined = (subject as { [from in A]: string })[current.a]\n const idB: string | undefined = (subject as { [to in B]: string })[current.b]\n return pipe(\n current,\n (relationData) => {\n const relatedIds = getRelatedIds(current, idA)\n const removedIds = relatedIds.filter(\n (id) => !relations.some((r) => r.id === id)\n )\n let step = relationData\n for (const id of removedIds) {\n const remove = {\n [current.a]: idA ?? id,\n [current.b]: idB ?? id,\n } as Record<A | B, string>\n step = removeRelation(step, remove)\n }\n return step\n },\n (relationData) => {\n let step = relationData\n for (const { id, ...rest } of relations) {\n const content = isEmptyObject(rest) ? undefined : rest\n step = setRelationWithContent(\n step,\n { [current.a]: idA ?? id, [current.b]: idB ?? id } as Record<\n A | B,\n string\n >,\n // @ts-expect-error hacky\n content as NullSafeRest<CONTENT>\n )\n }\n return step\n },\n (relationData) => {\n const newlyOrderedIds = relations.map((r) => r.id)\n return {\n ...relationData,\n relations: {\n ...relationData.relations,\n [idA ?? idB]: newlyOrderedIds,\n },\n }\n }\n )\n}\n","import type { RelationData } from \"./core-relation-data\"\nimport { getRelatedIds } from \"./get-related-ids\"\nimport { getContent } from \"./relation-contents\"\nimport type { JsonObj } from \"../json\"\n\nexport const getRelationEntries = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n idA: string\n): [string, CONTENT][] =>\n getRelatedIds(relationMap, idA).map((idB) => [\n idB,\n getContent(relationMap, idA, idB) as CONTENT,\n ])\n\nexport const getRelationRecord = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n relationMap: RelationData<CONTENT, A, B>,\n id: string\n): Record<string, CONTENT> =>\n Object.fromEntries(getRelationEntries(relationMap, id))\n","import { pipe } from \"fp-ts/function\"\nimport { isString } from \"fp-ts/string\"\n\nimport type { RelationData } from \"./core-relation-data\"\nimport { isEmptyArray, isOneOf, map } from \"../array\"\nimport { comprises } from \"../array/venn\"\nimport type { JsonObj } from \"../json\"\nimport type { RequireAtLeastOne } from \"../object\"\nimport { treeShake as removeProperties } from \"../object\"\nimport { entriesToRecord, recordToEntries } from \"../object/entries\"\nimport { split } from \"../string/split\"\n\nexport const removeSpecific = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string\n): RelationData<CONTENT, A, B> => {\n const isIdForRemoval = isOneOf(idA, idB)\n return {\n ...current,\n relations: pipe(\n current.relations,\n recordToEntries,\n map(([id, relations]): [id: string, fewerRelations: string[]] => [\n id,\n isIdForRemoval(id)\n ? relations.filter((relation) => !isIdForRemoval(relation))\n : relations,\n ]),\n entriesToRecord,\n removeProperties(isEmptyArray)\n ),\n contents: pipe(\n current.contents,\n removeProperties(\n (_, key) => isString(key) && pipe(key, split(`/`), comprises([idA, idB]))\n )\n ),\n }\n}\n\nexport const removeAll = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n idToRemove: string\n): RelationData<CONTENT, A, B> => {\n const next: RelationData<CONTENT, A, B> = {\n ...current,\n relations: pipe(\n current.relations,\n recordToEntries,\n map(([id, relations]): [id: string, fewerRelations: string[]] => [\n id,\n relations.filter((relation) => relation !== idToRemove),\n ]),\n entriesToRecord,\n removeProperties((val, key) => key === idToRemove || isEmptyArray(val))\n ),\n contents: pipe(\n current.contents,\n removeProperties(\n (_, key) => isString(key) && key.split(`/`).includes(idToRemove)\n )\n ),\n }\n return next\n}\n\nexport const removeRelation = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n relation: Partial<Record<A | B, string>>\n): RelationData<CONTENT, A, B> => {\n const idA: string | undefined = (relation as { [key in A | B]: string })[\n current.a\n ]\n const idB: string | undefined = (relation as { [key in A | B]: string })[\n current.b\n ]\n return idB ? removeSpecific(current, idA, idB) : removeAll(current, idA)\n}\n","import { flow, pipe } from \"fp-ts/function\"\nimport type { Refinement } from \"fp-ts/lib/Refinement\"\n\nimport { deepMob } from \"./deepMob\"\nimport { entriesToRecord, recordToEntries } from \"./entries\"\nimport { isPlainObject } from \"./refinement\"\nimport { includesAny, map, reduce, filter } from \"../array\"\nimport { isUndefined } from \"../nullish\"\n\nexport * from \"./access\"\nexport * from \"./deepMob\"\nexport * from \"./entries\"\nexport * from \"./mapObject\"\nexport * from \"./modify\"\nexport * from \"./patch\"\nexport * from \"./refinement\"\nexport * from \"./sprawl\"\n\nexport const redact =\n <K extends keyof any>(...args: K[]) =>\n <O extends Record<K, any>>(obj: O): Omit<O, K> =>\n reduce<K, O>((acc, key) => (delete acc[key], acc), obj)(args)\n\nexport type Redacted<Holder, RedactProp extends keyof any> = Omit<\n {\n [K in keyof Holder]: Holder[K] extends (infer Item)[]\n ? Redacted<Item, RedactProp>[]\n : Redacted<Omit<Holder[K], RedactProp>, RedactProp>\n },\n RedactProp\n>\nexport const redactDeep =\n <K extends keyof any>(...args: K[]) =>\n <O extends Record<K, any>>(base: O): Redacted<O, K> =>\n deepMob(base, (node, path) =>\n includesAny(args)(path)\n ? {\n meta: { pathComplete: true },\n }\n : {\n data: isPlainObject(node)\n ? redact(...args)(node as Record<keyof any, any>)\n : node,\n }\n )\n\nexport const select =\n <Key extends keyof any>(...args: Key[]) =>\n <Obj extends object>(\n obj: Obj\n ): {\n // @ts-expect-error fuk u\n [K in keyof Pick<Obj, Key>]: any extends Pick<Obj, Key>[K]\n ? undefined\n : // @ts-expect-error fuk u\n Pick<Obj, Key>[K]\n } =>\n // @ts-expect-error fuk u ts\n reduce<Key, Pick<Obj, Key>>(\n // @ts-expect-error i will fite u\n (acc, key) => (key in obj ? (acc[key] = obj[key as keyof Obj]) : acc, acc),\n // @ts-expect-error fuk u\n {} as Pick<Obj, Key>\n )(args)\n\nexport const treeShake =\n (shouldDiscard: (val: unknown, key: keyof any) => boolean = isUndefined) =>\n <T extends object>(\n obj: T\n ): T extends Record<keyof any, unknown> ? T : Partial<T> => {\n const newObj = {} as T\n const entries = Object.entries(obj) as [keyof T, any][]\n entries.forEach(([key, val]) =>\n !shouldDiscard(val, key) ? (newObj[key] = val) : null\n )\n return newObj as T extends Record<keyof any, unknown> ? T : Partial<T>\n }\n\nexport type KeysExtending<T, V> = keyof {\n [K in keyof T]: T[K] extends V ? K : never\n}\n\nconst a: never | null = null\n\nexport const filterProperties =\n <DiscardVal, DiscardKey extends keyof any>(\n shouldDiscardVal: Refinement<unknown, DiscardVal>,\n shouldDiscardKey: Refinement<unknown, DiscardKey>\n ) =>\n <P extends Record<keyof any, any>>(\n props: P\n ): DiscardVal extends never\n ? DiscardKey extends never\n ? P\n : Omit<P, DiscardKey>\n : Omit<P, DiscardKey | KeysExtending<P, DiscardVal>> =>\n // @ts-expect-error oh well\n pipe(\n props,\n recordToEntries,\n filter(\n (\n entry\n ): entry is [\n Exclude<keyof P, DiscardKey>,\n Exclude<P[keyof P], DiscardVal>\n ] => !shouldDiscardKey(entry[0]) || !shouldDiscardVal(entry[1])\n ),\n entriesToRecord\n )\n\nexport const delve = (\n obj: Record<keyof any, any>,\n path: ReadonlyArray<keyof any>\n): Error | { found: unknown } => {\n const found = path.reduce((acc, key) => acc?.[key], obj)\n return found === undefined ? new Error(`Not found`) : { found }\n}\n\nexport const tweak = (\n obj: Record<keyof any, any>,\n path: ReadonlyArray<keyof any>,\n value: unknown\n): void =>\n path.reduce((acc, key, i) => {\n if (i === path.length - 1) {\n acc[key] = value\n }\n if (acc[key] === undefined) {\n acc[key] = typeof key === `number` ? [] : {}\n }\n return acc[key]\n }, obj)\n\nexport type RequireAtLeastOne<T> = {\n [K in keyof T]-?: Partial<Pick<T, Exclude<keyof T, K>>> & Required<Pick<T, K>>\n}[keyof T]\n","export const split =\n (separator: string) =>\n (str: string): string[] =>\n str.split(separator)\n","import type { RelationData } from \"./core-relation-data\"\nimport { getRelatedId } from \"./get-related-ids\"\nimport { setContent } from \"./relation-contents\"\nimport { addTo, isEmptyArray } from \"../array\"\nimport type { JsonObj } from \"../json\"\nimport type { NullSafeRest } from \"../nullish\"\nimport { treeShake as removeProperties } from \"../object\"\n\nexport const setManyToMany = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n map: RelationData<CONTENT, A, B>,\n idA: string,\n idB: string,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const next = {\n ...map,\n relations: {\n ...map.relations,\n [idA]: addTo(map.relations[idA] ?? [])(idB),\n [idB]: addTo(map.relations[idB] ?? [])(idA),\n },\n }\n const content = rest[0] as CONTENT | undefined\n return content ? setContent(next, idA, idB, content) : next\n}\n\nconst removeEmpties = removeProperties(isEmptyArray)\n\nexport const set1ToMany = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n leaderId: string,\n followerId: string,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const relations = { ...current.relations }\n const prevLeaderId = getRelatedId(current, followerId)\n const next = {\n ...current,\n relations: removeEmpties({\n ...relations,\n ...(prevLeaderId &&\n prevLeaderId !== leaderId && {\n [prevLeaderId]: relations[prevLeaderId].filter(\n (id) => id !== followerId\n ),\n }),\n [followerId]: [leaderId],\n [leaderId]: addTo(relations[leaderId] ?? [])(followerId),\n }),\n }\n const content = rest[0] as CONTENT | undefined\n return content ? setContent(next, leaderId, followerId, content) : next\n}\n\nexport const set1To1 = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n wifeId: string,\n husbandId: string,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const prevWifeId = getRelatedId(current, husbandId)\n const prevHusbandId = getRelatedId(current, wifeId)\n const next = {\n ...current,\n relations: removeEmpties({\n ...current.relations,\n ...(prevWifeId && { [prevWifeId]: [] }),\n ...(prevHusbandId && { [prevHusbandId]: [] }),\n [wifeId]: [husbandId],\n [husbandId]: [wifeId],\n }),\n }\n\n const content = rest[0] as CONTENT | undefined\n return content ? setContent(next, wifeId, husbandId, content) : next\n}\n\nexport const setRelationWithContent = <\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n>(\n current: RelationData<CONTENT, A, B>,\n relation: Record<A | B, string>,\n ...rest: NullSafeRest<CONTENT>\n): RelationData<CONTENT, A, B> => {\n const { [current.a]: idA, [current.b]: idB } = relation\n // console.log({\n // current,\n // relation,\n // idA,\n // idB,\n // })\n switch (current.relationType) {\n case `1:1`:\n return set1To1(current, idA, idB, ...rest)\n case `1:n`:\n return set1ToMany(current, idA, idB, ...rest)\n case `n:n`:\n return setManyToMany(current, idA, idB, ...rest)\n }\n}\n","import type { Refinement } from \"fp-ts/lib/Refinement\"\n\nimport type { Identified } from \"~/packages/anvl/src/id/identified\"\n\nimport type { IsRelationDataOptions, RelationData } from \"./core-relation-data\"\nimport { EMPTY_RELATION_DATA, isRelationData } from \"./core-relation-data\"\nimport { getRelatedId, getRelatedIds } from \"./get-related-ids\"\nimport { makeJsonInterface } from \"./make-json-interface\"\nimport { getContent, getRelations, setRelations } from \"./relation-contents\"\nimport { getRelationEntries, getRelationRecord } from \"./relation-record\"\nimport { removeRelation } from \"./remove-relation\"\nimport { setRelationWithContent } from \"./set-relation\"\nimport type { Json, JsonInterface, JsonObj } from \"../json\"\nimport type { NullSafeRest, NullSafeUnion } from \"../nullish\"\n\nexport class Join<\n CONTENT extends JsonObj | null = null,\n A extends string = `from`,\n B extends string = `to`\n> implements RelationData<CONTENT, A, B>\n{\n public readonly relationType: `1:1` | `1:n` | `n:n`\n public readonly a: A = `from` as A\n public readonly b: B = `to` as B\n public readonly relations: Record<string, string[]>\n public readonly contents: Record<string, CONTENT>\n public constructor(json?: Partial<RelationData<CONTENT, A, B>>) {\n Object.assign(this, {\n ...EMPTY_RELATION_DATA,\n ...json,\n makeJsonInterface: this.makeJsonInterface,\n })\n }\n public toJSON(): RelationData<CONTENT, A, B> {\n return {\n relationType: this.relationType,\n relations: this.relations,\n contents: this.contents,\n a: this.a,\n b: this.b,\n }\n }\n public static fromJSON<\n CONTENT extends JsonObj | null,\n A extends string,\n B extends string\n >(\n json: Json,\n options?: IsRelationDataOptions<CONTENT, A, B>\n ): Join<CONTENT, A, B> {\n const isValid = isRelationData<CONTENT, A, B>(options)(json)\n if (isValid) {\n return new Join<CONTENT, A, B>(json)\n }\n throw new Error(\n `Saved JSON for this Join is invalid: ${JSON.stringify(json)}`\n )\n }\n\n public from<AA extends string>(newA: AA): Join<CONTENT, AA, B> {\n return new Join({ ...this, a: newA })\n }\n\n public to<BB extends string>(newB: BB): Join<CONTENT, A, BB> {\n return new Join({ ...this, b: newB })\n }\n\n public makeJsonInterface = (\n ...params: CONTENT extends null ? [] : [Refinement<unknown, CONTENT>]\n ): JsonInterface<Join<CONTENT, A, B>, RelationData<CONTENT, A, B>> => {\n return makeJsonInterface<CONTENT, A, B>(this, ...params)\n }\n\n public getRelatedId(id: string): string | undefined {\n return getRelatedId(this, id)\n }\n public getRelatedIds(id: string): string[] {\n return getRelatedIds(this, id)\n }\n public getContent(idA: string, idB: string): CONTENT | undefined {\n return getContent(this, idA, idB)\n }\n public getRelationEntries(id: string): [string, CONTENT][] {\n return getRelationEntries(this, id)\n }\n public getRelationRecord(id: string): Record<string, CONTENT> {\n return getRelationRecord(this, id)\n }\n public getRelation(\n id: string\n ): NullSafeUnion<Identified, CONTENT> | undefined {\n return getRelations(this, id)[0]\n }\n public getRelations(id: string): NullSafeUnion<Identified, CONTENT>[] {\n return getRelations(this, id)\n }\n public setRelations(\n subject: { [from in A]: string } | { [to in B]: string },\n relations: NullSafeUnion<Identified, CONTENT>[]\n ): Join<CONTENT, A, B> {\n return new Join(setRelations(this, subject, relations))\n }\n public set(\n relation: { [key in A | B]: string },\n ...rest: NullSafeRest<CONTENT>\n ): Join<CONTENT, A, B> {\n return new Join(setRelationWithContent(this, relation, ...rest))\n }\n public remove(relation: Partial<Record<A | B, string>>): Join<CONTENT, A, B> {\n return new Join(\n removeRelation(this, relation as Partial<Record<A | B, string>>)\n )\n }\n}\n","import HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { Store, StoreCore } from \".\"\nimport { deposit, withdraw, IMPLICIT } from \".\"\nimport { getState, setState } from \"..\"\nimport type {\n AtomToken,\n StateUpdate,\n Transaction,\n TransactionOptions,\n TransactionToken,\n} from \"..\"\n\nexport const TRANSACTION_PHASES = [`idle`, `building`, `applying`] as const\nexport type TransactionPhase = (typeof TRANSACTION_PHASES)[number]\n\nexport type KeyedStateUpdate<T> = StateUpdate<T> & {\n key: string\n}\nexport type TransactionUpdate<ƒ extends ƒn> = {\n key: string\n atomUpdates: KeyedStateUpdate<unknown>[]\n params: Parameters<ƒ>\n output: ReturnType<ƒ>\n}\n\nexport type TransactionUpdateInProgress<ƒ extends ƒn> = TransactionUpdate<ƒ> & {\n phase: `applying` | `building`\n core: StoreCore\n}\nexport type TransactionIdle = {\n phase: `idle`\n}\nexport type TransactionStatus<ƒ extends ƒn> =\n | TransactionIdle\n | TransactionUpdateInProgress<ƒ>\n\nexport const buildTransaction = (\n key: string,\n params: any[],\n store: Store\n): void => {\n store.transactionStatus = {\n key,\n phase: `building`,\n core: {\n atoms: store.atoms,\n atomsThatAreDefault: store.atomsThatAreDefault,\n operation: { open: false },\n readonlySelectors: store.readonlySelectors,\n timelines: store.timelines,\n timelineAtoms: store.timelineAtoms,\n transactions: store.transactions,\n selectorAtoms: store.selectorAtoms,\n selectorGraph: store.selectorGraph,\n selectors: store.selectors,\n valueMap: store.valueMap,\n },\n atomUpdates: [],\n params,\n output: undefined,\n }\n store.config.logger?.info(`🛫`, `transaction \"${key}\" started`)\n}\nexport const applyTransaction = <ƒ extends ƒn>(\n output: ReturnType<ƒ>,\n store: Store\n): void => {\n if (store.transactionStatus.phase !== `building`) {\n store.config.logger?.warn(\n `abortTransaction called outside of a transaction. This is probably a bug.`\n )\n return\n }\n store.config.logger?.info(\n `🛃 apply transaction \"${store.transactionStatus.key}\"`\n )\n store.transactionStatus.phase = `applying`\n store.transactionStatus.output = output\n const { atomUpdates } = store.transactionStatus\n\n for (const { key, newValue } of atomUpdates) {\n const token: AtomToken<unknown> = { key, type: `atom` }\n if (!HAMT.has(token.key, store.valueMap)) {\n const newAtom = HAMT.get(token.key, store.transactionStatus.core.atoms)\n store.atoms = HAMT.set(newAtom.key, newAtom, store.atoms)\n store.valueMap = HAMT.set(newAtom.key, newAtom.default, store.valueMap)\n store.config.logger?.info(`🔧`, `add atom \"${newAtom.key}\"`)\n }\n setState(token, newValue, store)\n }\n const myTransaction = withdraw<ƒ>(\n { key: store.transactionStatus.key, type: `transaction` },\n store\n )\n if (myTransaction === null) {\n throw new Error(\n `Transaction \"${store.transactionStatus.key}\" not found. Absurd. How is this running?`\n )\n }\n myTransaction.subject.next({\n key: store.transactionStatus.key,\n atomUpdates,\n output,\n params: store.transactionStatus.params as Parameters<ƒ>,\n })\n store.transactionStatus = { phase: `idle` }\n store.config.logger?.info(`🛬`, `transaction done`)\n}\nexport const undoTransactionUpdate = <ƒ extends ƒn>(\n update: TransactionUpdate<ƒ>,\n store: Store\n): void => {\n store.config.logger?.info(` ⏮ undo transaction \"${update.key}\" (undo)`)\n for (const { key, oldValue } of update.atomUpdates) {\n const token: AtomToken<unknown> = { key, type: `atom` }\n const state = withdraw(token, store)\n if (state === null) {\n throw new Error(\n `State \"${token.key}\" not found in this store. This is surprising, because we are navigating the history of the store.`\n )\n }\n\n setState(state, oldValue, store)\n }\n}\nexport const redoTransactionUpdate = <ƒ extends ƒn>(\n update: TransactionUpdate<ƒ>,\n store: Store\n): void => {\n store.config.logger?.info(` ⏭ redo transaction \"${update.key}\" (redo)`)\n for (const { key, newValue } of update.atomUpdates) {\n const token: AtomToken<unknown> = { key, type: `atom` }\n const state = withdraw(token, store)\n if (state === null) {\n throw new Error(\n `State \"${token.key}\" not found in this store. This is surprising, because we are navigating the history of the store.`\n )\n }\n setState(state, newValue, store)\n }\n}\n\nexport const abortTransaction = (store: Store): void => {\n if (store.transactionStatus.phase === `idle`) {\n store.config.logger?.warn(\n `abortTransaction called outside of a transaction. This is probably a bug.`\n )\n return\n }\n store.transactionStatus = { phase: `idle` }\n store.config.logger?.info(`🪂`, `transaction fail`)\n}\n\nexport function transaction__INTERNAL<ƒ extends ƒn>(\n options: TransactionOptions<ƒ>,\n store: Store = IMPLICIT.STORE\n): TransactionToken<ƒ> {\n const newTransaction: Transaction<ƒ> = {\n key: options.key,\n type: `transaction`,\n run: (...params: Parameters<ƒ>) => {\n buildTransaction(options.key, params, store)\n try {\n const output = options.do(\n {\n get: (token) => getState(token, store),\n set: (token, value) => setState(token, value, store),\n },\n ...params\n )\n applyTransaction(output, store)\n return output\n } catch (thrown) {\n abortTransaction(store)\n store.config.logger?.error(`Transaction ${options.key} failed`, thrown)\n throw thrown\n }\n },\n subject: new Rx.Subject(),\n }\n const core = target(store)\n core.transactions = HAMT.set(\n newTransaction.key,\n newTransaction,\n core.transactions\n )\n const token = deposit(newTransaction)\n store.subject.transactionCreation.next(token)\n return token\n}\n\nexport const target = (store: Store = IMPLICIT.STORE): StoreCore =>\n store.transactionStatus.phase === `building`\n ? store.transactionStatus.core\n : store\n","import * as Rx from \"rxjs\"\n\nimport type { Serializable } from \"~/packages/anvl/src/json\"\nimport { stringifyJson } from \"~/packages/anvl/src/json\"\n\nimport type { Store } from \".\"\nimport {\n atom__INTERNAL,\n withdraw,\n selector__INTERNAL,\n target,\n deposit,\n IMPLICIT,\n} from \".\"\nimport type {\n AtomFamily,\n AtomFamilyOptions,\n AtomToken,\n FamilyMetadata,\n ReadonlySelectorFamily,\n ReadonlySelectorFamilyOptions,\n ReadonlySelectorToken,\n SelectorFamily,\n SelectorFamilyOptions,\n SelectorToken,\n} from \"..\"\n\nexport function atomFamily__INTERNAL<T, K extends Serializable>(\n options: AtomFamilyOptions<T, K>,\n store: Store = IMPLICIT.STORE\n): AtomFamily<T, K> {\n const subject = new Rx.Subject<AtomToken<T>>()\n return Object.assign(\n (key: K): AtomToken<T> => {\n const subKey = stringifyJson(key)\n const family: FamilyMetadata = { key: options.key, subKey }\n const fullKey = `${options.key}(${subKey})`\n const existing = withdraw({ key: fullKey, type: `atom` }, store)\n const token: AtomToken<any> = existing\n ? deposit(existing)\n : atom__INTERNAL<T>(\n {\n key: fullKey,\n default:\n options.default instanceof Function\n ? options.default(key)\n : options.default,\n effects: options.effects?.(key),\n },\n family,\n store\n )\n subject.next(token)\n return token\n },\n {\n key: options.key,\n type: `atom_family`,\n subject,\n } as const\n )\n}\n\nexport function readonlySelectorFamily__INTERNAL<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K>,\n store?: Store\n): ReadonlySelectorFamily<T, K> {\n const core = target(store)\n const subject = new Rx.Subject<ReadonlySelectorToken<T>>()\n return Object.assign(\n (key: K): ReadonlySelectorToken<T> => {\n const subKey = stringifyJson(key)\n const family: FamilyMetadata = { key: options.key, subKey }\n const fullKey = `${options.key}(${subKey})`\n const existing = core.readonlySelectors.get(fullKey)\n if (existing) {\n return deposit(existing)\n }\n return selector__INTERNAL<T>(\n {\n key: fullKey,\n get: options.get(key),\n },\n family,\n store\n ) as ReadonlySelectorToken<T>\n },\n {\n key: options.key,\n type: `readonly_selector_family`,\n subject,\n } as const\n ) as ReadonlySelectorFamily<T, K>\n}\n\nexport function selectorFamily__INTERNAL<T, K extends Serializable>(\n options: SelectorFamilyOptions<T, K>,\n store?: Store\n): SelectorFamily<T, K>\nexport function selectorFamily__INTERNAL<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K>,\n store?: Store\n): ReadonlySelectorFamily<T, K>\nexport function selectorFamily__INTERNAL<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K> | SelectorFamilyOptions<T, K>,\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorFamily<T, K> | SelectorFamily<T, K> {\n const isReadonly = !(`set` in options)\n\n if (isReadonly) {\n return readonlySelectorFamily__INTERNAL(options, store)\n }\n const core = target(store)\n const subject = new Rx.Subject<SelectorToken<T>>()\n\n return Object.assign(\n (key: K): SelectorToken<T> => {\n const subKey = stringifyJson(key)\n const family: FamilyMetadata = { key: options.key, subKey }\n const fullKey = `${options.key}(${subKey})`\n const existing = core.selectors.get(fullKey)\n if (existing) {\n return deposit(existing)\n }\n const token = selector__INTERNAL<T>(\n {\n key: fullKey,\n get: options.get(key),\n set: options.set(key),\n },\n family,\n store\n )\n subject.next(token)\n return token\n },\n {\n key: options.key,\n type: `selector_family`,\n } as const\n ) as SelectorFamily<T, K>\n}\n","import { pipe } from \"fp-ts/function\"\n\nexport * from \"./refine\"\nexport * from \"./json-interface\"\n\nexport const serializeSet = <T>(set: Set<T>): string =>\n pipe(set, Array.from, JSON.stringify)\n\nexport const deserializeSet = <T>(str: string): Set<T> =>\n pipe(str, JSON.parse, Array.from, (a) => new Set(a as T[]))\n\nexport type Primitive = boolean | number | string | null\n\nexport type Serializable =\n | Primitive\n | Readonly<{ [key: string]: Serializable }>\n | ReadonlyArray<Serializable>\n\nexport type JsonObj<\n Key extends string = string,\n Value extends Serializable = Serializable\n> = Record<Key, Value>\n\nexport type JsonArr<Element extends Serializable = Serializable> =\n ReadonlyArray<Element>\n\nexport type Json = JsonArr | JsonObj | Primitive\n\nexport const parseJson = <J extends Json, S extends Stringified<J> | string>(\n str: S | string\n): S extends Stringified<J> ? J : Json => JSON.parse(str)\n\nexport type Stringified<J extends Json> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json>(json: J): Stringified<J> =>\n JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n `array`,\n `boolean`,\n `null`,\n `number`,\n `object`,\n `string`,\n] as const\n\nexport type JsonTypeName = (typeof JSON_TYPE_NAMES)[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json> {\n array: JsonArr\n boolean: boolean\n null: null\n number: number\n object: JsonObj\n string: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n array: [],\n boolean: false,\n null: null,\n number: 0,\n object: {},\n string: ``,\n}\n","export * from \"./attach-meta\"\nexport * from \"./meta-state\"\nexport * from \"./meta-timelines\"\nexport * from \"./meta-transactions\"\n","import type { AtomToken, ReadonlySelectorToken, SelectorToken } from \"../..\"\nimport { selector, atom } from \"../..\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\n\nexport type StateTokenIndex<\n Token extends\n | AtomToken<unknown>\n | ReadonlySelectorToken<unknown>\n | SelectorToken<unknown>\n> = Record<\n string,\n | Token\n | {\n key: string\n familyMembers: Record<string, Token>\n }\n>\n\nexport type AtomTokenIndex = StateTokenIndex<AtomToken<unknown>>\nexport type SelectorTokenIndex = StateTokenIndex<\n ReadonlySelectorToken<unknown> | SelectorToken<unknown>\n>\n\nexport const attachMetaAtoms = (\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorToken<AtomTokenIndex> => {\n const atomTokenIndexState__INTERNAL = atom<AtomTokenIndex>({\n key: `👁‍🗨_atom_token_index__INTERNAL`,\n default: () =>\n [...store.atoms].reduce<AtomTokenIndex>((acc, [key]) => {\n acc[key] = { key, type: `atom` }\n return acc\n }, {}),\n effects: [\n ({ setSelf }) => {\n store.subject.atomCreation.subscribe((atomToken) => {\n if (store.operation.open) {\n return\n }\n setSelf((state) => {\n const { key, family } = atomToken\n if (family) {\n const { key: familyKey, subKey } = family\n const current = state[familyKey]\n if (current === undefined || `familyMembers` in current) {\n const familyKeyState = current || {\n key: familyKey,\n familyMembers: {},\n }\n return {\n ...state,\n [familyKey]: {\n ...familyKeyState,\n familyMembers: {\n ...familyKeyState.familyMembers,\n [subKey]: atomToken,\n },\n },\n }\n }\n }\n return {\n ...state,\n [key]: atomToken,\n }\n })\n })\n },\n ],\n })\n return selector({\n key: `👁‍🗨_atom_token_index`,\n get: ({ get }) => get(atomTokenIndexState__INTERNAL),\n })\n}\n\nexport const attachMetaSelectors = (\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorToken<SelectorTokenIndex> => {\n const readonlySelectorTokenIndexState__INTERNAL = atom<SelectorTokenIndex>({\n key: `👁‍🗨_selector_token_index__INTERNAL`,\n default: () =>\n Object.assign(\n [...store.readonlySelectors].reduce<SelectorTokenIndex>((acc, [key]) => {\n acc[key] = { key, type: `readonly_selector` }\n return acc\n }, {}),\n [...store.selectors].reduce<SelectorTokenIndex>((acc, [key]) => {\n acc[key] = { key, type: `selector` }\n return acc\n }, {})\n ),\n effects: [\n ({ setSelf }) => {\n store.subject.selectorCreation.subscribe((selectorToken) => {\n if (store.operation.open) {\n return\n }\n setSelf((state) => {\n const { key, family } = selectorToken\n if (family) {\n const { key: familyKey, subKey } = family\n const current = state[familyKey]\n if (current === undefined || `familyMembers` in current) {\n const familyKeyState = current || {\n key: familyKey,\n familyMembers: {},\n }\n return {\n ...state,\n [familyKey]: {\n ...familyKeyState,\n familyMembers: {\n ...familyKeyState.familyMembers,\n [subKey]: selectorToken,\n },\n },\n }\n }\n }\n return {\n ...state,\n [key]: selectorToken,\n }\n })\n })\n },\n ],\n })\n return selector({\n key: `👁‍🗨_selector_token_index`,\n get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL),\n })\n}\n","import type { AtomTokenIndex, SelectorTokenIndex } from \"./meta-state\"\nimport { attachMetaAtoms, attachMetaSelectors } from \"./meta-state\"\nimport type { ReadonlySelectorToken } from \"../..\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\n\nexport const attachMetaState = (\n store: Store = IMPLICIT.STORE\n): {\n atomTokenIndexState: ReadonlySelectorToken<AtomTokenIndex>\n selectorTokenIndexState: ReadonlySelectorToken<SelectorTokenIndex>\n} => {\n return {\n atomTokenIndexState: attachMetaAtoms(store),\n selectorTokenIndexState: attachMetaSelectors(store),\n }\n}\n","import HAMT from \"hamt_plus\"\nimport * as Rx from \"rxjs\"\n\nimport { become } from \"~/packages/anvl/src/function\"\n\nimport type { Store } from \".\"\nimport {\n target,\n cacheValue,\n markDone,\n lookup,\n IMPLICIT,\n getState__INTERNAL,\n setState__INTERNAL,\n withdraw,\n} from \".\"\nimport type {\n AtomToken,\n FamilyMetadata,\n ReadonlySelectorOptions,\n ReadonlySelectorToken,\n SelectorOptions,\n SelectorToken,\n StateToken,\n} from \"..\"\nimport type { Transactors } from \"../transaction\"\n\nexport type Selector<T> = {\n key: string\n type: `selector`\n family?: FamilyMetadata\n subject: Rx.Subject<{ newValue: T; oldValue: T }>\n get: () => T\n set: (newValue: T | ((oldValue: T) => T)) => void\n}\nexport type ReadonlySelector<T> = {\n key: string\n type: `readonly_selector`\n family?: FamilyMetadata\n subject: Rx.Subject<{ newValue: T; oldValue: T }>\n get: () => T\n}\n\nexport const lookupSelectorSources = (\n key: string,\n store: Store\n): (\n | AtomToken<unknown>\n | ReadonlySelectorToken<unknown>\n | SelectorToken<unknown>\n)[] =>\n target(store)\n .selectorGraph.getRelations(key)\n .filter(({ source }) => source !== key)\n .map(({ source }) => lookup(source, store))\n\nexport const traceSelectorAtoms = (\n selectorKey: string,\n dependency: ReadonlySelectorToken<unknown> | StateToken<unknown>,\n store: Store\n): AtomToken<unknown>[] => {\n const roots: AtomToken<unknown>[] = []\n\n const sources = lookupSelectorSources(dependency.key, store)\n let depth = 0\n while (sources.length > 0) {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const source = sources.shift()!\n ++depth\n if (depth > 999) {\n throw new Error(\n `Maximum selector dependency depth exceeded in selector \"${selectorKey}\".`\n )\n }\n\n if (source.type !== `atom`) {\n sources.push(...lookupSelectorSources(source.key, store))\n } else {\n roots.push(source)\n }\n }\n\n return roots\n}\n\nexport const traceAllSelectorAtoms = (\n selectorKey: string,\n store: Store\n): AtomToken<unknown>[] => {\n const sources = lookupSelectorSources(selectorKey, store)\n return sources.flatMap((source) =>\n source.type === `atom`\n ? source\n : traceSelectorAtoms(selectorKey, source, store)\n )\n}\n\nexport const updateSelectorAtoms = (\n selectorKey: string,\n dependency: ReadonlySelectorToken<unknown> | StateToken<unknown>,\n store: Store\n): void => {\n const core = target(store)\n if (dependency.type === `atom`) {\n core.selectorAtoms = core.selectorAtoms.set({\n selectorKey,\n atomKey: dependency.key,\n })\n store.config.logger?.info(\n ` || adding root for \"${selectorKey}\": ${dependency.key}`\n )\n return\n }\n const roots = traceSelectorAtoms(selectorKey, dependency, store)\n store.config.logger?.info(\n ` || adding roots for \"${selectorKey}\":`,\n roots.map((r) => r.key)\n )\n for (const root of roots) {\n core.selectorAtoms = core.selectorAtoms.set({\n selectorKey,\n atomKey: root.key,\n })\n }\n}\n\nexport const registerSelector = (\n selectorKey: string,\n store: Store = IMPLICIT.STORE\n): Transactors => ({\n get: (dependency) => {\n const core = target(store)\n const alreadyRegistered = core.selectorGraph\n .getRelations(selectorKey)\n .some(({ source }) => source === dependency.key)\n\n const dependencyState = withdraw(dependency, store)\n if (dependencyState === null) {\n throw new Error(\n `State \"${dependency.key}\" not found in this store. Did you forget to initialize with the \"atom\" or \"selector\" function?`\n )\n }\n const dependencyValue = getState__INTERNAL(dependencyState, store)\n\n if (alreadyRegistered) {\n store.config.logger?.info(\n ` || ${selectorKey} <- ${dependency.key} =`,\n dependencyValue\n )\n } else {\n store.config.logger?.info(\n `🔌 registerSelector \"${selectorKey}\" <- ( \"${dependency.key}\" =`,\n dependencyValue,\n `)`\n )\n core.selectorGraph = core.selectorGraph.set(\n { from: dependency.key, to: selectorKey },\n {\n source: dependency.key,\n }\n )\n }\n updateSelectorAtoms(selectorKey, dependency, store)\n return dependencyValue\n },\n set: (stateToken, newValue) => {\n const state = withdraw(stateToken, store)\n if (state === null) {\n throw new Error(\n `State \"${stateToken.key}\" not found in this store. Did you forget to initialize with the \"atom\" or \"selector\" function?`\n )\n }\n setState__INTERNAL(state, newValue, store)\n },\n})\n\nexport function selector__INTERNAL<T>(\n options: SelectorOptions<T>,\n family?: FamilyMetadata,\n store?: Store\n): SelectorToken<T>\nexport function selector__INTERNAL<T>(\n options: ReadonlySelectorOptions<T>,\n family?: FamilyMetadata,\n store?: Store\n): ReadonlySelectorToken<T>\nexport function selector__INTERNAL<T>(\n options: ReadonlySelectorOptions<T> | SelectorOptions<T>,\n family?: FamilyMetadata,\n store: Store = IMPLICIT.STORE\n): ReadonlySelectorToken<T> | SelectorToken<T> {\n const core = target(store)\n if (HAMT.has(options.key, core.selectors)) {\n store.config.logger?.error(\n `Key \"${options.key}\" already exists in the store.`\n )\n }\n\n const subject = new Rx.Subject<{ newValue: T; oldValue: T }>()\n\n const { get, set } = registerSelector(options.key, store)\n const getSelf = () => {\n const value = options.get({ get })\n cacheValue(options.key, value, store)\n return value\n }\n if (!(`set` in options)) {\n const readonlySelector: ReadonlySelector<T> = {\n ...options,\n subject,\n get: getSelf,\n type: `readonly_selector`,\n ...(family && { family }),\n }\n core.readonlySelectors = HAMT.set(\n options.key,\n readonlySelector,\n core.readonlySelectors\n )\n const initialValue = getSelf()\n store.config.logger?.info(` ✨ \"${options.key}\" =`, initialValue)\n const token: ReadonlySelectorToken<T> = {\n key: options.key,\n type: `readonly_selector`,\n family,\n }\n store.subject.selectorCreation.next(token)\n return token\n }\n const setSelf = (next: T | ((oldValue: T) => T)): void => {\n store.config.logger?.info(` <- \"${options.key}\" became`, next)\n const oldValue = getSelf()\n const newValue = become(next)(oldValue)\n cacheValue(options.key, newValue, store)\n markDone(options.key, store)\n if (store.transactionStatus.phase === `idle`) {\n subject.next({ newValue, oldValue })\n }\n options.set({ get, set }, newValue)\n }\n const mySelector: Selector<T> = {\n ...options,\n subject,\n get: getSelf,\n set: setSelf,\n type: `selector`,\n ...(family && { family }),\n }\n core.selectors = HAMT.set(options.key, mySelector, core.selectors)\n const initialValue = getSelf()\n store.config.logger?.info(` ✨ \"${options.key}\" =`, initialValue)\n const token: SelectorToken<T> = {\n key: options.key,\n type: `selector`,\n family,\n }\n store.subject.selectorCreation.next(token)\n return token\n}\n","import HAMT from \"hamt_plus\"\n\nimport { become } from \"~/packages/anvl/src/function\"\n\nimport type { Atom, Selector, Store } from \".\"\nimport {\n IMPLICIT,\n cacheValue,\n emitUpdate,\n evictCachedValue,\n getState__INTERNAL,\n isAtomDefault,\n isDone,\n markAtomAsNotDefault,\n markDone,\n stowUpdate,\n target,\n} from \".\"\n\nexport const evictDownStream = <T>(\n state: Atom<T>,\n store: Store = IMPLICIT.STORE\n): void => {\n const core = target(store)\n const downstream = core.selectorAtoms.getRelations(state.key)\n const downstreamKeys = downstream.map(({ id }) => id)\n store.config.logger?.info(\n ` || ${downstreamKeys.length} downstream:`,\n downstreamKeys\n )\n if (core.operation.open) {\n store.config.logger?.info(` ||`, [...core.operation.done], `already done`)\n }\n downstream.forEach(({ id: stateKey }) => {\n if (isDone(stateKey, store)) {\n store.config.logger?.info(` || ${stateKey} already done`)\n return\n }\n const state =\n HAMT.get(stateKey, core.selectors) ??\n HAMT.get(stateKey, core.readonlySelectors)\n if (!state) {\n store.config.logger?.info(\n ` || ${stateKey} is an atom, and can't be downstream`\n )\n return\n }\n evictCachedValue(stateKey, store)\n store.config.logger?.info(` xx evicted \"${stateKey}\"`)\n\n markDone(stateKey, store)\n })\n}\n\nexport const setAtomState = <T>(\n atom: Atom<T>,\n next: T | ((oldValue: T) => T),\n store: Store = IMPLICIT.STORE\n): void => {\n const oldValue = getState__INTERNAL(atom, store)\n const newValue = become(next)(oldValue)\n store.config.logger?.info(`<< setting atom \"${atom.key}\" to`, newValue)\n cacheValue(atom.key, newValue, store)\n if (isAtomDefault(atom.key, store)) {\n markAtomAsNotDefault(atom.key, store)\n }\n markDone(atom.key, store)\n store.config.logger?.info(\n ` || evicting caches downstream from \"${atom.key}\"`\n )\n evictDownStream(atom, store)\n const update = { oldValue, newValue }\n if (store.transactionStatus.phase !== `building`) {\n emitUpdate(atom, update, store)\n } else {\n stowUpdate(atom, update, store)\n }\n}\nexport const setSelectorState = <T>(\n selector: Selector<T>,\n next: T | ((oldValue: T) => T),\n store: Store = IMPLICIT.STORE\n): void => {\n const oldValue = getState__INTERNAL(selector, store)\n const newValue = become(next)(oldValue)\n\n store.config.logger?.info(`<< setting selector \"${selector.key}\" to`, newValue)\n store.config.logger?.info(` || propagating change made to \"${selector.key}\"`)\n\n selector.set(newValue)\n}\nexport const setState__INTERNAL = <T>(\n state: Atom<T> | Selector<T>,\n value: T | ((oldValue: T) => T),\n store: Store = IMPLICIT.STORE\n): void => {\n if (`set` in state) {\n setSelectorState(state, value, store)\n } else {\n setAtomState(state, value, store)\n }\n}\n","import {\n getState__INTERNAL,\n withdraw,\n recallState,\n traceAllSelectorAtoms,\n} from \".\"\nimport type { Atom, ReadonlySelector, Selector, Store } from \".\"\nimport type { StateUpdate } from \"..\"\n\nexport const prepareUpdate = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n store: Store\n): StateUpdate<T> => {\n const oldValue = recallState(state, store)\n const newValue = getState__INTERNAL(state, store)\n return { newValue, oldValue }\n}\n\nexport const stowUpdate = <T>(\n state: Atom<T>,\n update: StateUpdate<T>,\n store: Store\n): void => {\n const { key } = state\n const { logger } = store.config\n if (store.transactionStatus.phase !== `building`) {\n store.config.logger?.warn(\n `stowUpdate called outside of a transaction. This is probably a bug.`\n )\n return\n }\n store.transactionStatus.atomUpdates.push({ key, ...update })\n logger?.info(`📝 ${key} stowed (`, update.oldValue, `->`, update.newValue, `)`)\n}\n\nexport const emitUpdate = <T>(\n state: Atom<T> | ReadonlySelector<T> | Selector<T>,\n update: StateUpdate<T>,\n store: Store\n): void => {\n const { key } = state\n const { logger } = store.config\n logger?.info(\n `📢 ${state.type} \"${key}\" went (`,\n update.oldValue,\n `->`,\n update.newValue,\n `)`\n )\n state.subject.next(update)\n}\n\nexport const subscribeToRootAtoms = <T>(\n state: ReadonlySelector<T> | Selector<T>,\n store: Store\n): { unsubscribe: () => void }[] | null => {\n const dependencySubscriptions =\n `default` in state\n ? null\n : traceAllSelectorAtoms(state.key, store).map((atomToken) => {\n const atom = withdraw(atomToken, store)\n if (atom === null) {\n throw new Error(\n `Atom \"${atomToken.key}\", a dependency of selector \"${state.key}\", not found in store \"${store.config.name}\".`\n )\n }\n return atom.subject.subscribe((atomChange) => {\n store.config.logger?.info(\n `📢 selector \"${state.key}\" saw root \"${atomToken.key}\" go (`,\n atomChange.oldValue,\n `->`,\n atomChange.newValue,\n `)`\n )\n const oldValue = recallState(state, store)\n const newValue = getState__INTERNAL(state, store)\n store.config.logger?.info(` <- ${state.key} became`, newValue)\n state.subject.next({ newValue, oldValue })\n })\n })\n return dependencySubscriptions\n}\n","import type { Store } from \".\"\nimport { IMPLICIT } from \".\"\nimport { setState } from \"..\"\nimport type { TimelineToken } from \"..\"\n\nexport const redo__INTERNAL = (\n token: TimelineToken,\n store: Store = IMPLICIT.STORE\n): void => {\n store.config.logger?.info(`⏩ redo \"${token.key}\"`)\n const timelineData = store.timelineStore.get(token.key)\n if (!timelineData) {\n store.config.logger?.error(\n `Failed to redo on timeline \"${token.key}\". This timeline has not been initialized.`\n )\n return\n }\n if (timelineData.at === timelineData.history.length) {\n store.config.logger?.warn(\n `Failed to redo at the end of timeline \"${token.key}\". There is nothing to redo.`\n )\n return\n }\n timelineData.timeTraveling = true\n const update = timelineData.history[timelineData.at]\n switch (update.type) {\n case `atom_update`: {\n const { key, newValue } = update\n setState({ key, type: `atom` }, newValue)\n break\n }\n case `selector_update`:\n case `transaction_update`: {\n for (const atomUpdate of update.atomUpdates) {\n const { key, newValue } = atomUpdate\n setState({ key, type: `atom` }, newValue)\n }\n break\n }\n }\n ++timelineData.at\n timelineData.timeTraveling = false\n store.config.logger?.info(\n `⏹️ \"${token.key}\" is now at ${timelineData.at} / ${timelineData.history.length}`\n )\n}\n\nexport const undo__INTERNAL = (\n token: TimelineToken,\n store: Store = IMPLICIT.STORE\n): void => {\n store.config.logger?.info(`⏪ undo \"${token.key}\"`)\n const timelineData = store.timelineStore.get(token.key)\n if (!timelineData) {\n store.config.logger?.error(\n `Failed to undo on timeline \"${token.key}\". This timeline has not been initialized.`\n )\n return\n }\n if (timelineData.at === 0) {\n store.config.logger?.warn(\n `Failed to undo at the beginning of timeline \"${token.key}\". There is nothing to undo.`\n )\n return\n }\n timelineData.timeTraveling = true\n\n --timelineData.at\n const update = timelineData.history[timelineData.at]\n switch (update.type) {\n case `atom_update`: {\n const { key, oldValue } = update\n setState({ key, type: `atom` }, oldValue)\n break\n }\n case `selector_update`:\n case `transaction_update`: {\n for (const atomUpdate of update.atomUpdates) {\n const { key, oldValue } = atomUpdate\n setState({ key, type: `atom` }, oldValue)\n }\n break\n }\n }\n timelineData.timeTraveling = false\n store.config.logger?.info(\n `⏹️ \"${token.key}\" is now at ${timelineData.at} / ${timelineData.history.length}`\n )\n}\n","import HAMT from \"hamt_plus\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { KeyedStateUpdate, TransactionUpdate, Store } from \".\"\nimport { target, IMPLICIT, withdraw } from \".\"\nimport type { AtomToken, TimelineOptions, TimelineToken } from \"..\"\n\nexport type Timeline = {\n key: string\n type: `timeline`\n next: () => void\n prev: () => void\n}\n\nexport type TimelineAtomUpdate = KeyedStateUpdate<unknown> & {\n type: `atom_update`\n}\nexport type TimelineSelectorUpdate = {\n key: string\n type: `selector_update`\n atomUpdates: TimelineAtomUpdate[]\n}\nexport type TimelineTransactionUpdate = TransactionUpdate<ƒn> & {\n type: `transaction_update`\n}\n\nexport type TimelineData = {\n at: number\n timeTraveling: boolean\n history: (\n | TimelineAtomUpdate\n | TimelineSelectorUpdate\n | TimelineTransactionUpdate\n )[]\n selectorTime: number | null\n transactionKey: string | null\n}\n\nexport function timeline__INTERNAL(\n options: TimelineOptions,\n store: Store = IMPLICIT.STORE\n): TimelineToken {\n const timelineData: TimelineData = {\n at: 0,\n timeTraveling: false,\n history: [],\n selectorTime: null,\n transactionKey: null,\n }\n\n const subscribeToAtom = (token: AtomToken<any>) => {\n const state = withdraw(token, store)\n if (state === null) {\n throw new Error(\n `Cannot subscribe to atom \"${token.key}\" because it has not been initialized in store \"${store.config.name}\"`\n )\n }\n state.subject.subscribe((update) => {\n const storeCurrentSelectorKey =\n store.operation.open && store.operation.token.type === `selector`\n ? store.operation.token.key\n : null\n const storeCurrentSelectorTime =\n store.operation.open && store.operation.token.type === `selector`\n ? store.operation.time\n : null\n\n const storeCurrentTransactionKey =\n store.transactionStatus.phase === `applying`\n ? store.transactionStatus.key\n : null\n store.config.logger?.info(\n `⏳ timeline \"${options.key}\" saw atom \"${token.key}\" go (`,\n update.oldValue,\n `->`,\n update.newValue,\n storeCurrentTransactionKey\n ? `) in transaction \"${storeCurrentTransactionKey}\"`\n : storeCurrentSelectorKey\n ? `) in selector \"${storeCurrentSelectorKey}\"`\n : `)`\n )\n\n if (\n storeCurrentTransactionKey &&\n store.transactionStatus.phase === `applying`\n ) {\n const currentTransaction = withdraw(\n { key: storeCurrentTransactionKey, type: `transaction` },\n store\n )\n if (currentTransaction === null) {\n throw new Error(\n `Transaction \"${storeCurrentTransactionKey}\" not found in store \"${store.config.name}\". This is surprising, because we are in the application phase of \"${storeCurrentTransactionKey}\".`\n )\n }\n if (timelineData.transactionKey !== storeCurrentTransactionKey) {\n if (timelineData.transactionKey) {\n store.config.logger?.error(\n `Timeline \"${options.key}\" was unable to resolve transaction \"${timelineData.transactionKey}. This is probably a bug.`\n )\n }\n timelineData.transactionKey = storeCurrentTransactionKey\n const subscription = currentTransaction.subject.subscribe((update) => {\n if (timelineData.timeTraveling === false) {\n if (timelineData.at !== timelineData.history.length) {\n timelineData.history.splice(timelineData.at)\n }\n timelineData.history.push({\n type: `transaction_update`,\n ...update,\n atomUpdates: update.atomUpdates.filter((atomUpdate) =>\n options.atoms.some((atom) => atom.key === atomUpdate.key)\n ),\n })\n }\n timelineData.at = timelineData.history.length\n subscription.unsubscribe()\n timelineData.transactionKey = null\n store.config.logger?.info(\n `⌛ timeline \"${options.key}\" got a transaction_update \"${update.key}\"`\n )\n })\n }\n } else if (storeCurrentSelectorKey) {\n if (timelineData.timeTraveling === false) {\n if (storeCurrentSelectorTime !== timelineData.selectorTime) {\n const newSelectorUpdate: TimelineSelectorUpdate = {\n type: `selector_update`,\n key: storeCurrentSelectorKey,\n atomUpdates: [],\n }\n newSelectorUpdate.atomUpdates.push({\n key: token.key,\n type: `atom_update`,\n ...update,\n })\n if (timelineData.at !== timelineData.history.length) {\n timelineData.history.splice(timelineData.at)\n }\n timelineData.history.push(newSelectorUpdate)\n\n store.config.logger?.info(\n `⌛ timeline \"${options.key}\" got a selector_update \"${storeCurrentSelectorKey}\" with`,\n newSelectorUpdate.atomUpdates.map((atomUpdate) => atomUpdate.key)\n )\n timelineData.at = timelineData.history.length\n timelineData.selectorTime = storeCurrentSelectorTime\n } else {\n const latestUpdate = timelineData.history.at(-1)\n if (latestUpdate?.type === `selector_update`) {\n latestUpdate.atomUpdates.push({\n key: token.key,\n type: `atom_update`,\n ...update,\n })\n store.config.logger?.info(\n ` ⌛ timeline \"${options.key}\" set selector_update \"${storeCurrentSelectorKey}\" to`,\n latestUpdate?.atomUpdates.map((atomUpdate) => atomUpdate.key)\n )\n }\n }\n }\n } else {\n if (timelineData.timeTraveling === false) {\n timelineData.selectorTime = null\n if (timelineData.at !== timelineData.history.length) {\n timelineData.history.splice(timelineData.at)\n }\n timelineData.history.push({\n type: `atom_update`,\n key: token.key,\n oldValue: update.oldValue,\n newValue: update.newValue,\n })\n store.config.logger?.info(\n `⌛ timeline \"${options.key}\" got a state_update to \"${token.key}\"`\n )\n timelineData.at = timelineData.history.length\n }\n }\n })\n }\n const core = target(store)\n for (const tokenOrFamily of options.atoms) {\n const timelineKey = core.timelineAtoms.getRelatedId(tokenOrFamily.key)\n if (timelineKey) {\n store.config.logger?.error(\n `❌ Failed to add atom \"${tokenOrFamily.key}\" to timeline \"${options.key}\" because it belongs to timeline \"${timelineKey}\"`\n )\n continue\n }\n if (tokenOrFamily.type === `atom_family`) {\n const family = tokenOrFamily\n family.subject.subscribe((token) => subscribeToAtom(token))\n } else {\n const token = tokenOrFamily\n if (`family` in token && token.family) {\n const familyTimelineKey = core.timelineAtoms.getRelatedId(\n token.family.key\n )\n if (familyTimelineKey) {\n store.config.logger?.error(\n `❌ Failed to add atom \"${token.key}\" to timeline \"${options.key}\" because its family \"${token.family.key}\" belongs to timeline \"${familyTimelineKey}\"`\n )\n continue\n }\n }\n subscribeToAtom(token)\n }\n core.timelineAtoms = core.timelineAtoms.set({\n atomKey: tokenOrFamily.key,\n timelineKey: options.key,\n })\n }\n\n store.timelineStore = HAMT.set(options.key, timelineData, store.timelineStore)\n const token: TimelineToken = {\n key: options.key,\n type: `timeline`,\n }\n store.subject.timelineCreation.next(token)\n return token\n}\n","import type * as Rx from \"rxjs\"\n\nimport type { Serializable } from \"~/packages/anvl/src/json\"\n\nimport type { AtomToken } from \".\"\nimport { atomFamily__INTERNAL, atom__INTERNAL } from \"./internal\"\n\nexport type Effectors<T> = {\n setSelf: <V extends T>(next: V | ((oldValue: T) => V)) => void\n onSet: (callback: (options: { newValue: T; oldValue: T }) => void) => void\n}\n\nexport type AtomEffect<T> = (tools: Effectors<T>) => void\n\nexport type AtomOptions<T> = {\n key: string\n default: T | (() => T)\n effects?: AtomEffect<T>[]\n}\n\nexport function atom<T>(options: AtomOptions<T>): AtomToken<T> {\n return atom__INTERNAL<T>(options)\n}\n\nexport type AtomFamilyOptions<T, K extends Serializable> = {\n key: string\n default: T | ((key: K) => T)\n effects?: (key: K) => AtomEffect<T>[]\n}\n\nexport type AtomFamily<T, K extends Serializable = Serializable> = ((\n key: K\n) => AtomToken<T>) & {\n key: string\n type: `atom_family`\n subject: Rx.Subject<AtomToken<T>>\n}\n\nexport function atomFamily<T, K extends Serializable>(\n options: AtomFamilyOptions<T, K>\n): AtomFamily<T, K> {\n return atomFamily__INTERNAL<T, K>(options)\n}\n","import { doNothing } from \"~/packages/anvl/src/function\"\n\nimport type { Store } from \"./internal/store\"\nimport { IMPLICIT } from \"./internal/store\"\n\nexport type Logger = Pick<Console, `error` | `info` | `warn`>\nexport const LOG_LEVELS: ReadonlyArray<keyof Logger> = [\n `info`,\n `warn`,\n `error`,\n] as const\n\nexport const setLogLevel = (\n preferredLevel: `error` | `info` | `warn` | null,\n store: Store = IMPLICIT.STORE\n): void => {\n const { logger__INTERNAL } = store.config\n if (preferredLevel === null) {\n store.config.logger = null\n } else {\n store.config.logger = { ...console }\n LOG_LEVELS.forEach((logLevel) => {\n if (LOG_LEVELS.indexOf(logLevel) < LOG_LEVELS.indexOf(preferredLevel)) {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n store.config.logger![logLevel] = doNothing\n } else {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n store.config.logger![logLevel] = logger__INTERNAL[logLevel]\n }\n })\n }\n}\n\nexport const useLogger = (\n logger: Logger,\n store: Store = IMPLICIT.STORE\n): void => {\n const currentLogLevel =\n store.config.logger === null\n ? null\n : LOG_LEVELS.find(\n (logLevel) => store.config.logger?.[logLevel] !== doNothing\n ) ?? null\n store.config.logger__INTERNAL = { ...logger }\n setLogLevel(currentLogLevel, store)\n}\n","import type * as Rx from \"rxjs\"\n\nimport type { Serializable } from \"~/packages/anvl/src/json\"\n\nimport type { ReadonlySelectorToken, SelectorToken } from \".\"\nimport { selectorFamily__INTERNAL, selector__INTERNAL } from \"./internal\"\nimport type { Read, Write } from \"./transaction\"\n\nexport type SelectorOptions<T> = {\n key: string\n get: Read<() => T>\n set: Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorOptions<T> = {\n key: string\n get: Read<() => T>\n}\n\nexport function selector<T>(options: SelectorOptions<T>): SelectorToken<T>\nexport function selector<T>(\n options: ReadonlySelectorOptions<T>\n): ReadonlySelectorToken<T>\nexport function selector<T>(\n options: ReadonlySelectorOptions<T> | SelectorOptions<T>\n): ReadonlySelectorToken<T> | SelectorToken<T> {\n return selector__INTERNAL(options)\n}\n\nexport type SelectorFamilyOptions<T, K extends Serializable> = {\n key: string\n get: (key: K) => Read<() => T>\n set: (key: K) => Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorFamilyOptions<T, K extends Serializable> = {\n key: string\n get: (key: K) => Read<() => T>\n}\n\nexport type SelectorFamily<T, K extends Serializable = Serializable> = ((\n key: K\n) => SelectorToken<T>) & {\n key: string\n type: `selector_family`\n subject: Rx.Subject<SelectorToken<T>>\n}\n\nexport type ReadonlySelectorFamily<T, K extends Serializable = Serializable> = ((\n key: K\n) => ReadonlySelectorToken<T>) & {\n key: string\n type: `readonly_selector_family`\n subject: Rx.Subject<ReadonlySelectorToken<T>>\n}\n\nexport function selectorFamily<T, K extends Serializable>(\n options: SelectorFamilyOptions<T, K>\n): SelectorFamily<T, K>\nexport function selectorFamily<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K>\n): ReadonlySelectorFamily<T, K>\nexport function selectorFamily<T, K extends Serializable>(\n options: ReadonlySelectorFamilyOptions<T, K> | SelectorFamilyOptions<T, K>\n): ReadonlySelectorFamily<T, K> | SelectorFamily<T, K> {\n return selectorFamily__INTERNAL(options)\n}\n","import { type timeline, getState, setState, subscribe } from \".\"\nimport type { atom, atomFamily } from \"./atom\"\nimport {\n type Store,\n atomFamily__INTERNAL,\n atom__INTERNAL,\n createStore,\n selectorFamily__INTERNAL,\n selector__INTERNAL,\n timeline__INTERNAL,\n transaction__INTERNAL,\n} from \"./internal\"\nimport type { selector, selectorFamily } from \"./selector\"\nimport type { transaction } from \"./transaction\"\n\nexport type Silo = ReturnType<typeof silo>\n\nexport const silo = (\n name: string\n): {\n store: Store\n atom: typeof atom\n atomFamily: typeof atomFamily\n selector: typeof selector\n selectorFamily: typeof selectorFamily\n transaction: typeof transaction\n timeline: typeof timeline\n getState: typeof getState\n setState: typeof setState\n subscribe: typeof subscribe\n} => {\n const store = createStore(name)\n return {\n store,\n atom: (options) => atom__INTERNAL(options, undefined, store),\n atomFamily: (options) => atomFamily__INTERNAL(options, store),\n selector: (options) => selector__INTERNAL(options, undefined, store) as any,\n selectorFamily: (options) => selectorFamily__INTERNAL(options, store) as any,\n transaction: (options) => transaction__INTERNAL(options, store),\n timeline: (options) => timeline__INTERNAL(options, store),\n getState: (token) => getState(token, store),\n setState: (token, newValue) => setState(token, newValue, store),\n subscribe: (token, handler) => subscribe(token, handler, store),\n }\n}\n","import type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { ReadonlySelectorToken, StateToken, TransactionToken } from \".\"\nimport type { Store, TransactionUpdate } from \"./internal\"\nimport { IMPLICIT, subscribeToRootAtoms, withdraw } from \"./internal\"\n\nexport type StateUpdate<T> = { newValue: T; oldValue: T }\nexport type UpdateHandler<T> = (update: StateUpdate<T>) => void\n\nexport const subscribe = <T>(\n token: ReadonlySelectorToken<T> | StateToken<T>,\n handleUpdate: UpdateHandler<T>,\n store: Store = IMPLICIT.STORE\n): (() => void) => {\n const state = withdraw<T>(token, store)\n if (state === null) {\n throw new Error(\n `State \"${token.key}\" not found in this store. Did you forget to initialize with the \"atom\" or \"selector\" function?`\n )\n }\n const subscription = state.subject.subscribe(handleUpdate)\n store.config.logger?.info(`👀 subscribe to \"${state.key}\"`)\n const dependencySubscriptions =\n state.type !== `atom` ? subscribeToRootAtoms(state, store) : null\n\n const unsubscribe =\n dependencySubscriptions === null\n ? () => {\n store.config.logger?.info(`🙈 unsubscribe from \"${state.key}\"`)\n subscription.unsubscribe()\n }\n : () => {\n store.config.logger?.info(\n `🙈 unsubscribe from \"${state.key}\" and its dependencies`\n )\n subscription.unsubscribe()\n for (const dependencySubscription of dependencySubscriptions) {\n dependencySubscription.unsubscribe()\n }\n }\n\n return unsubscribe\n}\n\nexport type TransactionUpdateHandler<ƒ extends ƒn> = (\n data: TransactionUpdate<ƒ>\n) => void\n\nexport const subscribeToTransaction = <ƒ extends ƒn>(\n token: TransactionToken<ƒ>,\n handleUpdate: TransactionUpdateHandler<ƒ>,\n store = IMPLICIT.STORE\n): (() => void) => {\n const tx = withdraw(token, store)\n if (tx === null) {\n throw new Error(\n `Cannot subscribe to transaction \"${token.key}\": transaction not found in store \"${store.config.name}\".`\n )\n }\n store.config.logger?.info(`👀 subscribe to transaction \"${token.key}\"`)\n const subscription = tx.subject.subscribe(handleUpdate)\n const unsubscribe = () => {\n store.config.logger?.info(`🙈 unsubscribe from transaction \"${token.key}\"`)\n subscription.unsubscribe()\n }\n return unsubscribe\n}\n","import type { AtomFamily, AtomToken } from \".\"\nimport { IMPLICIT } from \"./internal\"\nimport { redo__INTERNAL, timeline__INTERNAL, undo__INTERNAL } from \"./internal/\"\n\nexport type TimelineToken = {\n key: string\n type: `timeline`\n}\n\nexport type TimelineOptions = {\n key: string\n atoms: (AtomFamily<any> | AtomToken<any>)[]\n}\n\nexport const timeline = (options: TimelineOptions): TimelineToken => {\n return timeline__INTERNAL(options)\n}\n\nexport const redo = (token: TimelineToken): void => {\n return redo__INTERNAL(token, IMPLICIT.STORE)\n}\n\nexport const undo = (token: TimelineToken): void => {\n return undo__INTERNAL(token, IMPLICIT.STORE)\n}\n","import type * as Rx from \"rxjs\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { ReadonlySelectorToken, StateToken, TransactionToken } from \".\"\nimport type { Store, TransactionUpdate } from \"./internal\"\nimport { IMPLICIT, transaction__INTERNAL, withdraw } from \"./internal\"\n\nexport type Transactors = {\n get: <S>(state: ReadonlySelectorToken<S> | StateToken<S>) => S\n set: <S>(state: StateToken<S>, newValue: S | ((oldValue: S) => S)) => void\n}\nexport type ReadonlyTransactors = Pick<Transactors, `get`>\n\nexport type Read<ƒ extends ƒn> = (\n transactors: ReadonlyTransactors,\n ...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type Write<ƒ extends ƒn> = (\n transactors: Transactors,\n ...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type TransactionOptions<ƒ extends ƒn> = {\n key: string\n do: Write<ƒ>\n}\n\nexport type Transaction<ƒ extends ƒn> = {\n key: string\n type: `transaction`\n run: (...parameters: Parameters<ƒ>) => ReturnType<ƒ>\n subject: Rx.Subject<TransactionUpdate<ƒ>>\n}\nexport type TransactionIO<Token extends TransactionToken<any>> =\n Token extends TransactionToken<infer ƒ> ? ƒ : never\n\nexport function transaction<ƒ extends ƒn>(\n options: TransactionOptions<ƒ>\n): TransactionToken<ƒ> {\n return transaction__INTERNAL(options)\n}\n\nexport const runTransaction =\n <ƒ extends ƒn>(token: TransactionToken<ƒ>, store: Store = IMPLICIT.STORE) =>\n (...parameters: Parameters<ƒ>): ReturnType<ƒ> => {\n const tx = withdraw(token, store)\n if (tx) {\n return tx.run(...parameters)\n }\n throw new Error(\n `Cannot run transaction \"${token.key}\": transaction not found in store \"${store.config.name}\".`\n )\n }\n","import { capitalize } from \"~/packages/anvl/src/string/capitalize\"\n\nimport {\n IMPLICIT,\n closeOperation,\n openOperation,\n getState__INTERNAL,\n setState__INTERNAL,\n isAtomDefault,\n isSelectorDefault,\n withdraw,\n} from \"./internal\"\nimport * as __INTERNAL__ from \"./internal\"\nimport type { Store } from \"./internal/store\"\n\nexport * from \"./atom\"\nexport * from \"./logger\"\nexport * from \"./selector\"\nexport * from \"./silo\"\nexport * from \"./subscribe\"\nexport * from \"./timeline\"\nexport * from \"./transaction\"\nexport { __INTERNAL__ }\nexport type { Store } from \"./internal/store\"\nexport type { Serializable } from \"~/packages/anvl/src/json\"\n\nexport type AtomToken<_> = {\n key: string\n type: `atom`\n family?: FamilyMetadata\n __brand?: _\n}\nexport type SelectorToken<_> = {\n key: string\n type: `selector`\n family?: FamilyMetadata\n __brand?: _\n}\nexport type StateToken<T> = AtomToken<T> | SelectorToken<T>\n\nexport type ReadonlySelectorToken<_> = {\n key: string\n type: `readonly_selector`\n family?: FamilyMetadata\n __brand?: _\n}\n\nexport type FamilyMetadata = {\n key: string\n subKey: string\n}\n\nexport type TransactionToken<_> = {\n key: string\n type: `transaction`\n __brand?: _\n}\n\nexport const getState = <T>(\n token: ReadonlySelectorToken<T> | StateToken<T>,\n store: Store = IMPLICIT.STORE\n): T => {\n const state = withdraw<T>(token, store)\n if (state === null) {\n throw new Error(\n `${capitalize(token.type)} \"${token.key}\" not found in store \"${\n store.config.name\n }\".`\n )\n }\n return getState__INTERNAL(state, store)\n}\n\nexport const setState = <T, New extends T>(\n token: StateToken<T>,\n value: New | ((oldValue: T) => New),\n store: Store = IMPLICIT.STORE\n): void => {\n try {\n openOperation(token, store)\n } catch (thrown) {\n if (!(typeof thrown === `symbol`)) {\n throw thrown\n }\n return\n }\n const state = withdraw(token, store)\n if (state === null) {\n throw new Error(\n `${capitalize(token.type)} \"${token.key}\" not found in store \"${\n store.config.name\n }\".`\n )\n }\n setState__INTERNAL(state, value, store)\n closeOperation(store)\n}\n\nexport const isDefault = (\n token: ReadonlySelectorToken<unknown> | StateToken<unknown>,\n store: Store = IMPLICIT.STORE\n): boolean =>\n token.type === `atom`\n ? isAtomDefault(token.key, store)\n : isSelectorDefault(token.key, store)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAM,aAAa,CAAC,QACzB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;;;ACDpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,OAAOA,WAAU;AACjB,YAAYC,SAAQ;;;ACDpB,OAAO,UAAU;AAeV,IAAM,uBAAuB,CAClCC,cACMA,UAAS,IAAI;AAEd,SAAS,OACd,KACA,OAC8E;AAC9E,QAAM,OAAO,OAAO,KAAK;AACzB,QAAM,OAAO,KAAK,IAAI,KAAK,KAAK,KAAK,IACjC,SACA,KAAK,IAAI,KAAK,KAAK,SAAS,IAC5B,aACA;AACJ,SAAO,EAAE,KAAK,KAAK;AACrB;AAuBO,SAAS,SACd,OACA,OAMO;AA7DT;AA8DE,QAAM,OAAO,OAAO,KAAK;AACzB,UACE,4BAAK,IAAI,MAAM,KAAK,KAAK,KAAK,MAA9B,YACA,KAAK,IAAI,MAAM,KAAK,KAAK,SAAS,MADlC,YAEA,KAAK,IAAI,MAAM,KAAK,KAAK,iBAAiB,MAF1C,YAGA,KAAK,IAAI,MAAM,KAAK,KAAK,YAAY,MAHrC,YAIA;AAEJ;AAYO,SAAS,QACd,OASsB;AACtB,SAAO;AAAA,IACL,KAAK,MAAM;AAAA,IACX,MAAM,MAAM;AAAA,KACR,YAAY,SAAS,EAAE,QAAQ,MAAM,OAAO;AAEpD;AAEO,IAAM,qBAAqB,CAChC,OACA,QAAe,SAAS,UAClB;AAvGR;AAwGE,MAAI,cAAc,MAAM,KAAK,KAAK,GAAG;AACnC,gBAAM,OAAO,WAAb,mBAAqB,KAAK,YAAY,MAAM;AAC5C,WAAO,gBAAgB,MAAM,KAAK,KAAK;AAAA,EACzC;AACA,MAAI,MAAM,SAAS,QAAQ;AACzB,gBAAM,OAAO,WAAb,mBAAqB,KAAK,YAAY,MAAM;AAC5C,WAAO,qBAAqB,KAAK;AAAA,EACnC;AACA,cAAM,OAAO,WAAb,mBAAqB;AAAA,IACnB,0BAA0B,MAAM,+CAA+C,MAAM,OAAO;AAAA;AAE9F,SAAO,MAAM;AACf;;;ACjHO,IAAM,gBAAgB,CAC3B,KACA,QAAe,SAAS,UACZ;AACZ,QAAM,OAAO,OAAO,KAAK;AACzB,SAAO,KAAK,oBAAoB,IAAI,GAAG;AACzC;AAEO,IAAM,oBAAoB,CAC/B,KACA,QAAe,SAAS,UACf;AACT,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,sBAAsB,IAAI,IAAI,KAAK,mBAAmB,EAAE,IAAI,GAAG;AACtE;AAEO,IAAM,uBAAuB,CAClC,KACA,QAAe,SAAS,UACf;AACT,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,sBAAsB,IAAI,IAAI,OAAO,KAAK,EAAE,mBAAmB;AACpE,OAAK,oBAAoB,OAAO,GAAG;AACrC;AAEO,IAAM,oBAAoB,CAC/B,KACA,QAAe,SAAS,UACZ;AACZ,QAAM,QAAQ,sBAAsB,KAAK,KAAK;AAC9C,SAAO,MAAM,MAAM,CAAC,SAAS,cAAc,KAAK,KAAK,KAAK,CAAC;AAC7D;;;ACjCA,OAAOC,WAAU;;;ACAjB,OAAOC,WAAU;AACjB,YAAY,QAAQ;;;ACGb,IAAM,YAAY,MAAY;AAG9B,IAAM,SACX,CACC,uBACD,CAAC,kBACC,8BAA8B,WAC1B;AAAA,EAAmB,yBAAyB,WACxC,cAAc,IACd;AACJ,IACA;AAsBD,IAAM,OACX,IAA4C,WAC5C,CAAC,OACC,GAAG,GAAG,MAAM;;;AC1ChB,SAAS,gBAAgB;;;ACQlB,IAAM,cAAyB,CAAC,UAAU,CAAC,UAAU;AAC1D,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,MAAM,SAAS,IAAI;AAAG,aAAO;AAAA,EACpC;AACA,SAAO;AACT;AAeO,IAAM,YAAuB,CAAC,UAAU,CAAC,UAC9C,YAAY,KAAK,EAAE,KAAK,KAAK,YAAY,KAAK,EAAE,KAAK;;;AChBhD,IAAM,UACX,CAAI,WACJ,CAAC,UACC,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,SAAS,OAAO,IAAI,CAAC;AAiBvD,IAAM,MACX,CAAO,MACP,CAAC,MACC,EAAE,IAAI,CAAC;AAwCJ,IAAM,QACX,CAAI,IAAsD,YAC1D,CAAC,MACC,EAAE,MAAM,CAAC;AAEN,IAAM,UAAU,MAAM,CAAC,MAAe,MAAM,IAAI;AAEhD,IAAM,QACX,CAAI,MACJ,CAAC,MACC,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC;AAEzB,IAAM,eAAe,CAAC,UAC3B,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;AAEpC,IAAM,UACX,IAAO,SACP,CAAC,UACC,KAAK,SAAS,KAAU;;;AC9F5B,SAAS,QAAAC,aAAY;;;ACKd,IAAM,SAAS,CACpB,MAKA,OAAO,OAAO,CAAC,QAAW,IAAI,CAAY,GAAG;AAAA,EAC3C,IAAI,CAAC,QAAW,IAAI,CAAY;AAClC,CAAC;;;ACXI,IAAM,kBAAkB,CAC7B,QACkB,OAAO,QAAQ,GAAG;AAE/B,IAAM,kBAAkB,CAC7B,YACiB,OAAO,YAAY,OAAO;;;ACR7C,SAAS,YAAY;AAKd,IAAM,YAAY,CACvB,KACA,OAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAU;AAAA,EAChD;AACF;AAEK,IAAM,MACX,CAA4B,OAC5B,CAAC,QACC,UAAU,KAAK,EAAE;;;ACjBd,IAAM,cAAc,CAAC,UAC1B,UAAU;AA2BL,IAAM,YACX,CAAO,QACP,CAAC,UACE,wBAAS;;;AJpBP,IAAM,kBAAkB,CAAC,UAC9B,OAAO,UAAU,YAAY,UAAU;AAElC,IAAM,gBAAgB,CAAC,UAC5B,gBAAgB,KAAK,KAAK,OAAO,eAAe,KAAK,MAAM,OAAO;AAE7D,IAAM,gBAAgB,CAAC,UAC5B,cAAc,KAAK,KAAK,OAAO,KAAK,KAAK,EAAE,WAAW;AAGjD,IAAM,WAAW,CAIpB,OACA,YAEF,CAAC,UACC,cAAc,KAAK,KACnB,OAAO,QAAQ,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC;AAM3D,IAAM,gBAAgB,CAC3B,SAGA,UAAgC,EAAE,sBAAsB,MAAM,MACjC;AAC7B,QAAM,OAAO,IAAI;AAAA,IACf;AAAA,EACF,EACG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,MAAM,EAAE,IAAI,EACxC,KAAK,GAAG;AAEX,QAAM,IAAI;AAAA,IACR,CAAC,IAAI,GAAG,CAAC,UACP,cAAc,KAAK,KACnBC;AAAA,MACE;AAAA,MACA,OAAO;AAAA,MACP,MAAM,CAAC,CAAC,KAAK,GAAG,MAAM,OAAO,SAAS,IAAI,MAAS,CAAC;AAAA,IACtD,KACAA;AAAA,MACE;AAAA,MACA;AAAA,QAAI,CAAC,KAAK,QACRA;AAAA,UACE;AAAA,UACA,OAAO,GAAG;AAAA,UACV,UAAU,MAAM,QAAQ,oBAAoB;AAAA,UAC5C,KAAK,GAAG;AAAA,QACV;AAAA,MACF;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACJ;AACA,SAAO,EAAE,IAAI;AACf;AASO,IAAM;AAAA;AAAA,EAEX,CAAqB,YAGnB,cAAc,SAAS,EAAE,sBAAsB,MAAM,CAAC;AAAA;;;AKnFnD,IAAM,WAAW,CAAC,MAA6B;AAC/C,IAAM,cAAc,CAAC,MAA2B;AAEhD,IAAM,YACX,CAAsC,UACtC,CAAC,UACC,UAAU;AA4BP,IAAM,UAAU,CACrB,SACA,UAAU,OACV,cAA0C,CAAC,OAAO,MAI/C;AACH,QAAM,OAAO,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,MAAM,EAAE,KAAK,KAAK;AACpE,QAAM,IAAI;AAAA,IACR,CAAC,IAAI,GAAG,CAAC,UACP,YAAY;AAAA,MACV,CAAC,eAAY;AAlDrB;AAmDU,0BACE,QAAQ;AAAA,UACN,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,MAAM,EAAE,KAAK,KAAK;AAAA,UACnD;AAAA,WACA,gBAAW,SAAX,YAAmB;AAAA,UACnB;AAAA,UACA,WAAW,KAAK;AAAA,QAClB,GACF,WAAW,KAAK;AAAA;AAAA,IAEpB;AAAA,EACJ;AACA,QAAM,aAGF,OAAO,OAAO,EAAE,IAAI,GAAG;AAAA,IACzB,IAAI,CAAI,YACN,QAAQ,SAAS,SAAS,CAAC,GAAG,aAAa,OAAO,CAAC;AAAA,EACvD,CAAC;AACD,SAAO;AACT;AAEO,IAAM,UAAU,QAAQ,WAAW;AAMnC,IAAM,SAAS,CACpB,SACA,UAAU,OACV,cAA0C,CAAC,OAAO,MAI/C;AACH,QAAM,OAAO,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,MAAM,EAAE,KAAK,KAAK;AACpE,QAAM,IAAI;AAAA,IACR,CAAC,IAAI,GAAG,CAAC,UACP,YAAY;AAAA,MACV,CAAC,gBACC,WACE,QAAQ;AAAA,QACN,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,MAAM,EAAE,KAAK,KAAK;AAAA,QACnD;AAAA,QACA,WAAW,QAAQ;AAAA,QACnB;AAAA,QACA,WAAW,KAAK;AAAA,MAClB,GACF,WAAW,KAAK;AAAA,IAEpB;AAAA,EACJ;AACA,QAAM,aAGF,OAAO,OAAO,EAAE,IAAI,GAAG;AAAA,IACzB,KAAK,CAAI,YACP,OAAO,SAAS,SAAS,CAAC,GAAG,aAAa,OAAO,CAAC;AAAA,EACtD,CAAC;AACD,SAAO;AACT;AAEO,IAAM,iBAAiB,OAAO,QAAQ;;;AR1GtC,IAAM,iBAAiB,CAAC,OAAO,OAAO,KAAK;AAI3C,IAAM,iBAAiB,CAAC,MAC7B,eAAe,SAAS,CAAiB;AAcpC,IAAM,sBAAoC;AAAA,EAC/C,UAAU,CAAC;AAAA,EACX,WAAW,CAAC;AAAA,EACZ,cAAc;AAAA,EACd,GAAG;AAAA,EACH,GAAG;AACL;AAWO,IAAM,iBACX,CAIE;AAAA,EACA,MAAM,IAAI;AAAA,EACV,IAAI,IAAI;AAAA,EACR;AACF,IAA0C,CAAC,MAC3C,CAAC,UAAyD;AACxD,SAAO,mBAAgD;AAAA,IACrD,UAAU,YACN,SAAS,UAAU,SAAS,IAC5B,mBAAmB,CAAC,CAAC;AAAA,IACzB,WAAW,SAAS,UAAU,QAAQ,QAAQ,CAAC;AAAA,IAC/C,cAAc;AAAA,IACd,GAAG,UAAU,CAAC;AAAA,IACd,GAAG,UAAU,CAAC;AAAA,EAChB,CAAC,EAAE,KAAK;AACV;;;AS7DK,IAAM,gBAAgB,CAK3B,aACA,OACU;AAVZ;AAUe,2BAAY,UAAU,EAAE,MAAxB,YAA6B,CAAC;AAAA;AAEtC,IAAM,eAAe,CAK1B,aACA,OACuB;AACvB,QAAM,YAAY,cAAc,aAAa,EAAE;AAC/C,MAAI,UAAU,SAAS,GAAG;AACxB,YAAQ;AAAA,MACN,iBAAiB;AAAA,IACnB;AAAA,EACF;AACA,SAAO,UAAU,CAAC;AACpB;;;ACtBO,IAAM,oBAAoB,CAK/B,SACG,WACiE;AACpE,QAAM,YAAY,OAAO,CAAC;AAC1B,QAAM,EAAE,GAAG,EAAE,IAAI;AACjB,QAAM,UAAgD;AAAA,IACpD,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,EACF;AACA,SAAO;AAAA,IACL,QAAQ,CAACC,UAASA,MAAK,OAAO;AAAA,IAC9B,UAAU,CAAC,SAAS,KAAK,SAAS,MAAM,OAAO;AAAA,EACjD;AACF;;;ACxBA,SAAS,QAAAC,aAAY;;;ACKd,IAAM,qBAAqB,CAKhC,aACA,QAEA,cAAc,aAAa,GAAG,EAAE,IAAI,CAAC,QAAQ;AAAA,EAC3C;AAAA,EACA,WAAW,aAAa,KAAK,GAAG;AAClC,CAAC;AAEI,IAAM,oBAAoB,CAK/B,aACA,OAEA,OAAO,YAAY,mBAAmB,aAAa,EAAE,CAAC;;;AC1BxD,SAAS,QAAAC,aAAY;AACrB,SAAS,YAAAC,iBAAgB;;;ACDzB,SAAe,QAAAC,aAAY;AAiEpB,IAAM,YACX,CAAC,gBAA2D,gBAC5D,CACE,QAC0D;AAC1D,QAAM,SAAS,CAAC;AAChB,QAAM,UAAU,OAAO,QAAQ,GAAG;AAClC,UAAQ;AAAA,IAAQ,CAAC,CAAC,KAAK,GAAG,MACxB,CAAC,cAAc,KAAK,GAAG,IAAK,OAAO,GAAG,IAAI,MAAO;AAAA,EACnD;AACA,SAAO;AACT;;;AC5EK,IAAM,QACX,CAAC,cACD,CAAC,QACC,IAAI,MAAM,SAAS;;;AFShB,IAAM,iBAAiB,CAK5B,SACA,KACA,QACgC;AAChC,QAAM,iBAAiB,QAAQ,KAAK,GAAG;AACvC,SAAO,iCACF,UADE;AAAA,IAEL,WAAWC;AAAA,MACT,QAAQ;AAAA,MACR;AAAA,MACA,IAAI,CAAC,CAAC,IAAI,SAAS,MAA8C;AAAA,QAC/D;AAAA,QACA,eAAe,EAAE,IACb,UAAU,OAAO,CAAC,aAAa,CAAC,eAAe,QAAQ,CAAC,IACxD;AAAA,MACN,CAAC;AAAA,MACD;AAAA,MACA,UAAiB,YAAY;AAAA,IAC/B;AAAA,IACA,UAAUA;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,QACE,CAAC,GAAG,QAAQC,UAAS,GAAG,KAAKD,MAAK,KAAK,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,YAAY,CAKvB,SACA,eACgC;AAChC,QAAM,OAAoC,iCACrC,UADqC;AAAA,IAExC,WAAWA;AAAA,MACT,QAAQ;AAAA,MACR;AAAA,MACA,IAAI,CAAC,CAAC,IAAI,SAAS,MAA8C;AAAA,QAC/D;AAAA,QACA,UAAU,OAAO,CAAC,aAAa,aAAa,UAAU;AAAA,MACxD,CAAC;AAAA,MACD;AAAA,MACA,UAAiB,CAAC,KAAK,QAAQ,QAAQ,cAAc,aAAa,GAAG,CAAC;AAAA,IACxE;AAAA,IACA,UAAUA;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,QACE,CAAC,GAAG,QAAQC,UAAS,GAAG,KAAK,IAAI,MAAM,GAAG,EAAE,SAAS,UAAU;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAK5B,SACA,aACgC;AAChC,QAAM,MAA2B,SAC/B,QAAQ,CACV;AACA,QAAM,MAA2B,SAC/B,QAAQ,CACV;AACA,SAAO,MAAM,eAAe,SAAS,KAAK,GAAG,IAAI,UAAU,SAAS,GAAG;AACzE;;;AGlFO,IAAM,gBAAgB,CAK3BC,MACA,KACA,QACG,SAC6B;AAjBlC;AAkBE,QAAM,OAAO,iCACRA,OADQ;AAAA,IAEX,WAAW,iCACNA,KAAI,YADE;AAAA,MAET,CAAC,GAAG,GAAG,OAAM,KAAAA,KAAI,UAAU,GAAG,MAAjB,YAAsB,CAAC,CAAC,EAAE,GAAG;AAAA,MAC1C,CAAC,GAAG,GAAG,OAAM,KAAAA,KAAI,UAAU,GAAG,MAAjB,YAAsB,CAAC,CAAC,EAAE,GAAG;AAAA,IAC5C;AAAA,EACF;AACA,QAAM,UAAU,KAAK,CAAC;AACtB,SAAO,UAAU,WAAW,MAAM,KAAK,KAAK,OAAO,IAAI;AACzD;AAEA,IAAM,gBAAgB,UAAiB,YAAY;AAE5C,IAAM,aAAa,CAKxB,SACA,UACA,eACG,SAC6B;AAzClC;AA0CE,QAAM,YAAY,mBAAK,QAAQ;AAC/B,QAAM,eAAe,aAAa,SAAS,UAAU;AACrD,QAAM,OAAO,iCACR,UADQ;AAAA,IAEX,WAAW,cAAc,gDACpB,YACC,gBACF,iBAAiB,YAAY;AAAA,MAC3B,CAAC,YAAY,GAAG,UAAU,YAAY,EAAE;AAAA,QACtC,CAAC,OAAO,OAAO;AAAA,MACjB;AAAA,IACF,IAPqB;AAAA,MAQvB,CAAC,UAAU,GAAG,CAAC,QAAQ;AAAA,MACvB,CAAC,QAAQ,GAAG,OAAM,eAAU,QAAQ,MAAlB,YAAuB,CAAC,CAAC,EAAE,UAAU;AAAA,IACzD,EAAC;AAAA,EACH;AACA,QAAM,UAAU,KAAK,CAAC;AACtB,SAAO,UAAU,WAAW,MAAM,UAAU,YAAY,OAAO,IAAI;AACrE;AAEO,IAAM,UAAU,CAKrB,SACA,QACA,cACG,SAC6B;AAChC,QAAM,aAAa,aAAa,SAAS,SAAS;AAClD,QAAM,gBAAgB,aAAa,SAAS,MAAM;AAClD,QAAM,OAAO,iCACR,UADQ;AAAA,IAEX,WAAW,cAAc,+DACpB,QAAQ,YACP,cAAc,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,IACjC,iBAAiB,EAAE,CAAC,aAAa,GAAG,CAAC,EAAE,IAHpB;AAAA,MAIvB,CAAC,MAAM,GAAG,CAAC,SAAS;AAAA,MACpB,CAAC,SAAS,GAAG,CAAC,MAAM;AAAA,IACtB,EAAC;AAAA,EACH;AAEA,QAAM,UAAU,KAAK,CAAC;AACtB,SAAO,UAAU,WAAW,MAAM,QAAQ,WAAW,OAAO,IAAI;AAClE;AAEO,IAAM,yBAAyB,CAKpC,SACA,aACG,SAC6B;AAChC,QAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI;AAO/C,UAAQ,QAAQ,cAAc;AAAA,IAC5B,KAAK;AACH,aAAO,QAAQ,SAAS,KAAK,KAAK,GAAG,IAAI;AAAA,IAC3C,KAAK;AACH,aAAO,WAAW,SAAS,KAAK,KAAK,GAAG,IAAI;AAAA,IAC9C,KAAK;AACH,aAAO,cAAc,SAAS,KAAK,KAAK,GAAG,IAAI;AAAA,EACnD;AACF;;;ALpGO,IAAM,gBAAgB,CAAC,KAAa,QACzC,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG;AAErB,IAAM,aAAa,CAKxB,aACA,KACA,QACwB,YAAY,SAAS,cAAc,KAAK,GAAG,CAAC;AAE/D,IAAM,aAAa,CAKxBC,MACA,KACA,KACA,YACiC,iCAC9BA,OAD8B;AAAA,EAEjC,UAAU,iCACLA,KAAI,WADC;AAAA,IAER,CAAC,cAAc,KAAK,GAAG,CAAC,GAAG;AAAA,EAC7B;AACF;AAEO,IAAM,eAAe,CAK1B,aACA,OAEA,mBAAmB,aAAa,EAAE,EAAE;AAAA,EAClC,CAAC,CAACC,KAAI,OAAO,MACV;AAAA,IACC,IAAAA;AAAA,KACG;AAET;AAEK,IAAM,eAAe,CAK1B,SACA,SACA,cACgC;AAChC,QAAM,MAA2B,QAAoC,QAAQ,CAAC;AAC9E,QAAM,MAA2B,QAAkC,QAAQ,CAAC;AAC5E,SAAOC;AAAA,IACL;AAAA,IACA,CAAC,iBAAiB;AAChB,YAAM,aAAa,cAAc,SAAS,GAAG;AAC7C,YAAM,aAAa,WAAW;AAAA,QAC5B,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,MAC5C;AACA,UAAI,OAAO;AACX,iBAAW,MAAM,YAAY;AAC3B,cAAM,SAAS;AAAA,UACb,CAAC,QAAQ,CAAC,GAAG,oBAAO;AAAA,UACpB,CAAC,QAAQ,CAAC,GAAG,oBAAO;AAAA,QACtB;AACA,eAAO,eAAe,MAAM,MAAM;AAAA,MACpC;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,iBAAiB;AAChB,UAAI,OAAO;AACX,iBAAW,MAAmB,WAAW;AAApC,uBAAQ,KAzFnB,IAyFW,IAAe,iBAAf,IAAe,CAAP;AACX,cAAM,UAAU,cAAc,IAAI,IAAI,SAAY;AAClD,eAAO;AAAA,UACL;AAAA,UACA,EAAE,CAAC,QAAQ,CAAC,GAAG,oBAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,oBAAO,GAAG;AAAA;AAAA,UAKjD;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,iBAAiB;AAChB,YAAM,kBAAkB,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;AACjD,aAAO,iCACF,eADE;AAAA,QAEL,WAAW,iCACN,aAAa,YADP;AAAA,UAET,CAAC,oBAAO,GAAG,GAAG;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AMnGO,IAAM,OAAN,MAAM,MAKb;AAAA,EAMS,YAAY,MAA6C;AAJhE,SAAgB,IAAO;AACvB,SAAgB,IAAO;AA4CvB,SAAO,oBAAoB,IACtB,WACiE;AACpE,aAAO,kBAAiC,MAAM,GAAG,MAAM;AAAA,IACzD;AA5CE,WAAO,OAAO,MAAM,gDACf,sBACA,OAFe;AAAA,MAGlB,mBAAmB,KAAK;AAAA,IAC1B,EAAC;AAAA,EACH;AAAA,EACO,SAAsC;AAC3C,WAAO;AAAA,MACL,cAAc,KAAK;AAAA,MACnB,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EACA,OAAc,SAKZ,MACA,SACqB;AACrB,UAAM,UAAU,eAA8B,OAAO,EAAE,IAAI;AAC3D,QAAI,SAAS;AACX,aAAO,IAAI,MAAoB,IAAI;AAAA,IACrC;AACA,UAAM,IAAI;AAAA,MACR,wCAAwC,KAAK,UAAU,IAAI;AAAA,IAC7D;AAAA,EACF;AAAA,EAEO,KAAwB,MAAgC;AAC7D,WAAO,IAAI,MAAK,iCAAK,OAAL,EAAW,GAAG,KAAK,EAAC;AAAA,EACtC;AAAA,EAEO,GAAsB,MAAgC;AAC3D,WAAO,IAAI,MAAK,iCAAK,OAAL,EAAW,GAAG,KAAK,EAAC;AAAA,EACtC;AAAA,EAQO,aAAa,IAAgC;AAClD,WAAO,aAAa,MAAM,EAAE;AAAA,EAC9B;AAAA,EACO,cAAc,IAAsB;AACzC,WAAO,cAAc,MAAM,EAAE;AAAA,EAC/B;AAAA,EACO,WAAW,KAAa,KAAkC;AAC/D,WAAO,WAAW,MAAM,KAAK,GAAG;AAAA,EAClC;AAAA,EACO,mBAAmB,IAAiC;AACzD,WAAO,mBAAmB,MAAM,EAAE;AAAA,EACpC;AAAA,EACO,kBAAkB,IAAqC;AAC5D,WAAO,kBAAkB,MAAM,EAAE;AAAA,EACnC;AAAA,EACO,YACL,IACgD;AAChD,WAAO,aAAa,MAAM,EAAE,EAAE,CAAC;AAAA,EACjC;AAAA,EACO,aAAa,IAAkD;AACpE,WAAO,aAAa,MAAM,EAAE;AAAA,EAC9B;AAAA,EACO,aACL,SACA,WACqB;AACrB,WAAO,IAAI,MAAK,aAAa,MAAM,SAAS,SAAS,CAAC;AAAA,EACxD;AAAA,EACO,IACL,aACG,MACkB;AACrB,WAAO,IAAI,MAAK,uBAAuB,MAAM,UAAU,GAAG,IAAI,CAAC;AAAA,EACjE;AAAA,EACO,OAAO,UAA+D;AAC3E,WAAO,IAAI;AAAA,MACT,eAAe,MAAM,QAA0C;AAAA,IACjE;AAAA,EACF;AACF;;;AnBxCO,IAAM,cAAc,CAAC,UACzB;AAAA,EACC,OAAOC,MAAK,KAAwB;AAAA,EACpC,qBAAqB,oBAAI,IAAI;AAAA,EAC7B,mBAAmBA,MAAK,KAAoC;AAAA,EAC5D,eAAe,IAAI,KAAK,EAAE,cAAc,MAAM,CAAC,EAC5C,KAAK,aAAa,EAClB,GAAG,SAAS;AAAA,EACf,eAAe,IAAI,KAAK,EAAE,cAAc,MAAM,CAAC;AAAA,EAC/C,WAAWA,MAAK,KAA4B;AAAA,EAC5C,WAAWA,MAAK,KAAuB;AAAA,EACvC,eAAe,IAAI,KAAK,EAAE,cAAc,MAAM,CAAC,EAC5C,KAAK,aAAa,EAClB,GAAG,SAAS;AAAA,EACf,eAAeA,MAAK,KAA2B;AAAA,EAC/C,cAAcA,MAAK,KAA+B;AAAA,EAClD,UAAUA,MAAK,KAAkB;AAAA,EAEjC,SAAS;AAAA,IACP,cAAc,IAAO,WAAQ;AAAA,IAC7B,kBAAkB,IAAO,WAAQ;AAAA,IACjC,qBAAqB,IAAO,WAAQ;AAAA,IACpC,kBAAkB,IAAO,WAAQ;AAAA,EACnC;AAAA,EAEA,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN;AAAA,IACA,QAAQ,iCACH,UADG;AAAA,MAEN,MAAM;AAAA,IACR;AAAA,IACA,kBAAkB;AAAA,EACpB;AACF;AAEK,IAAM,WAAW;AAAA,EACtB,gBAAgB;AAAA,EAChB,IAAI,QAAe;AApHrB;AAqHI,YAAO,UAAK,mBAAL,YAAwB,KAAK,iBAAiB,YAAY,SAAS;AAAA,EAC5E;AACF;AAEO,IAAM,aAAa,CAAC,QAAe,SAAS,UAAgB;AACjE,QAAM,EAAE,OAAO,IAAI;AACnB,SAAO,OAAO,OAAO,YAAY,OAAO,IAAI,CAAC;AAC7C,QAAM,SAAS;AACjB;;;ADxGO,IAAM,gBAAgB,CAAC,OAAwB,UAAuB;AArB7E;AAsBE,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,KAAK,UAAU,MAAM;AACvB,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB,iCAA4B,MAAM,+BAA+B,KAAK,UAAU,MAAM;AAAA;AAExF,UAAM,OAAO,WAAW;AAAA,EAC1B;AACA,OAAK,YAAY;AAAA,IACf,MAAM;AAAA,IACN,MAAM,oBAAI,IAAI;AAAA,IACd,MAAM,MAAM;AAAA,IACZ,MAAM,KAAK,IAAI;AAAA,IACf;AAAA,EACF;AACA,cAAM,OAAO,WAAb,mBAAqB,KAAK,gCAA2B,MAAM;AAC7D;AACO,IAAM,iBAAiB,CAAC,UAAuB;AAtCtD;AAuCE,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,YAAY,EAAE,MAAM,MAAM;AAC/B,cAAM,OAAO,WAAb,mBAAqB,KAAK;AAC5B;AAEO,IAAM,SAAS,CAAC,KAAa,QAAe,SAAS,UAAmB;AA5C/E;AA6CE,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,CAAC,KAAK,UAAU,MAAM;AACxB,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB;AAAA;AAEF,WAAO;AAAA,EACT;AACA,SAAO,KAAK,UAAU,KAAK,IAAI,GAAG;AACpC;AACO,IAAM,WAAW,CAAC,KAAa,QAAe,SAAS,UAAgB;AAtD9E;AAuDE,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,CAAC,KAAK,UAAU,MAAM;AACxB,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB;AAAA;AAEF;AAAA,EACF;AACA,OAAK,UAAU,KAAK,IAAI,GAAG;AAC7B;AACO,IAAM,cAAc,CACzB,OACA,QAAe,SAAS,UAClB;AAnER;AAoEE,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,CAAC,KAAK,UAAU,MAAM;AACxB,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB;AAAA;AAEF,WAAOC,MAAK,IAAI,MAAM,KAAK,KAAK,QAAQ;AAAA,EAC1C;AACA,SAAOA,MAAK,IAAI,MAAM,KAAK,KAAK,UAAU,IAAI;AAChD;AAEO,IAAM,aAAa,CACxB,KACA,OACA,QAAe,SAAS,UACf;AACT,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,WAAWA,MAAK,IAAI,KAAK,OAAO,KAAK,QAAQ;AACpD;AAEO,IAAM,mBAAmB,CAC9B,KACA,QAAe,SAAS,UACf;AACT,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,WAAWA,MAAK,OAAO,KAAK,KAAK,QAAQ;AAChD;AACO,IAAM,kBAAkB,CAC7B,KACA,QAAe,SAAS,UAClBA,MAAK,IAAI,KAAK,OAAO,KAAK,EAAE,QAAQ;AAErC,IAAM,gBAAgB,CAC3B,KACA,QAAe,SAAS,UACZA,MAAK,IAAI,KAAK,OAAO,KAAK,EAAE,QAAQ;AAE3C,IAAM,YAAY,CACvBC,OACA,QAAe,SAAS,UACf;AACT,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,QAAQD,MAAK,IAAIC,MAAK,KAAKA,OAAM,KAAK,KAAK;AAClD;AAEO,IAAM,gBAAgB,CAC3BC,WACA,QAAe,SAAS,UACf;AACT,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,YAAYF,MAAK,IAAIE,UAAS,KAAKA,WAAU,KAAK,SAAS;AAClE;AAEO,IAAM,wBAAwB,CACnCA,WACA,QAAe,SAAS,UACf;AACT,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,oBAAoBF,MAAK;AAAA,IAC5BE,UAAS;AAAA,IACTA;AAAA,IACA,KAAK;AAAA,EACP;AACF;AAEO,IAAM,iBAAiB,CAC5B,KACA,QAAe,SAAS,UACZ;AACZ,QAAM,OAAO,OAAO,KAAK;AACzB,SACEF,MAAK,IAAI,KAAK,KAAK,KAAK,KACxBA,MAAK,IAAI,KAAK,KAAK,SAAS,KAC5BA,MAAK,IAAI,KAAK,KAAK,iBAAiB;AAExC;;;AqB9IA,OAAOG,WAAU;AACjB,YAAYC,SAAQ;AAeb,IAAM,qBAAqB,CAAC,QAAQ,YAAY,UAAU;AAwB1D,IAAM,mBAAmB,CAC9B,KACA,QACA,UACS;AA5CX;AA6CE,QAAM,oBAAoB;AAAA,IACxB;AAAA,IACA,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,OAAO,MAAM;AAAA,MACb,qBAAqB,MAAM;AAAA,MAC3B,WAAW,EAAE,MAAM,MAAM;AAAA,MACzB,mBAAmB,MAAM;AAAA,MACzB,WAAW,MAAM;AAAA,MACjB,eAAe,MAAM;AAAA,MACrB,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,MACrB,eAAe,MAAM;AAAA,MACrB,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,IAClB;AAAA,IACA,aAAa,CAAC;AAAA,IACd;AAAA,IACA,QAAQ;AAAA,EACV;AACA,cAAM,OAAO,WAAb,mBAAqB,KAAK,aAAM,gBAAgB;AAClD;AACO,IAAM,mBAAmB,CAC9B,QACA,UACS;AAtEX;AAuEE,MAAI,MAAM,kBAAkB,UAAU,YAAY;AAChD,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB;AAAA;AAEF;AAAA,EACF;AACA,cAAM,OAAO,WAAb,mBAAqB;AAAA,IACnB,gCAAyB,MAAM,kBAAkB;AAAA;AAEnD,QAAM,kBAAkB,QAAQ;AAChC,QAAM,kBAAkB,SAAS;AACjC,QAAM,EAAE,YAAY,IAAI,MAAM;AAE9B,aAAW,EAAE,KAAK,SAAS,KAAK,aAAa;AAC3C,UAAM,QAA4B,EAAE,KAAK,MAAM,OAAO;AACtD,QAAI,CAACC,MAAK,IAAI,MAAM,KAAK,MAAM,QAAQ,GAAG;AACxC,YAAM,UAAUA,MAAK,IAAI,MAAM,KAAK,MAAM,kBAAkB,KAAK,KAAK;AACtE,YAAM,QAAQA,MAAK,IAAI,QAAQ,KAAK,SAAS,MAAM,KAAK;AACxD,YAAM,WAAWA,MAAK,IAAI,QAAQ,KAAK,QAAQ,SAAS,MAAM,QAAQ;AACtE,kBAAM,OAAO,WAAb,mBAAqB,KAAK,aAAM,aAAa,QAAQ;AAAA,IACvD;AACA,aAAS,OAAO,UAAU,KAAK;AAAA,EACjC;AACA,QAAM,gBAAgB;AAAA,IACpB,EAAE,KAAK,MAAM,kBAAkB,KAAK,MAAM,cAAc;AAAA,IACxD;AAAA,EACF;AACA,MAAI,kBAAkB,MAAM;AAC1B,UAAM,IAAI;AAAA,MACR,gBAAgB,MAAM,kBAAkB;AAAA,IAC1C;AAAA,EACF;AACA,gBAAc,QAAQ,KAAK;AAAA,IACzB,KAAK,MAAM,kBAAkB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,QAAQ,MAAM,kBAAkB;AAAA,EAClC,CAAC;AACD,QAAM,oBAAoB,EAAE,OAAO,OAAO;AAC1C,cAAM,OAAO,WAAb,mBAAqB,KAAK,aAAM;AAClC;AACO,IAAM,wBAAwB,CACnC,QACA,UACS;AAnHX;AAoHE,cAAM,OAAO,WAAb,mBAAqB,KAAK,6BAAwB,OAAO;AACzD,aAAW,EAAE,KAAK,SAAS,KAAK,OAAO,aAAa;AAClD,UAAM,QAA4B,EAAE,KAAK,MAAM,OAAO;AACtD,UAAM,QAAQ,SAAS,OAAO,KAAK;AACnC,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI;AAAA,QACR,UAAU,MAAM;AAAA,MAClB;AAAA,IACF;AAEA,aAAS,OAAO,UAAU,KAAK;AAAA,EACjC;AACF;AACO,IAAM,wBAAwB,CACnC,QACA,UACS;AApIX;AAqIE,cAAM,OAAO,WAAb,mBAAqB,KAAK,6BAAwB,OAAO;AACzD,aAAW,EAAE,KAAK,SAAS,KAAK,OAAO,aAAa;AAClD,UAAM,QAA4B,EAAE,KAAK,MAAM,OAAO;AACtD,UAAM,QAAQ,SAAS,OAAO,KAAK;AACnC,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI;AAAA,QACR,UAAU,MAAM;AAAA,MAClB;AAAA,IACF;AACA,aAAS,OAAO,UAAU,KAAK;AAAA,EACjC;AACF;AAEO,IAAM,mBAAmB,CAAC,UAAuB;AAlJxD;AAmJE,MAAI,MAAM,kBAAkB,UAAU,QAAQ;AAC5C,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB;AAAA;AAEF;AAAA,EACF;AACA,QAAM,oBAAoB,EAAE,OAAO,OAAO;AAC1C,cAAM,OAAO,WAAb,mBAAqB,KAAK,aAAM;AAClC;AAEO,SAAS,sBACd,SACA,QAAe,SAAS,OACH;AACrB,QAAM,iBAAiC;AAAA,IACrC,KAAK,QAAQ;AAAA,IACb,MAAM;AAAA,IACN,KAAK,IAAI,WAA0B;AApKvC;AAqKM,uBAAiB,QAAQ,KAAK,QAAQ,KAAK;AAC3C,UAAI;AACF,cAAM,SAAS,QAAQ;AAAA,UACrB;AAAA,YACE,KAAK,CAACC,WAAU,SAASA,QAAO,KAAK;AAAA,YACrC,KAAK,CAACA,QAAO,UAAU,SAASA,QAAO,OAAO,KAAK;AAAA,UACrD;AAAA,UACA,GAAG;AAAA,QACL;AACA,yBAAiB,QAAQ,KAAK;AAC9B,eAAO;AAAA,MACT,SAAS,QAAP;AACA,yBAAiB,KAAK;AACtB,oBAAM,OAAO,WAAb,mBAAqB,MAAM,eAAe,QAAQ,cAAc;AAChE,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS,IAAO,YAAQ;AAAA,EAC1B;AACA,QAAM,OAAO,OAAO,KAAK;AACzB,OAAK,eAAeD,MAAK;AAAA,IACvB,eAAe;AAAA,IACf;AAAA,IACA,KAAK;AAAA,EACP;AACA,QAAM,QAAQ,QAAQ,cAAc;AACpC,QAAM,QAAQ,oBAAoB,KAAK,KAAK;AAC5C,SAAO;AACT;AAEO,IAAM,SAAS,CAAC,QAAe,SAAS,UAC7C,MAAM,kBAAkB,UAAU,aAC9B,MAAM,kBAAkB,OACxB;;;AxBjLC,SAAS,eACd,SACA,QACA,QAAe,SAAS,OACV;AAzBhB;AA0BE,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,eAAe,QAAQ,KAAK,KAAK,GAAG;AACtC,sBAAM,OAAO,WAAb,mBAAqB,UAArB;AAAA;AAAA,MACE,QAAQ,QAAQ;AAAA;AAElB,WAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,GAAG,CAAC;AAAA,EAC5C;AACA,QAAM,UAAU,IAAO,YAAsC;AAC7D,QAAM,UAAU,gDACX,UADW;AAAA,IAEd;AAAA,IACA,MAAM;AAAA,MACF,UAAU,EAAE,OAAO;AAEzB,QAAM,eACJ,QAAQ,mBAAmB,WAAW,QAAQ,QAAQ,IAAI,QAAQ;AACpE,OAAK,QAAQE,MAAK,IAAI,QAAQ,KAAK,SAAS,KAAK,KAAK;AACtD,oBAAkB,QAAQ,KAAK,KAAK;AACpC,aAAW,QAAQ,KAAK,cAAc,KAAK;AAC3C,QAAM,QAAQ,QAAQ,OAAO;AAC7B,gBAAQ,YAAR,mBAAiB;AAAA,IAAQ,CAAC,WACxB,OAAO;AAAA,MACL,SAAS,CAAC,SAAS,SAAS,OAAO,MAAM,KAAK;AAAA,MAC9C,OAAO,CAAC,WAA6B,UAAU,OAAO,QAAQ,KAAK;AAAA,IACrE,CAAC;AAAA;AAEH,QAAM,QAAQ,aAAa,KAAK,KAAK;AACrC,SAAO;AACT;;;AyBtDA,YAAYC,SAAQ;;;ACApB,SAAS,QAAAC,aAAY;AAkCd,IAAM,gBAAgB,CAAiB,SAC5C,KAAK,UAAU,IAAI;;;ADRd,SAAS,qBACd,SACA,QAAe,SAAS,OACN;AAClB,QAAM,UAAU,IAAO,YAAsB;AAC7C,SAAO,OAAO;AAAA,IACZ,CAAC,QAAyB;AAjC9B;AAkCM,YAAM,SAAS,cAAc,GAAG;AAChC,YAAM,SAAyB,EAAE,KAAK,QAAQ,KAAK,OAAO;AAC1D,YAAM,UAAU,GAAG,QAAQ,OAAO;AAClC,YAAM,WAAW,SAAS,EAAE,KAAK,SAAS,MAAM,OAAO,GAAG,KAAK;AAC/D,YAAM,QAAwB,WAC1B,QAAQ,QAAQ,IAChB;AAAA,QACE;AAAA,UACE,KAAK;AAAA,UACL,SACE,QAAQ,mBAAmB,WACvB,QAAQ,QAAQ,GAAG,IACnB,QAAQ;AAAA,UACd,UAAS,aAAQ,YAAR,iCAAkB;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACJ,cAAQ,KAAK,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,KAAK,QAAQ;AAAA,MACb,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,iCACd,SACA,OAC8B;AAC9B,QAAM,OAAO,OAAO,KAAK;AACzB,QAAM,UAAU,IAAO,YAAkC;AACzD,SAAO,OAAO;AAAA,IACZ,CAAC,QAAqC;AACpC,YAAM,SAAS,cAAc,GAAG;AAChC,YAAM,SAAyB,EAAE,KAAK,QAAQ,KAAK,OAAO;AAC1D,YAAM,UAAU,GAAG,QAAQ,OAAO;AAClC,YAAM,WAAW,KAAK,kBAAkB,IAAI,OAAO;AACnD,UAAI,UAAU;AACZ,eAAO,QAAQ,QAAQ;AAAA,MACzB;AACA,aAAO;AAAA,QACL;AAAA,UACE,KAAK;AAAA,UACL,KAAK,QAAQ,IAAI,GAAG;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,KAAK,QAAQ;AAAA,MACb,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF;AAUO,SAAS,yBACd,SACA,QAAe,SAAS,OAC6B;AACrD,QAAM,aAAa,EAAE,SAAS;AAE9B,MAAI,YAAY;AACd,WAAO,iCAAiC,SAAS,KAAK;AAAA,EACxD;AACA,QAAM,OAAO,OAAO,KAAK;AACzB,QAAM,UAAU,IAAO,YAA0B;AAEjD,SAAO,OAAO;AAAA,IACZ,CAAC,QAA6B;AAC5B,YAAM,SAAS,cAAc,GAAG;AAChC,YAAM,SAAyB,EAAE,KAAK,QAAQ,KAAK,OAAO;AAC1D,YAAM,UAAU,GAAG,QAAQ,OAAO;AAClC,YAAM,WAAW,KAAK,UAAU,IAAI,OAAO;AAC3C,UAAI,UAAU;AACZ,eAAO,QAAQ,QAAQ;AAAA,MACzB;AACA,YAAM,QAAQ;AAAA,QACZ;AAAA,UACE,KAAK;AAAA,UACL,KAAK,QAAQ,IAAI,GAAG;AAAA,UACpB,KAAK,QAAQ,IAAI,GAAG;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,cAAQ,KAAK,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,KAAK,QAAQ;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AACF;;;AE7IA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACwBO,IAAM,kBAAkB,CAC7B,QAAe,SAAS,UACkB;AAC1C,QAAM,gCAAgC,KAAqB;AAAA,IACzD,KAAK;AAAA,IACL,SAAS,MACP,CAAC,GAAG,MAAM,KAAK,EAAE,OAAuB,CAAC,KAAK,CAAC,GAAG,MAAM;AACtD,UAAI,GAAG,IAAI,EAAE,KAAK,MAAM,OAAO;AAC/B,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,IACP,SAAS;AAAA,MACP,CAAC,EAAE,QAAQ,MAAM;AACf,cAAM,QAAQ,aAAa,UAAU,CAAC,cAAc;AAClD,cAAI,MAAM,UAAU,MAAM;AACxB;AAAA,UACF;AACA,kBAAQ,CAAC,UAAU;AACjB,kBAAM,EAAE,KAAK,OAAO,IAAI;AACxB,gBAAI,QAAQ;AACV,oBAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AACnC,oBAAM,UAAU,MAAM,SAAS;AAC/B,kBAAI,YAAY,UAAa,mBAAmB,SAAS;AACvD,sBAAM,iBAAiB,WAAW;AAAA,kBAChC,KAAK;AAAA,kBACL,eAAe,CAAC;AAAA,gBAClB;AACA,uBAAO,iCACF,QADE;AAAA,kBAEL,CAAC,SAAS,GAAG,iCACR,iBADQ;AAAA,oBAEX,eAAe,iCACV,eAAe,gBADL;AAAA,sBAEb,CAAC,MAAM,GAAG;AAAA,oBACZ;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AACA,mBAAO,iCACF,QADE;AAAA,cAEL,CAAC,GAAG,GAAG;AAAA,YACT;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAAA,IACd,KAAK;AAAA,IACL,KAAK,CAAC,EAAE,IAAI,MAAM,IAAI,6BAA6B;AAAA,EACrD,CAAC;AACH;AAEO,IAAM,sBAAsB,CACjC,QAAe,SAAS,UACsB;AAC9C,QAAM,4CAA4C,KAAyB;AAAA,IACzE,KAAK;AAAA,IACL,SAAS,MACP,OAAO;AAAA,MACL,CAAC,GAAG,MAAM,iBAAiB,EAAE,OAA2B,CAAC,KAAK,CAAC,GAAG,MAAM;AACtE,YAAI,GAAG,IAAI,EAAE,KAAK,MAAM,oBAAoB;AAC5C,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,MACL,CAAC,GAAG,MAAM,SAAS,EAAE,OAA2B,CAAC,KAAK,CAAC,GAAG,MAAM;AAC9D,YAAI,GAAG,IAAI,EAAE,KAAK,MAAM,WAAW;AACnC,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,IACP;AAAA,IACF,SAAS;AAAA,MACP,CAAC,EAAE,QAAQ,MAAM;AACf,cAAM,QAAQ,iBAAiB,UAAU,CAAC,kBAAkB;AAC1D,cAAI,MAAM,UAAU,MAAM;AACxB;AAAA,UACF;AACA,kBAAQ,CAAC,UAAU;AACjB,kBAAM,EAAE,KAAK,OAAO,IAAI;AACxB,gBAAI,QAAQ;AACV,oBAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AACnC,oBAAM,UAAU,MAAM,SAAS;AAC/B,kBAAI,YAAY,UAAa,mBAAmB,SAAS;AACvD,sBAAM,iBAAiB,WAAW;AAAA,kBAChC,KAAK;AAAA,kBACL,eAAe,CAAC;AAAA,gBAClB;AACA,uBAAO,iCACF,QADE;AAAA,kBAEL,CAAC,SAAS,GAAG,iCACR,iBADQ;AAAA,oBAEX,eAAe,iCACV,eAAe,gBADL;AAAA,sBAEb,CAAC,MAAM,GAAG;AAAA,oBACZ;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AACA,mBAAO,iCACF,QADE;AAAA,cAEL,CAAC,GAAG,GAAG;AAAA,YACT;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAAA,IACd,KAAK;AAAA,IACL,KAAK,CAAC,EAAE,IAAI,MAAM,IAAI,yCAAyC;AAAA,EACjE,CAAC;AACH;;;AChIO,IAAM,kBAAkB,CAC7B,QAAe,SAAS,UAIrB;AACH,SAAO;AAAA,IACL,qBAAqB,gBAAgB,KAAK;AAAA,IAC1C,yBAAyB,oBAAoB,KAAK;AAAA,EACpD;AACF;;;AChBA,OAAOC,WAAU;AACjB,YAAYC,SAAQ;AA0Cb,IAAM,wBAAwB,CACnC,KACA,UAMA,OAAO,KAAK,EACT,cAAc,aAAa,GAAG,EAC9B,OAAO,CAAC,EAAE,OAAO,MAAM,WAAW,GAAG,EACrC,IAAI,CAAC,EAAE,OAAO,MAAM,OAAO,QAAQ,KAAK,CAAC;AAEvC,IAAM,qBAAqB,CAChC,aACA,YACA,UACyB;AACzB,QAAM,QAA8B,CAAC;AAErC,QAAM,UAAU,sBAAsB,WAAW,KAAK,KAAK;AAC3D,MAAI,QAAQ;AACZ,SAAO,QAAQ,SAAS,GAAG;AAEzB,UAAM,SAAS,QAAQ,MAAM;AAC7B,MAAE;AACF,QAAI,QAAQ,KAAK;AACf,YAAM,IAAI;AAAA,QACR,2DAA2D;AAAA,MAC7D;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,QAAQ;AAC1B,cAAQ,KAAK,GAAG,sBAAsB,OAAO,KAAK,KAAK,CAAC;AAAA,IAC1D,OAAO;AACL,YAAM,KAAK,MAAM;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,wBAAwB,CACnC,aACA,UACyB;AACzB,QAAM,UAAU,sBAAsB,aAAa,KAAK;AACxD,SAAO,QAAQ;AAAA,IAAQ,CAAC,WACtB,OAAO,SAAS,SACZ,SACA,mBAAmB,aAAa,QAAQ,KAAK;AAAA,EACnD;AACF;AAEO,IAAM,sBAAsB,CACjC,aACA,YACA,UACS;AArGX;AAsGE,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,WAAW,SAAS,QAAQ;AAC9B,SAAK,gBAAgB,KAAK,cAAc,IAAI;AAAA,MAC1C;AAAA,MACA,SAAS,WAAW;AAAA,IACtB,CAAC;AACD,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB,0BAA0B,iBAAiB,WAAW;AAAA;AAExD;AAAA,EACF;AACA,QAAM,QAAQ,mBAAmB,aAAa,YAAY,KAAK;AAC/D,cAAM,OAAO,WAAb,mBAAqB;AAAA,IACnB,2BAA2B;AAAA,IAC3B,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA;AAExB,aAAW,QAAQ,OAAO;AACxB,SAAK,gBAAgB,KAAK,cAAc,IAAI;AAAA,MAC1C;AAAA,MACA,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AAEO,IAAM,mBAAmB,CAC9B,aACA,QAAe,SAAS,WACP;AAAA,EACjB,KAAK,CAAC,eAAe;AAlIvB;AAmII,UAAM,OAAO,OAAO,KAAK;AACzB,UAAM,oBAAoB,KAAK,cAC5B,aAAa,WAAW,EACxB,KAAK,CAAC,EAAE,OAAO,MAAM,WAAW,WAAW,GAAG;AAEjD,UAAM,kBAAkB,SAAS,YAAY,KAAK;AAClD,QAAI,oBAAoB,MAAM;AAC5B,YAAM,IAAI;AAAA,QACR,UAAU,WAAW;AAAA,MACvB;AAAA,IACF;AACA,UAAM,kBAAkB,mBAAmB,iBAAiB,KAAK;AAEjE,QAAI,mBAAmB;AACrB,kBAAM,OAAO,WAAb,mBAAqB;AAAA,QACnB,SAAS,kBAAkB,WAAW;AAAA,QACtC;AAAA;AAAA,IAEJ,OAAO;AACL,kBAAM,OAAO,WAAb,mBAAqB;AAAA,QACnB,+BAAwB,sBAAsB,WAAW;AAAA,QACzD;AAAA,QACA;AAAA;AAEF,WAAK,gBAAgB,KAAK,cAAc;AAAA,QACtC,EAAE,MAAM,WAAW,KAAK,IAAI,YAAY;AAAA,QACxC;AAAA,UACE,QAAQ,WAAW;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AACA,wBAAoB,aAAa,YAAY,KAAK;AAClD,WAAO;AAAA,EACT;AAAA,EACA,KAAK,CAAC,YAAY,aAAa;AAC7B,UAAM,QAAQ,SAAS,YAAY,KAAK;AACxC,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI;AAAA,QACR,UAAU,WAAW;AAAA,MACvB;AAAA,IACF;AACA,uBAAmB,OAAO,UAAU,KAAK;AAAA,EAC3C;AACF;AAYO,SAAS,mBACd,SACA,QACA,QAAe,SAAS,OACqB;AA9L/C;AA+LE,QAAM,OAAO,OAAO,KAAK;AACzB,MAAIC,MAAK,IAAI,QAAQ,KAAK,KAAK,SAAS,GAAG;AACzC,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAEA,QAAM,UAAU,IAAO,YAAsC;AAE7D,QAAM,EAAE,KAAK,IAAI,IAAI,iBAAiB,QAAQ,KAAK,KAAK;AACxD,QAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,QAAQ,IAAI,EAAE,IAAI,CAAC;AACjC,eAAW,QAAQ,KAAK,OAAO,KAAK;AACpC,WAAO;AAAA,EACT;AACA,MAAI,EAAE,SAAS,UAAU;AACvB,UAAM,mBAAwC,gDACzC,UADyC;AAAA,MAE5C;AAAA,MACA,KAAK;AAAA,MACL,MAAM;AAAA,QACF,UAAU,EAAE,OAAO;AAEzB,SAAK,oBAAoBA,MAAK;AAAA,MAC5B,QAAQ;AAAA,MACR;AAAA,MACA,KAAK;AAAA,IACP;AACA,UAAMC,gBAAe,QAAQ;AAC7B,gBAAM,OAAO,WAAb,mBAAqB,KAAK,cAAS,QAAQ,UAAUA;AACrD,UAAMC,SAAkC;AAAA,MACtC,KAAK,QAAQ;AAAA,MACb,MAAM;AAAA,MACN;AAAA,IACF;AACA,UAAM,QAAQ,iBAAiB,KAAKA,MAAK;AACzC,WAAOA;AAAA,EACT;AACA,QAAM,UAAU,CAAC,SAAyC;AArO5D,QAAAC;AAsOI,KAAAA,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB,KAAK,UAAU,QAAQ,eAAe;AAC3D,UAAM,WAAW,QAAQ;AACzB,UAAM,WAAW,OAAO,IAAI,EAAE,QAAQ;AACtC,eAAW,QAAQ,KAAK,UAAU,KAAK;AACvC,aAAS,QAAQ,KAAK,KAAK;AAC3B,QAAI,MAAM,kBAAkB,UAAU,QAAQ;AAC5C,cAAQ,KAAK,EAAE,UAAU,SAAS,CAAC;AAAA,IACrC;AACA,YAAQ,IAAI,EAAE,KAAK,IAAI,GAAG,QAAQ;AAAA,EACpC;AACA,QAAM,aAA0B,gDAC3B,UAD2B;AAAA,IAE9B;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,MACF,UAAU,EAAE,OAAO;AAEzB,OAAK,YAAYH,MAAK,IAAI,QAAQ,KAAK,YAAY,KAAK,SAAS;AACjE,QAAM,eAAe,QAAQ;AAC7B,cAAM,OAAO,WAAb,mBAAqB,KAAK,cAAS,QAAQ,UAAU;AACrD,QAAM,QAA0B;AAAA,IAC9B,KAAK,QAAQ;AAAA,IACb,MAAM;AAAA,IACN;AAAA,EACF;AACA,QAAM,QAAQ,iBAAiB,KAAK,KAAK;AACzC,SAAO;AACT;;;AClQA,OAAOI,WAAU;AAmBV,IAAM,kBAAkB,CAC7B,OACA,QAAe,SAAS,UACf;AAtBX;AAuBE,QAAM,OAAO,OAAO,KAAK;AACzB,QAAM,aAAa,KAAK,cAAc,aAAa,MAAM,GAAG;AAC5D,QAAM,iBAAiB,WAAW,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;AACpD,cAAM,OAAO,WAAb,mBAAqB;AAAA,IACnB,SAAS,eAAe;AAAA,IACxB;AAAA;AAEF,MAAI,KAAK,UAAU,MAAM;AACvB,gBAAM,OAAO,WAAb,mBAAqB,KAAK,SAAS,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG;AAAA,EAC/D;AACA,aAAW,QAAQ,CAAC,EAAE,IAAI,SAAS,MAAM;AAjC3C,QAAAC,KAAAC,KAAA;AAkCI,QAAI,OAAO,UAAU,KAAK,GAAG;AAC3B,OAAAD,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB,KAAK,SAAS;AACnC;AAAA,IACF;AACA,UAAME,UACJD,MAAAE,MAAK,IAAI,UAAU,KAAK,SAAS,MAAjC,OAAAF,MACAE,MAAK,IAAI,UAAU,KAAK,iBAAiB;AAC3C,QAAI,CAACD,QAAO;AACV,kBAAM,OAAO,WAAb,mBAAqB;AAAA,QACnB,SAAS;AAAA;AAEX;AAAA,IACF;AACA,qBAAiB,UAAU,KAAK;AAChC,gBAAM,OAAO,WAAb,mBAAqB,KAAK,kBAAkB;AAE5C,aAAS,UAAU,KAAK;AAAA,EAC1B,CAAC;AACH;AAEO,IAAM,eAAe,CAC1BE,OACA,MACA,QAAe,SAAS,UACf;AA1DX;AA2DE,QAAM,WAAW,mBAAmBA,OAAM,KAAK;AAC/C,QAAM,WAAW,OAAO,IAAI,EAAE,QAAQ;AACtC,cAAM,OAAO,WAAb,mBAAqB,KAAK,oBAAoBA,MAAK,WAAW;AAC9D,aAAWA,MAAK,KAAK,UAAU,KAAK;AACpC,MAAI,cAAcA,MAAK,KAAK,KAAK,GAAG;AAClC,yBAAqBA,MAAK,KAAK,KAAK;AAAA,EACtC;AACA,WAASA,MAAK,KAAK,KAAK;AACxB,cAAM,OAAO,WAAb,mBAAqB;AAAA,IACnB,0CAA0CA,MAAK;AAAA;AAEjD,kBAAgBA,OAAM,KAAK;AAC3B,QAAM,SAAS,EAAE,UAAU,SAAS;AACpC,MAAI,MAAM,kBAAkB,UAAU,YAAY;AAChD,eAAWA,OAAM,QAAQ,KAAK;AAAA,EAChC,OAAO;AACL,eAAWA,OAAM,QAAQ,KAAK;AAAA,EAChC;AACF;AACO,IAAM,mBAAmB,CAC9BC,WACA,MACA,QAAe,SAAS,UACf;AAlFX;AAmFE,QAAM,WAAW,mBAAmBA,WAAU,KAAK;AACnD,QAAM,WAAW,OAAO,IAAI,EAAE,QAAQ;AAEtC,cAAM,OAAO,WAAb,mBAAqB,KAAK,wBAAwBA,UAAS,WAAW;AACtE,cAAM,OAAO,WAAb,mBAAqB,KAAK,qCAAqCA,UAAS;AAExE,EAAAA,UAAS,IAAI,QAAQ;AACvB;AACO,IAAM,qBAAqB,CAChC,OACA,OACA,QAAe,SAAS,UACf;AACT,MAAI,SAAS,OAAO;AAClB,qBAAiB,OAAO,OAAO,KAAK;AAAA,EACtC,OAAO;AACL,iBAAa,OAAO,OAAO,KAAK;AAAA,EAClC;AACF;;;AC5FO,IAAM,gBAAgB,CAC3B,OACA,UACmB;AACnB,QAAM,WAAW,YAAY,OAAO,KAAK;AACzC,QAAM,WAAW,mBAAmB,OAAO,KAAK;AAChD,SAAO,EAAE,UAAU,SAAS;AAC9B;AAEO,IAAM,aAAa,CACxB,OACA,QACA,UACS;AAtBX;AAuBE,QAAM,EAAE,IAAI,IAAI;AAChB,QAAM,EAAE,OAAO,IAAI,MAAM;AACzB,MAAI,MAAM,kBAAkB,UAAU,YAAY;AAChD,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB;AAAA;AAEF;AAAA,EACF;AACA,QAAM,kBAAkB,YAAY,KAAK,iBAAE,OAAQ,OAAQ;AAC3D,mCAAQ,KAAK,aAAM,gBAAgB,OAAO,UAAU,MAAM,OAAO,UAAU;AAC7E;AAEO,IAAM,aAAa,CACxB,OACA,QACA,UACS;AACT,QAAM,EAAE,IAAI,IAAI;AAChB,QAAM,EAAE,OAAO,IAAI,MAAM;AACzB,mCAAQ;AAAA,IACN,aAAM,MAAM,SAAS;AAAA,IACrB,OAAO;AAAA,IACP;AAAA,IACA,OAAO;AAAA,IACP;AAAA;AAEF,QAAM,QAAQ,KAAK,MAAM;AAC3B;AAEO,IAAM,uBAAuB,CAClC,OACA,UACyC;AACzC,QAAM,0BACJ,aAAa,QACT,OACA,sBAAsB,MAAM,KAAK,KAAK,EAAE,IAAI,CAAC,cAAc;AACzD,UAAMC,QAAO,SAAS,WAAW,KAAK;AACtC,QAAIA,UAAS,MAAM;AACjB,YAAM,IAAI;AAAA,QACR,SAAS,UAAU,mCAAmC,MAAM,6BAA6B,MAAM,OAAO;AAAA,MACxG;AAAA,IACF;AACA,WAAOA,MAAK,QAAQ,UAAU,CAAC,eAAe;AAlExD;AAmEY,kBAAM,OAAO,WAAb,mBAAqB;AAAA,QACnB,uBAAgB,MAAM,kBAAkB,UAAU;AAAA,QAClD,WAAW;AAAA,QACX;AAAA,QACA,WAAW;AAAA,QACX;AAAA;AAEF,YAAM,WAAW,YAAY,OAAO,KAAK;AACzC,YAAM,WAAW,mBAAmB,OAAO,KAAK;AAChD,kBAAM,OAAO,WAAb,mBAAqB,KAAK,SAAS,MAAM,cAAc;AACvD,YAAM,QAAQ,KAAK,EAAE,UAAU,SAAS,CAAC;AAAA,IAC3C,CAAC;AAAA,EACH,CAAC;AACP,SAAO;AACT;;;AC5EO,IAAM,iBAAiB,CAC5B,OACA,QAAe,SAAS,UACf;AARX;AASE,cAAM,OAAO,WAAb,mBAAqB,KAAK,gBAAW,MAAM;AAC3C,QAAM,eAAe,MAAM,cAAc,IAAI,MAAM,GAAG;AACtD,MAAI,CAAC,cAAc;AACjB,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB,+BAA+B,MAAM;AAAA;AAEvC;AAAA,EACF;AACA,MAAI,aAAa,OAAO,aAAa,QAAQ,QAAQ;AACnD,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB,0CAA0C,MAAM;AAAA;AAElD;AAAA,EACF;AACA,eAAa,gBAAgB;AAC7B,QAAM,SAAS,aAAa,QAAQ,aAAa,EAAE;AACnD,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,eAAe;AAClB,YAAM,EAAE,KAAK,SAAS,IAAI;AAC1B,eAAS,EAAE,KAAK,MAAM,OAAO,GAAG,QAAQ;AACxC;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK,sBAAsB;AACzB,iBAAW,cAAc,OAAO,aAAa;AAC3C,cAAM,EAAE,KAAK,SAAS,IAAI;AAC1B,iBAAS,EAAE,KAAK,MAAM,OAAO,GAAG,QAAQ;AAAA,MAC1C;AACA;AAAA,IACF;AAAA,EACF;AACA,IAAE,aAAa;AACf,eAAa,gBAAgB;AAC7B,cAAM,OAAO,WAAb,mBAAqB;AAAA,IACnB,iBAAO,MAAM,kBAAkB,aAAa,QAAQ,aAAa,QAAQ;AAAA;AAE7E;AAEO,IAAM,iBAAiB,CAC5B,OACA,QAAe,SAAS,UACf;AAlDX;AAmDE,cAAM,OAAO,WAAb,mBAAqB,KAAK,gBAAW,MAAM;AAC3C,QAAM,eAAe,MAAM,cAAc,IAAI,MAAM,GAAG;AACtD,MAAI,CAAC,cAAc;AACjB,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB,+BAA+B,MAAM;AAAA;AAEvC;AAAA,EACF;AACA,MAAI,aAAa,OAAO,GAAG;AACzB,gBAAM,OAAO,WAAb,mBAAqB;AAAA,MACnB,gDAAgD,MAAM;AAAA;AAExD;AAAA,EACF;AACA,eAAa,gBAAgB;AAE7B,IAAE,aAAa;AACf,QAAM,SAAS,aAAa,QAAQ,aAAa,EAAE;AACnD,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,eAAe;AAClB,YAAM,EAAE,KAAK,SAAS,IAAI;AAC1B,eAAS,EAAE,KAAK,MAAM,OAAO,GAAG,QAAQ;AACxC;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK,sBAAsB;AACzB,iBAAW,cAAc,OAAO,aAAa;AAC3C,cAAM,EAAE,KAAK,SAAS,IAAI;AAC1B,iBAAS,EAAE,KAAK,MAAM,OAAO,GAAG,QAAQ;AAAA,MAC1C;AACA;AAAA,IACF;AAAA,EACF;AACA,eAAa,gBAAgB;AAC7B,cAAM,OAAO,WAAb,mBAAqB;AAAA,IACnB,iBAAO,MAAM,kBAAkB,aAAa,QAAQ,aAAa,QAAQ;AAAA;AAE7E;;;ACxFA,OAAOC,WAAU;AAuCV,SAAS,mBACd,SACA,QAAe,SAAS,OACT;AA1CjB;AA2CE,QAAM,eAA6B;AAAA,IACjC,IAAI;AAAA,IACJ,eAAe;AAAA,IACf,SAAS,CAAC;AAAA,IACV,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAEA,QAAM,kBAAkB,CAACC,WAA0B;AACjD,UAAM,QAAQ,SAASA,QAAO,KAAK;AACnC,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI;AAAA,QACR,6BAA6BA,OAAM,sDAAsD,MAAM,OAAO;AAAA,MACxG;AAAA,IACF;AACA,UAAM,QAAQ,UAAU,CAAC,WAAW;AA1DxC,UAAAC,KAAAC,KAAA;AA2DM,YAAM,0BACJ,MAAM,UAAU,QAAQ,MAAM,UAAU,MAAM,SAAS,aACnD,MAAM,UAAU,MAAM,MACtB;AACN,YAAM,2BACJ,MAAM,UAAU,QAAQ,MAAM,UAAU,MAAM,SAAS,aACnD,MAAM,UAAU,OAChB;AAEN,YAAM,6BACJ,MAAM,kBAAkB,UAAU,aAC9B,MAAM,kBAAkB,MACxB;AACN,OAAAD,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB;AAAA,QACnB,oBAAe,QAAQ,kBAAkBD,OAAM;AAAA,QAC/C,OAAO;AAAA,QACP;AAAA,QACA,OAAO;AAAA,QACP,6BACI,qBAAqB,gCACrB,0BACA,kBAAkB,6BAClB;AAAA;AAGN,UACE,8BACA,MAAM,kBAAkB,UAAU,YAClC;AACA,cAAM,qBAAqB;AAAA,UACzB,EAAE,KAAK,4BAA4B,MAAM,cAAc;AAAA,UACvD;AAAA,QACF;AACA,YAAI,uBAAuB,MAAM;AAC/B,gBAAM,IAAI;AAAA,YACR,gBAAgB,mDAAmD,MAAM,OAAO,0EAA0E;AAAA,UAC5J;AAAA,QACF;AACA,YAAI,aAAa,mBAAmB,4BAA4B;AAC9D,cAAI,aAAa,gBAAgB;AAC/B,aAAAE,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB;AAAA,cACnB,aAAa,QAAQ,2CAA2C,aAAa;AAAA;AAAA,UAEjF;AACA,uBAAa,iBAAiB;AAC9B,gBAAM,eAAe,mBAAmB,QAAQ,UAAU,CAACC,YAAW;AAxGhF,gBAAAF;AAyGY,gBAAI,aAAa,kBAAkB,OAAO;AACxC,kBAAI,aAAa,OAAO,aAAa,QAAQ,QAAQ;AACnD,6BAAa,QAAQ,OAAO,aAAa,EAAE;AAAA,cAC7C;AACA,2BAAa,QAAQ,KAAK;AAAA,gBACxB,MAAM;AAAA,iBACHE,UAFqB;AAAA,gBAGxB,aAAaA,QAAO,YAAY;AAAA,kBAAO,CAAC,eACtC,QAAQ,MAAM,KAAK,CAACC,UAASA,MAAK,QAAQ,WAAW,GAAG;AAAA,gBAC1D;AAAA,cACF,EAAC;AAAA,YACH;AACA,yBAAa,KAAK,aAAa,QAAQ;AACvC,yBAAa,YAAY;AACzB,yBAAa,iBAAiB;AAC9B,aAAAH,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB;AAAA,cACnB,oBAAe,QAAQ,kCAAkCE,QAAO;AAAA;AAAA,UAEpE,CAAC;AAAA,QACH;AAAA,MACF,WAAW,yBAAyB;AAClC,YAAI,aAAa,kBAAkB,OAAO;AACxC,cAAI,6BAA6B,aAAa,cAAc;AAC1D,kBAAM,oBAA4C;AAAA,cAChD,MAAM;AAAA,cACN,KAAK;AAAA,cACL,aAAa,CAAC;AAAA,YAChB;AACA,8BAAkB,YAAY,KAAK;AAAA,cACjC,KAAKH,OAAM;AAAA,cACX,MAAM;AAAA,eACH,OACJ;AACD,gBAAI,aAAa,OAAO,aAAa,QAAQ,QAAQ;AACnD,2BAAa,QAAQ,OAAO,aAAa,EAAE;AAAA,YAC7C;AACA,yBAAa,QAAQ,KAAK,iBAAiB;AAE3C,wBAAM,OAAO,WAAb,mBAAqB;AAAA,cACnB,oBAAe,QAAQ,+BAA+B;AAAA,cACtD,kBAAkB,YAAY,IAAI,CAAC,eAAe,WAAW,GAAG;AAAA;AAElE,yBAAa,KAAK,aAAa,QAAQ;AACvC,yBAAa,eAAe;AAAA,UAC9B,OAAO;AACL,kBAAM,eAAe,aAAa,QAAQ,GAAG,EAAE;AAC/C,iBAAI,6CAAc,UAAS,mBAAmB;AAC5C,2BAAa,YAAY,KAAK;AAAA,gBAC5B,KAAKA,OAAM;AAAA,gBACX,MAAM;AAAA,iBACH,OACJ;AACD,0BAAM,OAAO,WAAb,mBAAqB;AAAA,gBACnB,uBAAkB,QAAQ,6BAA6B;AAAA,gBACvD,6CAAc,YAAY,IAAI,CAAC,eAAe,WAAW;AAAA;AAAA,YAE7D;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,YAAI,aAAa,kBAAkB,OAAO;AACxC,uBAAa,eAAe;AAC5B,cAAI,aAAa,OAAO,aAAa,QAAQ,QAAQ;AACnD,yBAAa,QAAQ,OAAO,aAAa,EAAE;AAAA,UAC7C;AACA,uBAAa,QAAQ,KAAK;AAAA,YACxB,MAAM;AAAA,YACN,KAAKA,OAAM;AAAA,YACX,UAAU,OAAO;AAAA,YACjB,UAAU,OAAO;AAAA,UACnB,CAAC;AACD,sBAAM,OAAO,WAAb,mBAAqB;AAAA,YACnB,oBAAe,QAAQ,+BAA+BA,OAAM;AAAA;AAE9D,uBAAa,KAAK,aAAa,QAAQ;AAAA,QACzC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,OAAO,OAAO,KAAK;AACzB,aAAW,iBAAiB,QAAQ,OAAO;AACzC,UAAM,cAAc,KAAK,cAAc,aAAa,cAAc,GAAG;AACrE,QAAI,aAAa;AACf,kBAAM,OAAO,WAAb,mBAAqB;AAAA,QACnB,8BAAyB,cAAc,qBAAqB,QAAQ,wCAAwC;AAAA;AAE9G;AAAA,IACF;AACA,QAAI,cAAc,SAAS,eAAe;AACxC,YAAM,SAAS;AACf,aAAO,QAAQ,UAAU,CAACA,WAAU,gBAAgBA,MAAK,CAAC;AAAA,IAC5D,OAAO;AACL,YAAMA,SAAQ;AACd,UAAI,YAAYA,UAASA,OAAM,QAAQ;AACrC,cAAM,oBAAoB,KAAK,cAAc;AAAA,UAC3CA,OAAM,OAAO;AAAA,QACf;AACA,YAAI,mBAAmB;AACrB,sBAAM,OAAO,WAAb,mBAAqB;AAAA,YACnB,8BAAyBA,OAAM,qBAAqB,QAAQ,4BAA4BA,OAAM,OAAO,6BAA6B;AAAA;AAEpI;AAAA,QACF;AAAA,MACF;AACA,sBAAgBA,MAAK;AAAA,IACvB;AACA,SAAK,gBAAgB,KAAK,cAAc,IAAI;AAAA,MAC1C,SAAS,cAAc;AAAA,MACvB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,QAAM,gBAAgBK,MAAK,IAAI,QAAQ,KAAK,cAAc,MAAM,aAAa;AAC7E,QAAM,QAAuB;AAAA,IAC3B,KAAK,QAAQ;AAAA,IACb,MAAM;AAAA,EACR;AACA,QAAM,QAAQ,iBAAiB,KAAK,KAAK;AACzC,SAAO;AACT;;;AC5MO,SAAS,KAAQ,SAAuC;AAC7D,SAAO,eAAkB,OAAO;AAClC;AAgBO,SAAS,WACd,SACkB;AAClB,SAAO,qBAA2B,OAAO;AAC3C;;;ACpCO,IAAM,aAA0C;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,cAAc,CACzB,gBACA,QAAe,SAAS,UACf;AACT,QAAM,EAAE,iBAAiB,IAAI,MAAM;AACnC,MAAI,mBAAmB,MAAM;AAC3B,UAAM,OAAO,SAAS;AAAA,EACxB,OAAO;AACL,UAAM,OAAO,SAAS,mBAAK;AAC3B,eAAW,QAAQ,CAAC,aAAa;AAC/B,UAAI,WAAW,QAAQ,QAAQ,IAAI,WAAW,QAAQ,cAAc,GAAG;AAErE,cAAM,OAAO,OAAQ,QAAQ,IAAI;AAAA,MACnC,OAAO;AAEL,cAAM,OAAO,OAAQ,QAAQ,IAAI,iBAAiB,QAAQ;AAAA,MAC5D;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,YAAY,CACvB,QACA,QAAe,SAAS,UACf;AApCX;AAqCE,QAAM,kBACJ,MAAM,OAAO,WAAW,OACpB,QACA,gBAAW;AAAA,IACT,CAAC,aAAU;AAzCrB,UAAAC;AAyCwB,eAAAA,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAsB,eAAc;AAAA;AAAA,EACpD,MAFA,YAEK;AACX,QAAM,OAAO,mBAAmB,mBAAK;AACrC,cAAY,iBAAiB,KAAK;AACpC;;;ACvBO,SAAS,SACd,SAC6C;AAC7C,SAAO,mBAAmB,OAAO;AACnC;AAkCO,SAAS,eACd,SACqD;AACrD,SAAO,yBAAyB,OAAO;AACzC;;;AC/CO,IAAM,OAAO,CAClB,SAYG;AACH,QAAM,QAAQ,YAAY,IAAI;AAC9B,SAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC,YAAY,eAAe,SAAS,QAAW,KAAK;AAAA,IAC3D,YAAY,CAAC,YAAY,qBAAqB,SAAS,KAAK;AAAA,IAC5D,UAAU,CAAC,YAAY,mBAAmB,SAAS,QAAW,KAAK;AAAA,IACnE,gBAAgB,CAAC,YAAY,yBAAyB,SAAS,KAAK;AAAA,IACpE,aAAa,CAAC,YAAY,sBAAsB,SAAS,KAAK;AAAA,IAC9D,UAAU,CAAC,YAAY,mBAAmB,SAAS,KAAK;AAAA,IACxD,UAAU,CAAC,UAAU,SAAS,OAAO,KAAK;AAAA,IAC1C,UAAU,CAAC,OAAO,aAAa,SAAS,OAAO,UAAU,KAAK;AAAA,IAC9D,WAAW,CAAC,OAAO,YAAY,UAAU,OAAO,SAAS,KAAK;AAAA,EAChE;AACF;;;ACnCO,IAAM,YAAY,CACvB,OACA,cACA,QAAe,SAAS,UACP;AAbnB;AAcE,QAAM,QAAQ,SAAY,OAAO,KAAK;AACtC,MAAI,UAAU,MAAM;AAClB,UAAM,IAAI;AAAA,MACR,UAAU,MAAM;AAAA,IAClB;AAAA,EACF;AACA,QAAM,eAAe,MAAM,QAAQ,UAAU,YAAY;AACzD,cAAM,OAAO,WAAb,mBAAqB,KAAK,2BAAoB,MAAM;AACpD,QAAM,0BACJ,MAAM,SAAS,SAAS,qBAAqB,OAAO,KAAK,IAAI;AAE/D,QAAM,cACJ,4BAA4B,OACxB,MAAM;AA3Bd,QAAAC;AA4BU,KAAAA,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB,KAAK,+BAAwB,MAAM;AACxD,iBAAa,YAAY;AAAA,EAC3B,IACA,MAAM;AA/Bd,QAAAA;AAgCU,KAAAA,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB;AAAA,MACnB,+BAAwB,MAAM;AAAA;AAEhC,iBAAa,YAAY;AACzB,eAAW,0BAA0B,yBAAyB;AAC5D,6BAAuB,YAAY;AAAA,IACrC;AAAA,EACF;AAEN,SAAO;AACT;AAMO,IAAM,yBAAyB,CACpC,OACA,cACA,QAAQ,SAAS,UACA;AApDnB;AAqDE,QAAM,KAAK,SAAS,OAAO,KAAK;AAChC,MAAI,OAAO,MAAM;AACf,UAAM,IAAI;AAAA,MACR,oCAAoC,MAAM,yCAAyC,MAAM,OAAO;AAAA,IAClG;AAAA,EACF;AACA,cAAM,OAAO,WAAb,mBAAqB,KAAK,uCAAgC,MAAM;AAChE,QAAM,eAAe,GAAG,QAAQ,UAAU,YAAY;AACtD,QAAM,cAAc,MAAM;AA7D5B,QAAAA;AA8DI,KAAAA,MAAA,MAAM,OAAO,WAAb,gBAAAA,IAAqB,KAAK,2CAAoC,MAAM;AACpE,iBAAa,YAAY;AAAA,EAC3B;AACA,SAAO;AACT;;;ACpDO,IAAM,WAAW,CAAC,YAA4C;AACnE,SAAO,mBAAmB,OAAO;AACnC;AAEO,IAAM,OAAO,CAAC,UAA+B;AAClD,SAAO,eAAe,OAAO,SAAS,KAAK;AAC7C;AAEO,IAAM,OAAO,CAAC,UAA+B;AAClD,SAAO,eAAe,OAAO,SAAS,KAAK;AAC7C;;;ACcO,SAAS,YACd,SACqB;AACrB,SAAO,sBAAsB,OAAO;AACtC;AAEO,IAAM,iBACX,CAAe,OAA4B,QAAe,SAAS,UACnE,IAAI,eAA6C;AAC/C,QAAM,KAAK,SAAS,OAAO,KAAK;AAChC,MAAI,IAAI;AACN,WAAO,GAAG,IAAI,GAAG,UAAU;AAAA,EAC7B;AACA,QAAM,IAAI;AAAA,IACR,2BAA2B,MAAM,yCAAyC,MAAM,OAAO;AAAA,EACzF;AACF;;;ACIK,IAAM,WAAW,CACtB,OACA,QAAe,SAAS,UAClB;AACN,QAAM,QAAQ,SAAY,OAAO,KAAK;AACtC,MAAI,UAAU,MAAM;AAClB,UAAM,IAAI;AAAA,MACR,GAAG,WAAW,MAAM,IAAI,MAAM,MAAM,4BAClC,MAAM,OAAO;AAAA,IAEjB;AAAA,EACF;AACA,SAAO,mBAAmB,OAAO,KAAK;AACxC;AAEO,IAAM,WAAW,CACtB,OACA,OACA,QAAe,SAAS,UACf;AACT,MAAI;AACF,kBAAc,OAAO,KAAK;AAAA,EAC5B,SAAS,QAAP;AACA,QAAI,EAAE,OAAO,WAAW,WAAW;AACjC,YAAM;AAAA,IACR;AACA;AAAA,EACF;AACA,QAAM,QAAQ,SAAS,OAAO,KAAK;AACnC,MAAI,UAAU,MAAM;AAClB,UAAM,IAAI;AAAA,MACR,GAAG,WAAW,MAAM,IAAI,MAAM,MAAM,4BAClC,MAAM,OAAO;AAAA,IAEjB;AAAA,EACF;AACA,qBAAmB,OAAO,OAAO,KAAK;AACtC,iBAAe,KAAK;AACtB;AAEO,IAAM,YAAY,CACvB,OACA,QAAe,SAAS,UAExB,MAAM,SAAS,SACX,cAAc,MAAM,KAAK,KAAK,IAC9B,kBAAkB,MAAM,KAAK,KAAK;","names":["HAMT","Rx","selector","HAMT","HAMT","pipe","pipe","join","pipe","pipe","isString","pipe","pipe","isString","map","map","id","pipe","HAMT","HAMT","atom","selector","HAMT","Rx","HAMT","token","HAMT","Rx","pipe","HAMT","Rx","HAMT","initialValue","token","_a","HAMT","_a","_b","state","HAMT","atom","selector","atom","HAMT","token","_a","_b","update","atom","HAMT","_a","_a"]}