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 "./utils.js";
export * from "./common.js";

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
import { dnsProviderRegistry } from "./registry.js"; import { dnsProviderRegistry } from "./registry.js";
import { DnsProviderDefine } from "./api.js"; import { DnsProviderDefine } from "./api.js";
import { Decorator, AUTOWIRE_KEY } from "@certd/pipeline"; import { Decorator } from "@certd/pipeline";
import * as _ from "lodash-es"; import * as _ from "lodash-es";
// 提供一个唯一 key // 提供一个唯一 key
@ -9,15 +9,6 @@ export const DNS_PROVIDER_CLASS_KEY = "pipeline:dns-provider";
export function IsDnsProvider(define: DnsProviderDefine): ClassDecorator { export function IsDnsProvider(define: DnsProviderDefine): ClassDecorator {
return (target: any) => { return (target: any) => {
target = Decorator.target(target); 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); 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"; import { Form } from "ant-design-vue";
defineOptions({ defineOptions({
name: "ApiTest" name: "ApiTest",
}); });
const getScope: any = inject("get:scope"); const getScope: any = inject("get:scope");
@ -49,14 +49,14 @@ const doTest = async () => {
type: pluginType, type: pluginType,
typeName: form.type, typeName: form.type,
action: props.action, action: props.action,
input: pluginType === "plugin" ? form.input : form input: pluginType === "plugin" ? form.input : form,
}, },
{ {
onError(err: any) { onError(err: any) {
hasError.value = true; hasError.value = true;
message.value = `错误:${err.message}`; message.value = `错误:${err.message}`;
}, },
showErrorNotify: false showErrorNotify: false,
} }
); );
message.value = "测试请求成功"; message.value = "测试请求成功";

View File

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

View File

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

View File

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

View File

@ -285,12 +285,22 @@ export class PluginService extends BaseService<PluginEntity> {
async registerFromLocal(localDir: string) { async registerFromLocal(localDir: string) {
//scan path //scan path
const files = fs.readdirSync(localDir); const files = fs.readdirSync(localDir);
let list = []
for (const file of files) { for (const file of files) {
if (!file.endsWith(".yaml")) { if (!file.endsWith(".yaml")) {
continue; continue;
} }
const item = yaml.load(fs.readFileSync(path.join(localDir, file), "utf8")); 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); await this.registerPlugin(item);
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,11 +17,10 @@ export type NamesiloRecord = {
accessType: 'namesilo', accessType: 'namesilo',
}) })
export class NamesiloDnsProvider extends AbstractDnsProvider<NamesiloRecord> { export class NamesiloDnsProvider extends AbstractDnsProvider<NamesiloRecord> {
// 通过Autowire传递context
access!: NamesiloAccess; access!: NamesiloAccess;
async onInstance() { async onInstance() {
//一些初始化的操作 //一些初始化的操作
// 也可以通过ctx成员变量传递context 与Autowire效果一样 // 也可以通过ctx成员变量传递context
this.access = this.ctx.access as NamesiloAccess; 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 { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import * as _ from 'lodash-es'; import * as _ from 'lodash-es';
@ -13,13 +12,13 @@ import { DnspodAccess } from '../access/index.js';
icon: 'svg:icon-tencentcloud', icon: 'svg:icon-tencentcloud',
}) })
export class DnspodDnsProvider extends AbstractDnsProvider { export class DnspodDnsProvider extends AbstractDnsProvider {
@Autowire()
access!: DnspodAccess; access!: DnspodAccess;
loginToken: any; loginToken: any;
endpoint = ''; endpoint = '';
async onInstance() { async onInstance() {
this.access = this.ctx.access as DnspodAccess
const access: DnspodAccess = this.access as DnspodAccess; const access: DnspodAccess = this.access as DnspodAccess;
this.loginToken = access.id + ',' + access.token; this.loginToken = access.id + ',' + access.token;
this.endpoint = access.endpoint || 'https://dnsapi.cn'; 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 { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { TencentAccess } from '@certd/plugin-lib'; import { TencentAccess } from '@certd/plugin-lib';
@ -11,7 +9,6 @@ import { TencentAccess } from '@certd/plugin-lib';
icon: 'svg:icon-tencentcloud', icon: 'svg:icon-tencentcloud',
}) })
export class TencentDnsProvider extends AbstractDnsProvider { export class TencentDnsProvider extends AbstractDnsProvider {
@Autowire()
access!: TencentAccess; access!: TencentAccess;
client!: any; client!: any;
@ -19,6 +16,7 @@ export class TencentDnsProvider extends AbstractDnsProvider {
endpoint = 'dnspod.tencentcloudapi.com'; endpoint = 'dnspod.tencentcloudapi.com';
async onInstance() { async onInstance() {
this.access = this.ctx.access as TencentAccess
const clientConfig = { const clientConfig = {
credential: this.access, credential: this.access,
region: '', region: '',

View File

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

View File

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