operationResult的merge分离,修正了一个dependencyBuilder的小bug

This commit is contained in:
Xu Chang 2024-04-24 11:52:38 +08:00
parent 23052dcf67
commit 82c72488e7
8 changed files with 44 additions and 33 deletions

View File

@ -42,7 +42,7 @@ function analyzeDepedency(cwd) {
else {
const depConfigJsFile = join(dir, 'lib', 'configuration', 'dependency.js');
if ((0, fs_1.existsSync)(depConfigJsFile)) {
dependencies = require(depConfigJsFile);
dependencies = require(depConfigJsFile).default;
}
else {
// 没有依赖文件,直接返回

View File

@ -14,6 +14,5 @@ export declare abstract class RowStore<ED extends EntityDict> {
abstract registerOperationRewriter(rewriter: OperationRewriter<ED, AsyncContext<ED> | SyncContext<ED>, SelectOption>): void;
abstract registerSelectionRewriter(rewriter: SelectionRewriter<ED, AsyncContext<ED> | SyncContext<ED>, OperateOption>): void;
getSchema(): StorageSchema<ED>;
mergeOperationResult(result: OperationResult<ED>, toBeMerged: OperationResult<ED>): void;
mergeMultipleResults(toBeMerged: OperationResult<ED>[]): OperationResult<ED>;
}

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RowStore = void 0;
const lodash_1 = require("../utils/lodash");
const operationResult_1 = require("../utils/operationResult");
class RowStore {
storageSchema;
constructor(storageSchema) {
@ -10,22 +10,9 @@ class RowStore {
getSchema() {
return this.storageSchema;
}
mergeOperationResult(result, toBeMerged) {
for (const entity in toBeMerged) {
for (const action in toBeMerged[entity]) {
const value = (0, lodash_1.get)(result, `${entity}.${action}`);
if (typeof value === 'number') {
(0, lodash_1.set)(result, `${entity}.${action}`, value + toBeMerged[entity][action]);
}
else {
(0, lodash_1.set)(result, `${entity}.${action}`, toBeMerged[entity][action]);
}
}
}
}
mergeMultipleResults(toBeMerged) {
const result = {};
toBeMerged.forEach(ele => this.mergeOperationResult(result, ele));
toBeMerged.forEach(ele => (0, operationResult_1.mergeOperationResult)(result, ele));
return result;
}
}

2
lib/utils/operationResult.d.ts vendored Normal file
View File

@ -0,0 +1,2 @@
import { OperationResult, EntityDict } from "../types/Entity";
export declare function mergeOperationResult<ED extends EntityDict>(result: OperationResult<ED>, toBeMerged: OperationResult<ED>): OperationResult<ED>;

View File

@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeOperationResult = void 0;
const lodash_1 = require("../utils/lodash");
function mergeOperationResult(result, toBeMerged) {
for (const entity in toBeMerged) {
for (const action in toBeMerged[entity]) {
const value = (0, lodash_1.get)(result, `${entity}.${action}`);
if (typeof value === 'number') {
(0, lodash_1.set)(result, `${entity}.${action}`, value + toBeMerged[entity][action]);
}
else {
(0, lodash_1.set)(result, `${entity}.${action}`, toBeMerged[entity][action]);
}
}
}
return result;
}
exports.mergeOperationResult = mergeOperationResult;

View File

@ -53,7 +53,7 @@ export function analyzeDepedency(cwd: string) {
else {
const depConfigJsFile = join(dir, 'lib', 'configuration', 'dependency.js');
if (existsSync(depConfigJsFile)) {
dependencies = require(depConfigJsFile);
dependencies = require(depConfigJsFile).default;
}
else {
// 没有依赖文件,直接返回

View File

@ -4,6 +4,7 @@ import { get, set } from '../utils/lodash';
import { AsyncContext } from '../store/AsyncRowStore';
import { SyncContext } from '../store/SyncRowStore';
import { OperateOption, SelectOption } from '.';
import { mergeOperationResult } from '../utils/operationResult';
export type TxnOption = {
isolationLevel: 'repeatable read' | 'serializable';
@ -41,24 +42,10 @@ export abstract class RowStore<ED extends EntityDict> {
return this.storageSchema;
}
mergeOperationResult(result: OperationResult<ED>, toBeMerged: OperationResult<ED>) {
for (const entity in toBeMerged) {
for (const action in toBeMerged[entity]) {
const value = get(result, `${entity}.${action}`);
if (typeof value === 'number') {
set(result, `${entity}.${action}`, value + toBeMerged[entity]![action]!);
}
else {
set(result, `${entity}.${action}`, toBeMerged[entity]![action]!);
}
}
}
}
mergeMultipleResults(toBeMerged: OperationResult<ED>[]) {
const result: OperationResult<ED> = {};
toBeMerged.forEach(
ele => this.mergeOperationResult(result, ele)
ele => mergeOperationResult(result, ele)
);
return result;
}

View File

@ -0,0 +1,17 @@
import { OperationResult, EntityDict } from "../types/Entity";
import { get, set } from '../utils/lodash';
export function mergeOperationResult<ED extends EntityDict>(result: OperationResult<ED>, toBeMerged: OperationResult<ED>) {
for (const entity in toBeMerged) {
for (const action in toBeMerged[entity]) {
const value = get(result, `${entity}.${action}`);
if (typeof value === 'number') {
set(result, `${entity}.${action}`, value + toBeMerged[entity]![action]!);
}
else {
set(result, `${entity}.${action}`, toBeMerged[entity]![action]!);
}
}
}
return result;
}