适配common-aspect的写法

This commit is contained in:
Xu Chang 2022-09-22 16:31:06 +08:00
parent 32c19eb2c4
commit 6323526d25
21 changed files with 92 additions and 28 deletions

View File

@ -14,21 +14,19 @@ export declare class Cache<ED extends EntityDict & BaseEntityDict, Cxt extends C
count?: number | undefined;
}>;
operate<T extends keyof ED, OP extends OperateOption>(entity: T, operation: ED[T]['Operation'], option?: OP): Promise<import("oak-domain/lib/types").OperationResult<ED> | import("oak-domain/lib/types").OperationResult<ED>[]>;
count<T extends keyof ED, OP extends SelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): Promise<number>;
private sync;
/**
* operation只可能是测试权限
* @param entity
* @param operation
* @param scene
* @param commit
* @param option
* @returns
*/
testOperation<T extends keyof ED>(entity: T, operation: ED[T]['Operation']): Promise<boolean>;
/**
* cache中重做一些动作modi
* @param entity
* @param projection
* @param selection
* @param opers
*/
tryRedoOperations<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, opers: Array<{

View File

@ -73,6 +73,25 @@ var Cache = /** @class */ (function (_super) {
});
});
};
Cache.prototype.count = function (entity, selection, option) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var result;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
(0, selection_1.reinforceSelection)(this.cacheStore.getSchema(), entity, selection);
return [4 /*yield*/, this.getAspectWrapper().exec('count', {
entity: entity,
selection: selection,
option: option,
})];
case 1:
result = (_a.sent()).result;
return [2 /*return*/, result];
}
});
});
};
Cache.prototype.sync = function (records) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var context, result;
@ -100,9 +119,6 @@ var Cache = /** @class */ (function (_super) {
* 前端缓存做operation只可能是测试权限必然回滚
* @param entity
* @param operation
* @param scene
* @param commit
* @param option
* @returns
*/
Cache.prototype.testOperation = function (entity, operation) {
@ -142,7 +158,7 @@ var Cache = /** @class */ (function (_super) {
/**
* 尝试在cache中重做一些动作然后选择重做后的数据为了实现modi
* @param entity
* @param projection
* @param selection
* @param opers
*/
Cache.prototype.tryRedoOperations = function (entity, selection, opers) {
@ -258,6 +274,9 @@ var Cache = /** @class */ (function (_super) {
tslib_1.__decorate([
Feature_1.Action
], Cache.prototype, "operate", null);
tslib_1.__decorate([
Feature_1.Action
], Cache.prototype, "count", null);
return Cache;
}(Feature_1.Feature));
exports.Cache = Cache;

View File

@ -1,7 +1,8 @@
import { EntityDict, Context } from 'oak-domain/lib/types';
import { Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
export declare class EventBus<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare class EventBus<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
private EventTable;
sub(type: string, callback: Function): void;
unsub(type: string, callback: Function): void;

View File

@ -1,7 +1,8 @@
import { EntityDict, Context, AspectWrapper } from 'oak-domain/lib/types';
import { Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
export declare class LocalStorage<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare class LocalStorage<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
keys: Record<string, boolean>;
constructor(aspectWrapper: AspectWrapper<ED, Cxt, AD>);
setKey(key: string): void;

View File

@ -1,7 +1,8 @@
import { EntityDict, Context } from 'oak-domain/lib/types';
import { Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
export declare class Locales<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare class Locales<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
get(namespace: string | string[], locale: string, scene: string): Promise<{
translations: Awaited<ReturnType<AD["getTranslations"]>>;
}>;

View File

@ -1,7 +1,8 @@
import { EntityDict, Context } from 'oak-domain/lib/types';
import { Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
export declare class Location<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare class Location<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
private latitude?;
private longitude?;
private lastTimestamp?;

View File

@ -2,7 +2,8 @@ import { EntityDict, Context } from 'oak-domain/lib/types';
import { Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
import { MessageProps } from '../types/Message';
export declare class Message<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare class Message<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
private data?;
setMessage(data: MessageProps): void;
consumeMessage(): MessageProps | undefined;

View File

@ -1,8 +1,9 @@
import { EntityDict, Context } from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
import { NotificationProps } from '../types/Notification';
export declare class Notification<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
export declare class Notification<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
private data?;
setNotification(data: NotificationProps): void;
consumeNotification(): NotificationProps | undefined;

View File

@ -29,7 +29,7 @@ function initialize(storageSchema, createFeatures, frontendContextBuilder, backe
if (intersected.length > 0) {
throw new Error("\u7528\u6237\u5B9A\u4E49\u7684aspect\u4E2D\u4E0D\u80FD\u548C\u7CFB\u7EDFaspect\u540C\u540D\uFF1A\u300C".concat(intersected.join(','), "\u300D"));
}
var aspectDict2 = Object.assign({}, oak_common_aspect_1.default, aspectDict);
var aspectDict2 = Object.assign({}, aspectDict, oak_common_aspect_1.default);
var checkers2 = (0, index_1.createDynamicCheckers)(storageSchema).concat(checkers || []);
var triggers2 = (0, index_2.createDynamicTriggers)(storageSchema).concat(triggers || []);
var debugStore = (0, debugStore_1.createDebugStore)(storageSchema, backendContextBuilder, triggers2, checkers2, watchers || [], initialData, actionDict);

View File

@ -1,6 +1,7 @@
import { EntityDict, AspectWrapper, Context } from 'oak-domain/lib/types';
import { CommonAspectDict } from 'oak-common-aspect';
export declare abstract class Feature<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> {
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare abstract class Feature<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> {
private aspectWrapper;
constructor(aspectWrapper: AspectWrapper<ED, Cxt, AD>);
protected getAspectWrapper(): AspectWrapper<ED, Cxt, AD>;

View File

@ -66,5 +66,5 @@
"test": "ts-node ./test/test.ts",
"prepare": "rimraf node_modules/react & rimraf node_modules/react-dom & rimraf node_modules/react-router"
},
"main": "lib/index"
"main": "src/index"
}

View File

@ -2,8 +2,9 @@ import { EntityDict, Context } from 'oak-domain/lib/types';
import { Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
import { pull, unset } from 'oak-domain/lib/utils/lodash';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export class EventBus<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
export class EventBus<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
private EventTable: Record<string, Function[]> = {};
sub(type: string, callback: Function) {

View File

@ -1,4 +1,4 @@
import { AspectWrapper, Checker, Context, EntityDict, RowStore } from 'oak-domain/lib/types';
import { AspectWrapper, Checker, Context, EntityDict, Aspect } from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { CommonAspectDict } from 'oak-common-aspect';

View File

@ -3,8 +3,9 @@ import { unset } from 'oak-domain/lib/utils/lodash';
import { Feature } from '../types/Feature';
import { LOCAL_STORAGE_KEYS } from '../constant/constant';
import { CommonAspectDict } from 'oak-common-aspect';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export class LocalStorage<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
export class LocalStorage<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
keys: Record<string, boolean>;
constructor(aspectWrapper: AspectWrapper<ED, Cxt, AD>) {

View File

@ -1,8 +1,10 @@
import { EntityDict, Aspect, Context } from 'oak-domain/lib/types';
import { Action, Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export class Locales<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
export class Locales<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
async get(namespace: string | string[], locale: string, scene: string) {
const { result } = await this.getAspectWrapper().exec('getTranslations',
{ namespace, locale },

View File

@ -1,9 +1,10 @@
import { EntityDict, Aspect, Context } from 'oak-domain/lib/types';
import { Action, Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export class Location<
ED extends EntityDict,
ED extends EntityDict & BaseEntityDict,
Cxt extends Context<ED>,
AD extends CommonAspectDict<ED, Cxt>
> extends Feature<ED, Cxt, AD> {

View File

@ -2,9 +2,11 @@ import { EntityDict, Aspect, Context } from 'oak-domain/lib/types';
import { Action, Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
import { MessageProps } from '../types/Message';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export class Message<
ED extends EntityDict,
ED extends EntityDict & BaseEntityDict,
Cxt extends Context<ED>,
AD extends CommonAspectDict<ED, Cxt>
> extends Feature<ED, Cxt, AD> {

View File

@ -1,10 +1,11 @@
import { EntityDict, Aspect, Context } from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { Action, Feature } from '../types/Feature';
import { CommonAspectDict } from 'oak-common-aspect';
import { NotificationProps } from '../types/Notification';
export class Notification<
ED extends EntityDict,
ED extends EntityDict & BaseEntityDict,
Cxt extends Context<ED>,
AD extends CommonAspectDict<ED, Cxt>
> extends Feature<ED, Cxt, AD> {

View File

@ -66,7 +66,7 @@ export function initialize<
`用户定义的aspect中不能和系统aspect同名${intersected.join(',')}`
);
}
const aspectDict2 = Object.assign({}, commonAspectDict, aspectDict);
const aspectDict2 = Object.assign({}, aspectDict, commonAspectDict);
const checkers2 = createDynamicCheckers<ED, Cxt>(storageSchema).concat(checkers || []);
const triggers2 = createDynamicTriggers<ED, Cxt>(storageSchema).concat(triggers || []);
const debugStore = createDebugStore(
@ -88,7 +88,7 @@ export function initialize<
() => clearMaterializedData(),
);
const wrapper: AspectWrapper<ED, Cxt, typeof aspectDict2> = {
const wrapper: AspectWrapper<ED, Cxt, CommonAspectDict<ED, Cxt> & AD> = {
exec: async (name, params) => {
const context = frontendContextBuilder(features)(cacheStore);
const str = await context.toString();

View File

@ -1,9 +1,11 @@
import { pull } from 'oak-domain/lib/utils/lodash';
import { EntityDict, Aspect, AspectWrapper, Context } from 'oak-domain/lib/types';
import { CommonAspectDict } from 'oak-common-aspect';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export abstract class Feature<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> {
export abstract class Feature<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> {
private aspectWrapper: AspectWrapper<ED, Cxt, AD>;
constructor(aspectWrapper: AspectWrapper<ED, Cxt, AD>) {
this.aspectWrapper = aspectWrapper;

View File

@ -1 +1,31 @@
console.log(/^[a-z][a-z|A-Z]+$/.test('create-page'));
import { CommonAspectDict } from 'oak-common-aspect';
import commonAspectDict from 'oak-common-aspect';
import {
Aspect,
AspectWrapper,
Checker,
Trigger,
StorageSchema,
Context,
RowStore,
OakRowInconsistencyException,
Watcher,
} from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { EntityDict } from 'oak-domain/lib/types/Entity';
function tt<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>>(ad: AD) {
console.log(111);
}
function init<
ED extends EntityDict & BaseEntityDict,
Cxt extends Context<ED>,
AD extends Record<string, Aspect<ED, Cxt>>
> (aspectDict: AD) {
const ad2 = Object.assign({}, aspectDict, commonAspectDict);
tt(ad2);
}
init({});