stim 1.18.0 → 1.20.0
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/README.md +21 -4
- package/dist/{activity-BxnkDZDi.mjs → activity-BrGh9EAI.mjs} +3 -3
- package/dist/{agent-device-usage-output-CZ66YA4T.mjs → agent-device-usage-output-DVyv_hWj.mjs} +7 -7
- package/dist/android-0vv-OruW.mjs +6 -0
- package/dist/android-Brx6EKvJ.mjs +1258 -0
- package/dist/{android-DC3ZLuw0.mjs → android-BsYNR81W.mjs} +103 -45
- package/dist/{android-CBwCNicO.mjs → android-CK3fpEyZ.mjs} +2 -2
- package/dist/{android-cas-BBFyr9CA.mjs → android-cas-DCAuXryb.mjs} +9 -5
- package/dist/android-cas-compiler.mjs +1 -1
- package/dist/api-run.mjs +159 -8
- package/dist/{api-D0VtFhqk.mjs → api-zuX3ynYN.mjs} +9 -7
- package/dist/api.d.mts +104 -4
- package/dist/api.mjs +1 -1
- package/dist/{app-install-D-PUENug.mjs → app-install-0LgaQRT7.mjs} +39 -18
- package/dist/artifact-CnC0mfov.mjs +807 -0
- package/dist/artifact-DClXJNWx.mjs +772 -0
- package/dist/artifact-lifecycle-DzPpBYvK.mjs +30 -0
- package/dist/{web-DTU0uiWj.mjs → browser-web-CzBmhmgs.mjs} +136 -174
- package/dist/{budget-DIhL2BKx.mjs → budget-BONq9vXY.mjs} +3096 -3244
- package/dist/build-BixRI6sB.mjs +462 -0
- package/dist/build-plan-CP0tckNU.mjs +553 -0
- package/dist/{cache-manifest-BI7ozfmH.mjs → cache-manifest-qA3dT2x2.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/ccache-CjHQ5F8g.mjs +142 -0
- package/dist/{chrome-DJnmnS5q.mjs → chrome-Dp2lMLBe.mjs} +1 -1
- package/dist/{cli-DNJMwADx.mjs → cli-B2R8wH1F.mjs} +20 -20
- package/dist/cli.mjs +1 -1
- package/dist/{client-DzhapoMB.mjs → client-BLy1Pw2V.mjs} +172 -165
- package/dist/collector-run.d.mts +10 -0
- package/dist/collector-run.mjs +7 -7
- package/dist/{command-output-CBtzyIgF.mjs → command-output-BjPN99ZB.mjs} +2 -2
- package/dist/{config-CgYMahz7.mjs → config-D0LhTY3S.mjs} +13 -13
- package/dist/{created-devices-DKbeWsiK.mjs → created-devices-HU_DAb_Q.mjs} +7 -6
- package/dist/{dependency-state-xKoOypBm.mjs → dependency-state-B2m8eqsS.mjs} +2 -2
- package/dist/{detached-entry-BLfcgc4O.mjs → detached-entry-BXq4fIl-.mjs} +1 -1
- package/dist/{dev-client-CLnIH02x.mjs → dev-client-ClATaJoH.mjs} +2 -2
- package/dist/{device-D7oCHGWi.mjs → device-B7lsC0K1.mjs} +8 -8
- package/dist/device-DVCwAFlX.mjs +727 -0
- package/dist/{device-capacity-EUOOYr8T.mjs → device-capacity-Ca_ke1LE.mjs} +25 -15
- package/dist/device-host-worker.mjs +38 -18
- package/dist/{device-ios-6MewKKnc.mjs → device-ios-CRUqPxKw.mjs} +12 -11
- package/dist/{device-lease-Co-EwifR.mjs → device-lease-DHOBXGgS.mjs} +135 -22
- package/dist/{device-lease-run-w1xhCqIW.mjs → device-lease-run-CvDeHTkG.mjs} +4 -4
- package/dist/{device-pool-F5WvRPtD.mjs → device-pool-L2-5GxMy.mjs} +3 -3
- package/dist/{device-remote-tHbd1fKy.mjs → device-remote-Bmg42063.mjs} +17 -69
- package/dist/doctor-C2MSuMMg.mjs +515 -0
- package/dist/{doctor-B9ckYUoU.mjs → doctor-DPAqhVCK.mjs} +334 -721
- package/dist/doctor-watchman-CB4NnVZm.mjs +260 -0
- package/dist/{simslim-EHBQ2R4G.mjs → eas-build-Dw_ec2Km.mjs} +6 -152
- package/dist/{stim-installations-aR_WsNOA.mjs → eas-session-ledger-DZlC-Fq3.mjs} +57 -4
- package/dist/{error-diagnostics-BRXOqDzG.mjs → error-diagnostics-Du7I_GuY.mjs} +17 -12
- package/dist/errors-DzkMYh8Q.mjs +205 -0
- package/dist/{exec-DWhCZDGm.mjs → exec-B81Qodjn.mjs} +69 -15
- package/dist/{gc-Dh6mXOKC.mjs → gc-PWp34zGb.mjs} +23 -22
- package/dist/{gradle-C6GKnunQ.mjs → gradle-C2OEKCCI.mjs} +50 -125
- package/dist/{guide-tm6igAaa.mjs → guide-Dai9lphv.mjs} +862 -538
- package/dist/{hosted-android-Bv285t_t.mjs → hosted-android-DQ-Agsd8.mjs} +5 -5
- package/dist/{hosted-client-C-rMtppF.mjs → hosted-client-Io01s5By.mjs} +9 -3
- package/dist/{hosted-ios-D5mNmtj4.mjs → hosted-ios-DIxFnYp-.mjs} +3 -3
- package/dist/{hosted-logs-DN8Iz4mJ.mjs → hosted-logs-DP-ABU_M.mjs} +8 -8
- package/dist/{hosted-macos-B-wEjlwG.mjs → hosted-macos-Aziw9T_9.mjs} +7 -6
- package/dist/{hosted-native-DeeOG8xZ.mjs → hosted-native-BdAQi21M.mjs} +23 -16
- package/dist/{idle-shutdown-jjtxAn5C.mjs → idle-shutdown-DdMqoSUB.mjs} +7 -7
- package/dist/ios-BZ9dg2Fr.mjs +9 -0
- package/dist/{ios-B3SbOWdw.mjs → ios-CXLIUxXJ.mjs} +180 -24
- package/dist/ios-CZuv6gRv.mjs +1112 -0
- package/dist/{ios-Bvbf0SGY.mjs → ios-VGvNdsv2.mjs} +1 -1
- package/dist/{ios-device-Bn7jWDB1.mjs → ios-device-B1B14xND.mjs} +1 -1
- package/dist/{ios-device-vOaByMhw.mjs → ios-device-BreZOpM0.mjs} +3 -3
- package/dist/ios-project-B9drt_aY.mjs +197 -0
- package/dist/{ios-state-B2pES6Vs.mjs → ios-state-CjrL2qv-.mjs} +1 -1
- package/dist/js-swap-C8icNYIY.mjs +432 -0
- package/dist/launch-DxH0THLP.mjs +745 -0
- package/dist/launch-YrbqaIFj.mjs +1530 -0
- package/dist/{launch-verify-hskNcWkZ.mjs → launch-verify-BzRdbuO1.mjs} +26 -7
- package/dist/{logs-1Ylc1Ri6.mjs → logs-DHaRNfg7.mjs} +11 -11
- package/dist/macos-C0iljhsN.mjs +2 -0
- package/dist/{macos-DF6C7wUU.mjs → macos-V_3Ui7g4.mjs} +125 -155
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +13 -10
- package/dist/{metro-Dh8T4Ytd.mjs → metro-D_j9sN-B.mjs} +209 -43
- package/dist/{metro-gateway-CEUw9RMH.mjs → metro-gateway-BBJldOdi.mjs} +2 -2
- package/dist/miss-reason-BPAzZS0r.mjs +238 -0
- package/dist/{named-ports-BFIz1Shz.mjs → named-ports-C2lvoPsb.mjs} +12 -5
- package/dist/native-android-lHzaew7r.mjs +226 -0
- package/dist/native-gradle-inputs-BQnIdAlL.mjs +356 -0
- package/dist/{native-runtime-D_603JiC.mjs → native-runtime-BRmWL7ru.mjs} +9 -8
- package/dist/native-xcode-inputs-eutS19jU.mjs +307 -0
- package/dist/native-xcode-ios-DP3cHLwu.mjs +434 -0
- package/dist/{ndjson-LGZAMsqa.mjs → ndjson-GOnbyvso.mjs} +6 -6
- package/dist/offload-worker.d.mts +12 -6
- package/dist/offload-worker.mjs +409 -73
- package/dist/{ownership-D6Se7gg_.mjs → ownership-DXzMMSx6.mjs} +2 -2
- package/dist/{placement-log-BcPhRwR4.mjs → placement-log-reFbjqEr.mjs} +7 -3
- package/dist/plan-BDk2AeY_.mjs +260 -0
- package/dist/plan-placement-D_YYlE6N.mjs +73 -0
- package/dist/{ports-BLTtfBq-.mjs → ports-jzvAJXXL.mjs} +3 -3
- package/dist/{prebuild-juCyreaR.mjs → prebuild-Bw44QxVh.mjs} +4 -4
- package/dist/{preview-D5V07Nrl.mjs → preview-BaBJ72Al.mjs} +51 -34
- package/dist/project-B8_duAzW.mjs +1067 -0
- package/dist/project-plan-BPwbLwQu.mjs +10 -0
- package/dist/{pull-request-u4vp7zmK.mjs → pull-request-vOhLNmIb.mjs} +1 -1
- package/dist/pull-requests.mjs +1 -1
- package/dist/react-native-android-chm1DMlA.mjs +921 -0
- package/dist/react-native-build-oAw6gQeW.mjs +239 -0
- package/dist/react-native-doctor-DYXoh-6I.mjs +78 -0
- package/dist/react-native-ios-SCTK_CT5.mjs +595 -0
- package/dist/{recordings-BAWltsVt.mjs → recordings-Bk-VivUV.mjs} +1 -1
- package/dist/{reload-DvyWzVjJ.mjs → reload-D34GkY78.mjs} +17 -14
- package/dist/remote-BU9UyhCJ.mjs +192 -0
- package/dist/{remote-cache-BGg7aGIZ.mjs → remote-cache-Bsts6f6Y.mjs} +5 -5
- package/dist/result-BDoRk1k3.mjs +186 -0
- package/dist/{run-vhtDgpHO.mjs → run-qvff78hv.mjs} +3 -3
- package/dist/{server-bare-B9E7S1aR.mjs → server-bare-dWjAarki.mjs} +6 -6
- package/dist/server-command-7XIKlWtO.mjs +69 -0
- package/dist/{server-expo-DoBHhuzK.mjs → server-expo-CsYu2aKL.mjs} +107 -82
- package/dist/server-expo-DV43vep4.mjs +2 -0
- package/dist/settings-Bbztm4oV.mjs +1503 -0
- package/dist/{settings-Byp2AQ_E.mjs → settings-CT3E71-i.mjs} +6 -7
- package/dist/{state-lKh8shBp.d.mts → settings-vk3mJGSm.d.mts} +4 -2
- package/dist/settings.schema.json +156 -6
- package/dist/simslim-ChMfe8rg.mjs +149 -0
- package/dist/{slot-launch-C1nqh4mu.mjs → slot-launch-B9hn96wd.mjs} +6 -6
- package/dist/{stage-g_WqWeaE.mjs → stage-BNKKdDNc.mjs} +6 -3
- package/dist/start-CbQCSnXQ.mjs +2 -0
- package/dist/{start-D-IeOyoK.mjs → start-CdvcTaXr.mjs} +113 -77
- package/dist/{state-xnqpx3AD.mjs → state-Boo0IMJq.mjs} +4 -2
- package/dist/{state-BG-aAk4k.mjs → state-DI84A-uu.mjs} +29 -10
- package/dist/{stats-DY6ekz8F.mjs → stats-BIIDrjA8.mjs} +6 -6
- package/dist/{status-BEeL6IKz.mjs → status-BDGHwkCs.mjs} +3 -1
- package/dist/{status-DCjZeE-K.mjs → status-DARMkc9q.mjs} +80 -294
- package/dist/status-watch-DvmI3SmN.mjs +296 -0
- package/dist/{stim-desktop-Behws_fi.mjs → stim-desktop-8GQX2OV8.mjs} +1 -1
- package/dist/{stop-DIJtD2GL.mjs → stop-CCZS-C9m.mjs} +2 -2
- package/dist/stop-WQPQHLuy.mjs +72 -0
- package/dist/{stop-BTjs3xbc.mjs → stop-iNemHsJC.mjs} +81 -33
- package/dist/supervisor-run.d.mts +7 -2
- package/dist/supervisor-run.mjs +32 -20
- package/dist/{support-Bwvbrq5-.mjs → support-CnE_SIjt.mjs} +17 -7
- package/dist/{support-BaayeYCf.mjs → support-DCco5fut.mjs} +61 -8
- package/dist/swiftpm-macos-afeNUExW.mjs +119 -0
- package/dist/{native-run-B06FkmZx.mjs → tailnet-CoJUb2tB.mjs} +113 -6
- package/dist/toolchain-BIupIro1.mjs +2 -0
- package/dist/{toolchain-Bnyd_K3A.mjs → toolchain-DqyDXs30.mjs} +225 -315
- package/dist/{trigger-CJMhwXe8.mjs → trigger-C0MWBi8O.mjs} +3 -3
- package/dist/trigger-SHLOWJ4O.mjs +2 -0
- package/dist/{warm-progress-CjB-MP6H.mjs → warm-progress-C3ASD6z5.mjs} +134 -37
- package/dist/{status-Dcr0Qexd.mjs → watchman-CQl51YZu.mjs} +75 -7
- package/dist/web-B3eldHFH.mjs +123 -0
- package/dist/web-BLXpOe6b.mjs +2 -0
- package/dist/web-run.mjs +10 -10
- package/dist/{workspace-state-C59dqG-Z.mjs → workspace-state-CSIFuuDa.mjs} +33 -33
- package/dist/{workspaces-xXItD8Dj.mjs → workspaces-D2xSHBDY.mjs} +1297 -1211
- package/dist/{worktree-BSYlofkq.mjs → worktree-BxDqaTev.mjs} +102 -63
- package/dist/worktree-q7_OZNY0.mjs +2 -0
- package/package.json +8 -6
- package/shim/bundle-response.cjs +2 -1
- package/shim/bundle-response.d.cts +1 -1
- package/shim/expo-metro-config.cjs +1 -1
- package/shim/native-android.gradle +101 -0
- package/dist/android-BKA16DTf.mjs +0 -4
- package/dist/android-BvwuMUJ9.mjs +0 -3572
- package/dist/guide-status-Bhf9SJXc.mjs +0 -125
- package/dist/ios-CPdkoKaa.mjs +0 -3953
- package/dist/ios-DNpdygiv.mjs +0 -7
- package/dist/macos-Ck7OBMNY.mjs +0 -2
- package/dist/metro-store-BAHFcJm6.mjs +0 -106
- package/dist/plan-placement-CtxkCO54.mjs +0 -1859
- package/dist/project-C3ChRLZy.mjs +0 -212
- package/dist/projects-DD7dBTCj.mjs +0 -92
- package/dist/server-expo-Db9HBUoa.mjs +0 -2
- package/dist/settings-CQyMElEP.mjs +0 -701
- package/dist/start-NTc1Ifqs.mjs +0 -2
- package/dist/stop-BGhKMOuH.mjs +0 -48
- package/dist/trigger-DWAq9hkw.mjs +0 -2
- package/dist/web-B6_bFDn7.mjs +0 -2
- package/dist/worktree-BJfnU6r5.mjs +0 -2
- package/dist/worktree-CsKYexJM.mjs +0 -753
|
@@ -1,19 +1,94 @@
|
|
|
1
|
-
import { t as getExecutor } from "./exec-
|
|
1
|
+
import { t as getExecutor } from "./exec-B81Qodjn.mjs";
|
|
2
|
+
import { K as resolveProjectSettings } from "./settings-Bbztm4oV.mjs";
|
|
2
3
|
import { n as stripAnsi, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { a as
|
|
6
|
-
import { r as createNdjsonWriter } from "./ndjson-LGZAMsqa.mjs";
|
|
4
|
+
import { S as resolvePackageJson } from "./project-B8_duAzW.mjs";
|
|
5
|
+
import { r as createNdjsonWriter } from "./ndjson-GOnbyvso.mjs";
|
|
6
|
+
import { a as expoMetroStoreEnv, c as registerMetroStore, f as resolveMetroSharedCache, i as expoMetroConfigPath, n as supervisorError, o as metroStoreConfirmedRoot, s as metroStoreRoot } from "./errors-DzkMYh8Q.mjs";
|
|
7
7
|
import { accessSync, constants, existsSync, readFileSync } from "node:fs";
|
|
8
|
-
import { dirname, join
|
|
8
|
+
import { dirname, join } from "node:path";
|
|
9
9
|
import { LOG_ROTATE_BYTES } from "@stim-cli/core";
|
|
10
|
-
//#region src/supervisor/server
|
|
10
|
+
//#region src/supervisor/child-server.ts
|
|
11
11
|
function delay(ms) {
|
|
12
12
|
return new Promise((resolve) => {
|
|
13
13
|
const timer = setTimeout(resolve, ms);
|
|
14
14
|
if (typeof timer.unref === "function") timer.unref();
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
+
function superviseChildServer({ mode, child, log, toRecord, signal, alive = null, killTimeoutMs, onRecord = null }) {
|
|
18
|
+
let lastMsg = null;
|
|
19
|
+
let lastAt = 0;
|
|
20
|
+
const emit = (stream) => (chunk) => {
|
|
21
|
+
const record = toRecord(chunk, stream);
|
|
22
|
+
if (!record) return;
|
|
23
|
+
if (typeof record.requestId === "string") {
|
|
24
|
+
log.write(record);
|
|
25
|
+
onRecord?.(record);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
if (record.msg === lastMsg && now - lastAt < 1e3) return;
|
|
30
|
+
lastMsg = typeof record.msg === "string" ? record.msg : null;
|
|
31
|
+
lastAt = now;
|
|
32
|
+
log.write(record);
|
|
33
|
+
onRecord?.(record);
|
|
34
|
+
};
|
|
35
|
+
const outReader = createLineReader(emit("stdout"));
|
|
36
|
+
const errReader = createLineReader(emit("stderr"));
|
|
37
|
+
child.stdout?.setEncoding?.("utf-8");
|
|
38
|
+
child.stderr?.setEncoding?.("utf-8");
|
|
39
|
+
child.stdout?.on("data", (chunk) => outReader.push(chunk));
|
|
40
|
+
child.stderr?.on("data", (chunk) => errReader.push(chunk));
|
|
41
|
+
let exited = false;
|
|
42
|
+
let exitInfo = null;
|
|
43
|
+
const listeners = [];
|
|
44
|
+
child.on("exit", (code, sig) => {
|
|
45
|
+
exited = true;
|
|
46
|
+
exitInfo = {
|
|
47
|
+
code,
|
|
48
|
+
signal: sig
|
|
49
|
+
};
|
|
50
|
+
outReader.flush();
|
|
51
|
+
errReader.flush();
|
|
52
|
+
for (const cb of listeners) cb(exitInfo);
|
|
53
|
+
});
|
|
54
|
+
child.on("error", (err) => {
|
|
55
|
+
if (exited) return;
|
|
56
|
+
exited = true;
|
|
57
|
+
exitInfo = {
|
|
58
|
+
code: null,
|
|
59
|
+
signal: null,
|
|
60
|
+
error: err
|
|
61
|
+
};
|
|
62
|
+
for (const cb of listeners) cb(exitInfo);
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
mode,
|
|
66
|
+
serverPid: child.pid ?? null,
|
|
67
|
+
child,
|
|
68
|
+
onExit(cb) {
|
|
69
|
+
if (exited) {
|
|
70
|
+
cb(exitInfo);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
listeners.push(cb);
|
|
74
|
+
},
|
|
75
|
+
async close() {
|
|
76
|
+
const running = () => alive ? alive() : !exited && Boolean(child.pid);
|
|
77
|
+
const gone = async () => {
|
|
78
|
+
const deadline = Date.now() + killTimeoutMs;
|
|
79
|
+
while (running() && Date.now() < deadline) await delay(25);
|
|
80
|
+
return !running();
|
|
81
|
+
};
|
|
82
|
+
if (!running() || !signal("SIGTERM")) return;
|
|
83
|
+
if (!await gone()) {
|
|
84
|
+
signal("SIGKILL");
|
|
85
|
+
await gone();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/supervisor/server-expo.ts
|
|
17
92
|
function resolveExpoBin(root) {
|
|
18
93
|
const fromPackage = expoBinFromPackage(resolvePackageJson(root, "expo"));
|
|
19
94
|
if (fromPackage) return {
|
|
@@ -56,15 +131,19 @@ function expoBinFromPackage(packageJsonPath, binName = "expo") {
|
|
|
56
131
|
return isExecutableFile(file) ? file : null;
|
|
57
132
|
}
|
|
58
133
|
function findBinUpward(startDir, name, { exists = existsSync } = {}) {
|
|
134
|
+
const stop = repositoryRoot(startDir, exists) ?? startDir;
|
|
59
135
|
let dir = startDir;
|
|
60
|
-
const stop = parse(startDir).root;
|
|
61
136
|
while (true) {
|
|
62
137
|
const candidate = join(dir, "node_modules", ".bin", name);
|
|
63
138
|
if (exists(candidate)) return candidate;
|
|
64
139
|
if (dir === stop) return null;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
140
|
+
dir = dirname(dir);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function repositoryRoot(startDir, exists) {
|
|
144
|
+
for (let dir = startDir;; dir = dirname(dir)) {
|
|
145
|
+
if (exists(join(dir, ".git"))) return dir;
|
|
146
|
+
if (dirname(dir) === dir) return null;
|
|
68
147
|
}
|
|
69
148
|
}
|
|
70
149
|
function isExecutableFile(file) {
|
|
@@ -114,7 +193,7 @@ function cleanLine(line) {
|
|
|
114
193
|
const parts = stripAnsi(line).split("\r");
|
|
115
194
|
return (parts[parts.length - 1] ?? "").trimEnd();
|
|
116
195
|
}
|
|
117
|
-
function recordFromLine(line, { stream = "stdout" } = {}) {
|
|
196
|
+
function recordFromLine(line, { stream = "stdout", source = "expo" } = {}) {
|
|
118
197
|
const msg = cleanLine(line);
|
|
119
198
|
if (!msg.trim()) return null;
|
|
120
199
|
if (stream === "stderr" && msg.startsWith("stim-bundle-response: ")) try {
|
|
@@ -133,7 +212,7 @@ function recordFromLine(line, { stream = "stdout" } = {}) {
|
|
|
133
212
|
level: inferLevel(msg),
|
|
134
213
|
msg,
|
|
135
214
|
raw: true,
|
|
136
|
-
event: stream === "stderr" ? "
|
|
215
|
+
event: `${source}_${stream === "stderr" ? "stderr" : "stdout"}`
|
|
137
216
|
};
|
|
138
217
|
if (isBundleMarker(msg)) record.marker = true;
|
|
139
218
|
return record;
|
|
@@ -153,8 +232,8 @@ function parseExpoWaitingOnUrl(line) {
|
|
|
153
232
|
if (HTTP_SCHEME_RE.test(url)) return url;
|
|
154
233
|
return URL_SCHEME_RE.test(url) ? url.replace(/^[^:]+:/, "https:") : url;
|
|
155
234
|
}
|
|
156
|
-
function resolveMetroStoreInjection(root, { log, env }) {
|
|
157
|
-
const sharedCache =
|
|
235
|
+
function resolveMetroStoreInjection(root, { log, env, settings }) {
|
|
236
|
+
const sharedCache = resolveMetroSharedCache(settings);
|
|
158
237
|
if (!sharedCache) log.write({
|
|
159
238
|
src: "metro",
|
|
160
239
|
level: "debug",
|
|
@@ -198,7 +277,7 @@ function resolveMetroStoreInjection(root, { log, env }) {
|
|
|
198
277
|
});
|
|
199
278
|
return additions;
|
|
200
279
|
}
|
|
201
|
-
async function startExpoServer({ root, port, logsDir, writer = null, spawnFn = null, killTimeoutMs = 5e3, tunnel = false, resetCache = false, onTunnelUrl = null, platform = process.platform }) {
|
|
280
|
+
async function startExpoServer({ root, port, logsDir, writer = null, spawnFn = null, killTimeoutMs = 5e3, tunnel = false, resetCache = false, onTunnelUrl = null, platform = process.platform, settings }) {
|
|
202
281
|
const resolved = resolveExpoBin(root);
|
|
203
282
|
if (!resolved) {
|
|
204
283
|
const refusal = expoBinRefusal(root);
|
|
@@ -216,7 +295,8 @@ async function startExpoServer({ root, port, logsDir, writer = null, spawnFn = n
|
|
|
216
295
|
];
|
|
217
296
|
const storeEnv = resolveMetroStoreInjection(root, {
|
|
218
297
|
log,
|
|
219
|
-
env: process.env
|
|
298
|
+
env: process.env,
|
|
299
|
+
settings: settings ?? resolveProjectSettings(root).settings
|
|
220
300
|
});
|
|
221
301
|
const [command, commandArgs] = platform === "win32" && resolved.source === "package" ? [process.execPath, [bin, ...args]] : [bin, args];
|
|
222
302
|
const child = spawn(command, commandArgs, {
|
|
@@ -235,78 +315,23 @@ async function startExpoServer({ root, port, logsDir, writer = null, spawnFn = n
|
|
|
235
315
|
...tunnel ? { EXPO_UNSTABLE_TUNNEL_V2: "1" } : {}
|
|
236
316
|
}
|
|
237
317
|
});
|
|
238
|
-
let lastMsg = null;
|
|
239
|
-
let lastAt = 0;
|
|
240
318
|
let tunnelUrlSeen = false;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
319
|
+
return superviseChildServer({
|
|
320
|
+
mode: "expo-child",
|
|
321
|
+
child,
|
|
322
|
+
log,
|
|
323
|
+
toRecord: (chunk, stream) => recordFromLine(chunk, { stream }),
|
|
324
|
+
signal: (sig) => child.kill(sig),
|
|
325
|
+
killTimeoutMs,
|
|
326
|
+
onRecord: (record) => {
|
|
327
|
+
if (!tunnel || tunnelUrlSeen || !onTunnelUrl || typeof record.msg !== "string") return;
|
|
250
328
|
const url = parseExpoWaitingOnUrl(record.msg);
|
|
251
329
|
if (url) {
|
|
252
330
|
tunnelUrlSeen = true;
|
|
253
331
|
onTunnelUrl(url);
|
|
254
332
|
}
|
|
255
333
|
}
|
|
256
|
-
};
|
|
257
|
-
const outReader = createLineReader(emit("stdout"));
|
|
258
|
-
const errReader = createLineReader(emit("stderr"));
|
|
259
|
-
child.stdout?.setEncoding?.("utf-8");
|
|
260
|
-
child.stderr?.setEncoding?.("utf-8");
|
|
261
|
-
child.stdout?.on("data", (chunk) => outReader.push(chunk));
|
|
262
|
-
child.stderr?.on("data", (chunk) => errReader.push(chunk));
|
|
263
|
-
let exited = false;
|
|
264
|
-
let exitInfo = null;
|
|
265
|
-
const listeners = [];
|
|
266
|
-
child.on("exit", (code, signal) => {
|
|
267
|
-
exited = true;
|
|
268
|
-
exitInfo = {
|
|
269
|
-
code,
|
|
270
|
-
signal
|
|
271
|
-
};
|
|
272
|
-
outReader.flush();
|
|
273
|
-
errReader.flush();
|
|
274
|
-
for (const cb of listeners) cb(exitInfo);
|
|
275
|
-
});
|
|
276
|
-
child.on("error", (err) => {
|
|
277
|
-
if (exited) return;
|
|
278
|
-
exited = true;
|
|
279
|
-
exitInfo = {
|
|
280
|
-
code: null,
|
|
281
|
-
signal: null,
|
|
282
|
-
error: err
|
|
283
|
-
};
|
|
284
|
-
for (const cb of listeners) cb(exitInfo);
|
|
285
334
|
});
|
|
286
|
-
return {
|
|
287
|
-
mode: "expo-child",
|
|
288
|
-
serverPid: child.pid ?? null,
|
|
289
|
-
child,
|
|
290
|
-
onExit(cb) {
|
|
291
|
-
if (exited) {
|
|
292
|
-
cb(exitInfo);
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
listeners.push(cb);
|
|
296
|
-
},
|
|
297
|
-
async close() {
|
|
298
|
-
if (exited || !child.pid) return;
|
|
299
|
-
const dead = new Promise((resolve) => {
|
|
300
|
-
child.once("exit", () => resolve());
|
|
301
|
-
});
|
|
302
|
-
if (!child.kill("SIGTERM")) return;
|
|
303
|
-
await Promise.race([dead, delay(killTimeoutMs)]);
|
|
304
|
-
if (!exited) {
|
|
305
|
-
child.kill("SIGKILL");
|
|
306
|
-
await Promise.race([dead, delay(killTimeoutMs)]);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
};
|
|
310
335
|
}
|
|
311
336
|
//#endregion
|
|
312
|
-
export { expoProxyEnv as a, inferLevel as c, parseExpoWaitingOnUrl as d, recordFromLine as f, expoBinRefusal as i, isBundleMarker as l, expoBinFromPackage as n, expoSdkMajor as o, startExpoServer as p, expoBinPath as r, findBinUpward as s, cleanLine as t, isDevClientNavigationNotice as u };
|
|
337
|
+
export { expoProxyEnv as a, inferLevel as c, parseExpoWaitingOnUrl as d, recordFromLine as f, expoBinRefusal as i, isBundleMarker as l, superviseChildServer as m, expoBinFromPackage as n, expoSdkMajor as o, startExpoServer as p, expoBinPath as r, findBinUpward as s, cleanLine as t, isDevClientNavigationNotice as u };
|