( nameOrConfig?: any, maybeConfig?: any, )
| 150 | } |
| 151 | |
| 152 | export function createEvent<Payload = any>( |
| 153 | nameOrConfig?: any, |
| 154 | maybeConfig?: any, |
| 155 | ): Event<Payload> { |
| 156 | const config = flattenConfig({ |
| 157 | or: maybeConfig, |
| 158 | and: typeof nameOrConfig === 'string' ? {name: nameOrConfig} : nameOrConfig, |
| 159 | }) as any |
| 160 | const errorTitle = generateErrorTitle('event', config) |
| 161 | const event = ((payload: Payload, ...args: unknown[]) => { |
| 162 | assert( |
| 163 | !getMeta(event, 'derived'), |
| 164 | 'call of derived event is not supported, use createEvent instead', |
| 165 | errorTitle, |
| 166 | ) |
| 167 | assert( |
| 168 | !isPure, |
| 169 | 'unit call from pure function is not supported, use operators like sample instead', |
| 170 | errorTitle, |
| 171 | ) |
| 172 | if (currentPage) { |
| 173 | return callCreate(event, template, payload, args) |
| 174 | } |
| 175 | return event.create(payload, args) |
| 176 | }) as Event<Payload> |
| 177 | const template = readTemplate() |
| 178 | const finalEvent = Object.assign(event, { |
| 179 | graphite: createNode({ |
| 180 | meta: initUnit( |
| 181 | config.actualOp || EVENT, |
| 182 | event, |
| 183 | config, |
| 184 | getUnitTrace(createEvent), |
| 185 | ), |
| 186 | regional: true, |
| 187 | }), |
| 188 | create(params: Payload, _: any[]) { |
| 189 | launch({target: event, params, scope: forkPage!}) |
| 190 | return params |
| 191 | }, |
| 192 | watch: (fn: (payload: Payload) => any) => watchUnit(event, fn), |
| 193 | map: (fn: Function) => deriveEvent(event, MAP, fn, [userFnCall()]), |
| 194 | filter: (fn: {fn: Function}) => |
| 195 | //@ts-expect-error |
| 196 | deriveEvent(event, 'filter', fn.fn ? fn : fn.fn, [ |
| 197 | userFnCall(callStack, true), |
| 198 | ]), |
| 199 | filterMap: (fn: Function) => |
| 200 | deriveEvent(event, 'filterMap', fn, [ |
| 201 | userFnCall(), |
| 202 | calc(value => !isVoid(value), true), |
| 203 | ]), |
| 204 | prepend(fn: Function) { |
| 205 | assert( |
| 206 | // @ts-expect-error |
| 207 | event.targetable, |
| 208 | '.prepend of derived event is not supported, call source event instead', |
| 209 | errorTitle, |
searching dependent graphs…