@eggjs/cluster 4.0.0-beta.19 → 4.0.0-beta.21

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.
Files changed (37) hide show
  1. package/dist/agent_worker.d.ts +1 -1
  2. package/dist/agent_worker.js +63 -50
  3. package/dist/app_worker.d.ts +1 -1
  4. package/dist/app_worker.js +165 -127
  5. package/dist/dirname.d.ts +1 -0
  6. package/dist/dirname.js +10 -10
  7. package/dist/error/ClusterAgentWorkerError.d.ts +9 -12
  8. package/dist/error/ClusterAgentWorkerError.js +19 -22
  9. package/dist/error/ClusterWorkerExceptionError.d.ts +6 -9
  10. package/dist/error/ClusterWorkerExceptionError.js +14 -17
  11. package/dist/error/index.d.ts +2 -0
  12. package/dist/error/index.js +3 -0
  13. package/dist/index.d.ts +5 -10
  14. package/dist/index.js +16 -20
  15. package/dist/master.d.ts +86 -92
  16. package/dist/master.js +543 -416
  17. package/dist/utils/messenger.d.ts +44 -48
  18. package/dist/utils/messenger.js +178 -143
  19. package/dist/utils/mode/base/agent.d.ts +35 -42
  20. package/dist/utils/mode/base/agent.js +64 -62
  21. package/dist/utils/mode/base/app.d.ts +45 -53
  22. package/dist/utils/mode/base/app.js +79 -76
  23. package/dist/utils/mode/impl/process/agent.d.ts +16 -20
  24. package/dist/utils/mode/impl/process/agent.js +101 -91
  25. package/dist/utils/mode/impl/process/app.d.ts +20 -11
  26. package/dist/utils/mode/impl/process/app.js +118 -116
  27. package/dist/utils/mode/impl/worker_threads/agent.d.ts +16 -20
  28. package/dist/utils/mode/impl/worker_threads/agent.js +82 -77
  29. package/dist/utils/mode/impl/worker_threads/app.d.ts +25 -12
  30. package/dist/utils/mode/impl/worker_threads/app.js +137 -128
  31. package/dist/utils/options.d.ts +76 -79
  32. package/dist/utils/options.js +80 -55
  33. package/dist/utils/terminate.d.ts +6 -0
  34. package/dist/utils/terminate.js +70 -51
  35. package/dist/utils/worker_manager.d.ts +24 -31
  36. package/dist/utils/worker_manager.js +74 -68
  37. package/package.json +6 -6
