+4
-2
| 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
@@ -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"]} |
+3
-1
@@ -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
@@ -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":"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;;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.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"]} |
+5
-2
| // 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
@@ -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
@@ -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
@@ -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"]} |
+1
-1
@@ -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}"]} |
+3
-1
@@ -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"]} |
+3
-1
@@ -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":"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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":["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"]} |
+4
-1
@@ -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
@@ -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
@@ -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
@@ -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"]} |
+1
-1
@@ -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}"]} |
+1
-1
| { | ||
| "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()) |
+3
-3
@@ -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) { |
+3
-0
@@ -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$) |
+4
-1
@@ -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) |
+20
-10
@@ -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; | ||
| } | ||
+1
-1
| //@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' |
+3
-3
@@ -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++) { |
+5
-2
@@ -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
193384
3.69%2048
2.5%