umi 4.7.23 → 4.7.25

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/dist/cli/dev.js CHANGED
@@ -34,17 +34,18 @@ __export(dev_exports, {
34
34
  module.exports = __toCommonJS(dev_exports);
35
35
  var import_fork = __toESM(require("./fork"));
36
36
  function dev() {
37
- const child = (0, import_fork.default)({
37
+ const devProcess = (0, import_fork.default)({
38
38
  scriptPath: require.resolve("../../bin/forkedDev")
39
39
  });
40
- process.on("SIGINT", () => {
41
- child.kill("SIGINT");
42
- process.exit(0);
43
- });
44
- process.on("SIGTERM", () => {
45
- child.kill("SIGTERM");
46
- process.exit(1);
47
- });
40
+ let exiting = false;
41
+ const onSignal = (signal, exitCode) => {
42
+ if (exiting)
43
+ return;
44
+ exiting = true;
45
+ devProcess.stop(signal).then(() => process.exit(exitCode));
46
+ };
47
+ process.on("SIGINT", () => onSignal("SIGINT", 0));
48
+ process.on("SIGTERM", () => onSignal("SIGTERM", 1));
48
49
  }
49
50
  // Annotate the CommonJS export names for ESM import in node:
50
51
  0 && (module.exports = {
@@ -1,5 +1,9 @@
1
+ import type { ChildProcess } from 'child_process';
1
2
  interface IOpts {
2
3
  scriptPath: string;
3
4
  }
4
- export default function start({ scriptPath }: IOpts): import("child_process").ChildProcess;
5
+ export default function start({ scriptPath }: IOpts): {
6
+ readonly child: ChildProcess;
7
+ stop(signal: NodeJS.Signals): Promise<void>;
8
+ };
5
9
  export {};
package/dist/cli/fork.js CHANGED
@@ -22,10 +22,63 @@ __export(fork_exports, {
22
22
  default: () => start
23
23
  });
24
24
  module.exports = __toCommonJS(fork_exports);
25
- var import_child_process = require("child_process");
26
25
  var import_utils = require("@umijs/utils");
26
+ var import_child_process = require("child_process");
27
27
  var usedPorts = [];
28
28
  function start({ scriptPath }) {
29
+ let child;
30
+ let restarting = false;
31
+ let stopping = false;
32
+ function spawn() {
33
+ const worker = (0, import_child_process.fork)(scriptPath, process.argv.slice(2), {
34
+ execArgv: getExecArgv()
35
+ });
36
+ child = worker;
37
+ worker.on("message", (data) => {
38
+ var _a;
39
+ const { type, payload } = data || {};
40
+ if (type === "RESTART" && !restarting && !stopping) {
41
+ restarting = true;
42
+ terminate(worker).then(() => (payload == null ? void 0 : payload.port) && waitForPort(payload.port)).then(() => {
43
+ if (stopping)
44
+ return;
45
+ if (payload == null ? void 0 : payload.port)
46
+ process.env.PORT = payload.port;
47
+ restarting = false;
48
+ spawn();
49
+ }).catch((err) => {
50
+ import_utils.logger.error(err);
51
+ process.exit(1);
52
+ });
53
+ }
54
+ (_a = process.send) == null ? void 0 : _a.call(process, data);
55
+ });
56
+ }
57
+ spawn();
58
+ return {
59
+ get child() {
60
+ return child;
61
+ },
62
+ stop(signal) {
63
+ stopping = true;
64
+ return terminate(child, signal);
65
+ }
66
+ };
67
+ }
68
+ function terminate(child, signal = "SIGTERM") {
69
+ if (child.exitCode !== null || child.signalCode !== null) {
70
+ return Promise.resolve();
71
+ }
72
+ return new Promise((resolve) => {
73
+ const timer = setTimeout(() => child.kill("SIGKILL"), 5e3);
74
+ child.once("exit", () => {
75
+ clearTimeout(timer);
76
+ resolve();
77
+ });
78
+ child.kill(signal);
79
+ });
80
+ }
81
+ function getExecArgv() {
29
82
  const execArgv = process.execArgv.slice(0);
30
83
  const inspectArgvIndex = execArgv.findIndex(
31
84
  (argv) => argv.includes("--inspect-brk")
@@ -50,41 +103,14 @@ function start({ scriptPath }) {
50
103
  })
51
104
  );
52
105
  }
53
- const child = (0, import_child_process.fork)(scriptPath, process.argv.slice(2), { execArgv });
54
- child.on("message", (data) => {
55
- var _a;
56
- const { type, payload } = data || {};
57
- if (type === "RESTART") {
58
- child.kill();
59
- if (payload == null ? void 0 : payload.port) {
60
- utilPortValid(payload.port, 20, () => {
61
- process.env.PORT = payload.port;
62
- start({ scriptPath });
63
- });
64
- } else {
65
- start({ scriptPath });
66
- }
67
- }
68
- (_a = process.send) == null ? void 0 : _a.call(process, data);
69
- });
70
- return child;
106
+ return execArgv;
71
107
  }
72
- function utilPortValid(port, totalTry, callback) {
73
- import_utils.portfinder.getPort({ startPort: port }, (err, findPort) => {
74
- if (err)
75
- callback(err);
76
- else {
77
- if (findPort === port) {
78
- callback();
79
- } else {
80
- if (totalTry > 0) {
81
- setTimeout(() => {
82
- utilPortValid(port, totalTry - 1, callback);
83
- }, 100);
84
- } else {
85
- callback(new Error(`Port ${port} is occupied`));
86
- }
87
- }
88
- }
108
+ function waitForPort(port, totalTry = 20) {
109
+ return new Promise((resolve) => {
110
+ import_utils.portfinder.getPort({ port }, (err, findPort) => {
111
+ if (err || findPort === port || totalTry <= 0)
112
+ return resolve();
113
+ setTimeout(() => waitForPort(port, totalTry - 1).then(resolve), 100);
114
+ });
89
115
  });
90
116
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "umi",
3
- "version": "4.7.23",
3
+ "version": "4.7.25",
4
4
  "description": "umi",
5
5
  "homepage": "https://github.com/umijs/umi/tree/master/packages/umi#readme",
6
6
  "bugs": "https://github.com/umijs/umi/issues",
@@ -35,17 +35,17 @@
35
35
  "@babel/runtime": "7.23.6",
36
36
  "prettier-plugin-organize-imports": "^3.2.2",
37
37
  "prettier-plugin-packagejson": "2.4.3",
38
- "@umijs/bundler-webpack": "4.7.23",
39
- "@umijs/core": "4.7.23",
40
- "@umijs/bundler-utils": "4.7.23",
41
- "@umijs/renderer-react": "4.7.23",
42
- "@umijs/preset-umi": "4.7.23",
43
- "@umijs/server": "4.7.23",
44
- "@umijs/utils": "4.7.23",
45
- "@umijs/test": "4.7.23"
38
+ "@umijs/bundler-utils": "4.7.25",
39
+ "@umijs/core": "4.7.25",
40
+ "@umijs/preset-umi": "4.7.25",
41
+ "@umijs/renderer-react": "4.7.25",
42
+ "@umijs/bundler-webpack": "4.7.25",
43
+ "@umijs/server": "4.7.25",
44
+ "@umijs/test": "4.7.25",
45
+ "@umijs/utils": "4.7.25"
46
46
  },
47
47
  "devDependencies": {
48
- "@umijs/lint": "4.7.23"
48
+ "@umijs/lint": "4.7.25"
49
49
  },
50
50
  "engines": {
51
51
  "node": ">=14"