respond-framework
Version:
create as fast you think
49 lines (48 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _reserved = require("./reserved.js");
var _createEvents = require("./createEvents.js");
var _cloneDeep = require("../proxy/helpers/cloneDeep.js");
var _utils = require("../utils.js");
const extractModuleAspects = (mod, state) => {
const events = {
...mod.events
};
const reducers = {
...mod.reducers
};
const descriptors = Object.getOwnPropertyDescriptors(mod);
const selectors = mod.selectors?.__esModule ? {
...mod.selectors
} : mod.selectors ?? {};
const selectorDescriptors = Object.getOwnPropertyDescriptors(selectors);
Object.keys(descriptors).forEach(k => {
if (_reserved.moduleApi[k]) return;
extract(k, descriptors[k], selectorDescriptors, events, reducers, state);
});
return [events, reducers, selectorDescriptors];
};
var _default = exports.default = extractModuleAspects;
const extract = (k, descriptor, selectorDescriptors, events, reducers, state) => {
const {
get,
value: v
} = descriptor;
if (get) {
selectorDescriptors[k] = descriptor;
} else if (!v) {
state[k] = v;
} else if (v[_reserved._module]) {
return;
} else if (v.event === true) {
events[k] = v;
_createEvents.extractedEvents.set(v, k);
} else if (typeof v === 'function') {
if (v.length >= 2) reducers[k] = v;else selectorDescriptors[k] = descriptor;
} else {
state[k] = _utils.isProd ? (0, _cloneDeep.default)(v) : v; // clone during development, so references aren't changed for next replay
}
};