chore: 移除autowire特性

pull/409/head
xiaojunnuo 2025-04-28 21:55:23 +08:00
parent 048696ee93
commit 0b6941d5ce
25 changed files with 55 additions and 106 deletions

View File

@ -1,17 +0,0 @@
import { Decorator } from "./index.js";
export type AutowireProp = {
name?: string;
type?: any;
};
export const AUTOWIRE_KEY = "pipeline:autowire";
export function Autowire(props?: AutowireProp): PropertyDecorator {
return (target, propertyKey) => {
const _type = Reflect.getMetadata("design:type", target, propertyKey);
target = Decorator.target(target, propertyKey);
props = props || {};
props.type = _type;
Reflect.defineMetadata(AUTOWIRE_KEY, props || {}, target, propertyKey);
};
}

View File

@ -1,2 +1 @@
export * from "./utils.js";
export * from "./common.js";

View File

@ -51,10 +51,6 @@ export type PluginDefine = Registrable & {
[key: string]: TaskOutputDefine;
};
autowire?: {
[key: string]: any;
};
shortcut?: {
[key: string]: {
title: string;

View File

@ -1,7 +1,6 @@
import { pluginRegistry } from "./registry.js";
import { PluginDefine, TaskInputDefine, TaskOutputDefine } from "./api.js";
import { Decorator } from "../decorator/index.js";
import { AUTOWIRE_KEY } from "../decorator/index.js";
import "reflect-metadata";
import { merge, sortBy } from "lodash-es";
// 提供一个唯一 key
@ -12,7 +11,6 @@ export function IsTaskPlugin(define: PluginDefine): ClassDecorator {
target = Decorator.target(target);
const inputs: any = {};
const autowires: any = {};
const outputs: any = {};
const properties = Decorator.getClassProperties(target);
for (const property in properties) {
@ -21,11 +19,6 @@ export function IsTaskPlugin(define: PluginDefine): ClassDecorator {
inputs[property] = input;
}
const autowire = Reflect.getMetadata(AUTOWIRE_KEY, target, property);
if (autowire) {
autowires[property] = autowire;
}
const output = Reflect.getMetadata(PLUGIN_OUTPUT_KEY, target, property);
if (output) {
outputs[property] = output;
@ -57,7 +50,7 @@ export function IsTaskPlugin(define: PluginDefine): ClassDecorator {
},
};
define = merge(defaultConfig, define, { input: inputMap, autowire: autowires, output: outputs });
define = merge(defaultConfig, define, { input: inputMap, output: outputs });
Reflect.defineMetadata(PLUGIN_CLASS_KEY, define, target);

View File

@ -4,9 +4,6 @@ import { IAccess, Registrable } from "@certd/pipeline";
export type DnsProviderDefine = Registrable & {
accessType: string;
icon?: string;
autowire?: {
[key: string]: any;
};
};
export type CreateRecordOptions = {

View File

@ -39,8 +39,6 @@ export async function createDnsProvider(opts: { dnsProviderType: string; context
}
// @ts-ignore
const dnsProvider: IDnsProvider = new DnsProviderClass();
Decorator.inject(dnsProviderDefine.autowire, dnsProvider, context);
dnsProvider.setCtx(context);
await dnsProvider.onInstance();
return dnsProvider;

View File

@ -1,6 +1,6 @@
import { dnsProviderRegistry } from "./registry.js";
import { DnsProviderDefine } from "./api.js";
import { Decorator, AUTOWIRE_KEY } from "@certd/pipeline";
import { Decorator } from "@certd/pipeline";
import * as _ from "lodash-es";
// 提供一个唯一 key
@ -9,15 +9,6 @@ export const DNS_PROVIDER_CLASS_KEY = "pipeline:dns-provider";
export function IsDnsProvider(define: DnsProviderDefine): ClassDecorator {
return (target: any) => {
target = Decorator.target(target);
const autowires: any = {};
const properties = Decorator.getClassProperties(target);
for (const property in properties) {
const autowire = Reflect.getMetadata(AUTOWIRE_KEY, target, property);
if (autowire) {
autowires[property] = autowire;
}
}
_.merge(define, { autowire: autowires });
Reflect.defineMetadata(DNS_PROVIDER_CLASS_KEY, define, target);

View File

@ -15,7 +15,7 @@ import { ref, inject } from "vue";
import { Form } from "ant-design-vue";
defineOptions({
name: "ApiTest"
name: "ApiTest",
});
const getScope: any = inject("get:scope");
@ -49,14 +49,14 @@ const doTest = async () => {
type: pluginType,
typeName: form.type,
action: props.action,
input: pluginType === "plugin" ? form.input : form
input: pluginType === "plugin" ? form.input : form,
},
{
onError(err: any) {
hasError.value = true;
message.value = `错误:${err.message}`;
},
showErrorNotify: false
showErrorNotify: false,
}
);
message.value = "测试请求成功";

View File

@ -84,7 +84,6 @@ for (const key in modules) {
}else{
console.log(`[warning] 未知的插件类型:${pluginDefine.name}`)
}
delete pluginDefine.autowire
const filePath = path.join(`./metadata/${pluginDefine.pluginType}_${pluginDefine.name}.yaml`)
pluginDefine.scriptFilePath = location

View File

@ -26,11 +26,11 @@ process.on('uncaughtException', error => {
});
@Configuration({
// detectorOptions: {
// ignore: [
// '**/plugins/**'
// ]
// },
detectorOptions: {
ignore: [
'**/plugins/**'
]
},
imports: [
koa,
orm,

View File

@ -12,7 +12,7 @@ export class AutoBLoadPlugins {
@Init()
async init() {
logger.info('加载插件开始');
// await this.pluginService.registerFromLocal("./metadata")
await this.pluginService.registerFromLocal("./metadata")
await import("../../plugins/index.js")
await this.pluginService.registerFromDb()
logger.info('加载插件完成');

View File

@ -285,12 +285,22 @@ export class PluginService extends BaseService<PluginEntity> {
async registerFromLocal(localDir: string) {
//scan path
const files = fs.readdirSync(localDir);
let list = []
for (const file of files) {
if (!file.endsWith(".yaml")) {
continue;
}
const item = yaml.load(fs.readFileSync(path.join(localDir, file), "utf8"));
list.push(item);
}
//排序
list = list.sort((a, b) => {
return a.order??10 - b.order ??10;
});
for (const item of list) {
await this.registerPlugin(item);
}
}

View File

@ -1,22 +1,22 @@
export * from '@certd/plugin-cert';
export * from '@certd/plugin-plus';
export * from './plugin-aliyun/index.js';
export * from './plugin-tencent/index.js';
export * from './plugin-host/index.js';
export * from './plugin-huawei/index.js';
export * from './plugin-demo/index.js';
export * from './plugin-other/index.js';
export * from './plugin-west/index.js';
export * from './plugin-doge/index.js';
export * from './plugin-qiniu/index.js';
export * from './plugin-woai/index.js';
export * from './plugin-cachefly/index.js';
export * from './plugin-gcore/index.js';
export * from './plugin-qnap/index.js';
export * from './plugin-aws/index.js';
export * from './plugin-dnsla/index.js';
export * from './plugin-upyun/index.js';
export * from './plugin-volcengine/index.js'
export * from './plugin-jdcloud/index.js'
export * from './plugin-51dns/index.js'
export * from './plugin-notification/index.js'
// export * from './plugin-aliyun/index.js';
// export * from './plugin-tencent/index.js';
// export * from './plugin-host/index.js';
// export * from './plugin-huawei/index.js';
// export * from './plugin-demo/index.js';
// export * from './plugin-other/index.js';
// export * from './plugin-west/index.js';
// export * from './plugin-doge/index.js';
// export * from './plugin-qiniu/index.js';
// export * from './plugin-woai/index.js';
// export * from './plugin-cachefly/index.js';
// export * from './plugin-gcore/index.js';
// export * from './plugin-qnap/index.js';
// export * from './plugin-aws/index.js';
// export * from './plugin-dnsla/index.js';
// export * from './plugin-upyun/index.js';
// export * from './plugin-volcengine/index.js'
// export * from './plugin-jdcloud/index.js'
// export * from './plugin-51dns/index.js'
// export * from './plugin-notification/index.js'

View File

@ -18,13 +18,12 @@ export type Dns51Record = {
accessType: '51dns',
})
export class Dns51DnsProvider extends AbstractDnsProvider<Dns51Record> {
// 通过Autowire传递context
access!: Dns51Access;
client!:Dns51Client;
async onInstance() {
//一些初始化的操作
// 也可以通过ctx成员变量传递context 与Autowire效果一样
// 也可以通过ctx成员变量传递context
this.access = this.ctx.access as Dns51Access;
this.client = new Dns51Client({
logger: this.logger,

View File

@ -1,5 +1,4 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline';
import { AliyunAccess, AliyunClient } from '@certd/plugin-lib';
@ -12,10 +11,8 @@ import { AliyunAccess, AliyunClient } from '@certd/plugin-lib';
})
export class AliyunDnsProvider extends AbstractDnsProvider {
client: any;
@Autowire()
access!: AliyunAccess;
async onInstance() {
const access: any = this.access;
const access: AliyunAccess = this.ctx.access as AliyunAccess
this.client = new AliyunClient({ logger: this.logger });
await this.client.init({

View File

@ -25,11 +25,10 @@ export type CloudflareRecord = {
accessType: 'cloudflare',
})
export class CloudflareDnsProvider extends AbstractDnsProvider<CloudflareRecord> {
// 通过Autowire传递context
access!: CloudflareAccess;
async onInstance() {
//一些初始化的操作
// 也可以通过ctx成员变量传递context 与Autowire效果一样
// 也可以通过ctx成员变量传递context
this.access = this.ctx.access as CloudflareAccess;
}

View File

@ -1,5 +1,4 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline';
import { DemoAccess } from './access.js';
import { isDev } from '../../utils/env.js';
@ -19,12 +18,11 @@ type DemoRecord = {
accessType: 'demo',
})
export class DemoDnsProvider extends AbstractDnsProvider<DemoRecord> {
// 通过Autowire注入工具对象
@Autowire()
access!: DemoAccess;
async onInstance() {
// 也可以通过ctx成员变量传递context 与Autowire效果一样
this.access = this.ctx.access as DemoAccess
// 也可以通过ctx成员变量传递context
this.logger.debug('access', this.access);
//初始化的操作
//...

View File

@ -16,11 +16,10 @@ export type DnslaRecord = {
accessType: 'dnsla',
})
export class DnslaDnsProvider extends AbstractDnsProvider<DnslaRecord> {
// 通过Autowire传递context
access!: DnslaAccess;
async onInstance() {
//一些初始化的操作
// 也可以通过ctx成员变量传递context 与Autowire效果一样
// 通过ctx成员变量传递context
this.access = this.ctx.access as DnslaAccess;
}

View File

@ -1,6 +1,5 @@
import * as _ from "lodash-es";
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from "@certd/plugin-cert";
import { Autowire } from "@certd/pipeline";
import { HuaweiAccess } from "../access/index.js";
import { ApiRequestOptions, HuaweiYunClient } from "@certd/lib-huawei";
@ -18,12 +17,12 @@ export type SearchRecordOptions = {
})
export class HuaweiDnsProvider extends AbstractDnsProvider {
client!: HuaweiYunClient;
@Autowire()
access!: HuaweiAccess;
domainEndpoint = "https://domains-external.myhuaweicloud.com";
dnsEndpoint = "https://dns.cn-south-1.myhuaweicloud.com";
async onInstance() {
this.access = this.ctx.access as HuaweiAccess
const access: any = this.access;
this.client = new HuaweiYunClient(access, this.logger);
}

View File

@ -1,5 +1,4 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from "@certd/plugin-cert";
import { Autowire } from "@certd/pipeline";
import { JDCloudAccess } from "./access.js";
@IsDnsProvider({
@ -10,11 +9,11 @@ import { JDCloudAccess } from "./access.js";
icon: "svg:icon-jdcloud"
})
export class JDCloudDnsProvider extends AbstractDnsProvider {
@Autowire()
access!: JDCloudAccess;
async onInstance() {
this.access = this.ctx.access as JDCloudAccess
}

View File

@ -17,11 +17,10 @@ export type NamesiloRecord = {
accessType: 'namesilo',
})
export class NamesiloDnsProvider extends AbstractDnsProvider<NamesiloRecord> {
// 通过Autowire传递context
access!: NamesiloAccess;
async onInstance() {
//一些初始化的操作
// 也可以通过ctx成员变量传递context 与Autowire效果一样
// 也可以通过ctx成员变量传递context
this.access = this.ctx.access as NamesiloAccess;
}

View File

@ -1,4 +1,3 @@
import { Autowire } from '@certd/pipeline';
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import * as _ from 'lodash-es';
@ -13,13 +12,13 @@ import { DnspodAccess } from '../access/index.js';
icon: 'svg:icon-tencentcloud',
})
export class DnspodDnsProvider extends AbstractDnsProvider {
@Autowire()
access!: DnspodAccess;
loginToken: any;
endpoint = '';
async onInstance() {
this.access = this.ctx.access as DnspodAccess
const access: DnspodAccess = this.access as DnspodAccess;
this.loginToken = access.id + ',' + access.token;
this.endpoint = access.endpoint || 'https://dnsapi.cn';

View File

@ -1,5 +1,3 @@
import { Autowire } from '@certd/pipeline';
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { TencentAccess } from '@certd/plugin-lib';
@ -11,7 +9,6 @@ import { TencentAccess } from '@certd/plugin-lib';
icon: 'svg:icon-tencentcloud',
})
export class TencentDnsProvider extends AbstractDnsProvider {
@Autowire()
access!: TencentAccess;
client!: any;
@ -19,6 +16,7 @@ export class TencentDnsProvider extends AbstractDnsProvider {
endpoint = 'dnspod.tencentcloudapi.com';
async onInstance() {
this.access = this.ctx.access as TencentAccess
const clientConfig = {
credential: this.access,
region: '',

View File

@ -1,5 +1,4 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from "@certd/plugin-cert";
import { Autowire } from "@certd/pipeline";
import { VolcengineDnsClient } from "./dns-client.js";
import { VolcengineAccess } from "./access.js";
@ -13,11 +12,11 @@ import { VolcengineAccess } from "./access.js";
})
export class VolcengineDnsProvider extends AbstractDnsProvider {
client: VolcengineDnsClient;
@Autowire()
access!: VolcengineAccess;
async onInstance() {
this.access = this.ctx.access
this.client = new VolcengineDnsClient({
access: this.access,
logger: this.logger,

View File

@ -1,5 +1,4 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline';
import { WestAccess } from './access.js';
@ -22,12 +21,11 @@ type westRecord = {
accessType: 'west',
})
export class WestDnsProvider extends AbstractDnsProvider<westRecord> {
// 通过Autowire注入工具对象
@Autowire()
access!: WestAccess;
async onInstance() {
// 也可以通过ctx成员变量传递context 与Autowire效果一样
this.access = this.ctx.access as WestAccess
// 也可以通过ctx成员变量传递context
this.logger.debug('access:', this.access);
//初始化的操作
//...