@@ -1,62 +1,81 @@
1
- import { debuglog } from "node:util";
2
- import { once } from "node:events";
3
- import { ChildProcess } from "node:child_process";
4
- import { setTimeout } from "node:timers/promises";
5
- import { pstree } from "@fengmk2/ps-tree";
6
-
7
- //#region src/utils/terminate.ts
8
- const debug = debuglog("egg/cluster/utils/terminate");
9
- async function terminate(subProcess, timeout) {
10
- const pid = subProcess.process?.pid ?? subProcess.pid;
11
- const childPids = await getChildPids(pid);
12
- await Promise.all([killProcess(subProcess, timeout), killChildren(childPids, timeout)]);
1
+ import { debuglog } from 'node:util';
2
+ import { setTimeout as sleep } from 'node:timers/promises';
3
+ import { once } from 'node:events';
4
+ import { ChildProcess } from 'node:child_process';
5
+ import { pstree } from '@fengmk2/ps-tree';
6
+ const debug = debuglog('egg/cluster/utils/terminate');
7
+ export async function terminate(subProcess, timeout) {
8
+ const pid = subProcess.process?.pid ?? subProcess.pid;
9
+ const childPids = await getChildPids(pid);
10
+ await Promise.all([killProcess(subProcess, timeout), killChildren(childPids, timeout)]);
13
11
  }
12
+ // kill process, if SIGTERM not work, try SIGKILL
14
13
  async function killProcess(subProcess, timeout) {
15
- (subProcess.process ?? subProcess).kill("SIGTERM");
16
- await Promise.race([once(subProcess, "exit"), setTimeout(timeout)]);
17
- if (subProcess.killed) return;
18
- (subProcess.process ?? subProcess).kill("SIGKILL");
14
+ // https://github.com/nodejs/node/pull/34312
15
+ (subProcess.process ?? subProcess).kill('SIGTERM');
16
+ await Promise.race([once(subProcess, 'exit'), sleep(timeout)]);
17
+ if (subProcess.killed) {
18
+ return;
19
+ }
20
+ // SIGKILL: http://man7.org/linux/man-pages/man7/signal.7.html
21
+ // worker: https://github.com/nodejs/node/blob/master/lib/internal/cluster/worker.js#L22
22
+ // subProcess.kill is wrapped to subProcess.destroy, it will wait to disconnected.
23
+ (subProcess.process ?? subProcess).kill('SIGKILL');
19
24
  }
25
+ // kill all children processes, if SIGTERM not work, try SIGKILL
20
26
  async function killChildren(childrenPids, timeout) {
21
- if (childrenPids.length === 0) return;
22
- kill(childrenPids, "SIGTERM");
23
- const start = Date.now();
24
- const checkInterval = 400;
25
- let unterminated = [];
26
- while (Date.now() - start < timeout - checkInterval) {
27
- await setTimeout(checkInterval);
28
- unterminated = getUnterminatedProcesses(childrenPids);
29
- if (unterminated.length === 0) return;
30
- }
31
- kill(unterminated, "SIGKILL");
27
+ if (childrenPids.length === 0) {
28
+ return;
29
+ }
30
+ kill(childrenPids, 'SIGTERM');
31
+ const start = Date.now();
32
+ // if timeout is 1000, it will check twice.
33
+ const checkInterval = 400;
34
+ let unterminated = [];
35
+ while (Date.now() - start < timeout - checkInterval) {
36
+ await sleep(checkInterval);
37
+ unterminated = getUnterminatedProcesses(childrenPids);
38
+ if (unterminated.length === 0) {
39
+ return;
40
+ }
41
+ }
42
+ kill(unterminated, 'SIGKILL');
32
43
  }
33
44
  async function getChildPids(pid) {
34
- let childrenPids = [];
35
- try {
36
- childrenPids = (await pstree(pid)).map((c) => parseInt(c.PID));
37
- } catch (err) {
38
- debug("pstree %s error: %s, ignore it", pid, err);
39
- }
40
- return childrenPids;
45
+ let childrenPids = [];
46
+ try {
47
+ const children = await pstree(pid);
48
+ childrenPids = children.map(c => parseInt(c.PID));
49
+ }
50
+ catch (err) {
51
+ // if get children error, just ignore it
52
+ debug('pstree %s error: %s, ignore it', pid, err);
53
+ }
54
+ return childrenPids;
41
55
  }
42
56
  function kill(pids, signal) {
43
- for (const pid of pids) try {
44
- process.kill(pid, signal);
45
- } catch (err) {
46
- debug("kill %s error: %s, signal: %s, ignore it", pid, err, signal);
47
- }
57
+ for (const pid of pids) {
58
+ try {
59
+ process.kill(pid, signal);
60
+ }
61
+ catch (err) {
62
+ // ignore
63
+ debug('kill %s error: %s, signal: %s, ignore it', pid, err, signal);
64
+ }
65
+ }
48
66
  }
49
67
  function getUnterminatedProcesses(pids) {
50
- return pids.filter((pid) => {
51
- try {
52
- process.kill(pid, 0);
53
- return true;
54
- } catch (err) {
55
- debug("kill %s error: %s, it still alive", pid, err);
56
- return false;
57
- }
58
- });
68
+ return pids.filter(pid => {
69
+ try {
70
+ // success means it's still alive
71
+ process.kill(pid, 0);
72
+ return true;
73
+ }
74
+ catch (err) {
75
+ // error means it's dead
76
+ debug('kill %s error: %s, it still alive', pid, err);
77
+ return false;
78
+ }
79
+ });
59
80
  }
60
-
61
- //#endregion
62
- export { terminate };
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Rlcm1pbmF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLElBQUksS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBTXRELE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLFVBQXNCLEVBQUUsT0FBZTtJQUNyRSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3RELE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQUVELGlEQUFpRDtBQUNqRCxLQUFLLFVBQVUsV0FBVyxDQUFDLFVBQXNCLEVBQUUsT0FBZTtJQUNoRSw0Q0FBNEM7SUFDNUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRCxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUss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
@@ -1,32 +1,25 @@
1
- import { BaseAgentWorker } from "./mode/base/agent.js";
2
- import { BaseAppWorker } from "./mode/base/app.js";
3
- import { EventEmitter } from "node:events";
4
- import * as worker_threads0 from "worker_threads";
5
- import * as cluster0 from "cluster";
6
- import * as child_process0 from "child_process";
7
-
8
- //#region src/utils/worker_manager.d.ts
9
- declare class WorkerManager extends EventEmitter {
10
- agent: BaseAgentWorker | null;
11
- workers: Map<number, BaseAppWorker<worker_threads0.Worker | cluster0.Worker>>;
12
- exception: number;
13
- timer: NodeJS.Timeout;
14
- constructor();
15
- getWorkers(): number[];
16
- setAgent(agent: BaseAgentWorker): void;
17
- getAgent(): BaseAgentWorker<worker_threads0.Worker | child_process0.ChildProcess> | null;
18
- deleteAgent(): void;
19
- setWorker(worker: BaseAppWorker): void;
20
- getWorker(workerId: number): BaseAppWorker<worker_threads0.Worker | cluster0.Worker> | undefined;
21
- deleteWorker(workerId: number): void;
22
- listWorkerIds(): number[];
23
- listWorkers(): BaseAppWorker<worker_threads0.Worker | cluster0.Worker>[];
24
- getListeningWorkerIds(): number[];
25
- count(): {
26
- agent: number;
27
- worker: number;
28
- };
29
- startCheck(): void;
1
+ import { EventEmitter } from 'node:events';
2
+ import { BaseAgentWorker } from './mode/base/agent.ts';
3
+ import { BaseAppWorker } from './mode/base/app.ts';
4
+ export declare class WorkerManager extends EventEmitter {
5
+ agent: BaseAgentWorker | null;
6
+ workers: Map<number, BaseAppWorker<import("worker_threads").Worker | import("cluster").Worker>>;
7
+ exception: number;
8
+ timer: NodeJS.Timeout;
9
+ constructor();
10
+ getWorkers(): number[];
11
+ setAgent(agent: BaseAgentWorker): void;
12
+ getAgent(): BaseAgentWorker<import("child_process").ChildProcess | import("worker_threads").Worker> | null;
13
+ deleteAgent(): void;
14
+ setWorker(worker: BaseAppWorker): void;
15
+ getWorker(workerId: number): BaseAppWorker<import("worker_threads").Worker | import("cluster").Worker> | undefined;
16
+ deleteWorker(workerId: number): void;
17
+ listWorkerIds(): number[];
18
+ listWorkers(): BaseAppWorker<import("worker_threads").Worker | import("cluster").Worker>[];
19
+ getListeningWorkerIds(): number[];
20
+ count(): {
21
+ agent: number;
22
+ worker: number;
23
+ };
24
+ startCheck(): void;
30
25
  }
31
- //#endregion
32
- export { WorkerManager };
@@ -1,68 +1,74 @@
1
- import { EventEmitter } from "node:events";
2
-
3
- //#region src/utils/worker_manager.ts
4
- var WorkerManager = class extends EventEmitter {
5
- agent;
6
- workers = /* @__PURE__ */ new Map();
7
- exception = 0;
8
- timer;
9
- constructor() {
10
- super();
11
- this.agent = null;
12
- }
13
- getWorkers() {
14
- return Array.from(this.workers.keys());
15
- }
16
- setAgent(agent) {
17
- this.agent = agent;
18
- }
19
- getAgent() {
20
- return this.agent;
21
- }
22
- deleteAgent() {
23
- this.agent = null;
24
- }
25
- setWorker(worker) {
26
- this.workers.set(worker.workerId, worker);
27
- }
28
- getWorker(workerId) {
29
- return this.workers.get(workerId);
30
- }
31
- deleteWorker(workerId) {
32
- this.workers.delete(workerId);
33
- }
34
- listWorkerIds() {
35
- return Array.from(this.workers.keys());
36
- }
37
- listWorkers() {
38
- return Array.from(this.workers.values());
39
- }
40
- getListeningWorkerIds() {
41
- const keys = [];
42
- for (const [id, worker] of this.workers.entries()) if (worker.state === "listening") keys.push(id);
43
- return keys;
44
- }
45
- count() {
46
- return {
47
- agent: this.agent?.status === "started" ? 1 : 0,
48
- worker: this.listWorkerIds().length
49
- };
50
- }
51
- startCheck() {
52
- this.timer = setInterval(() => {
53
- const count = this.count();
54
- if (count.agent > 0 && count.worker > 0) {
55
- this.exception = 0;
56
- return;
57
- }
58
- this.exception++;
59
- if (this.exception >= 3) {
60
- this.emit("exception", count);
61
- clearInterval(this.timer);
62
- }
63
- }, 1e4);
64
- }
65
- };
66
-
67
- //#endregion
68
- export { WorkerManager };
1
+ import { EventEmitter } from 'node:events';
2
+ import { BaseAgentWorker } from "./mode/base/agent.js";
3
+ import { BaseAppWorker } from "./mode/base/app.js";
4
+ // worker manager to record agent and worker forked by egg-cluster
5
+ // can do some check stuff here to monitor the healthy
6
+ export class WorkerManager extends EventEmitter {
7
+ agent;
8
+ workers = new Map();
9
+ exception = 0;
10
+ timer;
11
+ constructor() {
12
+ super();
13
+ this.agent = null;
14
+ }
15
+ getWorkers() {
16
+ return Array.from(this.workers.keys());
17
+ }
18
+ setAgent(agent) {
19
+ this.agent = agent;
20
+ }
21
+ getAgent() {
22
+ return this.agent;
23
+ }
24
+ deleteAgent() {
25
+ this.agent = null;
26
+ }
27
+ setWorker(worker) {
28
+ this.workers.set(worker.workerId, worker);
29
+ }
30
+ getWorker(workerId) {
31
+ return this.workers.get(workerId);
32
+ }
33
+ deleteWorker(workerId) {
34
+ this.workers.delete(workerId);
35
+ }
36
+ listWorkerIds() {
37
+ return Array.from(this.workers.keys());
38
+ }
39
+ listWorkers() {
40
+ return Array.from(this.workers.values());
41
+ }
42
+ getListeningWorkerIds() {
43
+ const keys = [];
44
+ for (const [id, worker] of this.workers.entries()) {
45
+ if (worker.state === 'listening') {
46
+ keys.push(id);
47
+ }
48
+ }
49
+ return keys;
50
+ }
51
+ count() {
52
+ return {
53
+ agent: this.agent?.status === 'started' ? 1 : 0,
54
+ worker: this.listWorkerIds().length,
55
+ };
56
+ }
57
+ // check agent and worker must both alive
58
+ // if exception appear 3 times, emit an exception event
59
+ startCheck() {
60
+ this.timer = setInterval(() => {
61
+ const count = this.count();
62
+ if (count.agent > 0 && count.worker > 0) {
63
+ this.exception = 0;
64
+ return;
65
+ }
66
+ this.exception++;
67
+ if (this.exception >= 3) {
68
+ this.emit('exception', count);
69
+ clearInterval(this.timer);
70
+ }
71
+ }, 10000);
72
+ }
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX21hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvd29ya2VyX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELGtFQUFrRTtBQUNsRSxzREFBc0Q7QUFDdEQsTUFBTSxPQUFPLGFBQWMsU0FBUSxZQUFZO0lBQzdDLEtBQUssQ0FBeUI7SUFDOUIsT0FBTyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQzNDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDZCxLQUFLLENBQWlCO0lBRXRCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFzQjtRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBcUI7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFnQjtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbEQsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLHVEQUF1RDtJQUN2RCxVQUFVO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDWixDQUFDO0NBQ0YifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/cluster",
3
- "version": "4.0.0-beta.19",
3
+ "version": "4.0.0-beta.21",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -45,7 +45,7 @@
45
45
  "sendmessage": "^3.0.1",
46
46
  "terminal-link": "^5.0.0",
47
47
  "utility": "^2.5.0",
48
- "@eggjs/utils": "5.0.0-beta.19"
48
+ "@eggjs/utils": "5.0.0-beta.21"
49
49
  },
50
50
  "devDependencies": {
51
51
  "address": "2",
@@ -55,15 +55,15 @@
55
55
  "typescript": "^5.9.3",
56
56
  "urllib": "^4.8.2",
57
57
  "vitest": "4.0.0-beta.16",
58
- "@eggjs/supertest": "9.0.0-beta.19",
59
- "@eggjs/tsconfig": "3.1.0-beta.19",
60
- "@eggjs/mock": "7.0.0-beta.19"
58
+ "@eggjs/mock": "7.0.0-beta.21",
59
+ "@eggjs/supertest": "9.0.0-beta.21",
60
+ "@eggjs/tsconfig": "3.1.0-beta.21"
61
61
  },
62
62
  "engines": {
63
63
  "node": ">=22.18.0"
64
64
  },
65
65
  "scripts": {
66
- "build": "tsdown",
66
+ "build": "tsdown && rimraf dist && tsc -b --clean && tsc",
67
67
  "lint": "oxlint",
68
68
  "typecheck": "tsc --noEmit",
69
69
  "test": "vitest run"