@thalesfp/snapstate 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/form/form.ts","../../src/react/store.ts","../../src/core/types.ts","../../src/core/trie.ts","../../src/core/structural.ts","../../src/core/computed.ts","../../src/core/store.ts","../../src/core/base.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ReactSnapStore } from \"../react/store.js\";\nimport { asyncStatus } from \"../core/types.js\";\nimport type { OperationState } from \"../core/types.js\";\n\nexport type ValidationMode = \"onSubmit\" | \"onBlur\" | \"onChange\";\n\nexport interface FormConfig {\n validationMode: ValidationMode;\n}\n\nexport type FormElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nexport type FormErrors<V> = { [K in keyof V]?: string[] };\n\nexport interface FormState<V extends Record<string, unknown>> {\n values: V;\n initial: V;\n errors: FormErrors<V>;\n submitStatus: OperationState;\n}\n\nexport function getObjectSchema(\n schema: z.ZodTypeAny,\n): z.ZodObject<any> | null {\n if (schema instanceof z.ZodObject) return schema;\n if (schema instanceof z.ZodPipe)\n return getObjectSchema((schema as any)._zod.def.in);\n return null;\n}\n\nconst INNER_TYPE_WRAPPERS = new Set([\n \"optional\", \"nullable\", \"default\", \"prefault\",\n \"catch\", \"nonoptional\", \"success\", \"readonly\",\n]);\n\nexport function getBaseSchemaType(schema: unknown): string | null {\n if (\n !schema ||\n typeof schema !== \"object\" ||\n !(\"_zod\" in schema) ||\n !(schema as any)._zod?.def?.type\n ) {\n return null;\n }\n const type: string = (schema as any)._zod.def.type;\n if (INNER_TYPE_WRAPPERS.has(type)) {\n return getBaseSchemaType((schema as any)._zod.def.innerType);\n }\n if (type === \"pipe\") {\n return getBaseSchemaType((schema as any)._zod.def.in);\n }\n if (type === \"literal\") {\n const vals = (schema as any)._zod.def.values;\n if (Array.isArray(vals) && vals.length > 0) {\n if (vals[0] === null) { return \"null\"; }\n return typeof vals[0];\n }\n return \"string\";\n }\n return type;\n}\n\nexport class SnapFormStore<\n V extends Record<string, unknown>,\n K extends string = string,\n> extends ReactSnapStore<FormState<V>, K> {\n private schema: z.ZodTypeAny;\n private objectSchema: z.ZodObject<any> | null;\n private formConfig: FormConfig;\n private _refs: Map<string, FormElement> = new Map();\n private _radioRefs: Map<string, Set<FormElement>> = new Map();\n\n constructor(\n schema: z.ZodTypeAny,\n initialValues: V,\n config?: Partial<FormConfig>,\n ) {\n super({\n values: { ...initialValues },\n initial: { ...initialValues },\n errors: {} as FormErrors<V>,\n submitStatus: { status: asyncStatus(\"idle\"), error: null },\n });\n this.schema = schema;\n this.objectSchema = getObjectSchema(schema);\n this.formConfig = {\n validationMode: config?.validationMode ?? \"onSubmit\",\n };\n }\n\n get values(): V {\n return this.state.get(\"values\");\n }\n\n get errors(): FormErrors<V> {\n return this.state.get(\"errors\");\n }\n\n get isDirty(): boolean {\n const values = this.state.get(\"values\");\n const initial = this.state.get(\"initial\");\n const shapeKeys = this.objectSchema ? Object.keys(this.objectSchema.shape) : [];\n const allKeys = new Set([...Object.keys(initial), ...shapeKeys]);\n for (const key of allKeys) {\n if (!this.valuesEqual(values[key], initial[key])) { return true; }\n }\n return false;\n }\n\n get isValid(): boolean {\n const errors = this.state.get(\"errors\");\n return Object.keys(errors).length === 0;\n }\n\n register(field: keyof V & string): {\n ref: (el: FormElement | null) => void;\n name: string;\n defaultValue?: string;\n defaultChecked?: boolean;\n onBlur: () => void;\n onChange: () => void;\n } {\n const value = this.state.get(`values.${field}` as any);\n const isBool = this.getFieldType(field) === \"boolean\";\n const trackedEls = new Set<FormElement>();\n return {\n ref: (el: FormElement | null) => {\n if (el) {\n if ((el as HTMLInputElement).type === \"radio\") {\n if (!this._radioRefs.has(field)) this._refs.delete(field);\n let set = this._radioRefs.get(field);\n if (!set) { set = new Set(); this._radioRefs.set(field, set); }\n set.add(el);\n } else {\n this._refs.set(field, el);\n if (value instanceof Date || Array.isArray(value)) {\n this.syncValueToDom(field, value);\n }\n }\n trackedEls.add(el);\n } else {\n for (const tracked of trackedEls) {\n const set = this._radioRefs.get(field);\n if (set) {\n set.delete(tracked);\n if (set.size === 0) this._radioRefs.delete(field);\n } else {\n this._refs.delete(field);\n }\n }\n trackedEls.clear();\n }\n },\n name: field,\n ...(isBool\n ? { defaultChecked: Boolean(value) }\n : Array.isArray(value) ? {}\n : { defaultValue: value instanceof Date ? this.formatLocalDateTime(value) : String(value ?? \"\") }),\n onBlur: () => {\n this.syncRefToState(field);\n this.handleBlur(field);\n },\n onChange: () => {\n this.syncRefToState(field);\n this.handleChange(field);\n },\n };\n }\n\n getValues(): V {\n const stateValues = this.state.get(\"values\");\n const merged = { ...stateValues };\n for (const [field, el] of this._refs) {\n (merged as any)[field] = this.coerceRefValue(field, el);\n }\n for (const [field] of this._radioRefs) {\n (merged as any)[field] = this.coerceRadioValue(field);\n }\n return merged as V;\n }\n\n getValue(field: keyof V & string): V[typeof field] {\n if (this._radioRefs.has(field)) {\n return this.coerceRadioValue(field) as V[typeof field];\n }\n const el = this._refs.get(field);\n if (el) return this.coerceRefValue(field, el) as V[typeof field];\n return this.state.get(`values.${field}` as any);\n }\n\n setValue<F extends keyof V & string>(field: F, value: V[F]): void {\n this.state.set(`values.${field}` as any, value);\n this.syncValueToDom(field, value);\n this.handleChange(field);\n }\n\n handleBlur(field: keyof V & string): void {\n if (this.formConfig.validationMode === \"onBlur\") {\n this.validateField(field);\n }\n }\n\n handleChange(field: keyof V & string): void {\n if (this.formConfig.validationMode === \"onChange\") {\n this.validateField(field);\n }\n }\n\n isFieldDirty(field: keyof V & string): boolean {\n return !this.valuesEqual(\n this.state.get(`values.${field}` as any),\n this.state.get(`initial.${field}` as any),\n );\n }\n\n setError(field: keyof V & string, message: string): void {\n const errors = this.state.get(\"errors\");\n const existing = errors[field] ?? [];\n this.state.set(`errors.${field}` as any, [...existing, message] as any);\n }\n\n clearErrors(): void {\n this.state.set(\"errors\", {} as FormErrors<V>);\n }\n\n validate(): V | null {\n this.syncFromRefs();\n const result = this.schema.safeParse(this.state.get(\"values\"));\n if (result.success) {\n this.clearErrors();\n return result.data as V;\n }\n const errors: Record<string, string[]> = {};\n for (const issue of (result as any).error.issues) {\n const field = issue.path[0] as string;\n if (!errors[field]) errors[field] = [];\n errors[field].push(issue.message);\n }\n this.state.set(\"errors\", errors as FormErrors<V>);\n return null;\n }\n\n validateField(field: keyof V & string): void {\n if (!this.objectSchema) return;\n const fieldSchema = this.objectSchema.shape[field];\n if (!fieldSchema) return;\n const value = this.state.get(`values.${field}` as any);\n const result = (fieldSchema as z.ZodTypeAny).safeParse(value);\n if (result.success) {\n const errors = { ...this.state.get(\"errors\") };\n delete errors[field];\n this.state.set(\"errors\", errors as FormErrors<V>);\n } else {\n const messages = (result as any).error.issues.map(\n (i: { message: string }) => i.message,\n );\n this.state.set(`errors.${field}` as any, messages as any);\n }\n }\n\n reset(): void {\n const initial = this.state.get(\"initial\");\n this.state.batch(() => {\n this.state.set(\"values\", { ...initial });\n this.state.set(\"errors\", {} as FormErrors<V>);\n this.state.set(\"submitStatus\", { status: asyncStatus(\"idle\"), error: null });\n });\n this.syncToDom();\n }\n\n clear(): void {\n const initial = this.state.get(\"initial\");\n const shapeKeys = this.objectSchema ? Object.keys(this.objectSchema.shape) : [];\n const allKeys = new Set([...Object.keys(initial), ...shapeKeys]);\n const empty = [...allKeys].reduce(\n (acc, key) => {\n const val = initial[key];\n if (val === undefined || val === null) {\n const ft = this.getFieldType(key);\n if (ft === \"number\") { (acc as any)[key] = 0; }\n else if (ft === \"boolean\") { (acc as any)[key] = false; }\n else if (ft === \"null\") { (acc as any)[key] = null; }\n else if (val === null && ft === \"string\") { (acc as any)[key] = \"\"; }\n else if (val === null && ft === \"date\") { (acc as any)[key] = null; }\n else if (val === null && ft === \"array\") { (acc as any)[key] = []; }\n else if (val === null && (ft === \"object\" || ft === \"record\")) { (acc as any)[key] = {}; }\n else { (acc as any)[key] = val; }\n } else if (val instanceof Date) { (acc as any)[key] = null; }\n else if (typeof val === \"number\") { (acc as any)[key] = 0; }\n else if (typeof val === \"boolean\") { (acc as any)[key] = false; }\n else if (Array.isArray(val)) { (acc as any)[key] = []; }\n else if (typeof val === \"object\") { (acc as any)[key] = {}; }\n else { (acc as any)[key] = \"\"; }\n return acc;\n },\n {} as V,\n );\n this.state.batch(() => {\n this.state.set(\"values\", empty);\n this.state.set(\"errors\", {} as FormErrors<V>);\n });\n this.syncToDom();\n }\n\n setInitialValues(values: Partial<V>): void {\n const current = this.state.get(\"initial\");\n const merged = { ...current, ...values } as V;\n this.state.batch(() => {\n this.state.set(\"values\", { ...merged });\n this.state.set(\"initial\", merged);\n });\n this.syncToDom();\n }\n\n private valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => v === b[i]);\n }\n return false;\n }\n\n private getFieldType(field: string): string {\n const initial = this.state.get(\"initial\");\n const val = initial[field];\n if (val instanceof Date) { return \"date\"; }\n if (Array.isArray(val)) { return \"array\"; }\n if (val !== undefined && val !== null) { return typeof val; }\n if (this.objectSchema) {\n const base = getBaseSchemaType(this.objectSchema.shape[field]);\n if (base) { return base; }\n }\n return \"string\";\n }\n\n private getArrayItemType(field: string): string {\n const initial = this.state.get(\"initial\");\n const val = initial[field];\n if (Array.isArray(val) && val.length > 0) return typeof val[0];\n if (this.objectSchema) {\n let schema: any = this.objectSchema.shape[field];\n while (schema?._zod?.def) {\n if (schema._zod.def.type === \"array\") {\n const itemType = getBaseSchemaType(schema._zod.def.element);\n if (itemType) return itemType;\n break;\n }\n schema = schema._zod.def.innerType ?? schema._zod.def.in;\n if (!schema) break;\n }\n }\n return \"string\";\n }\n\n private getRadioValue(field: string): string | undefined {\n const set = this._radioRefs.get(field);\n if (!set) return undefined;\n for (const el of set) {\n if ((el as HTMLInputElement).checked) return el.value;\n }\n return undefined;\n }\n\n private formatLocalDateTime(date: Date): string {\n const p = (n: number) => String(n).padStart(2, \"0\");\n return `${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())}T${p(date.getHours())}:${p(date.getMinutes())}`;\n }\n\n private formatDateForInput(el: HTMLInputElement, date: Date): string {\n const full = this.formatLocalDateTime(date);\n if (el.type === \"datetime-local\") return full;\n if (el.type === \"time\") return full.slice(11);\n return full.slice(0, 10);\n }\n\n private coerceStringValue(field: string, raw: string): unknown {\n const typ = this.getFieldType(field);\n if (typ === \"number\") return raw === \"\" ? NaN : Number(raw);\n if (typ === \"date\") {\n if (raw === \"\") return null;\n // HH:MM (time input) — set hours/minutes on today's date\n if (/^\\d{2}:\\d{2}$/.test(raw)) {\n const [h, m] = raw.split(\":\").map(Number);\n const d = new Date();\n d.setHours(h, m, 0, 0);\n return d;\n }\n // YYYY-MM-DD (date input) — append T00:00:00 to parse as local, not UTC\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(raw)) {\n raw = raw + \"T00:00:00\";\n }\n const d = new Date(raw);\n return isNaN(d.getTime()) ? null : d;\n }\n return raw;\n }\n\n private coerceRadioValue(field: string): unknown {\n const raw = this.getRadioValue(field);\n if (raw === undefined) return undefined;\n return this.coerceStringValue(field, raw);\n }\n\n private coerceRefValue(field: string, el: FormElement): unknown {\n if (el instanceof HTMLInputElement && el.type === \"file\") {\n if (el.files && el.files.length > 0) {\n return el.multiple ? Array.from(el.files) : el.files[0];\n }\n return this.state.get(`values.${field}` as any);\n }\n const typ = this.getFieldType(field);\n if (typ === \"boolean\") { return (el as HTMLInputElement).checked; }\n if (typ === \"array\" && el instanceof HTMLSelectElement && el.multiple) {\n const itemType = this.getArrayItemType(field);\n return Array.from(el.selectedOptions, (o) =>\n itemType === \"number\" ? (o.value === \"\" ? NaN : Number(o.value)) : o.value,\n );\n }\n return this.coerceStringValue(field, el.value);\n }\n\n private syncRefToState(field: keyof V & string): void {\n if (this._radioRefs.has(field)) {\n const val = this.coerceRadioValue(field);\n if (val !== undefined) {\n this.state.set(`values.${field}` as any, val as any);\n }\n return;\n }\n const el = this._refs.get(field);\n if (!el) { return; }\n this.state.set(`values.${field}` as any, this.coerceRefValue(field, el) as any);\n }\n\n private syncFromRefs(): void {\n if (this._refs.size === 0 && this._radioRefs.size === 0) return;\n this.state.batch(() => {\n for (const [field, el] of this._refs) {\n this.state.set(`values.${field}` as any, this.coerceRefValue(field, el) as any);\n }\n for (const [field] of this._radioRefs) {\n const val = this.coerceRadioValue(field);\n if (val !== undefined) {\n this.state.set(`values.${field}` as any, val as any);\n }\n }\n });\n }\n\n private syncValueToDom(field: string, value: unknown): void {\n const radioSet = this._radioRefs.get(field);\n if (radioSet) {\n const strVal = String(value ?? \"\");\n for (const el of radioSet) {\n (el as HTMLInputElement).checked = el.value === strVal;\n }\n return;\n }\n const el = this._refs.get(field);\n if (!el) { return; }\n if (el instanceof HTMLInputElement && el.type === \"file\") {\n if (value == null || (Array.isArray(value) && value.length === 0)) el.value = \"\";\n return;\n }\n const ft = this.getFieldType(field);\n if (ft === \"boolean\") {\n (el as HTMLInputElement).checked = Boolean(value);\n } else if (ft === \"date\" && value instanceof Date) {\n el.value = this.formatDateForInput(el as HTMLInputElement, value);\n } else if (ft === \"array\" && el instanceof HTMLSelectElement && el.multiple && Array.isArray(value)) {\n const vals = new Set(value.map(String));\n for (let i = 0; i < el.options.length; i++) {\n el.options[i].selected = vals.has(el.options[i].value);\n }\n } else {\n el.value = String(value ?? \"\");\n }\n }\n\n private syncToDom(): void {\n if (this._refs.size === 0 && this._radioRefs.size === 0) return;\n const values = this.state.get(\"values\");\n for (const [field] of this._refs) {\n this.syncValueToDom(field, (values as any)[field]);\n }\n for (const [field] of this._radioRefs) {\n this.syncValueToDom(field, (values as any)[field]);\n }\n }\n\n submit(\n key: K,\n handler: (values: V) => Promise<void>,\n ): Promise<void> | undefined {\n const data = this.validate();\n if (!data) return undefined;\n const promise = this.api.fetch(key, () => handler(data));\n this.syncSubmitStatus(key);\n return promise;\n }\n\n protected syncSubmitStatus(key: K): void {\n const update = () => {\n const status = this.getStatus(key);\n const current = this.state.get(\"submitStatus\");\n if (\n current.status === status.status &&\n current.error === status.error\n )\n return;\n this.state.set(\"submitStatus\", status);\n };\n update();\n const unsub = this.subscribe(() => {\n update();\n const s = this.getStatus(key).status;\n if (s.isReady || s.isError) unsub();\n });\n }\n}\n","import {\n useSyncExternalStore,\n useCallback,\n useRef,\n useState,\n useEffect,\n createElement,\n forwardRef,\n} from \"react\";\nimport { SnapStore } from \"../core/base.js\";\nimport { asyncStatus } from \"../core/types.js\";\nimport type { StoreOptions, AsyncStatus, DotPaths, GetByPath } from \"../core/types.js\";\n\ninterface ConnectConfig<S, MappedProps> {\n props: (store: S) => MappedProps;\n fetch: (store: S) => Promise<void>;\n loading?: React.ComponentType;\n error?: React.ComponentType<{ error: string }>;\n}\n\ntype PickFn<T extends object> = <P extends DotPaths<T>>(path: P) => GetByPath<T, P>;\n\ninterface SelectConnectConfig<T extends object, MappedProps> {\n select: (pick: PickFn<T>) => MappedProps;\n}\n\nfunction shallowEqual(a: Record<string, unknown>, b: Record<string, unknown>): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) { return false; }\n for (const key of keysA) {\n if (a[key] !== b[key]) { return false; }\n }\n return true;\n}\n\nexport class ReactSnapStore<T extends object, K extends string = string> extends SnapStore<T, K> {\n constructor(initialState: T, options?: StoreOptions) {\n super(initialState, options);\n }\n\n /** Wire a component to the store, injecting props derived from state via `mapToProps`. */\n connect<P extends object, MappedProps extends Record<string, unknown>>(\n Component: React.ComponentType<P>,\n mapToProps: (store: this) => MappedProps,\n ): React.FC<Omit<P, keyof MappedProps>>;\n /** Wire a component to the store with async data fetching, loading, and error handling. */\n connect<P extends object, MappedProps extends Record<string, unknown>>(\n Component: React.ComponentType<P>,\n config: ConnectConfig<this, MappedProps>,\n ): React.FC<Omit<P, keyof MappedProps | \"status\" | \"error\">>;\n /** Wire a component to the store with granular path-based subscriptions via `select`.\n * Paths are captured once at connect-time — select must use a stable set of paths.\n * For conditional/dynamic path selection, use the `mapToProps` overload instead. */\n connect<P extends object, MappedProps extends Record<string, unknown>>(\n Component: React.ComponentType<P>,\n config: SelectConnectConfig<T, MappedProps>,\n ): React.FC<Omit<P, keyof MappedProps>>;\n connect<P extends object, MappedProps extends Record<string, unknown>>(\n Component: React.ComponentType<P>,\n configOrMapper:\n | ((store: this) => MappedProps)\n | ConnectConfig<this, MappedProps>\n | SelectConnectConfig<T, MappedProps>,\n ): React.FC<Omit<P, keyof MappedProps>> {\n const store = this;\n\n if (typeof configOrMapper === \"object\" && \"select\" in configOrMapper) {\n return this._connectWithSelect<P, MappedProps>(Component, configOrMapper.select);\n }\n\n const mapToProps =\n typeof configOrMapper === \"function\" ? configOrMapper : configOrMapper.props;\n const fetchFn =\n typeof configOrMapper === \"function\" ? undefined : configOrMapper.fetch;\n const loadingComponent =\n typeof configOrMapper === \"function\" ? undefined : configOrMapper.loading;\n const errorComponent =\n typeof configOrMapper === \"function\" ? undefined : configOrMapper.error;\n\n const Connected = forwardRef<unknown, Omit<P, keyof MappedProps>>(function Connected(ownProps, ref) {\n const cachedRef = useRef<{ revision: number; props: MappedProps } | null>(null);\n const revisionRef = useRef(0);\n\n const subscribe = useCallback(\n (cb: () => void) => store.subscribe(() => {\n revisionRef.current++;\n cb();\n }),\n [store],\n );\n\n const getSnapshot = useCallback(() => {\n const currentRevision = revisionRef.current;\n if (cachedRef.current && cachedRef.current.revision === currentRevision) {\n return cachedRef.current.props;\n }\n const next = mapToProps(store);\n if (cachedRef.current && shallowEqual(cachedRef.current.props, next)) {\n cachedRef.current = { revision: currentRevision, props: cachedRef.current.props };\n return cachedRef.current.props;\n }\n cachedRef.current = { revision: currentRevision, props: next };\n return next;\n }, [store]);\n\n const mappedProps = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const [asyncState, setAsyncState] = useState<{\n status: AsyncStatus;\n error: string | null;\n }>({ status: asyncStatus(\"idle\"), error: null });\n\n const fetchGenRef = useRef(0);\n\n useEffect(() => {\n if (!fetchFn) { return; }\n let cancelled = false;\n const gen = ++fetchGenRef.current;\n setAsyncState({ status: asyncStatus(\"loading\"), error: null });\n Promise.resolve()\n .then(() => {\n if (cancelled) { return; }\n return fetchFn(store);\n })\n .then(() => {\n if (gen === fetchGenRef.current) {\n setAsyncState({ status: asyncStatus(\"ready\"), error: null });\n }\n })\n .catch((e) => {\n if (gen === fetchGenRef.current) {\n setAsyncState({\n status: asyncStatus(\"error\"),\n error: e instanceof Error ? e.message : \"Unknown error\",\n });\n }\n });\n return () => { cancelled = true; };\n }, []);\n\n if (fetchFn) {\n if (loadingComponent && (asyncState.status.isIdle || asyncState.status.isLoading)) {\n return createElement(loadingComponent);\n }\n if (errorComponent && asyncState.status.isError) {\n return createElement(errorComponent, { error: asyncState.error! });\n }\n }\n\n return createElement(Component, {\n ...ownProps,\n ...mappedProps,\n ...(fetchFn ? asyncState : {}),\n ref,\n } as unknown as P);\n });\n\n Connected.displayName = `Connect(${Component.displayName || Component.name || \"Component\"})`;\n return Connected as unknown as React.FC<Omit<P, keyof MappedProps>>;\n }\n\n private _connectWithSelect<P extends object, MappedProps extends Record<string, unknown>>(\n Component: React.ComponentType<P>,\n selectFn: (pick: PickFn<T>) => MappedProps,\n ): React.FC<Omit<P, keyof MappedProps>> {\n const store = this;\n\n const resolvePathValue = (path: string): any => {\n const segments = path.split(\".\");\n let val: any = store.getSnapshot();\n for (const seg of segments) {\n if (val == null) { return undefined; }\n val = val[seg];\n }\n return val;\n };\n\n const trackedPaths: string[] = [];\n const trackingPick: PickFn<T> = ((path: string) => {\n trackedPaths.push(path);\n return resolvePathValue(path);\n }) as PickFn<T>;\n selectFn(trackingPick);\n const paths = [...trackedPaths];\n\n const readPick: PickFn<T> = ((path: string) => {\n return resolvePathValue(path);\n }) as PickFn<T>;\n\n const Connected = forwardRef<unknown, Omit<P, keyof MappedProps>>(function Connected(ownProps, ref) {\n const cachedRef = useRef<{ revision: number; props: MappedProps } | null>(null);\n const revisionRef = useRef(0);\n\n const subscribe = useCallback(\n (cb: () => void) => {\n const unsubs = paths.map((p) =>\n store.subscribe(p, () => {\n revisionRef.current++;\n cb();\n }),\n );\n return () => unsubs.forEach((u) => u());\n },\n [store],\n );\n\n const getSnapshot = useCallback(() => {\n const currentRevision = revisionRef.current;\n if (cachedRef.current && cachedRef.current.revision === currentRevision) {\n return cachedRef.current.props;\n }\n const next = selectFn(readPick);\n if (cachedRef.current && shallowEqual(cachedRef.current.props, next)) {\n cachedRef.current = { revision: currentRevision, props: cachedRef.current.props };\n return cachedRef.current.props;\n }\n cachedRef.current = { revision: currentRevision, props: next };\n return next;\n }, [store]);\n\n const mappedProps = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n return createElement(Component, {\n ...ownProps,\n ...mappedProps,\n ref,\n } as unknown as P);\n });\n\n Connected.displayName = `Connect(${Component.displayName || Component.name || \"Component\"})`;\n return Connected as unknown as React.FC<Omit<P, keyof MappedProps>>;\n }\n}\n","export type AsyncStatusValue = \"idle\" | \"loading\" | \"ready\" | \"error\";\n\nexport interface AsyncStatus {\n readonly value: AsyncStatusValue;\n readonly isIdle: boolean;\n readonly isLoading: boolean;\n readonly isReady: boolean;\n readonly isError: boolean;\n}\n\nconst _statuses: Record<AsyncStatusValue, AsyncStatus> = {\n idle: Object.freeze({ value: \"idle\", isIdle: true, isLoading: false, isReady: false, isError: false }),\n loading: Object.freeze({ value: \"loading\", isIdle: false, isLoading: true, isReady: false, isError: false }),\n ready: Object.freeze({ value: \"ready\", isIdle: false, isLoading: false, isReady: true, isError: false }),\n error: Object.freeze({ value: \"error\", isIdle: false, isLoading: false, isReady: false, isError: true }),\n};\n\nexport function asyncStatus(value: AsyncStatusValue): AsyncStatus {\n return _statuses[value];\n}\n\n/** Async operation status and error. Tracks the lifecycle of an `api.fetch`/`api.get`/`api.post` call. */\nexport interface OperationState {\n status: AsyncStatus;\n error: string | null;\n}\n\nexport type Path = string & { readonly __brand?: \"Path\" };\n\nexport type Listener = () => void;\n\nexport type Unsubscribe = () => void;\n\n// Union of all valid dot-separated paths into T (for autocomplete)\nexport type DotPaths<T, Prefix extends string = \"\"> = T extends object\n ? { [K in keyof T & string]:\n | `${Prefix}${K}`\n | DotPaths<T[K], `${Prefix}${K}.`>\n }[keyof T & string]\n : never;\n\n// Extract a deeply nested type by dot-separated path\nexport type GetByPath<T, P extends string> = P extends \"\"\n ? T\n : P extends `${infer K}.${infer Rest}`\n ? K extends keyof T\n ? GetByPath<T[K], Rest>\n : never\n : P extends keyof T\n ? T[P]\n : never;\n\nexport type DeepPartial<T> = T extends object\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : T;\n\nexport type ArrayPaths<T> = {\n [K in keyof T & string]: T[K] extends any[] ? K : never;\n}[keyof T & string];\n\nexport type ObjectArrayPaths<T> = {\n [K in keyof T & string]: T[K] extends (infer V)[]\n ? V extends Date | RegExp | Map<any, any> | Set<any> | Function | any[]\n ? never\n : V extends Record<string, any> ? K : never\n : never;\n}[keyof T & string];\n\nexport type ElementOf<A> = A extends (infer V)[] ? V : never;\n\nexport type Updater<V> = V | ((prev: V) => V);\n\nexport interface StoreOptions {\n /** Auto-batch synchronous sets via microtask (default: true) */\n autoBatch?: boolean;\n}\n\n/** Handle to a computed (derived) value. Call `get()` to read, `destroy()` to stop tracking. */\nexport interface ComputedRef<V> {\n get(): V;\n destroy(): void;\n}\n\n/** Options for an HTTP request (method, body, headers). */\nexport interface HttpRequestInit {\n method?: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\n/** Interface for the HTTP layer used by `api.get` and `api.post/put/patch/delete`. */\nexport interface HttpClient {\n request<R = unknown>(url: string, init?: HttpRequestInit): Promise<R>;\n}\n\n/** Options for HTTP verb methods (`api.post`, `api.put`, etc.). */\nexport interface ApiRequestOptions<R = unknown> {\n body?: unknown;\n headers?: Record<string, string>;\n onSuccess?: (data: R) => void;\n onError?: (error: Error) => void;\n}\n\nexport interface Subscribable<T extends object> {\n subscribe(callback: Listener): Unsubscribe;\n getSnapshot(): T;\n}\n\nexport interface StateAccessor<T extends object> {\n get(): T;\n get<P extends DotPaths<T>>(path: P): GetByPath<T, P>;\n set<P extends DotPaths<T>>(path: P, value: Updater<GetByPath<T, P>>): void;\n batch(fn: () => void): void;\n computed<V>(deps: (keyof T & string)[], fn: (state: T) => V): ComputedRef<V>;\n append<P extends ArrayPaths<T>>(path: P, ...items: ElementOf<T[P]>[]): void;\n prepend<P extends ArrayPaths<T>>(path: P, ...items: ElementOf<T[P]>[]): void;\n insertAt<P extends ArrayPaths<T>>(path: P, index: number, ...items: ElementOf<T[P]>[]): void;\n patch<P extends ObjectArrayPaths<T>>(path: P, predicate: (item: ElementOf<T[P]>) => boolean, updates: Partial<ElementOf<T[P]>>): void;\n remove<P extends ArrayPaths<T>>(path: P, predicate: (item: ElementOf<T[P]>) => boolean): void;\n removeAt<P extends ArrayPaths<T>>(path: P, index: number): void;\n at<P extends ArrayPaths<T>>(path: P, index: number): ElementOf<T[P]> | undefined;\n filter<P extends ArrayPaths<T>>(path: P, predicate: (item: ElementOf<T[P]>) => boolean): ElementOf<T[P]>[];\n find<P extends ArrayPaths<T>>(path: P, predicate: (item: ElementOf<T[P]>) => boolean): ElementOf<T[P]> | undefined;\n findIndexOf<P extends ArrayPaths<T>>(path: P, predicate: (item: ElementOf<T[P]>) => boolean): number;\n count<P extends ArrayPaths<T>>(path: P, predicate: (item: ElementOf<T[P]>) => boolean): number;\n}\n\nexport interface ApiAccessor<K extends string> {\n fetch(key: K, fn: () => Promise<void>): Promise<void>;\n get<R = unknown>(key: K, url: string, onSuccess?: (data: R) => void): Promise<void>;\n post<R = unknown>(key: K, url: string, options?: ApiRequestOptions<R>): Promise<void>;\n put<R = unknown>(key: K, url: string, options?: ApiRequestOptions<R>): Promise<void>;\n patch<R = unknown>(key: K, url: string, options?: ApiRequestOptions<R>): Promise<void>;\n delete<R = unknown>(key: K, url: string, options?: ApiRequestOptions<R>): Promise<void>;\n}\n\nexport interface RawStore<T extends object> extends Subscribable<T> {\n get(): T;\n get<P extends DotPaths<T>>(path: P): GetByPath<T, P>;\n\n set<P extends DotPaths<T>>(path: P, value: Updater<GetByPath<T, P>>): void;\n\n batch(fn: () => void): void;\n\n subscribe(callback: Listener): Unsubscribe;\n subscribe(path: string, callback: Listener): Unsubscribe;\n\n getSnapshot(): T;\n\n computed<V>(deps: (keyof T & string)[], fn: (state: T) => V): ComputedRef<V>;\n\n notify(): void;\n\n destroy(): void;\n}\n","import type { Listener, Unsubscribe } from \"./types.js\";\n\nfunction invokeAll(listeners: Set<Listener>): void {\n let firstError: unknown;\n for (const l of listeners) {\n try { l(); } catch (e) { firstError ??= e; }\n }\n if (firstError !== undefined) { throw firstError; }\n}\n\ninterface TrieNode {\n listeners: Set<Listener>;\n children: Map<string, TrieNode>;\n}\n\nfunction createNode(): TrieNode {\n return { listeners: new Set(), children: new Map() };\n}\n\nfunction parsePath(path: string): string[] {\n if (path === \"\") { return []; }\n return path.split(\".\");\n}\n\nexport class SubscriptionTrie {\n private root = createNode();\n private globalListeners = new Set<Listener>();\n\n /** Subscribe to a specific path. Returns unsubscribe function. */\n add(path: string, listener: Listener): Unsubscribe {\n const segments = parsePath(path);\n const parents: { parent: TrieNode; segment: string }[] = [];\n let node = this.root;\n for (const seg of segments) {\n if (!node.children.has(seg)) {\n node.children.set(seg, createNode());\n }\n parents.push({ parent: node, segment: seg });\n node = node.children.get(seg)!;\n }\n node.listeners.add(listener);\n return () => {\n node.listeners.delete(listener);\n for (let i = parents.length - 1; i >= 0; i--) {\n const { parent, segment } = parents[i];\n const child = parent.children.get(segment)!;\n if (child.listeners.size === 0 && child.children.size === 0) {\n parent.children.delete(segment);\n } else {\n break;\n }\n }\n };\n }\n\n /** Subscribe to all changes (no path filter). */\n addGlobal(listener: Listener): Unsubscribe {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n /** Notify listeners for exact path, all ancestors, and all descendants. */\n notify(path: string): void {\n const segments = parsePath(path);\n const collected = new Set<Listener>();\n\n // Collect global listeners\n for (const l of this.globalListeners) collected.add(l);\n\n // Walk down to the target, collecting ancestor listeners\n let node = this.root;\n // Root-level listeners (subscribe to \"\")\n for (const l of node.listeners) collected.add(l);\n\n let matched = true;\n for (const seg of segments) {\n // Check wildcard sibling at this level\n const wildcard = node.children.get(\"*\");\n if (wildcard) {\n for (const l of wildcard.listeners) collected.add(l);\n this.collectDescendants(wildcard, collected);\n }\n\n const child = node.children.get(seg);\n if (!child) {\n matched = false;\n break;\n }\n node = child;\n for (const l of node.listeners) collected.add(l);\n }\n\n // Only collect descendants if we matched the full path\n if (matched) {\n this.collectDescendants(node, collected);\n }\n\n invokeAll(collected);\n }\n\n /** Notify all listeners in the trie. */\n notifyAll(): void {\n const collected = new Set<Listener>();\n for (const l of this.globalListeners) collected.add(l);\n this.collectDescendants(this.root, collected);\n for (const l of this.root.listeners) collected.add(l);\n invokeAll(collected);\n }\n\n private collectDescendants(node: TrieNode, out: Set<Listener>): void {\n for (const child of node.children.values()) {\n for (const l of child.listeners) out.add(l);\n this.collectDescendants(child, out);\n }\n }\n\n clear(): void {\n this.root = createNode();\n this.globalListeners.clear();\n }\n}\n","/**\n * Immutable update with structural sharing.\n * Only clones objects along the changed path; unchanged subtrees keep their references.\n */\nexport function applyUpdate<T extends object>(\n state: T,\n path: string,\n value: unknown,\n): T {\n const segments = path.split(\".\");\n return updateAtPath(state, segments, 0, value) as T;\n}\n\nfunction updateAtPath(\n current: unknown,\n segments: string[],\n index: number,\n value: unknown,\n): unknown {\n if (index === segments.length) {\n // Functional updater support\n if (typeof value === \"function\") {\n return (value as (prev: unknown) => unknown)(current);\n }\n return value;\n }\n\n const key = segments[index];\n\n if (Array.isArray(current)) {\n const i = Number(key);\n const next = updateAtPath(current[i], segments, index + 1, value);\n if (Object.is(next, current[i])) { return current; }\n const copy = current.slice();\n copy[i] = next;\n return copy;\n }\n\n if (current !== null && typeof current === \"object\") {\n const obj = current as Record<string, unknown>;\n const next = updateAtPath(obj[key], segments, index + 1, value);\n if (Object.is(next, obj[key])) { return current; }\n return { ...obj, [key]: next };\n }\n\n // Path doesn't exist yet — create nested objects\n const next = updateAtPath(undefined, segments, index + 1, value);\n return { [key]: next };\n}\n\n/** Read a value at a dot-separated path. */\nexport function getAtPath(state: unknown, path: string): unknown {\n if (path === \"\") { return state; }\n const segments = path.split(\".\");\n let current = state;\n for (const seg of segments) {\n if (current === null || current === undefined) { return undefined; }\n current = (current as Record<string, unknown>)[seg];\n }\n return current;\n}\n","import type { ComputedRef, Listener, Unsubscribe } from \"./types.js\";\n\ninterface ComputedHost {\n getSnapshot(): object;\n subscribe(path: string, callback: Listener): Unsubscribe;\n}\n\nexport function createComputed<T extends object, V>(\n host: ComputedHost,\n deps: string[],\n fn: (state: T) => V,\n): ComputedRef<V> {\n let cachedValue: V;\n let dirty = true;\n const unsubs: Unsubscribe[] = [];\n\n const markDirty = () => {\n dirty = true;\n };\n\n for (const dep of deps) {\n unsubs.push(host.subscribe(dep, markDirty));\n }\n\n // Compute initial value; clean up subscriptions if it throws\n try {\n cachedValue = fn(host.getSnapshot() as T);\n } catch (e) {\n for (const unsub of unsubs) unsub();\n unsubs.length = 0;\n throw e;\n }\n dirty = false;\n\n return {\n get(): V {\n if (dirty) {\n cachedValue = fn(host.getSnapshot() as T);\n dirty = false;\n }\n return cachedValue;\n },\n destroy(): void {\n for (const unsub of unsubs) unsub();\n unsubs.length = 0;\n },\n };\n}\n","import type {\n RawStore,\n StoreOptions,\n Listener,\n Unsubscribe,\n Updater,\n ComputedRef,\n GetByPath,\n} from \"./types.js\";\nimport { SubscriptionTrie } from \"./trie.js\";\nimport { applyUpdate, getAtPath } from \"./structural.js\";\nimport { createComputed } from \"./computed.js\";\n\nexport function createStore<T extends object>(\n initialState: T,\n options: StoreOptions = {},\n): RawStore<T> {\n const { autoBatch = true } = options;\n\n let state: T = initialState;\n const trie = new SubscriptionTrie();\n\n // Batching\n let batchDepth = 0;\n let pendingPaths = new Set<string>();\n let microtaskScheduled = false;\n\n function flushNotifications(): void {\n const paths = pendingPaths;\n pendingPaths = new Set();\n microtaskScheduled = false;\n\n if (paths.size === 0) { return; }\n\n // Deduplicate: if a parent path is present, skip its children\n const sorted = [...paths].sort();\n const deduped: string[] = [];\n for (const p of sorted) {\n const last = deduped[deduped.length - 1];\n if (last !== undefined && p.startsWith(last + \".\")) { continue; }\n deduped.push(p);\n }\n\n for (const path of deduped) {\n trie.notify(path);\n }\n }\n\n function scheduleFlush(): void {\n if (batchDepth > 0) { return; }\n if (autoBatch && !microtaskScheduled) {\n microtaskScheduled = true;\n queueMicrotask(flushNotifications);\n } else if (!autoBatch) {\n flushNotifications();\n }\n }\n\n function get(): T;\n function get<P extends string>(path: P): GetByPath<T, P>;\n function get(path?: string): unknown {\n if (path === undefined || path === \"\") { return state; }\n return getAtPath(state, path);\n }\n\n function set<P extends string>(\n path: P,\n value: Updater<GetByPath<T, P>>,\n ): void {\n if (path === \"\") {\n throw new Error(\"Cannot set with an empty path. Use a specific path to update state.\");\n }\n const prev = state;\n state = applyUpdate(state, path, value);\n if (state !== prev) {\n pendingPaths.add(path);\n scheduleFlush();\n }\n }\n\n function batch(fn: () => void): void {\n batchDepth++;\n try {\n fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n flushNotifications();\n }\n }\n }\n\n function subscribe(callback: Listener): Unsubscribe;\n function subscribe(path: string, callback: Listener): Unsubscribe;\n function subscribe(\n pathOrCallback: string | Listener,\n callback?: Listener,\n ): Unsubscribe {\n if (typeof pathOrCallback === \"function\") {\n return trie.addGlobal(pathOrCallback);\n }\n return trie.add(pathOrCallback, callback!);\n }\n\n function getSnapshot(): T {\n return state;\n }\n\n function computed<V>(deps: (keyof T & string)[], fn: (state: T) => V): ComputedRef<V> {\n return createComputed<T, V>({ getSnapshot, subscribe }, deps, fn);\n }\n\n function notify(): void {\n trie.notifyAll();\n }\n\n function destroy(): void {\n trie.clear();\n pendingPaths.clear();\n }\n\n return {\n get,\n set,\n batch,\n subscribe,\n getSnapshot,\n computed,\n notify,\n destroy,\n } as RawStore<T>;\n}\n","import type {\n RawStore,\n StoreOptions,\n Listener,\n Unsubscribe,\n OperationState,\n HttpClient,\n StateAccessor,\n ApiAccessor,\n ApiRequestOptions,\n} from \"./types.js\";\nimport { asyncStatus } from \"./types.js\";\nimport { createStore } from \"./store.js\";\n\nconst IDLE_STATE: OperationState = { status: asyncStatus(\"idle\"), error: null };\n\nconst defaultHttpClient: HttpClient = {\n async request(url, init) {\n const fetchInit: RequestInit = { method: init?.method ?? \"GET\" };\n const merged = { ...defaultHeaders, ...init?.headers };\n if (Object.keys(merged).length) { fetchInit.headers = merged; }\n if (init?.body !== undefined) {\n fetchInit.body = JSON.stringify(init.body);\n fetchInit.headers = { \"Content-Type\": \"application/json\", ...merged };\n }\n const res = await fetch(url, fetchInit);\n if (!res.ok) {\n let message = `HTTP ${res.status}`;\n try {\n const text = await res.text();\n if (text) {\n const json = JSON.parse(text);\n message = json.error ?? json.message ?? message;\n }\n } catch {}\n throw new Error(message);\n }\n const text = await res.text();\n return text ? JSON.parse(text) : undefined;\n },\n};\n\nlet httpClient: HttpClient = defaultHttpClient;\nlet defaultHeaders: Record<string, string> = {};\n\n/** Replace the global HTTP client used by `api.get` and `api.post/put/patch/delete`. */\nexport function setHttpClient(client: HttpClient): void {\n httpClient = client;\n}\n\n/** Set default headers merged into every HTTP request. Per-request headers override defaults. */\nexport function setDefaultHeaders(headers: Record<string, string>): void {\n defaultHeaders = headers;\n}\n\nexport class SnapStore<T extends object, K extends string = string> {\n private _store: RawStore<T>;\n private _operations = new Map<K, OperationState>();\n private _generations = new Map<K, number>();\n\n protected readonly state: StateAccessor<T>;\n protected readonly api: ApiAccessor<K>;\n\n constructor(initialState: T, options?: StoreOptions) {\n this._store = createStore(initialState, options);\n\n const store = this._store;\n const operations = this._operations;\n const generations = this._generations;\n\n // takeLatest semantic: if a newer call starts for the same key, the older\n // call's promise resolves silently (no reject, no state update).\n const doFetch = async (key: K, fn: () => Promise<void>): Promise<void> => {\n const gen = (generations.get(key) ?? 0) + 1;\n generations.set(key, gen);\n operations.set(key, { status: asyncStatus(\"loading\"), error: null });\n store.notify();\n try {\n await fn();\n if (generations.get(key) !== gen) { return; }\n operations.set(key, { status: asyncStatus(\"ready\"), error: null });\n } catch (e) {\n if (generations.get(key) !== gen) { return; }\n operations.set(key, {\n status: asyncStatus(\"error\"),\n error: e instanceof Error ? e.message : \"Unknown error\",\n });\n store.notify();\n throw e;\n }\n store.notify();\n };\n\n const doSend = async <R>(key: K, method: string, url: string, options?: ApiRequestOptions<R>): Promise<void> => {\n await doFetch(key, async () => {\n try {\n const data = await httpClient.request<R>(url, {\n method,\n body: options?.body,\n headers: options?.headers,\n });\n options?.onSuccess?.(data);\n } catch (e) {\n options?.onError?.(e instanceof Error ? e : new Error(\"Unknown error\"));\n throw e;\n }\n });\n };\n\n this.state = {\n get: ((path?: string): unknown => {\n if (path === undefined) { return store.get(); }\n return (store.get as (p: string) => unknown)(path);\n }) as StateAccessor<T>[\"get\"],\n\n set: (path, value) => store.set(path, value),\n batch: (fn) => store.batch(fn),\n computed: (deps, fn) => store.computed(deps, fn),\n\n append: (path, ...items) => {\n store.set(path as any, ((prev: any) => [...(prev as any[]), ...items]) as any);\n },\n prepend: (path, ...items) => {\n store.set(path as any, ((prev: any) => [...items, ...(prev as any[])]) as any);\n },\n insertAt: (path, index, ...items) => {\n store.set(path as any, ((prev: any) => {\n const arr = prev as any[];\n return [...arr.slice(0, index), ...items, ...arr.slice(index)];\n }) as any);\n },\n patch: (path, predicate, updates) => {\n store.set(path as any, ((prev: any) => {\n const arr = prev as any[];\n let changed = false;\n const result = arr.map((item: any) => {\n if (item == null) { return item; }\n if (predicate(item)) {\n changed = true;\n return Object.assign(Object.create(Object.getPrototypeOf(item)), item, updates);\n }\n return item;\n });\n return changed ? result : arr;\n }) as any);\n },\n remove: (path, predicate) => {\n store.set(path as any, ((prev: any) => {\n const arr = prev as any[];\n const result = arr.filter((item: any) => !predicate(item));\n return result.length === arr.length ? arr : result;\n }) as any);\n },\n removeAt: (path, index) => {\n store.set(path as any, ((prev: any) => {\n const arr = prev as any[];\n const i = index < 0 ? arr.length + index : index;\n if (i < 0 || i >= arr.length) {\n throw new RangeError(`Index ${index} out of bounds for array of length ${arr.length}`);\n }\n return [...arr.slice(0, i), ...arr.slice(i + 1)];\n }) as any);\n },\n at: (path, index) => {\n return (store.get(path as any) as any[]).at(index);\n },\n filter: (path, predicate) => {\n return (store.get(path as any) as any[]).filter(predicate);\n },\n find: (path, predicate) => {\n return (store.get(path as any) as any[]).find(predicate);\n },\n findIndexOf: (path, predicate) => {\n return (store.get(path as any) as any[]).findIndex(predicate);\n },\n count: (path, predicate) => {\n return (store.get(path as any) as any[]).filter(predicate).length;\n },\n };\n\n this.api = {\n fetch: doFetch,\n get: async <R>(key: K, url: string, onSuccess?: (data: R) => void): Promise<void> => {\n await doFetch(key, async () => {\n const data = await httpClient.request<R>(url);\n onSuccess?.(data);\n });\n },\n post: (key, url, options?) => doSend(key, \"POST\", url, options),\n put: (key, url, options?) => doSend(key, \"PUT\", url, options),\n patch: (key, url, options?) => doSend(key, \"PATCH\", url, options),\n delete: (key, url, options?) => doSend(key, \"DELETE\", url, options),\n };\n }\n\n /** Subscribe to all state changes. Returns an unsubscribe function. */\n subscribe(callback: Listener): Unsubscribe;\n /** Subscribe to changes at a specific dot-separated path. */\n subscribe(path: string, callback: Listener): Unsubscribe;\n subscribe(pathOrCallback: string | Listener, callback?: Listener): Unsubscribe {\n if (typeof pathOrCallback === \"function\") {\n return this._store.subscribe(pathOrCallback);\n }\n return this._store.subscribe(pathOrCallback, callback!);\n }\n\n /** Return a snapshot of the current state. Compatible with React's `useSyncExternalStore`. */\n getSnapshot = (): T => {\n return this._store.getSnapshot();\n };\n\n /** Get the async status of an operation by key. Returns `idle` if never started. */\n getStatus(key: K): OperationState {\n return { ...(this._operations.get(key) ?? IDLE_STATE) };\n }\n\n /** Tear down subscriptions and cleanup. */\n destroy(): void {\n this._store.destroy();\n }\n}\n"],"mappings":"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","names":["next","text","options","Connected","d","el"]}