UNPKG

@aitianyu.cn/tianyu-store

Version:
92 lines 4.75 kB
"use strict"; /** @format */ Object.defineProperty(exports, "__esModule", { value: true }); exports.doSelectingWithState = exports.doSelectingWithThrow = exports.doSelecting = void 0; const Model_1 = require("../../types/Model"); const Selector_1 = require("../../types/Selector"); const Transaction_1 = require("../../types/Transaction"); const InstanceProcessor_1 = require("./InstanceProcessor"); function doSelecting(manager, selector, forceStatic) { try { return doSelectingWithStateThrowWhenMissing(manager, selector, forceStatic); } catch (e) { manager.error(e, Transaction_1.TransactionType.Selector); return new Model_1.Missing(); } } exports.doSelecting = doSelecting; function doSelectingWithThrow(manager, selector, forceStatic) { try { return doSelectingWithStateThrowWhenMissing(manager, selector, forceStatic); } catch (e) { manager.error(e, Transaction_1.TransactionType.Selector); throw e; } } exports.doSelectingWithThrow = doSelectingWithThrow; function doSelectingWithState(state, executor, manager, selector) { try { const selectorImpl = manager.getSelector(selector.selector, !!selector.template, selector.instanceId); manager.select(selector); const type = selectorImpl.type; const getter = selectorImpl .getter; const externalResult = selectorImpl.external?.(executor.getExternalRegister(selector.instanceId)); return doSimpleSelector(type, getter, state, selector.params, externalResult); } catch (e) { manager.error(e, Transaction_1.TransactionType.Selector); return new Model_1.Missing(); } } exports.doSelectingWithState = doSelectingWithState; function doSimpleSelector(type, getter, state, param, externalResult) { return type === Selector_1.SelectorType.NORMAL ? getter(state, externalResult) : getter(state, param, externalResult); } function doSelectingWithStateThrowWhenMissing(manager, selector, forceStatic) { const selectorImpl = manager.getSelector(selector.selector, !!selector.template, selector.instanceId); manager.select(selector); const type = selectorImpl.type; if (type === Selector_1.SelectorType.MIX) { return doMixSelecting(manager, selector, selectorImpl, forceStatic); } if (type === Selector_1.SelectorType.RESTRICT) { return doRestrictSelecting(manager, selector, selectorImpl, forceStatic); } const getter = selectorImpl.getter; const instanceIdMatchedStoreType = (0, InstanceProcessor_1.getStoreTypeMatchedInstanceId)(selectorImpl.info.storeType, selector.instanceId); const executor = manager.getEntity(instanceIdMatchedStoreType.entity); const externalResult = selectorImpl.external?.(executor.getExternalRegister(selector.instanceId)); const state = forceStatic ? executor.getOriginState(instanceIdMatchedStoreType) : executor.getState(instanceIdMatchedStoreType); return doSimpleSelector(type, getter, state, selector.params, externalResult); } function generateSelectorInstance(instanceId, selectorImpl, param) { return selectorImpl.type === Selector_1.SelectorType.NORMAL ? selectorImpl(instanceId) : selectorImpl(instanceId, param); } function doMixSelecting(manager, selector, mixSelector, forceStatic) { const innerSelectors = mixSelector.getters; const innerResults = []; for (const selectorInfo of innerSelectors) { const selectorProvider = manager.getSelector(selectorInfo.fullName, !!selector.template, selector.instanceId); const selectorInstance = generateSelectorInstance(selector.instanceId, selectorProvider, selector.params); innerResults.push(doSelectingWithStateThrowWhenMissing(manager, selectorInstance, forceStatic)); } return mixSelector.resultGenerator(...innerResults, selector.params); } function doRestrictSelecting(manager, selector, selectorImpl, forceStatic) { const fromSelector = manager.getSelector(selectorImpl.parameterGenerator.fullName, !!selector.template, selector.instanceId); const toSelector = manager.getSelector(selectorImpl.resultGenerator.fullName, !!selector.template, selector.instanceId); const fromInstance = generateSelectorInstance(selector.instanceId, fromSelector, selector.params); const fromValue = doSelectingWithStateThrowWhenMissing(manager, fromInstance, forceStatic); const toInstance = generateSelectorInstance(selector.instanceId, toSelector, fromValue); return doSelectingWithStateThrowWhenMissing(manager, toInstance, forceStatic); } //# sourceMappingURL=Selecting.js.map