atom.io 0.6.0 → 0.6.2

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 (38) hide show
  1. package/dist/index.d.mts +1 -1
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +1 -1
  6. package/src/timeline.ts +1 -1
  7. package/json/dist/index.d.mts +0 -18
  8. package/json/dist/index.d.ts +0 -18
  9. package/json/dist/index.js +0 -51
  10. package/json/dist/index.js.map +0 -1
  11. package/json/dist/index.mjs +0 -15
  12. package/json/dist/index.mjs.map +0 -1
  13. package/react/dist/index.d.mts +0 -24
  14. package/react/dist/index.d.ts +0 -24
  15. package/react/dist/index.js +0 -83
  16. package/react/dist/index.js.map +0 -1
  17. package/react/dist/index.mjs +0 -41
  18. package/react/dist/index.mjs.map +0 -1
  19. package/react-devtools/dist/index.css +0 -26
  20. package/react-devtools/dist/index.css.map +0 -1
  21. package/react-devtools/dist/index.d.mts +0 -15
  22. package/react-devtools/dist/index.d.ts +0 -15
  23. package/react-devtools/dist/index.js +0 -1582
  24. package/react-devtools/dist/index.js.map +0 -1
  25. package/react-devtools/dist/index.mjs +0 -1554
  26. package/react-devtools/dist/index.mjs.map +0 -1
  27. package/realtime/dist/index.d.mts +0 -27
  28. package/realtime/dist/index.d.ts +0 -27
  29. package/realtime/dist/index.js +0 -191
  30. package/realtime/dist/index.js.map +0 -1
  31. package/realtime/dist/index.mjs +0 -152
  32. package/realtime/dist/index.mjs.map +0 -1
  33. package/realtime-react/dist/index.d.mts +0 -45
  34. package/realtime-react/dist/index.d.ts +0 -45
  35. package/realtime-react/dist/index.js +0 -213
  36. package/realtime-react/dist/index.js.map +0 -1
  37. package/realtime-react/dist/index.mjs +0 -168
  38. package/realtime-react/dist/index.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/react-devtools/AtomIODevtools.tsx","../../src/react-devtools/TokenList.tsx","../../../anvl/src/object/index.ts","../../../anvl/src/object/refinement.ts","../../../anvl/src/object/access.ts","../../../anvl/src/object/entries.ts","../../../anvl/src/object/mapObject.ts","../../../anvl/src/array/index.ts","../../../anvl/src/function/index.ts","../../../anvl/src/nullish/index.ts","../../../anvl/src/json/index.ts","../../../anvl/src/json/refine.ts","../../../hamr/src/react-elastic-input/ElasticInput.tsx","../../../hamr/src/react-elastic-input/NumberInput.tsx","../../../anvl/src/number/clamp.ts","../../../hamr/src/react-elastic-input/TextInput.tsx","../../../hamr/src/react-json-editor/editors-by-type/utilities/array-elements.ts","../../../hamr/src/react-json-editor/json-editor-internal.tsx","../../../hamr/src/react-json-editor/editors-by-type/array-editor.tsx","../../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx","../../../anvl/src/json-schema/json-schema.ts","../../../anvl/src/json-schema/integer.ts","../../../anvl/src/json-schema/refs.ts","../../../anvl/src/json-schema/string-formats.ts","../../../anvl/src/refinement/index.ts","../../../anvl/src/json-schema/path-into.ts","../../../anvl/src/json-schema/find-sub-schema.ts","../../../anvl/src/json/cast.ts","../../../Luum/src/utils/mapObject.ts","../../../hamr/src/react-json-editor/editors-by-type/utilities/object-properties.ts","../../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx","../../../hamr/src/react-error-boundary/ErrorBoundary.tsx","../../../hamr/src/react-error-boundary/DefaultFallback.tsx","../../../hamr/src/react-json-editor/default-components.tsx","../../../hamr/src/react-json-editor/developer-interface.tsx","../../../hamr/src/react-json-editor/index.ts","../../src/react-devtools/StateEditor.tsx","../../src/web-effects/storage.ts"],"sourcesContent":["import type { FC } from \"react\"\nimport { useRef } from \"react\"\n\nimport { atom, __INTERNAL__ } from \"atom.io\"\nimport type { StoreHooks } from \"atom.io/react\"\nimport { useI, useO, useIO } from \"atom.io/react\"\nimport { LayoutGroup, motion, spring } from \"framer-motion\"\n\nimport { TokenList } from \"./TokenList\"\nimport { lazyLocalStorageEffect } from \"../web-effects\"\n\nimport \"./devtools.scss\"\n\nconst { atomTokenIndexState, selectorTokenIndexState } =\n __INTERNAL__.META.attachMetaState()\n\nconst devtoolsAreOpenState = atom<boolean>({\n key: `👁‍🗨_devtools_are_open`,\n default: true,\n effects: [lazyLocalStorageEffect(`👁‍🗨_devtools_are_open`)],\n})\n\nexport const composeDevtools = (storeHooks: StoreHooks): FC => {\n const Devtools: FC = () => {\n const constraintsRef = useRef(null)\n\n const [devtoolsAreOpen, setDevtoolsAreOpen] =\n storeHooks.useIO(devtoolsAreOpenState)\n\n const mouseHasMoved = useRef(false)\n\n return (\n <>\n <motion.span\n ref={constraintsRef}\n className=\"atom_io_devtools_zone\"\n style={{\n position: `fixed`,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: `none`,\n }}\n />\n <motion.main\n drag\n dragConstraints={constraintsRef}\n className=\"atom_io_devtools\"\n transition={spring}\n style={\n devtoolsAreOpen\n ? {}\n : {\n backgroundColor: `#0000`,\n borderColor: `#0000`,\n maxHeight: 28,\n maxWidth: 33,\n }\n }\n >\n {devtoolsAreOpen ? (\n <>\n <motion.header>\n <h1>atom.io</h1>\n </motion.header>\n <motion.main>\n <LayoutGroup>\n <section>\n <h2>atoms</h2>\n <TokenList\n storeHooks={storeHooks}\n tokenIndex={atomTokenIndexState}\n />\n </section>\n <section>\n <h2>selectors</h2>\n <TokenList\n storeHooks={storeHooks}\n tokenIndex={selectorTokenIndexState}\n />\n </section>\n </LayoutGroup>\n </motion.main>\n </>\n ) : null}\n <footer>\n <button\n onMouseDown={() => (mouseHasMoved.current = false)}\n onMouseMove={() => (mouseHasMoved.current = true)}\n onMouseUp={() => {\n if (!mouseHasMoved.current) {\n setDevtoolsAreOpen((open) => !open)\n }\n }}\n >\n 👁‍🗨\n </button>\n </footer>\n </motion.main>\n </>\n )\n }\n return Devtools\n}\n\nexport const AtomIODevtools = composeDevtools({ useI, useO, useIO })\n","import type { FC } from \"react\"\nimport { Fragment } from \"react\"\n\nimport type {\n AtomToken,\n ReadonlySelectorToken,\n SelectorToken,\n __INTERNAL__,\n} from \"atom.io\"\nimport { getState } from \"atom.io\"\nimport type { StoreHooks } from \"atom.io/react\"\n\nimport { recordToEntries } from \"~/packages/anvl/src/object\"\n\nimport { StoreEditor } from \"./StateEditor\"\n\nexport const TokenList: FC<{\n storeHooks: StoreHooks\n tokenIndex: ReadonlySelectorToken<\n __INTERNAL__.META.StateTokenIndex<\n | AtomToken<unknown>\n | ReadonlySelectorToken<unknown>\n | SelectorToken<unknown>\n >\n >\n}> = ({ storeHooks, tokenIndex }) => {\n const tokenIds = storeHooks.useO(tokenIndex)\n return (\n <>\n {Object.entries(tokenIds).map(([key, token]) => (\n <Fragment key={key}>\n {key.startsWith(`👁‍🗨_`) ? null : (\n <div className=\"node\">\n {`type` in token ? (\n <>\n <label onClick={() => console.log(token, getState(token))}>\n {key}\n </label>\n <StoreEditor storeHooks={storeHooks} token={token} />\n </>\n ) : (\n recordToEntries(token.familyMembers).map(([key, token]) => (\n <>\n <label>{key}</label>\n <div key={key} className=\"node\">\n {key}:<StoreEditor storeHooks={storeHooks} token={token} />\n </div>\n </>\n ))\n )}\n </div>\n )}\n </Fragment>\n ))}\n </>\n )\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","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","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 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 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 { 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","import { isBoolean } from \"fp-ts/boolean\"\nimport { isNumber } from \"fp-ts/number\"\nimport { isString } from \"fp-ts/string\"\n\nimport { isPlainObject } from \"~/packages/anvl/src/object/refinement\"\n\nimport { stringifyJson } from \".\"\nimport type { JsonArr, JsonObj, Json } from \".\"\nimport { attempt, raiseError } from \"../function\"\n\nexport type RefinedJson =\n | { type: `array`; data: JsonArr }\n | { type: `boolean`; data: boolean }\n | { type: `null`; data: null }\n | { type: `number`; data: number }\n | { type: `object`; data: JsonObj }\n | { type: `string`; data: string }\n\nexport const refineJsonType = (data: Json): RefinedJson =>\n data === null\n ? { type: `null`, data: null }\n : isBoolean(data)\n ? { type: `boolean`, data }\n : isNumber(data)\n ? { type: `number`, data }\n : isString(data)\n ? { type: `string`, data }\n : Array.isArray(data)\n ? { type: `array`, data }\n : isPlainObject(data)\n ? { type: `object`, data }\n : raiseError(\n data === undefined\n ? `undefined passed to refineJsonType. This is not valid JSON.`\n : `${stringifyJson(data)} with prototype \"${\n Object.getPrototypeOf(data).constructor.name\n }\" passed to refineJsonType. This is not valid JSON.`\n )\n\nexport const isJson = (input: unknown): input is Json => {\n try {\n JSON.stringify(input)\n return true\n } catch {\n return false\n }\n}\n\nexport const isPlainJson = (input: unknown): input is Json =>\n attempt(() => isJson(input) && refineJsonType(input))\n","import type { DetailedHTMLProps, InputHTMLAttributes } from \"react\"\nimport {\n useLayoutEffect,\n useImperativeHandle,\n forwardRef,\n useRef,\n useState,\n} from \"react\"\n\nexport const ElasticInput = forwardRef<\n HTMLInputElement,\n DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> & {\n widthPadding?: number\n }\n>(function ElasticInputFC(props, ref) {\n const inputRef = useRef<HTMLInputElement>(null)\n const spanRef = useRef<HTMLSpanElement>(null)\n const [inputWidth, setInputWidth] = useState(`auto`)\n\n useImperativeHandle<\n Partial<HTMLInputElement>,\n Partial<HTMLInputElement>\n >(ref, () => ({\n focus: () => {\n inputRef.current?.focus()\n },\n }))\n\n const extraWidth = props.type === `number` ? 15 : 0\n\n useLayoutEffect(() => {\n if (spanRef.current) {\n setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`)\n const interval = setInterval(() => {\n if (spanRef.current) {\n setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`)\n }\n }, 1000)\n return () => clearInterval(interval)\n }\n }, [inputRef.current?.value, props.value])\n\n return (\n <div style={{ display: `inline-block`, position: `relative` }}>\n <input\n {...props}\n ref={inputRef}\n style={{\n padding: 0,\n borderRadius: 0,\n border: `none`,\n fontFamily: `inherit`,\n fontSize: `inherit`,\n width: inputWidth,\n ...props.style,\n }}\n />\n <span\n ref={spanRef}\n style={{\n padding: props.style?.padding,\n position: `absolute`,\n visibility: `hidden`,\n // color: `red`,\n whiteSpace: `pre`,\n fontFamily: props.style?.fontFamily || `inherit`,\n fontSize: props.style?.fontSize || `inherit`,\n }}\n >\n {props.value}\n </span>\n </div>\n )\n})\n","import type { FC } from \"react\"\nimport { useState, useId, useRef } from \"react\"\n\nimport type { SerializedStyles } from \"@emotion/react\"\nimport { pipe } from \"fp-ts/function\"\n\nimport { clampInto } from \"~/packages/anvl/src/number\"\n\nimport { ElasticInput } from \".\"\n\nfunction round(value: number, decimalPlaces?: number): number {\n if (decimalPlaces === undefined) return value\n const factor = Math.pow(10, decimalPlaces)\n return Math.round(value * factor) / factor\n}\nfunction roundAndPad(value: number, decimalPlaces?: number): string {\n const roundedValue = round(value, decimalPlaces)\n const paddedString = roundedValue.toFixed(decimalPlaces)\n return paddedString\n}\n\nexport const VALID_NON_NUMBERS = [``, `-`, `.`, `-.`] as const\nexport type ValidNonNumber = (typeof VALID_NON_NUMBERS)[number]\nexport const isValidNonNumber = (input: string): input is ValidNonNumber =>\n VALID_NON_NUMBERS.includes(input as ValidNonNumber)\nexport const VALID_NON_NUMBER_INTERPRETATIONS: Readonly<\n Record<ValidNonNumber, number | null>\n> = {\n \"\": null,\n \"-\": 0,\n \".\": 0,\n \"-.\": 0,\n} as const\nexport type DecimalInProgress = `${number | ``}.${number}`\nexport const isDecimalInProgress = (input: string): input is DecimalInProgress =>\n input === `0` || (!isNaN(Number(input)) && input.includes(`.`))\n\nconst textToValue = (input: string, allowDecimal: boolean): number | null => {\n if (isValidNonNumber(input)) return VALID_NON_NUMBER_INTERPRETATIONS[input]\n return allowDecimal ? parseFloat(input) : Math.round(parseFloat(input))\n}\n\nexport type NumberConstraints = {\n max: number\n min: number\n decimalPlaces: number\n nullable: boolean\n}\nexport const DEFAULT_NUMBER_CONSTRAINTS: NumberConstraints = {\n max: Infinity,\n min: -Infinity,\n decimalPlaces: 100,\n nullable: true,\n}\n\nconst initRefinery =\n <Constraints extends NumberConstraints>(constraints: Partial<Constraints>) =>\n (\n input: number | null\n ): Constraints extends { nullable: true | undefined }\n ? number | null\n : number => {\n if (input === null && constraints.nullable === true) {\n return null as Constraints extends { nullable: true }\n ? number | null\n : number\n }\n const { max, min, decimalPlaces } = {\n ...DEFAULT_NUMBER_CONSTRAINTS,\n ...constraints,\n }\n const constrained = pipe(input ?? 0, clampInto([min, max]), (n) =>\n decimalPlaces ? round(n, decimalPlaces) : n\n )\n return constrained\n }\n\nconst valueToText = (numericValue: number | null): string => {\n if (numericValue === null || numericValue === undefined) {\n return ``\n }\n return numericValue.toString()\n}\n\ntype NumberInputProps = Partial<NumberConstraints> & {\n autoSize?: boolean\n customCss?: SerializedStyles\n disabled?: boolean\n id?: string\n label?: string\n name?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void\n placeholder?: string\n set?: (newValue: number | null) => void\n testId?: string\n value?: number | null\n}\n\nexport const NumberInput: FC<NumberInputProps> = ({\n autoSize = false,\n customCss,\n decimalPlaces,\n disabled = false,\n label,\n max,\n min,\n name,\n onChange,\n onClick,\n placeholder = ``,\n set = () => null,\n testId,\n value = null,\n}) => {\n const id = useId()\n const [temporaryEntry, setTemporaryEntry] = useState<\n DecimalInProgress | ValidNonNumber | null\n >(null)\n const userHasMadeDeliberateChange = useRef<boolean>(false)\n\n const refine = initRefinery({ max, min, decimalPlaces, nullable: true })\n\n const allowDecimal = decimalPlaces === undefined || decimalPlaces > 0\n\n const handleBlur = () => {\n if (userHasMadeDeliberateChange.current) {\n set(refine(value ?? null))\n setTemporaryEntry(null)\n }\n userHasMadeDeliberateChange.current = false\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) onChange(event)\n if (set === undefined) return\n userHasMadeDeliberateChange.current = true\n const input = event.target.value\n if (isValidNonNumber(input) || isDecimalInProgress(input)) {\n setTemporaryEntry(input)\n const textInterpretation = isDecimalInProgress(input)\n ? input\n : min?.toString() ?? `0`\n const newValue = textToValue(textInterpretation, allowDecimal)\n set(refine(newValue))\n return\n }\n setTemporaryEntry(null)\n const inputIsNumeric =\n (!isNaN(Number(input)) && !input.includes(` `)) ||\n (allowDecimal && input === `.`) ||\n (allowDecimal && input === `-.`) ||\n input === `` ||\n input === `-`\n const numericValue = textToValue(input, allowDecimal)\n\n if (inputIsNumeric) {\n set(refine(numericValue))\n }\n }\n\n const displayValue =\n temporaryEntry ?? valueToText(value ? refine(value) : value)\n\n return (\n <span css={customCss}>\n {label && <label htmlFor={id}>{label}</label>}\n {autoSize ? (\n <ElasticInput\n type=\"text\"\n value={displayValue}\n placeholder={placeholder ?? `-`}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n name={name ?? id}\n id={id}\n onClick={onClick}\n data-testid={`number-input-${testId ?? id}`}\n />\n ) : (\n <input\n type=\"text\"\n value={displayValue}\n placeholder={placeholder ?? `-`}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n name={name ?? id}\n id={id}\n onClick={onClick}\n data-testid={`number-input-${testId ?? id}`}\n />\n )}\n </span>\n )\n}\n","import type { Modifier } from \"../function\"\n\nexport const clampInto =\n ([min, max]: [number, number]): Modifier<number> =>\n (value) =>\n value < min ? min : value > max ? max : value\n","import type { FC } from \"react\"\n\nimport type { SerializedStyles } from \"@emotion/react\"\n\nimport { ElasticInput } from \".\"\n\nexport type TextInputProps = {\n value: string\n set?: (value: string) => void\n label?: string\n placeholder?: string\n customCss?: SerializedStyles\n autoSize?: boolean\n}\n\nexport const TextInput: FC<TextInputProps> = ({\n value,\n set,\n label,\n placeholder,\n customCss,\n autoSize = false,\n}) => {\n return (\n <span css={customCss}>\n <label>{label}</label>\n {autoSize ? (\n <ElasticInput\n type=\"text\"\n value={value}\n onChange={(e) => set?.(e.target.value)}\n disabled={set === undefined}\n placeholder={placeholder}\n />\n ) : (\n <input\n type=\"text\"\n value={value}\n onChange={(e) => set?.(e.target.value)}\n disabled={set === undefined}\n placeholder={placeholder}\n />\n )}\n </span>\n )\n}\n","import type { SetterOrUpdater } from \"recoil\"\n\nimport { become } from \"~/packages/anvl/src/function\"\nimport type { JsonArr } from \"~/packages/anvl/src/json\"\n\nexport const makeElementSetters = <T extends JsonArr>(\n data: T,\n set: SetterOrUpdater<T>\n): SetterOrUpdater<T[number]>[] =>\n data.map(\n (value, index) => (newValue) =>\n set((): T => {\n const newData = [...data]\n newData[index] = become(newValue)(value)\n return newData as unknown as T\n })\n )\n","import type { FC, ReactElement, RefObject } from \"react\"\n\nimport type { SerializedStyles } from \"@emotion/react\"\nimport type { SetterOrUpdater } from \"recoil\"\n\nimport { doNothing } from \"~/packages/anvl/src/function\"\nimport type { Json, JsonTypes } from \"~/packages/anvl/src/json\"\nimport { refineJsonType } from \"~/packages/anvl/src/json\"\nimport type { JsonSchema } from \"~/packages/anvl/src/json-schema/json-schema\"\n\nimport { SubEditors } from \".\"\nimport type { JsonEditorComponents } from \"./default-components\"\nimport { ElasticInput } from \"../react-elastic-input\"\n\nexport type JsonEditorProps_INTERNAL<T extends Json> = {\n data: T\n set: SetterOrUpdater<T>\n ref?: RefObject<HTMLInputElement>\n name?: string\n rename?: (newKey: string) => void\n remove?: () => void\n recast?: (newType: keyof JsonTypes) => void\n schema?: JsonSchema\n path?: ReadonlyArray<number | string>\n isReadonly?: (path: ReadonlyArray<number | string>) => boolean\n isHidden?: (path: ReadonlyArray<number | string>) => boolean\n className?: string\n customCss?: SerializedStyles\n Header?: FC<{ data: T; schema?: JsonSchema }>\n Components: JsonEditorComponents\n}\n\nexport const JsonEditor_INTERNAL = <T extends Json>({\n data,\n set,\n schema,\n name,\n rename,\n remove,\n recast,\n path = [],\n isReadonly = () => false,\n isHidden = () => false,\n className,\n customCss,\n Header: HeaderDisplay,\n Components,\n}: JsonEditorProps_INTERNAL<T>): ReactElement | null => {\n const json = refineJsonType(data)\n const SubEditor = SubEditors[json.type]\n\n const disabled = isReadonly(path)\n\n return isHidden(path) ? null : (\n <Components.ErrorBoundary>\n <Components.EditorWrapper className={className} customCss={customCss}>\n {remove && (\n <Components.Button\n onClick={disabled ? doNothing : remove}\n disabled={disabled}\n >\n <Components.DeleteIcon />\n </Components.Button>\n )}\n {HeaderDisplay && <HeaderDisplay data={data} schema={schema} />}\n {rename && (\n <Components.KeyWrapper>\n <ElasticInput\n value={name}\n onChange={disabled ? doNothing : (e) => rename(e.target.value)}\n disabled={disabled}\n />\n </Components.KeyWrapper>\n )}\n <SubEditor\n data={json.data}\n set={set}\n schema={schema}\n remove={remove}\n rename={rename}\n path={path}\n isReadonly={isReadonly}\n isHidden={isHidden}\n Components={Components}\n />\n {recast && (\n <select\n onChange={\n disabled\n ? doNothing\n : (e) => recast(e.target.value as keyof JsonTypes)\n }\n value={json.type}\n disabled={disabled}\n >\n {Object.keys(SubEditors).map((type) => (\n <option key={type} value={type}>\n {type}\n </option>\n ))}\n </select>\n )}\n </Components.EditorWrapper>\n </Components.ErrorBoundary>\n )\n}\n","import type { ReactElement } from \"react\"\n\nimport type { JsonArr } from \"~/packages/anvl/src/json\"\n\nimport { makeElementSetters } from \"./utilities/array-elements\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\n\nexport const ArrayEditor = <_ extends JsonArr>({\n path = [],\n isReadonly = () => false,\n isHidden = () => false,\n data,\n set,\n Components,\n}: JsonEditorProps_INTERNAL<JsonArr>): ReactElement => {\n const setElement = makeElementSetters(data, set)\n return (\n <>\n {data.map((element, index) => {\n const newPath = [...path, index]\n return (\n <JsonEditor_INTERNAL\n key={newPath.join(``)}\n path={newPath}\n isReadonly={isReadonly}\n isHidden={isHidden}\n data={element}\n set={setElement[index]}\n Components={Components}\n />\n )\n })}\n </>\n )\n}\n","import { useRef } from \"react\"\nimport type { FC, ReactElement } from \"react\"\n\nimport { doNothing } from \"~/packages/anvl/src/function\"\nimport type { JsonObj } from \"~/packages/anvl/src/json\"\nimport { findSubSchema } from \"~/packages/anvl/src/json-schema/find-sub-schema\"\nimport { isObjectSchema } from \"~/packages/anvl/src/json-schema/json-schema\"\nimport { isPlainObject } from \"~/packages/anvl/src/object/refinement\"\nimport { isLiteral } from \"~/packages/anvl/src/refinement\"\n\nimport {\n makePropertyCreationInterface,\n makePropertyRecasters,\n makePropertyRemovers,\n makePropertyRenamers,\n makePropertySetters,\n makePropertySorter,\n} from \"./utilities/object-properties\"\nimport { ElasticInput } from \"../../react-elastic-input\"\nimport type { JsonEditorComponents } from \"../default-components\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\n\nexport type PropertyAdderProps = {\n addProperty: () => void\n disabled: boolean\n propertyKey: string\n Components: JsonEditorComponents\n}\n\nexport const PropertyAdder: FC<PropertyAdderProps> = ({\n addProperty,\n disabled,\n propertyKey,\n Components,\n}) => (\n <Components.MissingPropertyWrapper>\n <ElasticInput disabled defaultValue={propertyKey}></ElasticInput>\n <ElasticInput disabled defaultValue=\"is missing\"></ElasticInput>\n <Components.Button onClick={() => addProperty()} disabled={disabled}>\n +\n </Components.Button>\n </Components.MissingPropertyWrapper>\n)\n\nexport const ObjectEditor = <T extends JsonObj>({\n schema,\n path = [],\n isReadonly = () => false,\n isHidden = () => false,\n data,\n set,\n Components,\n}: JsonEditorProps_INTERNAL<T>): ReactElement => {\n const disabled = isReadonly(path)\n\n const stableKeyMap = useRef<Record<keyof T, keyof T>>(\n Object.keys(data).reduce((acc, key: keyof T) => {\n acc[key] = key\n return acc\n }, {} as Record<keyof T, keyof T>)\n )\n\n const setProperty = makePropertySetters(data, set)\n const renameProperty = makePropertyRenamers(data, set, stableKeyMap)\n const removeProperty = makePropertyRemovers(data, set)\n const recastProperty = makePropertyRecasters(data, set)\n const sortProperties = makePropertySorter(data, set)\n const makePropertyAdder = makePropertyCreationInterface(data, set)\n\n const subSchema = isPlainObject(schema) ? findSubSchema(schema)(path) : true\n const schemaKeys: ReadonlyArray<string> | true = isLiteral(true)(subSchema)\n ? true\n : isObjectSchema(subSchema)\n ? Object.keys(subSchema.properties ?? {})\n : []\n const dataKeys: ReadonlyArray<string> = Object.keys(data)\n const [unofficialKeys, officialKeys] = dataKeys.reduce(\n ([unofficial, official], key) => {\n const isOfficial = schemaKeys === true || schemaKeys.includes(key)\n return isOfficial\n ? [unofficial, [...official, key]]\n : [[...unofficial, key], official]\n },\n [[], []] as [string[], string[]]\n )\n const missingKeys: ReadonlyArray<string> =\n schemaKeys === true\n ? []\n : schemaKeys.filter((key) => !dataKeys.includes(key))\n\n return (\n <>\n <Components.Button onClick={() => sortProperties()} disabled={disabled}>\n Sort\n </Components.Button>\n <Components.ObjectWrapper>\n <div className=\"json_editor_properties\">\n {[...missingKeys, ...officialKeys, ...unofficialKeys].map((key) => {\n const originalKey = stableKeyMap.current[key]\n const newPath = [...path, key]\n const originalPath = [...path, originalKey]\n const isOfficial = schemaKeys === true || schemaKeys.includes(key)\n const isMissing = missingKeys.includes(key)\n\n return isMissing ? (\n <PropertyAdder\n key={key + `IsMissing`}\n propertyKey={key}\n addProperty={makePropertyAdder(key, `string`)}\n disabled={disabled}\n Components={Components}\n />\n ) : (\n <JsonEditor_INTERNAL\n key={originalPath.join(`.`)}\n schema={schema}\n path={newPath}\n name={key}\n isReadonly={isReadonly}\n isHidden={isHidden}\n data={data[key as keyof T]}\n set={setProperty[key as keyof T]}\n rename={renameProperty[key as keyof T]}\n remove={removeProperty[key as keyof T]}\n recast={recastProperty[key as keyof T]}\n className={`json_editor_property ${\n isOfficial ? `json_editor_official` : `json_editor_unofficial`\n }`}\n Components={Components}\n />\n )\n })}\n </div>\n <Components.Button\n onClick={\n disabled\n ? doNothing\n : () => makePropertyAdder(`new_property`, `string`)()\n }\n disabled={disabled}\n >\n +\n </Components.Button>\n </Components.ObjectWrapper>\n </>\n )\n}\n","import { isBoolean } from \"fp-ts/boolean\"\nimport { isNumber } from \"fp-ts/number\"\nimport type { Refinement } from \"fp-ts/Refinement\"\nimport { isString } from \"fp-ts/string\"\n\nimport type { integer } from \"./integer\"\nimport { isInteger } from \"./integer\"\nimport type { JsonSchemaRef } from \"./refs\"\nimport { isJsonSchemaRef } from \"./refs\"\nimport type { JsonSchemaStringFormat } from \"./string-formats\"\nimport { JSON_SCHEMA_STRING_FORMATS } from \"./string-formats\"\nimport { isArray } from \"../array\"\nimport { JSON_TYPE_NAMES } from \"../json\"\nimport { ifDefined } from \"../nullish\"\nimport { doesExtend, isRecord } from \"../object/refinement\"\nimport {\n isLiteral,\n isWithin,\n couldBe,\n isIntersection,\n isUnion,\n} from \"../refinement\"\nimport type { Refined } from \"../refinement/refined\"\n\n/* eslint-disable max-lines */\n\nexport const JSON_SCHEMA_TYPE_NAMES = [...JSON_TYPE_NAMES, `integer`] as const\nexport type JsonSchemaTypeName = (typeof JSON_SCHEMA_TYPE_NAMES)[number]\n\nexport const JSON_SCHEMA_META_TYPE_NAMES = [\n ...JSON_SCHEMA_TYPE_NAMES,\n `any`,\n `never`,\n] as const\nexport type JsonSchemaMetaTypeName = (typeof JSON_SCHEMA_META_TYPE_NAMES)[number]\n\nexport const JSON_SCHEMA_LOGIC_MODES = [\n `union`,\n `exclusive`,\n `intersection`,\n `negation`,\n `conditional`,\n] as const\nexport type JsonSchemaLogicMode = (typeof JSON_SCHEMA_LOGIC_MODES)[number]\n\nexport interface JsonSchemaSystem\n extends Record<JsonSchemaLogicMode & JsonSchemaMetaTypeName, any> {\n array: ArraySchema\n boolean: BooleanSchema\n integer: IntegerSchema\n null: NullSchema\n number: NumberSchema\n object: ObjectSchema\n string: StringSchema\n any: true\n never: false\n union: UnionSchema\n exclusive: ExclusiveSchema\n intersection: IntersectionSchema\n negation: NegationSchema\n conditional: ConditionalSchema\n}\n\n// export const JSON_SCHEMA_SYSTEM: JsonSchemaSystem = {\n// array: { type: `array` },\n// boolean: { type: `boolean` },\n// integer: { type: `integer` },\n// null: { type: `null` },\n// number: { type: `number` },\n// object: { type: `object` },\n// string: { type: `string` },\n// any: true,\n// never: false,\n// union: { anyOf: [true] },\n// exclusive: { oneOf: [true] },\n// intersection: { allOf: [true] },\n// negation: { not: false },\n// conditional: { if: true, then: true, else: false },\n// } as const\n\nexport const JSON_SCHEMA_REFINERY: {\n [K in JsonSchemaLogicMode & JsonSchemaMetaTypeName]: Refinement<\n unknown,\n JsonSchemaSystem[K]\n >\n} = {\n array: isArraySchema,\n boolean: isBooleanSchema,\n integer: isIntegerSchema,\n null: isNullSchema,\n number: isNumberSchema,\n object: isObjectSchema,\n string: isStringSchema,\n any: isLiteral(true),\n never: isLiteral(false),\n union: isUnionSchema,\n intersection: isIntersectionSchema,\n negation: isNegationSchema,\n conditional: isConditionalSchema,\n}\n\nexport type StringSchema = {\n type: `string`\n enum?: string[]\n minLength?: integer\n maxLength?: integer\n pattern?: string\n format?: JsonSchemaStringFormat\n}\nexport const stringSchemaStructure = {\n type: isLiteral(`string`),\n enum: ifDefined(isArray(isString)),\n minLength: ifDefined(isInteger),\n maxLength: ifDefined(isInteger),\n pattern: ifDefined(isString),\n format: ifDefined(isWithin(JSON_SCHEMA_STRING_FORMATS)),\n}\nexport function isStringSchema(input: unknown): input is StringSchema {\n return doesExtend(stringSchemaStructure)(input)\n}\n\nexport const numberSchemaStructure = {\n type: isLiteral(`number`),\n enum: ifDefined(isArray(isNumber)),\n minimum: ifDefined(isNumber),\n maximum: ifDefined(isNumber),\n exclusiveMinimum: ifDefined(isNumber),\n exclusiveMaximum: ifDefined(isNumber),\n multipleOf: ifDefined(isNumber),\n}\nexport type NumberSchema = Refined<typeof numberSchemaStructure>\nexport function isNumberSchema(input: unknown): input is NumberSchema {\n return doesExtend(numberSchemaStructure)(input)\n}\n\nexport const integerSchemaStructure = {\n type: isLiteral(`integer`),\n enum: ifDefined(isArray(isInteger)),\n minimum: ifDefined(isInteger),\n maximum: ifDefined(isInteger),\n exclusiveMinimum: ifDefined(isInteger),\n exclusiveMaximum: ifDefined(isInteger),\n multipleOf: ifDefined(isInteger),\n}\nexport type IntegerSchema = Refined<typeof integerSchemaStructure>\nexport function isIntegerSchema(input: unknown): input is IntegerSchema {\n return doesExtend(integerSchemaStructure)(input)\n}\n\nexport const booleanSchemaStructure = {\n type: isLiteral(`boolean`),\n enum: ifDefined(isArray(isBoolean)),\n}\nexport type BooleanSchema = Refined<typeof booleanSchemaStructure>\nexport function isBooleanSchema(input: unknown): input is BooleanSchema {\n return doesExtend(booleanSchemaStructure)(input)\n}\n\nexport const nullSchemaStructure = {\n type: isLiteral(`null`),\n}\nexport type NullSchema = Refined<typeof nullSchemaStructure>\nexport function isNullSchema(input: unknown): input is NullSchema {\n return doesExtend(nullSchemaStructure)(input)\n}\n\nexport type ObjectSchema = {\n type: `object`\n properties?: Record<string, JsonSchema>\n patternProperties?: Record<string, JsonSchema>\n required?: string[]\n additionalProperties?: JsonSchema\n propertyNames?: JsonSchema\n minProperties?: integer\n maxProperties?: integer\n dependentSchemas?: Record<string, JsonSchema>\n}\nexport const objectSchemaStructure = {\n type: isLiteral(`object`),\n properties: ifDefined(isRecord(isString, isJsonSchema)),\n required: ifDefined(isArray(isString)),\n additionalProperties: ifDefined(isJsonSchema),\n propertyNames: ifDefined(isStringSchema),\n minProperties: ifDefined(isInteger),\n maxProperties: ifDefined(isInteger),\n dependentSchemas: ifDefined(isRecord(isString, isJsonSchema)),\n}\nexport function isObjectSchema(input: unknown): input is ObjectSchema {\n return doesExtend(objectSchemaStructure)(input)\n}\n\nexport type ArraySchema = {\n type: `array`\n items?: JsonSchema | JsonSchema[]\n minItems?: integer\n maxItems?: integer\n uniqueItems?: boolean\n}\nexport const arraySchemaStructure = {\n type: isLiteral(`array`),\n items: ifDefined(couldBe(isJsonSchema).or(isArray(isJsonSchema))),\n minItems: ifDefined(isInteger),\n maxItems: ifDefined(isInteger),\n uniqueItems: ifDefined(isBoolean),\n}\nexport function isArraySchema(input: unknown): input is ArraySchema {\n return doesExtend(arraySchemaStructure)(input)\n}\n\nexport type UnionSchema = { anyOf: JsonSchema[] }\nexport const unionSchemaStructure = { anyOf: isArray(isJsonSchema) }\nexport function isUnionSchema(input: unknown): input is UnionSchema {\n return doesExtend(unionSchemaStructure)(input)\n}\nexport type IntersectionSchema = {\n allOf: JsonSchema[] | ReadonlyArray<JsonSchema>\n}\nexport type ExclusiveSchema = {\n oneOf: JsonSchema[] | ReadonlyArray<JsonSchema>\n}\nexport const exclusiveSchemaStructure = { oneOf: isArray(isJsonSchema) }\nexport function isExclusiveSchema(input: unknown): input is ExclusiveSchema {\n return doesExtend(exclusiveSchemaStructure)(input)\n}\n\nexport const intersectionSchemaStructure = { allOf: isArray(isJsonSchema) }\nexport function isIntersectionSchema(\n input: unknown\n): input is IntersectionSchema {\n return doesExtend(intersectionSchemaStructure)(input)\n}\n\nexport type ConditionalSchema = {\n if: JsonSchema\n then?: JsonSchema\n else?: JsonSchema\n}\nexport const conditionalSchemaStructure = {\n if: isJsonSchema,\n then: ifDefined(isJsonSchema),\n else: ifDefined(isJsonSchema),\n}\nexport function isConditionalSchema(input: unknown): input is ConditionalSchema {\n return doesExtend(conditionalSchemaStructure)(input)\n}\n\nexport type NegationSchema = { not: JsonSchema }\nexport const negationSchemaStructure = { not: isJsonSchema }\nexport function isNegationSchema(input: unknown): input is NegationSchema {\n return doesExtend(negationSchemaStructure)(input)\n}\n\nexport type MixedSchema = Partial<\n Omit<ArraySchema, `type`> &\n Omit<BooleanSchema, `enum` | `type`> &\n Omit<IntegerSchema, `enum` | `type`> &\n Omit<NullSchema, `type`> &\n Omit<NumberSchema, `enum` | `type`> &\n Omit<ObjectSchema, `type`> &\n Omit<StringSchema, `enum` | `type`>\n> & {\n type: ReadonlyArray<JsonSchemaTypeName>\n enum?: ReadonlyArray<integer | boolean | number | string>\n}\nexport const mixedSchemaStructure = {\n ...arraySchemaStructure,\n ...booleanSchemaStructure,\n ...integerSchemaStructure,\n ...nullSchemaStructure,\n ...numberSchemaStructure,\n ...objectSchemaStructure,\n ...stringSchemaStructure,\n type: isArray(isWithin(JSON_SCHEMA_TYPE_NAMES)),\n enum: ifDefined(\n isArray(isUnion.or(isInteger).or(isBoolean).or(isNumber).or(isString))\n ),\n}\nexport function isMixedSchema(input: unknown): input is MixedSchema {\n return doesExtend(mixedSchemaStructure)(input)\n}\n\nexport type JsonSchemaCore =\n | ArraySchema\n | BooleanSchema\n | ConditionalSchema\n | ExclusiveSchema\n | IntegerSchema\n | IntersectionSchema\n | MixedSchema\n | NegationSchema\n | NullSchema\n | NumberSchema\n | ObjectSchema\n | StringSchema\n | UnionSchema\n\nexport const isJsonSchemaCore = isUnion\n .or(isArraySchema)\n .or(isBooleanSchema)\n .or(isConditionalSchema)\n .or(isExclusiveSchema)\n .or(isIntegerSchema)\n .or(isIntersectionSchema)\n .or(isMixedSchema)\n .or(isNegationSchema)\n .or(isNullSchema)\n .or(isNumberSchema)\n .or(isObjectSchema)\n .or(isStringSchema)\n .or(isUnionSchema)\n\nexport type JsonSchemaLeaf =\n | BooleanSchema\n | IntegerSchema\n | NullSchema\n | NumberSchema\n | StringSchema\nexport function isJsonSchemaLeaf(input: unknown): input is JsonSchemaLeaf {\n return isUnion\n .or(isBooleanSchema)\n .or(isIntegerSchema)\n .or(isNullSchema)\n .or(isNumberSchema)\n .or(isStringSchema)(input)\n}\n\nexport type JsonSchemaTree =\n | ArraySchema\n | ConditionalSchema\n | ExclusiveSchema\n | IntersectionSchema\n | MixedSchema\n | NegationSchema\n | ObjectSchema\n | UnionSchema\nexport function isJsonSchemaTree(input: unknown): input is JsonSchemaTree {\n return isUnion\n .or(isArraySchema)\n .or(isMixedSchema)\n .or(isObjectSchema)\n .or(isUnionSchema)\n .or(isIntersectionSchema)\n .or(isExclusiveSchema)\n .or(isConditionalSchema)\n .or(isNegationSchema)(input)\n}\n\nexport type JsonSchemaRoot = {\n $id?: string\n $schema?: string\n $defs?: Record<string, JsonSchema>\n definitions?: Record<string, JsonSchema>\n}\n\nexport const isJsonSchemaRoot = doesExtend({\n $id: ifDefined(isString),\n $schema: ifDefined(isString),\n})\n\n/* prettier-ignore */\nexport type JsonSchemaObject = \n & JsonSchemaCore\n & JsonSchemaRoot\nexport const isJsonSchemaObject = isIntersection\n .and(isJsonSchemaCore)\n .and(isJsonSchemaRoot)\n\nexport type JsonSchema = JsonSchemaObject | JsonSchemaRef | boolean\nexport function isJsonSchema(input: unknown): input is JsonSchema {\n return couldBe(isJsonSchemaObject).or(isBoolean).or(isJsonSchemaRef)(input)\n}\n","import { pipe } from \"fp-ts/function\"\n\nexport type IntegerBrand = { readonly integer: unique symbol /* virtual */ }\nexport type integer = IntegerBrand & number\nexport const isInteger = (input: unknown): input is integer =>\n Number.isInteger(input as number)\n\nexport const parseInt = (input: unknown): integer => {\n if (isInteger(input)) return input\n throw new IntegerParseError(input)\n}\n\nexport class Fraction extends Number {\n public readonly numerator: integer\n public readonly denominator: integer\n\n public constructor(n: integer | number, d: integer | number) {\n super(n / d)\n if (d === 0) {\n throw new Error(`Denominator cannot be zero`)\n }\n this.numerator = parseInt(n)\n this.denominator = parseInt(d)\n }\n public readonly [Symbol.toPrimitive]: () => number = () =>\n this.numerator / this.denominator\n}\n\nexport const Frac = (n: integer | number, d: integer | number): Fraction =>\n new Fraction(n, d)\n\nexport const isFraction = (input: unknown): input is Fraction =>\n input instanceof Fraction\n\nexport class IntegerParseError extends Error {\n public constructor(value: unknown) {\n super(`Could not parse integer from ${JSON.stringify(value)}`)\n }\n}\n\nexport type IntegerParseResult =\n | {\n value: integer\n error: null\n round: null\n upper: null\n lower: null\n ratio: null\n }\n | {\n value: null\n error: IntegerParseError\n round: integer\n upper: integer\n lower: integer\n ratio: Fraction | null\n }\n\nexport const Int = Object.assign((input: unknown) => parseInt(input), {\n from: (input: unknown): IntegerParseResult =>\n pipe(input, String, parseFloat, (num) =>\n isInteger(num)\n ? {\n value: num,\n error: null,\n round: null,\n upper: null,\n lower: null,\n ratio: null,\n }\n : {\n value: null,\n error: new IntegerParseError(input),\n round: Math.round(num) as integer,\n upper: Math.ceil(num) as integer,\n lower: Math.floor(num) as integer,\n ratio: null,\n }\n ),\n\n formula: <\n I extends Record<\n keyof any,\n Fraction | Fraction[] | integer | integer[] | number[] | number\n >,\n O extends Record<\n keyof any,\n Fraction | Fraction[] | integer | integer[] | number[] | number\n >\n >(\n fm: (input: {\n [K in keyof I]: I[K] extends (Fraction | integer)[] ? number[] : number\n }) => O\n ) => {\n return (input: I): O => {\n return fm(\n input as {\n [K in keyof I]: I[K] extends (Fraction | integer)[] ? number[] : number\n }\n )\n }\n },\n})\n\nexport function asNumber(input: Fraction | integer | number): number\nexport function asNumber(input: Fraction[] | integer[] | number[]): number[]\nexport function asNumber<\n R extends Record<\n keyof any,\n Fraction | Fraction[] | integer | integer[] | number[] | number\n >\n>(\n input: R\n): {\n [K in keyof R]: R[K] extends Fraction | integer | number ? number : number[]\n}\nexport function asNumber(input: unknown): unknown {\n return input as any\n}\n\nexport const a = asNumber(new Fraction(1, 2))\nexport const b = asNumber([new Fraction(1, 2)])\nexport const c = asNumber({ a: new Fraction(1, 2) })\n","import { isString } from \"fp-ts/string\"\n\nimport type { Substitute } from \"~/packages/anvl/src/tree/substitute\"\n\nimport { Int } from \"./integer\"\nimport type { JsonSchema } from \"./json-schema\"\nimport { isJsonSchema } from \"./json-schema\"\nimport { delve } from \"../object\"\nimport { doesExtend } from \"../object/refinement\"\n\nexport type JsonSchemaRef = {\n $ref: string\n}\nexport function isJsonSchemaRef(input: unknown): input is JsonSchemaRef {\n return doesExtend({\n $ref: isString,\n })(input)\n}\n\nexport type ReffedJsonSchema = Substitute<\n JsonSchema,\n JsonSchema,\n JsonSchema | JsonSchemaRef\n>\n\nexport const colorPalette: ReffedJsonSchema = {\n $defs: {\n colorChannel: {\n type: `integer`,\n minimum: Int(0),\n maximum: Int(255),\n },\n color: {\n type: `object`,\n properties: {\n red: { $ref: `#/$defs/colorChannel` },\n green: { $ref: `#/$defs/colorChannel` },\n blue: { $ref: `#/$defs/colorChannel` },\n },\n },\n },\n type: `array`,\n items: {\n $ref: `#/$defs/color`,\n },\n} as const\n\ntype RetrieveRefOptions = {\n refNode: JsonSchemaRef\n refMap?: Record<string, JsonSchema>\n root: ReffedJsonSchema\n}\ntype RetrieveRefResult = {\n node: JsonSchema\n refMap: Record<string, JsonSchema>\n}\n\nexport const retrieveRef = ({\n refNode: { $ref },\n refMap = {},\n root,\n}: RetrieveRefOptions): RetrieveRefResult => {\n if (typeof root === `boolean`) {\n throw new TypeError(`The root is a boolean and cannot be indexed`)\n }\n if ($ref in refMap) return { node: refMap[$ref], refMap }\n const [_, ...refPath] = $ref.split(`/`)\n const discovery = delve(root, refPath)\n if (discovery instanceof Error) throw discovery\n let node = discovery.found\n while (isJsonSchemaRef(node)) {\n const result = retrieveRef({ refNode: node, refMap, root })\n node = result.node\n refMap = result.refMap\n }\n if (isJsonSchema(node)) {\n return { node, refMap: { ...refMap, [$ref]: node } }\n }\n throw new TypeError(`The refNode is not a JsonSchema`)\n}\n","import net from \"net\"\n\nimport { isString } from \"fp-ts/string\"\n\nimport { attempt } from \"../function\"\n\nexport const JSON_SCHEMA_STRING_FORMATS = [\n `date-time`,\n `date`,\n `email`,\n `hostname`,\n `ipv4`,\n `ipv6`,\n `regex`,\n `time`,\n `uri-reference`,\n `uri-template`,\n `uri`,\n `uuid`,\n] as const\n\nexport type JsonSchemaStringFormat = (typeof JSON_SCHEMA_STRING_FORMATS)[number]\n\nexport type date_time = string & { readonly date_time: unique symbol }\nexport type date = string & { readonly date: unique symbol }\nexport type email = string & { readonly email: unique symbol }\nexport type hostname = string & { readonly hostname: unique symbol }\nexport type ipv4 = string & { readonly ipv4: unique symbol }\nexport type ipv6 = string & { readonly ipv6: unique symbol }\nexport type regex = string & { readonly regex: unique symbol }\nexport type time = string & { readonly time: unique symbol }\nexport type uri_reference = string & { readonly uri_reference: unique symbol }\nexport type uri_template = string & { readonly uri_template: unique symbol }\nexport type uri = string & { readonly uri: unique symbol }\nexport type uuid = string & { readonly uuid: unique symbol }\n\nexport const isDateTime = (input: unknown): input is date_time =>\n isString(input) &&\n input.match(\n /^([+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24:?00)([.,]\\d+(?!:))?)?(\\17[0-5]\\d([.,]\\d+)?)?([zZ]|([+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/\n )?.length === 1\n\nexport const isDate = (input: unknown): input is date =>\n isString(input) &&\n input.match(\n /^([+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6]))))?$/\n )?.length === 1\n\nexport const isEmail = (input: unknown): input is email =>\n isString(input) &&\n input.match(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n )?.length === 1\n\nexport const isHostname = (input: unknown): input is hostname =>\n isString(input) &&\n input.match(\n /^(?=.{1,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z]{2,63}$)/\n )?.length === 1\n\nexport const isIpv4 = (input: unknown): input is ipv4 =>\n isString(input) &&\n input.match(\n /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/\n )?.length === 1\n\nexport const isIpv6 = (input: unknown): input is ipv6 =>\n isString(input) && net.isIPv6(input)\n\nexport const isRegex = (input: unknown): input is regex =>\n isString(input) && attempt(() => new RegExp(input))\n\nexport const isTime = (input: unknown): input is time =>\n isString(input) &&\n input.match(/^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(\\.\\d+)?$/)\n ?.length === 1\n\nexport const isUriReference = (input: unknown): input is uri_reference =>\n isString(input) &&\n input.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/)\n ?.length === 1\n\nexport const isUriTemplate = (input: unknown): input is uri_template =>\n isString(input) &&\n input.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/)\n ?.length === 1\n\nexport const isUri = (input: unknown): input is uri =>\n isString(input) &&\n input.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/)\n ?.length === 1\n\nexport const isUuid = (input: unknown): input is uuid =>\n isString(input) &&\n input.match(\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/\n )?.length === 1\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","export const expandPathForSchema = (\n path: (keyof any)[]\n): (number | string)[] | Error => {\n try {\n return path\n .map((key) => {\n switch (typeof key) {\n case `string`:\n return [`properties`, key]\n case `number`:\n return [`items`, key]\n case `symbol`:\n throw new TypeError(\n `The key ${String(\n key\n )} is not a valid JSON key; expected string or number, got symbol`\n )\n default:\n throw new TypeError(\n `The key ${key} is not a valid JSON key; expected string or number, got ${typeof key}`\n )\n }\n })\n .flat()\n } catch (caught) {\n if (caught instanceof TypeError) return caught\n throw caught\n }\n}\n","import { isJsonSchema } from \"./json-schema\"\nimport { expandPathForSchema } from \"./path-into\"\nimport { isJsonSchemaRef, retrieveRef } from \"./refs\"\nimport type { ReffedJsonSchema } from \"./refs\"\n\nexport const findSubSchema = (\n schema: ReffedJsonSchema\n): ((\n path: (number | string)[] | ReadonlyArray<number | string>\n) => Error | ReffedJsonSchema) => {\n if (typeof schema === `boolean`) {\n throw new Error(`The schema does not contain subSchemas`)\n }\n return (path: string[]) => {\n const pathIntoSchema = expandPathForSchema(path)\n if (pathIntoSchema instanceof Error) return pathIntoSchema\n if (typeof schema === `boolean`) {\n return new TypeError(`The schema is not a JsonSchema`)\n }\n const { node, refMap } = pathIntoSchema.reduce(\n ({ node, refMap = undefined }, key) => (\n console.log({ node, key }),\n isJsonSchemaRef(node)\n ? retrieveRef({ refNode: node, root: schema, refMap })\n : { node: node[key], refMap }\n ),\n { node: schema, refMap: undefined }\n )\n if (node instanceof Error) throw node\n\n let subSchema = node\n while (isJsonSchemaRef(subSchema)) {\n console.log({ subSchema })\n subSchema = retrieveRef({ refNode: subSchema, root: schema, refMap }).node\n }\n console.log({ subSchema })\n\n if (isJsonSchema(subSchema)) {\n return subSchema\n }\n throw new TypeError(`The subSchema is not a JsonSchema`)\n }\n}\n","import type {\n Json,\n JsonArr,\n JsonObj,\n Serializable,\n} from \"~/packages/anvl/src/json\"\nimport { refineJsonType } from \"~/packages/anvl/src/json\"\n\nexport const stringToBoolean = (str: string): boolean => str === `true`\nexport const stringToNumber = (str: string): number => Number(str)\nexport const stringToArray = (str: string): string[] => str.split(`,`)\nexport const stringToObject = (str: string): JsonObj => {\n try {\n return JSON.parse(str)\n } catch (e) {\n return { [str]: str }\n }\n}\n\nexport const objectToString = (obj: JsonObj): string => JSON.stringify(obj)\nexport const objectToBoolean = (obj: JsonObj): boolean => obj.true === true\nexport const objectToNumber = (obj: JsonObj): number =>\n Number(obj.number ?? obj.size ?? obj.count ?? 0)\nexport const objectToArray = <T extends Serializable>(\n obj: JsonObj<string, T>\n): [key: string, value: T][] => Object.entries(obj)\n\nexport const booleanToString = (bool: boolean): string => bool.toString()\nexport const booleanToNumber = (bool: boolean): number => +bool\nexport const booleanToObject = (bool: boolean): JsonObj => ({\n [bool.toString()]: bool,\n})\nexport const booleanToArray = (bool: boolean): boolean[] => [bool]\n\nexport const numberToString = (num: number): string => num.toString()\nexport const numberToBoolean = (num: number): boolean => num === 1\nexport const numberToObject = (num: number): JsonObj => ({\n number: num,\n})\nexport const numberToArray = (num: number): null[] => Array(num).fill(null)\n\nexport const arrayToString = (arr: JsonArr): string => arr.join(`,`)\nexport const arrayToNumber = (arr: JsonArr): number => arr.length\nexport const arrayToBoolean = (arr: JsonArr): boolean =>\n typeof arr[0] === `boolean` ? arr[0] : arr.length > 0\nexport const arrayToObject = <T extends Serializable>(\n arr: JsonArr<T>\n): JsonObj<`${number}`, T> =>\n arr.reduce((acc, cur, idx) => {\n acc[`${idx}`] = cur\n return acc\n }, {} as JsonObj<`${number}`, T>)\n\nexport const nullToString = (): string => ``\nexport const nullToNumber = (): number => 0\nexport const nullToBoolean = (): boolean => false\nexport const nullToArray = (): JsonArr => []\nexport const nullToObject = (): JsonObj => ({})\n\nexport const cast = (\n input: Json\n): {\n to: {\n array: () => JsonArr\n boolean: () => boolean\n number: () => number\n object: () => JsonObj\n string: () => string\n null: () => null\n }\n} => {\n const json = refineJsonType(input)\n return {\n to: {\n array: () => {\n switch (json.type) {\n case `array`:\n return json.data\n case `object`:\n return objectToArray(json.data)\n case `string`:\n return stringToArray(json.data)\n case `boolean`:\n return booleanToArray(json.data)\n case `number`:\n return numberToArray(json.data)\n case `null`:\n return nullToArray()\n }\n },\n boolean: () => {\n switch (json.type) {\n case `array`:\n return arrayToBoolean(json.data)\n case `object`:\n return objectToBoolean(json.data)\n case `string`:\n return stringToBoolean(json.data)\n case `boolean`:\n return json.data\n case `number`:\n return numberToBoolean(json.data)\n case `null`:\n return nullToBoolean()\n }\n },\n number: () => {\n switch (json.type) {\n case `array`:\n return arrayToNumber(json.data)\n case `object`:\n return objectToNumber(json.data)\n case `string`:\n return stringToNumber(json.data)\n case `boolean`:\n return booleanToNumber(json.data)\n case `number`:\n return json.data\n case `null`:\n return nullToNumber()\n }\n },\n object: () => {\n switch (json.type) {\n case `array`:\n return arrayToObject(json.data)\n case `object`:\n return json.data\n case `string`:\n return stringToObject(json.data)\n case `boolean`:\n return booleanToObject(json.data)\n case `number`:\n return numberToObject(json.data)\n case `null`:\n return nullToObject()\n }\n },\n string: () => {\n switch (json.type) {\n case `array`:\n return arrayToString(json.data)\n case `object`:\n return objectToString(json.data)\n case `string`:\n return json.data\n case `boolean`:\n return booleanToString(json.data)\n case `number`:\n return numberToString(json.data)\n case `null`:\n return nullToString()\n }\n },\n null: () => null,\n },\n }\n}\n","const mapObject = <KeyedObj, I, O>(\n obj: { [K in keyof KeyedObj]: I },\n fn: (val: I, key: keyof KeyedObj) => O\n): { [K in keyof KeyedObj]: O } => {\n const newObj = {} as { [K in keyof KeyedObj]: O }\n const entries = Object.entries(obj) as [keyof KeyedObj, I][]\n entries.forEach(([key, val]) => (newObj[key] = fn(val, key)))\n return newObj\n}\n\nexport default mapObject\n","import type { MutableRefObject } from \"react\"\n\nimport type { SetterOrUpdater } from \"recoil\"\n\nimport { become } from \"~/packages/anvl/src/function\"\nimport { JSON_DEFAULTS } from \"~/packages/anvl/src/json\"\nimport type { Json, JsonObj, JsonTypeName } from \"~/packages/anvl/src/json\"\nimport { cast } from \"~/packages/anvl/src/json/cast\"\nimport mapObject from \"~/packages/Luum/src/utils/mapObject\"\n\nexport const makePropertySetters = <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>\n): { [K in keyof T]: SetterOrUpdater<T[K]> } =>\n mapObject<T, any, SetterOrUpdater<any>>(\n data,\n (value, key) => (newValue) =>\n set({ ...data, [key]: become(newValue)(value[key]) })\n )\n\nexport const makePropertyRenamers = <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>,\n stableKeyMapRef: MutableRefObject<{ [K in keyof T]: keyof T }>\n): { [K in keyof T]: (newKey: string) => void } =>\n mapObject<T, any, (newKey: string) => void>(\n data,\n (value, key) => (newKey) =>\n Object.hasOwn(data, newKey)\n ? null\n : set(() => {\n const entries = Object.entries(data)\n const index = entries.findIndex(([k]) => k === key)\n entries[index] = [newKey, value]\n const stableKeyMap = stableKeyMapRef.current\n stableKeyMapRef.current = {\n ...stableKeyMap,\n [newKey]: stableKeyMap[key],\n }\n return Object.fromEntries(entries) as T\n })\n )\n\nexport const makePropertyRemovers = <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>\n): { [K in keyof T]: () => void } =>\n mapObject<T, any, () => void>(\n data,\n (_, key) => () =>\n set(() => {\n const { [key]: _, ...rest } = data\n return rest as T\n })\n )\n\nexport const makePropertyRecasters = <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>\n): { [K in keyof T]: (newType: JsonTypeName) => void } =>\n mapObject<T, any, (newType: JsonTypeName) => void>(\n data,\n (value, key) => (newType) =>\n set(() => ({\n ...data,\n [key]: cast(value).to[newType](),\n }))\n )\n\nexport const makePropertyCreationInterface =\n <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>\n ): ((key: string, type: JsonTypeName) => (value?: Json) => void) =>\n (key, type) =>\n (value) =>\n set({ ...data, [key]: value ?? JSON_DEFAULTS[type] })\n\nexport const makePropertySorter =\n <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>,\n sortFn?: (a: string, b: string) => number\n ): (() => void) =>\n () => {\n const sortedKeys = Object.keys(data).sort(sortFn)\n const sortedObj = {} as Record<string, unknown>\n sortedKeys.forEach((key) => (sortedObj[key] = data[key]))\n set(sortedObj as T)\n }\n\n// export const sortPropertiesAlphabetically = <T extends JsonObj>(data: T): T =>\n// sortProperties(data, (a, b) => a.localeCompare(b))\n\nexport const deleteProperty =\n <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>\n ): ((key: keyof T) => void) =>\n (key) => {\n const { [key]: _, ...rest } = data\n set(rest as T)\n }\n\nexport const addProperty =\n <T extends JsonObj>(\n data: T,\n set: SetterOrUpdater<T>\n ): ((key?: string, value?: Json) => void) =>\n (key, value) => {\n const newKey = key ?? `newProperty`\n const newValue = value ?? ``\n set({ ...data, [newKey]: newValue })\n }\n","import type { ReactElement } from \"react\"\n\nimport { NumberInput, TextInput } from \"../../react-elastic-input\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\n\nexport const BooleanEditor = ({\n data,\n set,\n}: JsonEditorProps_INTERNAL<boolean>): ReactElement => (\n <input\n type=\"checkbox\"\n checked={data}\n onChange={(event) => set(event.target.checked)}\n />\n)\n\nexport const NullEditor = (): ReactElement => (\n <input type=\"text\" value=\"null\" readOnly />\n)\n\nexport const NumberEditor = ({\n path = [],\n isReadonly = () => false,\n data,\n set,\n}: JsonEditorProps_INTERNAL<number>): ReactElement => (\n <NumberInput\n value={data}\n set={isReadonly(path) ? undefined : (newValue) => set(Number(newValue))}\n autoSize={true}\n />\n)\n\nexport const StringEditor = ({\n path = [],\n isReadonly = () => false,\n data,\n set,\n Components,\n}: JsonEditorProps_INTERNAL<string>): ReactElement => {\n return (\n <Components.StringWrapper>\n <TextInput\n value={data}\n set={isReadonly(path) ? undefined : set}\n autoSize={true}\n />\n </Components.StringWrapper>\n )\n}\n","import type { ErrorInfo, ReactNode, FC } from \"react\"\nimport { useId, Component } from \"react\"\n\nimport { atomFamily, useRecoilState, useResetRecoilState } from \"recoil\"\n\nimport type { FallbackProps } from \"./DefaultFallback\"\nimport { DefaultFallback } from \"./DefaultFallback\"\n\nexport type ErrorBoundaryState = {\n error?: Error | string\n errorInfo?: ErrorInfo\n}\n\nexport type ErrorBoundaryProps = {\n children: ReactNode\n onError?: (error: Error | string, errorInfo: ErrorInfo) => void\n Fallback?: FC<FallbackProps>\n}\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n public constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { error: undefined, errorInfo: undefined }\n // We can filter or add information\n // to airbrake notifications here:\n }\n\n public override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.props.onError?.(error, errorInfo)\n this.setState({\n error,\n errorInfo,\n })\n }\n\n public override render(): ReactNode {\n const { error, errorInfo } = this.state\n const { children, Fallback = DefaultFallback } = this.props\n\n return errorInfo ? (\n <Fallback error={error} errorInfo={errorInfo} />\n ) : (\n (children as ReactNode)\n )\n }\n}\n\nexport const findErrorBoundaryState = atomFamily<ErrorBoundaryState, string>({\n key: `errorBoundary`,\n default: { error: undefined, errorInfo: undefined },\n})\n\nexport const RecoverableErrorBoundary: FC<ErrorBoundaryProps> = ({\n children,\n Fallback = DefaultFallback,\n}) => {\n const nodeId = useId()\n const [{ error }, setError] = useRecoilState(findErrorBoundaryState(nodeId))\n const resetError = useResetRecoilState(findErrorBoundaryState(nodeId))\n const hasError = Boolean(error)\n\n return hasError ? (\n <div>\n <button onClick={resetError}>Reset</button>\n <ErrorBoundary Fallback={Fallback}>{children}</ErrorBoundary>\n </div>\n ) : (\n <ErrorBoundary\n Fallback={Fallback}\n onError={(newError, newErrorInfo) =>\n setError({ error: newError, errorInfo: newErrorInfo })\n }\n >\n {children}\n </ErrorBoundary>\n )\n}\n","import type { ErrorInfo, FC } from \"react\"\n\nexport type FallbackProps = {\n error?: Error | string\n errorInfo?: ErrorInfo\n}\n\nexport const DefaultFallback: FC<FallbackProps> = ({ error, errorInfo }) => {\n const component = errorInfo?.componentStack.split(` `).filter(Boolean)[2]\n const message =\n error?.toString() ?? errorInfo?.componentStack ?? `Unknown error`\n return (\n <div\n data-testid=\"error-boundary\"\n style={{\n flex: `1`,\n background: `black`,\n backgroundImage: `url(./src/assets/kablooey.gif)`,\n backgroundPosition: `center`,\n // backgroundRepeat: `no-repeat`,\n backgroundSize: `overlay`,\n }}\n >\n {/* <img src=\"./src/assets/kablooey.gif\" alt=\"error\" /> */}\n <div\n style={{\n margin: `50px`,\n marginTop: `0`,\n padding: `50px`,\n border: `1px solid dashed`,\n }}\n >\n <span\n style={{\n background: `black`,\n color: `white`,\n padding: 10,\n paddingTop: 5,\n }}\n >\n {`⚠️ `}\n <span style={{ color: `#fc0`, fontWeight: 700 }}>{component}</span>\n {` ⚠️ `}\n {message}\n </span>\n </div>\n </div>\n )\n}\n","import type { FC, ReactNode } from \"react\"\n\nimport type { SerializedStyles } from \"@emotion/react\"\n\nimport { ErrorBoundary } from \"../react-error-boundary\"\n\nexport type Dict<T> = Record<string, T>\n\nexport type WrapperComponent<T extends Dict<unknown> = Dict<unknown>> = FC<\n T & { children: ReactNode }\n>\n\nexport type WC<T extends Dict<unknown> = Dict<unknown>> = WrapperComponent<T>\n\nexport type JsonEditorComponents = {\n ErrorBoundary: WC\n\n Button: WC<{ onClick: () => void; disabled: boolean }>\n DeleteIcon: FC\n\n EditorLayout: FC<{\n DeleteButton?: FC\n Header?: FC\n KeyInput?: FC\n TypeSelect?: FC\n ValueEditor: FC\n Wrapper: WC\n }>\n EditorWrapper: WC<{ customCss?: SerializedStyles; className?: string }>\n\n ArrayWrapper: WC\n ObjectWrapper: WC\n StringWrapper: WC\n NumberWrapper: WC\n BooleanWrapper: WC\n NullWrapper: WC\n\n MiscastPropertyWrapper: WC\n MissingPropertyWrapper: WC\n OfficialPropertyWrapper: WC\n UnofficialPropertyWrapper: WC\n IllegalPropertyWrapper: WC\n KeyWrapper: WC\n}\n\nexport const DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents = {\n ErrorBoundary: ({ children }) => <ErrorBoundary>{children}</ErrorBoundary>,\n Button: ({ onClick, children, disabled }) => (\n <button className=\"json_editor_button\" onClick={onClick} disabled={disabled}>\n {children}\n </button>\n ),\n EditorWrapper: ({ children, customCss, className }) => (\n <div className={`json_editor` + ` ` + className ?? ``} css={customCss}>\n {children}\n </div>\n ),\n EditorLayout: ({\n DeleteButton,\n Header,\n KeyInput,\n TypeSelect,\n ValueEditor,\n Wrapper,\n }) => {\n return (\n <Wrapper>\n {DeleteButton && <DeleteButton />}\n {Header && <Header />}\n {KeyInput && <KeyInput />}\n {TypeSelect && <TypeSelect />}\n <ValueEditor />\n </Wrapper>\n )\n },\n ArrayWrapper: ({ children }) => (\n <div className=\"json_editor_array\">{children}</div>\n ),\n ObjectWrapper: ({ children }) => (\n <div className=\"json_editor_object\">{children}</div>\n ),\n StringWrapper: ({ children }) => (\n <span className=\"json_editor_string\">{children}</span>\n ),\n NumberWrapper: ({ children }) => (\n <span className=\"json_editor_number\">{children}</span>\n ),\n BooleanWrapper: ({ children }) => (\n <span className=\"json_editor_boolean\">{children}</span>\n ),\n NullWrapper: ({ children }) => (\n <span className=\"json_editor_null\">{children}</span>\n ),\n MissingPropertyWrapper: ({ children }) => (\n <div className=\"json_editor_property json_editor_missing\">{children}</div>\n ),\n MiscastPropertyWrapper: ({ children }) => (\n <div className=\"json_editor_property json_editor_miscast\">{children}</div>\n ),\n IllegalPropertyWrapper: ({ children }) => (\n <span className=\"json_editor_property json_editor_illegal\">{children}</span>\n ),\n OfficialPropertyWrapper: ({ children }) => (\n <span className=\"json_editor_property json_editor_official\">{children}</span>\n ),\n UnofficialPropertyWrapper: ({ children }) => (\n <span className=\"json_editor_property json_editor_unofficial\">\n {children}\n </span>\n ),\n DeleteIcon: () => (\n <span className=\"json_editor_icon json_editor_delete\">x</span>\n ),\n KeyWrapper: ({ children }) => (\n <span className=\"json_editor_key\">{children}</span>\n ),\n}\n","import type { FC, ReactElement, RefObject } from \"react\"\nimport { useMemo } from \"react\"\n\nimport type { SerializedStyles } from \"@emotion/react\"\nimport Ajv from \"ajv\"\nimport type { SetterOrUpdater } from \"recoil\"\n\nimport type { Json, JsonTypes } from \"~/packages/anvl/src/json\"\nimport type { JsonSchema } from \"~/packages/anvl/src/json-schema/json-schema\"\n\nimport type { JsonEditorComponents } from \"./default-components\"\nimport { DEFAULT_JSON_EDITOR_COMPONENTS } from \"./default-components\"\nimport { ArrayEditor } from \"./editors-by-type/array-editor\"\nimport { ObjectEditor } from \"./editors-by-type/object-editor\"\nimport {\n BooleanEditor,\n NullEditor,\n NumberEditor,\n StringEditor,\n} from \"./editors-by-type/primitive-editors\"\nimport type { JsonEditorProps_INTERNAL } from \"./json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"./json-editor-internal\"\n\nexport const SubEditors: Record<\n keyof JsonTypes,\n FC<JsonEditorProps_INTERNAL<any>>\n> = {\n array: ArrayEditor,\n boolean: BooleanEditor,\n null: NullEditor,\n number: NumberEditor,\n object: ObjectEditor,\n string: StringEditor,\n}\n\nexport type JsonEditorProps<T extends Json> = {\n data: T\n set: SetterOrUpdater<T>\n ref?: RefObject<HTMLInputElement>\n name?: string\n rename?: (newKey: string) => void\n remove?: () => void\n schema?: JsonSchema\n path?: ReadonlyArray<number | string>\n isReadonly?: (path: ReadonlyArray<number | string>) => boolean\n isHidden?: (path: ReadonlyArray<number | string>) => boolean\n className?: string\n customCss?: SerializedStyles\n Header?: FC<{ data: T; schema?: JsonSchema }>\n Components?: Partial<JsonEditorComponents>\n}\n\nexport const JsonEditor = <T extends Json>({\n data,\n set,\n schema = true,\n name,\n rename,\n remove,\n isReadonly = () => false,\n isHidden = () => false,\n // isIllegal = () => false,\n className,\n customCss,\n Header,\n Components: CustomComponents = {},\n}: JsonEditorProps<T>): ReactElement => {\n const Components = {\n ...DEFAULT_JSON_EDITOR_COMPONENTS,\n ...CustomComponents,\n }\n\n const ajv = new Ajv({ allErrors: true, verbose: true })\n const validate = useMemo(() => {\n return ajv.compile(schema)\n }, [schema])\n const validationResults = validate(data)\n\n return (\n <JsonEditor_INTERNAL\n data={data}\n set={set}\n name={name}\n schema={schema}\n rename={rename}\n remove={remove}\n path={[]}\n isReadonly={isReadonly}\n isHidden={isHidden}\n className={className}\n customCss={customCss}\n Header={Header}\n Components={Components}\n />\n )\n}\n","import type { FC } from \"react\"\n\nimport type { JsonTypes } from \"~/packages/anvl/src/json\"\n\nimport { ArrayEditor } from \"./editors-by-type/array-editor\"\nimport { ObjectEditor } from \"./editors-by-type/object-editor\"\nimport {\n BooleanEditor,\n NullEditor,\n NumberEditor,\n StringEditor,\n} from \"./editors-by-type/primitive-editors\"\nimport type { JsonEditorProps_INTERNAL } from \"./json-editor-internal\"\n\nexport * from \"./default-components\"\nexport * from \"./developer-interface\"\n\nexport const SubEditors: Record<\n keyof JsonTypes,\n FC<JsonEditorProps_INTERNAL<any>>\n> = {\n array: ArrayEditor,\n boolean: BooleanEditor,\n null: NullEditor,\n number: NumberEditor,\n object: ObjectEditor,\n string: StringEditor,\n}\n","import type { FC } from \"react\"\n\nimport type { ReadonlySelectorToken, StateToken } from \"atom.io\"\nimport type { StoreHooks } from \"atom.io/react\"\n\nimport { isPlainJson } from \"~/packages/anvl/src/json\"\nimport { ElasticInput } from \"~/packages/hamr/src/react-elastic-input\"\nimport { JsonEditor } from \"~/packages/hamr/src/react-json-editor\"\n\nexport const StateEditor: FC<{\n storeHooks: StoreHooks\n token: StateToken<unknown>\n}> = ({ storeHooks, token }) => {\n const [data, set] = storeHooks.useIO(token)\n return isPlainJson(data) ? (\n <JsonEditor data={data} set={set} schema={true} />\n ) : (\n <div className=\"json_editor\">\n <ElasticInput\n value={\n data instanceof Set\n ? `Set { ${JSON.stringify([...data]).slice(1, -1)} }`\n : data instanceof Map\n ? `Map ` + JSON.stringify([...data])\n : Object.getPrototypeOf(data).constructor.name +\n ` ` +\n JSON.stringify(data)\n }\n disabled={true}\n />\n </div>\n )\n}\n\nexport const ReadonlySelectorEditor: FC<{\n storeHooks: StoreHooks\n token: ReadonlySelectorToken<unknown>\n}> = ({ storeHooks, token }) => {\n const data = storeHooks.useO(token)\n return isPlainJson(data) ? (\n <JsonEditor\n data={data}\n set={() => null}\n schema={true}\n isReadonly={() => true}\n />\n ) : (\n <div className=\"json_editor\">\n <ElasticInput\n value={\n data instanceof Set\n ? `Set ` + JSON.stringify([...data])\n : data instanceof Map\n ? `Map ` + JSON.stringify([...data])\n : Object.getPrototypeOf(data).constructor.name +\n ` ` +\n JSON.stringify(data)\n }\n disabled={true}\n />\n </div>\n )\n}\n\nexport const StoreEditor: FC<{\n storeHooks: StoreHooks\n token: ReadonlySelectorToken<unknown> | StateToken<unknown>\n}> = ({ storeHooks, token }) => {\n if (token.type === `readonly_selector`) {\n return <ReadonlySelectorEditor storeHooks={storeHooks} token={token} />\n }\n return <StateEditor storeHooks={storeHooks} token={token} />\n}\n","import type { Json } from \"~/packages/anvl/src/json\"\n\nimport type { AtomEffect } from \"../index\"\n\nexport type StringInterface<T> = {\n stringify: (t: T) => string\n parse: (s: string) => T\n}\n\nexport const persistAtom =\n <T>(storage: Storage) =>\n ({ stringify, parse }: StringInterface<T>) =>\n (key: string): AtomEffect<T> =>\n ({ setSelf, onSet }) => {\n const savedValue = storage.getItem(key)\n\n if (savedValue != null) setSelf(parse(savedValue))\n\n onSet(({ newValue }) => {\n if (newValue == null) {\n storage.removeItem(key)\n return\n }\n storage.setItem(key, stringify(newValue))\n })\n }\n\nexport const lazyLocalStorageEffect: <J extends Json>(\n key: string\n) => AtomEffect<J> = persistAtom(localStorage)(JSON)\n"],"mappings":"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","names":["useRef","Fragment","pipe","pipe","a","a","pipe","pipe","_a","useState","useRef","pipe","jsx","jsxs","pipe","useState","useRef","_a","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","useRef","isBoolean","isNumber","isString","pipe","pipe","isString","isString","isString","_a","isString","isNumber","isBoolean","isString","isBoolean","node","refMap","_a","mapObject","_a","_","Fragment","jsx","jsxs","_a","useRef","jsx","useId","jsx","jsxs","_a","jsx","jsxs","_a","jsx","jsxs","jsx","jsx","jsx","Fragment","jsx","jsxs","key","token","Fragment","jsx","jsxs","useRef"]}
