diff --git a/lib/store.d.ts b/lib/store.d.ts index 05cf27e..d7cb9fd 100644 --- a/lib/store.d.ts +++ b/lib/store.d.ts @@ -1,4 +1,4 @@ -import { DeduceCreateSingleOperation, DeduceRemoveOperation, DeduceUpdateOperation, OperationResult, OperateOption, OpRecord, EntityDict, SelectOption, AggregationResult } from "oak-domain/lib/types/Entity"; +import { OperationResult, OperateOption, OpRecord, EntityDict, SelectOption, AggregationResult } from "oak-domain/lib/types/Entity"; import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain'; import { StorageSchema } from 'oak-domain/lib/types/Storage'; import { NodeDict } from "./types/type"; @@ -50,9 +50,9 @@ export default class TreeStore extends C private translateFilter; private translateSorter; protected selectAbjointRow(entity: T, selection: ED[T]['Selection'], context: Cxt, option?: OP): Partial[]; - protected updateAbjointRow(entity: T, operation: DeduceCreateSingleOperation | DeduceUpdateOperation | DeduceRemoveOperation, context: Cxt, option?: OP): number; + protected updateAbjointRow(entity: T, operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'], context: Cxt, option?: OP): number; protected selectAbjointRowAsync(entity: T, selection: ED[T]['Selection'], context: Cxt, option?: OP): Promise[]>; - protected updateAbjointRowAsync(entity: T, operation: DeduceCreateSingleOperation | DeduceUpdateOperation | DeduceRemoveOperation, context: Cxt, option?: OP): Promise; + protected updateAbjointRowAsync(entity: T, operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'], context: Cxt, option?: OP): Promise; protected operateSync>(entity: T, operation: ED[T]['Operation'], context: Cxt, option: OP): OperationResult; protected operateAsync>(entity: T, operation: ED[T]['Operation'], context: Cxt, option: OP): Promise>; /** diff --git a/package.json b/package.json index fef02e8..0a0dc40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oak-memory-tree-store", - "version": "2.2.0", + "version": "2.2.1", "description": "oak框架中内存级store的实现", "author": { "name": "XuChang" @@ -9,8 +9,7 @@ "lib/**/*" ], "dependencies": { - "luxon": "^2.3.0", - "oak-domain": "^2.3.0", + "oak-domain": "^2.4.0", "uuid": "^8.3.2" }, "scripts": { diff --git a/src/store.ts b/src/store.ts index 3cfd497..a4969e6 100644 --- a/src/store.ts +++ b/src/store.ts @@ -1,9 +1,8 @@ import { cloneDeep, get, groupBy, set, unset } from 'oak-domain/lib/utils/lodash'; import { assert } from 'oak-domain/lib/utils/assert'; import { - DeduceCreateSingleOperation, DeduceFilter, DeduceSelection, EntityShape, DeduceRemoveOperation, - DeduceUpdateOperation, DeduceSorter, DeduceSorterAttr, OperationResult, OperateOption, OpRecord, - DeduceCreateOperationData, UpdateOpResult, RemoveOpResult, SelectOpResult, + EntityShape, OperationResult, OperateOption, OpRecord, + UpdateOpResult, RemoveOpResult, SelectOpResult, EntityDict, SelectOption, DeleteAtAttribute, AggregationResult, AggregationOp } from "oak-domain/lib/types/Entity"; import { ExpressionKey, EXPRESSION_PREFIX, NodeId, RefAttr } from 'oak-domain/lib/types/Demand'; @@ -198,7 +197,7 @@ export default class TreeStore extends C private translateLogicFilter( entity: T, - filter: DeduceFilter, + filter: NonNullable, attr: string, context: Cxt, option?: OP): (node: RowNode, nodeDict: NodeDict, exprResolveFns: Array) => boolean { @@ -206,7 +205,7 @@ export default class TreeStore extends C case '$and': { const filters = filter[attr]; const fns = filters!.map( - ele => this.translateFilter(entity, ele, context, option) + (ele: NonNullable) => this.translateFilter(entity, ele, context, option) ); return (node, nodeDict, exprResolveFns) => { for (const fn of fns) { @@ -220,7 +219,7 @@ export default class TreeStore extends C case '$or': { const filters = filter[attr]; const fns = filters!.map( - ele => this.translateFilter(entity, ele, context, option) + (ele : NonNullable) => this.translateFilter(entity, ele, context, option) ); return (node, nodeDict, exprResolveFns) => { for (const fn of fns) { @@ -534,7 +533,7 @@ export default class TreeStore extends C const option2 = Object.assign({}, option, { nodeDict }); const legalSets = this.selectAbjointRow(inData.entity, inData, context, option2).map( (ele) => { - const { data } = inData as DeduceSelection; + const { data } = inData as ED[keyof ED]['Selection']; const key = Object.keys(data)[0]; return (ele as any)[key]; } @@ -563,7 +562,7 @@ export default class TreeStore extends C try { const legalSets = this.selectAbjointRow(inData.entity, inData, context, option).map( (ele) => { - const { data } = inData as DeduceSelection; + const { data } = inData as ED[keyof ED]['Selection']; const key = Object.keys(data)[0]; return (ele as any)[key]; } @@ -580,7 +579,7 @@ export default class TreeStore extends C const option2 = Object.assign({}, option, { nodeDict }); const legalSets = this.selectAbjointRow(inData.entity, inData, context, option2).map( (ele) => { - const { data } = inData as DeduceSelection; + const { data } = inData as ED[keyof ED]['Selection']; const key = Object.keys(data)[0]; return (ele as any)[key]; } @@ -616,7 +615,7 @@ export default class TreeStore extends C private translateFilter( entity: T, - filter: DeduceFilter, + filter: ED[T]['Selection']['filter'], context: Cxt, option?: OP): (node: RowNode, nodeDict: NodeDict, exprResolveFns: Array) => boolean { const fns: Array<(node: RowNode, nodeDict: NodeDict, exprResolveFns: Array) => boolean> = []; @@ -629,7 +628,7 @@ export default class TreeStore extends C })['#id']; } else if (['$and', '$or', '$xor', '$not'].includes(attr)) { - fns.push(this.translateLogicFilter(entity, filter, attr, context, option)); + fns.push(this.translateLogicFilter(entity, filter!, attr, context, option)); } else if (attr.toLowerCase().startsWith(EXPRESSION_PREFIX)) { const fn = this.translateExpression(entity, (filter as any)[attr], context, option); @@ -730,7 +729,7 @@ export default class TreeStore extends C private translateSorter( entity: T, - sorter: DeduceSorter, + sorter: NonNullable, context: Cxt, option?: OP): (row1: object | null | undefined, row2: object | null | undefined) => number { @@ -738,7 +737,8 @@ export default class TreeStore extends C row1: object | null | undefined, row2: object | null | undefined, entity2: T2, - sortAttr: DeduceSorterAttr, direction?: 'asc' | 'desc'): number => { + sortAttr: NonNullable[number]['$attr'], + direction?: NonNullable[number]['$direction']): number => { const row11 = row1 as any; const row22 = row2 as any; assert(Object.keys(sortAttr).length === 1); @@ -881,14 +881,14 @@ export default class TreeStore extends C protected updateAbjointRow( entity: T, - operation: DeduceCreateSingleOperation | DeduceUpdateOperation | DeduceRemoveOperation, + operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'], context: Cxt, option?: OP): number { const { data, action, id: operId } = operation; switch (action) { case 'create': { - const { id } = data as DeduceCreateOperationData; + const { id } = data as ED[T]['CreateSingle']['data']; assert(id); // const node = this.store[entity] && (this.store[entity]!)[id as string]; // const row = node && this.constructRow(node, context) || {}; @@ -973,7 +973,7 @@ export default class TreeStore extends C protected async updateAbjointRowAsync( entity: T, - operation: DeduceCreateSingleOperation | DeduceUpdateOperation | DeduceRemoveOperation, + operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'], context: Cxt, option?: OP) { return this.updateAbjointRow(entity, operation, context, option); @@ -1169,7 +1169,7 @@ export default class TreeStore extends C // 再计算sorter if (sorter) { - const sorterFn = this.translateSorter(entity, sorter, context, option); + const sorterFn = this.translateSorter(entity, sorter as NonNullable, context, option); rows2.sort(sorterFn); } @@ -1602,7 +1602,7 @@ export default class TreeStore extends C this.updateAbjointRow(e, { id: 'dummy', action: 'update', - data: dd, + data: dd as any, filter: { id: dd.id, } as any, @@ -1622,7 +1622,7 @@ export default class TreeStore extends C this.updateAbjointRow(e, { id: 'dummy', action: 'update', - data: d, + data: d as any, filter: { id: d.id, } as any, @@ -1666,7 +1666,7 @@ export default class TreeStore extends C this.updateAbjointRow(entity, { id: 'dummy', action: 'update', - data: d[entity]![id], + data: d[entity]![id] as any, filter: { id, } as any,