{"version":3,"file":"effector-solid.mjs","sources":["effector-solid/../effector/config.ts","effector-solid/../effector/is.ts","effector-solid/../effector/throw.ts","effector-solid/lib/base.ts","effector-solid/lib/gate.ts","effector-solid/lib/get-scope.ts","effector-solid/nossr.ts","effector-solid/../effector/collection.ts","effector-solid/lib/throw.ts","effector-solid/scope.ts"],"sourcesContent":["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","export * as is from './validate'\nimport {forEach} from './collection'\nimport {assert, deprecate} 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","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","import {\n  clearNode,\n  createNode,\n  createWatch,\n  is,\n  Scope,\n  scopeBind,\n  step,\n  Store,\n  Unit,\n} from 'effector'\nimport {throwError} from './throw'\nimport {Accessor, batch, createMemo, createSignal, onCleanup} from 'solid-js'\n\nconst stateReader = <T>(store: Store<T>, scope?: Scope) =>\n  scope ? scope.getState(store) : store.getState()\nconst basicUpdateFilter = <T>(upd: T, oldValue: T) => upd !== oldValue\n\nexport function useUnitBase<Shape extends {[key: any]: Unit<any>}>(\n  shape: Shape | {'@@unitShape': () => Shape},\n  scope?: Scope,\n) {\n  const isShape = !is.unit(shape) && typeof shape === 'object'\n  let normShape: {[key: string]: Unit<any>} = {}\n  if (shape && '@@unitShape' in shape) {\n    if (typeof shape['@@unitShape'] === 'function') {\n      normShape = shape['@@unitShape']()\n    } else {\n      throwError('expect @@unitShape to be a function')\n    }\n  } else if (isShape) {\n    normShape = shape\n  } else {\n    normShape = {unit: shape}\n  }\n  const isList = Array.isArray(normShape)\n  const entries = Object.entries(normShape)\n\n  const initial = isList ? [] : {}\n  const stores = []\n  const storeIdMap = {}\n  const storeSetterMap = {}\n\n  for (const [key, value] of entries) {\n    if (is.store(value)) {\n      const hasStore = Boolean(storeIdMap[value.graphite.id])\n      if (!hasStore) {\n        stores.push(value)\n        storeIdMap[value.graphite.id] = key\n        const [get, set] = createSignal(stateReader(value, scope))\n        initial[key] = get\n        storeSetterMap[key] = set\n      } else {\n        const origKey = storeIdMap[value.graphite.id]\n        initial[key] = initial[origKey]\n        storeSetterMap[key] = initial[origKey]\n      }\n    } else {\n      if (!is.unit(value)) throwError('expected useUnit argument to be a unit')\n      initial[key] = scope ? scopeBind(value, {scope}) : value\n    }\n  }\n\n  const seq = [\n    step.compute({priority: 'effect'}),\n    step.compute({priority: 'sampler', batch: true}),\n    step.run({\n      fn: () => {\n        batch(() => {\n          for (const store of stores) {\n            const key = storeIdMap[store.graphite.id]\n            storeSetterMap[key](() => stateReader(store, scope))\n          }\n        })\n      },\n    }),\n  ]\n\n  if (scope) {\n    const node = createNode({node: seq})\n    const scopeLinks: {[_: string]: Node[]} = (scope as any).additionalLinks\n    const storeLinks = []\n    stores.forEach(store => {\n      const id = store.graphite.id\n      const links = scopeLinks[id] || []\n      scopeLinks[id] = links\n      links.push(node)\n      storeLinks.push(links)\n    })\n    onCleanup(() => {\n      storeLinks.forEach(links => {\n        const idx = links.indexOf(node)\n        if (idx !== -1) links.splice(idx, 1)\n      })\n      clearNode(node)\n    })\n  } else {\n    const node = createNode({\n      node: seq,\n      parent: stores,\n      family: {owners: stores},\n    })\n    onCleanup(() => {\n      clearNode(node)\n    })\n  }\n\n  return isShape ? initial : initial.unit\n}\n\nexport function useStoreMapBase<State, Result, Keys extends ReadonlyArray<any>>(\n  [configOrStore, separateFn]: [\n    configOrStore:\n      | {\n          store: Store<State>\n          keys: Keys\n          fn(state: State, keys: Keys): Result\n          updateFilter?: (update: Result, current: Result) => boolean\n        }\n      | Store<State>,\n    separateFn?: (state: State, keys: Keys) => Result,\n  ],\n  scope?: Scope,\n): Accessor<Result> {\n  let fn: (state: State, keys: Keys) => Result\n  let updateFilter: (update: Result, current: Result) => boolean =\n    basicUpdateFilter\n  let store: Store<State>\n  let keys: Keys\n  if (separateFn) {\n    fn = separateFn\n    store = configOrStore as Store<State>\n    keys = [] as unknown as Keys\n  } else {\n    fn = (configOrStore as any).fn\n    store = (configOrStore as any).store\n    keys = (configOrStore as any).keys\n    updateFilter = (configOrStore as any).updateFilter || basicUpdateFilter\n  }\n  if (!is.store(store)) throwError('useStoreMap expects a store')\n  if (!Array.isArray(keys)) throwError('useStoreMap expects an array as keys')\n  if (typeof fn !== 'function') throwError('useStoreMap expects a function')\n  const [result, setResult] = createSignal<{\n    fn: (state: State, keys: Keys) => Result\n    upd: (update: Result, current: Result) => boolean\n    val: Result\n    init: boolean\n    store: Store<State>\n    active: boolean\n  }>({} as any, {equals: false})\n  const refState = result()\n  refState.fn = fn\n  refState.upd = updateFilter\n  refState.init = refState.store === store\n  refState.store = store\n  refState.active = true\n  onCleanup(() => {\n    if (refState) {\n      refState.active = false\n    }\n  })\n  const inc = () => setResult(refState)\n\n  updateRef(stateReader(store, scope), keys, refState)\n  const stop = createWatch({\n    unit: store,\n    fn: val => updateRef(val, keys, refState, inc),\n    scope: scope,\n  })\n\n  onCleanup(stop)\n\n  return createMemo(() => result().val)\n}\n\nfunction updateRef<State, Keys, Result>(\n  sourceValue: State,\n  keys: Keys,\n  refState: {\n    fn: (state: State, keys: Keys) => Result\n    upd: (update: Result, current: Result) => boolean\n    val: Result\n    init: boolean\n    active: boolean\n  },\n  inc?: () => void,\n) {\n  const newValue = refState.fn(sourceValue, keys)\n  if (!refState.init) {\n    refState.val = newValue\n    refState.init = true\n  } else {\n    if (\n      newValue !== undefined &&\n      basicUpdateFilter(newValue, refState.val) &&\n      refState.upd(newValue, refState.val)\n    ) {\n      refState.val = newValue\n      inc && refState.active && inc()\n    }\n  }\n}\n","import {Gate} from '../index.h'\nimport {createEvent, createStore, Domain, launch, Scope} from 'effector'\nimport {onCleanup, onMount, createEffect, createMemo, Accessor} from 'solid-js'\nimport {flattenConfig, processArgsToConfig} from '../../effector/config'\nimport {isObject} from '../../effector/is'\nimport {useUnit} from \"../scope\";\nimport {useUnitBase} from \"./base\";\n\nfunction useGate<Props>(\n  GateComponent: Gate<Props>,\n  props: Props = {} as any,\n) {\n  onMount(() => {\n    GateComponent.open(props)\n\n    onCleanup(() => GateComponent.close(props))\n  })\n\n  createEffect(() => {\n    // read every getter in props to subscribe\n    for (const _ of Object.values(props)) {\n    }\n    GateComponent.set(props)\n  })\n}\n\nexport function useGateBase<Props>(\n  GateComponent: Gate<Props>,\n  props: Props = {} as any,\n  scope?: Scope,\n) {\n  const events = useUnitBase([\n    GateComponent.open,\n    GateComponent.close,\n    GateComponent.set,\n  ], scope)\n\n  const ForkedGate = createMemo(() => {\n    const [open, close, set] = events\n\n    return {\n      open,\n      close,\n      set,\n    } as Gate<Props>\n  })\n\n  createEffect(() => useGate(ForkedGate(), props))\n}\n\nexport function createGateImplementation<State>({\n  domain,\n  defaultState,\n  hook: useGateHook,\n  mainConfig,\n  maybeConfig,\n}: {\n  domain?: Domain\n  defaultState: State | {}\n  hook: typeof useGate\n  mainConfig?: Record<string, any>\n  maybeConfig?: Record<string, any> & {sid?: string}\n}): Gate<State> {\n  const config = flattenConfig({\n    or: maybeConfig,\n    and: mainConfig,\n  }) as {sid: string | undefined; name: string | undefined}\n  const name = config.name || 'gate'\n\n  const fullName = `${domain ? `${domain.compositeName.fullName}/` : ''}${name}`\n  const set = createEvent<State>({\n    name: `${fullName}.set`,\n    sid: config.sid ? `${config.sid}|set` : undefined,\n  })\n  const open = createEvent<State>({\n    name: `${fullName}.open`,\n    sid: config.sid ? `${config.sid}|open` : undefined,\n  })\n  const close = createEvent<State>({\n    name: `${fullName}.close`,\n    sid: config.sid ? `${config.sid}|close` : undefined,\n  })\n  const status = createStore(Boolean(false), {\n    name: `${fullName}.status`,\n    serialize: 'ignore',\n    // doesn't need to have sid, because it is internal store, should not be serialized\n  })\n    .on(open, () => Boolean(true))\n    .on(close, () => Boolean(false))\n  const state = createStore(defaultState as State, {\n    name: `${fullName}.state`,\n    sid: config.sid,\n  })\n    .on(set, (_, state) =>\n      Object.create(\n        Object.getPrototypeOf(state),\n        Object.getOwnPropertyDescriptors(state),\n      ),\n    )\n    .reset(close)\n  if (domain) {\n    const {hooks} = domain as any\n    launch({\n      target: [\n        hooks.store,\n        hooks.store,\n        hooks.event,\n        hooks.event,\n        hooks.event,\n      ] as any,\n      params: [status, state, open, close, set],\n    })\n  }\n  function GateComponent(props: State) {\n    useGateHook(GateComponent as any, props)\n    return null\n  }\n  GateComponent.open = open\n  GateComponent.close = close\n  GateComponent.status = status\n  GateComponent.state = state\n  GateComponent.set = set\n  GateComponent.displayName = `Gate:${fullName}`\n\n  return GateComponent\n}\n\nexport function isPluginConfig(config: Record<string, any> | string) {\n  return isObject(config) && 'sid' in config\n}\n\nexport function isGateConfig(config: Record<string, any> | string) {\n  return (\n    isObject(config) &&\n    ('domain' in config || 'defaultState' in config || 'name' in config)\n  )\n}\n\nexport function isStructuredConfig(args: unknown) {\n  return isObject(args) && (args.and || args.or)\n}\n\nexport function createGate<Props>(...args: unknown[]): Gate<Props> {\n  const universalConfig =\n    args && isStructuredConfig(args[0]) ? args : [{and: args}]\n  const [[nameOrConfig, defaultStateOrConfig], metadata] =\n    processArgsToConfig(universalConfig)\n\n  let domain\n  let defaultState: Props = {} as any\n  let mainConfig = {}\n  let maybeConfig = metadata\n\n  if (typeof nameOrConfig === 'string') {\n    mainConfig = {name: nameOrConfig}\n    if (isPluginConfig(defaultStateOrConfig)) {\n      // maybeConfig = defaultStateOrConfig\n    } else {\n      defaultState = defaultStateOrConfig || {}\n    }\n  } else if (isGateConfig(nameOrConfig)) {\n    mainConfig = nameOrConfig\n    defaultState = nameOrConfig.defaultState || {}\n    domain = nameOrConfig.domain\n  }\n\n  return createGateImplementation({\n    hook: useGate,\n    domain,\n    defaultState,\n    mainConfig,\n    maybeConfig,\n  })\n}\n","import {createContext, useContext} from 'solid-js'\nimport {Scope} from 'effector'\n\nimport {throwError} from './throw'\n\nexport const ScopeContext = createContext<Scope | null>(null)\n\nexport function getScope(forceScope?: boolean) {\n  const scope = useContext(ScopeContext)\n  if (forceScope && !scope)\n    throwError('No scope found, consider adding <Provider> to app root')\n\n  return scope as Scope\n}\n","import {Accessor} from 'solid-js'\nimport {Store} from 'effector'\n\nimport {useStoreMapBase, useUnitBase} from './lib/base'\nimport {getScope} from './lib/get-scope'\nimport { Gate } from './index.h'\nimport {useGateBase} from \"./lib/gate\";\n\nexport function useStoreMap<State, Result, Keys extends ReadonlyArray<any>>(\n  configOrStore:\n    | {\n        store: Store<State>\n        keys: Keys\n        fn(state: State, keys: Keys): Result\n        updateFilter?: (update: Result, current: Result) => boolean\n        forceScope?: boolean\n      }\n    | Store<State>,\n  separateFn?: (state: State, keys: Keys) => Result,\n): Accessor<Result> {\n  return useStoreMapBase(\n    [configOrStore, separateFn],\n    getScope(configOrStore?.forceScope),\n  )\n}\nexport function useUnit(shape, opts?: {forceScope?: boolean}) {\n  const scope = getScope(opts?.forceScope)\n  return useUnitBase(shape, scope)\n}\n\nexport function useGate<Props>(\n  GateComponent: Gate<Props>,\n  props: Props = {} as any,\n  opts?: {forceScope?: boolean},\n) {\n  return useGateBase(GateComponent, props, getScope(opts?.forceScope))\n}","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 const throwError = (message: string) => {\n  throw Error(message)\n}\n","import {Accessor, createEffect, createMemo} from 'solid-js'\nimport {Domain} from 'effector'\n\nimport type {Gate} from './index.h'\n\nimport {useGate as commonUseGate, createGateImplementation, useGateBase} from './lib/gate'\nimport {useStoreMapBase, useUnitBase} from './lib/base'\nimport {getScope, ScopeContext} from './lib/get-scope'\n\nexport const {Provider} = ScopeContext\n\nexport function createGate<Props>(\n  config: {\n    domain?: Domain\n    defaultState?: Props\n    name?: string\n  } = {},\n) {\n  return createGateImplementation({\n    domain: config.domain,\n    name: config.name,\n    defaultState: 'defaultState' in config ? config.defaultState : {},\n    hook: useGate,\n  })\n}\n\nexport function useGate<Props>(\n  GateComponent: Gate<Props>,\n  props: Props = {} as any,\n) {\n  return useGateBase(GateComponent, props, getScope(true))\n}\nexport function useUnit(shape) {\n  const scope = getScope(true)\n  return useUnitBase(shape, scope)\n}\n/** useStoreMap wrapper for scopes */\nexport function useStoreMap(configOrStore: any, separateFn: any) {\n  const scope = getScope(true)\n  if (separateFn) return useStoreMapBase([configOrStore, separateFn], scope)\n  return useStoreMapBase(\n    [\n      {\n        store: configOrStore.store,\n        keys: configOrStore.keys,\n        fn: configOrStore.fn,\n        updateFilter: configOrStore.updateFilter,\n      },\n    ],\n    scope,\n  )\n}\n"],"names":["processArgsToConfig","args","singleArgument","rawConfig","value","condition","Error","assert","isObject","isFunction","metadata","or","childConfig","and","unwrappedNestedValue","nested","useUnitBase","shape","scope","isShape","is","unit","normShape","throwError","isList","Array","isArray","entries","Object","initial","stores","storeIdMap","storeSetterMap","key","store","Boolean","graphite","id","origKey","push","get","set","createSignal","stateReader","scopeBind","seq","step","compute","priority","batch","run","fn","node","createNode","scopeLinks","additionalLinks","storeLinks","forEach","links","onCleanup","idx","indexOf","splice","clearNode","parent","family","owners","updateRef","sourceValue","keys","refState","inc","newValue","init","undefined","basicUpdateFilter","val","upd","active","useGate","GateComponent","props","onMount","open","close","createEffect","_","values","createGate","universalConfig","isStructuredConfig","nameOrConfig","defaultStateOrConfig","domain","defaultState","mainConfig","maybeConfig","config","name","isGateConfig","hook","useGateHook","flattenConfig","fullName","compositeName","createEvent","sid","status","createStore","serialize","on","state","create","getPrototypeOf","getOwnPropertyDescriptors","reset","hooks","launch","target","event","params","displayName","createGateImplementation","getScope","forceScope","useContext","ScopeContext","useStoreMap","configOrStore","separateFn","updateFilter","result","setResult","equals","stop","createWatch","createMemo","useStoreMapBase","useUnit","opts","events","ForkedGate","useGateBase","part","obj","field","isVoid","forIn","message","getState","oldValue","createContext","Provider"],"mappings":"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"}