UNPKG

ayanami

Version:
38 lines (37 loc) 1.41 kB
import { skip } from 'rxjs/operators'; import { SSRSymbol } from './constants'; import { isSSREnabled } from './flag'; import { Effect } from '../core/decorators'; export const SKIP_SYMBOL = Symbol('skip'); export const reqMap = new Map(); function addDecorator(target, method, middleware) { const existedMetas = Reflect.getMetadata(SSRSymbol, target); const meta = { action: method, middleware }; if (existedMetas) { existedMetas.push(meta); } else { Reflect.defineMetadata(SSRSymbol, [meta], target); } } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function SSREffect(options) { const { payloadGetter, skipFirstClientDispatch } = { payloadGetter: undefined, skipFirstClientDispatch: true, ...options, }; return (target, method, descriptor) => { addDecorator(target, method, payloadGetter); if (!isSSREnabled() && skipFirstClientDispatch) { const originalValue = descriptor.value; descriptor.value = function (action$, state$) { if (Reflect.getMetadata(this.ssrLoadKey, this)) { return originalValue.call(this, action$.pipe(skip(1)), state$); } return originalValue.call(this, action$, state$); }; } return Effect()(target, method, descriptor); }; }