stim 1.32.0 → 1.34.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/dist/{acquire-artifact-CI9fIokp.mjs → acquire-artifact-B0SWoVNt.mjs} +2 -2
- package/dist/{act-BfChMxcU.mjs → act-7f7wIvCQ.mjs} +22 -22
- package/dist/{activity-yjH7Q3zn.mjs → activity-DkS-Ir6V.mjs} +6 -6
- package/dist/{agent-device-usage-output-DO412bsG.mjs → agent-device-usage-output-BVdgKbfz.mjs} +5 -5
- package/dist/{android-BeeC15Ve.mjs → android-B2DSKg-A.mjs} +2 -2
- package/dist/{android-D56S_GX3.mjs → android-BU4uBX8I.mjs} +5 -5
- package/dist/{android-BNm5A40S.mjs → android-D7qjT2fq.mjs} +87 -53
- package/dist/{android-DsEj2CCs.mjs → android-Iq0M2t2d.mjs} +27 -15
- package/dist/{android-cas-CbumHXIq.mjs → android-cas-Dhcjkys1.mjs} +4 -4
- package/dist/android-cas-compiler.mjs +1 -1
- package/dist/android-image-DFk26aY6.mjs +254 -0
- package/dist/{android-project-CCEQyYJK.d.mts → android-project-DhO6el8N.d.mts} +2 -2
- package/dist/api.d.mts +2 -1
- package/dist/api.mjs +28 -28
- package/dist/{apk-signed-tail-B9Usseps.mjs → apk-signed-tail-CPpA-3vu.mjs} +2 -2
- package/dist/{artifact-k1x9Jrn0.mjs → artifact-CNnTZs3R.mjs} +34 -21
- package/dist/{artifact-C8Nvp07y.mjs → artifact-DmRtKFXW.mjs} +13 -13
- package/dist/{artifact-platform-BO2Uvk_A.mjs → artifact-platform-DqCWUieN.mjs} +1 -1
- package/dist/{auto-placement--nfdQ9rp.mjs → auto-placement-DA65VQH7.mjs} +11 -9
- package/dist/{browser-web-6RDAeH0z.mjs → browser-web-Dn_hgKZC.mjs} +15 -15
- package/dist/{build-VXX_dtl5.mjs → build-D7SuVoRX.mjs} +23 -23
- package/dist/build-artifact-cache-D7B6seMj.mjs +174 -0
- package/dist/build-artifact-cache.d.mts +25 -0
- package/dist/build-artifact-cache.mjs +2 -0
- package/dist/{build-cache-BsKim4V7.mjs → build-cache-Cqj4FGnX.mjs} +20 -8
- package/dist/{build-plan-BK34X2iY.mjs → build-plan-Ct1FiA3E.mjs} +7 -7
- package/dist/{cache-manifest-CfiEny4T.mjs → cache-manifest-8JX9S1QJ.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{ccache-BrwGIxmV.mjs → ccache-ChBMXlBq.mjs} +35 -67
- package/dist/{cdp-C3svvXiE.mjs → cdp-C216kOAn.mjs} +1 -1
- package/dist/{chrome-DyDWurWG.mjs → chrome-C8sC5tdl.mjs} +1 -1
- package/dist/{cli-Jc7obreB.mjs → cli-DjdvQG5U.mjs} +20 -20
- package/dist/cli.mjs +1 -1
- package/dist/{client-lDmA-5jx.mjs → client-kU37gURU.mjs} +70 -13
- package/dist/collector-run.mjs +7 -7
- package/dist/{command-output-CfPW1bKP.mjs → command-output-DjExb_tZ.mjs} +1 -1
- package/dist/{config-D5qNWJEP.mjs → config-BW0fAtoK.mjs} +256 -246
- package/dist/{dependencies-DkZ8681S.mjs → dependencies-CZ7c8XX_.mjs} +39 -39
- package/dist/{dependency-state-DZVln1P9.mjs → dependency-state-mL5g4H6K.mjs} +2 -2
- package/dist/{detached-entry-BPlSaCwC.mjs → detached-entry-tfrgGVWb.mjs} +1 -1
- package/dist/{dev-client-eDZy6RoX.mjs → dev-client-D3wOllNd.mjs} +2 -2
- package/dist/{device-CeIikWac.mjs → device-CWPFAqs0.mjs} +13 -13
- package/dist/{device-CTozKhU0.mjs → device-DH5yf6TU.mjs} +11 -11
- package/dist/{device-android-zgD9We85.mjs → device-android-ChfF5I9A.mjs} +10 -10
- package/dist/{device-capacity-Bki6B-7h.mjs → device-capacity-CHC3dKWg.mjs} +9 -9
- package/dist/device-host-worker.mjs +58 -17
- package/dist/{device-ios-TE5ejeXx.mjs → device-ios-B3-Ah--R.mjs} +9 -9
- package/dist/{device-lease-run-DeNGjJZM.mjs → device-lease-run-i3FNX4OE.mjs} +5 -5
- package/dist/{device-pool-mjyUYaau.mjs → device-pool-EZziQ0uS.mjs} +3 -3
- package/dist/{device-provision-j_B7G0e6.mjs → device-provision-CfpEy-Vm.mjs} +10 -10
- package/dist/{doctor-sSLtn-j1.mjs → doctor-B5uEZiKp.mjs} +30 -17
- package/dist/{doctor-CNZuvTSe.mjs → doctor-CGBsS_68.mjs} +1 -1
- package/dist/{doctor-BlrcoQ7B.mjs → doctor-dwRboaXx.mjs} +54 -25
- package/dist/{doctor-fingerprint-o7ZI9YLn.mjs → doctor-fingerprint-DqWvIhMb.mjs} +1 -1
- package/dist/doctor-fingerprint.mjs +1 -1
- package/dist/{doctor-watchman-CCuboyj1.mjs → doctor-watchman-r7M9UPi0.mjs} +5 -5
- package/dist/{eas-build-CaG-Sfs9.mjs → eas-build-BpHIt_M3.mjs} +4 -4
- package/dist/{eas-fallback-BpX1lpco.mjs → eas-fallback-CNPcjq3K.mjs} +6 -6
- package/dist/{eas-session-ledger-B-nTfdfk.mjs → eas-session-ledger-CXwagcQ7.mjs} +6 -6
- package/dist/{error-diagnostics-q56Im4D8.mjs → error-diagnostics-Ym2mjmJ0.mjs} +10 -10
- package/dist/{exec-aULwtNly.mjs → exec-CGuDzt40.mjs} +103 -103
- package/dist/{gc-By2Kc-Ek.mjs → gc-B464w_a5.mjs} +2 -2
- package/dist/{gc-Dv6nb9nf.mjs → gc-C7YxKNci.mjs} +25 -54
- package/dist/{guide-CwpsGWTJ.mjs → guide-BFW-cB7R.mjs} +141 -44
- package/dist/{hosted-android-c5nPJA6S.mjs → hosted-android-B7yfqXEy.mjs} +4 -4
- package/dist/{hosted-client-Hs-fD4L3.mjs → hosted-client-CQuzZwAu.mjs} +6 -5
- package/dist/{hosted-logs-BteXG8rm.mjs → hosted-logs-DfYCqrrR.mjs} +7 -7
- package/dist/{hosted-logs-sync-B8bjLEMs.mjs → hosted-logs-sync-Dlpa2mQF.mjs} +5 -5
- package/dist/{hosted-macos-B4byscei.mjs → hosted-macos-JKefapEm.mjs} +6 -6
- package/dist/{hosted-native-Bh9IJ_t5.mjs → hosted-native-B7OFt5gB.mjs} +14 -10
- package/dist/{idle-shutdown-BaeCo4ps.mjs → idle-shutdown-DPD8oV36.mjs} +6 -6
- package/dist/{ios-CdAV4-1E.mjs → ios-BdZdNsAj.mjs} +6 -6
- package/dist/{ios-D3oK9-O4.mjs → ios-DSBs9c6d.mjs} +28 -28
- package/dist/{ios-CsRVik64.mjs → ios-Qam0bT9n.mjs} +1 -1
- package/dist/{ios-device-CiBA-er9.mjs → ios-device-DLdEDWJj.mjs} +1 -1
- package/dist/{ios-device-D7Gi3e1I.mjs → ios-device-Drplrgzo.mjs} +3 -3
- package/dist/{ios-project-DDQlX_jX.mjs → ios-project-DoTQYghg.mjs} +7 -7
- package/dist/{ios-D1XKSITX.mjs → ios-sUPbWqEh.mjs} +8 -8
- package/dist/ios-signing-R34vbrNU.mjs +202 -0
- package/dist/{ios-state-BEIJRJ7P.mjs → ios-state-CWsBysyN.mjs} +1 -1
- package/dist/{js-swap-C8N5DXHl.mjs → js-swap-DrokhOfo.mjs} +6 -6
- package/dist/{launch-DxpvL6il.mjs → launch-Cy-MWEZc.mjs} +20 -20
- package/dist/{lightened-Df6II_XI.mjs → lightened-ALwQcQtV.mjs} +5 -5
- package/dist/{logs-zv3ge7c6.mjs → logs-DWT7jGpF.mjs} +6 -6
- package/dist/{logs-CuWJWF88.mjs → logs-DuED-01Z.mjs} +7 -7
- package/dist/{macos-C6U-4Iip.mjs → macos-CtBtA_hW.mjs} +22 -22
- package/dist/{macos-CbRZheLw.mjs → macos-kWGcfLzx.mjs} +1 -1
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +6 -6
- package/dist/{metro-mKHEMO-a.mjs → metro-B5PVz0Wv.mjs} +4 -4
- package/dist/{metro-request-DODHNXCN.mjs → metro-request-2LmFpC1z.mjs} +2 -2
- package/dist/{named-ports-B0hCk2v-.mjs → named-ports-CA0nB9Yw.mjs} +3 -3
- package/dist/{native-android-9dVFqvTT.mjs → native-android-tISP2EVp.mjs} +29 -19
- package/dist/{native-gradle-artifact-inputs-BlY97pt8.mjs → native-gradle-artifact-inputs-DVoeZkrw.mjs} +5 -5
- package/dist/{native-runtime-DQfxW5Au.mjs → native-runtime-CNgxeOCG.mjs} +6 -6
- package/dist/{native-source-D1AzWiuP.mjs → native-source-ChAGj7R1.mjs} +1 -1
- package/dist/{native-xcode-inputs-tDuUvSU8.mjs → native-xcode-inputs-DGzkhpu4.mjs} +3 -3
- package/dist/{native-xcode-ios-CG-PD-7g.mjs → native-xcode-ios-B9nsfId2.mjs} +17 -17
- package/dist/offload-worker.d.mts +8 -1
- package/dist/offload-worker.mjs +62 -23
- package/dist/{operation-exec-Dp4FuIGR.mjs → operation-exec-DKlBcKAL.mjs} +1 -1
- package/dist/{ownership-CCfiBfOP.mjs → ownership-hC7xvvxF.mjs} +3 -3
- package/dist/{page-CQJlcj3x.mjs → page-Dj8IqvGM.mjs} +2 -2
- package/dist/{phone-reverses-CnNwdz9A.mjs → phone-reverses-Bo0EzJ-P.mjs} +4 -4
- package/dist/{placement-log-CRL0IY-k.mjs → placement-log-BsGvKLtU.mjs} +1 -1
- package/dist/{plan-placement-2imvnlWP.mjs → plan-placement-Am0IjuxB.mjs} +6 -6
- package/dist/{ports-CKktj5lV.mjs → ports-CNzg1LYD.mjs} +3 -3
- package/dist/{prebuild-CyNrUWgV.mjs → prebuild-BfJII57G.mjs} +12 -12
- package/dist/{project-Crtcbfl0.mjs → project-DU3jjnBE.mjs} +16 -16
- package/dist/{pull-request-BzLmzAIQ.mjs → pull-request-BpMTNkMB.mjs} +2 -2
- package/dist/pull-requests.mjs +1 -1
- package/dist/{react-native-android-Cabe2YER.mjs → react-native-android-3dZiJv-4.mjs} +37 -33
- package/dist/{react-native-build-DhWBUV_H.mjs → react-native-build-CuvNPt-q.mjs} +10 -10
- package/dist/{react-native-doctor-D-twmBon.mjs → react-native-doctor-a35BwMUO.mjs} +6 -6
- package/dist/{react-native-ios-u_ley41B.mjs → react-native-ios-CqnReM1t.mjs} +22 -17
- package/dist/{recordings-BWnIlhZH.mjs → recordings-AKZfsW2W.mjs} +1 -1
- package/dist/{registration-BwCe64PH.mjs → registration-DKjJGQ6p.mjs} +1 -1
- package/dist/{reload-D2TpUlns.mjs → reload-CC3sNo10.mjs} +17 -17
- package/dist/{reload-f9hvEHE9.mjs → reload-YPnvXGlB.mjs} +1 -1
- package/dist/{remote-BsBAjlD2.mjs → remote-BfaIHnhM.mjs} +9 -9
- package/dist/{result-EOsWV6sp.mjs → result-H-AxY7Ud.mjs} +24 -20
- package/dist/{run-2CHAJ9Oj.mjs → run-N-BbRxnC.mjs} +2 -2
- package/dist/{selection-C4ZQz_ER.mjs → selection-CH-MUVGD.mjs} +5 -4
- package/dist/{server-bare-CFyVFZXJ.mjs → server-bare-BTlICuaX.mjs} +2 -2
- package/dist/{server-command-BMyKtnjH.mjs → server-command-Bn_gOObU.mjs} +5 -5
- package/dist/server-expo-B59N16uT.mjs +2 -0
- package/dist/{server-expo-BLxcN2x2.mjs → server-expo-CUJ2fuv1.mjs} +3 -3
- package/dist/{settings-C6UTYW2K.mjs → settings-B5IBDfTx.mjs} +4 -4
- package/dist/{settings-jeS0WmUF.mjs → settings-DoWHJopy.mjs} +2 -2
- package/dist/{settings-payload-CrX933Xi.mjs → settings-payload-Bxw3hid5.mjs} +5 -5
- package/dist/{settings-write-DMcT23Kl.mjs → settings-write-C6d7EC54.mjs} +6 -6
- package/dist/settings.schema.json +38 -0
- package/dist/{simslim-93xmPh-d.mjs → simslim-DKdJx0LL.mjs} +2 -2
- package/dist/{slot-launch-CSpQcFZw.mjs → slot-launch-kq0-7w9C.mjs} +6 -6
- package/dist/{stage-Cf9uSM1a.mjs → stage-CBfMTUK3.mjs} +2 -2
- package/dist/{start-CquYgzVf.mjs → start-Diu8q6_U.mjs} +1 -1
- package/dist/{start-CLN_r9EG.mjs → start-WTMumMHi.mjs} +12 -12
- package/dist/{state-CM_HvvkS.mjs → state-CtmYTRWm.mjs} +4 -4
- package/dist/{state-CiflgxTP.mjs → state-DSOUqO-o.mjs} +2 -2
- package/dist/{stats-BVEZuSlg.mjs → stats-D4cW247z.mjs} +5 -5
- package/dist/{stats-report-B86Cv7Uc.mjs → stats-report-BVRCqwWA.mjs} +1 -1
- package/dist/{status-Bhdy07v0.mjs → status-B-oeWS0Z.mjs} +1 -1
- package/dist/{status-D0ruTmPl.mjs → status-CEwxo-PS.mjs} +37 -28
- package/dist/{status-GQ-JqvRi.mjs → status-DTFhDnd1.mjs} +1 -1
- package/dist/{status-watch-DSu_hhg6.mjs → status-watch-D63R5nSI.mjs} +5 -5
- package/dist/status-worker.mjs +1 -1
- package/dist/{stim-desktop-1XxET4S8.mjs → stim-desktop-_WTria-r.mjs} +2 -2
- package/dist/{stop-RZqER_Ww.mjs → stop-Dm9ON6Os.mjs} +2 -2
- package/dist/{stop-B616ZyTv.mjs → stop-HL2RvhrE.mjs} +5 -5
- package/dist/{stop-W4DK8qZq.mjs → stop-vX4w3_8V.mjs} +16 -16
- package/dist/supervisor-run.mjs +16 -16
- package/dist/{support-S_5nkkzs.mjs → support-BNe1_Hg7.mjs} +18 -8
- package/dist/{support-NxnD8QXd.mjs → support-ivsfDj0v.mjs} +9 -9
- package/dist/{swiftpm-artifact-inputs-yp8D5LE4.mjs → swiftpm-artifact-inputs-uq5oV7xR.mjs} +4 -4
- package/dist/{swiftpm-macos-Gtq9bNQb.mjs → swiftpm-macos-ClF203_2.mjs} +11 -11
- package/dist/{toolchain-B2bN8jEo.mjs → toolchain-CECahBDa.mjs} +1 -1
- package/dist/{toolchain-Bnm8vUCV.mjs → toolchain-CYonNjd_.mjs} +429 -20
- package/dist/{trigger-CfnOfpDd.mjs → trigger-BtB4kbe0.mjs} +2 -2
- package/dist/trigger-D8B7QR0q.mjs +2 -0
- package/dist/{warm-progress-_aTMvkIH.mjs → warm-progress-q11Vdvhh.mjs} +6 -6
- package/dist/{web-BdWG8b5_.mjs → web-BdaMBr2O.mjs} +9 -9
- package/dist/web-CIpHpGp8.mjs +2 -0
- package/dist/web-run.mjs +8 -8
- package/dist/windows-report.mjs +1 -1
- package/dist/{workspace-state-3bF4TB8P.mjs → workspace-state-BdZ-QgmB.mjs} +3 -3
- package/dist/{workspaces-C59v9bpD.mjs → workspaces-B9v5V7Es.mjs} +14 -14
- package/dist/{worktree-CinoSsGy.mjs → worktree-C3N86KpI.mjs} +77 -31
- package/dist/{worktree-K9F50fD_.mjs → worktree-C4MBOMz7.mjs} +1 -1
- package/package.json +12 -7
- package/dist/ios-signing-BJzvDPfU.mjs +0 -489
- package/dist/server-expo-DwR3eD-a.mjs +0 -2
- package/dist/trigger-DBZ-GBrl.mjs +0 -2
- package/dist/web-DwuluWJt.mjs +0 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { E as workspaceDir, T as workspaceDerivedData, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-
|
|
1
|
+
import { C as operationState, D as ownership_claim_exports, S as isTermination, _ as declareSpawnsOn, b as spawnDeclared, g as allowDeclaredSpawns, p as withWorkspaceProcessLock, t as getExecutor, v as refuseDeclaredSpawns, x as stopDeclaringSpawnsOn, y as signalDeclaredSpawns } from "./exec-CGuDzt40.mjs";
|
|
2
|
+
import { E as workspaceDir, T as workspaceDerivedData, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-BdZ-QgmB.mjs";
|
|
3
3
|
import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
4
|
-
import { a as formatElapsed, l as phaseLine } from "./command-output-
|
|
5
|
-
import { a as killOnAbort } from "./operation-exec-
|
|
6
|
-
import { o as androidHome } from "./android-
|
|
4
|
+
import { a as formatElapsed, l as phaseLine } from "./command-output-DjExb_tZ.mjs";
|
|
5
|
+
import { a as killOnAbort } from "./operation-exec-DKlBcKAL.mjs";
|
|
6
|
+
import { o as androidHome } from "./android-Iq0M2t2d.mjs";
|
|
7
7
|
import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
|
|
8
8
|
import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
|
|
9
|
-
import { t as cleanLine } from "./server-expo-
|
|
9
|
+
import { t as cleanLine } from "./server-expo-CUJ2fuv1.mjs";
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
|
-
import { createHash } from "node:crypto";
|
|
11
|
+
import { X509Certificate, createHash } from "node:crypto";
|
|
12
12
|
import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { homedir, tmpdir } from "node:os";
|
|
14
14
|
import { basename, delimiter, dirname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
|
|
@@ -283,6 +283,403 @@ function withNativeBuildRun(context, root, details, fn, { write }) {
|
|
|
283
283
|
});
|
|
284
284
|
}
|
|
285
285
|
//#endregion
|
|
286
|
+
//#region src/engine/ios-profile.ts
|
|
287
|
+
const TAG = /<(\/?)\s*([A-Za-z0-9_]+)(?:\s[^>]*?)?(\/?)>/g;
|
|
288
|
+
const ENTITIES = {
|
|
289
|
+
amp: "&",
|
|
290
|
+
lt: "<",
|
|
291
|
+
gt: ">",
|
|
292
|
+
quot: "\"",
|
|
293
|
+
apos: "'"
|
|
294
|
+
};
|
|
295
|
+
var PlistError = class extends Error {};
|
|
296
|
+
function codePoint(value) {
|
|
297
|
+
if (!Number.isInteger(value) || value < 0 || value > 1114111 || value >= 55296 && value <= 57343) throw new PlistError(`character reference out of range: ${value}`);
|
|
298
|
+
return String.fromCodePoint(value);
|
|
299
|
+
}
|
|
300
|
+
function decodeEntities(raw) {
|
|
301
|
+
return raw.replace(/&(#x?[0-9A-Fa-f]+|[a-z]+);/g, (match, body) => {
|
|
302
|
+
if (body.startsWith("#x") || body.startsWith("#X")) return codePoint(Number.parseInt(body.slice(2), 16));
|
|
303
|
+
if (body.startsWith("#")) return codePoint(Number.parseInt(body.slice(1), 10));
|
|
304
|
+
return ENTITIES[body] ?? match;
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
function peekTag(cursor) {
|
|
308
|
+
TAG.lastIndex = cursor.pos;
|
|
309
|
+
const match = TAG.exec(cursor.xml);
|
|
310
|
+
if (!match) return null;
|
|
311
|
+
return {
|
|
312
|
+
name: (match[2] ?? "").toLowerCase(),
|
|
313
|
+
closing: match[1] === "/",
|
|
314
|
+
selfClosing: match[3] === "/",
|
|
315
|
+
end: TAG.lastIndex
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
function takeTag(cursor) {
|
|
319
|
+
const tag = peekTag(cursor);
|
|
320
|
+
if (tag) cursor.pos = tag.end;
|
|
321
|
+
return tag;
|
|
322
|
+
}
|
|
323
|
+
function takeText(cursor, name) {
|
|
324
|
+
const close = cursor.xml.indexOf(`</${name}>`, cursor.pos);
|
|
325
|
+
if (close < 0) {
|
|
326
|
+
cursor.pos = cursor.xml.length;
|
|
327
|
+
return "";
|
|
328
|
+
}
|
|
329
|
+
const raw = cursor.xml.slice(cursor.pos, close);
|
|
330
|
+
cursor.pos = close + name.length + 3;
|
|
331
|
+
return raw;
|
|
332
|
+
}
|
|
333
|
+
function parseValue(cursor) {
|
|
334
|
+
const peeked = peekTag(cursor);
|
|
335
|
+
if (!peeked || peeked.closing) return void 0;
|
|
336
|
+
const tag = takeTag(cursor);
|
|
337
|
+
if (tag.selfClosing) {
|
|
338
|
+
if (tag.name === "true") return true;
|
|
339
|
+
if (tag.name === "false") return false;
|
|
340
|
+
if (tag.name === "array") return [];
|
|
341
|
+
if (tag.name === "dict") return {};
|
|
342
|
+
return "";
|
|
343
|
+
}
|
|
344
|
+
switch (tag.name) {
|
|
345
|
+
case "plist": return parseValue(cursor);
|
|
346
|
+
case "dict": {
|
|
347
|
+
const out = {};
|
|
348
|
+
for (;;) {
|
|
349
|
+
const next = peekTag(cursor);
|
|
350
|
+
if (!next) break;
|
|
351
|
+
if (next.closing) {
|
|
352
|
+
cursor.pos = next.end;
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
cursor.pos = next.end;
|
|
356
|
+
if (next.name !== "key") continue;
|
|
357
|
+
const key = decodeEntities(next.selfClosing ? "" : takeText(cursor, "key"));
|
|
358
|
+
const value = parseValue(cursor);
|
|
359
|
+
if (value !== void 0) out[key] = value;
|
|
360
|
+
}
|
|
361
|
+
return out;
|
|
362
|
+
}
|
|
363
|
+
case "array": {
|
|
364
|
+
const out = [];
|
|
365
|
+
for (;;) {
|
|
366
|
+
const next = peekTag(cursor);
|
|
367
|
+
if (!next) break;
|
|
368
|
+
if (next.closing) {
|
|
369
|
+
cursor.pos = next.end;
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
const value = parseValue(cursor);
|
|
373
|
+
if (value === void 0) break;
|
|
374
|
+
out.push(value);
|
|
375
|
+
}
|
|
376
|
+
return out;
|
|
377
|
+
}
|
|
378
|
+
case "string":
|
|
379
|
+
case "key": return decodeEntities(takeText(cursor, tag.name));
|
|
380
|
+
case "integer": return Number.parseInt(takeText(cursor, "integer").trim(), 10);
|
|
381
|
+
case "real": return Number.parseFloat(takeText(cursor, "real").trim());
|
|
382
|
+
case "date": return new Date(takeText(cursor, "date").trim());
|
|
383
|
+
case "data": return Buffer.from(takeText(cursor, "data").replace(/\s+/g, ""), "base64");
|
|
384
|
+
case "true":
|
|
385
|
+
takeText(cursor, "true");
|
|
386
|
+
return true;
|
|
387
|
+
case "false":
|
|
388
|
+
takeText(cursor, "false");
|
|
389
|
+
return false;
|
|
390
|
+
default:
|
|
391
|
+
takeText(cursor, tag.name);
|
|
392
|
+
return "";
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
function parsePlist(xml) {
|
|
396
|
+
if (typeof xml !== "string" || xml.trim() === "") return null;
|
|
397
|
+
const stripped = xml.replace(/<!--[\s\S]*?-->/g, "");
|
|
398
|
+
const start = stripped.indexOf("<plist");
|
|
399
|
+
const cursor = {
|
|
400
|
+
xml: stripped,
|
|
401
|
+
pos: start < 0 ? 0 : start
|
|
402
|
+
};
|
|
403
|
+
try {
|
|
404
|
+
const value = parseValue(cursor);
|
|
405
|
+
return value === void 0 ? null : value;
|
|
406
|
+
} catch {
|
|
407
|
+
return null;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
function isDict(value) {
|
|
411
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) && !Buffer.isBuffer(value) && !(value instanceof Date);
|
|
412
|
+
}
|
|
413
|
+
function stringsOf(value) {
|
|
414
|
+
if (!Array.isArray(value)) return null;
|
|
415
|
+
return value.filter((v) => typeof v === "string");
|
|
416
|
+
}
|
|
417
|
+
function parseProvisioningProfilePlist(xml) {
|
|
418
|
+
const root = parsePlist(xml);
|
|
419
|
+
if (!isDict(root)) return null;
|
|
420
|
+
const entitlements = isDict(root.Entitlements ?? null) ? root.Entitlements : {};
|
|
421
|
+
const teamIdentifier = stringsOf(root.TeamIdentifier);
|
|
422
|
+
const expiration = root.ExpirationDate;
|
|
423
|
+
const certificates = Array.isArray(root.DeveloperCertificates) ? root.DeveloperCertificates.filter((v) => Buffer.isBuffer(v)) : [];
|
|
424
|
+
return {
|
|
425
|
+
name: typeof root.Name === "string" ? root.Name : null,
|
|
426
|
+
uuid: typeof root.UUID === "string" ? root.UUID : null,
|
|
427
|
+
teamIdentifier: teamIdentifier?.[0] ?? null,
|
|
428
|
+
expirationDate: expiration instanceof Date && !Number.isNaN(expiration.getTime()) ? expiration : null,
|
|
429
|
+
provisionedDevices: stringsOf(root.ProvisionedDevices),
|
|
430
|
+
provisionsAllDevices: root.ProvisionsAllDevices === true,
|
|
431
|
+
getTaskAllow: entitlements["get-task-allow"] === true,
|
|
432
|
+
certificates
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
function provisioningProfileKind(profile) {
|
|
436
|
+
if (profile.provisionedDevices) return profile.getTaskAllow ? "development" : "ad hoc";
|
|
437
|
+
return profile.provisionsAllDevices ? "enterprise" : "App Store";
|
|
438
|
+
}
|
|
439
|
+
function certificateCommonName(der) {
|
|
440
|
+
if (!Buffer.isBuffer(der) || der.length === 0) return null;
|
|
441
|
+
let subject;
|
|
442
|
+
try {
|
|
443
|
+
subject = new X509Certificate(der).subject;
|
|
444
|
+
} catch {
|
|
445
|
+
return null;
|
|
446
|
+
}
|
|
447
|
+
for (const part of String(subject).split(/\r?\n/)) {
|
|
448
|
+
const trimmed = part.trim();
|
|
449
|
+
if (trimmed.startsWith("CN=")) return trimmed.slice(3).trim() || null;
|
|
450
|
+
}
|
|
451
|
+
return /(?:^|,)\s*CN=([^,]+)/.exec(String(subject))?.[1]?.trim() || null;
|
|
452
|
+
}
|
|
453
|
+
const IDENTITY_LINE = /^\s*\d+\)\s+([0-9A-Fa-f]{40})\s+"(.+)"\s*$/;
|
|
454
|
+
function parseSigningIdentities(text) {
|
|
455
|
+
if (typeof text !== "string") return [];
|
|
456
|
+
const out = [];
|
|
457
|
+
for (const line of text.split(/\r?\n/)) {
|
|
458
|
+
const match = IDENTITY_LINE.exec(line);
|
|
459
|
+
if (!match) continue;
|
|
460
|
+
out.push({
|
|
461
|
+
sha1: match[1].toUpperCase(),
|
|
462
|
+
name: match[2]
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
return out;
|
|
466
|
+
}
|
|
467
|
+
const SIGNING_CODES = {
|
|
468
|
+
noProfile: "STIM_NO_PROFILE",
|
|
469
|
+
profileMismatch: "STIM_PROFILE_MISMATCH",
|
|
470
|
+
noIdentity: "STIM_NO_SIGNING_IDENTITY",
|
|
471
|
+
codesignFailed: "STIM_CODESIGN_FAILED"
|
|
472
|
+
};
|
|
473
|
+
const XCODE_STEP = "run `stim device provision ios`, which asks before it registers the device or creates the profile (agents run it only with the user's go-ahead), or build once from Xcode to install it. A build never does this, because registering a device or minting a profile changes your Apple Developer account.";
|
|
474
|
+
const KEYCHAIN_REMEDY = "Open Xcode > Settings > Accounts and download your certificates, or unlock the login keychain with `security unlock-keychain`. `security find-identity -v -p codesigning` should list `Apple Development: ...`.";
|
|
475
|
+
function signingConfiguration(input) {
|
|
476
|
+
return input.configuration ?? "Debug";
|
|
477
|
+
}
|
|
478
|
+
function profileGate(input) {
|
|
479
|
+
const now = input.now ?? Date.now();
|
|
480
|
+
if (!input.profilePresent) return {
|
|
481
|
+
ok: false,
|
|
482
|
+
code: SIGNING_CODES.noProfile,
|
|
483
|
+
reason: "The app bundle has no embedded.mobileprovision, so it was built unsigned or for the simulator.",
|
|
484
|
+
remedy: `Set a team and profile for the target's ${signingConfiguration(input)} configuration in Xcode > Signing & Capabilities, then ${XCODE_STEP}`
|
|
485
|
+
};
|
|
486
|
+
if (!input.profile) return {
|
|
487
|
+
ok: false,
|
|
488
|
+
code: SIGNING_CODES.noProfile,
|
|
489
|
+
reason: "`openssl smime` could not decode the app bundle's embedded.mobileprovision.",
|
|
490
|
+
remedy: `The profile inside the app is corrupt. Delete the build cache entry with \`stim gc --delete\`, then ${XCODE_STEP}`
|
|
491
|
+
};
|
|
492
|
+
const profile = input.profile;
|
|
493
|
+
const named = profile.name ? `"${profile.name}"` : "the embedded profile";
|
|
494
|
+
if (!profile.expirationDate || profile.expirationDate.getTime() <= now) return {
|
|
495
|
+
ok: false,
|
|
496
|
+
code: SIGNING_CODES.profileMismatch,
|
|
497
|
+
reason: profile.expirationDate ? `The ${provisioningProfileKind(profile)} profile ${named} expired on ${profile.expirationDate.toISOString()}.` : `The ${provisioningProfileKind(profile)} profile ${named} carries no ExpirationDate, so Stim cannot prove it is still valid.`,
|
|
498
|
+
remedy: `Renew the profile under Signing & Capabilities, then ${XCODE_STEP}`
|
|
499
|
+
};
|
|
500
|
+
if (!profile.provisionedDevices) {
|
|
501
|
+
const kind = provisioningProfileKind(profile);
|
|
502
|
+
return {
|
|
503
|
+
ok: false,
|
|
504
|
+
code: SIGNING_CODES.profileMismatch,
|
|
505
|
+
reason: `${named} is an ${kind} profile, which carries no ProvisionedDevices list, so Stim cannot prove ${input.udid ?? "the target device"} is admitted.`,
|
|
506
|
+
remedy: `Local device runs need a development profile. Select one under Signing & Capabilities, then ${XCODE_STEP}`
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
const udid = input.udid;
|
|
510
|
+
if (!udid || !profile.provisionedDevices.some((d) => d.toLowerCase() === udid.toLowerCase())) return {
|
|
511
|
+
ok: false,
|
|
512
|
+
code: SIGNING_CODES.profileMismatch,
|
|
513
|
+
reason: `The ${provisioningProfileKind(profile)} profile ${named} lists ${profile.provisionedDevices.length} device(s) and ${udid ?? "the target device"} is not one of them.`,
|
|
514
|
+
remedy: `Run \`stim device provision ios${udid ? ` ${udid}` : ""}\`, which asks before it registers the device and refreshes the profile (agents run it only with the user's go-ahead), or register it at developer.apple.com, regenerate the profile and build once from Xcode. A build never does this, because registering a device or minting a profile changes your Apple Developer account.`
|
|
515
|
+
};
|
|
516
|
+
return {
|
|
517
|
+
ok: true,
|
|
518
|
+
profile
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
function signingGate(input) {
|
|
522
|
+
const gated = profileGate(input);
|
|
523
|
+
if (!gated.ok) return gated;
|
|
524
|
+
const profile = gated.profile;
|
|
525
|
+
const named = profile.name ? `"${profile.name}"` : "the embedded profile";
|
|
526
|
+
const identities = Array.isArray(input.identities) ? input.identities : [];
|
|
527
|
+
if (identities.length === 0) return {
|
|
528
|
+
ok: false,
|
|
529
|
+
code: SIGNING_CODES.noIdentity,
|
|
530
|
+
reason: "`security find-identity -v -p codesigning` lists no codesigning identity on this machine.",
|
|
531
|
+
remedy: KEYCHAIN_REMEDY
|
|
532
|
+
};
|
|
533
|
+
if (input.pinnedSha1) {
|
|
534
|
+
const wanted = input.pinnedSha1.trim().toUpperCase();
|
|
535
|
+
const match = identities.find((i) => i.sha1 === wanted);
|
|
536
|
+
if (match) return {
|
|
537
|
+
ok: true,
|
|
538
|
+
identity: match
|
|
539
|
+
};
|
|
540
|
+
return {
|
|
541
|
+
ok: false,
|
|
542
|
+
code: SIGNING_CODES.noIdentity,
|
|
543
|
+
reason: `ios.signingIdentitySha1 is ${wanted}, which is not in the keychain. Available: ${identities.map((i) => `${i.sha1} "${i.name}"`).join(", ")}.`,
|
|
544
|
+
remedy: KEYCHAIN_REMEDY
|
|
545
|
+
};
|
|
546
|
+
}
|
|
547
|
+
const wantedName = input.pinnedName?.trim() || certificateCommonName(profile.certificates[0] ?? null);
|
|
548
|
+
if (!wantedName) return {
|
|
549
|
+
ok: false,
|
|
550
|
+
code: SIGNING_CODES.noIdentity,
|
|
551
|
+
reason: `Stim could not read a signing-identity name out of ${named}: its DeveloperCertificates entry has no readable subject CN.`,
|
|
552
|
+
remedy: "Set ios.signingIdentity in .stim.json to the identity name to re-sign with, or ios.signingIdentitySha1 to its SHA-1 hash."
|
|
553
|
+
};
|
|
554
|
+
const matches = identities.filter((i) => i.name === wantedName);
|
|
555
|
+
if (matches.length === 1) return {
|
|
556
|
+
ok: true,
|
|
557
|
+
identity: matches[0]
|
|
558
|
+
};
|
|
559
|
+
if (matches.length === 0) return {
|
|
560
|
+
ok: false,
|
|
561
|
+
code: SIGNING_CODES.noIdentity,
|
|
562
|
+
reason: `The app was signed by "${wantedName}", which is not in this machine's keychain. Available: ${identities.map((i) => `"${i.name}"`).join(", ")}.`,
|
|
563
|
+
remedy: `${KEYCHAIN_REMEDY} Or set ios.signingIdentity in .stim.json to one of the identities listed above.`
|
|
564
|
+
};
|
|
565
|
+
return {
|
|
566
|
+
ok: false,
|
|
567
|
+
code: SIGNING_CODES.noIdentity,
|
|
568
|
+
reason: `${matches.length} keychain identities share the name "${wantedName}", so Stim cannot pick one: ${matches.map((i) => i.sha1).join(", ")}.`,
|
|
569
|
+
remedy: "Set ios.signingIdentitySha1 in .stim.json to the SHA-1 hash of the certificate to sign with."
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
//#endregion
|
|
573
|
+
//#region src/engine/app-schemes.ts
|
|
574
|
+
function schemesFromInfoPlist(plist) {
|
|
575
|
+
const types = plist?.CFBundleURLTypes;
|
|
576
|
+
if (!Array.isArray(types)) return [];
|
|
577
|
+
const out = [];
|
|
578
|
+
for (const type of types) {
|
|
579
|
+
const schemes = type?.CFBundleURLSchemes;
|
|
580
|
+
if (Array.isArray(schemes)) out.push(...schemes.filter((s) => typeof s === "string" && s.trim() !== ""));
|
|
581
|
+
}
|
|
582
|
+
return out;
|
|
583
|
+
}
|
|
584
|
+
function readBundleSchemes(appPath, { exec = null } = {}) {
|
|
585
|
+
if (typeof appPath !== "string" || appPath.trim() === "") return [];
|
|
586
|
+
const e = exec || getExecutor();
|
|
587
|
+
const file = join(appPath, "Info.plist");
|
|
588
|
+
try {
|
|
589
|
+
return schemesFromInfoPlist(JSON.parse(String(e.runFile("plutil", [
|
|
590
|
+
"-convert",
|
|
591
|
+
"json",
|
|
592
|
+
"-o",
|
|
593
|
+
"-",
|
|
594
|
+
file
|
|
595
|
+
], { timeoutMs: 1e4 }))));
|
|
596
|
+
} catch {
|
|
597
|
+
return schemesFromInfoPlist(readPlistFile(file));
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
const APPLE_EPOCH_SECONDS = 978307200;
|
|
601
|
+
function readPlistFile(file) {
|
|
602
|
+
try {
|
|
603
|
+
const data = readFileSync(file);
|
|
604
|
+
return data.subarray(0, 8).toString("latin1") === "bplist00" ? parseBinaryPlist(data) : parsePlist(data.toString("utf8"));
|
|
605
|
+
} catch {
|
|
606
|
+
return null;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
function parseBinaryPlist(data) {
|
|
610
|
+
const trailer = data.subarray(data.length - 32);
|
|
611
|
+
if (trailer.length !== 32) throw new Error("truncated binary plist");
|
|
612
|
+
const offsetSize = trailer.readUInt8(6);
|
|
613
|
+
const refSize = trailer.readUInt8(7);
|
|
614
|
+
const count = Number(trailer.readBigUInt64BE(8));
|
|
615
|
+
const top = Number(trailer.readBigUInt64BE(16));
|
|
616
|
+
const table = Number(trailer.readBigUInt64BE(24));
|
|
617
|
+
const span = (at, size) => {
|
|
618
|
+
if (at < 0 || size < 0 || at + size > data.length) throw new Error("binary plist offset out of range");
|
|
619
|
+
return data.subarray(at, at + size);
|
|
620
|
+
};
|
|
621
|
+
const uint = (at, size) => span(at, size).reduce((value, byte) => value * 256 + byte, 0);
|
|
622
|
+
const read = (ref) => {
|
|
623
|
+
if (ref >= count) throw new Error("binary plist reference out of range");
|
|
624
|
+
let at = uint(table + ref * offsetSize, offsetSize);
|
|
625
|
+
const marker = span(at++, 1).readUInt8();
|
|
626
|
+
const info = marker & 15;
|
|
627
|
+
const length = () => {
|
|
628
|
+
if (info !== 15) return info;
|
|
629
|
+
const size = 1 << (span(at, 1).readUInt8() & 15);
|
|
630
|
+
const value = uint(at + 1, size);
|
|
631
|
+
at += 1 + size;
|
|
632
|
+
return value;
|
|
633
|
+
};
|
|
634
|
+
switch (marker >> 4) {
|
|
635
|
+
case 0: return marker === 9;
|
|
636
|
+
case 1: {
|
|
637
|
+
const size = 1 << info;
|
|
638
|
+
return size === 8 ? Number(span(at, 8).readBigInt64BE()) : uint(at, size);
|
|
639
|
+
}
|
|
640
|
+
case 2: return info === 2 ? span(at, 4).readFloatBE() : span(at, 8).readDoubleBE();
|
|
641
|
+
case 3: return /* @__PURE__ */ new Date((APPLE_EPOCH_SECONDS + span(at, 8).readDoubleBE()) * 1e3);
|
|
642
|
+
case 4: {
|
|
643
|
+
const size = length();
|
|
644
|
+
return Buffer.from(span(at, size));
|
|
645
|
+
}
|
|
646
|
+
case 5: {
|
|
647
|
+
const size = length();
|
|
648
|
+
return span(at, size).toString("latin1");
|
|
649
|
+
}
|
|
650
|
+
case 6: {
|
|
651
|
+
const size = length() * 2;
|
|
652
|
+
return Buffer.from(span(at, size)).swap16().toString("utf16le");
|
|
653
|
+
}
|
|
654
|
+
case 10: {
|
|
655
|
+
const size = length();
|
|
656
|
+
return Array.from({ length: size }, (_, i) => read(uint(at + i * refSize, refSize)));
|
|
657
|
+
}
|
|
658
|
+
case 13: {
|
|
659
|
+
const size = length();
|
|
660
|
+
const dict = {};
|
|
661
|
+
for (let i = 0; i < size; i++) {
|
|
662
|
+
const key = read(uint(at + i * refSize, refSize));
|
|
663
|
+
if (typeof key !== "string") throw new Error("binary plist dictionary key is not a string");
|
|
664
|
+
dict[key] = read(uint(at + (size + i) * refSize, refSize));
|
|
665
|
+
}
|
|
666
|
+
return dict;
|
|
667
|
+
}
|
|
668
|
+
default: throw new Error(`unsupported binary plist object type ${marker.toString(16)}`);
|
|
669
|
+
}
|
|
670
|
+
};
|
|
671
|
+
return read(top);
|
|
672
|
+
}
|
|
673
|
+
const THIRD_PARTY_SCHEME = /^(?:fb\d+|com\.googleusercontent\.apps\.|msauth\.|msauthv2|twitterkit-|db-[a-z0-9]+$|spotify|snapchat|com\.facebook)/i;
|
|
674
|
+
function approvableSchemes(schemes) {
|
|
675
|
+
return (Array.isArray(schemes) ? schemes : []).filter((s) => typeof s === "string" && s.trim() !== "").map((s) => s.trim()).filter((s) => !/^(?:https?|mailto|tel|sms|itms(?:-apps)?)$/i.test(s) && !THIRD_PARTY_SCHEME.test(s));
|
|
676
|
+
}
|
|
677
|
+
function pickDevClientScheme(schemes) {
|
|
678
|
+
const all = approvableSchemes(schemes);
|
|
679
|
+
const expo = all.filter((s) => s.startsWith("exp+"));
|
|
680
|
+
return (expo.length ? expo : all).toSorted((a, b) => b.length - a.length)[0] ?? null;
|
|
681
|
+
}
|
|
682
|
+
//#endregion
|
|
286
683
|
//#region src/engine/bundler.ts
|
|
287
684
|
const COCOAPODS_SPEC = /^ {4}cocoapods \(([^)\s]+)/m;
|
|
288
685
|
/**
|
|
@@ -720,10 +1117,11 @@ async function readBundleId(appPath, { exec = null } = {}) {
|
|
|
720
1117
|
"CFBundleIdentifier"
|
|
721
1118
|
], { timeoutMs: 1e4 });
|
|
722
1119
|
const trimmed = String(value).trim();
|
|
723
|
-
|
|
724
|
-
} catch {
|
|
725
|
-
|
|
726
|
-
|
|
1120
|
+
if (trimmed !== "") return trimmed;
|
|
1121
|
+
} catch {}
|
|
1122
|
+
const plist = readPlistFile(join(appPath, "Info.plist"));
|
|
1123
|
+
const id = typeof plist === "object" && plist !== null && "CFBundleIdentifier" in plist ? plist.CFBundleIdentifier : null;
|
|
1124
|
+
return typeof id === "string" && id.trim() !== "" ? id.trim() : null;
|
|
727
1125
|
}
|
|
728
1126
|
function parseBundleExecutable(plistJson) {
|
|
729
1127
|
if (typeof plistJson !== "string") return null;
|
|
@@ -2195,10 +2593,16 @@ function jdkInstall(major, os) {
|
|
|
2195
2593
|
}
|
|
2196
2594
|
function androidMismatches(local, requires, worker) {
|
|
2197
2595
|
const out = [];
|
|
2198
|
-
if (
|
|
2596
|
+
if (!local.jdk) {
|
|
2597
|
+
if (!worker.jdk) out.push({
|
|
2598
|
+
code: "jdk",
|
|
2599
|
+
reason: "no JDK there",
|
|
2600
|
+
...jdkInstall("17", worker.os)
|
|
2601
|
+
});
|
|
2602
|
+
} else if (worker.jdk !== local.jdk && !worker.jdks?.includes(local.jdk)) out.push({
|
|
2199
2603
|
code: "jdk",
|
|
2200
|
-
reason: `JDK ${worker.jdk ?? "none"} there, ${local.jdk
|
|
2201
|
-
...
|
|
2604
|
+
reason: `JDK ${worker.jdk ?? "none"} there, ${local.jdk} here`,
|
|
2605
|
+
...worker.jdks ? jdkInstall(local.jdk, worker.os) : {}
|
|
2202
2606
|
});
|
|
2203
2607
|
const sdk = worker.androidSdk;
|
|
2204
2608
|
if (!sdk) return [...out, {
|
|
@@ -2249,8 +2653,8 @@ function cocoapodsDifference(target, worker) {
|
|
|
2249
2653
|
}
|
|
2250
2654
|
/**
|
|
2251
2655
|
* What a build on the worker does beyond the match: the SDK packages it lacks and Gradle downloads on the first build,
|
|
2252
|
-
* because its SDK licenses are accepted and the project allows the download
|
|
2253
|
-
* CocoaPods difference a named machine is sent the build despite.
|
|
2656
|
+
* because its SDK licenses are accepted and the project allows the download, and the JDK it builds on for a client with
|
|
2657
|
+
* none. None of them stops the build. For iOS, the CocoaPods difference a named machine is sent the build despite.
|
|
2254
2658
|
*/
|
|
2255
2659
|
function toolchainNotes(target, worker) {
|
|
2256
2660
|
if (target.platform === "ios") {
|
|
@@ -2260,14 +2664,19 @@ function toolchainNotes(target, worker) {
|
|
|
2260
2664
|
reason: `${pods.reason}; its pod install runs anyway and a failure is reported`
|
|
2261
2665
|
}] : [];
|
|
2262
2666
|
}
|
|
2263
|
-
if (target.platform !== "android"
|
|
2667
|
+
if (target.platform !== "android") return [];
|
|
2668
|
+
const jdk = !target.local.jdk && worker.jdk ? [{
|
|
2669
|
+
code: "jdk",
|
|
2670
|
+
reason: `this machine has no JDK, so the build runs on JDK ${worker.jdk} there`
|
|
2671
|
+
}] : [];
|
|
2672
|
+
if (!worker.androidSdk || !gradleDownloads(target.requires, worker)) return jdk;
|
|
2264
2673
|
const sdkManager = sdkManagerPath(worker);
|
|
2265
|
-
return sdkGaps(target.requires, worker.androidSdk).map((gap) => ({
|
|
2674
|
+
return [...jdk, ...sdkGaps(target.requires, worker.androidSdk).map((gap) => ({
|
|
2266
2675
|
code: gap.code,
|
|
2267
2676
|
reason: `${gap.label} is not installed there; Gradle downloads it on the first build${gap.size ? ` (${gap.size})` : ""}`,
|
|
2268
2677
|
commands: [`${sdkManager} "${gap.id}"`],
|
|
2269
2678
|
lead: "install the package now so the first build does not download it"
|
|
2270
|
-
}));
|
|
2679
|
+
}))];
|
|
2271
2680
|
}
|
|
2272
2681
|
function versionMismatch(tool, there, here) {
|
|
2273
2682
|
const side = (version) => version ? version.startsWith(tool) ? version : `${tool} ${version}` : `no ${tool}`;
|
|
@@ -2418,4 +2827,4 @@ function toolchainMismatches(target, worker) {
|
|
|
2418
2827
|
return out;
|
|
2419
2828
|
}
|
|
2420
2829
|
//#endregion
|
|
2421
|
-
export {
|
|
2830
|
+
export { readBundleSchemes as $, COMPILATION_CACHE_NOT_RUN as A, pickXcodeProject as B, DEPS_ERROR as C, readRubyVersion as D, readPodState as E, compilationCacheActivityLine as F, swiftPrefixMappingSupported as G, readBundleId as H, compilationCacheSettings as I, describeDiagnostic as J, tailLines as K, detectXcodeMajorAsync as L, HEARTBEAT_INTERVAL_MS as M, SWIFT_PREFIX_MAPPING_MIN_SWIFT as N, runCaptured as O, buildXcode as P, pickDevClientScheme as Q, parseSwiftVersion as R, workerToolchain as S, podsAreStale as T, resolveScheme as U, readBundleExecutable as V, startBuildHeartbeat as W, podInstallCommand as X, bundlerPin as Y, approvableSchemes as Z, parseXcodeVersionPlist as _, runCancellationSignal as _t, buildsOnlyOnWorker as a, profileGate as at, toolchainNotes as b, claimForEmptying as bt, iosToolchainAsync as c, NATIVE_RUN_WAIT_MS as ct, jdkHomes as d, decideStopAction as dt, schemesFromInfoPlist as et, jdkMajor as f, describeNativeRunHolder as ft, parseAndroidRequirements as g, runCancellation as gt, macosToolchainAsync as h, requestNativeRunCancel as ht, availableIphone as i, parseSigningIdentities as it, COMPILATION_CACHE_UNAVAILABLE as j, runPodInstall as k, iphoneRuntimes as l, cancelledFailure as lt, macosToolchain as m, nativeRunWaitNotice as mt, androidToolchain as n, parsePlist as nt, cocoapodsDifference as o, signingGate as ot, listXcodeApps as p, nativeRunHolder as pt, xcodebuildArgs as q, androidToolchainAsync as r, parseProvisioningProfilePlist as rt, cocoapodsInstall as s, NATIVE_RUN_LOCK as st, androidRequirements as t, SIGNING_CODES as tt, jdkCandidates as u, clearNativeRunCancel as ut, sdkDownloadDisabled as v, withNativeBuildRun as vt, POD_MISSING_REASON as w, useJdkMajor as x, toolchainMismatches as y, cacheUser as yt, parseXcodeMajor as z };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as getExecutor } from "./exec-
|
|
1
|
+
import { t as getExecutor } from "./exec-CGuDzt40.mjs";
|
|
2
2
|
import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
|
|
3
3
|
import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
|
|
4
|
-
import { n as windowsLauncherArgs } from "./detached-entry-
|
|
4
|
+
import { n as windowsLauncherArgs } from "./detached-entry-tfrgGVWb.mjs";
|
|
5
5
|
import { n as stampAttempt, r as due, t as capChildLog } from "./attempt-ClyJlZPT.mjs";
|
|
6
6
|
import { readClaimSet } from "@stim-cli/core/ownership-claim";
|
|
7
7
|
import { closeSync, openSync } from "node:fs";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { D as ownership_claim_exports, E as debugLog,
|
|
2
|
-
import { E as workspaceDir, M as withDirLock, _ as ensureWorkspaceStorage, h as discoverAgentSessions, m as attributeAgentSessions, o as updateWorkspaceState, p as agentKey } from "./workspace-state-
|
|
3
|
-
import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-
|
|
4
|
-
import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-
|
|
5
|
-
import { U as ownedAvdDirectory } from "./android-
|
|
6
|
-
import { s as pullRequestLookups } from "./pull-request-
|
|
1
|
+
import { D as ownership_claim_exports, E as debugLog, f as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor } from "./exec-CGuDzt40.mjs";
|
|
2
|
+
import { E as workspaceDir, M as withDirLock, _ as ensureWorkspaceStorage, h as discoverAgentSessions, m as attributeAgentSessions, o as updateWorkspaceState, p as agentKey } from "./workspace-state-BdZ-QgmB.mjs";
|
|
3
|
+
import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-DKlBcKAL.mjs";
|
|
4
|
+
import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-B5IBDfTx.mjs";
|
|
5
|
+
import { U as ownedAvdDirectory } from "./android-Iq0M2t2d.mjs";
|
|
6
|
+
import { s as pullRequestLookups } from "./pull-request-BpMTNkMB.mjs";
|
|
7
7
|
import { clearClaimChild, markClaimChildPending, releaseClaim, setClaimChild, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
|
|
8
8
|
import { randomUUID } from "node:crypto";
|
|
9
9
|
import { existsSync, mkdirSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-
|
|
5
|
-
import { f as projectRegistry, n as findCommandWorkspace } from "./project-
|
|
6
|
-
import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-
|
|
7
|
-
import { o as readWebRecord, r as cdpEndpoint } from "./state-
|
|
8
|
-
import { t as liveWebRecord } from "./page-
|
|
9
|
-
import { n as ensureWorkspaceStorageSafely } from "./native-runtime-
|
|
1
|
+
import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-BdZ-QgmB.mjs";
|
|
2
|
+
import { f as refuseNoProject, l as phaseLine } from "./command-output-DjExb_tZ.mjs";
|
|
3
|
+
import { D as upsertProject, k as withConfigLockAsync, m as getProject } from "./config-BW0fAtoK.mjs";
|
|
4
|
+
import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-B5IBDfTx.mjs";
|
|
5
|
+
import { f as projectRegistry, n as findCommandWorkspace } from "./project-DU3jjnBE.mjs";
|
|
6
|
+
import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-_WTria-r.mjs";
|
|
7
|
+
import { o as readWebRecord, r as cdpEndpoint } from "./state-CtmYTRWm.mjs";
|
|
8
|
+
import { t as liveWebRecord } from "./page-Dj8IqvGM.mjs";
|
|
9
|
+
import { n as ensureWorkspaceStorageSafely } from "./native-runtime-CNgxeOCG.mjs";
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
//#region src/commands/web.ts
|
|
12
12
|
const printNote = (line) => console.error(line);
|
package/dist/web-run.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { D as ownership_claim_exports,
|
|
2
|
-
import { Dt as recordCreatedDevice } from "./android-
|
|
3
|
-
import { f as signalProcessTree } from "./metro-
|
|
1
|
+
import { D as ownership_claim_exports, T as process_identity_exports, l as cancellableSleep, t as getExecutor } from "./exec-CGuDzt40.mjs";
|
|
2
|
+
import { Dt as recordCreatedDevice } from "./android-Iq0M2t2d.mjs";
|
|
3
|
+
import { f as signalProcessTree } from "./metro-B5PVz0Wv.mjs";
|
|
4
4
|
import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
|
|
5
|
-
import { c as webClaimRoot, f as webLogFile, g as chromeProcessState, h as writeWebRecord, i as clearWebRecord, l as webDir, n as browserLogFile, p as webProfileDir, s as updateWebRecord, v as liveProfileHolder, y as removeSingletonFiles } from "./state-
|
|
6
|
-
import { l as probeWebDrivers } from "./activity-
|
|
7
|
-
import { t as connectOwnedBrowser } from "./cdp-
|
|
8
|
-
import { t as relaunchWithLogFile } from "./detached-entry-
|
|
9
|
-
import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-
|
|
5
|
+
import { c as webClaimRoot, f as webLogFile, g as chromeProcessState, h as writeWebRecord, i as clearWebRecord, l as webDir, n as browserLogFile, p as webProfileDir, s as updateWebRecord, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CtmYTRWm.mjs";
|
|
6
|
+
import { l as probeWebDrivers } from "./activity-DkS-Ir6V.mjs";
|
|
7
|
+
import { t as connectOwnedBrowser } from "./cdp-C216kOAn.mjs";
|
|
8
|
+
import { t as relaunchWithLogFile } from "./detached-entry-tfrgGVWb.mjs";
|
|
9
|
+
import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-C8sC5tdl.mjs";
|
|
10
10
|
import { existsSync, mkdirSync, openSync, realpathSync } from "node:fs";
|
|
11
11
|
import { isAbsolute, resolve } from "node:path";
|
|
12
12
|
import { LOG_ROTATE_BYTES } from "@stim-cli/core";
|
package/dist/windows-report.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { A as writeConfigSetting, h as getProjectSettings, j as writeConfigSettingAsync } from "./config-
|
|
3
|
-
import { lt as workspaceHiddenSetting } from "./settings-
|
|
1
|
+
import { T as process_identity_exports, t as getExecutor } from "./exec-CGuDzt40.mjs";
|
|
2
|
+
import { A as writeConfigSetting, h as getProjectSettings, j as writeConfigSettingAsync } from "./config-BW0fAtoK.mjs";
|
|
3
|
+
import { lt as workspaceHiddenSetting } from "./settings-B5IBDfTx.mjs";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { homedir } from "node:os";
|
|
6
6
|
import { dirname, isAbsolute, join, relative } from "node:path";
|