@certd/pipeline 1.38.0 → 1.38.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
7
+
8
+ ### Bug Fixes
9
+
10
+ * 修复插件修改名字和删除后没有注销注册的bug ([61192b9](https://github.com/certd/certd/commit/61192b998a7088a8f446fd224cc242def462a79b))
11
+
12
+ ### Performance Improvements
13
+
14
+ * 支持同步域名过期时间 ([a97cee8](https://github.com/certd/certd/commit/a97cee84f3bfdeeb2083d91f748cac5405fed6ae))
15
+
16
+ ## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
17
+
18
+ ### Bug Fixes
19
+
20
+ * 修复自定义插件name丢失author导致找不到插件的bug ([2fbb58e](https://github.com/certd/certd/commit/2fbb58eb2b239eab4864f90aa72b0ef2ada38e8f))
21
+
6
22
  # [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
7
23
 
8
24
  ### Features
@@ -6,11 +6,11 @@ export type PageSearch = {
6
6
  pageSize?: number;
7
7
  searchKey?: string;
8
8
  };
9
- export type PageRes = {
9
+ export type PageRes<T = any> = {
10
10
  pageNo?: number;
11
11
  pageSize?: number;
12
- total?: string;
13
- list: any[];
12
+ total?: number;
13
+ list: T[];
14
14
  };
15
15
  export declare class Pager {
16
16
  pageNo: number;
@@ -19,3 +19,9 @@ export declare class Pager {
19
19
  getOffset(): number;
20
20
  setOffset(offset: number): void;
21
21
  }
22
+ export declare function doPageTurn<T>(req: {
23
+ pager: Pager;
24
+ getPage: (pager: Pager) => Promise<PageRes<T>>;
25
+ itemHandle?: (item: T) => Promise<void>;
26
+ batchHandle?: (pageRes: PageRes<T>) => Promise<void>;
27
+ }): Promise<number>;
@@ -12,3 +12,28 @@ export class Pager {
12
12
  this.pageNo = Math.ceil(offset / (this.pageSize ?? 50)) + 1;
13
13
  }
14
14
  }
15
+ export async function doPageTurn(req) {
16
+ let count = 0;
17
+ const { pager, getPage, itemHandle, batchHandle } = req;
18
+ while (true) {
19
+ const pageRes = await getPage(pager);
20
+ if (!pageRes || !pageRes.list || pageRes.list.length === 0) {
21
+ break;
22
+ }
23
+ count += pageRes.list.length;
24
+ if (batchHandle) {
25
+ await batchHandle(pageRes);
26
+ }
27
+ if (itemHandle) {
28
+ for (const item of pageRes.list) {
29
+ await itemHandle(item);
30
+ }
31
+ }
32
+ if (pageRes.total && pageRes.total >= 0 && count >= pageRes.total) {
33
+ //遍历完成
34
+ break;
35
+ }
36
+ pager.pageNo++;
37
+ }
38
+ return count;
39
+ }
@@ -241,6 +241,10 @@ export class Executor {
241
241
  const lastStatus = this.lastStatusMap.get(step.id);
242
242
  //执行任务
243
243
  const plugin = pluginRegistry.get(step.type);
244
+ if (!plugin) {
245
+ currentLogger.error(`未找到插件${step.type}`);
246
+ throw new Error(`未找到插件${step.type}`);
247
+ }
244
248
  //@ts-ignore
245
249
  let instance = null;
246
250
  try {
@@ -250,7 +254,7 @@ export class Executor {
250
254
  instance = new pluginCls();
251
255
  }
252
256
  catch (e) {
253
- currentLogger.error(`实例化插件失败:${e.message}`);
257
+ currentLogger.error(`实例化插件失败:${step.type}:${e.message}`);
254
258
  throw new Error(`实例化插件失败`, e);
255
259
  }
256
260
  // @ts-ignore
@@ -18,4 +18,13 @@ const onRegister = ({ key, value }) => {
18
18
  }
19
19
  pluginGroups.other.plugins.push(value.define);
20
20
  };
21
- export const pluginRegistry = createRegistry("plugin", onRegister);
21
+ const onUnRegister = ({ key }) => {
22
+ for (const group of Object.values(pluginGroups)) {
23
+ const index = group.plugins.findIndex(plugin => plugin.name === key);
24
+ if (index > -1) {
25
+ group.plugins.splice(index, 1);
26
+ return;
27
+ }
28
+ }
29
+ };
30
+ export const pluginRegistry = createRegistry("plugin", onRegister, onUnRegister);
@@ -23,7 +23,8 @@ export declare class Registry<T = any> {
23
23
  [key: string]: RegistryItem<T>;
24
24
  };
25
25
  onRegister?: OnRegister<T>;
26
- constructor(type: string, onRegister?: OnRegister<T>);
26
+ onUnRegister?: OnRegister<T>;
27
+ constructor(type: string, onRegister?: OnRegister<T>, onUnRegister?: OnRegister<T>);
27
28
  register(key: string, value: RegistryItem<T>): void;
28
29
  unRegister(key: string): void;
29
30
  get(name: string): RegistryItem<T>;
@@ -41,4 +42,4 @@ export declare class Registry<T = any> {
41
42
  }[];
42
43
  getDefine(key: string, prefix?: string): Registrable | undefined;
43
44
  }
44
- export declare function createRegistry<T>(type: string, onRegister?: OnRegister<T>): Registry<T>;
45
+ export declare function createRegistry<T>(type: string, onRegister?: OnRegister<T>, onUnRegister?: OnRegister<T>): Registry<T>;
@@ -3,9 +3,11 @@ export class Registry {
3
3
  type = "";
4
4
  storage = {};
5
5
  onRegister;
6
- constructor(type, onRegister) {
6
+ onUnRegister;
7
+ constructor(type, onRegister, onUnRegister) {
7
8
  this.type = type;
8
9
  this.onRegister = onRegister;
10
+ this.onUnRegister = onUnRegister;
9
11
  }
10
12
  register(key, value) {
11
13
  if (!key || value == null) {
@@ -22,6 +24,13 @@ export class Registry {
22
24
  logger.info(`注册插件:${this.type}:${key}`);
23
25
  }
24
26
  unRegister(key) {
27
+ if (this.onUnRegister) {
28
+ this.onUnRegister({
29
+ registry: this,
30
+ key,
31
+ value: this.storage[key],
32
+ });
33
+ }
25
34
  delete this.storage[key];
26
35
  logger.info(`反注册插件:${this.type}:${key}`);
27
36
  }
@@ -74,7 +83,7 @@ export class Registry {
74
83
  return item.define;
75
84
  }
76
85
  }
77
- export function createRegistry(type, onRegister) {
86
+ export function createRegistry(type, onRegister, onUnRegister) {
78
87
  const pipelineregistrycacheKey = "PIPELINE_REGISTRY_CACHE";
79
88
  // @ts-ignore
80
89
  let cached = global[pipelineregistrycacheKey];
@@ -86,7 +95,7 @@ export function createRegistry(type, onRegister) {
86
95
  if (cached[type]) {
87
96
  return cached[type];
88
97
  }
89
- const newRegistry = new Registry(type, onRegister);
98
+ const newRegistry = new Registry(type, onRegister, onUnRegister);
90
99
  cached[type] = newRegistry;
91
100
  return newRegistry;
92
101
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@certd/pipeline",
3
3
  "private": false,
4
- "version": "1.38.0",
4
+ "version": "1.38.2",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
@@ -18,8 +18,8 @@
18
18
  "compile": "tsc --skipLibCheck --watch"
19
19
  },
20
20
  "dependencies": {
21
- "@certd/basic": "^1.38.0",
22
- "@certd/plus-core": "^1.38.0",
21
+ "@certd/basic": "^1.38.2",
22
+ "@certd/plus-core": "^1.38.2",
23
23
  "dayjs": "^1.11.7",
24
24
  "lodash-es": "^4.17.21",
25
25
  "reflect-metadata": "^0.1.13"
@@ -45,5 +45,5 @@
45
45
  "tslib": "^2.8.1",
46
46
  "typescript": "^5.4.2"
47
47
  },
48
- "gitHead": "a218cd0ffb16b658dd261e106cc0dbea63034756"
48
+ "gitHead": "f92dc6a1ad103de9cc184da3b84096943906cb59"
49
49
  }
@@ -0,0 +1,17 @@
1
+ import { expect } from "chai";
2
+ import "mocha";
3
+ import { EchoPlugin } from "./echo-plugin.js";
4
+ describe("task_plugin", function () {
5
+ it("#taskplugin", function () {
6
+ console.log("before new plugin");
7
+ const echoPlugin = new EchoPlugin();
8
+ console.log("before set property", echoPlugin);
9
+ echoPlugin.cert = { test: 1 };
10
+ console.log("before execute");
11
+ // @ts-ignore
12
+ echoPlugin.execute();
13
+ console.log("after execute");
14
+ expect(echoPlugin.cert.test).eq(1);
15
+ });
16
+ });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2luZGV4LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLEVBQUUsQ0FBQyxhQUFhLEVBQUU7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvQyxVQUFVLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QixhQUFhO1FBQ2IsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==