UNPKG

@bemedev/app-solid

Version:

Middleware between @bemedev/app-ts and solidjs

100 lines (96 loc) 3.26 kB
'use strict'; var appTs = require('@bemedev/app-ts'); var index_js$2 = require('@bemedev/app-ts/lib/constants/index.js'); var index_js$1 = require('@bemedev/app-ts/lib/events/index.js'); var index_js = require('@bemedev/app-ts/lib/utils/index.js'); var solidJs = require('solid-js'); var _default = require('./default.cjs'); const interpret = (...[machine, config]) => { const service = appTs.interpret(machine, config); const initialState = { context: service.context, status: 'idle', value: service.initialValue, event: index_js$1.INIT_EVENT, }; const _store = solidJs.from(service); const store = () => _store() ?? initialState; const start = service.start; const stop = service.stop; const pause = service.pause; const resume = service.resume; const state = (...[accessor = _default.defaultSelector, equals]) => { const out = solidJs.createRoot(() => solidJs.createMemo(() => accessor(store()), accessor(initialState), { equals, })); return out; }; const reducer = (accessor) => { const stateAccessor = accessor; const reduceS = (...[_accessor = _default.defaultSelector, equals]) => state(_state => { const step1 = stateAccessor(_state); const step2 = _accessor(step1); return step2; }, equals); return reduceS; }; const context = reducer(state => state.context); const send = service.send; const value = () => state(state => state.value)(); const mapper = (entry) => index_js.replaceAll({ entry, match: '.', replacement: index_js$2.DEFAULT_DELIMITER }); const dps = () => index_js.decomposeSV(value()).map(mapper); const status = () => state(state => state.status)(); const tags = () => state(state => state.tags)(); const _select = (selector, equals) => { const initial = appTs.getByKey(initialState, selector); const out = solidJs.createRoot(() => solidJs.createMemo(() => { const _state = store(); const _out = appTs.getByKey(_state, selector); return _out; }, initial, { equals, })); return out; }; const select = (typeof service.context !== 'object' ? undefined : _select); // #endregion const matches = (...values) => { return () => { const out = values.every(value => dps().includes(value)); return out; }; }; const contains = (...values) => { return () => { const out = values.every(value => dps().every(dp => dp.includes(value))); return out; }; }; const values = Object.keys(machine.flat); const subscribe = service.subscribe; const dispose = service[Symbol.asyncDispose]; const addOptions = service.addOptions; return { contains, context, dispose, dps, matches, pause, reducer, resume, select, send, start, state, status, stop, subscribe, tags, value, values, addOptions, }; }; exports.interpret = interpret; //# sourceMappingURL=interpret.cjs.map