@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 +16 -0
- package/dist/context/index.d.ts +9 -3
- package/dist/context/index.js +25 -0
- package/dist/core/executor.js +5 -1
- package/dist/plugin/registry.js +10 -1
- package/dist/registry/registry.d.ts +3 -2
- package/dist/registry/registry.js +12 -3
- package/package.json +4 -4
- package/test/dist/index.test.js +17 -0
- package/stats.html +0 -6177
- package/test/echo-plugin.js +0 -86
- package/test/pipeline/access-service-test.js +0 -65
- package/test/user.secret.ts +0 -4
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
|
package/dist/context/index.d.ts
CHANGED
|
@@ -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?:
|
|
13
|
-
list:
|
|
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>;
|
package/dist/context/index.js
CHANGED
|
@@ -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
|
+
}
|
package/dist/core/executor.js
CHANGED
|
@@ -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
|
package/dist/plugin/registry.js
CHANGED
|
@@ -18,4 +18,13 @@ const onRegister = ({ key, value }) => {
|
|
|
18
18
|
}
|
|
19
19
|
pluginGroups.other.plugins.push(value.define);
|
|
20
20
|
};
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
22
|
-
"@certd/plus-core": "^1.38.
|
|
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": "
|
|
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==
|