stim 1.20.2 → 1.21.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 +88 -8
- package/dist/acquire-artifact-CD4lbiWE.mjs +153 -0
- package/dist/act-DHAw2A2S.mjs +2667 -0
- package/dist/activity-BzVfHSrY.mjs +1376 -0
- package/dist/{agent-device-usage-output-Dzgv6lgR.mjs → agent-device-usage-output-zh1vhbLp.mjs} +21 -65
- package/dist/{android-HqP1_vB_.mjs → android-BEJ8Jpl7.mjs} +2 -2
- package/dist/{android-DCKZrNvV.mjs → android-BLgbNqox.mjs} +128 -78
- package/dist/{android-Dlzxshgp.mjs → android-CV_GCELZ.mjs} +5 -5
- package/dist/{android-Mz_Inn3w.mjs → android-DUYkNF4u.mjs} +184 -102
- package/dist/{android-cas-Bl-cLJBk.mjs → android-cas-Ct5b1xCK.mjs} +7 -6
- package/dist/android-cas-compiler.mjs +2 -2
- package/dist/android-project-BCAAmMwz.mjs +12 -0
- package/dist/api.d.mts +740 -8
- package/dist/api.mjs +585 -1
- package/dist/{artifact-HSwkIWEQ.mjs → artifact-B8T3S5gi.mjs} +223 -201
- package/dist/{artifact-D3czlUvT.mjs → artifact-DAuZ-FNU.mjs} +158 -148
- package/dist/{browser-web-CA-F1GQo.mjs → browser-web-QQzVjz3O.mjs} +26 -24
- package/dist/budget-Bs6SxxzO.mjs +9154 -0
- package/dist/{build-DYDbfkk5.mjs → build-CoPzQRNw.mjs} +144 -96
- package/dist/build-cache-DmyR9Zzc.mjs +602 -0
- package/dist/build-plan-CaFskB7_.mjs +188 -0
- package/dist/{cache-manifest-XH-fvDUj.mjs → cache-manifest-DkkqguoK.mjs} +2 -2
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{ccache-zdKiYQ3E.mjs → ccache-BJRZ9pG3.mjs} +10 -9
- package/dist/{cdp-Dq_ypAlJ.mjs → cdp-CWmIUMbw.mjs} +18 -5
- package/dist/{chrome-BnzZMqsR.mjs → chrome-B6tfCta1.mjs} +7 -4
- package/dist/{cli-CLP3diBm.mjs → cli-0DYf8QhQ.mjs} +20 -20
- package/dist/cli.mjs +1 -1
- package/dist/client-B7QVOlCr.d.mts +253 -0
- package/dist/client-UXD70ZbM.mjs +1406 -0
- package/dist/collector-run.d.mts +4 -40
- package/dist/collector-run.mjs +9 -8
- package/dist/{command-output-BTy8hZ0F.mjs → command-output-B1UrjZHL.mjs} +1 -1
- package/dist/config-CYcBF478.mjs +949 -0
- package/dist/{created-devices-Dzd5C2LF.mjs → created-devices-CqeBlrEn.mjs} +3 -3
- package/dist/{dependency-state-DG0p31-y.mjs → dependency-state-BbKQW83h.mjs} +20 -5
- package/dist/{detached-entry-B9C_zeQC.mjs → detached-entry-DFRyG1_o.mjs} +1 -1
- package/dist/{dev-client-DAWVIGBu.mjs → dev-client-UOeESKm6.mjs} +2 -2
- package/dist/device-DCxH7_By.mjs +1068 -0
- package/dist/{device-BECOiufl.mjs → device-ExJq8Ei7.mjs} +35 -35
- package/dist/{device-capacity-CBUAcRyQ.mjs → device-capacity-CMlqEcvw.mjs} +43 -13
- package/dist/device-host-worker.mjs +65 -61
- package/dist/{device-ios-COSi6oS1.mjs → device-ios-DRUeKaFV.mjs} +48 -45
- package/dist/{device-lease-run-Cw2M4z51.mjs → device-lease-run-C8raGFoP.mjs} +14 -26
- package/dist/{device-pool-Bf-pOhSw.mjs → device-pool-DMRpVX9a.mjs} +5 -5
- package/dist/doctor-BLHCYxzi.mjs +2 -0
- package/dist/{doctor-kfMBnUw6.mjs → doctor-DTvaDOda.mjs} +281 -317
- package/dist/{doctor-CB8oZKCk.mjs → doctor-Dhqebm0q.mjs} +183 -91
- package/dist/doctor-fingerprint.mjs +19 -0
- package/dist/{doctor-watchman-BRyV2adA.mjs → doctor-watchman-Cv1F10Kj.mjs} +40 -21
- package/dist/{eas-build-JyfqyHfC.mjs → eas-build-BomfRnFT.mjs} +53 -20
- package/dist/{build-plan-B7SZsc2N.mjs → eas-fallback-DJwZpy0c.mjs} +26 -208
- package/dist/{watchman-CPQFZLXY.mjs → eas-session-ledger-op6A54yi.mjs} +229 -11
- package/dist/{error-diagnostics-BR677IDM.mjs → error-diagnostics-Bf0rZvG9.mjs} +172 -82
- package/dist/exec-H20xSg2T.d.mts +65 -0
- package/dist/exec-_UbtCQcG.mjs +750 -0
- package/dist/gc-C-WwL0yi.mjs +3 -0
- package/dist/{gc-qWOMdnER.mjs → gc-_-dCXdyL.mjs} +584 -796
- package/dist/git-C3iTsJaZ.mjs +73 -0
- package/dist/{guide-G9cAbVAc.mjs → guide-Yqwt2bd6.mjs} +941 -269
- package/dist/{hosted-android-C3MHGld1.mjs → hosted-android-Bw-honsd.mjs} +8 -6
- package/dist/{hosted-client-ZEKpS9vw.mjs → hosted-client-DB_gBPfY.mjs} +34 -19
- package/dist/{hosted-ios-l-o3iM9J.mjs → hosted-ios-CUvOf4Vr.mjs} +1 -1
- package/dist/{hosted-logs-EzQM7-3Z.mjs → hosted-logs-DL_P5AdN.mjs} +77 -43
- package/dist/{hosted-macos-BACVAVqE.mjs → hosted-macos-QI141yKk.mjs} +21 -17
- package/dist/{hosted-native-A4s1QPXe.mjs → hosted-native-Ksyjgzq-.mjs} +30 -21
- package/dist/idle-BVeRGroT.d.mts +24 -0
- package/dist/{idle-shutdown-DtxhPTKe.mjs → idle-shutdown-DaKmZi0z.mjs} +11 -10
- package/dist/{ios-BwVCF7oA.mjs → ios-CQ68hG9s.mjs} +8 -8
- package/dist/{ios-RkW4pnQf.mjs → ios-CpByZy12.mjs} +140 -80
- package/dist/{ios-device-B5veSDDQ.mjs → ios-device-CXGP1bsD.mjs} +1 -1
- package/dist/{ios-device-D7pi2Sca.mjs → ios-device-CwFMehUS.mjs} +51 -26
- package/dist/{ios-project-K9hY_Jab.mjs → ios-project-WuwwBdvW.mjs} +13 -13
- package/dist/{ios-nOLJGVdy.mjs → ios-qNJt4dFm.mjs} +1 -1
- package/dist/ios-signing-DTTIChGs.mjs +489 -0
- package/dist/{ios-state-CBLe1xYw.mjs → ios-state-DvFX-K_l.mjs} +1 -1
- package/dist/{ios-Ce7bc7br.mjs → ios-ubFsBzwq.mjs} +129 -86
- package/dist/{js-swap-Bb3nsS07.mjs → js-swap-Cc1dttps.mjs} +53 -26
- package/dist/{launch-F4sOqAhB.mjs → launch-CD1yVc7U.mjs} +91 -90
- package/dist/{launch-C3qJ6Agb.mjs → launch-Zq2mOSDy.mjs} +82 -541
- package/dist/logs-BS00Anxf.mjs +352 -0
- package/dist/logs-CMm05HxN.mjs +255 -0
- package/dist/{macos-D7uDvO-z.mjs → macos-B65--pPd.mjs} +1 -1
- package/dist/{macos-Ch5VJmcS.mjs → macos-C-0qJ6zq.mjs} +225 -212
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +122 -247
- package/dist/{metro-DnCEjCxs.mjs → metro-DEXpIhHC.mjs} +67 -12
- package/dist/{metro-gateway-CX9Xlkq2.mjs → metro-gateway-BMJNlj3E.mjs} +20 -12
- package/dist/{named-ports-4WopRPg-.mjs → named-ports-BWTzt6mu.mjs} +8 -63
- package/dist/native-android-JACyjTZs.mjs +844 -0
- package/dist/{native-gradle-inputs-BsLRrl7u.mjs → native-gradle-inputs-Bep9JcSF.mjs} +128 -140
- package/dist/native-inputs-TRTTTRxt.mjs +91 -0
- package/dist/native-run-DY_RLx3C.mjs +277 -0
- package/dist/{native-runtime-k8dTIrbK.mjs → native-runtime-Dg1Q7tfF.mjs} +9 -8
- package/dist/{native-xcode-inputs-CykopJdM.mjs → native-xcode-inputs-CB2iQeWq.mjs} +27 -18
- package/dist/{native-xcode-ios-Bbf30Gm0.mjs → native-xcode-ios-CXX39F7o.mjs} +96 -47
- package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
- package/dist/offload-worker.d.mts +1 -46
- package/dist/offload-worker.mjs +197 -66
- package/dist/{ownership-DCtw_2IA.mjs → ownership-DEmM5vhh.mjs} +3 -3
- package/dist/{page-DRHy329N.mjs → page-CPaHeYqj.mjs} +7 -4
- package/dist/paths-BsJMoPP2.mjs +12 -0
- package/dist/paths-DQtTgsBf.mjs +42 -0
- package/dist/{placement-log-MOfPVgaM.mjs → placement-log-BqGbTa61.mjs} +5 -5
- package/dist/{plan-placement-V0TdzYXp.mjs → plan-placement-Bwj-IjY1.mjs} +6 -6
- package/dist/{ports-DdSUicVo.mjs → ports-D-MmCTdv.mjs} +3 -3
- package/dist/prebuild-uD_ipCxF.mjs +449 -0
- package/dist/{project-_phNIJfs.mjs → project-BZNjmW_8.mjs} +65 -37
- package/dist/{pull-request-CQ8sPbZa.mjs → pull-request-Lfetn8Kr.mjs} +2 -2
- package/dist/pull-request-zjCSAryH.d.mts +120 -0
- package/dist/pull-requests.d.mts +1 -119
- package/dist/pull-requests.mjs +1 -1
- package/dist/{react-native-android-CM1XRDwv.mjs → react-native-android-DuzH0cn3.mjs} +74 -48
- package/dist/{gradle-DSrXb6lG.mjs → react-native-build-rhk4smwQ.mjs} +292 -15
- package/dist/react-native-doctor-CQpuIMso.mjs +234 -0
- package/dist/{react-native-ios-Dhq_eiYQ.mjs → react-native-ios-Bhq1rJeV.mjs} +46 -28
- package/dist/{recordings-D0d5aQt0.mjs → recordings-DYteQSu4.mjs} +12 -9
- package/dist/{reload-C8JhxjSh.mjs → reload-CmTRFJaX.mjs} +93 -47
- package/dist/reload-DzjSl5P_.mjs +2 -0
- package/dist/{remote-BiR6aYjy.mjs → remote-ByYkXdGD.mjs} +15 -10
- package/dist/result-DNiS-tTP.mjs +434 -0
- package/dist/{run-BtPgpKks.mjs → run-D23HmJMs.mjs} +4 -5
- package/dist/selection-CSl9i5qU.mjs +619 -0
- package/dist/{server-bare-R2m_gsH8.mjs → server-bare-CxTrvDg8.mjs} +3 -4
- package/dist/{server-command-CTtCkmcQ.mjs → server-command-CtzloH3v.mjs} +14 -7
- package/dist/server-expo-C-90EhcG.mjs +2 -0
- package/dist/{server-expo-DsguMGUF.mjs → server-expo-DT_F_uVI.mjs} +50 -9
- package/dist/{settings-B717odTD.mjs → settings-CsJDEXgK.mjs} +234 -24
- package/dist/{settings-vk3mJGSm.d.mts → settings-DkdmlelE.d.mts} +6 -4
- package/dist/settings-T1gtc3bf.mjs +114 -0
- package/dist/settings-write-HyVZ8eQ8.mjs +359 -0
- package/dist/settings.schema.json +163 -16
- package/dist/{simslim-CCr3rE-A.mjs → simslim-Cgk17SXV.mjs} +14 -12
- package/dist/{slot-launch-DPt0m9Nd.mjs → slot-launch-DF8VfT64.mjs} +15 -20
- package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
- package/dist/stage-BIS0ydsV.mjs +183 -0
- package/dist/{start-BWqzODpb.mjs → start-7lpH7hmN.mjs} +63 -44
- package/dist/{start-TXeMmmO2.mjs → start-RChynRDp.mjs} +1 -1
- package/dist/{state-D1Icyjlu.mjs → state-C4ZtUisW.mjs} +40 -13
- package/dist/{state-CG_OFoaA.mjs → state-XMziexv2.mjs} +3 -2
- package/dist/{stats-BoY5sEPU.mjs → stats-53T7OTb9.mjs} +7 -13
- package/dist/stats-report-BFfMpWWF.mjs +16 -0
- package/dist/{status-WgFbkRzj.mjs → status-BL7jVyAB.mjs} +535 -447
- package/dist/status-CSi6tlRq.mjs +2 -0
- package/dist/{status-BTA7kKiQ.mjs → status-DqEUSSxs.mjs} +6 -4
- package/dist/{status-watch-C23ILtf9.mjs → status-watch-GDCfqpTE.mjs} +187 -22
- package/dist/status-worker.d.mts +1 -0
- package/dist/status-worker.mjs +19 -0
- package/dist/stim-desktop-C12we7lz.mjs +112 -0
- package/dist/{stop-DR6VoDIk.mjs → stop-Bk_1qiV6.mjs} +2 -2
- package/dist/{stop-BNmBMi1F.mjs → stop-CPzlM1L-.mjs} +138 -98
- package/dist/{stop-DPEhunlw.mjs → stop-D7h6jAXQ.mjs} +11 -10
- package/dist/supervisor-run.d.mts +8 -17
- package/dist/supervisor-run.mjs +63 -27
- package/dist/{support-DMTqj3Hm.mjs → support-67vraa1Q.mjs} +18 -11
- package/dist/{support-CwjbFs9H.mjs → support-Dlu37g6H.mjs} +12 -12
- package/dist/{swiftpm-macos-DRNVJWlb.mjs → swiftpm-macos-p8WZbxKU.mjs} +35 -24
- package/dist/toolchain-DhKwp9iI.mjs +2 -0
- package/dist/toolchain-Hp9sCpK4.mjs +873 -0
- package/dist/{trigger-CigAYjeL.mjs → trigger-BAahxUPq.mjs} +20 -5
- package/dist/trigger-Bf3uDcpv.mjs +2 -0
- package/dist/{warm-progress-BuY-Fvfn.mjs → warm-progress-BHX5r0Ei.mjs} +250 -156
- package/dist/{web-BDBMxDpx.mjs → web-CJmIj6AI.mjs} +18 -13
- package/dist/web-DknQETPs.mjs +2 -0
- package/dist/web-run.mjs +11 -12
- package/dist/windows-report.d.mts +1 -0
- package/dist/windows-report.mjs +18 -0
- package/dist/windows-report.ps1 +43 -0
- package/dist/workspace-process-lock-1_1OoVW5.mjs +57 -0
- package/dist/{workspace-state-DJt_MMvf.mjs → workspace-state-Cjuigeeu.mjs} +62 -58
- package/dist/{workspaces-C36s2jb9.mjs → workspaces-BccMFmGQ.mjs} +1188 -1079
- package/dist/worktree-CK2MpJW5.mjs +2 -0
- package/dist/{worktree-CgvJYJ-Q.mjs → worktree-DQ6Zi2Mv.mjs} +304 -53
- package/dist/xcode-Zlx3qjEs.mjs +896 -0
- package/package.json +7 -5
- package/shim/android-optimizations.gradle +7 -5
- package/dist/activity-BSV745Kz.mjs +0 -629
- package/dist/api-qvOzWyfO.mjs +0 -154
- package/dist/api-run.mjs +0 -294
- package/dist/app-install-BIKtMfPq.mjs +0 -896
- package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
- package/dist/budget-f7516Zk0.mjs +0 -4106
- package/dist/build-facts-DcLv2HSd.d.mts +0 -111
- package/dist/cancellation-C_22VQTH.mjs +0 -24
- package/dist/client-qQAaXSUs.mjs +0 -1771
- package/dist/config-BYDxlMY3.mjs +0 -562
- package/dist/device-DuiPJQSn.mjs +0 -290
- package/dist/device-lease-BX1sJQ2E.mjs +0 -1224
- package/dist/device-remote-xRT0Vmo9.mjs +0 -1272
- package/dist/eas-session-ledger-Cm0Gwq2F.mjs +0 -207
- package/dist/exec-DqKo9GKJ.mjs +0 -268
- package/dist/git-DDfFzkMm.mjs +0 -45
- package/dist/launch-verify-B6Q8hZP-.mjs +0 -428
- package/dist/logs-BGrEUaEs.mjs +0 -383
- package/dist/miss-reason-mKzZ4VvN.mjs +0 -238
- package/dist/native-android-D5qc3-_v.mjs +0 -226
- package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
- package/dist/plan-C4TjdPsR.mjs +0 -260
- package/dist/prebuild-DYbucPXy.mjs +0 -212
- package/dist/preview-78a9kR_-.mjs +0 -1011
- package/dist/react-native-build-CtCccJtb.mjs +0 -239
- package/dist/react-native-doctor-CfRnFfjs.mjs +0 -78
- package/dist/remote-cache-OyOyVIS3.mjs +0 -526
- package/dist/result-CaJg5Iat.mjs +0 -186
- package/dist/server-expo-Bigriskl.mjs +0 -2
- package/dist/settings-BORNaaCO.mjs +0 -402
- package/dist/spawn-claims-DVS5RkMS.mjs +0 -72
- package/dist/stage-KNTQopqv.mjs +0 -157
- package/dist/stim-desktop-BzBN2Em2.mjs +0 -63
- package/dist/tailnet-Dh-qiYzG.mjs +0 -265
- package/dist/toolchain-BFkAcstd.mjs +0 -2
- package/dist/toolchain-DxSsNssu.mjs +0 -1657
- package/dist/trigger-9_USgmxz.mjs +0 -2
- package/dist/web-Dq-i3wzJ.mjs +0 -2
- package/dist/worktree-DpLdCHga.mjs +0 -2
- package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
- package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { l as
|
|
4
|
-
import {
|
|
1
|
+
import { p as process_identity_exports } from "./exec-_UbtCQcG.mjs";
|
|
2
|
+
import { st as tailscaleStatusAsync } from "./config-CYcBF478.mjs";
|
|
3
|
+
import { l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-Cjuigeeu.mjs";
|
|
4
|
+
import { Qt as cancellableSleep, en as throwIfCancelled } from "./settings-CsJDEXgK.mjs";
|
|
5
5
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
6
|
+
import { HOSTED_METRO_REQUESTS_KEY, findPeer, hostedMetroGateways, hostedMetroRequests, isJsonObject, parseMachine } from "@stim-cli/core/state";
|
|
6
7
|
import { isIP } from "node:net";
|
|
7
8
|
//#region src/device-host/metro-gateway.ts
|
|
8
9
|
function gatewayAddresses(credential, status) {
|
|
9
10
|
const machine = parseMachine(credential.machine);
|
|
10
11
|
const peer = machine ? findPeer(status, machine.name) : "missing";
|
|
11
|
-
if (typeof peer === "string"
|
|
12
|
+
if (typeof peer === "string") throw new Error(`${credential.machine} no longer resolves to one tailnet peer. Run stim doctor.`);
|
|
12
13
|
const self = isJsonObject(status) && isJsonObject(status.Self) ? status.Self : null;
|
|
13
14
|
const address = (Array.isArray(self?.TailscaleIPs) ? self.TailscaleIPs : []).find((ip) => typeof ip === "string" && isIP(ip) === isIP(peer.address) && isIP(ip) !== 0);
|
|
14
|
-
if (!address) throw new Error("This
|
|
15
|
+
if (!address) throw new Error("This machine has no Tailscale address compatible with the hosting Mac.");
|
|
15
16
|
return {
|
|
16
17
|
address,
|
|
17
18
|
peer: peer.address
|
|
@@ -25,9 +26,12 @@ function requireHostedMetro(root) {
|
|
|
25
26
|
remedy: "Run stim stop; stim start, then retry."
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
|
-
async function requestHostedMetro(root, session, credential) {
|
|
29
|
+
async function requestHostedMetro(root, session, credential, signal) {
|
|
30
|
+
throwIfCancelled(signal, "hosted Metro gateway");
|
|
31
|
+
requireHostedMetro(root);
|
|
32
|
+
const addresses = gatewayAddresses(credential, await tailscaleStatusAsync(signal));
|
|
33
|
+
throwIfCancelled(signal, "hosted Metro gateway");
|
|
29
34
|
requireHostedMetro(root);
|
|
30
|
-
const addresses = gatewayAddresses(credential, realIo.status());
|
|
31
35
|
const previous = hostedMetroRequests(readWorkspaceState$1(root))[session];
|
|
32
36
|
const request = previous && previous.address === addresses.address && previous.peer === addresses.peer ? previous : {
|
|
33
37
|
id: randomUUID(),
|
|
@@ -35,15 +39,16 @@ async function requestHostedMetro(root, session, credential) {
|
|
|
35
39
|
...addresses,
|
|
36
40
|
secret: randomBytes(32).toString("hex")
|
|
37
41
|
};
|
|
38
|
-
|
|
42
|
+
await updateWorkspaceStateAsync(root, (state) => ({
|
|
39
43
|
...state,
|
|
40
44
|
[HOSTED_METRO_REQUESTS_KEY]: {
|
|
41
45
|
...hostedMetroRequests(state),
|
|
42
46
|
[session]: request
|
|
43
47
|
}
|
|
44
|
-
}));
|
|
48
|
+
}), signal);
|
|
45
49
|
const deadline = Date.now() + 15e3;
|
|
46
50
|
while (Date.now() < deadline) {
|
|
51
|
+
throwIfCancelled(signal, "hosted Metro gateway");
|
|
47
52
|
const state = readWorkspaceState$1(root);
|
|
48
53
|
const gateway = hostedMetroGateways(state)[session];
|
|
49
54
|
if (gateway?.id === request.id && gateway.processToken === state?.supervisor?.processToken) {
|
|
@@ -53,7 +58,10 @@ async function requestHostedMetro(root, session, credential) {
|
|
|
53
58
|
secret: request.secret
|
|
54
59
|
};
|
|
55
60
|
}
|
|
56
|
-
await
|
|
61
|
+
await cancellableSleep(100, {
|
|
62
|
+
signal,
|
|
63
|
+
what: "hosted Metro gateway"
|
|
64
|
+
});
|
|
57
65
|
}
|
|
58
66
|
throw new Error(`The Metro supervisor did not open a private gateway for ${credential.machine}. Run stim stop; stim start, then retry.`);
|
|
59
67
|
}
|
|
@@ -68,7 +76,7 @@ function clearHostedMetro(root, session) {
|
|
|
68
76
|
});
|
|
69
77
|
}
|
|
70
78
|
async function closeHostedMetro(root, session) {
|
|
71
|
-
clearHostedMetro(root, session);
|
|
79
|
+
await withWorkspaceStateLockAsync(root, () => clearHostedMetro(root, session));
|
|
72
80
|
const deadline = Date.now() + 5e3;
|
|
73
81
|
while (true) {
|
|
74
82
|
const state = readWorkspaceState$1(root);
|
|
@@ -1,63 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { p as process_identity_exports, t as getExecutor } from "./exec-_UbtCQcG.mjs";
|
|
2
|
+
import { C as saveConfig, O as withConfigLockAsync, _ as loadConfig, c as ensureConfig, d as getConfigDir, p as getProject } from "./config-CYcBF478.mjs";
|
|
3
|
+
import { c as parseNetstatPids, h as createPortProbe, p as signalProcessTree } from "./metro-DEXpIhHC.mjs";
|
|
4
|
+
import { t as withWorkspaceProcessLock } from "./workspace-process-lock-1_1OoVW5.mjs";
|
|
5
5
|
import { realpathSync } from "node:fs";
|
|
6
|
-
import { join } from "node:path";
|
|
7
|
-
import { setTimeout } from "node:timers/promises";
|
|
8
|
-
//#region src/engine/workspace-process-lock.ts
|
|
9
|
-
const DEFAULT_WAIT_MS = 6e4;
|
|
10
|
-
const POLL_MS = 25;
|
|
11
|
-
function workspaceProcessLockError(err) {
|
|
12
|
-
const code = err?.code;
|
|
13
|
-
if (code === "STIM_LOCK_REFUSED") return "refused";
|
|
14
|
-
if (code === "STIM_LOCK_TIMEOUT") return "timeout";
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
function workspaceProcessLockPath(root, name, external) {
|
|
18
|
-
return external ? join(root, `${name}.lock`) : join(root, ".stim", `${name}.lock`);
|
|
19
|
-
}
|
|
20
|
-
async function withWorkspaceProcessLock(root, name, fn, { now = Date.now, signal, sleep = (ms) => setTimeout(ms, void 0, { signal }), waitMs = DEFAULT_WAIT_MS, ownerPurpose, details = {}, onHeld, rejectOwnerPurposes = [], external = false, declareSpawns = false } = {}) {
|
|
21
|
-
const path = workspaceProcessLockPath(root, name, external);
|
|
22
|
-
const deadline = now() + waitMs;
|
|
23
|
-
for (;;) {
|
|
24
|
-
signal?.throwIfAborted();
|
|
25
|
-
const attempt = (0, ownership_claim_exports.tryAcquireClaim)({
|
|
26
|
-
root: path,
|
|
27
|
-
mode: "exclusive",
|
|
28
|
-
label: `${name} lock`,
|
|
29
|
-
details: ownerPurpose ? {
|
|
30
|
-
...details,
|
|
31
|
-
purpose: ownerPurpose
|
|
32
|
-
} : details
|
|
33
|
-
});
|
|
34
|
-
if (attempt.pending) (0, ownership_claim_exports.releaseClaim)(attempt.pending);
|
|
35
|
-
if (attempt.acquired) {
|
|
36
|
-
if (declareSpawns) declareSpawnsOn(attempt.acquired);
|
|
37
|
-
try {
|
|
38
|
-
return await fn(attempt.acquired);
|
|
39
|
-
} finally {
|
|
40
|
-
stopDeclaringSpawnsOn(attempt.acquired);
|
|
41
|
-
(0, ownership_claim_exports.releaseClaim)(attempt.acquired);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const holder = attempt.held ?? attempt.waitingFor?.[0];
|
|
45
|
-
const purpose = holder?.details.purpose;
|
|
46
|
-
if (typeof purpose === "string" && rejectOwnerPurposes.includes(purpose)) {
|
|
47
|
-
const error = /* @__PURE__ */ new Error(`The ${name} lock at ${path} is held for ${purpose}.`);
|
|
48
|
-
error.code = "STIM_LOCK_REFUSED";
|
|
49
|
-
throw error;
|
|
50
|
-
}
|
|
51
|
-
if (holder && onHeld) await onHeld(holder);
|
|
52
|
-
if (now() >= deadline) {
|
|
53
|
-
const error = /* @__PURE__ */ new Error(`Timed out waiting for the ${name} lock at ${path}.`);
|
|
54
|
-
error.code = "STIM_LOCK_TIMEOUT";
|
|
55
|
-
throw error;
|
|
56
|
-
}
|
|
57
|
-
await sleep(POLL_MS);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//#endregion
|
|
61
6
|
//#region src/named-ports.ts
|
|
62
7
|
const FIRST_PORT = 8900;
|
|
63
8
|
const LAST_PORT = 8999;
|
|
@@ -124,7 +69,7 @@ function reserveBrowserPort(projectPath, options = {}) {
|
|
|
124
69
|
return allocateNamedPort(projectPath, BROWSER_LABEL, options);
|
|
125
70
|
}
|
|
126
71
|
function releaseBrowserPort(projectPath, port) {
|
|
127
|
-
return withPortsLock(async () =>
|
|
72
|
+
return withPortsLock(async () => withConfigLockAsync(() => {
|
|
128
73
|
const cfg = loadConfig();
|
|
129
74
|
const ports = cfg?.projects?.[projectPath]?.ports;
|
|
130
75
|
if (!cfg || ports?.[BROWSER_LABEL] !== port) return;
|
|
@@ -140,7 +85,7 @@ async function allocateNamedPort(projectPath, label, { isFree = createPortProbe(
|
|
|
140
85
|
for (let port = FIRST_PORT; port <= LAST_PORT; port++) {
|
|
141
86
|
if (Object.values(loadConfig()?.projects ?? {}).some((project) => project.metroPort === port || Object.values(project.ports ?? {}).includes(port))) continue;
|
|
142
87
|
if (!await isFree(port)) continue;
|
|
143
|
-
if (
|
|
88
|
+
if (await withConfigLockAsync(() => {
|
|
144
89
|
const cfg = ensureConfig();
|
|
145
90
|
if (Object.values(cfg.projects).some((project) => project.metroPort === port || Object.values(project.ports ?? {}).includes(port))) return false;
|
|
146
91
|
const project = cfg.projects[root] ??= {
|
|
@@ -211,7 +156,7 @@ async function clearNamedPorts(projectPath, { label, stop = false, dryRun = fals
|
|
|
211
156
|
log(`would release ${name} (${port})`);
|
|
212
157
|
continue;
|
|
213
158
|
}
|
|
214
|
-
|
|
159
|
+
await withConfigLockAsync(() => {
|
|
215
160
|
const cfg = loadConfig();
|
|
216
161
|
const current = cfg?.projects?.[projectPath]?.ports;
|
|
217
162
|
if (!cfg || current?.[name] !== port) return;
|
|
@@ -226,4 +171,4 @@ async function clearNamedPorts(projectPath, { label, stop = false, dryRun = fals
|
|
|
226
171
|
});
|
|
227
172
|
}
|
|
228
173
|
//#endregion
|
|
229
|
-
export {
|
|
174
|
+
export { reserveBrowserPort as i, getNamedPort as n, releaseBrowserPort as r, clearNamedPorts as t };
|