ayanami
Version:
A better way to react with state
39 lines (38 loc) • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SSREffect = exports.reqMap = exports.SKIP_SYMBOL = void 0;
var tslib_1 = require("tslib");
var operators_1 = require("rxjs/operators");
var constants_1 = require("./constants");
var flag_1 = require("./flag");
var decorators_1 = require("../core/decorators");
exports.SKIP_SYMBOL = Symbol('skip');
exports.reqMap = new Map();
function addDecorator(target, method, middleware) {
var existedMetas = Reflect.getMetadata(constants_1.SSRSymbol, target);
var meta = { action: method, middleware: middleware };
if (existedMetas) {
existedMetas.push(meta);
}
else {
Reflect.defineMetadata(constants_1.SSRSymbol, [meta], target);
}
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
function SSREffect(options) {
var _a = tslib_1.__assign({ payloadGetter: undefined, skipFirstClientDispatch: true }, options), payloadGetter = _a.payloadGetter, skipFirstClientDispatch = _a.skipFirstClientDispatch;
return function (target, method, descriptor) {
addDecorator(target, method, payloadGetter);
if (!flag_1.isSSREnabled() && skipFirstClientDispatch) {
var originalValue_1 = descriptor.value;
descriptor.value = function (action$, state$) {
if (Reflect.getMetadata(this.ssrLoadKey, this)) {
return originalValue_1.call(this, action$.pipe(operators_1.skip(1)), state$);
}
return originalValue_1.call(this, action$, state$);
};
}
return decorators_1.Effect()(target, method, descriptor);
};
}
exports.SSREffect = SSREffect;