Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

effector

Package Overview
Dependencies
Maintainers
1
Versions
278
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

effector - npm Package Compare versions

Comparing version
0.7.3
to
0.7.4
+4
-2
es/domain.js
import { from } from 'most';
import { async as subject } from 'most-subject';
import { PING, PONG } from './config';
import { port } from './port';
import { safeDispatch } from './port';
import { EventConstructor } from './event';

@@ -74,3 +74,5 @@ import { EffectConstructor } from './effect';

port(events$) {
port(dispatch, state$, events$);
return events$.observe(data => {
safeDispatch(data, dispatch);
});
},

@@ -77,0 +79,0 @@

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/domain.js"],"names":["from","async","subject","PING","PONG","port","EventConstructor","EffectConstructor","createDomain","store","domainName","redux","config","dispatch","type","payload","addPlainHandler","name","fn","plain","set","state$","map","getState","multicast","DomainConstructor","Map","rootDomain","reduxStore","data","register","pong","undefined","oldPlain","key","val","entries","has","observe","state","next","domain","events","events$","console","warn","effect","join","event","typeConstant","action$","result"],"mappings":"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","file":"domain.js","sourcesContent":["//@flow\n\nimport {type Stream, from} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Domain, Effect, Event, Store} from './index.h'\nimport type {Tag} from './id'\n\nimport {PING, PONG, type Config} from './config'\n\nimport {port} from './port'\nimport {EventConstructor} from './event'\nimport {EffectConstructor} from './effect'\n\nexport function createDomain<State>(\n store: Store<State>,\n domainName: string = ''\n): Domain<State> {\n const redux: any = store\n const config: Config = redux.dispatch({\n type: PING,\n }).payload\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n const state$: Stream<State> = from(redux)\n .map(() => store.getState())\n .multicast()\n return DomainConstructor(\n domainName,\n redux.dispatch,\n store.getState,\n state$,\n new Map,\n addPlainHandler,\n )\n}\n\nexport function rootDomain<State>(\n domainName: string = ''\n): Domain<State> {\n\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n let redux: any\n let reduxStore: Store<State>\n const config: Config = {\n plain: new Map()\n }\n function dispatch<T>(data: T): T {\n return redux.dispatch(data)\n }\n function getState(): State {\n return reduxStore.getState()\n }\n\n const state$: Subject<State> = subject()\n function register(store: Store<State>) {\n redux = reduxStore = store\n const pong = redux.dispatch({\n type: PING,\n payload: undefined,\n })\n if (pong) {\n const payload: any = pong.payload\n const plain: Map<*, *> = payload.plain\n const oldPlain = config.plain\n for (const [key, val] of oldPlain.entries()) {\n if (!plain.has(key)) {\n plain.set(key, val)\n }\n }\n config.plain = plain\n }\n //$off\n from(store)\n .map(() => getState())\n .observe(state => state$.next(state))\n }\n const domain: Domain<State> = DomainConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n new Map,\n addPlainHandler\n )\n domain.register = register\n return domain\n}\n\n\n\nfunction DomainConstructor<State>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>> = new Map,\n addPlainHandler: <T>(name: string, fn: (data: T) => any) => void = () => {}\n): Domain<State> {\n\n return {\n port<R>(events$: Stream<R>) {\n port(dispatch, state$, events$)\n },\n register(store) {\n console.warn(`Not implemented`)\n },\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State> {\n return EffectConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n domain(name: string): Domain<State> {\n return DomainConstructor(\n [domainName, name].join('/'),\n dispatch,\n getState,\n state$,\n events,\n addPlainHandler,\n )\n },\n event<Payload>(\n name: string\n ): Event<Payload, State> {\n return EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State> {\n const action$: Subject<Payload> = subject()\n addPlainHandler(name, data => {\n action$.next(data)\n })\n const result = EventConstructor(\n '',\n dispatch,\n getState,\n state$,\n events,\n name,\n action$\n )\n return result\n },\n }\n}\n\n"]}
{"version":3,"sources":["../src/domain.js"],"names":["from","async","subject","PING","PONG","safeDispatch","EventConstructor","EffectConstructor","createDomain","store","domainName","redux","config","dispatch","type","payload","addPlainHandler","name","fn","plain","set","state$","map","getState","multicast","DomainConstructor","Map","rootDomain","reduxStore","data","register","pong","undefined","oldPlain","key","val","entries","has","observe","state","next","domain","events","port","events$","console","warn","effect","join","event","typeConstant","action$","result"],"mappings":"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","file":"domain.js","sourcesContent":["//@flow\n\nimport {type Stream, from} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Domain, Effect, Event, Store} from './index.h'\nimport type {Tag} from './id'\n\nimport {PING, PONG, type Config} from './config'\n\nimport {safeDispatch} from './port'\nimport {EventConstructor} from './event'\nimport {EffectConstructor} from './effect'\n\nexport function createDomain<State>(\n store: Store<State>,\n domainName: string = ''\n): Domain<State> {\n const redux: any = store\n const config: Config = redux.dispatch({\n type: PING,\n }).payload\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n const state$: Stream<State> = from(redux)\n .map(() => store.getState())\n .multicast()\n return DomainConstructor(\n domainName,\n redux.dispatch,\n store.getState,\n state$,\n new Map,\n addPlainHandler,\n )\n}\n\nexport function rootDomain<State>(\n domainName: string = ''\n): Domain<State> {\n\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n let redux: any\n let reduxStore: Store<State>\n const config: Config = {\n plain: new Map()\n }\n function dispatch<T>(data: T): T {\n return redux.dispatch(data)\n }\n function getState(): State {\n return reduxStore.getState()\n }\n\n const state$: Subject<State> = subject()\n function register(store: Store<State>) {\n redux = reduxStore = store\n const pong = redux.dispatch({\n type: PING,\n payload: undefined,\n })\n if (pong) {\n const payload: any = pong.payload\n const plain: Map<*, *> = payload.plain\n const oldPlain = config.plain\n for (const [key, val] of oldPlain.entries()) {\n if (!plain.has(key)) {\n plain.set(key, val)\n }\n }\n config.plain = plain\n }\n //$off\n from(store)\n .map(() => getState())\n .observe(state => state$.next(state))\n }\n const domain: Domain<State> = DomainConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n new Map,\n addPlainHandler\n )\n domain.register = register\n return domain\n}\n\n\n\nfunction DomainConstructor<State>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>> = new Map,\n addPlainHandler: <T>(name: string, fn: (data: T) => any) => void = () => {}\n): Domain<State> {\n\n return {\n port<R>(events$: Stream<R>): Promise<void> {\n return events$.observe(data => { safeDispatch(data, dispatch) })\n },\n register(store) {\n console.warn(`Not implemented`)\n },\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State> {\n return EffectConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n domain(name: string): Domain<State> {\n return DomainConstructor(\n [domainName, name].join('/'),\n dispatch,\n getState,\n state$,\n events,\n addPlainHandler,\n )\n },\n event<Payload>(\n name: string\n ): Event<Payload, State> {\n return EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State> {\n const action$: Subject<Payload> = subject()\n addPlainHandler(name, data => {\n action$.next(data)\n })\n const result = EventConstructor(\n '',\n dispatch,\n getState,\n state$,\n events,\n name,\n action$\n )\n return result\n },\n }\n}\n\n"]}

@@ -119,3 +119,5 @@ import { async as subject } from 'most-subject';

effect.watch = watch;
effect.epic = port(dispatch, state$, action$);
effect.epic = port(dispatch, state$, action$); // effect.port = function port<R>(events$: Stream<R>) {
// return events$.observe(data => safeDispatch(data, dispatch))
// }

@@ -122,0 +124,0 @@ effect.subscribe = subscriber => action$.subscribe(subscriber);

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/effect.js"],"names":["async","subject","nextPayloadID","nextEventID","toTag","counter","EventConstructor","safeDispatch","port","basicCommon","observable","EffectConstructor","domainName","dispatch","getState","state$","events","name","action$","handlers","Set","eventID","nextSeq","getType","add","payload","state","next","using","never","use","thunk","create","type","meta","index","seq","effect","params","run","then","result","data","done","resolve","error","fail","reject","runner","dispatchHook","canDispatch","dispatcher","handler","val","doneP","Promise","rs","failP","toSend","raw","send","promise","race","join","watch","fn","epic","subscribe","subscriber","props","console","warn"],"mappings":"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","file":"effect.js","sourcesContent":["//@flow\n\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Effect, Event, RawAction} from './index.h'\nimport {nextPayloadID, nextEventID, toTag, counter, type Tag} from './id'\n\nimport {EventConstructor} from './event'\nimport {safeDispatch, port} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EffectConstructor<State, Params, Done, Fail>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Params> = subject()\n): Effect<Params, Done, Fail, State> {\n const handlers = new Set\n\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n let using: (params: Params) => Promise<Done> = never\n function use(thunk: (params: Params) => Promise<Done>) {\n using = thunk\n }\n const create = (payload: Params) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n const effect = (params: Params) => {\n let run = () => {\n run = () => {}\n using(params).then(\n result => {\n const data = {params, result}\n dispatch(done(data))\n resolve(data)\n },\n error => {\n const data = {params, error}\n dispatch(fail(data))\n reject(data)\n },\n )\n }\n const runner = (dispatchHook) => {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(params, getState())\n }\n // action$.next(params)\n run()\n }\n }\n let resolve = (val) => {}\n let reject = (val) => {}\n const doneP: Promise<{params: Params, result: Done}> = new Promise(rs => resolve = rs)\n const failP: Promise<{params: Params, error: Fail}> = new Promise(rs => reject = rs)\n const toSend = Promise.resolve(params)\n const result = create(params)\n let canDispatch = true\n return {\n ...result,\n raw() {\n return result\n },\n send(dispatchHook) {\n runner(dispatchHook)\n return toSend\n },\n done() {\n runner()\n return doneP\n },\n fail() {\n runner()\n return failP\n },\n promise() {\n runner()\n return Promise.race([\n doneP,\n failP.then(data => Promise.reject(data)),\n ])\n }\n }\n }\n const done: Event<{params: Params, result: Done}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'done'].join(' ')\n )\n const fail: Event<{params: Params, error: Fail}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'fail'].join(' ')\n )\n function watch<R>(fn: (params: Params, state: State) => R) {\n handlers.add((params, state) => {\n const result = fn(params, state)\n safeDispatch(result, dispatch)\n })\n }\n\n effect.use = use\n effect.getType = getType\n effect.done = done\n effect.fail = fail\n effect.watch = watch\n effect.epic = port(dispatch, state$, action$)\n effect.subscribe = (subscriber) => action$.subscribe(subscriber)\n observable(effect, action$)\n return effect\n}\n\nfunction never(props: any): Promise<any> {\n console.warn(`\n\n\n Running an effect without implementation\n\n`, props)\n return new Promise(() => {})\n}\n"]}
{"version":3,"sources":["../src/effect.js"],"names":["async","subject","nextPayloadID","nextEventID","toTag","counter","EventConstructor","safeDispatch","port","basicCommon","observable","EffectConstructor","domainName","dispatch","getState","state$","events","name","action$","handlers","Set","eventID","nextSeq","getType","add","payload","state","next","using","never","use","thunk","create","type","meta","index","seq","effect","params","run","then","result","data","done","resolve","error","fail","reject","runner","dispatchHook","canDispatch","dispatcher","handler","val","doneP","Promise","rs","failP","toSend","raw","send","promise","race","join","watch","fn","epic","subscribe","subscriber","props","console","warn"],"mappings":"AAGA,SAAQA,SAASC,OAAjB,QAA6C,cAA7C;AAGA,SAAQC,aAAR,EAAuBC,WAAvB,EAAoCC,KAApC,EAA2CC,OAA3C,QAAmE,MAAnE;AAEA,SAAQC,gBAAR,QAA+B,SAA/B;AACA,SAAQC,YAAR,EAAsBC,IAAtB,QAAiC,QAAjC;AAEA,SAAQC,WAAR,EAAqBC,UAArB,QAAsC,gBAAtC;AAEA,OAAO,SAASC,iBAAT,CACLC,UADK,EAELC,QAFK,EAGLC,QAHK,EAILC,MAJK,EAKLC,MALK,EAMLC,IANK,EAOLC,UAA2BjB,SAPtB,EAQ8B;AACnC,MAAMkB,WAAW,IAAIC,GAAJ,EAAjB;AAEA,MAAM;AAACC,WAAD;AAAUC,WAAV;AAAmBC;AAAnB,MAA8Bd,YAAYG,UAAZ,EAAwBK,IAAxB,CAApC;AAEAE,WAASK,GAAT,CAAa,CAACC,OAAD,EAAUC,KAAV,KAAoBR,QAAQS,IAAR,CAAaF,OAAb,CAAjC,EALmC,CAMnC;;AACA,MAAIG,QAA2CC,KAA/C;;AACA,WAASC,GAAT,CAAaC,KAAb,EAAuD;AACrDH,YAAQG,KAAR;AACD;;AACD,MAAMC,SAAUP,OAAD,KAAsB;AACnCQ,UAAMV,SAD6B;AAEnCE,WAFmC;AAGnCS,UAAM;AACJC,aAAOjC,eADH;AAEJmB,aAFI;AAGJe,WAAKd;AAHD;AAH6B,GAAtB,CAAf;;AASA,MAAMe,SAAUC,MAAD,IAAoB;AACjC,QAAIC,MAAM,MAAM;AACdA,YAAM,MAAM,CAAE,CAAd;;AACAX,YAAMU,MAAN,EAAcE,IAAd,CACEC,UAAU;AACR,YAAMC,OAAO;AAACJ,gBAAD;AAASG;AAAT,SAAb;AACA5B,iBAAS8B,KAAKD,IAAL,CAAT;AACAE,gBAAQF,IAAR;AACD,OALH,EAMEG,SAAS;AACP,YAAMH,OAAO;AAACJ,gBAAD;AAASO;AAAT,SAAb;AACAhC,iBAASiC,KAAKJ,IAAL,CAAT;AACAK,eAAOL,IAAP;AACD,OAVH;AAYD,KAdD;;AAeA,QAAMM,SAAUC,YAAD,IAAkB;AAC/B,UAAIC,WAAJ,EAAiB;AACf,YAAMC,aAAaF,eACfA,YADe,GAEfpC,QAFJ;AAGAqC,sBAAc,KAAd;AACAC,mBAAWV,MAAX;;AACA,aAAK,IAAMW,OAAX,IAAsBjC,QAAtB,EAAgC;AAC9BiC,kBAAQd,MAAR,EAAgBxB,UAAhB;AACD,SARc,CASf;;;AACAyB;AACD;AACF,KAbD;;AAcA,QAAIK,UAAWS,GAAD,IAAS,CAAE,CAAzB;;AACA,QAAIN,SAAUM,GAAD,IAAS,CAAE,CAAxB;;AACA,QAAMC,QAAiD,IAAIC,OAAJ,CAAYC,MAAMZ,UAAUY,EAA5B,CAAvD;AACA,QAAMC,QAAgD,IAAIF,OAAJ,CAAYC,MAAMT,SAASS,EAA3B,CAAtD;AACA,QAAME,SAASH,QAAQX,OAAR,CAAgBN,MAAhB,CAAf;AACA,QAAMG,SAAST,OAAOM,MAAP,CAAf;AACA,QAAIY,cAAc,IAAlB;AACA,6BACKT,MADL;AAEEkB,YAAM;AACJ,eAAOlB,MAAP;AACD,OAJH;;AAKEmB,WAAKX,YAAL,EAAmB;AACjBD,eAAOC,YAAP;AACA,eAAOS,MAAP;AACD,OARH;;AASEf,aAAO;AACLK;AACA,eAAOM,KAAP;AACD,OAZH;;AAaER,aAAO;AACLE;AACA,eAAOS,KAAP;AACD,OAhBH;;AAiBEI,gBAAU;AACRb;AACA,eAAOO,QAAQO,IAAR,CAAa,CAClBR,KADkB,EAElBG,MAAMjB,IAAN,CAAWE,QAAQa,QAAQR,MAAR,CAAeL,IAAf,CAAnB,CAFkB,CAAb,CAAP;AAID;;AAvBH;AAyBD,GA9DD;;AA+DA,MAAMC,OAAqDrC,iBACzDM,UADyD,EAEzDC,QAFyD,EAGzDC,QAHyD,EAIzDC,MAJyD,EAKzDC,MALyD,EAMzD,CAACC,IAAD,EAAO,MAAP,EAAe8C,IAAf,CAAoB,GAApB,CANyD,CAA3D;AAQA,MAAMjB,OAAoDxC,iBACxDM,UADwD,EAExDC,QAFwD,EAGxDC,QAHwD,EAIxDC,MAJwD,EAKxDC,MALwD,EAMxD,CAACC,IAAD,EAAO,MAAP,EAAe8C,IAAf,CAAoB,GAApB,CANwD,CAA1D;;AAQA,WAASC,KAAT,CAAkBC,EAAlB,EAA2D;AACzD9C,aAASK,GAAT,CAAa,CAACc,MAAD,EAASZ,KAAT,KAAmB;AAC9B,UAAMe,SAASwB,GAAG3B,MAAH,EAAWZ,KAAX,CAAf;AACAnB,mBAAakC,MAAb,EAAqB5B,QAArB;AACD,KAHD;AAID;;AAEDwB,SAAOP,GAAP,GAAaA,GAAb;AACAO,SAAOd,OAAP,GAAiBA,OAAjB;AACAc,SAAOM,IAAP,GAAcA,IAAd;AACAN,SAAOS,IAAP,GAAcA,IAAd;AACAT,SAAO2B,KAAP,GAAeA,KAAf;AACA3B,SAAO6B,IAAP,GAAc1D,KAAKK,QAAL,EAAeE,MAAf,EAAuBG,OAAvB,CAAd,CA/GmC,CAgHnC;AACA;AACA;;AACAmB,SAAO8B,SAAP,GAAoBC,UAAD,IAAgBlD,QAAQiD,SAAR,CAAkBC,UAAlB,CAAnC;;AACA1D,aAAW2B,MAAX,EAAmBnB,OAAnB;AACA,SAAOmB,MAAP;AACD;;AAED,SAASR,KAAT,CAAewC,KAAf,EAAyC;AACvCC,UAAQC,IAAR,CAAc;;;;;CAAd,EAKCF,KALD;AAMA,SAAO,IAAId,OAAJ,CAAY,MAAM,CAAE,CAApB,CAAP;AACD","file":"effect.js","sourcesContent":["//@flow\n\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Effect, Event, RawAction} from './index.h'\nimport {nextPayloadID, nextEventID, toTag, counter, type Tag} from './id'\n\nimport {EventConstructor} from './event'\nimport {safeDispatch, port} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EffectConstructor<State, Params, Done, Fail>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Params> = subject()\n): Effect<Params, Done, Fail, State> {\n const handlers = new Set\n\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n let using: (params: Params) => Promise<Done> = never\n function use(thunk: (params: Params) => Promise<Done>) {\n using = thunk\n }\n const create = (payload: Params) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n const effect = (params: Params) => {\n let run = () => {\n run = () => {}\n using(params).then(\n result => {\n const data = {params, result}\n dispatch(done(data))\n resolve(data)\n },\n error => {\n const data = {params, error}\n dispatch(fail(data))\n reject(data)\n },\n )\n }\n const runner = (dispatchHook) => {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(params, getState())\n }\n // action$.next(params)\n run()\n }\n }\n let resolve = (val) => {}\n let reject = (val) => {}\n const doneP: Promise<{params: Params, result: Done}> = new Promise(rs => resolve = rs)\n const failP: Promise<{params: Params, error: Fail}> = new Promise(rs => reject = rs)\n const toSend = Promise.resolve(params)\n const result = create(params)\n let canDispatch = true\n return {\n ...result,\n raw() {\n return result\n },\n send(dispatchHook) {\n runner(dispatchHook)\n return toSend\n },\n done() {\n runner()\n return doneP\n },\n fail() {\n runner()\n return failP\n },\n promise() {\n runner()\n return Promise.race([\n doneP,\n failP.then(data => Promise.reject(data)),\n ])\n }\n }\n }\n const done: Event<{params: Params, result: Done}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'done'].join(' ')\n )\n const fail: Event<{params: Params, error: Fail}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'fail'].join(' ')\n )\n function watch<R>(fn: (params: Params, state: State) => R) {\n handlers.add((params, state) => {\n const result = fn(params, state)\n safeDispatch(result, dispatch)\n })\n }\n\n effect.use = use\n effect.getType = getType\n effect.done = done\n effect.fail = fail\n effect.watch = watch\n effect.epic = port(dispatch, state$, action$)\n // effect.port = function port<R>(events$: Stream<R>) {\n // return events$.observe(data => safeDispatch(data, dispatch))\n // }\n effect.subscribe = (subscriber) => action$.subscribe(subscriber)\n observable(effect, action$)\n return effect\n}\n\nfunction never(props: any): Promise<any> {\n console.warn(`\n\n\n Running an effect without implementation\n\n`, props)\n return new Promise(() => {})\n}\n"]}
// import type {Store} from 'redux'
import { async as subject } from 'most-subject';
import { nextPayloadID } from './id';
import { port } from './port';
import { port, safeDispatch } from './port';
import { basicCommon, observable } from './event-common';

