@aitianyu.cn/tianyu-store
Version:
tianyu storage for nodejs.
92 lines • 4.75 kB
JavaScript
"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