@vxrn/vite-plugin-metro 1.17.6 → 1.17.9
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/cjs/utils/exit.cjs +24 -0
- package/dist/cjs/utils/exit.native.js +45 -0
- package/dist/cjs/utils/exit.native.js.map +1 -1
- package/dist/esm/utils/exit.mjs +24 -0
- package/dist/esm/utils/exit.mjs.map +1 -1
- package/dist/esm/utils/exit.native.js +45 -0
- package/dist/esm/utils/exit.native.js.map +1 -1
- package/package.json +2 -2
- package/src/utils/exit.ts +51 -1
- package/types/utils/exit.d.ts +7 -0
- package/types/utils/exit.d.ts.map +1 -1
package/dist/cjs/utils/exit.cjs
CHANGED
|
@@ -105,6 +105,14 @@ function ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.
|
|
|
105
105
|
}
|
|
106
106
|
debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);
|
|
107
107
|
const elapsedTime = Date.now() - startedAtMs;
|
|
108
|
+
const killedChildren = killActiveChildProcesses(elapsedTime < 200 ? "SIGTERM" : "SIGKILL");
|
|
109
|
+
if (killedChildren > 0) {
|
|
110
|
+
const recheck = setTimeout(() => {
|
|
111
|
+
clearTimeout(recheck);
|
|
112
|
+
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
113
|
+
}, 50);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
108
116
|
if (elapsedTime > waitUntilExitMs) {
|
|
109
117
|
debug("active handles detected past the exit delay, forcefully exiting:", activeResources);
|
|
110
118
|
tryWarnActiveProcesses();
|
|
@@ -115,6 +123,22 @@ function ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.
|
|
|
115
123
|
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
116
124
|
}, 100);
|
|
117
125
|
}
|
|
126
|
+
function killActiveChildProcesses(signal) {
|
|
127
|
+
try {
|
|
128
|
+
const children = import_node_process.default._getActiveHandles().filter(handle => handle instanceof import_node_child_process.ChildProcess);
|
|
129
|
+
for (const child of children) {
|
|
130
|
+
try {
|
|
131
|
+
child.kill(signal);
|
|
132
|
+
} catch (err) {
|
|
133
|
+
debug("failed to kill child process:", err);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return children.length;
|
|
137
|
+
} catch (err) {
|
|
138
|
+
debug("failed to enumerate active child processes:", err);
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
118
142
|
function tryWarnActiveProcesses() {
|
|
119
143
|
let activeProcesses = [];
|
|
120
144
|
try {
|
|
@@ -178,6 +178,14 @@ function ensureProcessExitsAfterDelay() {
|
|
|
178
178
|
}
|
|
179
179
|
debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);
|
|
180
180
|
var elapsedTime = Date.now() - startedAtMs;
|
|
181
|
+
var killedChildren = killActiveChildProcesses(elapsedTime < 200 ? "SIGTERM" : "SIGKILL");
|
|
182
|
+
if (killedChildren > 0) {
|
|
183
|
+
var recheck = setTimeout(function () {
|
|
184
|
+
clearTimeout(recheck);
|
|
185
|
+
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
186
|
+
}, 50);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
181
189
|
if (elapsedTime > waitUntilExitMs) {
|
|
182
190
|
debug("active handles detected past the exit delay, forcefully exiting:", activeResources);
|
|
183
191
|
tryWarnActiveProcesses();
|
|
@@ -188,6 +196,43 @@ function ensureProcessExitsAfterDelay() {
|
|
|
188
196
|
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
189
197
|
}, 100);
|
|
190
198
|
}
|
|
199
|
+
function killActiveChildProcesses(signal) {
|
|
200
|
+
try {
|
|
201
|
+
var children = import_process.default._getActiveHandles().filter(function (handle) {
|
|
202
|
+
return _instanceof(handle, import_child_process.ChildProcess);
|
|
203
|
+
});
|
|
204
|
+
var _iteratorNormalCompletion = true,
|
|
205
|
+
_didIteratorError = false,
|
|
206
|
+
_iteratorError = void 0;
|
|
207
|
+
try {
|
|
208
|
+
for (var _iterator = children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
209
|
+
var child = _step.value;
|
|
210
|
+
try {
|
|
211
|
+
child.kill(signal);
|
|
212
|
+
} catch (err) {
|
|
213
|
+
debug("failed to kill child process:", err);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
} catch (err) {
|
|
217
|
+
_didIteratorError = true;
|
|
218
|
+
_iteratorError = err;
|
|
219
|
+
} finally {
|
|
220
|
+
try {
|
|
221
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
222
|
+
_iterator.return();
|
|
223
|
+
}
|
|
224
|
+
} finally {
|
|
225
|
+
if (_didIteratorError) {
|
|
226
|
+
throw _iteratorError;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return children.length;
|
|
231
|
+
} catch (err) {
|
|
232
|
+
debug("failed to enumerate active child processes:", err);
|
|
233
|
+
return 0;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
191
236
|
function tryWarnActiveProcesses() {
|
|
192
237
|
var activeProcesses = [];
|
|
193
238
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","exit_exports","__export","ensureProcessExitsAfterDelay","guardAsync","installExitHooks","warn","module","exports","import_child_process","require","import_process","__toESM","import_picocolors","_instanceof","left","right","Symbol","hasInstance","debug","_len","arguments","length","_","Array","_key","PRE_EXIT_SIGNALS","queue","unsubscribe","asyncExitHook","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","_process_exitCode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Object","entries","iterator","_step","next","done","hookAsync","error","err","return","default","exitCode","exit","hooks","hook","on","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","signal2","hook2","removeListener"],"sources":["../../../src/utils/exit.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,4BAAA,EAAAA,CAAA,KAAAA,4BAAA;EAAAC,UAAA,EAAAA,CAAA,KAAAA,UAAA;EAAAC,gBAAA,EAAAA,CAAA,KAAAA,gBAAA;EAAAC,IAAA,EAAAA,CAAA,KAAAA;AAAA;AAMAC,MAAA,CAAAC,OAAA,GAAAZ,YAAA,CAAAK,YAA6B;AAC7B,IAAAQ,oBAAA,GAAoBC,OAAA;AAEpB,IAAAC,cAAA,GAAAC,OAAmB,CAAAF,OAAA;AAEnB,IAAAG,iBAAmB,GAAAD,OAAW,CAAAF,OAAA;AAAC,SAAAI,YAAAC,IAAA,EAAAC,KAAA;EAI/B,IAAMA,KAAA,mBAAsCC,MAAU,gBAAU,IAAAD,KAAW,CAAAC,MAAU,CAAAC,WAAA;IAIrF,OAAM,EAAAF,KAA0B,CAAAC,MAAA,CAAAC,WAAA,EAAAH,IAAA;EAEhC,OAAI;IAGG,OAASA,IAAA,YAAiBC,KAAA;EAE/B;AAEE;AAAmC,IACrCG,KAAA,YAAAA,CAAA;EAEA,SAAMC,IAAK,GAAAC,SAAa,CAAAC,MAAA,EAAAC,CAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAExBF,CAAA,CAAAE,IAAO,IAAAJ,SAAM,CAAAI,IAAA;EACX;AACA;AACE,IAAAC,gBAAa,IAAQ,QACvB,EAEA,QAAK,EACH,WAAc,UAChB;AAEJ,IAAAC,KAAA;AAGA,IAAAC,WAAS;AACP,SAAOvB,gBAAWA,CAAAwB,aAAY;EAC5B,KAAAF,KAAM,CAAAL,MAAA;IAENM,WAAW,GAACE,oBAAqB;EAC/B;EACEH,KAAA,CAAAI,IAAA,CAAAF,aAAgB;EAAM,OACxB,YAAS;IACP,IAAAG,KAAA,GAAML,KAAA,CAAAM,OAAA,CAAAJ,aAAA;IAAiD,IACzDG,KAAA;MACFL,KAAA,CAAAO,MAAA,CAAAF,KAAA;IAEA;IAEA,KAAAL,KAAA,CAAAL,MAAA;MACDM,WAAA,aAAAA,WAAA,uBAAAA,WAAA;IACH;EAEA;AACE;AACA,SAAAO,cAAqBA,CAAAC,MAAA;EACnB,OAAAhC,UAAa,mBAAe;IAC5B,IAAAiC,iBAAoB;IACpBlB,KAAA,sBAAAiB,MAAW,mBAAYT,KAAA,CAAAL,MAAA;IACzB,IAAAgB,yBAAA;MAAAC,iBAAA;MAAAC,cAAA;IACA;MACE,SAAWC,SAAS,GAAAC,MAAS,CAAAC,OAAO,CAAAhB,KAAA,EAAAV,MAAA,CAAA2B,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;QAClC,KAAAN,KAAA,EAAAgB,SAAA,IAAAH,KAAQ,CAAA7C,KAAA;QACV;UACF,MAAAgD,SAAA,CAAAZ,MAAA;QACF,SAAAa,KAAA;
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","exit_exports","__export","ensureProcessExitsAfterDelay","guardAsync","installExitHooks","warn","module","exports","import_child_process","require","import_process","__toESM","import_picocolors","_instanceof","left","right","Symbol","hasInstance","debug","_len","arguments","length","_","Array","_key","PRE_EXIT_SIGNALS","queue","unsubscribe","asyncExitHook","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","_process_exitCode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Object","entries","iterator","_step","next","done","hookAsync","error","err","return","default","exitCode","exit","hooks","hook","on","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","signal2","hook2","removeListener","waitUntilExitMs","startedAtMs","Date","now","expectedResources","stdout","isTTY","stderr","stdin","activeResources","getActiveResourcesInfo","unexpectedActiveResources","filter","activeResource","canExitProcess","elapsedTime","killedChildren","killActiveChildProcesses","recheck","setTimeout","clearTimeout"],"sources":["../../../src/utils/exit.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/esm/utils/exit.mjs
CHANGED
|
@@ -64,6 +64,14 @@ function ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.
|
|
|
64
64
|
}
|
|
65
65
|
debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);
|
|
66
66
|
const elapsedTime = Date.now() - startedAtMs;
|
|
67
|
+
const killedChildren = killActiveChildProcesses(elapsedTime < 200 ? "SIGTERM" : "SIGKILL");
|
|
68
|
+
if (killedChildren > 0) {
|
|
69
|
+
const recheck = setTimeout(() => {
|
|
70
|
+
clearTimeout(recheck);
|
|
71
|
+
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
72
|
+
}, 50);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
67
75
|
if (elapsedTime > waitUntilExitMs) {
|
|
68
76
|
debug("active handles detected past the exit delay, forcefully exiting:", activeResources);
|
|
69
77
|
tryWarnActiveProcesses();
|
|
@@ -74,6 +82,22 @@ function ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.
|
|
|
74
82
|
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
75
83
|
}, 100);
|
|
76
84
|
}
|
|
85
|
+
function killActiveChildProcesses(signal) {
|
|
86
|
+
try {
|
|
87
|
+
const children = process._getActiveHandles().filter(handle => handle instanceof ChildProcess);
|
|
88
|
+
for (const child of children) {
|
|
89
|
+
try {
|
|
90
|
+
child.kill(signal);
|
|
91
|
+
} catch (err) {
|
|
92
|
+
debug("failed to kill child process:", err);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return children.length;
|
|
96
|
+
} catch (err) {
|
|
97
|
+
debug("failed to enumerate active child processes:", err);
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
77
101
|
function tryWarnActiveProcesses() {
|
|
78
102
|
let activeProcesses = [];
|
|
79
103
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ChildProcess","process","colors","debug","_","PRE_EXIT_SIGNALS","queue","unsubscribe","installExitHooks","asyncExitHook","length","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","guardAsync","hookAsync","Object","entries","error","exitCode","exit","hooks","hook","on","removeListener","ensureProcessExitsAfterDelay","waitUntilExitMs","startedAtMs","Date","now","expectedResources","stdout","isTTY","stderr","stdin","activeResources","getActiveResourcesInfo","unexpectedActiveResources","filter","activeResource","canExitProcess","elapsedTime","
|
|
1
|
+
{"version":3,"names":["ChildProcess","process","colors","debug","_","PRE_EXIT_SIGNALS","queue","unsubscribe","installExitHooks","asyncExitHook","length","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","guardAsync","hookAsync","Object","entries","error","exitCode","exit","hooks","hook","on","removeListener","ensureProcessExitsAfterDelay","waitUntilExitMs","startedAtMs","Date","now","expectedResources","stdout","isTTY","stderr","stdin","activeResources","getActiveResourcesInfo","unexpectedActiveResources","filter","activeResource","canExitProcess","elapsedTime","killedChildren","killActiveChildProcesses","recheck","setTimeout","clearTimeout","tryWarnActiveProcesses","timeoutId","children","_getActiveHandles","handle","child","kill","err","activeProcesses","map","spawnargs","join","warn","singularOrPlural","fn","invoked","returnValue","guard","args","message","console","value","yellow"],"sources":["../../../src/utils/exit.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -135,6 +135,14 @@ function ensureProcessExitsAfterDelay() {
|
|
|
135
135
|
}
|
|
136
136
|
debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);
|
|
137
137
|
var elapsedTime = Date.now() - startedAtMs;
|
|
138
|
+
var killedChildren = killActiveChildProcesses(elapsedTime < 200 ? "SIGTERM" : "SIGKILL");
|
|
139
|
+
if (killedChildren > 0) {
|
|
140
|
+
var recheck = setTimeout(function () {
|
|
141
|
+
clearTimeout(recheck);
|
|
142
|
+
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
143
|
+
}, 50);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
138
146
|
if (elapsedTime > waitUntilExitMs) {
|
|
139
147
|
debug("active handles detected past the exit delay, forcefully exiting:", activeResources);
|
|
140
148
|
tryWarnActiveProcesses();
|
|
@@ -145,6 +153,43 @@ function ensureProcessExitsAfterDelay() {
|
|
|
145
153
|
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);
|
|
146
154
|
}, 100);
|
|
147
155
|
}
|
|
156
|
+
function killActiveChildProcesses(signal) {
|
|
157
|
+
try {
|
|
158
|
+
var children = process._getActiveHandles().filter(function (handle) {
|
|
159
|
+
return _instanceof(handle, ChildProcess);
|
|
160
|
+
});
|
|
161
|
+
var _iteratorNormalCompletion = true,
|
|
162
|
+
_didIteratorError = false,
|
|
163
|
+
_iteratorError = void 0;
|
|
164
|
+
try {
|
|
165
|
+
for (var _iterator = children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
166
|
+
var child = _step.value;
|
|
167
|
+
try {
|
|
168
|
+
child.kill(signal);
|
|
169
|
+
} catch (err) {
|
|
170
|
+
debug("failed to kill child process:", err);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
} catch (err) {
|
|
174
|
+
_didIteratorError = true;
|
|
175
|
+
_iteratorError = err;
|
|
176
|
+
} finally {
|
|
177
|
+
try {
|
|
178
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
179
|
+
_iterator.return();
|
|
180
|
+
}
|
|
181
|
+
} finally {
|
|
182
|
+
if (_didIteratorError) {
|
|
183
|
+
throw _iteratorError;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return children.length;
|
|
188
|
+
} catch (err) {
|
|
189
|
+
debug("failed to enumerate active child processes:", err);
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
148
193
|
function tryWarnActiveProcesses() {
|
|
149
194
|
var activeProcesses = [];
|
|
150
195
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ChildProcess","process","colors","_instanceof","left","right","Symbol","hasInstance","debug","_len","arguments","length","_","Array","_key","PRE_EXIT_SIGNALS","queue","unsubscribe","installExitHooks","asyncExitHook","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","guardAsync","_process_exitCode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Object","entries","iterator","_step","next","done","hookAsync","value","error","err","return","exitCode","exit","hooks","hook","on","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","signal2","hook2","removeListener","ensureProcessExitsAfterDelay","waitUntilExitMs","startedAtMs","Date","now"],"sources":["../../../src/utils/exit.ts"],"sourcesContent":[null],"mappings":"AAMA,SAASA,YAAA,QAAoB;AAC7B,OAAOC,OAAA,MAAa;AAEpB,OAAOC,MAAA,MAAY;AAEnB,SAAMC,WAAaA,CAAAC,IAAW,EAAAC,KAAA;EAAC,IAAAA,KAAA,mBAAAC,MAAA,oBAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA;IAI/B,OAAM,EAAAF,KAAA,CAAAC,MAAqC,CAACC,WAAU,EAAAH,IAAA;EAItD,OAAM;IAEF,OAAAA,IAAA,YAAmCC,KAAA;EAGhC;AAEL;AAEE,IAAAG,KAAA,YAAAA,CAAA,EAAc;EAChB,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAC,CAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAEAF,CAAA,CAAAE,IAAM,IAAKJ,SAAA,CAAAI,IAAa;EAExB;AACE;AACA,IAAAC,gBAAgB,IACd,UAAqB,QACvB,EAEA,SAAK,EACH,WAAc;AAChB,IACFC,KAAA;AACF,IAAAC,WAAA;AAGA,SAASC,gBAAeA,CAAAC,aAAwB;EAC9C,KAAAH,KAAO,CAAAL,MAAA,EAAW;IAChBM,WAAM,GAAAG,oBAA2B;EAEjC;EACEJ,KAAA,CAAAK,IAAI,CAAAF,aAAA;EACF,mBAAM;IAAgB,IACxBG,KAAA,GAASN,KAAA,CAAYO,OAAA,CAAAJ,aAAA;IACnB,IAAAG,KAAA,IAAM;MACRN,KAAA,CAAAQ,MAAA,CAAAF,KAAA;IACF;IAEA,KAAAN,KAAM,CAAAL,MAAA;MAENM,WAAa,aAAAA,WAAA,uBAAAA,WAAA;IACd;EACH;AAEA;AACE,SAAMQ,cAAwCA,CAAAC,MAAA;EAC9C,OAAAC,UAAW,mBAAU;IACnB,IAAAC,iBAAa;IACbpB,KAAA,CAAM,qBAAmBkB,MAAA,mBAAAV,KAAA,CAAAL,MAAA;IACzB,IAAAkB,yBAAuB;MAAAC,iBAAA;MAAAC,cAAA;IACzB;MACA,KAAO,IAAMC,SAAA,GAAAC,MAAA,CAAAC,OAAA,CAAAlB,KAAA,EAAAV,MAAA,CAAA6B,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;QACX,KAAAP,KAAY,EAAAiB,SAAY,IAAKH,KAAA,CAAAI,KAAO;QAClC;UACF,MAAAD,SAAA,CAAAb,MAAA;QACF,SAAAe,KAAA;UACFjC,KAAA,mCAAAc,KAAA,KAAAmB,KAAA;
|
|
1
|
+
{"version":3,"names":["ChildProcess","process","colors","_instanceof","left","right","Symbol","hasInstance","debug","_len","arguments","length","_","Array","_key","PRE_EXIT_SIGNALS","queue","unsubscribe","installExitHooks","asyncExitHook","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","guardAsync","_process_exitCode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Object","entries","iterator","_step","next","done","hookAsync","value","error","err","return","exitCode","exit","hooks","hook","on","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","signal2","hook2","removeListener","ensureProcessExitsAfterDelay","waitUntilExitMs","startedAtMs","Date","now","expectedResources","stdout","isTTY","stderr","stdin","activeResources","getActiveResourcesInfo","unexpectedActiveResources","filter","activeResource","canExitProcess","elapsedTime","killedChildren","killActiveChildProcesses","recheck","setTimeout","clearTimeout"],"sources":["../../../src/utils/exit.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vxrn/vite-plugin-metro",
|
|
3
|
-
"version": "1.17.
|
|
3
|
+
"version": "1.17.9",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cjs",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@babel/core": "^7.28.5",
|
|
62
62
|
"@babel/helper-plugin-utils": "^7.27.1",
|
|
63
63
|
"@babel/types": "^7.28.5",
|
|
64
|
-
"@vxrn/debug": "1.17.
|
|
64
|
+
"@vxrn/debug": "1.17.9",
|
|
65
65
|
"babel-preset-expo": "*",
|
|
66
66
|
"launch-editor": "^2.10.0",
|
|
67
67
|
"micromatch": "^4.0.8",
|
package/src/utils/exit.ts
CHANGED
|
@@ -80,6 +80,13 @@ function attachMasterListener() {
|
|
|
80
80
|
* Monitor if the current process is exiting before the delay is reached.
|
|
81
81
|
* If there are active resources, the process will be forced to exit after the delay is reached.
|
|
82
82
|
*
|
|
83
|
+
* When invoked under a parent process that waits on stdio pipe EOF (e.g. Gradle's
|
|
84
|
+
* `createBundleReleaseJsAndAssets` exec'ing this CLI), a plain process.exit() is
|
|
85
|
+
* not enough — orphaned child processes can keep the inherited stdio file
|
|
86
|
+
* descriptors open and the parent hangs until its own timeout. To avoid that,
|
|
87
|
+
* we kill any lingering child handles before exiting so the parent sees a clean
|
|
88
|
+
* EOF and proceeds immediately.
|
|
89
|
+
*
|
|
83
90
|
* @see https://nodejs.org/docs/latest-v18.x/api/process.html#processgetactiveresourcesinfo
|
|
84
91
|
*/
|
|
85
92
|
export function ensureProcessExitsAfterDelay(
|
|
@@ -115,8 +122,26 @@ export function ensureProcessExitsAfterDelay(
|
|
|
115
122
|
unexpectedActiveResources
|
|
116
123
|
)
|
|
117
124
|
|
|
118
|
-
//
|
|
125
|
+
// if a lingering child process is keeping the loop alive, terminate it
|
|
126
|
+
// straight away — under Gradle exec, orphaned children hold inherited
|
|
127
|
+
// pipe FDs open and the parent (Gradle) never sees EOF. on first pass
|
|
128
|
+
// we SIGTERM (lets esbuild's service close cleanly); on subsequent
|
|
129
|
+
// passes we escalate to SIGKILL for anything still attached.
|
|
119
130
|
const elapsedTime = Date.now() - startedAtMs
|
|
131
|
+
const killedChildren = killActiveChildProcesses(
|
|
132
|
+
elapsedTime < 200 ? 'SIGTERM' : 'SIGKILL'
|
|
133
|
+
)
|
|
134
|
+
if (killedChildren > 0) {
|
|
135
|
+
// give the OS a tick to reap the killed children, then re-check;
|
|
136
|
+
// if nothing else is holding the loop, node exits naturally with EOF
|
|
137
|
+
const recheck = setTimeout(() => {
|
|
138
|
+
clearTimeout(recheck)
|
|
139
|
+
ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs)
|
|
140
|
+
}, 50)
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Check if the process needs to be force-closed
|
|
120
145
|
if (elapsedTime > waitUntilExitMs) {
|
|
121
146
|
debug(
|
|
122
147
|
'active handles detected past the exit delay, forcefully exiting:',
|
|
@@ -134,6 +159,31 @@ export function ensureProcessExitsAfterDelay(
|
|
|
134
159
|
}, 100)
|
|
135
160
|
}
|
|
136
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Kill any child processes still attached to the current process. Returns the
|
|
164
|
+
* number of children that were signalled.
|
|
165
|
+
*/
|
|
166
|
+
function killActiveChildProcesses(signal: NodeJS.Signals): number {
|
|
167
|
+
try {
|
|
168
|
+
const children: ChildProcess[] = process
|
|
169
|
+
// @ts-expect-error internal API, but it's the only way to enumerate live handles
|
|
170
|
+
._getActiveHandles()
|
|
171
|
+
.filter((handle: any) => handle instanceof ChildProcess)
|
|
172
|
+
|
|
173
|
+
for (const child of children) {
|
|
174
|
+
try {
|
|
175
|
+
child.kill(signal)
|
|
176
|
+
} catch (err) {
|
|
177
|
+
debug('failed to kill child process:', err)
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return children.length
|
|
181
|
+
} catch (err) {
|
|
182
|
+
debug('failed to enumerate active child processes:', err)
|
|
183
|
+
return 0
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
137
187
|
/**
|
|
138
188
|
* Try to warn the user about unexpected active processes running in the background.
|
|
139
189
|
* This uses the internal `process._getActiveHandles` method, within a try-catch block.
|
package/types/utils/exit.d.ts
CHANGED
|
@@ -5,6 +5,13 @@ export declare function installExitHooks(asyncExitHook: AsyncExitHook): () => vo
|
|
|
5
5
|
* Monitor if the current process is exiting before the delay is reached.
|
|
6
6
|
* If there are active resources, the process will be forced to exit after the delay is reached.
|
|
7
7
|
*
|
|
8
|
+
* When invoked under a parent process that waits on stdio pipe EOF (e.g. Gradle's
|
|
9
|
+
* `createBundleReleaseJsAndAssets` exec'ing this CLI), a plain process.exit() is
|
|
10
|
+
* not enough — orphaned child processes can keep the inherited stdio file
|
|
11
|
+
* descriptors open and the parent hangs until its own timeout. To avoid that,
|
|
12
|
+
* we kill any lingering child handles before exiting so the parent sees a clean
|
|
13
|
+
* EOF and proceeds immediately.
|
|
14
|
+
*
|
|
8
15
|
* @see https://nodejs.org/docs/latest-v18.x/api/process.html#processgetactiveresourcesinfo
|
|
9
16
|
*/
|
|
10
17
|
export declare function ensureProcessExitsAfterDelay(waitUntilExitMs?: number, startedAtMs?: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../src/utils/exit.ts"],"names":[],"mappings":"AAaA,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAUrE,sGAAsG;AACtG,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,IAAI,CAmBzE;AAmCD
|
|
1
|
+
{"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../src/utils/exit.ts"],"names":[],"mappings":"AAaA,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAUrE,sGAAsG;AACtG,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,IAAI,CAmBzE;AAmCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,eAAe,SAAQ,EACvB,WAAW,SAAa,QAkEzB;AAoED,+HAA+H;AAC/H,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAchF;AACD,wBAAgB,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAE/C"}
|