@@ -63,4 +63,7 @@ export function EventConstructor(domainName, dispatch, getState, state$, events, name, action$ = subject()) {

eventInstance.subscribe = subscriber => action$.subscribe(subscriber);
eventInstance.subscribe = subscriber => action$.subscribe(subscriber); // eventInstance.port = function port<R>(events$: Stream<R>) {
// return events$.observe(data => safeDispatch(data, dispatch))
// }
observable(eventInstance, action$);

@@ -67,0 +70,0 @@ events.set(getType(), eventInstance);

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/event.js"],"names":["async","subject","nextPayloadID","port","basicCommon","observable","EventConstructor","domainName","dispatch","getState","state$","events","name","action$","eventID","nextSeq","getType","handlers","Set","watch","fn","add","payload","state","next","create","type","meta","index","seq","eventInstance","toSend","Promise","resolve","result","canDispatch","raw","send","dispatchHook","dispatcher","handler","toString","epic","subscribe","subscriber","set"],"mappings":"AAEA;AAEA,SAAQA,SAASC,OAAjB,QAA6C,cAA7C;AAIA,SAAQC,aAAR,QAAsC,MAAtC;AAEA,SAAQC,IAAR,QAAmB,QAAnB;AAEA,SAAQC,WAAR,EAAqBC,UAArB,QAAsC,gBAAtC;AAEA,OAAO,SAASC,gBAAT,CACLC,UADK,EAELC,QAFK,EAGLC,QAHK,EAILC,MAJK,EAKLC,MALK,EAMLC,IANK,EAOLC,UAA4BZ,SAPvB,EAQkB;AACvB,MAAM;AAACa,WAAD;AAAUC,WAAV;AAAmBC;AAAnB,MAA8BZ,YAAYG,UAAZ,EAAwBK,IAAxB,CAApC;AACA,MAAMK,WAAW,IAAIC,GAAJ,EAAjB;;AACA,WAASC,KAAT,CACEC,EADF,EAEE;AACAH,aAASI,GAAT,CAAaD,EAAb;AACD;;AACDH,WAASI,GAAT,CAAa,CAACC,OAAD,EAAUC,KAAV,KAAoBV,QAAQW,IAAR,CAAaF,OAAb,CAAjC,EARuB,CASvB;;AAEA,MAAMG,SAAUH,OAAD,KAAuB;AACpCI,UAAMV,SAD8B;AAEpCM,WAFoC;AAGpCK,UAAM;AACJC,aAAO1B,eADH;AAEJY,aAFI;AAGJe,WAAKd;AAHD;AAH8B,GAAvB,CAAf;;AASA,WAASe,aAAT,CAAuBR,OAAvB,EAAyC;AACvC,QAAMS,SAASC,QAAQC,OAAR,CAAgBX,OAAhB,CAAf;AACA,QAAMY,SAAST,OAAOH,OAAP,CAAf;AACA,QAAIa,cAAc,IAAlB;AACA,6BACKD,MADL;AAEEE,YAA0B;AACxB,eAAOF,MAAP;AACD,OAJH;;AAKEG,WAAKC,YAAL,EAAmB;AACjB,YAAIH,WAAJ,EAAiB;AACf,cAAMI,aAAaD,eACfA,YADe,GAEf9B,QAFJ;AAGA2B,wBAAc,KAAd;AACAI,qBAAWL,MAAX;;AACA,eAAK,IAAMM,OAAX,IAAsBvB,QAAtB,EAAgC;AAC9BuB,oBAAQlB,OAAR,EAAiBb,UAAjB;AACD,WARc,CASf;;AACD;;AACD,eAAOsB,MAAP;AACD;;AAlBH;AAoBD;;AACDD,gBAAcd,OAAd,GAAwBA,OAAxB,CA7CuB,CA8CvB;;AACAc,gBAAcW,QAAd,GAAyBzB,OAAzB;AACAc,gBAAcX,KAAd,GAAsBA,KAAtB;AACAW,gBAAcY,IAAd,GAAqBvC,KAAKK,QAAL,EAAeE,MAAf,EAAuBG,OAAvB,CAArB;;AACAiB,gBAAca,SAAd,GAA2BC,UAAD,IAAgB/B,QAAQ8B,SAAR,CAAkBC,UAAlB,CAA1C;;AACAvC,aAAWyB,aAAX,EAA0BjB,OAA1B;AACAF,SAAOkC,GAAP,CAAW7B,SAAX,EAAsBc,aAAtB;AACA,SAAOA,aAAP;AACD","file":"event.js","sourcesContent":["//@flow\n\n// import type {Store} from 'redux'\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Event, RawAction} from './index.h'\n\nimport {nextPayloadID, type Tag} from './id'\n\nimport {port} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EventConstructor<State, Payload>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Payload> = subject()\n): Event<Payload, State> {\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n const handlers = new Set\n function watch<R>(\n fn: (params: Payload, state: State) => R\n ) {\n handlers.add(fn)\n }\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n\n const create = (payload: Payload) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n function eventInstance(payload: Payload) {\n const toSend = Promise.resolve(payload)\n const result = create(payload)\n let canDispatch = true\n return {\n ...result,\n raw(): RawAction<Payload> {\n return result\n },\n send(dispatchHook) {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(payload, getState())\n }\n // action$.next(payload)\n }\n return toSend\n },\n }\n }\n eventInstance.getType = getType\n //$off\n eventInstance.toString = getType\n eventInstance.watch = watch\n eventInstance.epic = port(dispatch, state$, action$)\n eventInstance.subscribe = (subscriber) => action$.subscribe(subscriber)\n observable(eventInstance, action$)\n events.set(getType(), eventInstance)\n return eventInstance\n}\n"]}
{"version":3,"sources":["../src/event.js"],"names":["async","subject","nextPayloadID","port","safeDispatch","basicCommon","observable","EventConstructor","domainName","dispatch","getState","state$","events","name","action$","eventID","nextSeq","getType","handlers","Set","watch","fn","add","payload","state","next","create","type","meta","index","seq","eventInstance","toSend","Promise","resolve","result","canDispatch","raw","send","dispatchHook","dispatcher","handler","toString","epic","subscribe","subscriber","set"],"mappings":"AAEA;AAEA,SAAQA,SAASC,OAAjB,QAA6C,cAA7C;AAIA,SAAQC,aAAR,QAAsC,MAAtC;AAEA,SAAQC,IAAR,EAAcC,YAAd,QAAiC,QAAjC;AAEA,SAAQC,WAAR,EAAqBC,UAArB,QAAsC,gBAAtC;AAEA,OAAO,SAASC,gBAAT,CACLC,UADK,EAELC,QAFK,EAGLC,QAHK,EAILC,MAJK,EAKLC,MALK,EAMLC,IANK,EAOLC,UAA4Bb,SAPvB,EAQkB;AACvB,MAAM;AAACc,WAAD;AAAUC,WAAV;AAAmBC;AAAnB,MAA8BZ,YAAYG,UAAZ,EAAwBK,IAAxB,CAApC;AACA,MAAMK,WAAW,IAAIC,GAAJ,EAAjB;;AACA,WAASC,KAAT,CACEC,EADF,EAEE;AACAH,aAASI,GAAT,CAAaD,EAAb;AACD;;AACDH,WAASI,GAAT,CAAa,CAACC,OAAD,EAAUC,KAAV,KAAoBV,QAAQW,IAAR,CAAaF,OAAb,CAAjC,EARuB,CASvB;;AAEA,MAAMG,SAAUH,OAAD,KAAuB;AACpCI,UAAMV,SAD8B;AAEpCM,WAFoC;AAGpCK,UAAM;AACJC,aAAO3B,eADH;AAEJa,aAFI;AAGJe,WAAKd;AAHD;AAH8B,GAAvB,CAAf;;AASA,WAASe,aAAT,CAAuBR,OAAvB,EAAyC;AACvC,QAAMS,SAASC,QAAQC,OAAR,CAAgBX,OAAhB,CAAf;AACA,QAAMY,SAAST,OAAOH,OAAP,CAAf;AACA,QAAIa,cAAc,IAAlB;AACA,6BACKD,MADL;AAEEE,YAA0B;AACxB,eAAOF,MAAP;AACD,OAJH;;AAKEG,WAAKC,YAAL,EAAmB;AACjB,YAAIH,WAAJ,EAAiB;AACf,cAAMI,aAAaD,eACfA,YADe,GAEf9B,QAFJ;AAGA2B,wBAAc,KAAd;AACAI,qBAAWL,MAAX;;AACA,eAAK,IAAMM,OAAX,IAAsBvB,QAAtB,EAAgC;AAC9BuB,oBAAQlB,OAAR,EAAiBb,UAAjB;AACD,WARc,CASf;;AACD;;AACD,eAAOsB,MAAP;AACD;;AAlBH;AAoBD;;AACDD,gBAAcd,OAAd,GAAwBA,OAAxB,CA7CuB,CA8CvB;;AACAc,gBAAcW,QAAd,GAAyBzB,OAAzB;AACAc,gBAAcX,KAAd,GAAsBA,KAAtB;AACAW,gBAAcY,IAAd,GAAqBxC,KAAKM,QAAL,EAAeE,MAAf,EAAuBG,OAAvB,CAArB;;AACAiB,gBAAca,SAAd,GAA2BC,UAAD,IAAgB/B,QAAQ8B,SAAR,CAAkBC,UAAlB,CAA1C,CAlDuB,CAmDvB;AACA;AACA;;;AACAvC,aAAWyB,aAAX,EAA0BjB,OAA1B;AACAF,SAAOkC,GAAP,CAAW7B,SAAX,EAAsBc,aAAtB;AACA,SAAOA,aAAP;AACD","file":"event.js","sourcesContent":["//@flow\n\n// import type {Store} from 'redux'\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Event, RawAction} from './index.h'\n\nimport {nextPayloadID, type Tag} from './id'\n\nimport {port, safeDispatch} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EventConstructor<State, Payload>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Payload> = subject()\n): Event<Payload, State> {\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n const handlers = new Set\n function watch<R>(\n fn: (params: Payload, state: State) => R\n ) {\n handlers.add(fn)\n }\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n\n const create = (payload: Payload) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n function eventInstance(payload: Payload) {\n const toSend = Promise.resolve(payload)\n const result = create(payload)\n let canDispatch = true\n return {\n ...result,\n raw(): RawAction<Payload> {\n return result\n },\n send(dispatchHook) {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(payload, getState())\n }\n // action$.next(payload)\n }\n return toSend\n },\n }\n }\n eventInstance.getType = getType\n //$off\n eventInstance.toString = getType\n eventInstance.watch = watch\n eventInstance.epic = port(dispatch, state$, action$)\n eventInstance.subscribe = (subscriber) => action$.subscribe(subscriber)\n // eventInstance.port = function port<R>(events$: Stream<R>) {\n // return events$.observe(data => safeDispatch(data, dispatch))\n // }\n observable(eventInstance, action$)\n events.set(getType(), eventInstance)\n return eventInstance\n}\n"]}

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.h.js"],"names":["Stream"],"mappings":"AAEA,SAAQA,MAAR,QAAqB,MAArB","file":"index.h.js","sourcesContent":["//@flow\n\nimport {Stream} from 'most'\n\nimport type {ID, Tag} from './id'\n\ntype Handler<S, P, M={}> = (state: S, payload: P, meta?: M) => S\n\nexport type Store<S> = {\n dispatch: <T>(x: T) => T,\n getState(): S,\n subscribe(listener: any): () => void,\n replaceReducer(nextReducer: Reducer<S>): void,\n}\n\nexport type RawAction<P> = {\n type: string | Tag,\n payload: P,\n meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n },\n}\n\nexport type Domain<State = void> = {\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State>,\n event<Payload>(\n name: string\n ): Event<Payload, State>,\n domain(name: string): Domain<State>,\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State>,\n register: (store: Store<State>) => void,\n port<R>(events$: Stream<R>): void,\n}\n\nexport type Subscription<A> = {\n unsubscribe(): void\n}\n\nexport type Subscriber<A> = {\n next(value: A): void,\n error(err: Error): void,\n complete(value?: A): void,\n}\n\nexport type Event<Payload, State> = {\n (params: Payload): {\n send(dispatchHook?: <T>(value: T) => T): Promise<Payload>,\n raw(): RawAction<Payload>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Payload, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Payload>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n subscribe(subscriber: Subscriber<Payload>): Subscription<Payload>,\n}\n\nexport type Effect<Params, Done, Fail, State> = {\n (params: Params): {\n raw(): RawAction<Params>,\n send(dispatchHook?: <T>(value: T) => T): Promise<Params>,\n done(): Promise<{params: Params, result: Done}>,\n fail(): Promise<{params: Params, error: Fail}>,\n promise(): Promise<{params: Params, result: Done}>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Params, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Params>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n use(thunk: (params: Params) => Promise<Done>): void,\n subscribe(subscriber: Subscriber<Params>): Subscription<Params>,\n done: Event<{params: Params, result: Done}, State>,\n fail: Event<{params: Params, error: Fail}, State>,\n}\n\nexport type Reducer<S> = {\n (state?: S, action: RawAction<any>): S,\n options(opts: { fallback: boolean }): Reducer<S>,\n has(event: Event<any, any>): boolean,\n on<\n P, M,\n A/*: Event<P, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A, handler: (state: S, payload: P, meta?: M) => S): Reducer<S>,\n off<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>,\n reset<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>\n}\n\nexport type Handlers<S> = {\n [propertyName: string]: Handler<S, any, any>\n}\n\ntype functionOn<S, P, M={}> = (actionCreator: Event<P, any>, handler: Handler<S, P, M>) => Reducer<S>\ntype functionOff<S> = (actionCreator: Event<any, any>) => Reducer<S>\n\nexport type OnOff<S> = {\n (on: functionOn<S, any, any>, off: functionOff<S>): void;\n}\n\n"]}
{"version":3,"sources":["../src/index.h.js"],"names":["Stream"],"mappings":"AAEA,SAAQA,MAAR,QAAqB,MAArB","file":"index.h.js","sourcesContent":["//@flow\n\nimport {Stream} from 'most'\n\nimport type {ID, Tag} from './id'\n\ntype Handler<S, P> = (state: S, payload: P, meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n }) => S\n\nexport type Store<S> = {\n dispatch: Function,\n getState(): S,\n subscribe(listener: any): () => void,\n replaceReducer(nextReducer: (state: S, action: any) => S): void,\n}\n\nexport type RawAction<P> = {\n type: string | Tag,\n payload: P,\n meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n },\n}\n\nexport type Domain<State = void> = {\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State>,\n event<Payload>(\n name: string\n ): Event<Payload, State>,\n domain(name: string): Domain<State>,\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State>,\n register: (store: Store<State>) => void,\n port<R>(events$: Stream<R>): Promise<void>,\n}\n\nexport type Subscription<A> = {\n unsubscribe(): void\n}\n\nexport type Subscriber<A> = {\n next(value: A): void,\n error(err: Error): void,\n complete(value?: A): void,\n}\n\nexport type Event<Payload, State> = {\n (params: Payload): {\n send(dispatchHook?: <T>(value: T) => T): Promise<Payload>,\n raw(): RawAction<Payload>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Payload, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Payload>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n subscribe(subscriber: Subscriber<Payload>): Subscription<Payload>,\n // port<R>(events$: Stream<R>): Promise<void>,\n}\n\nexport type Effect<Params, Done, Fail, State> = {\n (params: Params): {\n raw(): RawAction<Params>,\n send(dispatchHook?: <T>(value: T) => T): Promise<Params>,\n done(): Promise<{params: Params, result: Done}>,\n fail(): Promise<{params: Params, error: Fail}>,\n promise(): Promise<{params: Params, result: Done}>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Params, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Params>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n // port<R>(events$: Stream<R>): Promise<void>,\n use(thunk: (params: Params) => Promise<Done>): void,\n subscribe(subscriber: Subscriber<Params>): Subscription<Params>,\n done: Event<{params: Params, result: Done}, State>,\n fail: Event<{params: Params, error: Fail}, State>,\n}\n\nexport type Reducer<S> = {\n (state: S, action: RawAction<any>): S,\n options(opts: { fallback: boolean }): Reducer<S>,\n has(event: Event<any, any>): boolean,\n on<\n P,\n A/*: Event<P, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A, handler: (state: S, payload: P, meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n }) => S): Reducer<S>,\n off<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>,\n reset<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>\n}\n\nexport type Handlers<S> = {\n [propertyName: string]: Handler<S, any>\n}\n\ntype functionOn<S, P> = (actionCreator: Event<P, any>, handler: Handler<S, P>) => Reducer<S>\ntype functionOff<S> = (actionCreator: Event<any, any>) => Reducer<S>\n\nexport type OnOff<S> = {\n (on: functionOn<S, any>, off: functionOff<S>): void;\n}\n\n"]}

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.js"],"names":["createDomain","rootDomain","effectorMiddleware","createReducer","joint"],"mappings":"AAGA,SAAQA,YAAR,EAAsBC,UAAtB,QAAuC,UAAvC;AACA,SAAQC,kBAAR,QAAiC,cAAjC;AACA,SAAQC,aAAR,QAA4B,WAA5B;AACA,SAAQC,KAAR,QAAoB,SAApB","file":"index.js","sourcesContent":["//@flow\n\nexport type {Event, Effect, Domain, Reducer} from './index.h'\nexport {createDomain, rootDomain} from './domain'\nexport {effectorMiddleware} from './middleware'\nexport {createReducer} from './reducer'\nexport {joint} from './joint'\n"]}
{"version":3,"sources":["../src/index.js"],"names":["createDomain","rootDomain","effectorMiddleware","createReducer","joint"],"mappings":"AAGA,SAAQA,YAAR,EAAsBC,UAAtB,QAAuC,UAAvC;AACA,SAAQC,kBAAR,QAAiC,cAAjC;AACA,SAAQC,aAAR,QAA4B,WAA5B;AACA,SAAQC,KAAR,QAAoB,SAApB","file":"index.js","sourcesContent":["//@flow\n\nexport type {Event, Effect, Domain, Reducer, Store} from './index.h'\nexport {createDomain, rootDomain} from './domain'\nexport {effectorMiddleware} from './middleware'\nexport {createReducer} from './reducer'\nexport {joint} from './joint'\n"]}

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/joint.js"],"names":["createReducer","joint","combine","reducers","values","map","reducer","undefined","type","defaultValues","defaultState","lastState","combined","combinedReducer","state","action","changed","Set","i","length","prevValue","value","add","notChanged","size","rawResult","result","Object","assign"],"mappings":"AAAA;AAGA,SAAQA,aAAR,QAA4B,WAA5B;AAEA,OAAO,SAASC,KAAT,CACLC,OADK,EAEL,GAAGC,QAFE,EAGO;AACZ,MAAMC,SAASD,SACZE,GADY,CACRC,WAAWA,QAAQC,SAAR,EAAmB;AAACC,UAAM;AAAP,GAAnB,CADH,CAAf;AAEA,MAAMC,gBAAgB,CAAC,GAAGL,MAAJ,CAAtB;AACA,MAAMM,eAAkBR,QAAQ,GAAGE,MAAX,CAAxB;AACA,MAAIO,YAAeD,YAAnB;AACA,MAAME,WAAWZ,cAAcU,YAAd,EAA4B,EAA5B,EAAgCG,eAAhC,CAAjB;;AACA,WAASA,eAAT,CAAyBC,KAAzB,EAAgCC,MAAhC,EAA2C;AACzC,QAAMC,UAAuB,IAAIC,GAAJ,EAA7B;;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIf,SAASgB,MAA7B,EAAqCD,GAArC,EAA0C;AACxC,UAAME,YAAYhB,OAAOc,CAAP,CAAlB;AACA,UAAMG,QAAQlB,SAASe,CAAT,EAAYE,SAAZ,EAAuBL,MAAvB,CAAd;;AACA,UAAIM,UAAUD,SAAd,EAAyB;AACvBJ,gBAAQM,GAAR,CAAYJ,CAAZ;AACAd,eAAOc,CAAP,IAAYG,UAAUd,SAAV,GACRE,cAAcS,CAAd,CADQ,GAERG,KAFJ;AAGD;AACF;;AACD,QAAME,aAAaP,QAAQQ,IAAR,KAAiB,CAApC;AACA,QAAIC,SAAJ;AACA,QAAIF,UAAJ,EACEE,YAAYd,SAAZ,CADF,KAEK;AACHA,kBAAYc,YAAYvB,QACtB,GAAGE,MADmB,CAAxB;AAGD;AACD,QAAIqB,cAAclB,SAAlB,EACEI,YAAYc,YAAYf,YAAxB;AACF,QAAMgB,SAASd,SAASa,SAAT,EAAoBV,MAApB,CAAf;AACA,QAAIW,WAAWnB,SAAf,EACE,OAAOI,YAAYD,YAAnB;AACF,WAAOgB,MAAP;AACD;;AACDC,SAAOC,MAAP,CAAcf,eAAd,EAA+BD,QAA/B;AACA,SAAOC,eAAP;AACD","file":"joint.js","sourcesContent":["//@noflow\n\nimport type {Reducer} from './index.h'\nimport {createReducer} from './reducer'\n\nexport function joint<A, B, C, D, E, F, R>(\n combine: (A, B, C, D, E, F) => R,\n ...reducers: Array<Reducer<*>>\n): Reducer<R> {\n const values = reducers\n .map(reducer => reducer(undefined, {type: '@@effector/void'}))\n const defaultValues = [...values]\n const defaultState: C = combine(...values)\n let lastState: C = defaultState\n const combined = createReducer(defaultState, {}, combinedReducer)\n function combinedReducer(state, action): C {\n const changed: Set<number> = new Set()\n for (let i = 0; i < reducers.length; i++) {\n const prevValue = values[i]\n const value = reducers[i](prevValue, action)\n if (value !== prevValue) {\n changed.add(i)\n values[i] = value === undefined\n ? defaultValues[i]\n : value\n }\n }\n const notChanged = changed.size === 0\n let rawResult\n if (notChanged)\n rawResult = lastState\n else {\n lastState = rawResult = combine(\n ...values\n )\n }\n if (rawResult === undefined)\n lastState = rawResult = defaultState\n const result = combined(rawResult, action)\n if (result === undefined)\n return lastState = defaultState\n return result\n }\n Object.assign(combinedReducer, combined)\n return combinedReducer\n}\n"]}
{"version":3,"sources":["../src/joint.js"],"names":["createReducer","joint","combine","reducers","values","map","reducer","undefined","type","defaultValues","defaultState","lastState","combined","combinedReducer","state","action","changed","Set","i","length","prevValue","value","add","notChanged","size","rawResult","result","Object","assign"],"mappings":"AAAA;AAGA,SAAQA,aAAR,QAA4B,WAA5B;AAEA,OAAO,SAASC,KAAT,CACLC,OADK,EAEL,GAAGC,QAFE,EAGO;AACZ,MAAMC,SAASD,SACZE,GADY,CACRC,WAAWA,QAAQC,SAAR,EAAmB;AAACC,UAAM;AAAP,GAAnB,CADH,CAAf;AAEA,MAAMC,gBAAgB,CAAC,GAAGL,MAAJ,CAAtB;AACA,MAAMM,eAAkBR,QAAQ,GAAGE,MAAX,CAAxB;AACA,MAAIO,YAAeD,YAAnB;AACA,MAAME,WAAWZ,cAAcU,YAAd,EAA4B,EAA5B,EAAgCG,eAAhC,CAAjB;;AACA,WAASA,eAAT,CAAyBC,KAAzB,EAAgCC,MAAhC,EAA2C;AACzC,QAAMC,UAAuB,IAAIC,GAAJ,EAA7B;;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIf,SAASgB,MAA7B,EAAqCD,GAArC,EAA0C;AACxC,UAAME,YAAYhB,OAAOc,CAAP,CAAlB;AACA,UAAMG,QAAQlB,SAASe,CAAT,EAAYE,SAAZ,EAAuBL,MAAvB,CAAd;;AACA,UAAIM,UAAUD,SAAd,EAAyB;AACvBJ,gBAAQM,GAAR,CAAYJ,CAAZ;AACAd,eAAOc,CAAP,IAAYG,UAAUd,SAAV,GACRE,cAAcS,CAAd,CADQ,GAERG,KAFJ;AAGD;AACF;;AACD,QAAME,aAAaP,QAAQQ,IAAR,KAAiB,CAApC;AACA,QAAIC,SAAJ;AACA,QAAIF,UAAJ,EACEE,YAAYd,SAAZ,CADF,KAEK;AACHA,kBAAYc,YAAYvB,QACtB,GAAGE,MADmB,CAAxB;AAGD;AACD,QAAIqB,cAAclB,SAAlB,EACEI,YAAYc,YAAYf,YAAxB;AACF,QAAMgB,SAASd,SAASa,SAAT,EAAoBV,MAApB,CAAf;AACA,QAAIW,WAAWnB,SAAf,EACE,OAAOI,YAAYD,YAAnB;AACF,WAAOgB,MAAP;AACD;;AACDC,SAAOC,MAAP,CAAcf,eAAd,EAA+BD,QAA/B;AACA,SAAOC,eAAP;AACD","file":"joint.js","sourcesContent":["//@noflow\n\nimport type {Reducer} from './index.h'\nimport {createReducer} from './reducer'\n\nexport function joint<A, B, C, D, E, F, R>(\n combine: (A, B, C, D, E, F) => R,\n ...reducers: Array<Reducer<*>>\n): Reducer<R> {\n const values = reducers\n .map(reducer => reducer(undefined, {type: '@@effector/void'}))\n const defaultValues = [...values]\n const defaultState: R = combine(...values)\n let lastState: R = defaultState\n const combined = createReducer(defaultState, {}, combinedReducer)\n function combinedReducer(state, action): R {\n const changed: Set<number> = new Set()\n for (let i = 0; i < reducers.length; i++) {\n const prevValue = values[i]\n const value = reducers[i](prevValue, action)\n if (value !== prevValue) {\n changed.add(i)\n values[i] = value === undefined\n ? defaultValues[i]\n : value\n }\n }\n const notChanged = changed.size === 0\n let rawResult\n if (notChanged)\n rawResult = lastState\n else {\n lastState = rawResult = combine(\n ...values\n )\n }\n if (rawResult === undefined)\n lastState = rawResult = defaultState\n const result = combined(rawResult, action)\n if (result === undefined)\n return lastState = defaultState\n return result\n }\n Object.assign(combinedReducer, combined)\n return combinedReducer\n}\n"]}

@@ -28,3 +28,3 @@ function normalizeType(typeOrActionCreator) {

function reset(typeOrActionCreator) {
on(typeOrActionCreator, () => opts.defaultState);
on(typeOrActionCreator, (state, payload, meta) => opts.defaultState);
return returnType;

@@ -31,0 +31,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/reducer.js"],"names":["normalizeType","typeOrActionCreator","getType","toString","createReducer","defaultState","handlers","thisType","opts","fallback","reducer","Object","assign","reduce","has","on","off","options","reset","returnType","handler","Array","isArray","forEach","action","newOpts","keys","name","factory","state","type","startsWith","String","result","payload","meta","undefined"],"mappings":"AASA,SAASA,aAAT,CAAuBC,mBAAvB,EAA4C;AAC1C,MAAIA,uBAAuBA,oBAAoBC,OAA/C,EAAwD;AACtD,WAAOD,oBAAoBE,QAApB,EAAP;AACD;;AACD,SAAOF,mBAAP;AACD;;AAED,OAAO,SAASG,aAAT,CACLC,YADK,EAELC,WAAmC,EAF9B,EAGLC,QAHK,EAIO;AACZ,MAAMC,OAAO;AACXC,cAAU,IADC;AAEXJ;AAFW,GAAb;AAKA,MAAMK,UAAUC,OAAOC,MAAP,CAAcC,MAAd,EAAsB;AACpCC,OADoC;AAC/BC,MAD+B;AAC3BC,OAD2B;AACtBC,WADsB;AACbC;AADa,GAAtB,CAAhB;AAGA,MAAMC,aAAaZ,WACfA,QADe,GAEfG,OAFJ;;AAIA,WAASI,GAAT,CAAab,mBAAb,EAAkC;AAChC,WAAO,CAAC,CAACK,SAASN,cAAcC,mBAAd,CAAT,CAAT;AACD;;AAED,WAASiB,KAAT,CAAejB,mBAAf,EAAoC;AAClCc,OAAGd,mBAAH,EAAwB,MAAMO,KAAKH,YAAnC;AACA,WAAOc,UAAP;AACD;;AAED,WAASJ,EAAT,CAAYd,mBAAZ,EAAiCmB,OAAjC,EAA0C;AACxC,QAAIC,MAAMC,OAAN,CAAcrB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoBsB,OAApB,CAA4BC,UAAU;AACpCT,WAAGS,MAAH,EAAWJ,OAAX;AACD,OAFD;AAGD,KAJD,MAIO;AACLd,eAASN,cAAcC,mBAAd,CAAT,IAA+CmB,OAA/C;AACD;;AAED,WAAOD,UAAP;AACD;;AAED,WAASH,GAAT,CAAaf,mBAAb,EAAkC;AAChC,QAAIoB,MAAMC,OAAN,CAAcrB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoBsB,OAApB,CAA4BP,GAA5B;AACD,KAFD,MAEO;AACL,aAAOV,SAASN,cAAcC,mBAAd,CAAT,CAAP;AACD;;AACD,WAAOkB,UAAP;AACD;;AAED,WAASF,OAAT,CAAiBQ,OAAjB,EAA0B;AACxB;AACAd,WAAOe,IAAP,CAAYD,OAAZ,EAAqBF,OAArB,CAA6BI,QAAQnB,KAAKmB,IAAL,IAAaF,QAAQE,IAAR,CAAlD;AACA,WAAOR,UAAP;AACD;;AAED,MAAI,OAAOb,QAAP,KAAoB,UAAxB,EAAoC;AAClC,QAAMsB,UAAUtB,QAAhB,CADkC,CAElC;;AACAA,eAAW,EAAX;AACAsB,YAAQb,EAAR,EAAYC,GAAZ;AACD;;AAED,WAASH,MAAT,CAAmBgB,QAAWrB,KAAKH,YAAnC,EAAiDmB,MAAjD,EAAuE;AACrE,QAAI,CAACA,MAAD,IAAY,OAAOA,OAAOM,IAAd,KAAuB,QAAvC,EAAkD;AAAE,aAAOD,KAAP;AAAc;;AAClE,QAAIL,OAAOM,IAAP,CAAYC,UAAZ,CAAuB,UAAvB,CAAJ,EAAwC;AAAE,aAAOF,KAAP;AAAc;;AAExD,QAAMT,UAAUd,SAAS0B,OAAOR,OAAOM,IAAd,CAAT,KAAiCtB,KAAKC,QAAtD;;AACA,QAAIW,OAAJ,EAAa;AACX,UAAMa,SAASb,QAAQS,KAAR,EAAeL,OAAOU,OAAtB,EAA+BV,OAAOW,IAAtC,CAAf;AACA,UAAIF,WAAWG,SAAf,EACE,OAAO5B,KAAKH,YAAZ;AACF,aAAO4B,MAAP;AACD;;AAED,WAAOJ,KAAP;AACD;;AAED,SAAOnB,OAAP;AACD","file":"reducer.js","sourcesContent":["// @flow\n\nimport type {\n RawAction,\n Reducer,\n Handlers,\n OnOff\n} from './index.h'\n\nfunction normalizeType(typeOrActionCreator) {\n if (typeOrActionCreator && typeOrActionCreator.getType) {\n return typeOrActionCreator.toString()\n }\n return typeOrActionCreator\n}\n\nexport function createReducer<S>(\n defaultState: S,\n handlers: Handlers<S> | OnOff<S> = {},\n thisType?: Reducer<S>\n): Reducer<S> {\n const opts = {\n fallback: null,\n defaultState,\n }\n\n const reducer = Object.assign(reduce, {\n has, on, off, options, reset\n })\n const returnType = thisType\n ? thisType\n : reducer\n\n function has(typeOrActionCreator) {\n return !!handlers[normalizeType(typeOrActionCreator)]\n }\n\n function reset(typeOrActionCreator) {\n on(typeOrActionCreator, () => opts.defaultState)\n return returnType\n }\n\n function on(typeOrActionCreator, handler) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(action => {\n on(action, handler)\n })\n } else {\n handlers[normalizeType(typeOrActionCreator)] = handler\n }\n\n return returnType\n }\n\n function off(typeOrActionCreator) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(off)\n } else {\n delete handlers[normalizeType(typeOrActionCreator)]\n }\n return returnType\n }\n\n function options(newOpts) {\n // $off\n Object.keys(newOpts).forEach(name => opts[name] = newOpts[name])\n return returnType\n }\n\n if (typeof handlers === 'function') {\n const factory = handlers\n // $off\n handlers = {}\n factory(on, off)\n }\n\n function reduce<P>(state: S = opts.defaultState, action: RawAction<P>) {\n if (!action || (typeof action.type !== 'string')) { return state }\n if (action.type.startsWith('@@redux/')) { return state }\n\n const handler = handlers[String(action.type)] || opts.fallback\n if (handler) {\n const result = handler(state, action.payload, action.meta)\n if (result === undefined)\n return opts.defaultState\n return result\n }\n\n return state\n }\n\n return reducer\n}"]}
{"version":3,"sources":["../src/reducer.js"],"names":["normalizeType","typeOrActionCreator","getType","toString","createReducer","defaultState","handlers","thisType","opts","fallback","reducer","Object","assign","reduce","has","on","off","options","reset","returnType","state","payload","meta","handler","Array","isArray","forEach","action","newOpts","keys","name","factory","type","startsWith","String","result","undefined"],"mappings":"AASA,SAASA,aAAT,CAAuBC,mBAAvB,EAA4C;AAC1C,MAAIA,uBAAuBA,oBAAoBC,OAA/C,EAAwD;AACtD,WAAOD,oBAAoBE,QAApB,EAAP;AACD;;AACD,SAAOF,mBAAP;AACD;;AAED,OAAO,SAASG,aAAT,CACLC,YADK,EAELC,WAAmC,EAF9B,EAGLC,QAHK,EAIO;AACZ,MAAMC,OAGF;AACFC,cAAU,IADR;AAEFJ;AAFE,GAHJ;AAQA,MAAMK,UAAUC,OAAOC,MAAP,CAAcC,MAAd,EAAsB;AACpCC,OADoC;AAC/BC,MAD+B;AAC3BC,OAD2B;AACtBC,WADsB;AACbC;AADa,GAAtB,CAAhB;AAGA,MAAMC,aAAaZ,WACfA,QADe,GAEfG,OAFJ;;AAIA,WAASI,GAAT,CAAab,mBAAb,EAAkC;AAChC,WAAO,CAAC,CAACK,SAASN,cAAcC,mBAAd,CAAT,CAAT;AACD;;AAED,WAASiB,KAAT,CAAejB,mBAAf,EAAoC;AAClCc,OAAGd,mBAAH,EAAwB,CAACmB,KAAD,EAAWC,OAAX,EAAyBC,IAAzB,KAAqCd,KAAKH,YAAlE;AACA,WAAOc,UAAP;AACD;;AAED,WAASJ,EAAT,CAAYd,mBAAZ,EAAiCsB,OAAjC,EAA0C;AACxC,QAAIC,MAAMC,OAAN,CAAcxB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoByB,OAApB,CAA4BC,UAAU;AACpCZ,WAAGY,MAAH,EAAWJ,OAAX;AACD,OAFD;AAGD,KAJD,MAIO;AACLjB,eAASN,cAAcC,mBAAd,CAAT,IAA+CsB,OAA/C;AACD;;AAED,WAAOJ,UAAP;AACD;;AAED,WAASH,GAAT,CAAaf,mBAAb,EAAkC;AAChC,QAAIuB,MAAMC,OAAN,CAAcxB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoByB,OAApB,CAA4BV,GAA5B;AACD,KAFD,MAEO;AACL,aAAOV,SAASN,cAAcC,mBAAd,CAAT,CAAP;AACD;;AACD,WAAOkB,UAAP;AACD;;AAED,WAASF,OAAT,CAAiBW,OAAjB,EAA0B;AACxB;AACAjB,WAAOkB,IAAP,CAAYD,OAAZ,EAAqBF,OAArB,CAA6BI,QAAQtB,KAAKsB,IAAL,IAAaF,QAAQE,IAAR,CAAlD;AACA,WAAOX,UAAP;AACD;;AAED,MAAI,OAAOb,QAAP,KAAoB,UAAxB,EAAoC;AAClC,QAAMyB,UAAUzB,QAAhB,CADkC,CAElC;;AACAA,eAAW,EAAX;AACAyB,YAAQhB,EAAR,EAAYC,GAAZ;AACD;;AAED,WAASH,MAAT,CAAmBO,QAAWZ,KAAKH,YAAnC,EAAiDsB,MAAjD,EAAuE;AACrE,QAAI,CAACA,MAAD,IAAY,OAAOA,OAAOK,IAAd,KAAuB,QAAvC,EAAkD;AAAE,aAAOZ,KAAP;AAAc;;AAClE,QAAIO,OAAOK,IAAP,CAAYC,UAAZ,CAAuB,UAAvB,CAAJ,EAAwC;AAAE,aAAOb,KAAP;AAAc;;AAExD,QAAMG,UAAUjB,SAAS4B,OAAOP,OAAOK,IAAd,CAAT,KAAiCxB,KAAKC,QAAtD;;AACA,QAAIc,OAAJ,EAAa;AACX,UAAMY,SAASZ,QAAQH,KAAR,EAAeO,OAAON,OAAtB,EAA+BM,OAAOL,IAAtC,CAAf;AACA,UAAIa,WAAWC,SAAf,EACE,OAAO5B,KAAKH,YAAZ;AACF,aAAO8B,MAAP;AACD;;AAED,WAAOf,KAAP;AACD;;AAED,SAAOV,OAAP;AACD","file":"reducer.js","sourcesContent":["// @flow\n\nimport type {\n RawAction,\n Reducer,\n Handlers,\n OnOff\n} from './index.h'\n\nfunction normalizeType(typeOrActionCreator) {\n if (typeOrActionCreator && typeOrActionCreator.getType) {\n return typeOrActionCreator.toString()\n }\n return typeOrActionCreator\n}\n\nexport function createReducer<S>(\n defaultState: S,\n handlers: Handlers<S> | OnOff<S> = {},\n thisType?: Reducer<S>\n): Reducer<S> {\n const opts: {\n defaultState: S,\n fallback: null | (state: S, payload: any, meta: *) => S\n } = {\n fallback: null,\n defaultState,\n }\n\n const reducer = Object.assign(reduce, {\n has, on, off, options, reset\n })\n const returnType = thisType\n ? thisType\n : reducer\n\n function has(typeOrActionCreator) {\n return !!handlers[normalizeType(typeOrActionCreator)]\n }\n\n function reset(typeOrActionCreator) {\n on(typeOrActionCreator, (state: S, payload: any, meta: *) => opts.defaultState)\n return returnType\n }\n\n function on(typeOrActionCreator, handler) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(action => {\n on(action, handler)\n })\n } else {\n handlers[normalizeType(typeOrActionCreator)] = handler\n }\n\n return returnType\n }\n\n function off(typeOrActionCreator) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(off)\n } else {\n delete handlers[normalizeType(typeOrActionCreator)]\n }\n return returnType\n }\n\n function options(newOpts) {\n // $off\n Object.keys(newOpts).forEach(name => opts[name] = newOpts[name])\n return returnType\n }\n\n if (typeof handlers === 'function') {\n const factory = handlers\n // $off\n handlers = {}\n factory(on, off)\n }\n\n function reduce<P>(state: S = opts.defaultState, action: RawAction<P>) {\n if (!action || (typeof action.type !== 'string')) { return state }\n if (action.type.startsWith('@@redux/')) { return state }\n\n const handler = handlers[String(action.type)] || opts.fallback\n if (handler) {\n const result = handler(state, action.payload, action.meta)\n if (result === undefined)\n return opts.defaultState\n return result\n }\n\n return state\n }\n\n return reducer\n}"]}

@@ -89,3 +89,5 @@ "use strict";

port(events$) {
(0, _port.port)(dispatch, state$, events$);
return events$.observe(data => {
(0, _port.safeDispatch)(data, dispatch);
});
},

@@ -92,0 +94,0 @@

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/domain.js"],"names":["createDomain","store","domainName","redux","config","dispatch","type","payload","addPlainHandler","name","fn","plain","set","state$","map","getState","multicast","DomainConstructor","Map","rootDomain","reduxStore","data","register","pong","undefined","oldPlain","key","val","entries","has","observe","state","next","domain","events","port","events$","console","warn","effect","join","event","typeConstant","action$","result"],"mappings":"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","file":"domain.js","sourcesContent":["//@flow\n\nimport {type Stream, from} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Domain, Effect, Event, Store} from './index.h'\nimport type {Tag} from './id'\n\nimport {PING, PONG, type Config} from './config'\n\nimport {port} from './port'\nimport {EventConstructor} from './event'\nimport {EffectConstructor} from './effect'\n\nexport function createDomain<State>(\n store: Store<State>,\n domainName: string = ''\n): Domain<State> {\n const redux: any = store\n const config: Config = redux.dispatch({\n type: PING,\n }).payload\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n const state$: Stream<State> = from(redux)\n .map(() => store.getState())\n .multicast()\n return DomainConstructor(\n domainName,\n redux.dispatch,\n store.getState,\n state$,\n new Map,\n addPlainHandler,\n )\n}\n\nexport function rootDomain<State>(\n domainName: string = ''\n): Domain<State> {\n\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n let redux: any\n let reduxStore: Store<State>\n const config: Config = {\n plain: new Map()\n }\n function dispatch<T>(data: T): T {\n return redux.dispatch(data)\n }\n function getState(): State {\n return reduxStore.getState()\n }\n\n const state$: Subject<State> = subject()\n function register(store: Store<State>) {\n redux = reduxStore = store\n const pong = redux.dispatch({\n type: PING,\n payload: undefined,\n })\n if (pong) {\n const payload: any = pong.payload\n const plain: Map<*, *> = payload.plain\n const oldPlain = config.plain\n for (const [key, val] of oldPlain.entries()) {\n if (!plain.has(key)) {\n plain.set(key, val)\n }\n }\n config.plain = plain\n }\n //$off\n from(store)\n .map(() => getState())\n .observe(state => state$.next(state))\n }\n const domain: Domain<State> = DomainConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n new Map,\n addPlainHandler\n )\n domain.register = register\n return domain\n}\n\n\n\nfunction DomainConstructor<State>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>> = new Map,\n addPlainHandler: <T>(name: string, fn: (data: T) => any) => void = () => {}\n): Domain<State> {\n\n return {\n port<R>(events$: Stream<R>) {\n port(dispatch, state$, events$)\n },\n register(store) {\n console.warn(`Not implemented`)\n },\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State> {\n return EffectConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n domain(name: string): Domain<State> {\n return DomainConstructor(\n [domainName, name].join('/'),\n dispatch,\n getState,\n state$,\n events,\n addPlainHandler,\n )\n },\n event<Payload>(\n name: string\n ): Event<Payload, State> {\n return EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State> {\n const action$: Subject<Payload> = subject()\n addPlainHandler(name, data => {\n action$.next(data)\n })\n const result = EventConstructor(\n '',\n dispatch,\n getState,\n state$,\n events,\n name,\n action$\n )\n return result\n },\n }\n}\n\n"]}
{"version":3,"sources":["../src/domain.js"],"names":["createDomain","store","domainName","redux","config","dispatch","type","payload","addPlainHandler","name","fn","plain","set","state$","map","getState","multicast","DomainConstructor","Map","rootDomain","reduxStore","data","register","pong","undefined","oldPlain","key","val","entries","has","observe","state","next","domain","events","port","events$","console","warn","effect","join","event","typeConstant","action$","result"],"mappings":"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","file":"domain.js","sourcesContent":["//@flow\n\nimport {type Stream, from} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Domain, Effect, Event, Store} from './index.h'\nimport type {Tag} from './id'\n\nimport {PING, PONG, type Config} from './config'\n\nimport {safeDispatch} from './port'\nimport {EventConstructor} from './event'\nimport {EffectConstructor} from './effect'\n\nexport function createDomain<State>(\n store: Store<State>,\n domainName: string = ''\n): Domain<State> {\n const redux: any = store\n const config: Config = redux.dispatch({\n type: PING,\n }).payload\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n const state$: Stream<State> = from(redux)\n .map(() => store.getState())\n .multicast()\n return DomainConstructor(\n domainName,\n redux.dispatch,\n store.getState,\n state$,\n new Map,\n addPlainHandler,\n )\n}\n\nexport function rootDomain<State>(\n domainName: string = ''\n): Domain<State> {\n\n const addPlainHandler = (name, fn) => {\n config.plain.set(name, fn)\n }\n let redux: any\n let reduxStore: Store<State>\n const config: Config = {\n plain: new Map()\n }\n function dispatch<T>(data: T): T {\n return redux.dispatch(data)\n }\n function getState(): State {\n return reduxStore.getState()\n }\n\n const state$: Subject<State> = subject()\n function register(store: Store<State>) {\n redux = reduxStore = store\n const pong = redux.dispatch({\n type: PING,\n payload: undefined,\n })\n if (pong) {\n const payload: any = pong.payload\n const plain: Map<*, *> = payload.plain\n const oldPlain = config.plain\n for (const [key, val] of oldPlain.entries()) {\n if (!plain.has(key)) {\n plain.set(key, val)\n }\n }\n config.plain = plain\n }\n //$off\n from(store)\n .map(() => getState())\n .observe(state => state$.next(state))\n }\n const domain: Domain<State> = DomainConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n new Map,\n addPlainHandler\n )\n domain.register = register\n return domain\n}\n\n\n\nfunction DomainConstructor<State>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>> = new Map,\n addPlainHandler: <T>(name: string, fn: (data: T) => any) => void = () => {}\n): Domain<State> {\n\n return {\n port<R>(events$: Stream<R>): Promise<void> {\n return events$.observe(data => { safeDispatch(data, dispatch) })\n },\n register(store) {\n console.warn(`Not implemented`)\n },\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State> {\n return EffectConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n domain(name: string): Domain<State> {\n return DomainConstructor(\n [domainName, name].join('/'),\n dispatch,\n getState,\n state$,\n events,\n addPlainHandler,\n )\n },\n event<Payload>(\n name: string\n ): Event<Payload, State> {\n return EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n name\n )\n },\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State> {\n const action$: Subject<Payload> = subject()\n addPlainHandler(name, data => {\n action$.next(data)\n })\n const result = EventConstructor(\n '',\n dispatch,\n getState,\n state$,\n events,\n name,\n action$\n )\n return result\n },\n }\n}\n\n"]}

@@ -131,3 +131,5 @@ "use strict";

effect.watch = watch;
effect.epic = (0, _port.port)(dispatch, state$, action$);
effect.epic = (0, _port.port)(dispatch, state$, action$); // effect.port = function port<R>(events$: Stream<R>) {
// return events$.observe(data => safeDispatch(data, dispatch))
// }

@@ -134,0 +136,0 @@ effect.subscribe = subscriber => action$.subscribe(subscriber);

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/effect.js"],"names":["EffectConstructor","domainName","dispatch","getState","state$","events","name","action$","handlers","Set","eventID","nextSeq","getType","add","payload","state","next","using","never","use","thunk","create","type","meta","index","seq","effect","params","run","then","result","data","done","resolve","error","fail","reject","runner","dispatchHook","canDispatch","dispatcher","handler","val","doneP","Promise","rs","failP","toSend","raw","send","promise","race","join","watch","fn","epic","subscribe","subscriber","props","console","warn"],"mappings":";;;;;;;AAGA;;AAGA;;AAEA;;AACA;;AAEA;;AAEO,SAASA,iBAAT,CACLC,UADK,EAELC,QAFK,EAGLC,QAHK,EAILC,MAJK,EAKLC,MALK,EAMLC,IANK,EAOLC,UAA2B,yBAPtB,EAQ8B;AACnC,MAAMC,WAAW,IAAIC,GAAJ,EAAjB;AAEA,MAAM;AAACC,WAAD;AAAUC,WAAV;AAAmBC;AAAnB,MAA8B,8BAAYX,UAAZ,EAAwBK,IAAxB,CAApC;AAEAE,WAASK,GAAT,CAAa,CAACC,OAAD,EAAUC,KAAV,KAAoBR,QAAQS,IAAR,CAAaF,OAAb,CAAjC,EALmC,CAMnC;;AACA,MAAIG,QAA2CC,KAA/C;;AACA,WAASC,GAAT,CAAaC,KAAb,EAAuD;AACrDH,YAAQG,KAAR;AACD;;AACD,MAAMC,SAAUP,OAAD,KAAsB;AACnCQ,UAAMV,SAD6B;AAEnCE,WAFmC;AAGnCS,UAAM;AACJC,aAAO,wBADH;AAEJd,aAFI;AAGJe,WAAKd;AAHD;AAH6B,GAAtB,CAAf;;AASA,MAAMe,SAAUC,MAAD,IAAoB;AACjC,QAAIC,MAAM,MAAM;AACdA,YAAM,MAAM,CAAE,CAAd;;AACAX,YAAMU,MAAN,EAAcE,IAAd,CACEC,UAAU;AACR,YAAMC,OAAO;AAACJ,gBAAD;AAASG;AAAT,SAAb;AACA5B,iBAAS8B,KAAKD,IAAL,CAAT;AACAE,gBAAQF,IAAR;AACD,OALH,EAMEG,SAAS;AACP,YAAMH,OAAO;AAACJ,gBAAD;AAASO;AAAT,SAAb;AACAhC,iBAASiC,KAAKJ,IAAL,CAAT;AACAK,eAAOL,IAAP;AACD,OAVH;AAYD,KAdD;;AAeA,QAAMM,SAAUC,YAAD,IAAkB;AAC/B,UAAIC,WAAJ,EAAiB;AACf,YAAMC,aAAaF,eACfA,YADe,GAEfpC,QAFJ;AAGAqC,sBAAc,KAAd;AACAC,mBAAWV,MAAX;;AACA,aAAK,IAAMW,OAAX,IAAsBjC,QAAtB,EAAgC;AAC9BiC,kBAAQd,MAAR,EAAgBxB,UAAhB;AACD,SARc,CASf;;;AACAyB;AACD;AACF,KAbD;;AAcA,QAAIK,UAAWS,GAAD,IAAS,CAAE,CAAzB;;AACA,QAAIN,SAAUM,GAAD,IAAS,CAAE,CAAxB;;AACA,QAAMC,QAAiD,IAAIC,OAAJ,CAAYC,MAAMZ,UAAUY,EAA5B,CAAvD;AACA,QAAMC,QAAgD,IAAIF,OAAJ,CAAYC,MAAMT,SAASS,EAA3B,CAAtD;AACA,QAAME,SAASH,QAAQX,OAAR,CAAgBN,MAAhB,CAAf;AACA,QAAMG,SAAST,OAAOM,MAAP,CAAf;AACA,QAAIY,cAAc,IAAlB;AACA,6BACKT,MADL;AAEEkB,YAAM;AACJ,eAAOlB,MAAP;AACD,OAJH;;AAKEmB,WAAKX,YAAL,EAAmB;AACjBD,eAAOC,YAAP;AACA,eAAOS,MAAP;AACD,OARH;;AASEf,aAAO;AACLK;AACA,eAAOM,KAAP;AACD,OAZH;;AAaER,aAAO;AACLE;AACA,eAAOS,KAAP;AACD,OAhBH;;AAiBEI,gBAAU;AACRb;AACA,eAAOO,QAAQO,IAAR,CAAa,CAClBR,KADkB,EAElBG,MAAMjB,IAAN,CAAWE,QAAQa,QAAQR,MAAR,CAAeL,IAAf,CAAnB,CAFkB,CAAb,CAAP;AAID;;AAvBH;AAyBD,GA9DD;;AA+DA,MAAMC,OAAqD,6BACzD/B,UADyD,EAEzDC,QAFyD,EAGzDC,QAHyD,EAIzDC,MAJyD,EAKzDC,MALyD,EAMzD,CAACC,IAAD,EAAO,MAAP,EAAe8C,IAAf,CAAoB,GAApB,CANyD,CAA3D;AAQA,MAAMjB,OAAoD,6BACxDlC,UADwD,EAExDC,QAFwD,EAGxDC,QAHwD,EAIxDC,MAJwD,EAKxDC,MALwD,EAMxD,CAACC,IAAD,EAAO,MAAP,EAAe8C,IAAf,CAAoB,GAApB,CANwD,CAA1D;;AAQA,WAASC,KAAT,CAAkBC,EAAlB,EAA2D;AACzD9C,aAASK,GAAT,CAAa,CAACc,MAAD,EAASZ,KAAT,KAAmB;AAC9B,UAAMe,SAASwB,GAAG3B,MAAH,EAAWZ,KAAX,CAAf;AACA,8BAAae,MAAb,EAAqB5B,QAArB;AACD,KAHD;AAID;;AAEDwB,SAAOP,GAAP,GAAaA,GAAb;AACAO,SAAOd,OAAP,GAAiBA,OAAjB;AACAc,SAAOM,IAAP,GAAcA,IAAd;AACAN,SAAOS,IAAP,GAAcA,IAAd;AACAT,SAAO2B,KAAP,GAAeA,KAAf;AACA3B,SAAO6B,IAAP,GAAc,gBAAKrD,QAAL,EAAeE,MAAf,EAAuBG,OAAvB,CAAd;;AACAmB,SAAO8B,SAAP,GAAoBC,UAAD,IAAgBlD,QAAQiD,SAAR,CAAkBC,UAAlB,CAAnC;;AACA,+BAAW/B,MAAX,EAAmBnB,OAAnB;AACA,SAAOmB,MAAP;AACD;;AAED,SAASR,KAAT,CAAewC,KAAf,EAAyC;AACvCC,UAAQC,IAAR,CAAc;;;;;CAAd,EAKCF,KALD;AAMA,SAAO,IAAId,OAAJ,CAAY,MAAM,CAAE,CAApB,CAAP;AACD","file":"effect.js","sourcesContent":["//@flow\n\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Effect, Event, RawAction} from './index.h'\nimport {nextPayloadID, nextEventID, toTag, counter, type Tag} from './id'\n\nimport {EventConstructor} from './event'\nimport {safeDispatch, port} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EffectConstructor<State, Params, Done, Fail>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Params> = subject()\n): Effect<Params, Done, Fail, State> {\n const handlers = new Set\n\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n let using: (params: Params) => Promise<Done> = never\n function use(thunk: (params: Params) => Promise<Done>) {\n using = thunk\n }\n const create = (payload: Params) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n const effect = (params: Params) => {\n let run = () => {\n run = () => {}\n using(params).then(\n result => {\n const data = {params, result}\n dispatch(done(data))\n resolve(data)\n },\n error => {\n const data = {params, error}\n dispatch(fail(data))\n reject(data)\n },\n )\n }\n const runner = (dispatchHook) => {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(params, getState())\n }\n // action$.next(params)\n run()\n }\n }\n let resolve = (val) => {}\n let reject = (val) => {}\n const doneP: Promise<{params: Params, result: Done}> = new Promise(rs => resolve = rs)\n const failP: Promise<{params: Params, error: Fail}> = new Promise(rs => reject = rs)\n const toSend = Promise.resolve(params)\n const result = create(params)\n let canDispatch = true\n return {\n ...result,\n raw() {\n return result\n },\n send(dispatchHook) {\n runner(dispatchHook)\n return toSend\n },\n done() {\n runner()\n return doneP\n },\n fail() {\n runner()\n return failP\n },\n promise() {\n runner()\n return Promise.race([\n doneP,\n failP.then(data => Promise.reject(data)),\n ])\n }\n }\n }\n const done: Event<{params: Params, result: Done}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'done'].join(' ')\n )\n const fail: Event<{params: Params, error: Fail}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'fail'].join(' ')\n )\n function watch<R>(fn: (params: Params, state: State) => R) {\n handlers.add((params, state) => {\n const result = fn(params, state)\n safeDispatch(result, dispatch)\n })\n }\n\n effect.use = use\n effect.getType = getType\n effect.done = done\n effect.fail = fail\n effect.watch = watch\n effect.epic = port(dispatch, state$, action$)\n effect.subscribe = (subscriber) => action$.subscribe(subscriber)\n observable(effect, action$)\n return effect\n}\n\nfunction never(props: any): Promise<any> {\n console.warn(`\n\n\n Running an effect without implementation\n\n`, props)\n return new Promise(() => {})\n}\n"]}
{"version":3,"sources":["../src/effect.js"],"names":["EffectConstructor","domainName","dispatch","getState","state$","events","name","action$","handlers","Set","eventID","nextSeq","getType","add","payload","state","next","using","never","use","thunk","create","type","meta","index","seq","effect","params","run","then","result","data","done","resolve","error","fail","reject","runner","dispatchHook","canDispatch","dispatcher","handler","val","doneP","Promise","rs","failP","toSend","raw","send","promise","race","join","watch","fn","epic","subscribe","subscriber","props","console","warn"],"mappings":"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","file":"effect.js","sourcesContent":["//@flow\n\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Effect, Event, RawAction} from './index.h'\nimport {nextPayloadID, nextEventID, toTag, counter, type Tag} from './id'\n\nimport {EventConstructor} from './event'\nimport {safeDispatch, port} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EffectConstructor<State, Params, Done, Fail>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Params> = subject()\n): Effect<Params, Done, Fail, State> {\n const handlers = new Set\n\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n let using: (params: Params) => Promise<Done> = never\n function use(thunk: (params: Params) => Promise<Done>) {\n using = thunk\n }\n const create = (payload: Params) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n const effect = (params: Params) => {\n let run = () => {\n run = () => {}\n using(params).then(\n result => {\n const data = {params, result}\n dispatch(done(data))\n resolve(data)\n },\n error => {\n const data = {params, error}\n dispatch(fail(data))\n reject(data)\n },\n )\n }\n const runner = (dispatchHook) => {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(params, getState())\n }\n // action$.next(params)\n run()\n }\n }\n let resolve = (val) => {}\n let reject = (val) => {}\n const doneP: Promise<{params: Params, result: Done}> = new Promise(rs => resolve = rs)\n const failP: Promise<{params: Params, error: Fail}> = new Promise(rs => reject = rs)\n const toSend = Promise.resolve(params)\n const result = create(params)\n let canDispatch = true\n return {\n ...result,\n raw() {\n return result\n },\n send(dispatchHook) {\n runner(dispatchHook)\n return toSend\n },\n done() {\n runner()\n return doneP\n },\n fail() {\n runner()\n return failP\n },\n promise() {\n runner()\n return Promise.race([\n doneP,\n failP.then(data => Promise.reject(data)),\n ])\n }\n }\n }\n const done: Event<{params: Params, result: Done}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'done'].join(' ')\n )\n const fail: Event<{params: Params, error: Fail}, State> = EventConstructor(\n domainName,\n dispatch,\n getState,\n state$,\n events,\n [name, 'fail'].join(' ')\n )\n function watch<R>(fn: (params: Params, state: State) => R) {\n handlers.add((params, state) => {\n const result = fn(params, state)\n safeDispatch(result, dispatch)\n })\n }\n\n effect.use = use\n effect.getType = getType\n effect.done = done\n effect.fail = fail\n effect.watch = watch\n effect.epic = port(dispatch, state$, action$)\n // effect.port = function port<R>(events$: Stream<R>) {\n // return events$.observe(data => safeDispatch(data, dispatch))\n // }\n effect.subscribe = (subscriber) => action$.subscribe(subscriber)\n observable(effect, action$)\n return effect\n}\n\nfunction never(props: any): Promise<any> {\n console.warn(`\n\n\n Running an effect without implementation\n\n`, props)\n return new Promise(() => {})\n}\n"]}

@@ -74,4 +74,7 @@ "use strict";

eventInstance.subscribe = subscriber => action$.subscribe(subscriber);
eventInstance.subscribe = subscriber => action$.subscribe(subscriber); // eventInstance.port = function port<R>(events$: Stream<R>) {
// return events$.observe(data => safeDispatch(data, dispatch))
// }
(0, _eventCommon.observable)(eventInstance, action$);

@@ -78,0 +81,0 @@ events.set(getType(), eventInstance);

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/event.js"],"names":["EventConstructor","domainName","dispatch","getState","state$","events","name","action$","eventID","nextSeq","getType","handlers","Set","watch","fn","add","payload","state","next","create","type","meta","index","seq","eventInstance","toSend","Promise","resolve","result","canDispatch","raw","send","dispatchHook","dispatcher","handler","toString","epic","subscribe","subscriber","set"],"mappings":";;;;;;;AAIA;;AAIA;;AAEA;;AAEA;;AAVA;AAYO,SAASA,gBAAT,CACLC,UADK,EAELC,QAFK,EAGLC,QAHK,EAILC,MAJK,EAKLC,MALK,EAMLC,IANK,EAOLC,UAA4B,yBAPvB,EAQkB;AACvB,MAAM;AAACC,WAAD;AAAUC,WAAV;AAAmBC;AAAnB,MAA8B,8BAAYT,UAAZ,EAAwBK,IAAxB,CAApC;AACA,MAAMK,WAAW,IAAIC,GAAJ,EAAjB;;AACA,WAASC,KAAT,CACEC,EADF,EAEE;AACAH,aAASI,GAAT,CAAaD,EAAb;AACD;;AACDH,WAASI,GAAT,CAAa,CAACC,OAAD,EAAUC,KAAV,KAAoBV,QAAQW,IAAR,CAAaF,OAAb,CAAjC,EARuB,CASvB;;AAEA,MAAMG,SAAUH,OAAD,KAAuB;AACpCI,UAAMV,SAD8B;AAEpCM,WAFoC;AAGpCK,UAAM;AACJC,aAAO,wBADH;AAEJd,aAFI;AAGJe,WAAKd;AAHD;AAH8B,GAAvB,CAAf;;AASA,WAASe,aAAT,CAAuBR,OAAvB,EAAyC;AACvC,QAAMS,SAASC,QAAQC,OAAR,CAAgBX,OAAhB,CAAf;AACA,QAAMY,SAAST,OAAOH,OAAP,CAAf;AACA,QAAIa,cAAc,IAAlB;AACA,6BACKD,MADL;AAEEE,YAA0B;AACxB,eAAOF,MAAP;AACD,OAJH;;AAKEG,WAAKC,YAAL,EAAmB;AACjB,YAAIH,WAAJ,EAAiB;AACf,cAAMI,aAAaD,eACfA,YADe,GAEf9B,QAFJ;AAGA2B,wBAAc,KAAd;AACAI,qBAAWL,MAAX;;AACA,eAAK,IAAMM,OAAX,IAAsBvB,QAAtB,EAAgC;AAC9BuB,oBAAQlB,OAAR,EAAiBb,UAAjB;AACD,WARc,CASf;;AACD;;AACD,eAAOsB,MAAP;AACD;;AAlBH;AAoBD;;AACDD,gBAAcd,OAAd,GAAwBA,OAAxB,CA7CuB,CA8CvB;;AACAc,gBAAcW,QAAd,GAAyBzB,OAAzB;AACAc,gBAAcX,KAAd,GAAsBA,KAAtB;AACAW,gBAAcY,IAAd,GAAqB,gBAAKlC,QAAL,EAAeE,MAAf,EAAuBG,OAAvB,CAArB;;AACAiB,gBAAca,SAAd,GAA2BC,UAAD,IAAgB/B,QAAQ8B,SAAR,CAAkBC,UAAlB,CAA1C;;AACA,+BAAWd,aAAX,EAA0BjB,OAA1B;AACAF,SAAOkC,GAAP,CAAW7B,SAAX,EAAsBc,aAAtB;AACA,SAAOA,aAAP;AACD","file":"event.js","sourcesContent":["//@flow\n\n// import type {Store} from 'redux'\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Event, RawAction} from './index.h'\n\nimport {nextPayloadID, type Tag} from './id'\n\nimport {port} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EventConstructor<State, Payload>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Payload> = subject()\n): Event<Payload, State> {\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n const handlers = new Set\n function watch<R>(\n fn: (params: Payload, state: State) => R\n ) {\n handlers.add(fn)\n }\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n\n const create = (payload: Payload) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n function eventInstance(payload: Payload) {\n const toSend = Promise.resolve(payload)\n const result = create(payload)\n let canDispatch = true\n return {\n ...result,\n raw(): RawAction<Payload> {\n return result\n },\n send(dispatchHook) {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(payload, getState())\n }\n // action$.next(payload)\n }\n return toSend\n },\n }\n }\n eventInstance.getType = getType\n //$off\n eventInstance.toString = getType\n eventInstance.watch = watch\n eventInstance.epic = port(dispatch, state$, action$)\n eventInstance.subscribe = (subscriber) => action$.subscribe(subscriber)\n observable(eventInstance, action$)\n events.set(getType(), eventInstance)\n return eventInstance\n}\n"]}
{"version":3,"sources":["../src/event.js"],"names":["EventConstructor","domainName","dispatch","getState","state$","events","name","action$","eventID","nextSeq","getType","handlers","Set","watch","fn","add","payload","state","next","create","type","meta","index","seq","eventInstance","toSend","Promise","resolve","result","canDispatch","raw","send","dispatchHook","dispatcher","handler","toString","epic","subscribe","subscriber","set"],"mappings":";;;;;;;AAIA;;AAIA;;AAEA;;AAEA;;AAVA;AAYO,SAASA,gBAAT,CACLC,UADK,EAELC,QAFK,EAGLC,QAHK,EAILC,MAJK,EAKLC,MALK,EAMLC,IANK,EAOLC,UAA4B,yBAPvB,EAQkB;AACvB,MAAM;AAACC,WAAD;AAAUC,WAAV;AAAmBC;AAAnB,MAA8B,8BAAYT,UAAZ,EAAwBK,IAAxB,CAApC;AACA,MAAMK,WAAW,IAAIC,GAAJ,EAAjB;;AACA,WAASC,KAAT,CACEC,EADF,EAEE;AACAH,aAASI,GAAT,CAAaD,EAAb;AACD;;AACDH,WAASI,GAAT,CAAa,CAACC,OAAD,EAAUC,KAAV,KAAoBV,QAAQW,IAAR,CAAaF,OAAb,CAAjC,EARuB,CASvB;;AAEA,MAAMG,SAAUH,OAAD,KAAuB;AACpCI,UAAMV,SAD8B;AAEpCM,WAFoC;AAGpCK,UAAM;AACJC,aAAO,wBADH;AAEJd,aAFI;AAGJe,WAAKd;AAHD;AAH8B,GAAvB,CAAf;;AASA,WAASe,aAAT,CAAuBR,OAAvB,EAAyC;AACvC,QAAMS,SAASC,QAAQC,OAAR,CAAgBX,OAAhB,CAAf;AACA,QAAMY,SAAST,OAAOH,OAAP,CAAf;AACA,QAAIa,cAAc,IAAlB;AACA,6BACKD,MADL;AAEEE,YAA0B;AACxB,eAAOF,MAAP;AACD,OAJH;;AAKEG,WAAKC,YAAL,EAAmB;AACjB,YAAIH,WAAJ,EAAiB;AACf,cAAMI,aAAaD,eACfA,YADe,GAEf9B,QAFJ;AAGA2B,wBAAc,KAAd;AACAI,qBAAWL,MAAX;;AACA,eAAK,IAAMM,OAAX,IAAsBvB,QAAtB,EAAgC;AAC9BuB,oBAAQlB,OAAR,EAAiBb,UAAjB;AACD,WARc,CASf;;AACD;;AACD,eAAOsB,MAAP;AACD;;AAlBH;AAoBD;;AACDD,gBAAcd,OAAd,GAAwBA,OAAxB,CA7CuB,CA8CvB;;AACAc,gBAAcW,QAAd,GAAyBzB,OAAzB;AACAc,gBAAcX,KAAd,GAAsBA,KAAtB;AACAW,gBAAcY,IAAd,GAAqB,gBAAKlC,QAAL,EAAeE,MAAf,EAAuBG,OAAvB,CAArB;;AACAiB,gBAAca,SAAd,GAA2BC,UAAD,IAAgB/B,QAAQ8B,SAAR,CAAkBC,UAAlB,CAA1C,CAlDuB,CAmDvB;AACA;AACA;;;AACA,+BAAWd,aAAX,EAA0BjB,OAA1B;AACAF,SAAOkC,GAAP,CAAW7B,SAAX,EAAsBc,aAAtB;AACA,SAAOA,aAAP;AACD","file":"event.js","sourcesContent":["//@flow\n\n// import type {Store} from 'redux'\nimport type {Stream} from 'most'\nimport {async as subject, type Subject} from 'most-subject'\n\nimport type {Event, RawAction} from './index.h'\n\nimport {nextPayloadID, type Tag} from './id'\n\nimport {port, safeDispatch} from './port'\n\nimport {basicCommon, observable} from './event-common'\n\nexport function EventConstructor<State, Payload>(\n domainName: string,\n dispatch: <T>(value: T) => T,\n getState: () => State,\n state$: Stream<State>,\n events: Map<string | Tag, Event<any, State>>,\n name: string,\n action$: Subject<Payload> = subject()\n): Event<Payload, State> {\n const {eventID, nextSeq, getType} = basicCommon(domainName, name)\n const handlers = new Set\n function watch<R>(\n fn: (params: Payload, state: State) => R\n ) {\n handlers.add(fn)\n }\n handlers.add((payload, state) => action$.next(payload))\n // handlers.add((payload, state) => state$.next(state))\n\n const create = (payload: Payload) => ({\n type: getType(),\n payload,\n meta: {\n index: nextPayloadID(),\n eventID,\n seq: nextSeq(),\n },\n })\n function eventInstance(payload: Payload) {\n const toSend = Promise.resolve(payload)\n const result = create(payload)\n let canDispatch = true\n return {\n ...result,\n raw(): RawAction<Payload> {\n return result\n },\n send(dispatchHook) {\n if (canDispatch) {\n const dispatcher = dispatchHook\n ? dispatchHook\n : dispatch\n canDispatch = false\n dispatcher(result)\n for (const handler of handlers) {\n handler(payload, getState())\n }\n // action$.next(payload)\n }\n return toSend\n },\n }\n }\n eventInstance.getType = getType\n //$off\n eventInstance.toString = getType\n eventInstance.watch = watch\n eventInstance.epic = port(dispatch, state$, action$)\n eventInstance.subscribe = (subscriber) => action$.subscribe(subscriber)\n // eventInstance.port = function port<R>(events$: Stream<R>) {\n // return events$.observe(data => safeDispatch(data, dispatch))\n // }\n observable(eventInstance, action$)\n events.set(getType(), eventInstance)\n return eventInstance\n}\n"]}

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.h.js"],"names":[],"mappings":";;AAEA","file":"index.h.js","sourcesContent":["//@flow\n\nimport {Stream} from 'most'\n\nimport type {ID, Tag} from './id'\n\ntype Handler<S, P, M={}> = (state: S, payload: P, meta?: M) => S\n\nexport type Store<S> = {\n dispatch: <T>(x: T) => T,\n getState(): S,\n subscribe(listener: any): () => void,\n replaceReducer(nextReducer: Reducer<S>): void,\n}\n\nexport type RawAction<P> = {\n type: string | Tag,\n payload: P,\n meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n },\n}\n\nexport type Domain<State = void> = {\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State>,\n event<Payload>(\n name: string\n ): Event<Payload, State>,\n domain(name: string): Domain<State>,\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State>,\n register: (store: Store<State>) => void,\n port<R>(events$: Stream<R>): void,\n}\n\nexport type Subscription<A> = {\n unsubscribe(): void\n}\n\nexport type Subscriber<A> = {\n next(value: A): void,\n error(err: Error): void,\n complete(value?: A): void,\n}\n\nexport type Event<Payload, State> = {\n (params: Payload): {\n send(dispatchHook?: <T>(value: T) => T): Promise<Payload>,\n raw(): RawAction<Payload>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Payload, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Payload>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n subscribe(subscriber: Subscriber<Payload>): Subscription<Payload>,\n}\n\nexport type Effect<Params, Done, Fail, State> = {\n (params: Params): {\n raw(): RawAction<Params>,\n send(dispatchHook?: <T>(value: T) => T): Promise<Params>,\n done(): Promise<{params: Params, result: Done}>,\n fail(): Promise<{params: Params, error: Fail}>,\n promise(): Promise<{params: Params, result: Done}>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Params, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Params>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n use(thunk: (params: Params) => Promise<Done>): void,\n subscribe(subscriber: Subscriber<Params>): Subscription<Params>,\n done: Event<{params: Params, result: Done}, State>,\n fail: Event<{params: Params, error: Fail}, State>,\n}\n\nexport type Reducer<S> = {\n (state?: S, action: RawAction<any>): S,\n options(opts: { fallback: boolean }): Reducer<S>,\n has(event: Event<any, any>): boolean,\n on<\n P, M,\n A/*: Event<P, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A, handler: (state: S, payload: P, meta?: M) => S): Reducer<S>,\n off<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>,\n reset<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>\n}\n\nexport type Handlers<S> = {\n [propertyName: string]: Handler<S, any, any>\n}\n\ntype functionOn<S, P, M={}> = (actionCreator: Event<P, any>, handler: Handler<S, P, M>) => Reducer<S>\ntype functionOff<S> = (actionCreator: Event<any, any>) => Reducer<S>\n\nexport type OnOff<S> = {\n (on: functionOn<S, any, any>, off: functionOff<S>): void;\n}\n\n"]}
{"version":3,"sources":["../src/index.h.js"],"names":[],"mappings":";;AAEA","file":"index.h.js","sourcesContent":["//@flow\n\nimport {Stream} from 'most'\n\nimport type {ID, Tag} from './id'\n\ntype Handler<S, P> = (state: S, payload: P, meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n }) => S\n\nexport type Store<S> = {\n dispatch: Function,\n getState(): S,\n subscribe(listener: any): () => void,\n replaceReducer(nextReducer: (state: S, action: any) => S): void,\n}\n\nexport type RawAction<P> = {\n type: string | Tag,\n payload: P,\n meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n },\n}\n\nexport type Domain<State = void> = {\n effect<Params, Done, Fail>(\n name: string\n ): Effect<Params, Done, Fail, State>,\n event<Payload>(\n name: string\n ): Event<Payload, State>,\n domain(name: string): Domain<State>,\n typeConstant<Payload>(\n name: string\n ): Event<Payload, State>,\n register: (store: Store<State>) => void,\n port<R>(events$: Stream<R>): Promise<void>,\n}\n\nexport type Subscription<A> = {\n unsubscribe(): void\n}\n\nexport type Subscriber<A> = {\n next(value: A): void,\n error(err: Error): void,\n complete(value?: A): void,\n}\n\nexport type Event<Payload, State> = {\n (params: Payload): {\n send(dispatchHook?: <T>(value: T) => T): Promise<Payload>,\n raw(): RawAction<Payload>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Payload, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Payload>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n subscribe(subscriber: Subscriber<Payload>): Subscription<Payload>,\n // port<R>(events$: Stream<R>): Promise<void>,\n}\n\nexport type Effect<Params, Done, Fail, State> = {\n (params: Params): {\n raw(): RawAction<Params>,\n send(dispatchHook?: <T>(value: T) => T): Promise<Params>,\n done(): Promise<{params: Params, result: Done}>,\n fail(): Promise<{params: Params, error: Fail}>,\n promise(): Promise<{params: Params, result: Done}>,\n },\n getType(): Tag,\n watch<R>(fn: (params: Params, state: State) => R): void,\n epic<R>(\n handler: (\n data$: Stream<Params>,\n state$: Stream<State>\n ) => Stream<R>\n ): Stream<R>,\n // port<R>(events$: Stream<R>): Promise<void>,\n use(thunk: (params: Params) => Promise<Done>): void,\n subscribe(subscriber: Subscriber<Params>): Subscription<Params>,\n done: Event<{params: Params, result: Done}, State>,\n fail: Event<{params: Params, error: Fail}, State>,\n}\n\nexport type Reducer<S> = {\n (state: S, action: RawAction<any>): S,\n options(opts: { fallback: boolean }): Reducer<S>,\n has(event: Event<any, any>): boolean,\n on<\n P,\n A/*: Event<P, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A, handler: (state: S, payload: P, meta: {\n index: ID,\n eventID: ID,\n seq: ID,\n }) => S): Reducer<S>,\n off<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>,\n reset<\n A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/\n >(event: A): Reducer<S>\n}\n\nexport type Handlers<S> = {\n [propertyName: string]: Handler<S, any>\n}\n\ntype functionOn<S, P> = (actionCreator: Event<P, any>, handler: Handler<S, P>) => Reducer<S>\ntype functionOff<S> = (actionCreator: Event<any, any>) => Reducer<S>\n\nexport type OnOff<S> = {\n (on: functionOn<S, any>, off: functionOff<S>): void;\n}\n\n"]}

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AACA;;AACA;;AACA","file":"index.js","sourcesContent":["//@flow\n\nexport type {Event, Effect, Domain, Reducer} from './index.h'\nexport {createDomain, rootDomain} from './domain'\nexport {effectorMiddleware} from './middleware'\nexport {createReducer} from './reducer'\nexport {joint} from './joint'\n"]}
{"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AACA;;AACA;;AACA","file":"index.js","sourcesContent":["//@flow\n\nexport type {Event, Effect, Domain, Reducer, Store} from './index.h'\nexport {createDomain, rootDomain} from './domain'\nexport {effectorMiddleware} from './middleware'\nexport {createReducer} from './reducer'\nexport {joint} from './joint'\n"]}

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/joint.js"],"names":["joint","combine","reducers","values","map","reducer","undefined","type","defaultValues","defaultState","lastState","combined","combinedReducer","state","action","changed","Set","i","length","prevValue","value","add","notChanged","size","rawResult","result","Object","assign"],"mappings":";;;;;;;AAGA;;AAHA;AAKO,SAASA,KAAT,CACLC,OADK,EAEL,GAAGC,QAFE,EAGO;AACZ,MAAMC,SAASD,SACZE,GADY,CACRC,WAAWA,QAAQC,SAAR,EAAmB;AAACC,UAAM;AAAP,GAAnB,CADH,CAAf;AAEA,MAAMC,gBAAgB,CAAC,GAAGL,MAAJ,CAAtB;AACA,MAAMM,eAAkBR,QAAQ,GAAGE,MAAX,CAAxB;AACA,MAAIO,YAAeD,YAAnB;AACA,MAAME,WAAW,4BAAcF,YAAd,EAA4B,EAA5B,EAAgCG,eAAhC,CAAjB;;AACA,WAASA,eAAT,CAAyBC,KAAzB,EAAgCC,MAAhC,EAA2C;AACzC,QAAMC,UAAuB,IAAIC,GAAJ,EAA7B;;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIf,SAASgB,MAA7B,EAAqCD,GAArC,EAA0C;AACxC,UAAME,YAAYhB,OAAOc,CAAP,CAAlB;AACA,UAAMG,QAAQlB,SAASe,CAAT,EAAYE,SAAZ,EAAuBL,MAAvB,CAAd;;AACA,UAAIM,UAAUD,SAAd,EAAyB;AACvBJ,gBAAQM,GAAR,CAAYJ,CAAZ;AACAd,eAAOc,CAAP,IAAYG,UAAUd,SAAV,GACRE,cAAcS,CAAd,CADQ,GAERG,KAFJ;AAGD;AACF;;AACD,QAAME,aAAaP,QAAQQ,IAAR,KAAiB,CAApC;AACA,QAAIC,SAAJ;AACA,QAAIF,UAAJ,EACEE,YAAYd,SAAZ,CADF,KAEK;AACHA,kBAAYc,YAAYvB,QACtB,GAAGE,MADmB,CAAxB;AAGD;AACD,QAAIqB,cAAclB,SAAlB,EACEI,YAAYc,YAAYf,YAAxB;AACF,QAAMgB,SAASd,SAASa,SAAT,EAAoBV,MAApB,CAAf;AACA,QAAIW,WAAWnB,SAAf,EACE,OAAOI,YAAYD,YAAnB;AACF,WAAOgB,MAAP;AACD;;AACDC,SAAOC,MAAP,CAAcf,eAAd,EAA+BD,QAA/B;AACA,SAAOC,eAAP;AACD","file":"joint.js","sourcesContent":["//@noflow\n\nimport type {Reducer} from './index.h'\nimport {createReducer} from './reducer'\n\nexport function joint<A, B, C, D, E, F, R>(\n combine: (A, B, C, D, E, F) => R,\n ...reducers: Array<Reducer<*>>\n): Reducer<R> {\n const values = reducers\n .map(reducer => reducer(undefined, {type: '@@effector/void'}))\n const defaultValues = [...values]\n const defaultState: C = combine(...values)\n let lastState: C = defaultState\n const combined = createReducer(defaultState, {}, combinedReducer)\n function combinedReducer(state, action): C {\n const changed: Set<number> = new Set()\n for (let i = 0; i < reducers.length; i++) {\n const prevValue = values[i]\n const value = reducers[i](prevValue, action)\n if (value !== prevValue) {\n changed.add(i)\n values[i] = value === undefined\n ? defaultValues[i]\n : value\n }\n }\n const notChanged = changed.size === 0\n let rawResult\n if (notChanged)\n rawResult = lastState\n else {\n lastState = rawResult = combine(\n ...values\n )\n }\n if (rawResult === undefined)\n lastState = rawResult = defaultState\n const result = combined(rawResult, action)\n if (result === undefined)\n return lastState = defaultState\n return result\n }\n Object.assign(combinedReducer, combined)\n return combinedReducer\n}\n"]}
{"version":3,"sources":["../src/joint.js"],"names":["joint","combine","reducers","values","map","reducer","undefined","type","defaultValues","defaultState","lastState","combined","combinedReducer","state","action","changed","Set","i","length","prevValue","value","add","notChanged","size","rawResult","result","Object","assign"],"mappings":";;;;;;;AAGA;;AAHA;AAKO,SAASA,KAAT,CACLC,OADK,EAEL,GAAGC,QAFE,EAGO;AACZ,MAAMC,SAASD,SACZE,GADY,CACRC,WAAWA,QAAQC,SAAR,EAAmB;AAACC,UAAM;AAAP,GAAnB,CADH,CAAf;AAEA,MAAMC,gBAAgB,CAAC,GAAGL,MAAJ,CAAtB;AACA,MAAMM,eAAkBR,QAAQ,GAAGE,MAAX,CAAxB;AACA,MAAIO,YAAeD,YAAnB;AACA,MAAME,WAAW,4BAAcF,YAAd,EAA4B,EAA5B,EAAgCG,eAAhC,CAAjB;;AACA,WAASA,eAAT,CAAyBC,KAAzB,EAAgCC,MAAhC,EAA2C;AACzC,QAAMC,UAAuB,IAAIC,GAAJ,EAA7B;;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIf,SAASgB,MAA7B,EAAqCD,GAArC,EAA0C;AACxC,UAAME,YAAYhB,OAAOc,CAAP,CAAlB;AACA,UAAMG,QAAQlB,SAASe,CAAT,EAAYE,SAAZ,EAAuBL,MAAvB,CAAd;;AACA,UAAIM,UAAUD,SAAd,EAAyB;AACvBJ,gBAAQM,GAAR,CAAYJ,CAAZ;AACAd,eAAOc,CAAP,IAAYG,UAAUd,SAAV,GACRE,cAAcS,CAAd,CADQ,GAERG,KAFJ;AAGD;AACF;;AACD,QAAME,aAAaP,QAAQQ,IAAR,KAAiB,CAApC;AACA,QAAIC,SAAJ;AACA,QAAIF,UAAJ,EACEE,YAAYd,SAAZ,CADF,KAEK;AACHA,kBAAYc,YAAYvB,QACtB,GAAGE,MADmB,CAAxB;AAGD;AACD,QAAIqB,cAAclB,SAAlB,EACEI,YAAYc,YAAYf,YAAxB;AACF,QAAMgB,SAASd,SAASa,SAAT,EAAoBV,MAApB,CAAf;AACA,QAAIW,WAAWnB,SAAf,EACE,OAAOI,YAAYD,YAAnB;AACF,WAAOgB,MAAP;AACD;;AACDC,SAAOC,MAAP,CAAcf,eAAd,EAA+BD,QAA/B;AACA,SAAOC,eAAP;AACD","file":"joint.js","sourcesContent":["//@noflow\n\nimport type {Reducer} from './index.h'\nimport {createReducer} from './reducer'\n\nexport function joint<A, B, C, D, E, F, R>(\n combine: (A, B, C, D, E, F) => R,\n ...reducers: Array<Reducer<*>>\n): Reducer<R> {\n const values = reducers\n .map(reducer => reducer(undefined, {type: '@@effector/void'}))\n const defaultValues = [...values]\n const defaultState: R = combine(...values)\n let lastState: R = defaultState\n const combined = createReducer(defaultState, {}, combinedReducer)\n function combinedReducer(state, action): R {\n const changed: Set<number> = new Set()\n for (let i = 0; i < reducers.length; i++) {\n const prevValue = values[i]\n const value = reducers[i](prevValue, action)\n if (value !== prevValue) {\n changed.add(i)\n values[i] = value === undefined\n ? defaultValues[i]\n : value\n }\n }\n const notChanged = changed.size === 0\n let rawResult\n if (notChanged)\n rawResult = lastState\n else {\n lastState = rawResult = combine(\n ...values\n )\n }\n if (rawResult === undefined)\n lastState = rawResult = defaultState\n const result = combined(rawResult, action)\n if (result === undefined)\n return lastState = defaultState\n return result\n }\n Object.assign(combinedReducer, combined)\n return combinedReducer\n}\n"]}

@@ -35,3 +35,3 @@ "use strict";

function reset(typeOrActionCreator) {
on(typeOrActionCreator, () => opts.defaultState);
on(typeOrActionCreator, (state, payload, meta) => opts.defaultState);
return returnType;

@@ -38,0 +38,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/reducer.js"],"names":["normalizeType","typeOrActionCreator","getType","toString","createReducer","defaultState","handlers","thisType","opts","fallback","reducer","Object","assign","reduce","has","on","off","options","reset","returnType","handler","Array","isArray","forEach","action","newOpts","keys","name","factory","state","type","startsWith","String","result","payload","meta","undefined"],"mappings":";;;;;;;AASA,SAASA,aAAT,CAAuBC,mBAAvB,EAA4C;AAC1C,MAAIA,uBAAuBA,oBAAoBC,OAA/C,EAAwD;AACtD,WAAOD,oBAAoBE,QAApB,EAAP;AACD;;AACD,SAAOF,mBAAP;AACD;;AAEM,SAASG,aAAT,CACLC,YADK,EAELC,WAAmC,EAF9B,EAGLC,QAHK,EAIO;AACZ,MAAMC,OAAO;AACXC,cAAU,IADC;AAEXJ;AAFW,GAAb;AAKA,MAAMK,UAAUC,OAAOC,MAAP,CAAcC,MAAd,EAAsB;AACpCC,OADoC;AAC/BC,MAD+B;AAC3BC,OAD2B;AACtBC,WADsB;AACbC;AADa,GAAtB,CAAhB;AAGA,MAAMC,aAAaZ,WACfA,QADe,GAEfG,OAFJ;;AAIA,WAASI,GAAT,CAAab,mBAAb,EAAkC;AAChC,WAAO,CAAC,CAACK,SAASN,cAAcC,mBAAd,CAAT,CAAT;AACD;;AAED,WAASiB,KAAT,CAAejB,mBAAf,EAAoC;AAClCc,OAAGd,mBAAH,EAAwB,MAAMO,KAAKH,YAAnC;AACA,WAAOc,UAAP;AACD;;AAED,WAASJ,EAAT,CAAYd,mBAAZ,EAAiCmB,OAAjC,EAA0C;AACxC,QAAIC,MAAMC,OAAN,CAAcrB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoBsB,OAApB,CAA4BC,UAAU;AACpCT,WAAGS,MAAH,EAAWJ,OAAX;AACD,OAFD;AAGD,KAJD,MAIO;AACLd,eAASN,cAAcC,mBAAd,CAAT,IAA+CmB,OAA/C;AACD;;AAED,WAAOD,UAAP;AACD;;AAED,WAASH,GAAT,CAAaf,mBAAb,EAAkC;AAChC,QAAIoB,MAAMC,OAAN,CAAcrB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoBsB,OAApB,CAA4BP,GAA5B;AACD,KAFD,MAEO;AACL,aAAOV,SAASN,cAAcC,mBAAd,CAAT,CAAP;AACD;;AACD,WAAOkB,UAAP;AACD;;AAED,WAASF,OAAT,CAAiBQ,OAAjB,EAA0B;AACxB;AACAd,WAAOe,IAAP,CAAYD,OAAZ,EAAqBF,OAArB,CAA6BI,QAAQnB,KAAKmB,IAAL,IAAaF,QAAQE,IAAR,CAAlD;AACA,WAAOR,UAAP;AACD;;AAED,MAAI,OAAOb,QAAP,KAAoB,UAAxB,EAAoC;AAClC,QAAMsB,UAAUtB,QAAhB,CADkC,CAElC;;AACAA,eAAW,EAAX;AACAsB,YAAQb,EAAR,EAAYC,GAAZ;AACD;;AAED,WAASH,MAAT,CAAmBgB,QAAWrB,KAAKH,YAAnC,EAAiDmB,MAAjD,EAAuE;AACrE,QAAI,CAACA,MAAD,IAAY,OAAOA,OAAOM,IAAd,KAAuB,QAAvC,EAAkD;AAAE,aAAOD,KAAP;AAAc;;AAClE,QAAIL,OAAOM,IAAP,CAAYC,UAAZ,CAAuB,UAAvB,CAAJ,EAAwC;AAAE,aAAOF,KAAP;AAAc;;AAExD,QAAMT,UAAUd,SAAS0B,OAAOR,OAAOM,IAAd,CAAT,KAAiCtB,KAAKC,QAAtD;;AACA,QAAIW,OAAJ,EAAa;AACX,UAAMa,SAASb,QAAQS,KAAR,EAAeL,OAAOU,OAAtB,EAA+BV,OAAOW,IAAtC,CAAf;AACA,UAAIF,WAAWG,SAAf,EACE,OAAO5B,KAAKH,YAAZ;AACF,aAAO4B,MAAP;AACD;;AAED,WAAOJ,KAAP;AACD;;AAED,SAAOnB,OAAP;AACD","file":"reducer.js","sourcesContent":["// @flow\n\nimport type {\n RawAction,\n Reducer,\n Handlers,\n OnOff\n} from './index.h'\n\nfunction normalizeType(typeOrActionCreator) {\n if (typeOrActionCreator && typeOrActionCreator.getType) {\n return typeOrActionCreator.toString()\n }\n return typeOrActionCreator\n}\n\nexport function createReducer<S>(\n defaultState: S,\n handlers: Handlers<S> | OnOff<S> = {},\n thisType?: Reducer<S>\n): Reducer<S> {\n const opts = {\n fallback: null,\n defaultState,\n }\n\n const reducer = Object.assign(reduce, {\n has, on, off, options, reset\n })\n const returnType = thisType\n ? thisType\n : reducer\n\n function has(typeOrActionCreator) {\n return !!handlers[normalizeType(typeOrActionCreator)]\n }\n\n function reset(typeOrActionCreator) {\n on(typeOrActionCreator, () => opts.defaultState)\n return returnType\n }\n\n function on(typeOrActionCreator, handler) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(action => {\n on(action, handler)\n })\n } else {\n handlers[normalizeType(typeOrActionCreator)] = handler\n }\n\n return returnType\n }\n\n function off(typeOrActionCreator) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(off)\n } else {\n delete handlers[normalizeType(typeOrActionCreator)]\n }\n return returnType\n }\n\n function options(newOpts) {\n // $off\n Object.keys(newOpts).forEach(name => opts[name] = newOpts[name])\n return returnType\n }\n\n if (typeof handlers === 'function') {\n const factory = handlers\n // $off\n handlers = {}\n factory(on, off)\n }\n\n function reduce<P>(state: S = opts.defaultState, action: RawAction<P>) {\n if (!action || (typeof action.type !== 'string')) { return state }\n if (action.type.startsWith('@@redux/')) { return state }\n\n const handler = handlers[String(action.type)] || opts.fallback\n if (handler) {\n const result = handler(state, action.payload, action.meta)\n if (result === undefined)\n return opts.defaultState\n return result\n }\n\n return state\n }\n\n return reducer\n}"]}
{"version":3,"sources":["../src/reducer.js"],"names":["normalizeType","typeOrActionCreator","getType","toString","createReducer","defaultState","handlers","thisType","opts","fallback","reducer","Object","assign","reduce","has","on","off","options","reset","returnType","state","payload","meta","handler","Array","isArray","forEach","action","newOpts","keys","name","factory","type","startsWith","String","result","undefined"],"mappings":";;;;;;;AASA,SAASA,aAAT,CAAuBC,mBAAvB,EAA4C;AAC1C,MAAIA,uBAAuBA,oBAAoBC,OAA/C,EAAwD;AACtD,WAAOD,oBAAoBE,QAApB,EAAP;AACD;;AACD,SAAOF,mBAAP;AACD;;AAEM,SAASG,aAAT,CACLC,YADK,EAELC,WAAmC,EAF9B,EAGLC,QAHK,EAIO;AACZ,MAAMC,OAGF;AACFC,cAAU,IADR;AAEFJ;AAFE,GAHJ;AAQA,MAAMK,UAAUC,OAAOC,MAAP,CAAcC,MAAd,EAAsB;AACpCC,OADoC;AAC/BC,MAD+B;AAC3BC,OAD2B;AACtBC,WADsB;AACbC;AADa,GAAtB,CAAhB;AAGA,MAAMC,aAAaZ,WACfA,QADe,GAEfG,OAFJ;;AAIA,WAASI,GAAT,CAAab,mBAAb,EAAkC;AAChC,WAAO,CAAC,CAACK,SAASN,cAAcC,mBAAd,CAAT,CAAT;AACD;;AAED,WAASiB,KAAT,CAAejB,mBAAf,EAAoC;AAClCc,OAAGd,mBAAH,EAAwB,CAACmB,KAAD,EAAWC,OAAX,EAAyBC,IAAzB,KAAqCd,KAAKH,YAAlE;AACA,WAAOc,UAAP;AACD;;AAED,WAASJ,EAAT,CAAYd,mBAAZ,EAAiCsB,OAAjC,EAA0C;AACxC,QAAIC,MAAMC,OAAN,CAAcxB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoByB,OAApB,CAA4BC,UAAU;AACpCZ,WAAGY,MAAH,EAAWJ,OAAX;AACD,OAFD;AAGD,KAJD,MAIO;AACLjB,eAASN,cAAcC,mBAAd,CAAT,IAA+CsB,OAA/C;AACD;;AAED,WAAOJ,UAAP;AACD;;AAED,WAASH,GAAT,CAAaf,mBAAb,EAAkC;AAChC,QAAIuB,MAAMC,OAAN,CAAcxB,mBAAd,CAAJ,EAAwC;AACtCA,0BAAoByB,OAApB,CAA4BV,GAA5B;AACD,KAFD,MAEO;AACL,aAAOV,SAASN,cAAcC,mBAAd,CAAT,CAAP;AACD;;AACD,WAAOkB,UAAP;AACD;;AAED,WAASF,OAAT,CAAiBW,OAAjB,EAA0B;AACxB;AACAjB,WAAOkB,IAAP,CAAYD,OAAZ,EAAqBF,OAArB,CAA6BI,QAAQtB,KAAKsB,IAAL,IAAaF,QAAQE,IAAR,CAAlD;AACA,WAAOX,UAAP;AACD;;AAED,MAAI,OAAOb,QAAP,KAAoB,UAAxB,EAAoC;AAClC,QAAMyB,UAAUzB,QAAhB,CADkC,CAElC;;AACAA,eAAW,EAAX;AACAyB,YAAQhB,EAAR,EAAYC,GAAZ;AACD;;AAED,WAASH,MAAT,CAAmBO,QAAWZ,KAAKH,YAAnC,EAAiDsB,MAAjD,EAAuE;AACrE,QAAI,CAACA,MAAD,IAAY,OAAOA,OAAOK,IAAd,KAAuB,QAAvC,EAAkD;AAAE,aAAOZ,KAAP;AAAc;;AAClE,QAAIO,OAAOK,IAAP,CAAYC,UAAZ,CAAuB,UAAvB,CAAJ,EAAwC;AAAE,aAAOb,KAAP;AAAc;;AAExD,QAAMG,UAAUjB,SAAS4B,OAAOP,OAAOK,IAAd,CAAT,KAAiCxB,KAAKC,QAAtD;;AACA,QAAIc,OAAJ,EAAa;AACX,UAAMY,SAASZ,QAAQH,KAAR,EAAeO,OAAON,OAAtB,EAA+BM,OAAOL,IAAtC,CAAf;AACA,UAAIa,WAAWC,SAAf,EACE,OAAO5B,KAAKH,YAAZ;AACF,aAAO8B,MAAP;AACD;;AAED,WAAOf,KAAP;AACD;;AAED,SAAOV,OAAP;AACD","file":"reducer.js","sourcesContent":["// @flow\n\nimport type {\n RawAction,\n Reducer,\n Handlers,\n OnOff\n} from './index.h'\n\nfunction normalizeType(typeOrActionCreator) {\n if (typeOrActionCreator && typeOrActionCreator.getType) {\n return typeOrActionCreator.toString()\n }\n return typeOrActionCreator\n}\n\nexport function createReducer<S>(\n defaultState: S,\n handlers: Handlers<S> | OnOff<S> = {},\n thisType?: Reducer<S>\n): Reducer<S> {\n const opts: {\n defaultState: S,\n fallback: null | (state: S, payload: any, meta: *) => S\n } = {\n fallback: null,\n defaultState,\n }\n\n const reducer = Object.assign(reduce, {\n has, on, off, options, reset\n })\n const returnType = thisType\n ? thisType\n : reducer\n\n function has(typeOrActionCreator) {\n return !!handlers[normalizeType(typeOrActionCreator)]\n }\n\n function reset(typeOrActionCreator) {\n on(typeOrActionCreator, (state: S, payload: any, meta: *) => opts.defaultState)\n return returnType\n }\n\n function on(typeOrActionCreator, handler) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(action => {\n on(action, handler)\n })\n } else {\n handlers[normalizeType(typeOrActionCreator)] = handler\n }\n\n return returnType\n }\n\n function off(typeOrActionCreator) {\n if (Array.isArray(typeOrActionCreator)) {\n typeOrActionCreator.forEach(off)\n } else {\n delete handlers[normalizeType(typeOrActionCreator)]\n }\n return returnType\n }\n\n function options(newOpts) {\n // $off\n Object.keys(newOpts).forEach(name => opts[name] = newOpts[name])\n return returnType\n }\n\n if (typeof handlers === 'function') {\n const factory = handlers\n // $off\n handlers = {}\n factory(on, off)\n }\n\n function reduce<P>(state: S = opts.defaultState, action: RawAction<P>) {\n if (!action || (typeof action.type !== 'string')) { return state }\n if (action.type.startsWith('@@redux/')) { return state }\n\n const handler = handlers[String(action.type)] || opts.fallback\n if (handler) {\n const result = handler(state, action.payload, action.meta)\n if (result === undefined)\n return opts.defaultState\n return result\n }\n\n return state\n }\n\n return reducer\n}"]}
{
"name": "effector",
"version": "0.7.3",
"version": "0.7.4",
"description": "Redux effects",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

@@ -6,3 +6,2 @@ //@flow

applyMiddleware,
type Store,
type Reducer,

@@ -12,4 +11,11 @@ type Middleware,

} from 'redux'
import {from} from 'most'
import {createDomain, type Domain, type Event, rootDomain, effectorMiddleware} from '..'
import {from, periodic} from 'most'
import {
createDomain,
type Store,
type Event,
type Domain,
rootDomain,
effectorMiddleware,
} from '..'

@@ -22,5 +28,3 @@ test('smoke', async() => {

(s, x) => (fn(x), console.log(x), s),
applyMiddleware(
effectorMiddleware
)
applyMiddleware(effectorMiddleware),
)

@@ -49,5 +53,3 @@ const domain = createDomain(store)

(s, x) => (fn(x), console.log(x), s),
applyMiddleware(
effectorMiddleware
)
applyMiddleware(effectorMiddleware),
)

@@ -60,7 +62,3 @@ const domain = createDomain(store)

const event: Event<'ev', {foo: 'bar'}> = domain.event('event1')
event.epic(
data$ => data$.map(
effect
)
)
event.epic(data$ => data$.map(effect))
await event('ev').send()

@@ -71,2 +69,29 @@ expect(used).toHaveBeenCalledTimes(1)

test('port', async() => {
const fn = jest.fn()
const used = jest.fn((state, x) => console.log(x, state))
const usedEff = jest.fn((state, x) => console.log(x, state))
const store: Store<{foo: 'bar'}> = createStore(
(s, x) => (fn(x), console.log(x), s),
applyMiddleware(effectorMiddleware),
)
const domain: Domain<{ foo: 'bar' }> = createDomain(store)
const event = domain.event('port-event')
const eff = domain.event('port-effect')
event.watch(used)
eff.watch(usedEff)
const str$ = periodic(100)
.scan((a, b) => a + b, 0)
.take(10)
// .map(event)
domain.port(str$.map(event))
await new Promise(rs => setTimeout(rs, 1500))
expect(used).toHaveBeenCalledTimes(10)
domain.port(str$.map(eff))
await new Promise(rs => setTimeout(rs, 1500))
expect(usedEff).toHaveBeenCalledTimes(10)
})
test('both return and send', async() => {

@@ -78,9 +103,6 @@ const fn = jest.fn()

(s, x) => (fn(x), console.log(x), s),
applyMiddleware(
effectorMiddleware
)
applyMiddleware(effectorMiddleware),
)
const domain = rootDomain()
const effect = domain.effect('eff')

@@ -90,7 +112,3 @@ effect.use(used)

const event: Event<'ev', {foo: 'bar'}> = domain.event('event1')
event.epic(
data$ => data$.map(
e => effect(e).send()
)
)
event.epic(data$ => data$.map(e => effect(e).send()))
domain.register(store)

@@ -107,5 +125,3 @@ await event('ev').send()

(s, x) => (fn(x), console.log(x), s),
applyMiddleware(
effectorMiddleware
)
applyMiddleware(effectorMiddleware),
)

@@ -116,3 +132,7 @@ const domain = createDomain(store, 'with-prefix')

expect(event.getType()).toBe('TYPE_CONST')
event.epic(data$ => data$.map(e => { used(e) }))
event.epic(data$ =>
data$.map(e => {
used(e)
}),
)

@@ -132,5 +152,3 @@ console.log(event)

(s, x) => s,
applyMiddleware(
effectorMiddleware
)
applyMiddleware(effectorMiddleware),
)

@@ -137,0 +155,0 @@ const domain = createDomain(store)

@@ -28,4 +28,4 @@ // @flow

.reset(reset)
const state1 = reducer(undefined, event1('ev').raw())
const none: any = undefined
const state1 = reducer(none, event1('ev').raw())
expect(state1).toMatchSnapshot()

@@ -43,3 +43,3 @@ const state2 = reducer(state1, event2('ev2').raw())

const event3: Event<'ev3', State> = domain.event('event3')
const reset: Event<void, State> = domain.event('reset')
const reset: Event<mixed, State> = domain.event('reset')

@@ -56,3 +56,3 @@ const reducerA: Reducer<{

}> = createReducer({resets: 0})
.on(reset, (state, payload) => ({
.on(reset, (state) => ({
resets: state.resets + 1,

@@ -72,5 +72,7 @@ }))

}))
const state1 = union(undefined, event1('ev').raw())
.on(event2, (e, event) => e)
const none: any = undefined
const state1 = union(none, event1('ev').raw())
expect(state1).toMatchSnapshot()
const state2 = union(state1, reset().raw())
const state2 = union(state1, reset('').raw())
expect(state2).toMatchSnapshot()

@@ -77,0 +79,0 @@ const state3 = union(state2, event2('ev2').raw())

@@ -11,3 +11,3 @@ //@flow

import {port} from './port'
import {safeDispatch} from './port'
import {EventConstructor} from './event'

@@ -106,4 +106,4 @@ import {EffectConstructor} from './effect'

return {
port<R>(events$: Stream<R>) {
port(dispatch, state$, events$)
port<R>(events$: Stream<R>): Promise<void> {
return events$.observe(data => { safeDispatch(data, dispatch) })
},

@@ -110,0 +110,0 @@ register(store) {

@@ -134,2 +134,5 @@ //@flow

effect.epic = port(dispatch, state$, action$)
// effect.port = function port<R>(events$: Stream<R>) {
// return events$.observe(data => safeDispatch(data, dispatch))
// }
effect.subscribe = (subscriber) => action$.subscribe(subscriber)

@@ -136,0 +139,0 @@ observable(effect, action$)

@@ -11,3 +11,3 @@ //@flow

import {port} from './port'
import {port, safeDispatch} from './port'

@@ -75,2 +75,5 @@ import {basicCommon, observable} from './event-common'

eventInstance.subscribe = (subscriber) => action$.subscribe(subscriber)
// eventInstance.port = function port<R>(events$: Stream<R>) {
// return events$.observe(data => safeDispatch(data, dispatch))
// }
observable(eventInstance, action$)

@@ -77,0 +80,0 @@ events.set(getType(), eventInstance)

@@ -7,9 +7,13 @@ //@flow

type Handler<S, P, M={}> = (state: S, payload: P, meta?: M) => S
type Handler<S, P> = (state: S, payload: P, meta: {
index: ID,
eventID: ID,
seq: ID,
}) => S
export type Store<S> = {
dispatch: <T>(x: T) => T,
dispatch: Function,
getState(): S,
subscribe(listener: any): () => void,
replaceReducer(nextReducer: Reducer<S>): void,
replaceReducer(nextReducer: (state: S, action: any) => S): void,
}

@@ -39,3 +43,3 @@

register: (store: Store<State>) => void,
port<R>(events$: Stream<R>): void,
port<R>(events$: Stream<R>): Promise<void>,
}

@@ -67,2 +71,3 @@

subscribe(subscriber: Subscriber<Payload>): Subscription<Payload>,
// port<R>(events$: Stream<R>): Promise<void>,
}

@@ -86,2 +91,3 @@

): Stream<R>,
// port<R>(events$: Stream<R>): Promise<void>,
use(thunk: (params: Params) => Promise<Done>): void,

@@ -94,9 +100,13 @@ subscribe(subscriber: Subscriber<Params>): Subscription<Params>,

export type Reducer<S> = {
(state?: S, action: RawAction<any>): S,
(state: S, action: RawAction<any>): S,
options(opts: { fallback: boolean }): Reducer<S>,
has(event: Event<any, any>): boolean,
on<
P, M,
P,
A/*: Event<P, any> | $ReadOnlyArray<Event<any, any>>*/
>(event: A, handler: (state: S, payload: P, meta?: M) => S): Reducer<S>,
>(event: A, handler: (state: S, payload: P, meta: {
index: ID,
eventID: ID,
seq: ID,
}) => S): Reducer<S>,
off<

@@ -111,11 +121,11 @@ A/*: Event<any, any> | $ReadOnlyArray<Event<any, any>>*/

export type Handlers<S> = {
[propertyName: string]: Handler<S, any, any>
[propertyName: string]: Handler<S, any>
}
type functionOn<S, P, M={}> = (actionCreator: Event<P, any>, handler: Handler<S, P, M>) => Reducer<S>
type functionOn<S, P> = (actionCreator: Event<P, any>, handler: Handler<S, P>) => Reducer<S>
type functionOff<S> = (actionCreator: Event<any, any>) => Reducer<S>
export type OnOff<S> = {
(on: functionOn<S, any, any>, off: functionOff<S>): void;
(on: functionOn<S, any>, off: functionOff<S>): void;
}
//@flow
export type {Event, Effect, Domain, Reducer} from './index.h'
export type {Event, Effect, Domain, Reducer, Store} from './index.h'
export {createDomain, rootDomain} from './domain'

@@ -5,0 +5,0 @@ export {effectorMiddleware} from './middleware'

@@ -13,6 +13,6 @@ //@noflow

const defaultValues = [...values]
const defaultState: C = combine(...values)
let lastState: C = defaultState
const defaultState: R = combine(...values)
let lastState: R = defaultState
const combined = createReducer(defaultState, {}, combinedReducer)
function combinedReducer(state, action): C {
function combinedReducer(state, action): R {
const changed: Set<number> = new Set()

@@ -19,0 +19,0 @@ for (let i = 0; i < reducers.length; i++) {

@@ -22,3 +22,6 @@ // @flow

): Reducer<S> {
const opts = {
const opts: {
defaultState: S,
fallback: null | (state: S, payload: any, meta: *) => S
} = {
fallback: null,

@@ -40,3 +43,3 @@ defaultState,

function reset(typeOrActionCreator) {
on(typeOrActionCreator, () => opts.defaultState)
on(typeOrActionCreator, (state: S, payload: any, meta: *) => opts.defaultState)
return returnType

@@ -43,0 +46,0 @@ }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet