File "effector.mjs.map"
Full Path: /var/www/html/gitep_front/node_modules/effector/effector.mjs.map
File size: 156.68 KB
MIME-type: application/json
Charset: utf-8
{"version":3,"file":"effector.mjs","sources":["effector/collection.ts","effector/throw.ts","effector/region.ts","effector/createNode.ts","effector/tag.ts","effector/kernel.ts","effector/naming.ts","effector/config.ts","effector/subscription.ts","effector/template.ts","effector/createUnit.ts","effector/combine.ts","effector/defer.ts","effector/createEffect.ts","effector/attach.ts","effector/createApi.ts","effector/createDomain.ts","effector/fromObservable.ts","effector/sample.ts","effector/guard.ts","effector/merge.ts","effector/restore.ts","effector/split.ts","effector/fork/allSettled.ts","effector/fork/util.ts","effector/fork/fork.ts","effector/fork/createScope.ts","effector/fork/hydrate.ts","effector/fork/scopeBind.ts","effector/fork/serialize.ts","effector/createWatch.ts","effector/observable.ts","effector/getter.ts","effector/validate.ts","effector/id.ts","effector/own.ts","effector/is.ts","effector/caller.ts","effector/step.ts","effector/stateRef.ts","effector/clearNode.ts","effector/forward.ts","effector/watch.ts"],"sourcesContent":["export function forIn<T, Key extends string = string>(\n obj: Record<Key, T>,\n cb: (value: T, key: Key) => void,\n) {\n for (const key in obj) {\n cb(obj[key], key)\n }\n}\n\nexport const includes = <T>(list: T[], item: T) => list.includes(item)\n\nexport const removeItem = <T>(list: T[], item: T) => {\n const pos = list.indexOf(item)\n if (pos !== -1) {\n list.splice(pos, 1)\n }\n}\n\nexport const add = <T>(list: T[], item: T) => list.push(item)\n\nexport function forEach<T>(\n list: T[],\n fn: (item: T, index: number, list: T[]) => void,\n): void\nexport function forEach<K, T>(\n list: Map<K, T>,\n fn: (item: T, key: K) => void,\n): void\nexport function forEach<T>(list: Set<T>, fn: (item: T) => void): void\nexport function forEach(list: any, fn: Function) {\n list.forEach(fn)\n}\n","export function assert(\n condition: unknown,\n message: string,\n errorTitle?: string,\n): asserts condition {\n if (!condition)\n throw Error(`${errorTitle ? errorTitle + ': ' : ''}${message}`)\n}\n\nexport const deprecate = (\n condition: unknown,\n subject: string,\n suggestion?: string,\n errorTitle?: string,\n) =>\n !condition &&\n console.error(\n `${errorTitle ? errorTitle + ': ' : ''}${subject} is deprecated${\n suggestion ? `, use ${suggestion} instead` : ''\n }`,\n )\n\nexport const printErrorWithStack = (\n message: string,\n stack: string | undefined,\n) => {\n const error = Error(message)\n error.stack = stack\n console.error(error)\n}\n","import type {Template} from '../forest/index.h'\nimport type {NodeUnit, Node, ID} from './index.h'\nimport {getParent, getGraph} from './getter'\nimport {createNode} from './createNode'\nimport {is} from './is'\n\ntype DeclarationSourceReporter = (\n node: Node | 'region',\n regionStack: RegionStack | null,\n) => void\n\nlet reporter: DeclarationSourceReporter\n\nexport const setGraphInspector = (fn: DeclarationSourceReporter) => {\n reporter = fn\n}\n\ntype RegionStack = {\n id: ID\n parent: RegionStack | null\n value: any\n template: Template | null\n sidRoot?: string\n meta:\n | Record<string, unknown>\n | {\n type: 'factory'\n sid?: string\n name?: string\n loc: unknown\n method?: string\n }\n}\n\nexport let regionStack: RegionStack | null = null\n\nexport const reportDeclaration = (node: Node | 'region') => {\n if (reporter) {\n reporter(node, regionStack)\n }\n}\n\nexport const readTemplate = (): Template | null =>\n regionStack && regionStack.template\nexport const readSidRoot = (sid?: string | null) => {\n if (sid && regionStack && regionStack.sidRoot)\n sid = `${regionStack.sidRoot}|${sid}`\n return sid\n}\n\nexport function withRegion<T = void>(unit: NodeUnit, cb: () => T): T {\n const node = getGraph(unit)\n const meta = node.meta || {}\n\n if (!is.domain(unit)) {\n meta.isRegion = true\n }\n\n regionStack = {\n id: node.id,\n parent: regionStack,\n value: unit,\n template: meta.template || readTemplate(),\n sidRoot: meta.sidRoot || (regionStack && regionStack.sidRoot),\n meta: meta,\n }\n try {\n return cb()\n } finally {\n reportDeclaration('region')\n regionStack = getParent(regionStack)\n }\n}\n\nexport const withFactory = ({\n sid,\n name,\n loc,\n method,\n fn,\n}: {\n sid: string\n name?: string\n loc?: any\n method?: string\n fn: () => any\n}) => {\n const factoryRootNode = createNode({\n meta: {sidRoot: readSidRoot(sid), sid, name, loc, method, type: 'factory'},\n regional: true,\n })\n\n return withRegion(factoryRootNode, fn)\n}\n","import type {Node, NodeUnit, Cmd} from './index.h'\nimport {getGraph, getOwners, getLinks, getValue} from './getter'\nimport {nextNodeID} from './id'\nimport {CROSSLINK} from './tag'\nimport {regionStack} from './region'\nimport {own} from './own'\nimport {add, forEach} from './collection'\n\nexport const arrifyNodes = (\n list: NodeUnit | Array<NodeUnit | NodeUnit[]> = [],\n): Node[] => (Array.isArray(list) ? list : [list]).flat().map(getGraph)\n\nexport function createNode({\n node = [],\n from,\n source,\n parent = from || source,\n to,\n target,\n child = to || target,\n scope = {},\n meta = {},\n family: familyRaw = {type: 'regular'},\n regional,\n}: {\n node?: Array<Cmd | false | void | null>\n from?: NodeUnit | NodeUnit[]\n source?: NodeUnit | NodeUnit[]\n parent?: NodeUnit | NodeUnit[]\n to?: NodeUnit | NodeUnit[]\n target?: NodeUnit | NodeUnit[]\n child?: NodeUnit | NodeUnit[]\n scope?: {[name: string]: any}\n meta?: {[name: string]: any}\n family?: {\n type?: 'regular' | 'crosslink' | 'domain'\n links?: NodeUnit | NodeUnit[]\n owners?: NodeUnit | Array<NodeUnit | NodeUnit[]>\n }\n regional?: boolean\n} = {}): Node {\n const sources = arrifyNodes(parent)\n const links = arrifyNodes(familyRaw.links)\n const owners = arrifyNodes(familyRaw.owners)\n const seq: Cmd[] = []\n forEach(node, item => item && add(seq, item))\n const result: Node = {\n id: nextNodeID(),\n seq,\n next: arrifyNodes(child),\n meta,\n scope,\n family: {\n triggers: sources.length,\n type: familyRaw.type || CROSSLINK,\n links,\n owners,\n },\n }\n forEach(links, link => add(getOwners(link), result))\n forEach(owners, owner => add(getLinks(owner), result))\n forEach(sources, source => add(source.next, result))\n if (regional && regionStack) {\n own(getValue(regionStack), [result])\n }\n return result\n}\n","export const STORE = 'store'\nexport const EVENT = 'event'\nexport const EFFECT = 'effect'\nexport const DOMAIN = 'domain'\nexport const SCOPE = 'scope'\nexport const SAMPLER = 'sampler'\nexport const CROSSLINK = 'crosslink'\nexport const MAP = 'map'\nexport const STACK = 'stack'\nexport const VALUE = 'value'\nexport const REG_A = 'a'\n","import type {Leaf} from '../forest/index.h'\n\nimport type {Node, NodeUnit, StateRef, Stack} from './index.h'\nimport {readRef} from './stateRef'\nimport {getForkPage, getGraph, getValue} from './getter'\nimport type {Scope} from './unit.h'\nimport {add, forEach} from './collection'\n\n/** Names of priority groups */\ntype PriorityTag = 'child' | 'pure' | 'read' | 'barrier' | 'sampler' | 'effect'\n\nexport type BarrierPriorityTag = 'read' | 'barrier' | 'sampler' | 'effect'\n\n/**\n * Position in the current branch,\n * including call stack, priority type\n * and index of next step in the executed Node\n */\ntype Layer = {\n idx: number\n stack: Stack\n type: PriorityTag\n id: number\n}\n\n/** Queue as linked list or skew heap */\ntype QueueItem = {\n /** node value */\n v: Layer\n /** left node. always null in queue but used in skew heap */\n l: QueueItem | null\n /** right node */\n r: QueueItem | null\n}\ntype QueueBucket = {\n first: QueueItem | null\n last: QueueItem | null\n size: number\n}\n\n/** Dedicated local metadata */\ntype Local = {\n fail: boolean\n failReason?: unknown\n scope: {[key: string]: any}\n}\n\nlet heap: QueueItem | null = null\n\nconst merge = (a: QueueItem | null, b: QueueItem | null): QueueItem | null => {\n if (!a) return b\n if (!b) return a\n\n let ret\n if (\n /**\n * if both nodes has the same PriorityType\n * and first node is created after second one\n */\n (a.v.type === b.v.type && a.v.id > b.v.id) ||\n /**\n * greater priority mean bucket of first node is executed later\n * e.g a: \"sampler\", b: \"barrier\"\n */\n getPriority(a.v.type) > getPriority(b.v.type)\n ) {\n ret = a\n a = b\n b = ret\n }\n ret = merge(a.r, b)\n a.r = a.l\n a.l = ret\n\n return a\n}\n\n/** queue buckets for each PriorityType */\nconst queue: QueueBucket[] = []\nlet ix = 0\nwhile (ix < 6) {\n /**\n * although \"sampler\" and \"barrier\" are using heap instead of linked list,\n * their buckets are still useful: they maintains size of heap queue\n */\n add(queue, {first: null, last: null, size: 0})\n ix += 1\n}\n\nconst deleteMin = () => {\n for (let i = 0; i < 6; i++) {\n const list = queue[i]\n if (list.size > 0) {\n /**\n * bucket 3 is for \"barrier\" PriorityType (used in combine)\n * bucket 4 is for \"sampler\" PriorityType (used in sample and guard)\n */\n if (i === 3 || i === 4) {\n list.size -= 1\n const value = heap!.v\n heap = merge(heap!.l, heap!.r)\n return value\n }\n if (list.size === 1) {\n list.last = null\n }\n const item = list.first\n list.first = item!.r\n list.size -= 1\n return item!.v\n }\n }\n}\nconst pushFirstHeapItem = (\n type: PriorityTag,\n page: Leaf | null,\n node: Node,\n parent: Stack | null,\n value: any,\n scope?: Scope | null | void,\n meta?: Record<string, any> | void,\n) =>\n pushHeap(\n 0,\n {\n a: null,\n b: null,\n node,\n parent,\n value,\n page,\n scope,\n meta,\n },\n type,\n 0,\n )\nconst pushHeap = (idx: number, stack: Stack, type: PriorityTag, id: number) => {\n const priority = getPriority(type)\n const bucket: QueueBucket = queue[priority]\n const item: QueueItem = {\n v: {idx, stack, type, id},\n l: null,\n r: null,\n }\n /**\n * bucket 3 is for \"barrier\" PriorityType (used in combine)\n * bucket 4 is for \"sampler\" PriorityType (used in sample and guard)\n */\n if (priority === 3 || priority === 4) {\n heap = merge(heap, item)\n } else {\n if (bucket.size === 0) {\n bucket.first = item\n } else {\n bucket.last!.r = item\n }\n bucket.last = item\n }\n bucket.size += 1\n}\n\nconst getPriority = (t: PriorityTag) => {\n switch (t) {\n case 'child':\n return 0\n case 'pure':\n return 1\n case 'read':\n return 2\n case 'barrier':\n return 3\n case 'sampler':\n return 4\n case 'effect':\n return 5\n default:\n return -1\n }\n}\n\nconst barriers = new Set<string | number>()\n\nlet isRoot = true\nexport let isWatch = false\nexport let isPure = false\nexport let currentPage: Leaf | null = null\nexport let forkPage: Scope | void | null\nexport const setForkPage = (newForkPage: Scope | void | null) => {\n forkPage = newForkPage\n}\nexport const setCurrentPage = (newPage: Leaf | null) => {\n currentPage = newPage\n}\n\nconst getPageForRef = (page: Leaf | null, id: string) => {\n if (page) {\n while (page && !page.reg[id]) {\n page = page.parent\n }\n if (page) return page\n }\n return null\n}\nexport const getPageRef = (\n page: Leaf | null,\n forkPage: Scope | null | void,\n ref: StateRef,\n isGetState: boolean,\n) => {\n const pageForRef = getPageForRef(page, ref.id)\n if (pageForRef) return pageForRef.reg[ref.id]\n if (forkPage) {\n initRefInScope(forkPage!, ref, isGetState)\n return forkPage.reg[ref.id]\n }\n return ref\n}\n\n/** Introspection api internals */\ntype Inspector = (stack: Stack, local: Local) => void\nlet inspector: Inspector\nexport const setInspector = (newInspector: Inspector) => {\n inspector = newInspector\n}\n\nexport function launch(config: {\n target: NodeUnit | NodeUnit[]\n params?: any\n defer?: boolean\n page?: Leaf | void | null\n scope?: Scope | void | null\n stack?: Stack | void\n meta?: Record<string, any> | void\n}): void\nexport function launch(unit: NodeUnit, payload?: any, upsert?: boolean): void\nexport function launch(unit: any, payload?: any, upsert?: boolean) {\n let pageForLaunch = currentPage\n let stackForLaunch = null\n let forkPageForLaunch = forkPage\n let meta: Record<string, any> | undefined\n if (unit.target) {\n payload = unit.params\n upsert = unit.defer\n meta = unit.meta\n pageForLaunch = 'page' in unit ? unit.page : pageForLaunch\n if (unit.stack) stackForLaunch = unit.stack\n forkPageForLaunch = getForkPage(unit) || forkPageForLaunch\n unit = unit.target\n }\n if (forkPageForLaunch && forkPage && forkPageForLaunch !== forkPage) {\n forkPage = null\n }\n if (Array.isArray(unit)) {\n for (let i = 0; i < unit.length; i++) {\n pushFirstHeapItem(\n 'pure',\n pageForLaunch,\n getGraph(unit[i]),\n stackForLaunch,\n payload[i],\n forkPageForLaunch,\n meta,\n )\n }\n } else {\n pushFirstHeapItem(\n 'pure',\n pageForLaunch,\n getGraph(unit),\n stackForLaunch,\n payload,\n forkPageForLaunch,\n meta,\n )\n }\n if (upsert && !isRoot) return\n /** main execution code */\n const lastStartedState = {\n isRoot,\n currentPage,\n scope: forkPage,\n isWatch,\n isPure,\n }\n isRoot = false\n let stop: boolean\n let skip: boolean\n let node: Node\n let value: Layer | undefined\n let page: Leaf | null\n let reg: Record<string, StateRef> | undefined\n kernelLoop: while ((value = deleteMin())) {\n const {idx, stack, type} = value\n node = stack.node\n currentPage = page = stack.page\n forkPage = getForkPage(stack)\n if (page) reg = page.reg\n else if (forkPage) reg = forkPage.reg\n // reg = (page ? page : forkPage ? forkPage : node).reg\n const hasPageReg = !!page\n const hasScopeReg = !!forkPage\n const local: Local = {\n fail: false,\n scope: node.scope,\n }\n stop = skip = false\n for (let stepn = idx; stepn < node.seq.length && !stop; stepn++) {\n const step = node.seq[stepn]\n if (step.order) {\n const {priority, barrierID} = step.order\n const id = barrierID\n ? page\n ? `${page.fullID}_${barrierID}`\n : barrierID\n : 0\n if (stepn !== idx || type !== priority) {\n if (barrierID) {\n if (!barriers.has(id)) {\n barriers.add(id)\n pushHeap(stepn, stack, priority, barrierID)\n }\n } else {\n pushHeap(stepn, stack, priority, 0)\n }\n continue kernelLoop\n }\n barrierID && barriers.delete(id)\n }\n switch (step.type) {\n case 'mov': {\n const data = step.data\n let value\n //prettier-ignore\n switch (data.from) {\n case 'stack': value = getValue(stack); break\n case 'a': /** fall-through case */\n case 'b':\n value = stack[data.from]\n break\n case 'value': value = data.store; break\n case 'store':\n if (reg && !reg[data.store.id]) {\n // if (!page.parent) {\n if (hasPageReg) {\n const pageForRef = getPageForRef(page, data.store.id)\n stack.page = page = pageForRef\n if (pageForRef) {\n reg = pageForRef.reg\n } else if (hasScopeReg) {\n initRefInScope(forkPage!, data.store, false, true, data.softRead)\n reg = forkPage!.reg\n } else {\n reg = undefined //node.reg\n }\n } else if (hasScopeReg) {\n /** StateRef in Scope.reg created only when needed */\n initRefInScope(forkPage!, data.store, false, true, data.softRead)\n } else {\n // console.error('should not happen')\n /** StateRef should exists at least in Node itself, but it is not found */\n }\n // }\n }\n // value = getPageRef(page, forkPage, data.store.id, false).current\n value = readRef(reg ? reg[data.store.id] || data.store : data.store)\n break\n }\n //prettier-ignore\n switch (data.to) {\n case 'stack': stack.value = value; break\n case 'a': /** fall-through case */\n case 'b':\n stack[data.to] = value\n break\n case 'store':\n getPageRef(page, forkPage, data.target, false).current = value\n break\n }\n break\n }\n case 'compute':\n const data = step.data\n if (data.fn) {\n isWatch = node.meta.op === 'watch'\n isPure = data.pure\n const computationResult = data.safe\n ? (0 as any, data.fn)(getValue(stack), local.scope, stack)\n : tryRun(local, data.fn, stack)\n if (data.filter) {\n /**\n * handled edge case: if step.fn will throw,\n * tryRun will return null\n * thereby forcing that branch to stop\n */\n skip = !computationResult\n } else {\n stack.value = computationResult\n }\n isWatch = lastStartedState.isWatch\n isPure = lastStartedState.isPure\n }\n break\n }\n stop = local.fail || skip\n }\n if (inspector) {\n inspector(stack, local)\n }\n if (!stop) {\n const finalValue = getValue(stack)\n const forkPage = getForkPage(stack)\n forEach(node.next, nextNode => {\n pushFirstHeapItem('child', page, nextNode, stack, finalValue, forkPage)\n })\n if (forkPage) {\n if (node.meta.needFxCounter)\n pushFirstHeapItem(\n 'child',\n page,\n forkPage.fxCount,\n stack,\n finalValue,\n forkPage,\n )\n if (node.meta.storeChange)\n pushFirstHeapItem(\n 'child',\n page,\n forkPage.storeChange,\n stack,\n finalValue,\n forkPage,\n )\n if (node.meta.warnSerialize)\n pushFirstHeapItem(\n 'child',\n page,\n forkPage.warnSerializeNode,\n stack,\n finalValue,\n forkPage,\n )\n const additionalLinks = forkPage.additionalLinks[node.id]\n if (additionalLinks) {\n forEach(additionalLinks, nextNode => {\n pushFirstHeapItem(\n 'child',\n page,\n nextNode,\n stack,\n finalValue,\n forkPage,\n )\n })\n }\n }\n }\n }\n isRoot = lastStartedState.isRoot\n currentPage = lastStartedState.currentPage\n forkPage = getForkPage(lastStartedState)\n}\n\nconst noopParser = (x: any) => x\n\nexport const initRefInScope = (\n scope: Scope,\n sourceRef: StateRef,\n isGetState?: boolean,\n isKernelCall?: boolean,\n softRead?: boolean,\n) => {\n const refsMap = scope.reg\n if (refsMap[sourceRef.id]) return\n const sid = sourceRef.sid\n const ref: StateRef = {\n id: sourceRef.id,\n current: sourceRef.initial!,\n meta: sourceRef.meta,\n }\n\n if (ref.id in scope.values.idMap) {\n ref.current = scope.values.idMap[ref.id]\n } else if (sid && sid in scope.values.sidMap && !(sid in scope.sidIdMap)) {\n const serialize = sourceRef?.meta?.serialize\n const parser =\n scope.fromSerialize && serialize !== 'ignore'\n ? serialize?.read || noopParser\n : noopParser\n ref.current = parser(scope.values.sidMap[sid])\n } else {\n if (sourceRef.before && !softRead) {\n let isFresh = false\n const needToAssign = isGetState || !sourceRef.noInit || isKernelCall\n forEach(sourceRef.before, cmd => {\n switch (cmd.type) {\n case 'map': {\n const from = cmd.from\n if (from || cmd.fn) {\n if (from) initRefInScope(scope, from, isGetState, isKernelCall)\n if (needToAssign) {\n const value = from && refsMap[from.id].current\n ref.current = cmd.fn ? cmd.fn(value) : value\n }\n }\n break\n }\n case 'field': {\n initRefInScope(scope, cmd.from, isGetState, isKernelCall)\n if (!isFresh) {\n isFresh = true\n if (Array.isArray(ref.current)) {\n ref.current = [...ref.current]\n } else {\n ref.current = {...ref.current}\n }\n }\n if (needToAssign) {\n const from = refsMap[cmd.from.id]\n ref.current[cmd.field] = refsMap[from.id].current\n }\n break\n }\n // case 'closure':\n // break\n }\n })\n }\n }\n if (sid) scope.sidIdMap[sid] = sourceRef.id\n refsMap[sourceRef.id] = ref\n}\n\n/** try catch for external functions */\nconst tryRun = (local: Local, fn: Function, stack: Stack) => {\n try {\n return fn(getValue(stack), local.scope, stack)\n } catch (err) {\n console.error(err)\n local.fail = true\n local.failReason = err\n }\n}\n","import type {Store, CommonUnit, Domain} from './unit.h'\nimport {is} from './is'\nimport {getParent, getCompositeName} from './getter'\nimport {forIn} from './collection'\n\nexport function unitObjectName(objOrArr: any, method: string = 'combine') {\n let name = method + '('\n let comma = ''\n let i = 0\n forIn(objOrArr, unit => {\n /* inlined max object names constant */\n if (i < 25) {\n if (unit != null) {\n name += comma\n name += is.unit(unit)\n ? getCompositeName(unit as CommonUnit | Domain).fullName\n : (unit as any).toString()\n }\n i += 1\n comma = ', '\n }\n })\n return name + ')'\n}\n\nexport function setStoreName<State>(store: Store<State>, rawName: string) {\n store.shortName = rawName\n Object.assign(getCompositeName(store), createName(rawName, getParent(store)))\n}\n\nexport type CompositeName = {\n shortName: string\n fullName: string\n path: string[]\n}\n\nexport function createName(name: string, parent?: Domain): CompositeName {\n let path: string[]\n let fullName\n const shortName = name\n if (!parent) {\n path = name.length === 0 ? [] : [name]\n fullName = name\n } else {\n const composite = getCompositeName(parent)\n if (name.length === 0) {\n path = composite.path\n fullName = composite.fullName\n } else {\n path = composite.path.concat([name])\n fullName =\n composite.fullName.length === 0\n ? name\n : '' + composite.fullName + '/' + name\n }\n }\n return {shortName, fullName, path}\n}\n\nexport function generateErrorTitle(method: string, metadata: any) {\n if (!metadata) return method\n if (!metadata.name && !metadata.named && !metadata.loc) return method\n let result = `[${method}]`\n const name = metadata.named || metadata.name\n if (name) {\n result += ` unit '${name}'`\n }\n const loc = metadata.loc\n if (!name && loc) {\n result += ` (${loc.file}:${loc.line}:${loc.column})`\n }\n return result\n}\n","import {forIn} from './collection'\nimport {assertObject, isObject, isVoid} from './is'\n\nexport function processArgsToConfig(\n arg: any,\n singleArgument: true,\n): [any, any | void]\nexport function processArgsToConfig(args: any[]): [any[], any | void]\nexport function processArgsToConfig(\n args: any[],\n singleArgument?: boolean,\n): [any[], any | void] {\n const rawConfig = singleArgument ? args : args[0]\n assertObject(rawConfig)\n let metadata = rawConfig.or\n const childConfig = rawConfig.and\n if (childConfig) {\n const unwrappedNestedValue = singleArgument ? childConfig : childConfig[0]\n /**\n * if there is no \"and\" field then we reached the leaf of the tree\n * and this is an original user-defined argument\n *\n * note that in this case we're returning all arguments, not the only one been unwrapped\n **/\n if (!isObject(unwrappedNestedValue) || !('and' in unwrappedNestedValue)) {\n args = childConfig\n } else {\n //@ts-expect-error\n const nested = processArgsToConfig(childConfig, singleArgument)\n\n args = nested[0]\n metadata = {...metadata, ...nested[1]}\n }\n }\n return [args, metadata]\n}\n\n/**\nprocessed fields:\n\n'name',\n'sid',\n'loc',\n'handler',\n'updateFilter',\n'parent',\n'serialize',\n'named',\n'derived',\n*/\nexport const flattenConfig = (part: any, config: Record<string, any> = {}) => {\n if (isObject(part)) {\n flattenConfig(part.or, config)\n forIn(part, (value, field) => {\n if (!isVoid(value) && field !== 'or' && field !== 'and') {\n config[field] = value\n }\n })\n flattenConfig(part.and, config)\n }\n return config\n}\n","import type {Subscription, NodeUnit} from './index.h'\nimport {clearNode} from './clearNode'\n\nexport const createSubscription = (node: NodeUnit): Subscription =>\n addUnsubscribe(() => clearNode(node))\n\nexport function addUnsubscribe(callback: () => void): Subscription {\n const subscription: Subscription = () => callback()\n subscription.unsubscribe = () => callback()\n\n return subscription\n}\n","import {readTemplate} from './region'\nimport type {Template, TemplateHandlers} from '../forest/index.h'\n\nexport function applyTemplate<K extends keyof TemplateHandlers>(\n method: K,\n ...args: Parameters<TemplateHandlers[K]> extends [Template, ...infer Args]\n ? Args\n : never\n): ReturnType<TemplateHandlers[K]> | void {\n const template = readTemplate()\n if (template) {\n const fn = template.handlers[method]\n // @ts-expect-error\n if (fn) return fn(template, ...args)\n }\n}\n","import type {Template} from '../forest/index.h'\nimport type {Store, Event, CommonUnit, Effect} from './unit.h'\nimport type {Subscriber, Config, Cmd, Kind} from './index.h'\n\nimport {observableSymbol} from './observable'\n\nimport {\n is,\n isObject,\n isFunction,\n assertObject,\n assertNodeSet,\n isVoid,\n} from './is'\nimport {calc, mov, read, userFnCall} from './step'\nimport {createStateRef, readRef, addRefOp} from './stateRef'\nimport {nextUnitID} from './id'\nimport {callStackAReg, callARegStack, callStack} from './caller'\nimport {own} from './own'\nimport {createNode} from './createNode'\nimport {\n launch,\n currentPage,\n forkPage,\n setCurrentPage,\n initRefInScope,\n isPure,\n} from './kernel'\n\nimport {createName, generateErrorTitle} from './naming'\nimport {createLinkNode} from './forward'\nimport {watchUnit} from './watch'\nimport {readTemplate, readSidRoot, reportDeclaration} from './region'\nimport {getStoreState, getGraph, getParent, setMeta, getMeta} from './getter'\nimport {assert, deprecate, printErrorWithStack} from './throw'\nimport {DOMAIN, STORE, EVENT, MAP, STACK, REG_A} from './tag'\nimport {applyTemplate} from './template'\nimport {forEach} from './collection'\nimport {flattenConfig} from './config'\nimport {clearNode} from './clearNode'\n\nexport const applyParentHook = (\n source: CommonUnit,\n target: CommonUnit,\n hookType: 'event' | 'effect' = EVENT,\n) => {\n if (getParent(source)) getParent(source).hooks[hookType](target)\n}\n\nexport const initUnit = (kind: Kind, unit: any, rawConfig: any) => {\n const config = flattenConfig(rawConfig)\n const isDomain = kind === DOMAIN\n const id = nextUnitID()\n const {sid = null, named = null, domain = null, parent = domain} = config\n const name = named ? named : config.name || (isDomain ? '' : id)\n const compositeName = createName(name, parent)\n const meta: Record<string, any> = {\n op: (unit.kind = kind),\n name: (unit.shortName = name),\n sid: (unit.sid = readSidRoot(sid)),\n named,\n unitId: (unit.id = id),\n serialize: config.serialize,\n derived: config.derived,\n config,\n }\n unit.targetable = !config.derived\n unit.parent = parent\n unit.compositeName = compositeName\n unit.defaultConfig = config\n unit.getType = () => {\n deprecate(false, 'getType', 'compositeName.fullName')\n return compositeName.fullName\n }\n if (!isDomain) {\n unit.subscribe = (observer: Subscriber<any>) => {\n assertObject(observer)\n return unit.watch(\n isFunction(observer)\n ? observer\n : (upd: any) => observer.next && observer.next(upd),\n )\n }\n unit[observableSymbol] = () => unit\n const template = readTemplate()\n if (template) meta.nativeTemplate = template\n }\n return meta\n}\nexport const createNamedEvent = (named: string) => createEvent({named})\n\nconst deriveEvent = (\n event: Event<any>,\n op: 'map' | 'filterMap' | 'filter',\n fn: Function,\n node: Cmd[],\n) => {\n let config\n if (isObject(fn)) {\n config = fn\n fn = (fn as unknown as {fn: Function}).fn\n }\n const mapped = createEvent({\n name: `${event.shortName} → *`,\n derived: true,\n and: config,\n })\n createLinkNode(event, mapped, node, op, fn)\n return mapped\n}\n\nfunction callCreate<T>(\n unit: Event<T> | Effect<T, any, any>,\n template: Template | null,\n payload: T,\n args: any[],\n) {\n const oldPage = currentPage\n let page = null\n if (template) {\n page = currentPage\n while (page && page.template !== template) {\n page = getParent(page)\n }\n }\n setCurrentPage(page)\n const result = unit.create(payload, args)\n setCurrentPage(oldPage)\n return result\n}\n\nexport function createEvent<Payload = any>(\n nameOrConfig?: any,\n maybeConfig?: any,\n): Event<Payload> {\n const config = flattenConfig({\n or: maybeConfig,\n and: typeof nameOrConfig === 'string' ? {name: nameOrConfig} : nameOrConfig,\n }) as any\n const errorTitle = generateErrorTitle('event', config)\n const event = ((payload: Payload, ...args: unknown[]) => {\n assert(\n !getMeta(event, 'derived'),\n 'call of derived event is not supported, use createEvent instead',\n errorTitle,\n )\n assert(\n !isPure,\n 'unit call from pure function is not supported, use operators like sample instead',\n errorTitle,\n )\n if (currentPage) {\n return callCreate(event, template, payload, args)\n }\n return event.create(payload, args)\n }) as Event<Payload>\n const template = readTemplate()\n const finalEvent = Object.assign(event, {\n graphite: createNode({\n meta: initUnit(config.actualOp || EVENT, event, config),\n regional: true,\n }),\n create(params: Payload, _: any[]) {\n launch({target: event, params, scope: forkPage!})\n return params\n },\n watch: (fn: (payload: Payload) => any) => watchUnit(event, fn),\n map: (fn: Function) => deriveEvent(event, MAP, fn, [userFnCall()]),\n filter: (fn: {fn: Function}) =>\n //@ts-expect-error\n deriveEvent(event, 'filter', fn.fn ? fn : fn.fn, [\n userFnCall(callStack, true),\n ]),\n filterMap: (fn: Function) =>\n deriveEvent(event, 'filterMap', fn, [\n userFnCall(),\n calc(value => !isVoid(value), true),\n ]),\n prepend(fn: Function) {\n assert(\n // @ts-expect-error\n event.targetable,\n '.prepend of derived event is not supported, call source event instead',\n errorTitle,\n )\n const contramapped: Event<any> = createEvent('* → ' + event.shortName, {\n parent: getParent(event),\n })\n applyTemplate('eventPrepend', getGraph(contramapped))\n createLinkNode(contramapped, event, [userFnCall()], 'prepend', fn)\n applyParentHook(event, contramapped)\n return contramapped\n },\n })\n if (config?.domain) {\n config.domain.hooks.event(finalEvent)\n }\n setMeta(finalEvent, 'id', finalEvent.graphite.id)\n reportDeclaration(finalEvent.graphite)\n return finalEvent\n}\nfunction on<State>(\n store: Store<State>,\n methodName: string,\n nodeSet: CommonUnit | CommonUnit[],\n fn: Function,\n errorTitle: string,\n) {\n assertNodeSet(nodeSet, `${errorTitle} ${methodName}`, 'first argument')\n assert(isFunction(fn), 'second argument should be a function', errorTitle)\n deprecate(\n !getMeta(store, 'derived'),\n `${methodName} in derived store`,\n `${methodName} in store created via createStore`,\n errorTitle,\n )\n forEach(Array.isArray(nodeSet) ? nodeSet : [nodeSet], trigger => {\n store.off(trigger)\n updateStore(trigger, store, 'on', callARegStack, fn)\n })\n return store\n}\n\nexport const requireExplicitSkipVoidMessage =\n 'undefined is used to skip updates. To allow undefined as a value provide explicit { skipVoid: false } option'\n\nexport function createStore<State>(\n defaultState: State,\n props?: Config,\n): Store<State> {\n const config = flattenConfig(props)\n const plainState = createStateRef(defaultState)\n const errorTitle = generateErrorTitle('store', config)\n const traceError = Error()\n if (Error.captureStackTrace) {\n Error.captureStackTrace(traceError, createStore)\n }\n const storeTrace = traceError.stack\n const updates = createEvent({named: 'updates', derived: true})\n applyTemplate('storeBase', plainState)\n const plainStateId = plainState.id\n\n // skipVoid deprecation rules\n const explicitSkipVoid = 'skipVoid' in config\n const voidValueAllowed = explicitSkipVoid && !config.skipVoid\n const skipVoidTrueSet = explicitSkipVoid && config.skipVoid\n\n deprecate(!skipVoidTrueSet, '{skipVoid: true}', 'updateFilter', errorTitle)\n\n const store = {\n updates,\n defaultState,\n stateRef: plainState,\n getState() {\n let targetRef = plainState\n let reachedPage\n if (currentPage) {\n let page = currentPage\n while (page && !page.reg[plainStateId]) {\n page = getParent(page)\n }\n if (page) reachedPage = page\n }\n if (!reachedPage && forkPage) {\n initRefInScope(forkPage, plainState, true)\n reachedPage = forkPage\n }\n if (reachedPage) targetRef = reachedPage.reg[plainStateId]\n return readRef(targetRef)\n },\n setState: (state: State) =>\n launch({\n target: store,\n params: state,\n defer: true,\n scope: forkPage!,\n }),\n reset(...units: CommonUnit[]) {\n assert(\n // @ts-expect-error\n store.targetable,\n '.reset of derived store is not supported',\n errorTitle,\n )\n forEach(units, unit =>\n on(store, '.reset', unit, () => store.defaultState, errorTitle),\n )\n return store\n },\n on(nodeSet: CommonUnit | CommonUnit[], fn: Function) {\n assert(\n // @ts-expect-error\n store.targetable,\n '.on of derived store is not supported',\n errorTitle,\n )\n return on(store, '.on', nodeSet, fn, errorTitle)\n },\n off(unit: CommonUnit) {\n const triggerUnitId = getGraph(unit).id\n const oldLink = getGraph(store).family.links.find(\n e => e.meta.onTrigger === triggerUnitId,\n )\n if (oldLink) {\n clearNode(oldLink)\n }\n return store\n },\n map(fn: (value: any) => any, outerConfig: Config) {\n let mapConfig: Config | undefined\n if (isObject(fn)) {\n mapConfig = fn as any\n fn = (fn as unknown as {fn: (value: any) => any}).fn\n }\n let lastResult\n const storeState = store.getState()\n const parentStateVoid = isVoid(storeState)\n const template = readTemplate()\n if (template) {\n lastResult = null\n } else if (!parentStateVoid || (parentStateVoid && voidValueAllowed)) {\n lastResult = fn(storeState)\n }\n\n const innerStore: Store<any> = createStore(lastResult, {\n name: `${store.shortName} → *`,\n derived: true,\n ...outerConfig,\n and: mapConfig,\n })\n const linkNode = updateStore(store, innerStore, MAP, callStack, fn)\n addRefOp(getStoreState(innerStore), {\n type: MAP,\n fn,\n from: plainState,\n })\n getStoreState(innerStore).noInit = true\n applyTemplate('storeMap', plainState, linkNode)\n return innerStore\n },\n watch(eventOrFn: any, fn?: Function) {\n deprecate(!fn, 'watch second argument', 'sample', errorTitle)\n if (!fn || !is.unit(eventOrFn)) {\n const subscription = watchUnit(store, eventOrFn)\n if (!applyTemplate('storeWatch', plainState, eventOrFn)) {\n eventOrFn(store.getState())\n }\n return subscription\n }\n assert(isFunction(fn), 'second argument should be a function', errorTitle)\n return (eventOrFn as CommonUnit).watch((payload: any) =>\n fn(store.getState(), payload),\n )\n },\n } as unknown as Store<State>\n const meta = initUnit(STORE, store, config)\n const updateFilter = store.defaultConfig.updateFilter\n store.graphite = createNode({\n scope: {state: plainState, fn: updateFilter},\n node: [\n calc((upd, _, stack) => {\n if (stack.scope && !stack.scope.reg[plainState.id]) {\n stack.b = true\n }\n return upd\n }),\n read(plainState),\n calc((upd, _, {a, b}) => {\n const isVoidUpdate = isVoid(upd)\n\n if (isVoidUpdate && !explicitSkipVoid) {\n printErrorWithStack(\n `${errorTitle}: ${requireExplicitSkipVoidMessage}`,\n storeTrace,\n )\n }\n\n return (\n ((isVoidUpdate && voidValueAllowed) || !isVoidUpdate) &&\n (upd !== a || b)\n )\n }, true),\n updateFilter && userFnCall(callStackAReg, true),\n mov({from: STACK, target: plainState}),\n ],\n child: updates,\n meta: {\n ...meta,\n defaultState,\n storeTrace,\n },\n regional: true,\n })\n setMeta(store, 'id', store.graphite.id)\n setMeta(store, 'rootStateRefId', plainStateId)\n const serializeMeta = getMeta(store, 'serialize')\n const derived = getMeta(store, 'derived')\n const ignored = serializeMeta === 'ignore'\n const sid: string | null = getMeta(store, 'sid')\n if (sid) {\n setMeta(store, 'storeChange', true)\n plainState.sid = sid\n }\n if (!sid && !ignored && !derived) {\n setMeta(store, 'warnSerialize', true)\n }\n const isVoidDefaultState = isVoid(defaultState)\n const canVoid = isVoidDefaultState && voidValueAllowed\n assert(\n derived || !isVoidDefaultState || canVoid,\n requireExplicitSkipVoidMessage,\n errorTitle,\n )\n if (derived && isVoidDefaultState && !explicitSkipVoid) {\n console.error(`${errorTitle}: ${requireExplicitSkipVoidMessage}`)\n }\n own(store, [updates])\n if (config?.domain) {\n config.domain.hooks.store(store)\n }\n\n if (!derived) {\n store.reinit = createEvent<void>({\n named: 'reinit',\n })\n store.reset(store.reinit)\n }\n\n plainState.meta = store.graphite.meta\n\n reportDeclaration(store.graphite)\n\n return store\n}\n\nconst updateStore = (\n from: CommonUnit,\n store: Store<any>,\n op: string,\n caller: typeof callStackAReg,\n fn: Function,\n) => {\n const storeRef = getStoreState(store)\n const reader = mov({\n store: storeRef,\n to: REG_A,\n priority: 'read',\n })\n /**\n * Store reading is not needed for store.map anymore\n * but there is a fine tuning of \"wire lengths\"\n * lack of which leads to a lot of reordering and retriggering issues\n **/\n if (op === MAP) reader.data.softRead = true\n const node = [reader, userFnCall(caller)]\n applyTemplate(\n 'storeOnMap',\n storeRef,\n node,\n is.store(from) && getStoreState(from),\n )\n const result = createLinkNode(from, store, node, op, fn)\n if (op !== MAP) {\n setMeta(result, 'onTrigger', getGraph(from).id)\n }\n return result\n}\n","import type {Store} from './unit.h'\nimport {createStore, requireExplicitSkipVoidMessage} from './createUnit'\nimport {createStateRef, addRefOp} from './stateRef'\nimport {mov, calc, read, userFnCall} from './step'\nimport {processArgsToConfig} from './config'\nimport {getStoreState, setMeta} from './getter'\nimport {is, isFunction, isObject, isVoid} from './is'\nimport {generateErrorTitle, unitObjectName} from './naming'\nimport {createLinkNode} from './forward'\nimport {assert} from './throw'\nimport {readTemplate} from './region'\nimport {forIn} from './collection'\nimport {MAP, REG_A, VALUE} from './tag'\nimport {applyTemplate} from './template'\nimport type {Config} from './index.h'\n\nexport function combine(...args: any[]): Store<any> {\n let handler\n let stores\n let config\n ;[args, config] = processArgsToConfig(args)\n const errorTitle = generateErrorTitle('combine', config)\n // skipVoid support, to be removed in effector 24\n const maybeExtConfig = args[args.length - 1]\n /**\n * if there only one argument then it's a store or object with stores\n * else if last argument is a store, then its `combine($foo, $bar)`\n * else if last argument is not an object, then it's a handler\n * else it's a config object\n */\n const isExtendedConfig =\n args.length > 1 && !is.store(maybeExtConfig) && isObject(maybeExtConfig)\n const extConfig = isExtendedConfig && maybeExtConfig\n const rawHandler = isExtendedConfig ? args[args.length - 2] : maybeExtConfig\n if (isFunction(rawHandler)) {\n stores = args.slice(0, isExtendedConfig ? -2 : -1)\n handler = rawHandler\n } else {\n stores = args\n }\n\n let structStoreShape\n let shapeReady\n if (stores.length === 1) {\n const obj = stores[0]\n /*\n without edge case combine(Color, (Color) => '~')\n */\n if (!is.store(obj)) {\n /*\n case combine([R,G,B], ([R,G,B]) => '~')\n case combine({R,G,B}, ({R,G,B}) => '~')\n\n edge case combine([Color], ([Color]) => '~')\n edge case combine({Color}, ({Color}) => '~')\n\n edge case combine([R,G,B])\n edge case combine({R,G,B})\n\n edge case combine([Color])\n edge case combine({Color})\n */\n structStoreShape = obj\n shapeReady = true\n }\n }\n let noArraySpread: boolean | undefined\n if (!shapeReady) {\n /*\n case combine(R,G,B, (R,G,B) => '~')\n */\n structStoreShape = stores\n /*\n without edge case combine(R,G,B)\n without edge case combine(Color)\n */\n if (handler) {\n noArraySpread = true\n const fn = handler\n handler = (list: any[]) => fn(...list)\n }\n }\n assert(isObject(structStoreShape), `${errorTitle}: shape should be an object`)\n return storeCombination(\n Array.isArray(structStoreShape),\n !noArraySpread,\n structStoreShape,\n config,\n handler,\n extConfig,\n )\n}\n\nconst storeCombination = (\n isArray: boolean,\n needSpread: boolean,\n obj: any,\n config?: Config,\n fn?: (upd: any) => any,\n extConfig?: false | {skipVoid?: boolean},\n) => {\n const errorTitle = generateErrorTitle('combine', config)\n const clone = isArray ? (list: any) => [...list] : (obj: any) => ({...obj})\n const defaultState: Record<string, any> = isArray ? [] : {}\n\n const stateNew = clone(defaultState)\n const rawShape = createStateRef(stateNew)\n const isFresh = createStateRef(true)\n rawShape.type = isArray ? 'list' : 'shape'\n rawShape.noInit = true\n applyTemplate('combineBase', rawShape, isFresh)\n const store = createStore(stateNew, {\n name: unitObjectName(obj),\n derived: true,\n ...extConfig,\n and: config,\n })\n const storeStateRef = getStoreState(store)\n storeStateRef.noInit = true\n setMeta(store, 'isCombine', true)\n const rawShapeReader = read(rawShape)\n /**\n * usual ref reading has very high priority, which leads to data races\n * ref reading for combine should have same \"barrier\" priority but without batching\n * (thats why order has no \"barrierID\" field, which assume batching)\n **/\n rawShapeReader.order = {priority: 'barrier'}\n /**\n * Soft store reading is required for\n * setting target store as inited in scope\n * for preventing retriggering issues\n **/\n const softReader = mov({\n store: storeStateRef,\n to: 'b',\n priority: 'read',\n })\n softReader.data.softRead = true\n const node = [\n calc((upd, _, stack) => {\n if (stack.scope && !stack.scope.reg[rawShape.id]) {\n stack.c = true\n }\n return upd\n }),\n rawShapeReader,\n mov({store: isFresh, to: 'b'}),\n calc((upd, {key}, reg) => {\n if (reg.c || upd !== reg.a[key]) {\n if (needSpread && reg.b) {\n reg.a = clone(reg.a)\n }\n reg.a[key] = upd\n return true\n }\n }, true),\n mov({from: REG_A, target: rawShape}),\n mov({from: VALUE, store: false, target: isFresh}),\n mov({\n from: VALUE,\n store: true,\n target: isFresh,\n priority: 'barrier',\n batch: true,\n }),\n /**\n * `read` with `sampler` priority is used to prevent cases,\n * where `combine` triggers are duplicated\n *\n * basically, this makes `sample` and `combine` priorities equal\n */\n read(rawShape, true, true),\n fn && userFnCall(),\n softReader,\n ]\n forIn(obj, (child: Store<any> | any, key) => {\n if (!is.store(child)) {\n assert(\n !is.unit(child) && !isVoid(child),\n `combine expects a store in a field ${key}`,\n errorTitle,\n )\n stateNew[key] = defaultState[key] = child\n return\n }\n defaultState[key] = child.defaultState\n stateNew[key] = child.getState()\n const linkNode = createLinkNode(child, store, node, 'combine', fn)\n linkNode.scope.key = key\n const childRef = getStoreState(child)\n addRefOp(rawShape, {type: 'field', field: key, from: childRef})\n applyTemplate('combineField', childRef, linkNode)\n })\n\n store.defaultShape = obj\n addRefOp(storeStateRef, {\n type: MAP,\n from: rawShape,\n fn,\n })\n if (!readTemplate()) {\n if (fn) {\n const computedValue = fn(stateNew)\n\n if (isVoid(computedValue) && (!extConfig || !('skipVoid' in extConfig))) {\n console.error(`${errorTitle}: ${requireExplicitSkipVoidMessage}`)\n }\n\n storeStateRef.current = computedValue\n storeStateRef.initial = computedValue\n store.defaultState = computedValue\n } else {\n store.defaultState = defaultState\n }\n }\n return store\n}\n","import type {Defer} from './unit.h'\n\nexport function createDefer(): Defer {\n const result = {} as Defer\n result.req = new Promise((rs, rj) => {\n result.rs = rs\n result.rj = rj\n })\n result.req.catch(() => {})\n return result\n}\n","import type {Unit, Stack} from './index.h'\nimport type {Effect} from './unit.h'\nimport {calc, run} from './step'\nimport {getForkPage, getGraph, getMeta, getParent, setMeta} from './getter'\nimport {own} from './own'\nimport {createNode} from './createNode'\nimport {launch, setForkPage, forkPage, isWatch} from './kernel'\nimport {createStore, createEvent} from './createUnit'\nimport {createDefer} from './defer'\nimport {isObject, isFunction} from './is'\nimport {assert} from './throw'\nimport {EFFECT} from './tag'\nimport {add} from './collection'\nimport {flattenConfig} from './config'\nimport {nextEffectID} from './id'\nimport {generateErrorTitle} from './naming'\n\ntype RunnerData<Params, Done, Fail> = {\n params: Params\n req: {\n rs(data: Done): void\n rj(data: Fail): void\n }\n args?: [params: Params, computedParams: any] | [params: Params]\n handler?: Function\n}\n\nexport function createEffect<Params, Done, Fail = Error>(\n nameOrConfig: any,\n maybeConfig: any = {},\n): Effect<Params, Done, Fail> {\n const config = flattenConfig(\n isFunction(nameOrConfig) ? {handler: nameOrConfig} : nameOrConfig,\n maybeConfig,\n )\n const errorTitle = generateErrorTitle('effect', config)\n const instance = createEvent(\n isFunction(nameOrConfig) ? {handler: nameOrConfig} : nameOrConfig,\n {...maybeConfig, actualOp: EFFECT},\n ) as unknown as Effect<Params, Done, Fail>\n const node = getGraph(instance)\n setMeta(node, 'op', (instance.kind = EFFECT))\n //@ts-expect-error\n instance.use = (fn: Function) => {\n assert(isFunction(fn), '.use argument should be a function', errorTitle)\n runner.scope.handler = fn\n return instance\n }\n instance.use.getCurrent = () => runner.scope.handler\n const anyway = (instance.finally = createEvent({\n named: 'finally',\n derived: true,\n }))\n const done = (instance.done = (anyway as any).filterMap({\n named: 'done',\n fn({\n status,\n params,\n result,\n }: {\n status: 'done' | 'fail'\n params: Params\n result: Done\n error: Fail\n }) {\n if (status === 'done') return {params, result}\n },\n }))\n const fail = (instance.fail = (anyway as any).filterMap({\n named: 'fail',\n fn({\n status,\n params,\n error,\n }: {\n status: 'done' | 'fail'\n params: Params\n result: Done\n error: Fail\n }) {\n if (status === 'fail') return {params, error}\n },\n }))\n const doneData = (instance.doneData = done.map({\n named: 'doneData',\n fn: ({result}: {result: Done}) => result,\n }))\n const failData = (instance.failData = fail.map({\n named: 'failData',\n fn: ({error}: {error: Fail}) => error,\n }))\n\n const runner = createNode({\n scope: {\n handler:\n instance.defaultConfig.handler ||\n (() =>\n assert(\n false,\n `no handler used in ${instance.compositeName.fullName}`,\n )),\n },\n node: [\n calc(\n (upd: RunnerData<Params, Done, Fail>, scope_: any, stack) => {\n let handler: Function = scope_.handler\n const scope = getForkPage(stack)\n if (scope) {\n const scopeHandler =\n scope.handlers.unitMap.get(instance) ||\n scope.handlers.sidMap[instance.sid!]\n if (scopeHandler) handler = scopeHandler\n }\n upd.handler = handler\n return upd\n },\n false,\n true,\n ),\n calc(\n (\n upd: RunnerData<Params, Done, Fail> & {handler: Function},\n _,\n stack,\n ) => {\n if (_.runnerFn) {\n const needToContinue = _.runnerFn(upd, null, stack)\n if (!needToContinue) return\n }\n /** upd.args could be changed by runnerFn */\n const {params, req, handler, args = [params]} = upd\n const onResolve = onSettled(params, req, true, anyway, stack)\n const onReject = onSettled(params, req, false, anyway, stack)\n const [ok, result] = runFn(handler, onReject, args)\n if (ok) {\n if (isObject(result) && isFunction(result.then)) {\n result.then(onResolve, onReject)\n } else {\n onResolve(result)\n }\n }\n },\n false,\n true,\n ),\n ],\n meta: {op: 'fx', fx: 'runner'},\n regional: true,\n })\n node.scope.runner = runner\n add(\n node.seq,\n calc((params, {runner}, stack) => {\n const upd: RunnerData<Params, Done, Fail> = getParent(stack)\n ? {params, req: {rs(data: Done) {}, rj(data: Fail) {}}}\n : /** empty stack means that this node was launched directly */\n params\n if (!stack.meta) {\n stack.meta = {fxID: nextEffectID()}\n }\n launch({\n target: runner,\n params: upd,\n defer: true,\n scope: getForkPage(stack),\n meta: stack.meta,\n })\n return upd.params\n }),\n )\n //@ts-expect-error\n instance.create = (params: Params) => {\n const req = createDefer()\n const payload = {params, req}\n if (forkPage) {\n if (!isWatch) {\n const savedFork = forkPage\n req.req\n .finally(() => {\n setForkPage(savedFork)\n })\n .catch(() => {})\n }\n }\n launch({\n target: instance,\n params: payload,\n scope: forkPage,\n })\n return req.req\n }\n\n const inFlight = (instance.inFlight = createStore(0, {\n serialize: 'ignore',\n named: (getMeta(instance, 'name') || instance.graphite.id) + '.inFlight',\n })\n .on(instance, x => x + 1)\n .on(anyway, x => x - 1)\n .map({\n // @ts-expect-error\n fn: x => x,\n named: 'inFlight',\n }))\n setMeta(anyway, 'needFxCounter', 'dec')\n setMeta(instance, 'needFxCounter', true)\n const pending = (instance.pending = inFlight.map({\n //@ts-expect-error\n fn: amount => amount > 0,\n named: 'pending',\n }))\n\n own(instance, [anyway, done, fail, doneData, failData, pending, inFlight])\n if (config?.domain) {\n config.domain.hooks.effect(instance)\n }\n return instance\n}\nexport const runFn = (\n fn: Function,\n onReject: (data: any) => void,\n args: any[],\n): [boolean, any] => {\n try {\n return [true, fn(...args)]\n } catch (err) {\n onReject(err)\n return [false, null]\n }\n}\n\nexport const onSettled =\n (\n params: any,\n req: {\n rs(_: any): void\n rj(_: any): void\n },\n ok: boolean,\n anyway: Unit,\n stack: Stack,\n ) =>\n (data: any) => {\n launch({\n target: [anyway, sidechain],\n params: [\n ok\n ? {status: 'done', params, result: data}\n : {status: 'fail', params, error: data},\n {value: data, fn: ok ? req.rs : req.rj},\n ],\n defer: true,\n // WARN! Will broke forest pages as they arent moved to new scope\n page: stack.page,\n scope: stack.scope,\n meta: stack.meta,\n })\n }\nconst sidechain = createNode({\n node: [run({fn: ({fn, value}) => fn(value)})],\n meta: {op: 'fx', fx: 'sidechain'},\n})\n","import type {Domain} from './unit.h'\nimport {combine} from './combine'\nimport {createEffect, onSettled, runFn} from './createEffect'\nimport {applyParentHook} from './createUnit'\nimport {processArgsToConfig} from './config'\nimport {\n getGraph,\n getParent,\n getStoreState,\n setMeta,\n getCompositeName,\n} from './getter'\nimport {own} from './own'\nimport {is, isVoid} from './is'\nimport {read, calc} from './step'\nimport {launch} from './kernel'\nimport {EFFECT} from './tag'\nimport {createName, generateErrorTitle} from './naming'\nimport {assert} from './throw'\nimport {Cmd, Node, Stack} from './index.h'\n\nexport function attach(config: any) {\n let injected\n ;[config, injected] = processArgsToConfig(config, true)\n const errorTitle = generateErrorTitle('attach', injected)\n let {source, effect, mapParams, domain} = config\n if (is.effect(effect)) {\n assert(\n isVoid(domain),\n '`domain` can only be used with a plain function',\n errorTitle,\n )\n }\n const attached = createEffect(config, injected)\n setMeta(attached, 'attached', true)\n const {runner} = getGraph(attached).scope as {runner: Node}\n let runnerSteps: Array<Cmd>\n const runnerFnStep = (upd: any, _: any, stack: Stack) => {\n const {params, req, handler} = upd\n const anyway = attached.finally\n const rj = onSettled(params, req, false, anyway, stack)\n const sourceData = stack.a\n const isEffectHandler = is.effect(handler)\n let ok = true\n let computedParams\n if (mapParams) {\n ;[ok, computedParams] = runFn(mapParams, rj, [params, sourceData])\n } else {\n computedParams = source && isEffectHandler ? sourceData : params\n }\n if (ok) {\n if (isEffectHandler) {\n launch({\n target: handler as any,\n params: {\n params: computedParams,\n req: {\n rs: onSettled(params, req, true, anyway, stack),\n rj,\n },\n },\n page: stack.page,\n defer: true,\n meta: stack.meta,\n })\n } else {\n upd.args = [sourceData, computedParams]\n return true\n }\n }\n }\n if (source) {\n runner.scope.runnerFn = runnerFnStep\n let state\n if (is.store(source)) {\n state = source\n own(state, [attached])\n } else {\n state = combine(source)\n own(attached, [state])\n }\n runnerSteps = [\n /**\n * effect computation should run in effect queue,\n * but reading state too early leads to data races\n * so we add additional empty step\n **/\n calc(upd => upd, false, true),\n read(getStoreState(state)),\n ]\n /**\n * in simple effect, seq consists of two steps\n * first prepares handler and the second actually calls it\n *\n * we delete priority, as we already in effect queue\n * so additional delay is not needed\n *\n * curiously, presence of effect here leads to stale values\n * because if effect step is not first in a sequence\n * it will be placed in queue\n * to prevent data races: effects should be called in order,\n * but before we run effect in a queue, we should run\n * more important tasks at first, so it should execute like this:\n *\n * pure queue: [node [mov foo reg_a, effect a]]\n * effect queue: [node [effect b]]\n *\n * order: mov foo reg_a, effect b, effect a\n *\n * but when node is executed, everything in it will run sequentially\n * so kernel will find \"effect a\" earlier than already queued \"effect b\"\n *\n * this behavior leads to state reading happened before another effect handlers\n * execution and in this case we dont want that, as it leads\n * to reading values which are going to change\n */\n delete runner.seq[1].order\n } else {\n runnerSteps = [calc(runnerFnStep, true, true)]\n }\n runner.seq.splice(1, 0, ...runnerSteps)\n attached.use(effect)\n const parentDomain: Domain | void = getParent(effect)\n if (parentDomain) {\n Object.assign(\n getCompositeName(attached),\n createName(attached.shortName, parentDomain),\n )\n attached.defaultConfig.parent = parentDomain\n }\n applyParentHook(effect, attached, EFFECT)\n return attached\n}\n","import type {Store, Event} from './unit.h'\nimport {createEvent, applyParentHook} from './createUnit'\nimport {forIn} from './collection'\nimport {getParent} from './getter'\nimport {processArgsToConfig} from './config'\n\nexport function createApi(...args: [Store<any>, {[key: string]: Function}]) {\n let [[store, setters], metadata] = processArgsToConfig(args)\n const result: Record<string, Event<any>> = {}\n forIn(setters, (fn, key) => {\n const event = (result[key] = createEvent(key, {\n parent: getParent(store),\n config: metadata,\n }))\n store.on(event, fn)\n applyParentHook(store, event)\n })\n return result\n}\n","import type {Domain} from './unit.h'\nimport {own} from './own'\nimport {createNode} from './createNode'\nimport type {Config, NodeUnit} from './index.h'\nimport {\n createEvent,\n createNamedEvent,\n createStore,\n initUnit,\n} from './createUnit'\nimport {createEffect} from './createEffect'\nimport {createLinkNode} from './forward'\nimport {add, forEach, forIn} from './collection'\nimport {getGraph, getParent} from './getter'\nimport {DOMAIN} from './tag'\nimport {launch} from './kernel'\nimport {calc} from './step'\nimport {flattenConfig} from './config'\n\nexport function createDomain(nameOrConfig: any, maybeConfig?: any): Domain {\n const config = flattenConfig({\n or: maybeConfig,\n and: typeof nameOrConfig === 'string' ? {name: nameOrConfig} : nameOrConfig,\n }) as any\n\n const node = createNode({\n family: {type: DOMAIN},\n regional: true,\n parent: config?.domain || config?.parent,\n })\n\n const domain = {\n history: {},\n graphite: node,\n hooks: {},\n } as Domain\n\n node.meta = initUnit(DOMAIN, domain, {\n parent: config?.domain || config?.parent,\n or: {...config, derived: true},\n })\n\n forIn(\n {\n Event: createEvent,\n Effect: createEffect,\n Store: createStore,\n Domain: createDomain,\n },\n (factory, tag) => {\n const lowerCaseTag = tag.toLowerCase() as\n | 'event'\n | 'effect'\n | 'store'\n | 'domain'\n\n const onCreateUnit = createNamedEvent(`on${tag}`)\n domain.hooks[lowerCaseTag] = onCreateUnit\n\n const history = new Set<any>()\n domain.history[`${lowerCaseTag}s`] = history\n\n onCreateUnit.create = unit => {\n launch(onCreateUnit, unit)\n return unit\n }\n add(\n getGraph(onCreateUnit).seq,\n calc((upd, _, stack) => {\n stack.scope = null\n return upd\n }),\n )\n onCreateUnit.watch(unit => {\n own(domain, [unit])\n history.add(unit)\n if (!unit.ownerSet) unit.ownerSet = history\n if (!getParent(unit)) unit.parent = domain\n })\n own(domain, [onCreateUnit])\n\n domain[`onCreate${tag}`] = (hook: (unit: any) => any) => {\n forEach(history, hook)\n return onCreateUnit.watch(hook)\n }\n domain[`create${tag}`] = domain[lowerCaseTag] = (\n nameOrConfig: any,\n rawConfig?: Config,\n ) => {\n const config = flattenConfig({and: rawConfig, or: nameOrConfig})\n if (config?.domain) {\n // @ts-expect-error complicated factory type\n return factory(nameOrConfig, rawConfig)\n }\n // @ts-expect-error complicated factory type\n return onCreateUnit(factory(nameOrConfig, {parent: domain, or: config}))\n }\n },\n )\n\n const parent = getParent(domain)\n if (parent) {\n forIn(domain.hooks, (from: NodeUnit, key) =>\n createLinkNode(from, parent.hooks[key]),\n )\n }\n if (config?.domain) {\n config.domain.hooks.domain(domain)\n }\n return domain\n}\n","import {observableSymbol} from './observable'\nimport type {Event} from './unit.h'\nimport {createEvent} from './createUnit'\nimport {assertObject} from './is'\nimport {assert} from './throw'\nimport {createSubscription} from './subscription'\n\nexport function fromObservable<T>(observable: any): Event<T> {\n assertObject(observable)\n const observableItem =\n observableSymbol in observable ? observable[observableSymbol]() : observable\n assert(observableItem.subscribe, 'expect observable to have .subscribe')\n const event = createEvent<T>()\n const disposer = createSubscription(event)\n observableItem.subscribe({\n next: event,\n error: disposer,\n complete: disposer,\n })\n return event\n}\n","import type {Cmd, StateRef} from './index.h'\nimport type {CommonUnit, DataCarrier, Store} from './unit.h'\nimport {combine} from './combine'\nimport {mov, userFnCall, read, calc} from './step'\nimport {createStateRef, readRef} from './stateRef'\nimport {callStackAReg} from './caller'\nimport {processArgsToConfig} from './config'\nimport {getStoreState, getGraph} from './getter'\nimport {\n assertNodeSet,\n assertTarget,\n is,\n isObject,\n isVoid,\n isFunction,\n} from './is'\nimport {createStore} from './createUnit'\nimport {createEvent} from './createUnit'\nimport {createNode} from './createNode'\nimport {assert, deprecate} from './throw'\nimport {forEach} from './collection'\nimport {STACK, VALUE} from './tag'\nimport {applyTemplate} from './template'\nimport {own} from './own'\nimport {createLinkNode} from './forward'\nimport {generateErrorTitle} from './naming'\n\nconst sampleConfigFields = ['source', 'clock', 'target']\n\nconst fieldErrorMessage = (method: string, field: string) =>\n method + `: ${field} should be defined`\n\nexport function validateSampleConfig(config: any, method: string) {\n let atLeastOneFieldExists = false\n forEach(sampleConfigFields, field => {\n if (field in config) {\n assert(config[field] != null, fieldErrorMessage(method, field))\n atLeastOneFieldExists = true\n }\n })\n return atLeastOneFieldExists\n}\n\nexport function sample(...args: any[]) {\n let target\n let name\n let [[source, clock, fn], metadata] = processArgsToConfig(args)\n let sid\n let batch = true\n let filter\n const errorTitle = generateErrorTitle('sample', metadata)\n /** config case */\n if (\n isVoid(clock) &&\n isObject(source) &&\n validateSampleConfig(source, errorTitle)\n ) {\n clock = source.clock\n fn = source.fn\n if ('batch' in source) {\n batch = source.batch\n } else {\n deprecate(!('greedy' in source), 'greedy in sample', 'batch', errorTitle)\n batch = !source.greedy\n }\n filter = source.filter\n /** optional target & name accepted only from config */\n target = source.target\n name = source.name\n sid = source.sid\n source = source.source\n }\n return createSampling(\n 'sample',\n clock,\n source,\n filter,\n target,\n fn,\n name,\n metadata,\n batch,\n true,\n false,\n sid,\n )\n}\n\nexport const createSampling = (\n method: string,\n clock: DataCarrier | DataCarrier[] | void,\n source: DataCarrier | Array<Store<any>> | Record<string, Store<any>> | void,\n filter: any,\n target: DataCarrier | DataCarrier[] | void,\n fn: any,\n name: string | undefined,\n metadata: object | void,\n batch: boolean,\n targetMayBeStore: boolean,\n filterRequired: boolean,\n sid?: string | undefined,\n) => {\n const errorTitle = generateErrorTitle(method, metadata)\n const isUpward = !!target\n assert(\n !isVoid(source) || !isVoid(clock),\n fieldErrorMessage(errorTitle, 'either source or clock'),\n )\n let sourceIsClock = false\n if (isVoid(source)) {\n sourceIsClock = true\n } else if (!is.unit(source)) {\n source = combine(source)\n }\n if (isVoid(clock)) {\n /** still undefined! */\n clock = source\n } else {\n assertNodeSet(clock, errorTitle, 'clock')\n if (Array.isArray(clock)) {\n clock = createLinkNode(clock as CommonUnit[], [], [], method)\n }\n }\n if (sourceIsClock) {\n source = clock\n }\n // @ts-expect-error\n if (!metadata && !name) name = source.shortName\n let filterType: 'none' | 'unit' | 'fn' = 'none'\n if (filterRequired || filter) {\n if (is.unit(filter)) {\n filterType = 'unit'\n } else {\n assert(isFunction(filter), '`filter` should be function or unit')\n filterType = 'fn'\n }\n }\n if (target) {\n assertNodeSet(target, errorTitle, 'target')\n assertTarget(errorTitle, target)\n } else {\n if (\n filterType === 'none' &&\n targetMayBeStore &&\n is.store(source) &&\n is.store(clock)\n ) {\n const initialState = fn\n ? fn(readRef(getStoreState(source)), readRef(getStoreState(clock)))\n : readRef(getStoreState(source))\n // @ts-expect-error\n target = createStore(initialState, {name, sid, or: metadata})\n } else {\n target = createEvent({name, derived: true, or: metadata})\n applyTemplate('sampleTarget', getGraph(target))\n }\n }\n // const targetTemplate =\n // isUpward && is.unit(target) && getGraph(target).meta.nativeTemplate\n const clockState = createStateRef()\n let filterNodes: Cmd[] = []\n if (filterType === 'unit') {\n const [filterRef, hasFilter, isFilterStore] = syncSourceState(\n filter as DataCarrier,\n target,\n // @ts-expect-error\n clock,\n clockState,\n method,\n )\n if (!isFilterStore) {\n filterNodes.push(...readAndFilter(hasFilter))\n }\n filterNodes.push(...readAndFilter(filterRef))\n }\n const jointNodeSeq: Cmd[] = []\n if (sourceIsClock) {\n if (batch) {\n jointNodeSeq.push(read(clockState, true, true))\n }\n } else {\n const [sourceRef, hasSource, isSourceStore] = syncSourceState(\n // @ts-expect-error\n source,\n target,\n clock,\n clockState,\n method,\n )\n if (!isSourceStore) {\n jointNodeSeq.push(...readAndFilter(hasSource))\n }\n jointNodeSeq.push(read(sourceRef, true, batch))\n }\n const jointNode = createLinkNode(\n // @ts-expect-error\n clock,\n target,\n [\n applyTemplate('sampleSourceLoader'),\n mov({from: STACK, target: clockState}),\n ...jointNodeSeq,\n ...filterNodes,\n read(clockState),\n filterType === 'fn' && userFnCall((src, _, {a}) => filter(src, a), true),\n fn && userFnCall(callStackAReg),\n applyTemplate('sampleSourceUpward', isUpward),\n ],\n method,\n fn,\n )\n // @ts-expect-error\n own(source, [jointNode])\n Object.assign(jointNode.meta, metadata, {joint: true})\n return target\n}\n\nconst readAndFilter = (state: StateRef) => [\n read(state),\n calc((upd, scope, {a}) => a, true),\n]\n\nconst syncSourceState = (\n source: DataCarrier,\n target: DataCarrier | DataCarrier[],\n clock: DataCarrier | DataCarrier[],\n clockState: StateRef,\n method: string,\n) => {\n const isSourceStore = is.store(source)\n const sourceRef = isSourceStore ? getStoreState(source) : createStateRef()\n const hasSource = createStateRef(isSourceStore)\n if (!isSourceStore) {\n createNode({\n parent: source,\n node: [\n mov({from: STACK, target: sourceRef}),\n mov({from: VALUE, store: true, target: hasSource}),\n ],\n family: {\n owners: [...new Set([source, target, clock].flat())],\n links: target,\n },\n meta: {op: method},\n regional: true,\n })\n }\n applyTemplate('sampleSource', hasSource, sourceRef, clockState)\n return [sourceRef, hasSource, isSourceStore] as const\n}\n","import {processArgsToConfig} from './config'\nimport {generateErrorTitle} from './naming'\nimport {validateSampleConfig, createSampling} from './sample'\nimport {deprecate} from './throw'\n\nexport function guard(...args: any[]) {\n let [[source, config], metadata] = processArgsToConfig(args)\n const errorTitle = generateErrorTitle('guard', metadata)\n deprecate(false, 'guard', 'sample', errorTitle)\n if (!config) {\n config = source\n source = config.source\n }\n validateSampleConfig(config, errorTitle)\n return createSampling(\n 'guard',\n config.clock,\n source,\n config.filter,\n config.target,\n null,\n config.name,\n metadata,\n !config.greedy,\n false,\n true,\n )\n}\n","import type {Store, Event, Effect} from './unit.h'\nimport {createEvent} from './createUnit'\nimport {createLinkNode} from './forward'\nimport {generateErrorTitle, unitObjectName} from './naming'\nimport {assertNodeSet} from './is'\n\nexport function merge<T>(\n units: Array<Event<T> | Store<T> | Effect<T, any, any>>,\n config?: object,\n): Event<T> {\n const errorTitle = generateErrorTitle('merge', config)\n assertNodeSet(units, errorTitle, 'first argument')\n const result = createEvent({\n name: unitObjectName(units, 'merge'),\n derived: true,\n and: config,\n })\n createLinkNode(units, result, [], 'merge')\n return result\n}\n","import {createStore} from './createUnit'\nimport {is} from './is'\nimport {forIn} from './collection'\nimport {getParent} from './getter'\nimport {createLinkNode} from './forward'\nimport {assert} from './throw'\nimport {generateErrorTitle} from './naming'\n\nexport function restore(obj: any, defaultState: any, config?: any) {\n const errorTitle = generateErrorTitle('restore', config)\n assert(!is.store(obj), 'restore($store) is not supported', errorTitle)\n if (is.event(obj) || is.effect(obj)) {\n const domain = getParent(obj)\n const result = createStore(defaultState, {\n parent: domain,\n name: obj.shortName,\n and: config,\n })\n createLinkNode(is.effect(obj) ? obj.doneData : obj, result)\n if (domain) domain.hooks.store(result)\n return result\n }\n const result: Record<string, any> = Array.isArray(obj) ? [] : {}\n forIn(\n obj,\n (value, key) =>\n (result[key] = is.store(value) ? value : createStore(value, {name: key})),\n )\n return result\n}\n","import type {DataCarrier} from './unit.h'\nimport type {Cmd, Stack} from './index.h'\nimport {is, isFunction, isObject, assertTarget} from './is'\nimport {add, forIn, includes} from './collection'\nimport {addRefOp, createStateRef} from './stateRef'\nimport {createLinkNode} from './forward'\nimport {processArgsToConfig} from './config'\nimport {compute, userFnCall, calc, read} from './step'\nimport {createNode} from './createNode'\nimport {launch} from './kernel'\nimport {getStoreState} from './getter'\nimport {assert} from './throw'\nimport {createEvent} from './createUnit'\nimport {applyTemplate} from './template'\nimport {createSampling} from './sample'\nimport {generateErrorTitle} from './naming'\n\nconst launchCase = (\n scopeTargets: Record<string, DataCarrier>,\n field: string,\n data: any,\n stack: Stack,\n) => {\n const target = scopeTargets[field]\n if (target) {\n launch({\n target,\n params: Array.isArray(target) ? target.map(() => data) : data,\n defer: true,\n stack,\n })\n }\n}\n\nexport function split(...args: any[]) {\n const METHOD = 'split'\n let targets: Record<string, DataCarrier>\n let clock: undefined | DataCarrier | DataCarrier[]\n let [[source, match], metadata] = processArgsToConfig(args)\n const errorTitle = generateErrorTitle(METHOD, metadata)\n const configForm = !match\n if (configForm) {\n targets = source.cases\n match = source.match\n clock = source.clock\n source = source.source\n }\n const matchIsUnit = is.store(match)\n const matchIsFunction = !is.unit(match) && isFunction(match)\n const matchIsShape = !matchIsUnit && !matchIsFunction && isObject(match)\n assert(is.unit(source), 'source must be a unit', errorTitle)\n if (!targets!) targets = {}\n if (!configForm) {\n assert(matchIsShape, 'match should be an object', errorTitle)\n forIn(\n match,\n (_, key) =>\n (targets[key] = createEvent({\n derived: true,\n named: `cases.${key}`,\n and: metadata,\n })),\n )\n targets.__ = createEvent({\n derived: true,\n named: 'cases.__',\n and: metadata,\n })\n } else {\n forIn(targets, (target, field) =>\n assertTarget(errorTitle, target, `cases.${field}`),\n )\n }\n const owners = new Set(\n ([] as DataCarrier[]).concat(\n source as DataCarrier,\n clock || [],\n Object.values(targets),\n ),\n )\n const caseNames = Object.keys(\n matchIsUnit || matchIsFunction ? targets : match,\n )\n let splitterSeq: Array<Cmd | false>\n if (matchIsUnit || matchIsFunction) {\n if (matchIsUnit) owners.add(match)\n splitterSeq = [\n matchIsUnit && read(getStoreState(match), false, true),\n compute({\n safe: matchIsUnit,\n filter: true,\n pure: !matchIsUnit,\n fn(data, scopeTargets, stack) {\n const value = String(matchIsUnit ? stack.a : match(data))\n launchCase(\n scopeTargets,\n includes(caseNames, value) ? value : '__',\n data,\n stack,\n )\n },\n }),\n ]\n } else if (matchIsShape) {\n const lastValues = createStateRef({})\n lastValues.type = 'shape'\n const units = [] as string[]\n let needBarrier: boolean\n forIn(match, (storeOrFn, key) => {\n if (is.unit(storeOrFn)) {\n needBarrier = true\n add(units, key)\n // @ts-expect-error\n owners.add(storeOrFn)\n const updater = createLinkNode(\n storeOrFn,\n [],\n [read(lastValues), calc((upd, _, {a}) => (a[key] = upd))],\n )\n if (is.store(storeOrFn)) {\n lastValues.current[key] = storeOrFn.getState()\n const storeRef = getStoreState(storeOrFn)\n addRefOp(lastValues, {from: storeRef, field: key, type: 'field'})\n applyTemplate('splitMatchStore', storeRef, updater)\n }\n }\n })\n if (needBarrier!) {\n applyTemplate('splitBase', lastValues)\n }\n splitterSeq = [\n needBarrier! && read(lastValues, false, true),\n userFnCall((data, scopeTargets, stack) => {\n for (let i = 0; i < caseNames.length; i++) {\n const caseName = caseNames[i]\n const caseValue = includes(units, caseName)\n ? stack.a[caseName]\n : match[caseName](data)\n if (caseValue) {\n launchCase(scopeTargets, caseName, data, stack)\n return\n }\n }\n launchCase(scopeTargets, '__', data, stack)\n }, true),\n ]\n } else {\n assert(false, 'expect match to be unit, function or object')\n }\n const splitterNode = createNode({\n meta: {op: METHOD},\n parent: clock ? [] : source,\n scope: targets,\n node: splitterSeq!,\n family: {owners: Array.from(owners)},\n regional: true,\n })\n if (clock) {\n createSampling(\n METHOD,\n clock,\n source as DataCarrier,\n null,\n splitterNode,\n null,\n METHOD,\n metadata,\n /* non-batched */\n false,\n false,\n false,\n )\n }\n if (!configForm) return targets\n}\n","import {add} from '../collection'\nimport {createDefer} from '../defer'\nimport {getGraph} from '../getter'\nimport {is} from '../is'\nimport {launch, forkPage} from '../kernel'\nimport {generateErrorTitle} from '../naming'\nimport type {Scope, Event, Effect, DataCarrier, SettledDefer} from '../unit.h'\n\nexport function allSettled<T>(\n start: Event<T> | Effect<T, any, any> | Scope,\n //@ts-expect-error its optional in correct cases\n {scope, params: ctx}: {scope: Scope; params?: unknown} = {},\n) {\n if (!is.unit(start))\n return Promise.reject(new Error('first argument should be unit'))\n if (\n !is.effect(start) &&\n !is.event(start) &&\n !is.store(start) &&\n !is.scope(start)\n )\n return Promise.reject(\n new Error(\n 'first argument accepts only effects, events, stores or scopes',\n ),\n )\n /** duplicated check because of ts validation */\n if (is.scope(start)) {\n scope = start\n } else if (!is.targetable(start)) {\n const errorTitle = generateErrorTitle('allSettled', getGraph(start).meta)\n return Promise.reject(Error(`${errorTitle}: unit should be targetable`))\n }\n const defer = createDefer() as SettledDefer\n defer.parentFork = forkPage\n const {fxCount} = scope\n add(fxCount.scope.defers, defer)\n\n const launchUnits: DataCarrier[] = []\n const launchParams: Array<{params: unknown; req: unknown} | null> = []\n if (!is.scope(start)) {\n add(launchUnits, start)\n add(\n launchParams,\n is.effect(start)\n ? {\n params: ctx,\n req: {\n rs(value: unknown) {\n defer.value = {status: 'done', value}\n },\n rj(value: unknown) {\n defer.value = {status: 'fail', value}\n },\n },\n }\n : ctx,\n )\n }\n add(launchUnits, fxCount)\n add(launchParams, null)\n launch({\n target: launchUnits,\n params: launchParams,\n scope,\n })\n return defer.req\n}\n","import {getMeta, getOwners, getLinks} from '../getter'\nimport {is} from '../is'\nimport {assert} from '../throw'\nimport type {Store, Effect, ValuesMap, HandlersMap} from '../unit.h'\nimport type {Node, Unit} from '../index.h'\nimport {add, forEach, includes} from '../collection'\nimport {STORE} from '../tag'\n\nexport function traverseStores(\n root: Node,\n fn: (node: Node, sid: string | null) => void,\n needSidlessStores: true,\n): void\nexport function traverseStores(\n root: Node,\n fn: (node: Node, sid: string) => void,\n): void\nexport function traverseStores(\n root: Node,\n fn: (node: Node, sid: string) => void,\n needSidlessStores?: boolean,\n) {\n const list = [] as Node[]\n ;(function visit(node) {\n if (includes(list, node)) return\n add(list, node)\n if (getMeta(node, 'op') === STORE) {\n if (needSidlessStores || getMeta(node, 'sid')) {\n fn(node, getMeta(node, 'sid'))\n }\n }\n forEach(node.next, visit)\n forEach(getOwners(node), visit)\n forEach(getLinks(node), visit)\n })(root)\n}\n\ntype StoreOrEffect = Store<any> | Effect<any, any, any>\n\nexport function normalizeValues(\n values: ValuesMap | HandlersMap,\n assertEach?: (key: StoreOrEffect, value: any) => void,\n) {\n const mapOrRecordValues: Map<StoreOrEffect, any> | Record<string, any> =\n Array.isArray(values) ? new Map(values as [StoreOrEffect, any][]) : values\n const unitMap = new Map<Unit<any>, any>()\n let hasSidDoubles = false\n if (mapOrRecordValues instanceof Map) {\n const sidMap = {} as Record<string, any>\n forEach(mapOrRecordValues, (value, key) => {\n assert(\n (is.unit as (val: unknown) => val is StoreOrEffect)(key),\n 'Map key should be a unit',\n )\n if (assertEach) assertEach(key, value)\n if (key.sid) {\n if (key.sid in sidMap) hasSidDoubles = true\n sidMap[key.sid!] = value\n }\n unitMap.set(key, value)\n })\n return {sidMap, unitMap, hasSidDoubles}\n }\n return {sidMap: mapOrRecordValues, unitMap}\n}\n","import {is} from '../is'\nimport {assert, deprecate} from '../throw'\nimport type {Domain, ValuesMap, HandlersMap, Scope, Store} from '../unit.h'\nimport {normalizeValues} from './util'\nimport {createScope} from './createScope'\nimport {forEach} from '../collection'\nimport {getMeta} from '../getter'\n\ntype ForkConfig = {\n values?: ValuesMap\n handlers?: HandlersMap\n}\n\nexport function fork(\n domainOrConfig?: Domain | ForkConfig,\n optionalConfig?: ForkConfig,\n) {\n let config: ForkConfig | void = domainOrConfig as any\n let domain: Domain\n if (is.domain(domainOrConfig)) {\n deprecate(false, 'fork(domain)', 'fork()')\n domain = domainOrConfig\n config = optionalConfig\n }\n\n const scope = createScope(domain!)\n\n if (config) {\n if (config.values) {\n const {sidMap, unitMap, hasSidDoubles} = normalizeValues(\n config.values,\n unit => \n assert(is.store(unit) && is.targetable(unit), 'Values map can contain only writable stores as keys'),\n )\n Object.assign(scope.values.sidMap, sidMap)\n forEach(unitMap, (value, unit) => {\n scope.values.idMap[(unit as Store<any>).stateRef.id] = value\n\n /**\n * If store values were provided as tuple or map,\n * but unit has sid anyway, we should add it to sidIdMap,\n * \n * It is needed to avoid issues, if there are duplicated sids in the code + values is a tuple or map\n */\n scope.sidIdMap[getMeta(unit, 'sid')] = (unit as Store<any>).stateRef.id\n\n const serialize = getMeta(unit, 'serialize')\n if (serialize === 'ignore') {\n const sid = getMeta(unit, 'sid')\n scope.sidSerializeSettings.set(sid, {ignore: true})\n }\n })\n scope.fromSerialize =\n !Array.isArray(config.values) && !(config.values instanceof Map)\n scope.hasSidDoubles = hasSidDoubles\n }\n if (config.handlers) {\n deprecate(\n config.handlers instanceof Map || Array.isArray(config.handlers),\n 'object with handlers',\n 'array',\n )\n scope.handlers = normalizeValues(config.handlers, unit =>\n assert(\n is.effect(unit),\n `Handlers map can contain only effects as keys`,\n ),\n )\n }\n }\n return scope\n}\n","import {getForkPage, getGraph, getMeta} from '../getter'\nimport {setForkPage, getPageRef, currentPage} from '../kernel'\nimport {createNode} from '../createNode'\nimport {calc, compute} from '../step'\nimport type {Domain, Scope, SettledDefer, Store} from '../unit.h'\nimport type {Stack, StateRef} from '../index.h'\nimport {forEach} from '../collection'\nimport {DOMAIN, SAMPLER, SCOPE} from '../tag'\n\nexport function createScope(unit?: Domain): Scope {\n const forkInFlightCounter = createNode({\n scope: {\n defers: [],\n inFlight: 0,\n fxID: 0,\n },\n node: [\n calc((_, scope, stack) => {\n if (!stack.parent) {\n scope.fxID += 1\n return\n }\n if (stack.parent.node.meta.needFxCounter === 'dec') {\n scope.inFlight -= 1\n } else {\n scope.inFlight += 1\n scope.fxID += 1\n }\n }),\n compute({priority: SAMPLER, batch: true}),\n calc(\n (\n _,\n scope: {\n inFlight: number\n fxID: number\n defers: SettledDefer[]\n },\n ) => {\n const {defers, fxID} = scope\n if (scope.inFlight > 0 || defers.length === 0) return\n Promise.resolve().then(() => {\n if (scope.fxID !== fxID) return\n forEach(defers.splice(0, defers.length), defer => {\n setForkPage(defer.parentFork)\n defer.rs(defer.value)\n })\n })\n },\n false,\n true,\n ),\n ],\n })\n const page = {} as Record<string, StateRef>\n const storeChange = createNode({\n node: [\n calc((value, __, stack) => {\n const storeStack = stack.parent\n if (storeStack) {\n const storeNode = storeStack.node\n if (isNotCombineNode(storeStack)) {\n const forkPage = getForkPage(stack)!\n const id = storeNode.scope.state.id\n const sid = storeNode.meta.sid\n forkPage.sidIdMap[sid] = id\n forkPage.values.sidMap[sid] = value\n\n const serialize = storeNode.meta.serialize\n if (serialize) {\n if (serialize === 'ignore') {\n forkPage.sidSerializeSettings.set(sid, {ignore: true})\n } else {\n forkPage.sidSerializeSettings.set(sid, {\n ignore: false,\n write: serialize.write,\n })\n }\n }\n }\n }\n }),\n ],\n })\n const warnSerializeNode = createNode({\n node: [\n calc((_, __, stack) => {\n const forkPage = getForkPage(stack)\n const parent = stack.parent\n if (forkPage && parent) {\n if (isNotCombineNode(parent)) {\n forkPage.warnSerializeTraces.add(getMeta(parent.node, 'storeTrace'))\n }\n }\n }),\n ],\n })\n const resultScope: Scope = {\n cloneOf: unit,\n reg: page,\n values: {sidMap: {}, idMap: {}},\n sidIdMap: {},\n sidSerializeSettings: new Map(),\n getState(store: StateRef | Store<any>) {\n if ('current' in store) {\n return getPageRef(currentPage, resultScope, store, false).current\n }\n const node = getGraph(store)\n return getPageRef(currentPage, resultScope, node.scope.state, true)\n .current\n },\n kind: SCOPE,\n graphite: createNode({\n family: {\n type: DOMAIN,\n links: [forkInFlightCounter, storeChange, warnSerializeNode],\n },\n meta: {unit: 'fork'},\n scope: {forkInFlightCounter},\n }),\n additionalLinks: {},\n handlers: {sidMap: {}, unitMap: new Map()},\n fxCount: forkInFlightCounter,\n storeChange,\n warnSerializeTraces: new Set(),\n warnSerializeNode,\n }\n return resultScope\n}\n\nconst isNotCombineNode = (storeStack: Stack) =>\n !storeStack.node.meta.isCombine ||\n (storeStack.parent && storeStack.parent.node.meta.op !== 'combine')\n","import {is, isObject} from '../is'\nimport {assert, deprecate} from '../throw'\nimport {launch} from '../kernel'\nimport type {Domain, Scope, ValuesMap, Store} from '../unit.h'\nimport type {Node} from '../index.h'\nimport {add, forEach, includes} from '../collection'\nimport {normalizeValues, traverseStores} from './util'\nimport {getGraph, getMeta} from '../getter'\n\n/**\n hydrate state on client\n\n const root = createDomain()\n hydrate(root, {\n values: window.__initialState__\n})\n\n */\nexport function hydrate(domain: Domain | Scope, {values}: {values: ValuesMap}) {\n assert(isObject(values), 'values property should be an object')\n const {sidMap, unitMap} = normalizeValues(values)\n const valuesSidList = Object.getOwnPropertyNames(sidMap)\n const storesRefIdMap: Record<string, Store<any>> = {}\n forEach(unitMap as unknown as Map<Store<any>, any>, (_, unit) => {\n storesRefIdMap[unit.stateRef.id] = unit\n })\n // Array.from(unitMap.keys(),\n const storeNodes: Node[] = []\n const storeValues: any[] = []\n let forkPage: Scope\n let traverseTarget: Node\n let needToAssign: true | void\n if (is.scope(domain)) {\n forkPage = domain\n needToAssign = true\n assert(forkPage.cloneOf, 'scope should be created from domain')\n deprecate(false, 'hydrate(fork(domain), { values })', 'fork({ values })')\n traverseTarget = getGraph(forkPage.cloneOf)\n } else if (is.domain(domain)) {\n deprecate(false, 'hydrate(domain, { values })', 'fork({ values })')\n traverseTarget = getGraph(domain)\n } else {\n assert(false, 'first argument of hydrate should be domain or scope')\n }\n traverseStores(\n traverseTarget!,\n (node, sid) => {\n // forkPage.sidIdMap[sid] = node.scope.state.id\n if (sid && includes(valuesSidList, sid)) {\n add(storeNodes, node)\n const serializer = getMeta(node, 'serialize')\n if (serializer && serializer !== 'ignore') {\n sidMap[sid] = serializer.read(sidMap[sid])\n }\n add(storeValues, sidMap[sid])\n } else if (node.scope.state.id in storesRefIdMap) {\n add(storeNodes, node)\n add(storeValues, unitMap.get(storesRefIdMap[node.scope.state.id]))\n }\n },\n true,\n )\n launch({\n target: storeNodes,\n params: storeValues,\n scope: forkPage!,\n })\n if (needToAssign) {\n Object.assign(forkPage!.values.sidMap, sidMap)\n }\n}\n","import {assert} from '../throw'\nimport {forkPage, setForkPage} from '../kernel'\nimport type {Scope} from '../unit.h'\n\n/** bind event to scope */\nexport function scopeBind(\n unit: (...args: any[]) => any,\n {scope, safe}: {scope?: Scope; safe?: true} = {},\n) {\n assert(scope || forkPage || safe, 'scopeBind: scope not found')\n const targetForkPage = scope || forkPage!\n\n return (...args: any[]) => {\n let final: any\n let failed = false\n\n const lastForkPage = forkPage\n function restoreLastForkPage() {\n setForkPage(lastForkPage)\n }\n\n setForkPage(targetForkPage)\n try {\n final = unit(...args)\n } catch (err) {\n final = err\n failed = true\n }\n restoreLastForkPage()\n\n if (failed) throw final\n\n if (final instanceof Promise) {\n final.then(restoreLastForkPage, restoreLastForkPage)\n }\n\n return final\n }\n}\n","import type {Scope, Store} from '../unit.h'\nimport {forEach, forIn, includes} from '../collection'\nimport {assert, deprecate, printErrorWithStack} from '../throw'\nimport {traverseStores} from './util'\nimport {getGraph, getMeta} from '../getter'\n\nconst noopSerializer = (x: any) => x\n/**\n serialize state on server\n */\nexport function serialize(\n scope: Scope,\n config: {ignore?: Array<Store<any>>; onlyChanges?: boolean} = {},\n) {\n if (scope.warnSerializeTraces.size) {\n console.error(\n 'serialize: One or more stores dont have sids, their values are omitted',\n )\n forEach(scope.warnSerializeTraces, stack => {\n printErrorWithStack('store should have sid or `serialize: ignore`', stack)\n })\n }\n assert(!scope.hasSidDoubles, 'duplicate sid found in this scope')\n const ignoredStores = config.ignore ? config.ignore.map(({sid}) => sid) : []\n const result = {} as Record<string, any>\n forIn(scope.values.sidMap, (value, sid) => {\n if (includes(ignoredStores, sid)) return\n const id = scope.sidIdMap[sid]\n const serializeSettings = scope.sidSerializeSettings.get(sid) ?? {\n ignore: false,\n write: noopSerializer,\n }\n if (serializeSettings.ignore) return\n const serializer = serializeSettings.write\n // if (!scope.changedStores.has(id)) return\n if (id && id in scope.reg) {\n result[sid] = serializer(scope.reg[id].current)\n } else {\n result[sid] = serializer(value)\n }\n })\n if ('onlyChanges' in config) {\n deprecate(false, 'onlyChanges')\n if (!config.onlyChanges) {\n assert(scope.cloneOf, 'scope should be created from domain')\n traverseStores(getGraph(scope.cloneOf), (node, sid) => {\n if (\n !(sid in result) &&\n !includes(ignoredStores, sid) &&\n !getMeta(node, 'isCombine') &&\n getMeta(node, 'serialize') !== 'ignore'\n )\n result[sid] = scope.getState(node as any)\n })\n }\n }\n return result\n}\n","import {clearNode} from './clearNode'\nimport {createNode} from './createNode'\nimport type {Subscription, Unit, Compute, MovStoreToRegister} from './index.h'\nimport {step} from './step'\nimport {Scope} from './unit.h'\nimport {addUnsubscribe} from './subscription'\nimport {is} from './is'\n\nexport function createWatch<T>({\n unit,\n fn,\n scope,\n batch,\n}: {\n unit: Unit<T> | Unit<T>[]\n fn: (value: T) => any\n scope?: Scope\n batch?: boolean\n}): Subscription {\n const seq: (Compute | MovStoreToRegister)[] = [\n step.run({fn: value => fn(value)}),\n ]\n if (batch) {\n seq.unshift(step.compute({priority: 'sampler', batch: true}))\n }\n if (is.store(unit)) {\n seq.unshift(\n step.mov({\n store: (unit as any).stateRef,\n to: 'stack',\n }),\n )\n }\n const units = Array.isArray(unit) ? unit : [unit]\n if (scope) {\n const unsubs: (() => void)[] = []\n const scopeLinks = scope.additionalLinks\n\n units.forEach(u => {\n const links = scopeLinks[u.graphite.id] || []\n scopeLinks[u.graphite.id] = links\n\n const node = createNode({\n node: prepareSeq(seq, u),\n meta: {\n watchOp: u.kind,\n },\n })\n\n links.push(node)\n\n unsubs.push(() => {\n const idx = links.indexOf(node)\n if (idx !== -1) links.splice(idx, 1)\n clearNode(node)\n })\n })\n return addUnsubscribe(() => {\n unsubs.forEach(u => u())\n })\n } else {\n const node = createNode({\n node: seq,\n parent: units,\n family: {owners: units},\n })\n return addUnsubscribe(() => {\n clearNode(node)\n })\n }\n}\n\nfunction prepareSeq(seq: (Compute | MovStoreToRegister)[], unit: any) {\n if (is.store(unit)) {\n return [\n step.mov({\n store: (unit as any).stateRef,\n to: 'stack',\n }),\n ...seq,\n ]\n }\n\n return seq\n}\n","export const observableSymbol =\n (typeof Symbol !== 'undefined' && Symbol.observable) || '@@observable'\n","import type {Node, StateRef, NodeUnit} from './index.h'\nimport type {Scope, Store, CommonUnit, Domain} from './unit.h'\n\nexport const getGraph = (graph: NodeUnit): Node =>\n (graph as {graphite: Node}).graphite || graph\nexport const getOwners = (node: Node) => node.family.owners\nexport const getLinks = (node: Node) => node.family.links\nexport const getStoreState = (store: Store<any>): StateRef => store.stateRef\nexport const getValue = <T>(stack: {value: T}) => stack.value\nexport const getParent = (unit: any) => unit.parent\nexport const getForkPage = (val: any): Scope | void => val.scope\nexport const getMeta = (unit: NodeUnit, field: string) =>\n getGraph(unit).meta[field]\nexport const setMeta = (unit: NodeUnit, field: string, value: unknown) =>\n (getGraph(unit).meta[field] = value)\nexport const getCompositeName = (unit: CommonUnit | Domain) =>\n unit.compositeName\n","import type {Kind, Unit} from './index.h'\nimport type {Domain, Effect, Event, Scope, Store} from './unit.h'\nimport {DOMAIN, STORE, EVENT, EFFECT, SCOPE} from './tag'\nimport {isObject, isFunction} from './is'\nimport {getMeta} from './getter'\nimport { UnitTargetable } from 'effector'\n\nexport const unit = (obj: unknown): obj is Unit<any> =>\n (isFunction(obj) || isObject(obj)) && 'kind' in obj\n\nconst is = (type: Kind) => (obj: unknown) => unit(obj) && obj.kind === type\n\nexport const store = is(STORE) as (value: unknown) => value is Store<unknown>\nexport const event = is(EVENT) as (value: unknown) => value is Event<unknown>\nexport const effect = is(EFFECT) as (\n value: unknown,\n) => value is Effect<unknown, unknown, unknown>\nexport const targetable = (obj: unknown): obj is UnitTargetable<unknown> => unit(obj) && !!(obj as any).targetable\nexport const domain = is(DOMAIN) as (value: unknown) => value is Domain\nexport const scope = is(SCOPE) as (value: unknown) => value is Scope\nexport const attached = (unit: unknown) =>\n effect(unit) && getMeta(unit, 'attached') === true\n","const idCount = () => {\n let id = 0\n return () => `${++id}`\n}\n\nexport const nextUnitID = idCount()\nexport const nextStepID = idCount()\nexport const nextNodeID = idCount()\nexport const nextEffectID = idCount()\n","import type {NodeUnit} from './index.h'\nimport {getGraph, getOwners, getLinks} from './getter'\nimport {DOMAIN, CROSSLINK} from './tag'\nimport {add, forEach} from './collection'\n\nexport const own = (ownerUnit: NodeUnit, links: NodeUnit[]) => {\n const owner = getGraph(ownerUnit)\n forEach(links, _link => {\n const link = getGraph(_link)\n if (owner.family.type !== DOMAIN) link.family.type = CROSSLINK\n add(getOwners(link), owner)\n add(getLinks(owner), link)\n })\n}\n","export * as is from './validate'\nimport {forEach} from './collection'\nimport {assert} from './throw'\nimport {arrifyNodes} from './createNode'\nimport type {NodeUnit} from './index.h'\nimport type {DataCarrier} from './unit.h'\nimport {getMeta} from './getter'\n\nexport const isObject = (value: unknown): value is Record<any, any> =>\n typeof value === 'object' && value !== null\nexport const isFunction = (value: unknown): value is Function =>\n typeof value === 'function'\n\nexport const isVoid = (value: unknown): value is void => value === undefined\n\nexport const assertObject = (value: unknown) =>\n assert(\n isObject(value) || isFunction(value),\n 'expect first argument be an object',\n ) // or function\n\nconst assertNodeSetItem = (\n value: unknown,\n method: string,\n valueName: string,\n reason: string,\n): asserts value is DataCarrier =>\n assert(\n !(\n (!isObject(value) && !isFunction(value)) ||\n (!('family' in value) && !('graphite' in value))\n ),\n `${method}: expect ${valueName} to be a unit (store, event or effect)${reason}`,\n )\n\nexport const assertNodeSet = (\n value: unknown,\n method: string,\n valueName: string,\n) => {\n if (Array.isArray(value)) {\n forEach(value, (item, i) =>\n assertNodeSetItem(item, method, `${i} item of ${valueName}`, ''),\n )\n } else {\n //@ts-expect-error some ts assertion edge case\n assertNodeSetItem(value, method, valueName, ' or array of units')\n }\n}\n\nexport const assertTarget = (\n method: string,\n target: NodeUnit | NodeUnit[],\n targetField: string = 'target',\n) =>\n forEach(arrifyNodes(target), item =>\n assert(\n !getMeta(item, 'derived'),\n `${method}: derived unit in \"${targetField}\" is not supported, use createStore/createEvent instead\"`,\n ),\n )\n","import type {Stack} from './index.h'\n\nexport const callStackAReg = (\n stack: any,\n {fn}: {[key: string]: any},\n {a}: Stack,\n) => fn(stack, a)\nexport const callARegStack = (\n stack: any,\n {fn}: {[key: string]: any},\n {a}: Stack,\n) => fn(a, stack)\nexport const callStack = (stack: any, {fn}: {[key: string]: any}, _: Stack) =>\n fn(stack)\n","import type {\n StateRef,\n Compute,\n MovValueToRegister,\n MovValueToStore,\n MovStoreToRegister,\n MovStoreToStore,\n MovRegisterToStore,\n Stack,\n} from './index.h'\nimport {nextStepID} from './id'\nimport {EFFECT, REG_A, SAMPLER, STACK, STORE} from './tag'\nimport type {BarrierPriorityTag} from './kernel'\nimport {callStack} from './caller'\n\nconst cmd = <Type extends 'compute' | 'mov'>(\n type: Type,\n data: any,\n priority?: BarrierPriorityTag | false,\n batch?: boolean,\n) => {\n const result: {\n id: string\n type: Type\n data: any\n order?: {\n priority: BarrierPriorityTag\n barrierID?: number\n }\n } = {\n id: nextStepID(),\n type,\n data,\n }\n if (priority) {\n result.order = {priority}\n if (batch) result.order.barrierID = ++nextBarrierID\n }\n return result\n}\n\nlet nextBarrierID = 0\n\nexport const mov: {\n <T>(data: {\n from: 'value'\n store: T\n target: StateRef\n batch?: boolean\n priority?: BarrierPriorityTag\n }): MovValueToStore<T>\n <T>(data: {\n from: 'value'\n to: 'stack' | 'a' | 'b'\n store: T\n batch?: boolean\n priority?: BarrierPriorityTag\n }): MovValueToRegister<T>\n (data: {\n from: 'a' | 'b' | 'stack'\n target: StateRef\n batch?: boolean\n priority?: BarrierPriorityTag\n }): MovRegisterToStore\n (data: {\n from: 'a' | 'b' | 'stack'\n to: 'a' | 'b' | 'stack'\n batch?: boolean\n priority?: BarrierPriorityTag\n }): MovRegisterToStore\n (data: {\n store: StateRef\n target: StateRef\n batch?: boolean\n priority?: BarrierPriorityTag\n }): MovStoreToStore\n (data: {\n store: StateRef\n to: 'stack' | 'a' | 'b'\n batch?: boolean\n priority?: BarrierPriorityTag | false\n }): MovStoreToRegister\n (data: {\n store: StateRef\n batch?: boolean\n priority?: BarrierPriorityTag | false\n }): MovStoreToRegister\n // (data: {\n // from?: 'value' | 'store' | 'stack' | 'a' | 'b'\n // to?: 'stack' | 'a' | 'b' | 'store'\n // store?: StateRef\n // target?: StateRef\n // }): Mov\n} = ({\n from = STORE,\n store,\n target,\n to = target ? STORE : STACK,\n batch,\n priority,\n}: {\n from?: 'value' | 'store' | 'stack' | 'a' | 'b'\n to?: 'stack' | 'a' | 'b' | 'store'\n store?: StateRef\n target?: StateRef\n batch?: boolean\n priority?: BarrierPriorityTag | false\n}) => cmd('mov', {from, store, to, target}, priority, batch)\n\nexport const compute = <\n LocalValues extends {[key: string]: any} = {[key: string]: any},\n>({\n fn,\n batch,\n priority,\n safe = false,\n filter = false,\n pure = false,\n}: {\n fn?: (data: any, scope: LocalValues, stack: Stack) => any\n batch?: boolean\n priority?: BarrierPriorityTag | false\n safe?: boolean\n filter?: boolean\n pure?: boolean\n}): Compute => cmd('compute', {fn, safe, filter, pure}, priority, batch)\n\nexport const filter = ({\n fn,\n pure,\n}: {\n fn(data: any, scope: {[key: string]: any}, stack: Stack): any\n pure?: boolean\n}) => compute({fn, filter: true, pure})\n\nexport const run = ({\n fn,\n}: {\n fn(data: any, scope: {[key: string]: any}, stack: Stack): any\n}) => compute({fn, priority: EFFECT})\n\nexport const calc = <\n LocalValues extends {[key: string]: any} = {[key: string]: any},\n>(\n fn: (data: any, scope: LocalValues, stack: Stack) => any,\n filter?: boolean,\n isEffect?: boolean,\n) => compute({fn, safe: true, filter, priority: isEffect && EFFECT})\n\n/**\n * `read(ref, true, true)`: **reg.stack** with **sampler** batch\n *\n * `read(ref, true, false)`: **reg.stack** without batch\n *\n * `read(ref, false, true)`: **reg.a** with **sampler** batch\n *\n * `read(ref, false, false)`: **reg.a** without batch\n *\n */\nexport const read = (\n store: StateRef,\n toStack?: boolean,\n samplerPriority?: boolean,\n) =>\n mov({\n store,\n to: toStack ? STACK : REG_A,\n priority: samplerPriority && SAMPLER,\n batch: true,\n })\n\nexport const userFnCall = (\n fn: (data: any, scope: {[key: string]: any}, stack: Stack) => any = callStack,\n isFilter?: boolean,\n) => compute({fn, pure: true, filter: isFilter})\n\nexport const step = {mov, compute, filter, run}\n","import type {StateRef, StateRefOp} from './index.h'\nimport {nextStepID} from './id'\nimport {add} from './collection'\n\nexport const createStateRef = (current?: any): StateRef => ({\n id: nextStepID(),\n current,\n initial: current,\n})\nexport const readRef = ({current}: StateRef | {current: any}) => current\n\nexport const addRefOp = (ref: StateRef, op: StateRefOp) => {\n if (!ref.before) ref.before = []\n add(ref.before!, op as any)\n}\n","import {Node, NodeUnit} from './index.h'\nimport {getGraph, getOwners, getLinks} from './getter'\nimport {is} from './is'\nimport {includes, removeItem} from './collection'\nimport {CROSSLINK} from './tag'\n\nconst removeFromNode = (currentNode: Node, targetNode: Node) => {\n removeItem(currentNode.next, targetNode)\n removeItem(getOwners(currentNode), targetNode)\n removeItem(getLinks(currentNode), targetNode)\n}\n/** These nodes should be cleared but dissalow clearing of any links */\nconst nonPassableNodes = [\n 'on',\n 'reset',\n 'sample',\n 'split',\n 'merge',\n 'guard',\n 'forward',\n]\nconst clearNodeNormalized = (\n targetNode: Node,\n deep: boolean,\n isDomainUnit: boolean,\n regionNode: Node | null,\n extractOnly: boolean,\n) => {\n targetNode.next.length = 0\n targetNode.seq.length = 0\n //@ts-expect-error\n targetNode.scope = null\n let currentNode\n let list = getLinks(targetNode)\n const isRegionNode = targetNode.meta.isRegion\n const nextRegionNode = isRegionNode ? targetNode : regionNode\n if (list.length > 0) {\n const targetIsOp = includes(nonPassableNodes, targetNode.meta.op)\n const canGoDeep = !isRegionNode && !extractOnly\n const domainSampleEdgeCase = canGoDeep && isDomainUnit && !targetIsOp\n while ((currentNode = list.pop())) {\n const isTrigger = includes(currentNode.next, targetNode)\n removeFromNode(currentNode, targetNode)\n if (isRegionNode) {\n clearNodeNormalized(currentNode, false, false, targetNode, true)\n }\n if (!isTrigger) {\n currentNode.family.triggers -= 1\n }\n if (\n deep ||\n domainSampleEdgeCase ||\n (canGoDeep && currentNode.family.type === CROSSLINK && !targetIsOp) ||\n (extractOnly &&\n includes(nonPassableNodes, currentNode.meta.op) &&\n ((isTrigger && currentNode.next.length === 0) ||\n (!isTrigger && currentNode.family.triggers <= 0)))\n ) {\n clearNodeNormalized(\n currentNode,\n deep,\n isDomainUnit && currentNode.meta.op !== 'on',\n nextRegionNode,\n extractOnly,\n )\n }\n }\n }\n list = getOwners(targetNode)\n while ((currentNode = list.pop())) {\n removeFromNode(currentNode, targetNode)\n if (isDomainUnit && currentNode.family.type === CROSSLINK) {\n clearNodeNormalized(\n currentNode,\n deep,\n currentNode.meta.op !== 'on',\n nextRegionNode,\n extractOnly,\n )\n }\n }\n}\nconst clearMap = (map: Map<any, any> | Set<any>) => map.clear()\nexport const clearNode = (\n graphite: NodeUnit,\n {\n deep,\n }: {\n deep?: boolean\n } = {},\n) => {\n let isDomainUnit = false\n //@ts-expect-error\n if (graphite.ownerSet) graphite.ownerSet.delete(graphite)\n if (is.domain(graphite)) {\n isDomainUnit = true\n const history = graphite.history\n clearMap(history.events)\n clearMap(history.effects)\n clearMap(history.stores)\n clearMap(history.domains)\n }\n clearNodeNormalized(getGraph(graphite), !!deep, isDomainUnit, null, false)\n}\n","import {processArgsToConfig} from './config'\nimport {createNode} from './createNode'\nimport type {Subscription, NodeUnit, Cmd} from './index.h'\nimport {createSubscription} from './subscription'\nimport {assertNodeSet, assertTarget} from './is'\nimport {deprecate} from './throw'\nimport {generateErrorTitle} from './naming'\n\nexport const createLinkNode = (\n parent: NodeUnit | NodeUnit[],\n child: NodeUnit | NodeUnit[],\n node?: Array<Cmd | false | void | null>,\n op?: string,\n scopeFn?: Function,\n) =>\n createNode({\n node,\n parent,\n child,\n scope: {fn: scopeFn},\n meta: {op},\n family: {owners: [parent, child], links: child},\n regional: true,\n })\nexport const forward = (opts: {\n from: NodeUnit | NodeUnit[]\n to: NodeUnit | NodeUnit[]\n meta?: Record<string, any>\n}): Subscription => {\n const METHOD = 'forward'\n const [{from, to}, config] = processArgsToConfig(opts, true)\n const errorTitle = generateErrorTitle(METHOD, config)\n deprecate(false, METHOD, 'sample', errorTitle)\n assertNodeSet(from, errorTitle, '\"from\"')\n assertNodeSet(to, errorTitle, '\"to\"')\n assertTarget(errorTitle, to, 'to')\n return createSubscription(\n createNode({\n parent: from,\n child: to,\n meta: {op: METHOD, config},\n family: {},\n regional: true,\n }),\n )\n}\n","import {run} from './step'\nimport {callStack} from './caller'\nimport {createNode} from './createNode'\nimport {Subscription, NodeUnit} from './index.h'\nimport {createSubscription} from './subscription'\nimport {assert} from './throw'\nimport {isFunction} from './is'\n\nexport const watchUnit = (\n unit: NodeUnit,\n handler: (payload: any) => any,\n): Subscription => {\n assert(isFunction(handler), '.watch argument should be a function')\n return createSubscription(\n createNode({\n scope: {fn: handler},\n node: [run({fn: callStack})],\n parent: unit,\n meta: {op: 'watch'},\n family: {owners: unit},\n regional: true,\n }),\n )\n}\n"],"names":["forIn","obj","cb","key","forEach","list","fn","assert","condition","message","errorTitle","Error","withRegion","unit","node","getGraph","meta","is","isRegion","regionStack","id","parent","value","template","readTemplate","sidRoot","reportDeclaration","getParent","createNode","from","source","to","target","child","scope","family","familyRaw","type","regional","sources","arrifyNodes","links","owners","seq","item","add","result","nextNodeID","next","triggers","length","link","getOwners","owner","getLinks","own","getValue","launch","payload","upsert","pageForLaunch","currentPage","stackForLaunch","forkPageForLaunch","forkPage","params","defer","page","stack","getForkPage","Array","isArray","i","pushFirstHeapItem","isRoot","lastStartedState","isWatch","isPure","stop","skip","reg","kernelLoop","deleteMin","idx","hasPageReg","hasScopeReg","local","fail","stepn","step","order","priority","barrierID","fullID","barriers","has","pushHeap","delete","data","store","pageForRef","getPageForRef","initRefInScope","softRead","undefined","readRef","getPageRef","current","op","pure","computationResult","safe","tryRun","filter","inspector","finalValue","nextNode","needFxCounter","fxCount","storeChange","warnSerialize","warnSerializeNode","additionalLinks","unitObjectName","objOrArr","method","name","comma","getCompositeName","fullName","toString","setStoreName","rawName","shortName","Object","assign","createName","path","composite","concat","generateErrorTitle","metadata","named","loc","file","line","column","processArgsToConfig","args","singleArgument","rawConfig","assertObject","or","childConfig","and","unwrappedNestedValue","isObject","nested","addUnsubscribe","callback","subscription","unsubscribe","applyTemplate","handlers","createEvent","nameOrConfig","maybeConfig","config","flattenConfig","event","getMeta","oldPage","setCurrentPage","create","callCreate","finalEvent","graphite","initUnit","actualOp","watch","watchUnit","map","deriveEvent","MAP","userFnCall","callStack","filterMap","calc","isVoid","prepend","targetable","contramapped","createLinkNode","applyParentHook","domain","hooks","setMeta","on","methodName","nodeSet","assertNodeSet","isFunction","deprecate","trigger","off","updateStore","callARegStack","createStore","defaultState","props","plainState","createStateRef","traceError","captureStackTrace","storeTrace","updates","derived","plainStateId","explicitSkipVoid","voidValueAllowed","skipVoid","stateRef","getState","reachedPage","targetRef","setState","state","reset","units","triggerUnitId","oldLink","find","e","onTrigger","clearNode","outerConfig","mapConfig","lastResult","storeState","parentStateVoid","innerStore","linkNode","addRefOp","getStoreState","noInit","eventOrFn","updateFilter","defaultConfig","upd","_","b","read","a","isVoidUpdate","printErrorWithStack","requireExplicitSkipVoidMessage","callStackAReg","mov","serializeMeta","ignored","sid","isVoidDefaultState","console","error","reinit","combine","handler","stores","maybeExtConfig","isExtendedConfig","extConfig","rawHandler","structStoreShape","shapeReady","noArraySpread","slice","storeCombination","createDefer","req","Promise","rs","rj","catch","createEffect","instance","kind","use","runner","getCurrent","anyway","finally","done","status","doneData","failData","compositeName","scope_","scopeHandler","unitMap","get","sidMap","runnerFn","onResolve","onSettled","onReject","ok","runFn","then","fx","fxID","nextEffectID","savedFork","setForkPage","inFlight","serialize","x","pending","amount","effect","attach","injected","mapParams","attached","runnerSteps","runnerFnStep","sourceData","isEffectHandler","computedParams","splice","parentDomain","createApi","setters","createDomain","history","Event","Effect","Store","Domain","factory","tag","lowerCaseTag","toLowerCase","onCreateUnit","Set","ownerSet","hook","fromObservable","observable","observableItem","observableSymbol","subscribe","disposer","createSubscription","complete","validateSampleConfig","atLeastOneFieldExists","sampleConfigFields","field","fieldErrorMessage","sample","clock","batch","greedy","createSampling","guard","merge","restore","split","METHOD","targets","match","configForm","cases","matchIsUnit","matchIsFunction","matchIsShape","assertTarget","__","values","caseNames","keys","splitterSeq","compute","scopeTargets","String","launchCase","includes","lastValues","needBarrier","storeOrFn","updater","storeRef","caseName","splitterNode","allSettled","start","ctx","reject","parentFork","defers","launchUnits","launchParams","traverseStores","root","needSidlessStores","visit","normalizeValues","assertEach","mapOrRecordValues","Map","hasSidDoubles","set","fork","domainOrConfig","optionalConfig","forkInFlightCounter","resolve","storeStack","storeNode","isNotCombineNode","sidIdMap","sidSerializeSettings","ignore","write","warnSerializeTraces","resultScope","cloneOf","idMap","createScope","fromSerialize","hydrate","valuesSidList","getOwnPropertyNames","storesRefIdMap","storeNodes","storeValues","traverseTarget","needToAssign","serializer","scopeBind","targetForkPage","restoreLastForkPage","lastForkPage","final","failed","err","size","ignoredStores","serializeSettings","noopSerializer","onlyChanges","createWatch","run","unshift","unsubs","scopeLinks","u","prepareSeq","watchOp","push","indexOf","Symbol","graph","val","removeItem","pos","subject","suggestion","idCount","nextUnitID","nextStepID","reporter","setGraphInspector","readSidRoot","withFactory","ownerUnit","_link","flat","assertNodeSetItem","valueName","reason","targetField","cmd","nextBarrierID","isEffect","toStack","samplerPriority","isFilter","initial","ref","before","heap","ret","v","getPriority","r","l","queue","ix","first","last","bucket","t","newForkPage","newPage","isGetState","setInspector","newInspector","noopParser","sourceRef","isKernelCall","refsMap","_sourceRef$meta","isFresh","failReason","part","removeFromNode","currentNode","targetNode","nonPassableNodes","clearNodeNormalized","deep","isDomainUnit","regionNode","extractOnly","isRegionNode","nextRegionNode","targetIsOp","canGoDeep","domainSampleEdgeCase","pop","isTrigger","clearMap","clear","events","effects","domains","scopeFn","forward","opts","hookType","isDomain","unitId","getType","observer","nativeTemplate","mapped","caller","reader","needSpread","clone","stateNew","rawShape","storeStateRef","rawShapeReader","softReader","c","childRef","defaultShape","computedValue","sidechain","targetMayBeStore","filterRequired","isUpward","sourceIsClock","filterType","clockState","filterNodes","filterRef","hasFilter","isFilterStore","syncSourceState","readAndFilter","jointNodeSeq","hasSource","isSourceStore","jointNode","src","joint","isCombine"],"mappings":"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"}