@@ -1,27 +0,0 @@
1
- import * as AtomIO from 'atom.io';
2
- import * as SocketIO from 'socket.io';
3
-
4
- type Primitive = boolean | number | string | null;
5
- type Serializable = Primitive | Readonly<{
6
- [key: string]: Serializable;
7
- }> | ReadonlyArray<Serializable>;
8
- type JsonObj<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
9
- type JsonArr<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
10
- type Json = JsonArr | JsonObj | Primitive;
11
-
12
- declare const useExposeSingle: ({ socket, store }: ServerConfig) => <J extends Json>(token: AtomIO.StateToken<J>) => () => void;
13
-
14
- declare const useExposeFamily: ({ socket, store }: ServerConfig) => <J extends Json>(family: AtomIO.AtomFamily<J, AtomIO.Serializable> | AtomIO.SelectorFamily<J, AtomIO.Serializable>, index: AtomIO.StateToken<Set<string>>) => () => void;
15
-
16
- type ƒn = (...parameters: any[]) => any;
17
-
18
- declare const useReceiveTransaction: ({ socket, store }: ServerConfig) => <ƒ extends ƒn>(tx: AtomIO.TransactionToken<ƒ>) => () => void;
19
-
20
- declare const useReceiveState: ({ socket, store }: ServerConfig) => <J extends Json>(token: AtomIO.StateToken<J>) => () => void;
21
-
22
- type ServerConfig = {
23
- socket: SocketIO.Socket;
24
- store?: AtomIO.__INTERNAL__.Store;
25
- };
26
-
27
- export { ServerConfig, useExposeFamily, useExposeSingle, useReceiveState, useReceiveTransaction };
@@ -1,27 +0,0 @@
1
- import * as AtomIO from 'atom.io';
2
- import * as SocketIO from 'socket.io';
3
-
4
- type Primitive = boolean | number | string | null;
5
- type Serializable = Primitive | Readonly<{
6
- [key: string]: Serializable;
7
- }> | ReadonlyArray<Serializable>;
8
- type JsonObj<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
9
- type JsonArr<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
10
- type Json = JsonArr | JsonObj | Primitive;
11
-
12
- declare const useExposeSingle: ({ socket, store }: ServerConfig) => <J extends Json>(token: AtomIO.StateToken<J>) => () => void;
13
-
14
- declare const useExposeFamily: ({ socket, store }: ServerConfig) => <J extends Json>(family: AtomIO.AtomFamily<J, AtomIO.Serializable> | AtomIO.SelectorFamily<J, AtomIO.Serializable>, index: AtomIO.StateToken<Set<string>>) => () => void;
15
-
16
- type ƒn = (...parameters: any[]) => any;
17
-
18
- declare const useReceiveTransaction: ({ socket, store }: ServerConfig) => <ƒ extends ƒn>(tx: AtomIO.TransactionToken<ƒ>) => () => void;
19
-
20
- declare const useReceiveState: ({ socket, store }: ServerConfig) => <J extends Json>(token: AtomIO.StateToken<J>) => () => void;
21
-
22
- type ServerConfig = {
23
- socket: SocketIO.Socket;
24
- store?: AtomIO.__INTERNAL__.Store;
25
- };
26
-
27
- export { ServerConfig, useExposeFamily, useExposeSingle, useReceiveState, useReceiveTransaction };
@@ -1,191 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
-
29
- // ../src/realtime/index.ts
30
- var realtime_exports = {};
31
- __export(realtime_exports, {
32
- useExposeFamily: () => useExposeFamily,
33
- useExposeSingle: () => useExposeSingle,
34
- useReceiveState: () => useReceiveState,
35
- useReceiveTransaction: () => useReceiveTransaction
36
- });
37
- module.exports = __toCommonJS(realtime_exports);
38
-
39
- // ../src/realtime/hook-composition/expose-single.ts
40
- var AtomIO = __toESM(require("atom.io"));
41
- var useExposeSingle = ({ socket, store }) => {
42
- return function exposeSingle(token) {
43
- let unsubscribeFromStateUpdates = null;
44
- const fillUnsubRequest = () => {
45
- socket.off(`unsub:${token.key}`, fillUnsubRequest);
46
- unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
47
- unsubscribeFromStateUpdates = null;
48
- };
49
- const fillSubRequest = () => {
50
- socket.emit(`serve:${token.key}`, AtomIO.getState(token, store));
51
- unsubscribeFromStateUpdates = AtomIO.subscribe(
52
- token,
53
- ({ newValue }) => {
54
- socket.emit(`serve:${token.key}`, newValue);
55
- },
56
- store
57
- );
58
- socket.on(`unsub:${token.key}`, fillUnsubRequest);
59
- };
60
- socket.on(`sub:${token.key}`, fillSubRequest);
61
- return () => {
62
- socket.off(`sub:${token.key}`, fillSubRequest);
63
- unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
64
- };
65
- };
66
- };
67
-
68
- // ../../anvl/src/json/index.ts
69
- var import_function = require("fp-ts/function");
70
- var parseJson = (str) => JSON.parse(str);
71
-
72
- // ../src/realtime/hook-composition/expose-family.ts
73
- var AtomIO2 = __toESM(require("atom.io"));
74
- var subscribeToTokenCreation = (family, handleTokenCreation) => {
75
- const subscription = family.type === `atom_family` ? family.subject.subscribe(handleTokenCreation) : family.subject.subscribe(handleTokenCreation);
76
- return () => subscription.unsubscribe();
77
- };
78
- var useExposeFamily = ({ socket, store }) => {
79
- return function exposeFamily(family, index) {
80
- const unsubSingleCallbacksByKey = /* @__PURE__ */ new Map();
81
- const unsubFamilyCallbacksByKey = /* @__PURE__ */ new Map();
82
- const fillFamilyUnsubRequest = () => {
83
- unsubFamilyCallbacksByKey.forEach((unsub) => unsub());
84
- unsubFamilyCallbacksByKey.clear();
85
- socket.off(`unsub:${family.key}`, fillFamilyUnsubRequest);
86
- };
87
- const fillSingleUnsubRequest = (key) => {
88
- socket.off(`unsub:${key}`, fillSingleUnsubRequest);
89
- const unsub = unsubSingleCallbacksByKey.get(key);
90
- if (unsub) {
91
- unsub();
92
- unsubSingleCallbacksByKey.delete(key);
93
- }
94
- };
95
- const fillSubRequest = (subKey) => {
96
- if (subKey === void 0) {
97
- const keys = AtomIO2.getState(index, store);
98
- keys.forEach((key) => {
99
- var _a;
100
- const token = family(key);
101
- socket.emit(
102
- `serve:${family.key}`,
103
- parseJson(((_a = token.family) == null ? void 0 : _a.subKey) || `null`),
104
- AtomIO2.getState(token, store)
105
- );
106
- });
107
- const unsubscribeFromTokenCreation = subscribeToTokenCreation(
108
- family,
109
- (token) => {
110
- const unsub = AtomIO2.subscribe(
111
- token,
112
- ({ newValue }) => {
113
- var _a;
114
- socket.emit(
115
- `serve:${family.key}`,
116
- parseJson(((_a = token.family) == null ? void 0 : _a.subKey) || `null`),
117
- newValue
118
- );
119
- },
120
- store
121
- );
122
- unsubFamilyCallbacksByKey.set(token.key, unsub);
123
- }
124
- );
125
- unsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation);
126
- socket.on(`unsub:${family.key}`, fillFamilyUnsubRequest);
127
- } else {
128
- const token = family(subKey);
129
- socket.emit(`serve:${token.key}`, AtomIO2.getState(token, store));
130
- const unsubscribe = AtomIO2.subscribe(
131
- token,
132
- ({ newValue }) => {
133
- socket.emit(`serve:${token.key}`, newValue);
134
- },
135
- store
136
- );
137
- unsubSingleCallbacksByKey.set(token.key, unsubscribe);
138
- socket.on(`unsub:${token.key}`, () => {
139
- fillSingleUnsubRequest(token.key);
140
- });
141
- }
142
- };
143
- socket.on(`sub:${family.key}`, fillSubRequest);
144
- return () => {
145
- socket.off(`sub:${family.key}`, fillSubRequest);
146
- unsubFamilyCallbacksByKey.forEach((unsub) => unsub());
147
- unsubSingleCallbacksByKey.forEach((unsub) => unsub());
148
- unsubFamilyCallbacksByKey.clear();
149
- unsubSingleCallbacksByKey.clear();
150
- };
151
- };
152
- };
153
-
154
- // ../src/realtime/hook-composition/receive-transaction.ts
155
- var AtomIO3 = __toESM(require("atom.io"));
156
- var useReceiveTransaction = ({ socket, store }) => {
157
- return function receiveTransaction(tx) {
158
- const fillTransactionRequest = (update) => AtomIO3.runTransaction(tx, store)(...update.params);
159
- socket.on(`tx:${tx.key}`, fillTransactionRequest);
160
- return () => socket.off(`tx:${tx.key}`, fillTransactionRequest);
161
- };
162
- };
163
-
164
- // ../src/realtime/hook-composition/receive-state.ts
165
- var AtomIO4 = __toESM(require("atom.io"));
166
- var useReceiveState = ({ socket, store }) => {
167
- return function receiveState(token) {
168
- const publish = (newValue) => AtomIO4.setState(token, newValue, store);
169
- const fillPubUnclaim = () => {
170
- socket.off(`pub:${token.key}`, publish);
171
- socket.off(`unclaim:${token.key}`, fillPubUnclaim);
172
- };
173
- const fillPubClaim = () => {
174
- socket.on(`pub:${token.key}`, publish);
175
- socket.on(`unclaim:${token.key}`, fillPubUnclaim);
176
- };
177
- socket.on(`claim:${token.key}`, fillPubClaim);
178
- return () => {
179
- socket.off(`claim:${token.key}`, fillPubClaim);
180
- socket.off(`pub:${token.key}`, publish);
181
- };
182
- };
183
- };
184
- // Annotate the CommonJS export names for ESM import in node:
185
- 0 && (module.exports = {
186
- useExposeFamily,
187
- useExposeSingle,
188
- useReceiveState,
189
- useReceiveTransaction
190
- });
191
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/realtime/index.ts","../../src/realtime/hook-composition/expose-single.ts","../../../anvl/src/json/index.ts","../../src/realtime/hook-composition/expose-family.ts","../../src/realtime/hook-composition/receive-transaction.ts","../../src/realtime/hook-composition/receive-state.ts"],"sourcesContent":["export * from \"./hook-composition\"\n","import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeSingle = ({ socket, store }: ServerConfig) => {\n return function exposeSingle<J extends Json>(\n token: AtomIO.StateToken<J>\n ): () => void {\n let unsubscribeFromStateUpdates: (() => void) | null = null\n\n const fillUnsubRequest = () => {\n socket.off(`unsub:${token.key}`, fillUnsubRequest)\n unsubscribeFromStateUpdates?.()\n unsubscribeFromStateUpdates = null\n }\n\n const fillSubRequest = () => {\n socket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n unsubscribeFromStateUpdates = AtomIO.subscribe(\n token,\n ({ newValue }) => {\n socket.emit(`serve:${token.key}`, newValue)\n },\n store\n )\n socket.on(`unsub:${token.key}`, fillUnsubRequest)\n }\n\n socket.on(`sub:${token.key}`, fillSubRequest)\n\n return () => {\n socket.off(`sub:${token.key}`, fillSubRequest)\n unsubscribeFromStateUpdates?.()\n }\n }\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","import type { Json } from \"anvl/json\"\nimport { parseJson } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\nconst subscribeToTokenCreation = <T>(\n family: AtomIO.AtomFamily<T> | AtomIO.SelectorFamily<T>,\n handleTokenCreation: (token: AtomIO.StateToken<T>) => void\n): (() => void) => {\n const subscription =\n family.type === `atom_family`\n ? family.subject.subscribe(handleTokenCreation)\n : family.subject.subscribe(handleTokenCreation)\n return () => subscription.unsubscribe()\n}\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeFamily = ({ socket, store }: ServerConfig) => {\n return function exposeFamily<J extends Json>(\n family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n index: AtomIO.StateToken<Set<string>>\n ): () => void {\n const unsubSingleCallbacksByKey = new Map<string, () => void>()\n const unsubFamilyCallbacksByKey = new Map<string, () => void>()\n\n const fillFamilyUnsubRequest = () => {\n unsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n unsubFamilyCallbacksByKey.clear()\n socket.off(`unsub:${family.key}`, fillFamilyUnsubRequest)\n }\n\n const fillSingleUnsubRequest = (key: string) => {\n socket.off(`unsub:${key}`, fillSingleUnsubRequest)\n const unsub = unsubSingleCallbacksByKey.get(key)\n if (unsub) {\n unsub()\n unsubSingleCallbacksByKey.delete(key)\n }\n }\n\n const fillSubRequest = (subKey?: AtomIO.Serializable) => {\n if (subKey === undefined) {\n const keys = AtomIO.getState(index, store)\n keys.forEach((key) => {\n const token = family(key)\n socket.emit(\n `serve:${family.key}`,\n parseJson(token.family?.subKey || `null`),\n AtomIO.getState(token, store)\n )\n })\n\n const unsubscribeFromTokenCreation = subscribeToTokenCreation(\n family,\n (token) => {\n const unsub = AtomIO.subscribe(\n token,\n ({ newValue }) => {\n socket.emit(\n `serve:${family.key}`,\n parseJson(token.family?.subKey || `null`),\n newValue\n )\n },\n store\n )\n unsubFamilyCallbacksByKey.set(token.key, unsub)\n }\n )\n unsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation)\n\n socket.on(`unsub:${family.key}`, fillFamilyUnsubRequest)\n } else {\n const token = family(subKey)\n socket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n const unsubscribe = AtomIO.subscribe(\n token,\n ({ newValue }) => {\n socket.emit(`serve:${token.key}`, newValue)\n },\n store\n )\n unsubSingleCallbacksByKey.set(token.key, unsubscribe)\n socket.on(`unsub:${token.key}`, () => {\n fillSingleUnsubRequest(token.key)\n })\n }\n }\n\n socket.on(`sub:${family.key}`, fillSubRequest)\n\n return () => {\n socket.off(`sub:${family.key}`, fillSubRequest)\n unsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n unsubSingleCallbacksByKey.forEach((unsub) => unsub())\n unsubFamilyCallbacksByKey.clear()\n unsubSingleCallbacksByKey.clear()\n }\n }\n}\n","import * as AtomIO from \"atom.io\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { ServerConfig } from \".\"\n\nexport const useReceiveTransaction = ({ socket, store }: ServerConfig) => {\n return function receiveTransaction<ƒ extends ƒn>(\n tx: AtomIO.TransactionToken<ƒ>\n ): () => void {\n const fillTransactionRequest = (update: AtomIO.TransactionUpdate<ƒ>) =>\n AtomIO.runTransaction<ƒ>(tx, store)(...update.params)\n\n socket.on(`tx:${tx.key}`, fillTransactionRequest)\n\n return () => socket.off(`tx:${tx.key}`, fillTransactionRequest)\n }\n}\n","import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useReceiveState = ({ socket, store }: ServerConfig) => {\n return function receiveState<J extends Json>(\n token: AtomIO.StateToken<J>\n ): () => void {\n const publish = (newValue: J) => AtomIO.setState(token, newValue, store)\n\n const fillPubUnclaim = () => {\n socket.off(`pub:${token.key}`, publish)\n socket.off(`unclaim:${token.key}`, fillPubUnclaim)\n }\n const fillPubClaim = () => {\n socket.on(`pub:${token.key}`, publish)\n socket.on(`unclaim:${token.key}`, fillPubUnclaim)\n }\n\n socket.on(`claim:${token.key}`, fillPubClaim)\n\n return () => {\n socket.off(`claim:${token.key}`, fillPubClaim)\n socket.off(`pub:${token.key}`, publish)\n }\n }\n}\n"],"mappings":"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","names":["AtomIO","AtomIO","AtomIO"]}