@bemedev/app-solid
Version:
Middleware between @bemedev/app-ts and solidjs
1 lines • 7.65 kB
Source Map (JSON)
{"version":3,"file":"interpret.cjs","sources":["../src/interpret.ts"],"sourcesContent":["import {\n interpret as _interpret,\n getByKey,\n type AnyMachine,\n type ContextFrom,\n type EventsFrom,\n type InterpretArgs,\n type InterpreterFrom,\n type State,\n} from '@bemedev/app-ts';\n\nimport { DEFAULT_DELIMITER as replacement } from '@bemedev/app-ts/lib/constants/index.js';\nimport { INIT_EVENT } from '@bemedev/app-ts/lib/events/index.js';\nimport {\n decomposeSV,\n replaceAll,\n} from '@bemedev/app-ts/lib/utils/index.js';\n\nimport type { Decompose } from '@bemedev/decompose';\nimport type { types } from '@bemedev/types';\nimport { createMemo, createRoot, from, type Accessor } from 'solid-js';\nimport { defaultSelector } from './default';\n\nexport const interpret = <const M extends AnyMachine>(\n ...[machine, config]: InterpretArgs<M>\n) => {\n const service: InterpreterFrom<M> = (_interpret as any)(machine, config);\n\n type Tc = ContextFrom<M>;\n type Ev = EventsFrom<M>;\n\n type StateM =\n State<Tc, Ev> extends infer P\n ? {\n [Key in keyof P]: P[Key];\n }\n : never;\n\n const initialState: StateM = {\n context: service.context,\n status: 'idle',\n value: service.initialValue,\n event: INIT_EVENT,\n };\n\n const _store = from(service);\n const store = () => _store() ?? initialState;\n\n const start = service.start;\n const stop = service.stop;\n const pause = service.pause;\n const resume = service.resume;\n\n type GetProps<T = any, S = ReturnType<typeof store>> = [\n accessor?: (state: S) => T,\n equals?: (prev: T, next: T) => boolean,\n ];\n\n const state = <T = StateM>(\n ...[accessor = defaultSelector, equals]: GetProps<T>\n ) => {\n const out = createRoot(() =>\n createMemo(() => accessor(store()), accessor(initialState), {\n equals,\n }),\n );\n\n return out;\n };\n\n const reducer = <T>(accessor: Required<GetProps<T>>[0]) => {\n const stateAccessor = accessor;\n\n const reduceS = <R = T>(\n ...[_accessor = defaultSelector, equals]: GetProps<R, T>\n ) =>\n state(_state => {\n const step1 = stateAccessor(_state);\n const step2 = _accessor(step1);\n return step2;\n }, equals);\n\n return reduceS;\n };\n\n const context = reducer(state => state.context);\n const send = service.send;\n const value = () => state(state => state.value)();\n\n const mapper = (entry: string) =>\n replaceAll({ entry, match: '.', replacement });\n\n const dps = () => decomposeSV(value()).map(mapper);\n const status = () => state(state => state.status)();\n const tags = () => state(state => state.tags)();\n\n type DecomposedContext = Decompose<\n Required<{ context: Tc }>,\n { object: 'both'; start: false }\n >;\n\n // type __Select = typeof service.select;\n\n // #region select\n type _Select = <\n D = StateM & DecomposedContext,\n K extends Extract<keyof D, string> = Extract<keyof D, string>,\n R = D[K],\n >(\n selector: K,\n equals?: (prev: R, next: R) => boolean,\n ) => Accessor<R>;\n\n const _select: _Select = (selector, equals) => {\n const initial = getByKey(initialState, selector);\n const out = createRoot(() =>\n createMemo(\n () => {\n const _state = store();\n const _out = getByKey(_state, selector);\n\n return _out;\n },\n initial,\n {\n equals,\n },\n ),\n );\n\n return out;\n };\n\n type Select = Tc extends types.Primitive ? undefined : _Select;\n\n const select: Select = (\n typeof service.context !== 'object' ? undefined : _select\n ) as any;\n // #endregion\n\n const matches = (...values: string[]) => {\n return () => {\n const out = values.every(value => dps().includes(value));\n\n return out;\n };\n };\n\n const contains = (...values: string[]) => {\n return () => {\n const out = values.every(value =>\n dps().every(dp => dp.includes(value)),\n );\n\n return out;\n };\n };\n\n const values = Object.keys(machine.flat);\n const subscribe = service.subscribe;\n const dispose = service[Symbol.asyncDispose];\n const addOptions = service.addOptions;\n\n return {\n contains,\n context,\n dispose,\n dps,\n matches,\n pause,\n reducer,\n resume,\n select,\n send,\n start,\n state,\n status,\n stop,\n subscribe,\n tags,\n value,\n values,\n addOptions,\n } as const;\n};\n"],"names":["_interpret","INIT_EVENT","from","defaultSelector","createRoot","createMemo","replaceAll","replacement","decomposeSV","getByKey"],"mappings":"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"}