(
nameOrConfig: any,
maybeConfig: any = {},
)
| 31 | } |
| 32 | |
| 33 | export function createEffect<Params, Done, Fail = Error>( |
| 34 | nameOrConfig: any, |
| 35 | maybeConfig: any = {}, |
| 36 | ): Effect<Params, Done, Fail> { |
| 37 | const config = flattenConfig( |
| 38 | isFunction(nameOrConfig) ? {handler: nameOrConfig} : nameOrConfig, |
| 39 | maybeConfig, |
| 40 | ) |
| 41 | const errorTitle = generateErrorTitle('effect', config) |
| 42 | const instance = createEvent( |
| 43 | isFunction(nameOrConfig) ? {handler: nameOrConfig} : nameOrConfig, |
| 44 | {...maybeConfig, actualOp: EFFECT}, |
| 45 | ) as unknown as Effect<Params, Done, Fail> |
| 46 | setUnitTrace(instance, getUnitTrace(createEffect)) |
| 47 | const node = getGraph(instance) |
| 48 | setMeta(node, 'op', (instance.kind = EFFECT)) |
| 49 | //@ts-expect-error |
| 50 | instance.use = (fn: Function) => { |
| 51 | assert(isFunction(fn), '.use argument should be a function', errorTitle) |
| 52 | runner.scope.handler = fn |
| 53 | return instance |
| 54 | } |
| 55 | instance.use.getCurrent = () => runner.scope.handler |
| 56 | const anyway = (instance.finally = createEvent({ |
| 57 | named: 'finally', |
| 58 | derived: true, |
| 59 | })) |
| 60 | const done = (instance.done = (anyway as any).filterMap({ |
| 61 | named: 'done', |
| 62 | fn({ |
| 63 | status, |
| 64 | params, |
| 65 | result, |
| 66 | }: { |
| 67 | status: 'done' | 'fail' |
| 68 | params: Params |
| 69 | result: Done |
| 70 | error: Fail |
| 71 | }) { |
| 72 | if (status === 'done') return {params, result} |
| 73 | }, |
| 74 | })) |
| 75 | const fail = (instance.fail = (anyway as any).filterMap({ |
| 76 | named: 'fail', |
| 77 | fn({ |
| 78 | status, |
| 79 | params, |
| 80 | error, |
| 81 | }: { |
| 82 | status: 'done' | 'fail' |
| 83 | params: Params |
| 84 | result: Done |
| 85 | error: Fail |
| 86 | }) { |
| 87 | if (status === 'fail') return {params, error} |
| 88 | }, |
| 89 | })) |
| 90 | const doneData = (instance.doneData = done.map({ |
searching dependent graphs…