stim 1.19.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 +20 -3
- package/dist/{activity-BSw0x84R.mjs → activity-BrGh9EAI.mjs} +3 -3
- package/dist/{agent-device-usage-output-Bjxu_VmX.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-BdQC6zs1.mjs → android-BsYNR81W.mjs} +103 -45
- package/dist/{android-DE5g_5gv.mjs → android-CK3fpEyZ.mjs} +2 -2
- package/dist/{android-cas-C87geAg-.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-DIf_s86s.mjs → api-zuX3ynYN.mjs} +5 -1
- package/dist/api.d.mts +98 -4
- package/dist/api.mjs +1 -1
- package/dist/{app-install-CFI4ptUL.mjs → app-install-0LgaQRT7.mjs} +9 -8
- package/dist/artifact-CnC0mfov.mjs +807 -0
- package/dist/artifact-DClXJNWx.mjs +772 -0
- package/dist/artifact-lifecycle-DzPpBYvK.mjs +30 -0
- package/dist/{browser-web-CDhqQxhv.mjs → browser-web-CzBmhmgs.mjs} +19 -19
- package/dist/{budget-Dz-kyXLv.mjs → budget-BONq9vXY.mjs} +3101 -3062
- package/dist/build-BixRI6sB.mjs +462 -0
- package/dist/{build-facts-B87vo-Im.d.mts → build-facts-DcLv2HSd.d.mts} +1 -32
- package/dist/build-plan-CP0tckNU.mjs +553 -0
- package/dist/{cache-manifest-DiwKSyv9.mjs → cache-manifest-qA3dT2x2.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{manifest-CX0d1IkZ.mjs → ccache-CjHQ5F8g.mjs} +13 -19
- package/dist/{chrome-BTUOo8p2.mjs → chrome-Dp2lMLBe.mjs} +1 -1
- package/dist/{cli-C9Zvgbdc.mjs → cli-B2R8wH1F.mjs} +20 -20
- package/dist/cli.mjs +1 -1
- package/dist/{client-CuUo8Nvg.mjs → client-BLy1Pw2V.mjs} +89 -307
- package/dist/collector-run.d.mts +4 -0
- package/dist/collector-run.mjs +7 -7
- package/dist/{command-output-Bt8ygHE7.mjs → command-output-BjPN99ZB.mjs} +2 -2
- package/dist/{config-DC5jEtd1.mjs → config-D0LhTY3S.mjs} +8 -12
- package/dist/{created-devices-D0s26Hx5.mjs → created-devices-HU_DAb_Q.mjs} +7 -6
- package/dist/{dependency-state-DKaS1OM9.mjs → dependency-state-B2m8eqsS.mjs} +2 -2
- package/dist/{detached-entry-pB_IPfV4.mjs → detached-entry-BXq4fIl-.mjs} +1 -1
- package/dist/{dev-client-CDY_zAmD.mjs → dev-client-ClATaJoH.mjs} +2 -2
- package/dist/{device-BHw0WlHl.mjs → device-B7lsC0K1.mjs} +8 -8
- package/dist/device-DVCwAFlX.mjs +727 -0
- package/dist/{device-capacity-BoN1jQkO.mjs → device-capacity-Ca_ke1LE.mjs} +13 -14
- package/dist/device-host-worker.mjs +38 -18
- package/dist/device-ios-CRUqPxKw.mjs +413 -0
- package/dist/{device-lease-Cu7PtQpZ.mjs → device-lease-DHOBXGgS.mjs} +135 -22
- package/dist/{device-lease-run-D38SnZtt.mjs → device-lease-run-CvDeHTkG.mjs} +4 -4
- package/dist/{device-pool-CP4rAsHx.mjs → device-pool-L2-5GxMy.mjs} +3 -3
- package/dist/{device-remote-B5GiUifk.mjs → device-remote-Bmg42063.mjs} +17 -68
- package/dist/doctor-C2MSuMMg.mjs +515 -0
- package/dist/{doctor-PRJH94v6.mjs → doctor-DPAqhVCK.mjs} +333 -744
- package/dist/{doctor-watchman-wZhyTdp4.mjs → doctor-watchman-CB4NnVZm.mjs} +13 -12
- package/dist/{simslim-D9LkJxIO.mjs → eas-build-Dw_ec2Km.mjs} +6 -152
- package/dist/{stim-installations-DbmUjsLv.mjs → eas-session-ledger-DZlC-Fq3.mjs} +57 -4
- package/dist/{error-diagnostics--v5HGOU0.mjs → error-diagnostics-Du7I_GuY.mjs} +17 -12
- package/dist/errors-DzkMYh8Q.mjs +205 -0
- package/dist/{exec-i8GDPwq9.mjs → exec-B81Qodjn.mjs} +40 -10
- package/dist/{gc-CyHMcKcn.mjs → gc-PWp34zGb.mjs} +21 -20
- package/dist/{device-ios-B2ruohE-.mjs → gradle-C2OEKCCI.mjs} +21 -650
- package/dist/{guide-dRaQJJk9.mjs → guide-Dai9lphv.mjs} +504 -117
- package/dist/{hosted-android-Bs7fytj7.mjs → hosted-android-DQ-Agsd8.mjs} +5 -5
- package/dist/{hosted-client-C5G4h_OJ.mjs → hosted-client-Io01s5By.mjs} +9 -3
- package/dist/{hosted-ios-Bik035eL.mjs → hosted-ios-DIxFnYp-.mjs} +3 -3
- package/dist/{hosted-logs-CI9Az9a4.mjs → hosted-logs-DP-ABU_M.mjs} +8 -8
- package/dist/{hosted-macos-DABm3ScO.mjs → hosted-macos-Aziw9T_9.mjs} +7 -6
- package/dist/{hosted-native-DbV2aUVw.mjs → hosted-native-BdAQi21M.mjs} +17 -14
- package/dist/{idle-shutdown-DYiMBn34.mjs → idle-shutdown-DdMqoSUB.mjs} +7 -7
- package/dist/{ios-DYUr9LGc.mjs → ios-BZ9dg2Fr.mjs} +8 -7
- package/dist/{ios-BWbHFZVz.mjs → ios-CXLIUxXJ.mjs} +180 -24
- package/dist/ios-CZuv6gRv.mjs +1112 -0
- package/dist/{ios-DCrkgXEM.mjs → ios-VGvNdsv2.mjs} +1 -1
- package/dist/{ios-device-CrW8aMb5.mjs → ios-device-B1B14xND.mjs} +1 -1
- package/dist/{ios-device-CJ_ZOGky.mjs → ios-device-BreZOpM0.mjs} +3 -3
- package/dist/ios-project-B9drt_aY.mjs +197 -0
- package/dist/{ios-state-By0XuLTQ.mjs → ios-state-CjrL2qv-.mjs} +1 -1
- package/dist/js-swap-C8icNYIY.mjs +432 -0
- package/dist/launch-DxH0THLP.mjs +745 -0
- package/dist/{react-native-ios-CSpIxexZ.mjs → launch-YrbqaIFj.mjs} +59 -612
- package/dist/{launch-verify-DCveSE6d.mjs → launch-verify-BzRdbuO1.mjs} +26 -7
- package/dist/{logs-Bao1HOMy.mjs → logs-DHaRNfg7.mjs} +11 -11
- package/dist/macos-C0iljhsN.mjs +2 -0
- package/dist/{macos-ciyBdTY5.mjs → macos-V_3Ui7g4.mjs} +42 -50
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +13 -10
- package/dist/{metro-DI2AjPF_.mjs → metro-D_j9sN-B.mjs} +18 -5
- package/dist/{metro-gateway-BxpJLIwh.mjs → metro-gateway-BBJldOdi.mjs} +2 -2
- package/dist/miss-reason-BPAzZS0r.mjs +238 -0
- package/dist/{named-ports-B4iWH4E-.mjs → named-ports-C2lvoPsb.mjs} +3 -3
- package/dist/native-android-lHzaew7r.mjs +226 -0
- package/dist/native-gradle-inputs-BQnIdAlL.mjs +356 -0
- package/dist/{native-runtime-BGxsbfny.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 +41 -7
- package/dist/offload-worker.mjs +409 -74
- package/dist/{ownership-EB0ySdGK.mjs → ownership-DXzMMSx6.mjs} +2 -2
- package/dist/{placement-log-Dxe34rJm.mjs → placement-log-reFbjqEr.mjs} +1 -1
- package/dist/plan-BDk2AeY_.mjs +260 -0
- package/dist/plan-placement-D_YYlE6N.mjs +73 -0
- package/dist/{ports-ByPc0_97.mjs → ports-jzvAJXXL.mjs} +3 -3
- package/dist/{prebuild-BKJ3wJI1.mjs → prebuild-Bw44QxVh.mjs} +4 -4
- package/dist/{preview-BbSottmO.mjs → preview-BaBJ72Al.mjs} +50 -32
- package/dist/project-B8_duAzW.mjs +1067 -0
- package/dist/project-plan-BPwbLwQu.mjs +10 -0
- package/dist/{pull-request-IHNdMnG8.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-Bv8McZN4.mjs → recordings-Bk-VivUV.mjs} +1 -1
- package/dist/{reload-rAPdqeRR.mjs → reload-D34GkY78.mjs} +17 -13
- package/dist/remote-BU9UyhCJ.mjs +192 -0
- package/dist/{remote-cache-N3hAEaAL.mjs → remote-cache-Bsts6f6Y.mjs} +5 -5
- package/dist/result-BDoRk1k3.mjs +186 -0
- package/dist/{run-lAkle1-c.mjs → run-qvff78hv.mjs} +3 -3
- package/dist/{server-bare-CkIjnegq.mjs → server-bare-dWjAarki.mjs} +5 -5
- package/dist/server-command-7XIKlWtO.mjs +69 -0
- package/dist/{server-expo-n3tUi3Em.mjs → server-expo-CsYu2aKL.mjs} +107 -82
- package/dist/server-expo-DV43vep4.mjs +2 -0
- package/dist/{settings-CxgngUZk.mjs → settings-Bbztm4oV.mjs} +179 -129
- package/dist/{settings-2am7TSxp.mjs → settings-CT3E71-i.mjs} +6 -6
- package/dist/{state-lKh8shBp.d.mts → settings-vk3mJGSm.d.mts} +4 -2
- package/dist/settings.schema.json +84 -0
- package/dist/simslim-ChMfe8rg.mjs +149 -0
- package/dist/{slot-launch-HV_KtPIw.mjs → slot-launch-B9hn96wd.mjs} +6 -6
- package/dist/{stage-BgaZJVZY.mjs → stage-BNKKdDNc.mjs} +6 -3
- package/dist/start-CbQCSnXQ.mjs +2 -0
- package/dist/{start-DtxthMfI.mjs → start-CdvcTaXr.mjs} +97 -68
- package/dist/{state-Tp4uImDS.mjs → state-Boo0IMJq.mjs} +1 -1
- package/dist/{state-D2KtnALG.mjs → state-DI84A-uu.mjs} +29 -10
- package/dist/{stats-8EJ5ivFT.mjs → stats-BIIDrjA8.mjs} +5 -5
- package/dist/{status-BEeL6IKz.mjs → status-BDGHwkCs.mjs} +3 -1
- package/dist/{status-BOyp0CUl.mjs → status-DARMkc9q.mjs} +81 -293
- package/dist/status-watch-DvmI3SmN.mjs +296 -0
- package/dist/{stim-desktop-C65jk_q2.mjs → stim-desktop-8GQX2OV8.mjs} +1 -1
- package/dist/{stop-DRipAg-e.mjs → stop-CCZS-C9m.mjs} +2 -2
- package/dist/{stop-D0UIpZuh.mjs → stop-WQPQHLuy.mjs} +5 -5
- package/dist/{stop-zDlknFoz.mjs → stop-iNemHsJC.mjs} +21 -20
- package/dist/supervisor-run.d.mts +7 -2
- package/dist/supervisor-run.mjs +32 -20
- package/dist/{support-DsNaFg6D.mjs → support-CnE_SIjt.mjs} +17 -7
- package/dist/{support-CNqYkV0y.mjs → support-DCco5fut.mjs} +61 -8
- package/dist/{swiftpm-macos-aJzPAj1t.mjs → swiftpm-macos-afeNUExW.mjs} +5 -5
- package/dist/tailnet-CoJUb2tB.mjs +265 -0
- package/dist/toolchain-BIupIro1.mjs +2 -0
- package/dist/{toolchain-C3xSoyUl.mjs → toolchain-DqyDXs30.mjs} +206 -53
- package/dist/{trigger-CAhmG-4s.mjs → trigger-C0MWBi8O.mjs} +2 -2
- package/dist/trigger-SHLOWJ4O.mjs +2 -0
- package/dist/{warm-progress-pFLB2e6P.mjs → warm-progress-C3ASD6z5.mjs} +6 -6
- package/dist/{watchman-BL1IdOtq.mjs → watchman-CQl51YZu.mjs} +6 -6
- package/dist/{web-DbbrPUn0.mjs → web-B3eldHFH.mjs} +9 -13
- package/dist/web-BLXpOe6b.mjs +2 -0
- package/dist/web-run.mjs +10 -10
- package/dist/{workspace-state-CR9X86xJ.mjs → workspace-state-CSIFuuDa.mjs} +33 -33
- package/dist/{workspaces-Djb2gfi9.mjs → workspaces-D2xSHBDY.mjs} +1260 -1258
- package/dist/{worktree-BL4M1rhB.mjs → worktree-BxDqaTev.mjs} +84 -48
- package/dist/worktree-q7_OZNY0.mjs +2 -0
- package/package.json +8 -6
- package/shim/native-android.gradle +101 -0
- package/dist/android-BXc6BmEi.mjs +0 -3732
- package/dist/android-BvV1gGdN.mjs +0 -4
- package/dist/ios-ITYno9rO.mjs +0 -2241
- package/dist/macos-nIOATJmR.mjs +0 -2
- package/dist/metro-store-BAHFcJm6.mjs +0 -106
- package/dist/miss-reason-CjQCOKqq.mjs +0 -1743
- package/dist/plan-placement-BVY59qa8.mjs +0 -290
- package/dist/project-B5eQ1USs.mjs +0 -612
- package/dist/react-native-ios-BMh2i25I.mjs +0 -2
- package/dist/server-expo-DGsdUGX2.mjs +0 -2
- package/dist/start-D8NbxNBb.mjs +0 -2
- package/dist/trigger-CoalsMTV.mjs +0 -2
- package/dist/web-DFpFeZu5.mjs +0 -2
- package/dist/worktree-DV-A0LNL.mjs +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { D as withConfigLock$1, O as writeConfigSetting, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-
|
|
5
|
-
import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-
|
|
1
|
+
import { D as withConfigLock$1, O as writeConfigSetting, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-D0LhTY3S.mjs";
|
|
2
|
+
import { Et as repoRoot, R as readCommittedSettings, mt as gitCommonDir, nt as unknownSettingKeys } from "./settings-Bbztm4oV.mjs";
|
|
3
|
+
import { n as findCommandWorkspace, t as NO_PROJECT_REFUSAL } from "./project-B8_duAzW.mjs";
|
|
4
|
+
import { n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-8GQX2OV8.mjs";
|
|
5
|
+
import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-Bk-VivUV.mjs";
|
|
6
6
|
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
7
7
|
import { join } from "node:path";
|
|
8
8
|
import { SETTINGS, SETTING_SCOPES, coerceSettingText, isJsonObject, isSensitiveReference, settingDefinition, settingValueError } from "@stim-cli/core/state";
|
|
@@ -348,7 +348,7 @@ function registerSettings(program, io = CONSOLE, env = process.env) {
|
|
|
348
348
|
const setting = requireSetting(key);
|
|
349
349
|
const scope = readScope(opts.scope, setting);
|
|
350
350
|
const value = parseSettingValue(setting, raw);
|
|
351
|
-
if (setting.sensitive && scope === "committed" && !isSensitiveReference(value)) throw new Refusal("STIM_BAD_ARG", `${key} is sensitive, so a committed .stim.json takes only an env: or file: reference, never the secret.`, `Set the secret with --scope workspace or --scope repo, or commit a reference such as env:MY_KEYSTORE_PASSWORD.`);
|
|
351
|
+
if (setting.sensitive && scope === "committed" && !isSensitiveReference(value)) throw new Refusal("STIM_BAD_ARG", `${key} is sensitive, so a committed .stim.json takes only an env: or file: reference, never the secret.`, `Set the secret with --scope workspace or --scope repo, which store it in ${getConfigPath$1()}, readable only by you, or commit a reference such as env:MY_KEYSTORE_PASSWORD.`);
|
|
352
352
|
const context = readContext(env, io.note);
|
|
353
353
|
const file = requireLayer(context, scope, setting);
|
|
354
354
|
const recording = setting.key === "recording.enabled" ? recordingLayers() : null;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import "
|
|
1
|
+
import "./ndjson-Du3j0AQ9.mjs";
|
|
2
|
+
import { SettingsObject, WebViewport } from "@stim-cli/core/state";
|
|
3
|
+
import "@stim-cli/cache";
|
|
2
4
|
import { ProcessRecord } from "@stim-cli/core/process-identity";
|
|
3
5
|
//#region src/supervisor/state.d.ts
|
|
4
6
|
declare const MODE_BARE = "bare-inproc";
|
|
@@ -8,4 +10,4 @@ declare function clearExpoMetroTunnel(root: string): void;
|
|
|
8
10
|
declare function writePidFile(root: string, pid: number): string;
|
|
9
11
|
declare function readPidFile(root: string): number | null;
|
|
10
12
|
//#endregion
|
|
11
|
-
export {
|
|
13
|
+
export { clearWorkspaceSupervisor as a, clearExpoMetroTunnel as i, MODE_BARE as n, readPidFile as o, MODE_EXPO as r, writePidFile as s, SettingsObject as t };
|
|
@@ -274,6 +274,18 @@
|
|
|
274
274
|
]
|
|
275
275
|
}
|
|
276
276
|
},
|
|
277
|
+
"scheme": {
|
|
278
|
+
"description": "Shared Xcode scheme to build when the workspace has several",
|
|
279
|
+
"type": "string",
|
|
280
|
+
"x-stim": {
|
|
281
|
+
"key": "ios.scheme",
|
|
282
|
+
"kind": "string",
|
|
283
|
+
"scopes": [
|
|
284
|
+
"workspace",
|
|
285
|
+
"committed"
|
|
286
|
+
]
|
|
287
|
+
}
|
|
288
|
+
},
|
|
277
289
|
"remote": {
|
|
278
290
|
"description": "Default iOS remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy; local runs here, overriding a lower layer",
|
|
279
291
|
"type": "string",
|
|
@@ -289,6 +301,20 @@
|
|
|
289
301
|
]
|
|
290
302
|
}
|
|
291
303
|
},
|
|
304
|
+
"projectPath": {
|
|
305
|
+
"description": "Directory under the app that holds a bare React Native app's Xcode project and Podfile",
|
|
306
|
+
"type": "string",
|
|
307
|
+
"default": "ios",
|
|
308
|
+
"x-stim": {
|
|
309
|
+
"key": "ios.projectPath",
|
|
310
|
+
"kind": "path",
|
|
311
|
+
"scopes": [
|
|
312
|
+
"workspace",
|
|
313
|
+
"committed"
|
|
314
|
+
],
|
|
315
|
+
"relative": true
|
|
316
|
+
}
|
|
317
|
+
},
|
|
292
318
|
"simslimProfile": {
|
|
293
319
|
"description": "SimSlim JSON profile under the app",
|
|
294
320
|
"type": "string",
|
|
@@ -367,6 +393,7 @@
|
|
|
367
393
|
"deviceProfile": {
|
|
368
394
|
"description": "avdmanager hardware profile id for new owned AVDs",
|
|
369
395
|
"type": "string",
|
|
396
|
+
"pattern": "^[A-Za-z0-9 ._()-]*$",
|
|
370
397
|
"default": "pixel_6",
|
|
371
398
|
"x-stim": {
|
|
372
399
|
"key": "android.deviceProfile",
|
|
@@ -422,6 +449,34 @@
|
|
|
422
449
|
]
|
|
423
450
|
}
|
|
424
451
|
},
|
|
452
|
+
"gradleRoot": {
|
|
453
|
+
"description": "Directory relative to the app holding gradlew and settings.gradle; may be outside the app but not the repository",
|
|
454
|
+
"type": "string",
|
|
455
|
+
"default": "android",
|
|
456
|
+
"x-stim": {
|
|
457
|
+
"key": "android.gradleRoot",
|
|
458
|
+
"kind": "path",
|
|
459
|
+
"scopes": [
|
|
460
|
+
"workspace",
|
|
461
|
+
"committed"
|
|
462
|
+
],
|
|
463
|
+
"relative": true
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
"module": {
|
|
467
|
+
"description": "The app's Gradle project path, such as :app",
|
|
468
|
+
"type": "string",
|
|
469
|
+
"pattern": "^(:(?!\\.\\.?(?::|$))[A-Za-z0-9._-]+)+$",
|
|
470
|
+
"default": ":app",
|
|
471
|
+
"x-stim": {
|
|
472
|
+
"key": "android.module",
|
|
473
|
+
"kind": "string",
|
|
474
|
+
"scopes": [
|
|
475
|
+
"workspace",
|
|
476
|
+
"committed"
|
|
477
|
+
]
|
|
478
|
+
}
|
|
479
|
+
},
|
|
425
480
|
"variant": {
|
|
426
481
|
"description": "Gradle build variant",
|
|
427
482
|
"type": "string",
|
|
@@ -435,6 +490,19 @@
|
|
|
435
490
|
]
|
|
436
491
|
}
|
|
437
492
|
},
|
|
493
|
+
"offloadInputs": {
|
|
494
|
+
"description": "Native Gradle source sufficiency, exact ignored inputs and generated output directories for build workers",
|
|
495
|
+
"type": "object",
|
|
496
|
+
"x-stim": {
|
|
497
|
+
"key": "android.offloadInputs",
|
|
498
|
+
"kind": "object",
|
|
499
|
+
"scopes": [
|
|
500
|
+
"workspace",
|
|
501
|
+
"repo",
|
|
502
|
+
"committed"
|
|
503
|
+
]
|
|
504
|
+
}
|
|
505
|
+
},
|
|
438
506
|
"keystore": {
|
|
439
507
|
"description": "Keystore a re-packed release APK is signed with",
|
|
440
508
|
"type": "string",
|
|
@@ -506,6 +574,21 @@
|
|
|
506
574
|
]
|
|
507
575
|
}
|
|
508
576
|
},
|
|
577
|
+
"command": {
|
|
578
|
+
"description": "Command that starts this project's dev server, as an argv array run from the app directory; {port} is replaced with the reserved Metro port",
|
|
579
|
+
"type": "array",
|
|
580
|
+
"items": {
|
|
581
|
+
"type": "string"
|
|
582
|
+
},
|
|
583
|
+
"x-stim": {
|
|
584
|
+
"key": "metro.command",
|
|
585
|
+
"kind": "strings",
|
|
586
|
+
"scopes": [
|
|
587
|
+
"workspace",
|
|
588
|
+
"committed"
|
|
589
|
+
]
|
|
590
|
+
}
|
|
591
|
+
},
|
|
509
592
|
"ngrokUrl": {
|
|
510
593
|
"description": "Stable ngrok URL for the managed tunnel",
|
|
511
594
|
"type": "string",
|
|
@@ -1197,6 +1280,7 @@
|
|
|
1197
1280
|
"deviceProfile": {
|
|
1198
1281
|
"description": "avdmanager hardware profile id for new owned AVDs",
|
|
1199
1282
|
"type": "string",
|
|
1283
|
+
"pattern": "^[A-Za-z0-9 ._()-]*$",
|
|
1200
1284
|
"default": "pixel_6",
|
|
1201
1285
|
"x-stim": {
|
|
1202
1286
|
"key": "android.deviceProfile",
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { n as ownership_claim_exports, t as process_identity_exports } from "./process-identity-Biv3arCO.mjs";
|
|
2
|
+
import { t as getExecutor } from "./exec-B81Qodjn.mjs";
|
|
3
|
+
import { d as getConfigDir } from "./config-D0LhTY3S.mjs";
|
|
4
|
+
import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
//#region src/engine/simslim.ts
|
|
7
|
+
async function reconcileSimSlim({ udid, profile, previouslyManaged = false, out = () => {}, spawn, timeoutMs = 72e4, cleanupMs = 1e4 }) {
|
|
8
|
+
if (!profile && !previouslyManaged) return {
|
|
9
|
+
managed: false,
|
|
10
|
+
profile: null
|
|
11
|
+
};
|
|
12
|
+
const action = profile ? "on" : "off";
|
|
13
|
+
const args = profile ? [
|
|
14
|
+
"on",
|
|
15
|
+
udid,
|
|
16
|
+
"--profile",
|
|
17
|
+
profile
|
|
18
|
+
] : ["off", udid];
|
|
19
|
+
const lines = [];
|
|
20
|
+
const onLine = (raw) => {
|
|
21
|
+
const line = stripAnsi(raw).trim();
|
|
22
|
+
if (!line) return;
|
|
23
|
+
lines.push(line);
|
|
24
|
+
if (lines.length > 20) lines.shift();
|
|
25
|
+
out(`SimSlim: ${line}`);
|
|
26
|
+
};
|
|
27
|
+
const stdout = createLineReader(onLine);
|
|
28
|
+
const stderr = createLineReader(onLine);
|
|
29
|
+
const root = join(getConfigDir(), "simslim-locks", `${encodeURIComponent(udid.toLowerCase())}.lock`);
|
|
30
|
+
const label = `SimSlim for ${udid}`;
|
|
31
|
+
const attempt = (0, ownership_claim_exports.tryAcquireClaim)({
|
|
32
|
+
root,
|
|
33
|
+
mode: "exclusive",
|
|
34
|
+
label
|
|
35
|
+
});
|
|
36
|
+
if (attempt.pending) (0, ownership_claim_exports.releaseClaim)(attempt.pending);
|
|
37
|
+
const claim = attempt.acquired;
|
|
38
|
+
if (!claim) throw new ownership_claim_exports.ClaimRefusedError({
|
|
39
|
+
root,
|
|
40
|
+
claimPath: attempt.held?.path ?? root,
|
|
41
|
+
label,
|
|
42
|
+
reason: "another SimSlim operation is still using this simulator"
|
|
43
|
+
});
|
|
44
|
+
let child;
|
|
45
|
+
let result;
|
|
46
|
+
let identity;
|
|
47
|
+
let cancellation;
|
|
48
|
+
const stopGroup = () => {
|
|
49
|
+
if (child?.pid !== void 0 && identity && (0, process_identity_exports.inspectProcessIdentity)(identity) === "same") try {
|
|
50
|
+
process.kill(-child.pid, "SIGKILL");
|
|
51
|
+
} catch {}
|
|
52
|
+
};
|
|
53
|
+
const cancel = (signal) => {
|
|
54
|
+
cancellation ??= signal;
|
|
55
|
+
stopGroup();
|
|
56
|
+
};
|
|
57
|
+
const onInterrupt = () => cancel("SIGINT");
|
|
58
|
+
const onTerminate = () => cancel("SIGTERM");
|
|
59
|
+
const groupAlive = () => child?.pid !== void 0 && (0, ownership_claim_exports.processGroupAlive)(child.pid);
|
|
60
|
+
const settled = () => result !== void 0 && !groupAlive();
|
|
61
|
+
const waitUntil = async (deadline, cancellable = false) => {
|
|
62
|
+
while (!settled() && Date.now() < deadline) {
|
|
63
|
+
if (cancellable && cancellation) break;
|
|
64
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(50, deadline - Date.now())));
|
|
65
|
+
}
|
|
66
|
+
return settled();
|
|
67
|
+
};
|
|
68
|
+
process.on("SIGINT", onInterrupt);
|
|
69
|
+
process.on("SIGTERM", onTerminate);
|
|
70
|
+
process.on("exit", stopGroup);
|
|
71
|
+
try {
|
|
72
|
+
(0, ownership_claim_exports.markClaimChildPending)(claim);
|
|
73
|
+
try {
|
|
74
|
+
child = (spawn ?? ((cmd, childArgs, opts) => getExecutor().spawn(cmd, childArgs, opts)))("simslim", args, {
|
|
75
|
+
stdio: [
|
|
76
|
+
"ignore",
|
|
77
|
+
"pipe",
|
|
78
|
+
"pipe"
|
|
79
|
+
],
|
|
80
|
+
detached: true
|
|
81
|
+
});
|
|
82
|
+
} catch (error) {
|
|
83
|
+
throw simslimLaunchError(error);
|
|
84
|
+
}
|
|
85
|
+
child.stdout?.on("data", (chunk) => stdout.push(chunk));
|
|
86
|
+
child.stderr?.on("data", (chunk) => stderr.push(chunk));
|
|
87
|
+
waitForChild(child).then((value) => {
|
|
88
|
+
result = value;
|
|
89
|
+
});
|
|
90
|
+
if (child.pid !== void 0) {
|
|
91
|
+
const captured = (0, process_identity_exports.captureProcessIdentity)(child.pid);
|
|
92
|
+
if (captured.ok) {
|
|
93
|
+
identity = {
|
|
94
|
+
pid: child.pid,
|
|
95
|
+
processToken: captured.token
|
|
96
|
+
};
|
|
97
|
+
try {
|
|
98
|
+
(0, ownership_claim_exports.setClaimChild)(claim, identity);
|
|
99
|
+
} catch {}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const completed = await waitUntil(Date.now() + timeoutMs, true);
|
|
103
|
+
if (cancellation || !completed) {
|
|
104
|
+
stopGroup();
|
|
105
|
+
const stopped = await waitUntil(Date.now() + cleanupMs);
|
|
106
|
+
const detail = lines.length ? ` ${lines.join(" | ")}` : "";
|
|
107
|
+
const recovery = stopped ? "Its process group has stopped. Retry stim ios to reconcile the retained simulator settings." : `Its process group could not be confirmed stopped. The claim remains at ${claim.path}. Inspect the SimSlim process group ${child.pid ?? "unknown"} before retrying. Only when nothing is using it, remove the claim: ${(0, ownership_claim_exports.claimRemoveCommand)(claim.path)}`;
|
|
108
|
+
const message = `SimSlim ${action} ${cancellation ? `interrupted by ${cancellation}` : `exceeded ${Math.round(timeoutMs / 1e3)}s`}. ${recovery}${detail}`;
|
|
109
|
+
if (cancellation) out(message);
|
|
110
|
+
throw Object.assign(new Error(message), { code: cancellation ? "EINTR" : "ETIMEDOUT" });
|
|
111
|
+
}
|
|
112
|
+
} finally {
|
|
113
|
+
if (!child || settled()) (0, ownership_claim_exports.releaseClaim)(claim);
|
|
114
|
+
else {
|
|
115
|
+
child.stdout?.destroy?.();
|
|
116
|
+
child.stderr?.destroy?.();
|
|
117
|
+
child.unref();
|
|
118
|
+
}
|
|
119
|
+
process.off("SIGINT", onInterrupt);
|
|
120
|
+
process.off("SIGTERM", onTerminate);
|
|
121
|
+
process.off("exit", stopGroup);
|
|
122
|
+
if (cancellation) process.exit(cancellation === "SIGINT" ? 130 : 143);
|
|
123
|
+
}
|
|
124
|
+
stdout.flush();
|
|
125
|
+
stderr.flush();
|
|
126
|
+
if (result?.error) throw simslimLaunchError(result.error);
|
|
127
|
+
if (result?.code !== 0) {
|
|
128
|
+
const detail = lines.length ? ` ${lines.join(" | ")}` : "";
|
|
129
|
+
throw new Error(`SimSlim ${action} failed with exit code ${result?.code ?? "unknown"}.${detail}`);
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
managed: Boolean(profile),
|
|
133
|
+
profile: profile ?? null
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function simslimLaunchError(error) {
|
|
137
|
+
const cause = error;
|
|
138
|
+
if (cause?.code === "ENOENT") return new Error("SimSlim is configured but the `simslim` command is not installed. Run `brew install mobai-app/tap/simslim`.", { cause });
|
|
139
|
+
return new Error(`Could not start SimSlim: ${String(cause?.message || cause)}`, { cause });
|
|
140
|
+
}
|
|
141
|
+
function simslimIsOnPath() {
|
|
142
|
+
try {
|
|
143
|
+
return Boolean(getExecutor().findExecutable("simslim"));
|
|
144
|
+
} catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//#endregion
|
|
149
|
+
export { simslimIsOnPath as n, reconcileSimSlim as t };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { B as parseDeviceSlotKey, H as projectDeviceSlots, p as getProject } from "./config-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { E as getAvdNameForSerial, O as listAdbDevices } from "./android-
|
|
5
|
-
import { d as listAllIosSims } from "./ios-
|
|
6
|
-
import { f as deviceShellArg } from "./app-install-
|
|
1
|
+
import { B as parseDeviceSlotKey, H as projectDeviceSlots, p as getProject } from "./config-D0LhTY3S.mjs";
|
|
2
|
+
import { n as fileLeaseIo } from "./device-lease-DHOBXGgS.mjs";
|
|
3
|
+
import { r as readWorkspaceState$1 } from "./workspace-state-CSIFuuDa.mjs";
|
|
4
|
+
import { E as getAvdNameForSerial, O as listAdbDevices } from "./android-BsYNR81W.mjs";
|
|
5
|
+
import { d as listAllIosSims } from "./ios-CXLIUxXJ.mjs";
|
|
6
|
+
import { f as deviceShellArg } from "./app-install-0LgaQRT7.mjs";
|
|
7
7
|
import { hostedNativeRecords } from "@stim-cli/core/state";
|
|
8
8
|
//#region src/engine/slot-launch.ts
|
|
9
9
|
function launchSlotScope(root, slot = "default") {
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { t as getExecutor } from "./exec-
|
|
2
|
-
import { cpSync, existsSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
|
|
1
|
+
import { t as getExecutor } from "./exec-B81Qodjn.mjs";
|
|
2
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
|
|
3
3
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
4
|
import { validMacosResourceDestination } from "@stim-cli/core";
|
|
5
5
|
//#region src/macos/stage.ts
|
|
6
6
|
function validateInfoPlist(root, product, infoPlist) {
|
|
7
|
+
const source = resolve(root, infoPlist);
|
|
8
|
+
const inside = relative(realpathSync(root), realpathSync(source));
|
|
9
|
+
if (!lstatSync(source).isFile() || inside === ".." || inside.startsWith(`..${sep}`) || isAbsolute(inside)) throw new Error("macos.infoPlist must be a regular file inside the project, not a symbolic link. See stim guide macos.");
|
|
7
10
|
const plist = JSON.parse(getExecutor().runFile("plutil", [
|
|
8
11
|
"-convert",
|
|
9
12
|
"json",
|
|
10
13
|
"-o",
|
|
11
14
|
"-",
|
|
12
|
-
|
|
15
|
+
source
|
|
13
16
|
]));
|
|
14
17
|
if (typeof plist.CFBundleIdentifier !== "string" || plist.CFBundleExecutable !== product) throw new Error("macos.infoPlist must name a CFBundleIdentifier and the selected product as CFBundleExecutable.");
|
|
15
18
|
if (plist.CFBundleURLTypes || plist.SUFeedURL) throw new Error("Use a development Info.plist without shared URL schemes or an update feed.");
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as registerStart, c as startDevServer, d as supervisorSignalable, f as tailLines, i as readLogTail, l as startFacts, n as liveSupervisor, o as resolveWorkspaceMetroPort, p as wantsExpoOwnTunnel, r as parseWait, s as startCommand, t as failureEvidence, u as supervisorEntry } from "./start-CdvcTaXr.mjs";
|
|
2
|
+
export { startCommand as default, failureEvidence, liveSupervisor, parseWait, readLogTail, registerStart, resolveWorkspaceMetroPort, startDevServer, startFacts, supervisorEntry, supervisorSignalable, tailLines, wantsExpoOwnTunnel };
|