mirror of
https://github.com/certd/certd.git
synced 2026-05-16 05:07:32 +08:00
refactor: decorator
This commit is contained in:
@@ -1,4 +0,0 @@
|
||||
import { AbstractRegistrable } from "../registry";
|
||||
import { AccessDefine } from "./api";
|
||||
|
||||
export abstract class AbstractAccess extends AbstractRegistrable<AccessDefine> {}
|
||||
@@ -3,22 +3,15 @@ import { accessRegistry } from "./registry";
|
||||
import { FormItemProps } from "../d.ts";
|
||||
import { AbstractAccess } from "./abstract-access";
|
||||
|
||||
export type AccessInput = FormItemProps & {
|
||||
export type AccessInputDefine = FormItemProps & {
|
||||
title: string;
|
||||
required?: boolean;
|
||||
};
|
||||
export type AccessDefine = Registrable & {
|
||||
input: {
|
||||
[key: string]: AccessInput;
|
||||
inputs?: {
|
||||
[key: string]: AccessInputDefine;
|
||||
};
|
||||
};
|
||||
export function IsAccess(define: AccessDefine) {
|
||||
return function (target: any) {
|
||||
target.prototype.define = define;
|
||||
accessRegistry.install(target);
|
||||
};
|
||||
}
|
||||
|
||||
export interface IAccessService {
|
||||
getById(id: any): Promise<AbstractAccess>;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
// src/decorator/memoryCache.decorator.ts
|
||||
import {
|
||||
attachClassMetadata,
|
||||
attachPropertyDataToClass,
|
||||
getClassMetadata,
|
||||
listModule,
|
||||
listPropertyDataFromClass,
|
||||
saveClassMetadata,
|
||||
saveModule,
|
||||
} from "@midwayjs/decorator";
|
||||
import { AccessDefine, AccessInputDefine } from "./api";
|
||||
import _ from "lodash-es";
|
||||
import { accessRegistry } from "./registry";
|
||||
|
||||
// 提供一个唯一 key
|
||||
export const ACCESS_CLASS_KEY = "decorator:access";
|
||||
|
||||
export function IsAccess(define: AccessDefine): ClassDecorator {
|
||||
console.log("is access define:", define);
|
||||
return (target: any) => {
|
||||
console.log("is access load:", target);
|
||||
// 将装饰的类,绑定到该装饰器,用于后续能获取到 class
|
||||
saveModule(ACCESS_CLASS_KEY, target);
|
||||
// 保存一些元数据信息,任意你希望存的东西
|
||||
saveClassMetadata(
|
||||
ACCESS_CLASS_KEY,
|
||||
{
|
||||
define,
|
||||
},
|
||||
target
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
export const ACCESS_INPUT_KEY = "decorator:access:input";
|
||||
|
||||
export function IsAccessInput(input?: AccessInputDefine): PropertyDecorator {
|
||||
return (target, propertyKey) => {
|
||||
attachPropertyDataToClass(ACCESS_INPUT_KEY, { input }, target, propertyKey, propertyKey as string);
|
||||
|
||||
attachClassMetadata(
|
||||
ACCESS_CLASS_KEY,
|
||||
{
|
||||
inputs: {
|
||||
[propertyKey]: input,
|
||||
},
|
||||
},
|
||||
target
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
export function registerAccess() {
|
||||
const modules = listModule(ACCESS_CLASS_KEY);
|
||||
for (const mod of modules) {
|
||||
console.log("mod", mod);
|
||||
const define = getClassMetadata(ACCESS_CLASS_KEY, mod);
|
||||
console.log("define", define);
|
||||
const inputs = listPropertyDataFromClass(ACCESS_INPUT_KEY, mod);
|
||||
console.log("inputs", inputs);
|
||||
for (const input of inputs) {
|
||||
define.inputs = {};
|
||||
_.merge(define.inputs, input.inputs);
|
||||
}
|
||||
|
||||
accessRegistry.register(define.name, {
|
||||
define,
|
||||
target: mod,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
export * from "./api";
|
||||
export * from "./abstract-access";
|
||||
export * from "./registry";
|
||||
export * from "./decorator";
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Registry } from "../registry";
|
||||
import { AbstractAccess } from "./abstract-access";
|
||||
|
||||
// @ts-ignore
|
||||
export const accessRegistry = new Registry<typeof AbstractAccess>();
|
||||
export const accessRegistry = new Registry();
|
||||
|
||||
Reference in New Issue
Block a user