stim 1.15.0 → 1.16.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/{activity-B2-kb7k0.mjs → activity-BxwdD81S.mjs} +29 -16
- package/dist/agent-device-usage-output-Dpih1Tfa.mjs +411 -0
- package/dist/{android-Db2eEMaf.mjs → android-B_NumVyQ.mjs} +21 -20
- package/dist/{android-Cu_L4RpL.mjs → android-Ift4kVvt.mjs} +56 -47
- package/dist/{android-cas-PnKfAdB2.mjs → android-cas-8U4DPqeR.mjs} +1 -1
- package/dist/{android-CYmq0jNi.mjs → android-r2rBL8kV.mjs} +1 -1
- package/dist/{app-install-CAAplXAt.mjs → app-install-CKWdbXIX.mjs} +48 -5
- package/dist/attempt-Bk2ouQVL.mjs +39 -0
- package/dist/{budget-CMiqghig.mjs → budget-DjrURfQn.mjs} +356 -366
- package/dist/{build-plan-aeGMFX7e.mjs → build-plan-DjeSb2Xl.mjs} +19 -20
- package/dist/{build-slots-Df1ApSuH.mjs → build-slots-rUk77xqh.mjs} +7 -2
- package/dist/{cli-0cX5s4NM.mjs → cli-BkYZ_6hy.mjs} +23 -17
- package/dist/cli.mjs +1 -1
- package/dist/{client-C2IS36Qf.mjs → client-BTY686R6.mjs} +57 -22
- package/dist/collector-run.mjs +5 -192
- package/dist/{command-output-CliHHn7a.mjs → command-output-DnJMdEY-.mjs} +1 -1
- package/dist/{created-devices-BwVb3liH.mjs → created-devices-D5owjN4C.mjs} +1 -1
- package/dist/{dependency-state-BmsjKZ2H.mjs → dependency-state-B6cMXZab.mjs} +1 -1
- package/dist/{deps-BFlKbOIp.mjs → deps-urbmfXig.mjs} +2 -2
- package/dist/{dev-client-CjzLoNs0.mjs → dev-client-CroAIjjj.mjs} +3 -40
- package/dist/{device-BZ1IyS5A.mjs → device-DZQjF7H5.mjs} +7 -6
- package/dist/{device-capacity-DMuKC7nx.mjs → device-capacity-BHwxNBlu.mjs} +2 -2
- package/dist/device-host-worker.mjs +223 -28
- package/dist/{device-ios-DMQBUPus.mjs → device-ios-BadmeL2V.mjs} +7 -7
- package/dist/{device-lease-W5Pi1q38.mjs → device-lease-D-hLqx1b.mjs} +2 -2
- package/dist/{device-pool-B2r38YjS.mjs → device-lease-run-CqjShqWW.mjs} +5 -125
- package/dist/device-pool-CUaEWMMm.mjs +125 -0
- package/dist/{device-remote-9ulPsdhY.mjs → device-remote-D5WVWqOq.mjs} +12 -12
- package/dist/{doctor-BcE5xsBn.mjs → doctor-Cimf-gGB.mjs} +80 -34
- package/dist/{error-diagnostics-Cb0P1WLS.mjs → error-diagnostics-B9L4Ae0x.mjs} +11 -15
- package/dist/{gc-BuL1Genr.mjs → gc-Bqy4bjEu.mjs} +194 -31
- package/dist/{gradle-CmdOBq1d.mjs → gradle-BsO1MdsH.mjs} +4 -4
- package/dist/{guide-cCSGRFd3.mjs → guide-B_uyKTxW.mjs} +588 -53
- package/dist/{guide-status-CIoWK6mG.mjs → guide-status-CjEZMAD4.mjs} +1 -1
- package/dist/hosted-client-a-WmqE2L.mjs +197 -0
- package/dist/hosted-ios-CIWelIqf.mjs +220 -0
- package/dist/hosted-logs-D5g041Q3.mjs +187 -0
- package/dist/hosted-macos-BSZyIb3y.mjs +135 -0
- package/dist/{build-progress-C2Jv1AtA.mjs → idle-DYVymG92.mjs} +233 -6
- package/dist/{idle-shutdown-B5LPaNyY.mjs → idle-shutdown-CTsDnAde.mjs} +6 -6
- package/dist/{in-use-CndPMilN.mjs → in-use-DvBw0Kxo.mjs} +29 -9
- package/dist/{ios-3CtCRhwr.mjs → ios-BaInn3sW.mjs} +2 -2
- package/dist/ios-Cr1h5gnO.mjs +189 -0
- package/dist/{ios-Chob8ny7.mjs → ios-aq3QoGI3.mjs} +729 -452
- package/dist/{ios-device-DERmMmk-.mjs → ios-device-FfCN_C8p.mjs} +1 -1
- package/dist/ios-state-DS5UpYTH.mjs +48 -0
- package/dist/{launch-verify-CLlofxRt.mjs → launch-verify-2DBRizjo.mjs} +3 -3
- package/dist/logs-CHEVK8zD.mjs +371 -0
- package/dist/{machines-CYtOCqcj.mjs → machines-BIBUdhpj.mjs} +16 -10
- package/dist/{macos-BwtbUtTN.mjs → macos-CSYEAFmF.mjs} +22 -17
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.d.mts +4 -0
- package/dist/maintenance-run.mjs +254 -0
- package/dist/{metro-Di8EN2Tb.mjs → metro-BeK1ZPz1.mjs} +1 -1
- package/dist/metro-gateway-BJ-rxQAB.mjs +84 -0
- package/dist/{named-ports-Dj_XBNaL.mjs → named-ports-Bk_YXEmE.mjs} +1 -1
- package/dist/{native-run-DFDoIRbY.mjs → native-run-NaBrRFtQ.mjs} +2 -2
- package/dist/{native-runtime-i6OkVg-w.mjs → native-runtime-DBzRnEKS.mjs} +6 -6
- package/dist/{ndjson-CDY9IkVC.mjs → ndjson-PclOIwVY.mjs} +2 -2
- package/dist/offload-worker.d.mts +1 -0
- package/dist/offload-worker.mjs +13 -8
- package/dist/{ownership-BkYxUtuj.mjs → ownership-DiA16AsN.mjs} +2 -2
- package/dist/{stop-cause-CZ_Mr-v9.mjs → ownership-hCkPzGmr.mjs} +4 -98
- package/dist/{ports-DddwttKM.mjs → ports-R2k4Knz3.mjs} +2 -2
- package/dist/{prebuild-BvxDlD6C.mjs → prebuild-D2fsca_Z.mjs} +4 -4
- package/dist/preview-DhVbvPAZ.mjs +318 -0
- package/dist/{project-CV3tDFHl.mjs → project-Du91Ilvc.mjs} +67 -3
- package/dist/{recordings-GEXp4iBT.mjs → recordings-BIXOzVnr.mjs} +1 -1
- package/dist/{reload-ChPiwvot.mjs → reload-rM9jV1fz.mjs} +49 -12
- package/dist/{remote-cache-CO2elm_b.mjs → remote-cache-C8-V13XN.mjs} +4 -4
- package/dist/{run-B-xqRrsg.mjs → run-f4vI6EnK.mjs} +2 -2
- package/dist/{server-bare-X7PUgizL.mjs → server-bare-CpPGmnmO.mjs} +1 -1
- package/dist/server-expo-CVqO2c35.mjs +2 -0
- package/dist/{server-expo-DhtX6bom.mjs → server-expo-MC0rHlOC.mjs} +4 -4
- package/dist/settings-BBpMcDbD.mjs +25 -0
- package/dist/{settings-DbL6uhH8.mjs → settings-ZkDzkzvB.mjs} +10 -4
- package/dist/settings-oTSkkNrM.mjs +1439 -0
- package/dist/settings.schema.json +432 -39
- package/dist/{simslim-Ciluxlq4.mjs → simslim-B8-7AoTI.mjs} +3 -3
- package/dist/{slot-launch-BY0BrOLh.mjs → slot-launch-B8VrHxn1.mjs} +10 -7
- package/dist/{spawn-entry-DncpJvWL.mjs → spawn-entry-jw19m8Nl.mjs} +1 -0
- package/dist/{start-CPO4wRg7.mjs → start-CX8Ig-U2.mjs} +1 -1
- package/dist/{start-CUD9nasA.mjs → start-ClDfwXa4.mjs} +21 -17
- package/dist/{state-BxCgeTQu.mjs → state-3DwSQIBK.mjs} +2 -2
- package/dist/{state-DFm77wRn.mjs → state-C1jB7Q8q.mjs} +5 -5
- package/dist/{state-CaeaHbDA.mjs → state-DcW6vOd_.mjs} +1 -1
- package/dist/{stats-DBLLFmKd.mjs → stats-CEZ_i5je.mjs} +16 -5
- package/dist/{status-l84Gbvp2.mjs → status-BuvBFeII.mjs} +5 -3
- package/dist/{status-DYXxNOT0.mjs → status-Cs7VLg9D.mjs} +148 -44
- package/dist/status-DlKvVJBE.mjs +49 -0
- package/dist/{stop-Bvf1MflS.mjs → stop-B0Yxtmiy.mjs} +3 -3
- package/dist/{stop-Bad61z_2.mjs → stop-Bffozsac.mjs} +61 -20
- package/dist/{stop-CceYh1yG.mjs → stop-Dt_dM16A.mjs} +2 -2
- package/dist/stop-cause-CidxIqup.mjs +97 -0
- package/dist/supervisor-run.mjs +148 -17
- package/dist/{support-CDQbDkL5.mjs → support-CAP8qDUF.mjs} +4 -3
- package/dist/{support-WLOzVKUv.mjs → support-D4aYJniO.mjs} +34 -9
- package/dist/{teardown-BYuQafiA.mjs → teardown-CL6vDs2Y.mjs} +56 -47
- package/dist/{toolchain-DmeYjXD9.mjs → toolchain-DkUflduf.mjs} +10 -10
- package/dist/trigger-Bemu8ytw.mjs +65 -0
- package/dist/trigger-CXts6qt1.mjs +2 -0
- package/dist/{warm-progress-DVHLN4uC.mjs → warm-progress-CpGv3Wb6.mjs} +274 -5
- package/dist/{web-k6w8-HnE.mjs → web-DWUaMp8P.mjs} +15 -16
- package/dist/web-run.mjs +5 -5
- package/dist/{workspace-state-CL2V2Ons.mjs → workspace-state-B8-aJ1_5.mjs} +33 -33
- package/dist/workspaces-BV4pdHFz.mjs +306 -0
- package/dist/{worktree-qXKzADSC.mjs → worktree-K-xj9Db0.mjs} +497 -30
- package/dist/{worktree-BT_uULFx.mjs → worktree-jnG8Iph5.mjs} +1 -1
- package/package.json +5 -5
- package/dist/hosted-macos-DwowNU7W.mjs +0 -447
- package/dist/logs-h9h6MUvE.mjs +0 -568
- package/dist/machine-usage-D_YYMzfR.mjs +0 -283
- package/dist/merge-state-BnxLNQiM.mjs +0 -272
- package/dist/server-expo-KJeD109I.mjs +0 -2
- package/dist/settings-CduVcoxj.mjs +0 -680
- package/dist/watchman-Bx0wceoF.mjs +0 -238
- package/dist/worktree-C0c5Udwa.mjs +0 -753
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
import { t as getExecutor } from "./exec-CaErVv7t.mjs";
|
|
2
2
|
import { C as saveConfig, D as withConfigLock$1, E as upsertProject, L as deviceSlotFileKey, R as deviceSlotKey, V as parseDeviceSlotOption, W as validateDeviceSlot, _ as loadConfig$1, j as formatBytes, p as getProject, u as getConcurrencyLimits, w as setDevice, z as deviceSlotPlatforms } from "./config-D0DbpZtM.mjs";
|
|
3
3
|
import { n as ownership_claim_exports } from "./process-identity-BmRm1qV0.mjs";
|
|
4
|
-
import { r as createNdjsonWriter } from "./ndjson-CDY9IkVC.mjs";
|
|
5
|
-
import { C as workspaceLogsDir, b as workspaceDir, c as writeWorkspaceState, f as emulatorLogFile, i as recordWorkspaceUse, r as readWorkspaceState$1 } from "./workspace-state-CL2V2Ons.mjs";
|
|
6
|
-
import { D as makeTemporaryDirectory, O as removeTemporaryEntry, s as gitCommonDir, y as repoRoot } from "./worktree-C0c5Udwa.mjs";
|
|
7
|
-
import { a as findProjectRoot$1, l as projectShortcut, n as appProjectProblem, r as detectIsExpo, t as NO_PROJECT_REFUSAL } from "./project-CV3tDFHl.mjs";
|
|
8
|
-
import { m as writeWorkspaceLaunch, n as MODE_EXPO, t as MODE_BARE } from "./state-CaeaHbDA.mjs";
|
|
9
4
|
import { r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
10
|
-
import { _ as stepTimer, c as launchErrorReport, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine, m as shortHash, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-
|
|
11
|
-
import {
|
|
5
|
+
import { _ as stepTimer, c as launchErrorReport, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine, m as shortHash, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-DnJMdEY-.mjs";
|
|
6
|
+
import { B as settingsLayers, F as settingFile, G as detectProviders, H as unknownSettingKeys, J as artifactCachePolicy, L as settingOriginScope, N as resolveCacheProviderConfig, P as resolveSettings, R as settingShapeErrors, S as metroPortSetting, Tt as removeTemporaryEntry, V as tunnelModeSetting, X as optimizationBuildProfile, Y as compilerCacheFallbackMessage, Z as resolveOptimizations, a as SETTING_SHAPE_REMEDY, d as cacheProviderSettingError, gt as repoRoot, it as gitCommonDir, j as remoteAndroidSetting, k as publicUrlSetting, r as REMOTE_DEVICE_BACKENDS, s as androidAvdConfigSettingError, u as androidDataPartitionSizeGbSettingError, w as metroWarmupUrlSetting, wt as makeTemporaryDirectory } from "./settings-oTSkkNrM.mjs";
|
|
7
|
+
import { n as appProjectProblem, o as findProjectRoot$1, r as detectIsExpo, t as NO_PROJECT_REFUSAL, u as projectShortcut } from "./project-Du91Ilvc.mjs";
|
|
8
|
+
import { l as resolveProjectMetro, o as pidExists, u as signalProcessTree } from "./metro-BeK1ZPz1.mjs";
|
|
9
|
+
import { c as writeWorkspaceState, g as workspaceAgentDeviceDir, i as recordWorkspaceUse, l as emulatorLogFile, r as readWorkspaceState$1, v as workspaceDir, x as workspaceLogsDir$1 } from "./workspace-state-B8-aJ1_5.mjs";
|
|
10
|
+
import { t as budgetGate } from "./budget-DjrURfQn.mjs";
|
|
11
|
+
import { A as providerDownloadPath, B as captureAssetManifest, D as fingerprintProject, E as fingerprintDiffRecord, F as storedAssetManifest, H as readAssetManifest, L as untrackedMissLine, M as refingerprintAfterMutation, N as resolveBuild, O as inputsChangedDuringBuild, P as storeBuild, R as untrackedNativeFiles, S as configInputsChanged, T as filesystemBuildCapability, V as compareAssetManifests, _ as waitForBuild, b as buildCacheKey, g as releaseBuildLock, j as providerUploadOutcome, k as prepareProviderDownloadDir, m as acquireBuildLock, v as waitForSharedBuild, x as changedDuringBuildLine, z as assetDiffReason } from "./device-lease-D-hLqx1b.mjs";
|
|
12
|
+
import { r as releaseBuildSlot, t as acquireBuildSlot } from "./build-slots-rUk77xqh.mjs";
|
|
13
|
+
import { m as writeWorkspaceLaunch, n as MODE_EXPO, t as MODE_BARE } from "./state-DcW6vOd_.mjs";
|
|
14
|
+
import { S as statsProjectKey$1, _ as tapBuildLog, g as startBuildProgress, h as recordFinishedBuild, l as NO_BUILD_PROGRESS, v as createRunRecorder, x as recordRunStats, y as readRunEstimates } from "./idle-DYVymG92.mjs";
|
|
15
|
+
import { $ as trimAndroidCaches, A as listAvds, B as ownedAvdSystemImage, D as hostSystemImageArch, F as ownedAvdDeviceProfile, G as probeEmulatorSerial, I as ownedAvdDirectory, J as resolveOwnedAvdSerial, K as profileNeedsFoldFeature, O as listAdbDevices, Q as systemImageSupportsFold, T as findBuildTool, U as physicalDeviceModel, W as pickDefaultSystemImage, Y as resolvePhysicalDevice, a as androidDeviceAbi, ft as parkedMaxSetting, i as androidDataFreeBytes, j as listInstalledSystemImages, k as listAvdDeviceProfiles, q as resetAdoptedAvd, r as androidBuildToolName, rt as configuredAndroidEmulatorApp, t as DEFAULT_AVD_DEVICE_PROFILE, tt as waitForBoot, u as androidToolCwd } from "./android-B_NumVyQ.mjs";
|
|
12
16
|
import { a as workspaceLinks, i as workspaceLinkLine } from "./stim-desktop-Cnz8CPnl.mjs";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { c as
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { t as
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import { a as
|
|
26
|
-
import { t as
|
|
27
|
-
import { i as
|
|
28
|
-
import { c as
|
|
29
|
-
import {
|
|
30
|
-
import { a as
|
|
31
|
-
import {
|
|
32
|
-
import { d as
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-i6OkVg-w.mjs";
|
|
39
|
-
import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-BY0BrOLh.mjs";
|
|
40
|
-
import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-Cb0P1WLS.mjs";
|
|
41
|
-
import { n as resolveAndroidCas, r as resolveAndroidCompilerCache } from "./android-cas-PnKfAdB2.mjs";
|
|
17
|
+
import { i as teardownOwnedAvd } from "./teardown-CL6vDs2Y.mjs";
|
|
18
|
+
import { r as createNdjsonWriter } from "./ndjson-PclOIwVY.mjs";
|
|
19
|
+
import { E as ccacheActivityLine, T as CCACHE_UNAVAILABLE, b as tailLines, k as resolveCcache, n as androidToolchain, t as androidRequirements, u as HEARTBEAT_INTERVAL_MS, w as CCACHE_NOT_RUN, y as startBuildHeartbeat } from "./toolchain-DkUflduf.mjs";
|
|
20
|
+
import { t as cleanLine } from "./server-expo-MC0rHlOC.mjs";
|
|
21
|
+
import { a as offloadBuild, c as placementLoad, d as OffloadRefusal, f as namedBuildMachine, i as closeOffload, l as remotePhaseText, m as resolveBuildPlacement, n as buildPlacementCandidates, p as parseBuildMachineOption, r as chooseBuildMachine, s as offloadPlacement } from "./client-BTY686R6.mjs";
|
|
22
|
+
import { n as verifyCollectorOwnership, r as readCollectors } from "./ownership-DiA16AsN.mjs";
|
|
23
|
+
import { S as restartedAppNote, b as launchAndroidReleaseApp, c as androidDevClientUrl, g as installConflictKind, h as installAndroidApp, r as DEFAULT_METRO_PORT, s as androidAppProcess, t as ADB_INSTALL_TIMEOUT_MS, y as launchAndroidApp } from "./app-install-CKWdbXIX.mjs";
|
|
24
|
+
import { t as checkDeviceCapacity } from "./device-capacity-BHwxNBlu.mjs";
|
|
25
|
+
import { C as resolveSystemImage, S as resolveDeviceProfile, T as systemImageRefusal, _ as isReleaseVariant, a as PLATFORM, b as pooledAndroidDevice, c as androidSystemImageSetting, d as apkPackage, f as deviceProfileRefusal, g as foldableImageRefusal, h as findAapt, i as NO_FINGERPRINT, l as androidVariantSetting, m as dumpApkManifest, n as LAUNCH_FAILED, o as androidBuildOptions, p as displayPath, r as NO_DEVICE, s as androidDevClientScheme, t as INSTALL_FAILED, u as apkDevClientFacts, v as noDeviceDiagnostic, w as resolveVariant, x as remoteAvdFlagRefusal, y as parseXmltree } from "./support-CAP8qDUF.mjs";
|
|
26
|
+
import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
|
|
27
|
+
import { i as staleNativeDirRefusal, n as recordPrebuild, r as runPrebuild, t as planPrebuild } from "./prebuild-D2fsca_Z.mjs";
|
|
28
|
+
import { c as formatDiagnostic, i as buildAndroid, o as productFlavorRefusal, s as readProductFlavors } from "./gradle-BsO1MdsH.mjs";
|
|
29
|
+
import { a as VERIFY_TIMEOUT_MS, d as verifyAndroidReleaseLaunch, f as verifyLaunch, i as RELEASE_VERIFY_WAIT_MS, l as unattributedLaunchLines, n as LAUNCH_FATAL, r as LAUNCH_UNVERIFIED, t as LAUNCH_BUNDLING, u as unverifiedLaunchLines } from "./launch-verify-2DBRizjo.mjs";
|
|
30
|
+
import { a as acquireRunLease, c as lostRefusal, d as runLease, f as waitFlagConflict, l as parseDeviceWait, o as leaseExpiryText, s as lostLine, t as DEBUG_VERIFY_STEP_MS, u as releaseLeaseOnSignal } from "./device-lease-run-CqjShqWW.mjs";
|
|
31
|
+
import { a as easAuthNote, c as loadProjectProvider, f as resolveEasCliBin, i as checkEasAuth, m as uploadRemote, n as UPLOAD_TIMEOUT_MS, o as exitAfterFlush, p as resolveRemote, r as cacheLevel, s as isEasAuthFailureText, t as RESOLVE_TIMEOUT_MS } from "./remote-cache-C8-V13XN.mjs";
|
|
32
|
+
import { a as ensureMetroReachable, c as remoteAndroidDeps, n as binOnPath, o as ensureRemoteBootOwned, u as resolveRemoteContext, w as ownedSessionName } from "./device-remote-D5WVWqOq.mjs";
|
|
33
|
+
import { d as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-NaBrRFtQ.mjs";
|
|
34
|
+
import { a as isEasBuildFailure, o as planEasDevelopmentBuild, s as resolveEasDevelopmentBuild } from "./simslim-B8-7AoTI.mjs";
|
|
35
|
+
import { c as startDevServer, m as detectAppIds, p as detectAndroidPackage } from "./start-ClDfwXa4.mjs";
|
|
36
|
+
import { _ as AvdRecoveryError, a as refusePlan, c as skippedMissReason, d as refreshUpdatesManifestFile, g as AvdBootError, h as ensureOwnedDevice, i as printPlan, l as UPDATES_MANIFEST_NAME, m as ensureBooted, n as planFlagRefusal, o as explainBuildMiss, p as didSetUpDevice, r as planPayload, s as fingerprintErrorMissReason, t as planCachedBuild, u as detectEntryFile, v as warmMetro } from "./build-plan-DjeSb2Xl.mjs";
|
|
37
|
+
import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-DBzRnEKS.mjs";
|
|
38
|
+
import { t as selectFromPool } from "./device-pool-CUaEWMMm.mjs";
|
|
39
|
+
import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-B8VrHxn1.mjs";
|
|
40
|
+
import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-B9L4Ae0x.mjs";
|
|
41
|
+
import { n as resolveAndroidCas, r as resolveAndroidCompilerCache } from "./android-cas-8U4DPqeR.mjs";
|
|
42
42
|
import { constants, copyFileSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, statSync } from "node:fs";
|
|
43
43
|
import { basename, dirname, isAbsolute, join } from "node:path";
|
|
44
44
|
import { InvalidArgumentError } from "commander";
|
|
45
|
-
import { buildDiagnostics, machineCapacity } from "@stim-cli/core/state";
|
|
45
|
+
import { buildDiagnostics, machineCapacity, parseMachine } from "@stim-cli/core/state";
|
|
46
46
|
import chalk from "chalk";
|
|
47
47
|
import { createWarnOnce, loadCacheProvider, resolveTieredBuild, storeTieredBuild } from "@stim-cli/cache";
|
|
48
48
|
//#region src/engine/apk-swap.ts
|
|
@@ -422,7 +422,8 @@ function fail$1(code, message, remedy, extra = {}) {
|
|
|
422
422
|
async function acquireAndroidArtifact({ root, buildLog, writer, settings, isExpo, device, physical, remote: remoteTarget, buildPlan, cacheProviderConfig, requestedBuildCache, easBuild, androidPackage: initialPackage, record, maxBuilds, progress }, { deviceAbi, fingerprint, untracked, resolveCached, storeCached, storedAssets, captureAssets, acquireLock, releaseLock, waitForBuild, loadProvider, easAuth, resolveRemoteBuild, uploadRemoteBuild, loadCacheProviderModule, acquireSlot, releaseSlot, planPrebuildFor, prebuild, build, ccacheFor, swapApk, readState, now }) {
|
|
423
423
|
const { phase, out, estimates, stats, step, miss, hit: lateHit, place, waitingOn } = progress;
|
|
424
424
|
let fallbackMachine = null;
|
|
425
|
-
let hereReason =
|
|
425
|
+
let hereReason = "no build machine is paired";
|
|
426
|
+
let slotWaitMs;
|
|
426
427
|
const buildMachine = record.buildMachine ?? "auto";
|
|
427
428
|
const fallBack = (reason, line = reason) => {
|
|
428
429
|
if (namedBuildMachine(buildMachine)) throw new OffloadRefusal(buildMachine, reason);
|
|
@@ -728,6 +729,7 @@ async function acquireAndroidArtifact({ root, buildLog, writer, settings, isExpo
|
|
|
728
729
|
logFile: buildLog,
|
|
729
730
|
out
|
|
730
731
|
});
|
|
732
|
+
slotWaitMs = buildSlot.slotWaitMs;
|
|
731
733
|
} catch (err) {
|
|
732
734
|
const refusal = (0, ownership_claim_exports.claimFailure)(err, "stim android");
|
|
733
735
|
if (refusal) {
|
|
@@ -974,12 +976,14 @@ async function acquireAndroidArtifact({ root, buildLog, writer, settings, isExpo
|
|
|
974
976
|
}
|
|
975
977
|
if (offload) stats.setPlacement({
|
|
976
978
|
decision: "fell-back",
|
|
979
|
+
slotWaitMs,
|
|
977
980
|
reason: record.offloadFallback ?? "offload failed",
|
|
978
981
|
...fallbackMachine ? { machine: fallbackMachine } : {}
|
|
979
982
|
});
|
|
980
|
-
else
|
|
983
|
+
else stats.setPlacement({
|
|
981
984
|
decision: "here",
|
|
982
|
-
reason: hereReason
|
|
985
|
+
reason: hereReason,
|
|
986
|
+
slotWaitMs
|
|
983
987
|
});
|
|
984
988
|
record.builtOn = "here";
|
|
985
989
|
phase("build", `compiling ${variant || "debug"} with Gradle`);
|
|
@@ -1128,7 +1132,7 @@ function tail(lines, n = FALLBACK_LINES) {
|
|
|
1128
1132
|
}
|
|
1129
1133
|
//#endregion
|
|
1130
1134
|
//#region src/commands/android/result.ts
|
|
1131
|
-
function androidFacts({ slot, serial, avdName = null, deviceName = null, systemImage = null, deviceProfile = null, fingerprint, cacheKey = null, variant = null, metroPort = null, cacheHit, cacheSkipped = false, waitedForBuild = null, appPath, bundleId, installSkipped = false, launched, ccache = CCACHE_UNAVAILABLE, logs, debugHttpHost = null, debugHttpHostNote = null, devClientUrl = null, durationMs, lease, devServer = null, buildMachine = "auto", builtOn, offloadedTo = null, offloadFallback = null }) {
|
|
1135
|
+
function androidFacts({ root, slot, serial, avdName = null, deviceName = null, systemImage = null, deviceProfile = null, fingerprint, cacheKey = null, variant = null, metroPort = null, cacheHit, cacheSkipped = false, waitedForBuild = null, appPath, bundleId, installSkipped = false, launched, ccache = CCACHE_UNAVAILABLE, logs, debugHttpHost = null, debugHttpHostNote = null, devClientUrl = null, durationMs, lease, devServer = null, buildMachine = "auto", builtOn, offloadedTo = null, offloadFallback = null }) {
|
|
1132
1136
|
return {
|
|
1133
1137
|
platform: PLATFORM,
|
|
1134
1138
|
...slot && slot !== "default" ? { slot } : {},
|
|
@@ -1160,6 +1164,7 @@ function androidFacts({ slot, serial, avdName = null, deviceName = null, systemI
|
|
|
1160
1164
|
debugHttpHostNote: debugHttpHostNote ?? null,
|
|
1161
1165
|
devClientUrl: devClientUrl ?? null,
|
|
1162
1166
|
logs: logs ?? null,
|
|
1167
|
+
...root ? { agentDevice: { stateDir: workspaceAgentDeviceDir(root) } } : {},
|
|
1163
1168
|
durationMs: typeof durationMs === "number" && Number.isFinite(durationMs) ? durationMs : null,
|
|
1164
1169
|
...lease === void 0 ? {} : { lease },
|
|
1165
1170
|
...devServer ? { devServer } : {}
|
|
@@ -1208,7 +1213,7 @@ async function finishAndroidUpload(uploadPending, remote, phase) {
|
|
|
1208
1213
|
}
|
|
1209
1214
|
return false;
|
|
1210
1215
|
}
|
|
1211
|
-
function reportAndroidResult({ slot, json, useBuildCache, variant, release, metroCheck, metroPort, logsDir, serial, apkPath, androidPackage, installSkipped, record, waitedForBuild, remote, providerName, launchState, launchWarning, launched, ccache, durationMs, writer, emit, lease, recordRun, reclaimed = [], devServer = null, links }) {
|
|
1216
|
+
function reportAndroidResult({ root, slot, json, useBuildCache, variant, release, metroCheck, metroPort, logsDir, serial, apkPath, androidPackage, installSkipped, record, waitedForBuild, remote, providerName, launchState, launchWarning, launched, ccache, durationMs, writer, emit, lease, recordRun, reclaimed = [], devServer = null, links }) {
|
|
1212
1217
|
const offloadedTo = record.offloadedTo ?? null;
|
|
1213
1218
|
recordRun({
|
|
1214
1219
|
failed: false,
|
|
@@ -1218,6 +1223,7 @@ function reportAndroidResult({ slot, json, useBuildCache, variant, release, metr
|
|
|
1218
1223
|
offloadedTo
|
|
1219
1224
|
});
|
|
1220
1225
|
const facts = androidFacts({
|
|
1226
|
+
root,
|
|
1221
1227
|
slot,
|
|
1222
1228
|
serial,
|
|
1223
1229
|
avdName: record.avdName,
|
|
@@ -1267,7 +1273,8 @@ function reportAndroidResult({ slot, json, useBuildCache, variant, release, metr
|
|
|
1267
1273
|
phaseLine("metro", metroResult),
|
|
1268
1274
|
phaseLine("cache", cacheResult),
|
|
1269
1275
|
...ccache.status === "not-run" ? [phaseLine("compilation cache", ccacheActivityLine(ccache))] : [],
|
|
1270
|
-
phaseLine("logs", logsDir || "unavailable (remote device)")
|
|
1276
|
+
phaseLine("logs", logsDir || "unavailable (remote device)"),
|
|
1277
|
+
phaseLine("agent-device", `AGENT_DEVICE_STATE_DIR=${workspaceAgentDeviceDir(root)}`)
|
|
1271
1278
|
].join("\n"));
|
|
1272
1279
|
if (links) console.error(chalk.dim(workspaceLinkLine(links)));
|
|
1273
1280
|
}
|
|
@@ -1300,7 +1307,7 @@ function collectorEntry() {
|
|
|
1300
1307
|
return spawnEntry("collector-run");
|
|
1301
1308
|
}
|
|
1302
1309
|
function collectorLogFile(root, slot = "default") {
|
|
1303
|
-
return join(workspaceLogsDir(root), `collector-${deviceSlotFileKey(PLATFORM, slot)}.log`);
|
|
1310
|
+
return join(workspaceLogsDir$1(root), `collector-${deviceSlotFileKey(PLATFORM, slot)}.log`);
|
|
1304
1311
|
}
|
|
1305
1312
|
const COLLECTOR_EXIT_WAIT_MS = 2e3;
|
|
1306
1313
|
const COLLECTOR_POLL_MS = 25;
|
|
@@ -1341,7 +1348,7 @@ async function startCollector({ root, slot = "default", serial, packageName, spa
|
|
|
1341
1348
|
}
|
|
1342
1349
|
let stdio = "ignore";
|
|
1343
1350
|
try {
|
|
1344
|
-
mkdirSync(workspaceLogsDir(root), { recursive: true });
|
|
1351
|
+
mkdirSync(workspaceLogsDir$1(root), { recursive: true });
|
|
1345
1352
|
const fd = openSync(collectorLogFile(root, slot), "a");
|
|
1346
1353
|
stdio = [
|
|
1347
1354
|
"ignore",
|
|
@@ -1877,6 +1884,7 @@ async function finishAndroidRun({ lease, releaseLease, root, slot, json, metroCh
|
|
|
1877
1884
|
const leaseFacts = lease?.facts() ?? null;
|
|
1878
1885
|
releaseLease();
|
|
1879
1886
|
const facts = reportAndroidResult({
|
|
1887
|
+
root,
|
|
1880
1888
|
slot,
|
|
1881
1889
|
json,
|
|
1882
1890
|
useBuildCache,
|
|
@@ -2318,7 +2326,8 @@ function androidCommand(program) {
|
|
|
2318
2326
|
function registerAndroid(program) {
|
|
2319
2327
|
program.command("android").description("Build (or install from the shared cache), install and launch this workspace's Android app on its owned emulator, wired to the reserved Metro port. A Debug run starts the dev server when it is not running.").option("--eas-profile <name>", "Download a matching EAS development build; on a miss, print the build command without running it").option("--slot <name>", "Reusable device slot within this workspace (default: default)", parseDeviceSlotOption).option("--build-machine <value>", "Build on auto, local, or one named machine; a name refuses without fallback", parseBuildMachineOption).option("--json", "Emit the facts as a single JSON line on stdout; every other line goes to stderr").option("--plan", "Predict the next build without building, booting or installing: resolve the fingerprint, check the local then remote cache, and print the expected cache result and duration. Writes no Stim state.").option("--no-metro-check", "Skip the reserved-port Metro health check and do not start it (the app will load no bundle unless something else serves it)").option("--no-build-cache", "Build fresh, ignoring cached artifacts (local and the project's build-cache provider); the fresh build still replaces the cache entry").option("--variant <name>", "Gradle variant to assemble and install (e.g. productionDebug on a flavored project); overrides the android.variant setting. A variant ending in Release embeds the JS bundle and skips Metro entirely. Default: debug").option("--system-image <id>", "Android system image to create this workspace's owned AVD from, as the sdkmanager package id (e.g. \"system-images;android-36;google_apis;arm64-v8a\"). Overrides the android.systemImage setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the installed images.").option("--device-profile <id>", "Hardware profile to create this workspace's owned AVD with, as an `avdmanager list device -c` id (e.g. \"pixel_fold\", \"pixel_tablet\"). Overrides the android.deviceProfile setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the available ids.").option("--device [serial]", "Install and launch on a connected physical device instead of this workspace's owned emulator. With no serial, the first connected device this workspace can lease is used. Stim never creates, boots, or deletes a physical device.").option("--remote <backend>", "Install and launch on a remote device with proxy or EAS. Builds are local unless --eas-profile selects an existing EAS build.", (value) => {
|
|
2320
2328
|
if (REMOTE_DEVICE_BACKENDS.includes(value)) return value;
|
|
2321
|
-
throw new InvalidArgumentError(`expected one of: ${REMOTE_DEVICE_BACKENDS.join(", ")}`);
|
|
2329
|
+
if (!parseMachine(value)) throw new InvalidArgumentError(`expected one of: ${REMOTE_DEVICE_BACKENDS.join(", ")}`);
|
|
2330
|
+
throw new InvalidArgumentError("STIM_BAD_ARG: Android on a paired Mac is not available yet. Use eas or proxy, or run Android locally.");
|
|
2322
2331
|
}).option("--wait <seconds>", "How long to wait for another workspace to release the device it leases, before refusing with STIM_DEVICE_BUSY (default 60, 0 refuses at once). Only with --device.").option("--no-wait", "Install on a device another workspace leases instead of waiting: this run takes no lease and, when both workspaces build the same app id, the install terminates the holder's running app. Only with --device.").action(async (opts) => {
|
|
2323
2332
|
if (opts.plan) return planAndroid(opts);
|
|
2324
2333
|
const root = findProjectRoot$1(process.cwd());
|
|
@@ -2552,7 +2561,7 @@ async function runAndroid(options = {}) {
|
|
|
2552
2561
|
}
|
|
2553
2562
|
};
|
|
2554
2563
|
}
|
|
2555
|
-
const logsDir = workspaceLogsDir(root);
|
|
2564
|
+
const logsDir = workspaceLogsDir$1(root);
|
|
2556
2565
|
const buildLog = join(logsDir, `build-${deviceSlotFileKey("android", slot)}.ndjson`);
|
|
2557
2566
|
const writer = tapBuildLog(createWriter(buildLog, {
|
|
2558
2567
|
truncate: true,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { d as getConfigDir } from "./config-D0DbpZtM.mjs";
|
|
2
2
|
import { r as register } from "./cache-manifest-DnUHBJaU.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { u as ensureWorkspaceStorage, w as withDirLock } from "./workspace-state-B8-aJ1_5.mjs";
|
|
4
4
|
import { createHash, randomUUID } from "node:crypto";
|
|
5
5
|
import { accessSync, constants, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, symlinkSync, writeFileSync } from "node:fs";
|
|
6
6
|
import { join } from "node:path";
|
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
import { t as getExecutor } from "./exec-CaErVv7t.mjs";
|
|
2
|
-
import { D as uninstallIosApp, M as deviceHoldsApk, N as deviceHoldsBundle, l as iosSimulatorFailureAdvice, m as listUserApps } from "./ios-
|
|
2
|
+
import { D as uninstallIosApp, M as deviceHoldsApk, N as deviceHoldsBundle, l as iosSimulatorFailureAdvice, m as listUserApps } from "./ios-BaInn3sW.mjs";
|
|
3
3
|
import { t as DEV_MENU_LAUNCH_ARGS } from "./ios-device-Ee7sDXfp.mjs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
//#region src/engine/app-schemes.ts
|
|
6
|
+
function schemesFromInfoPlist(plist) {
|
|
7
|
+
const types = plist?.CFBundleURLTypes;
|
|
8
|
+
if (!Array.isArray(types)) return [];
|
|
9
|
+
const out = [];
|
|
10
|
+
for (const type of types) {
|
|
11
|
+
const schemes = type?.CFBundleURLSchemes;
|
|
12
|
+
if (Array.isArray(schemes)) out.push(...schemes.filter((s) => typeof s === "string" && s.trim() !== ""));
|
|
13
|
+
}
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
function readBundleSchemes(appPath, { exec = null } = {}) {
|
|
17
|
+
if (typeof appPath !== "string" || appPath.trim() === "") return [];
|
|
18
|
+
const e = exec || getExecutor();
|
|
19
|
+
let out;
|
|
20
|
+
try {
|
|
21
|
+
out = e.runFile("plutil", [
|
|
22
|
+
"-convert",
|
|
23
|
+
"json",
|
|
24
|
+
"-o",
|
|
25
|
+
"-",
|
|
26
|
+
join(appPath, "Info.plist")
|
|
27
|
+
]);
|
|
28
|
+
} catch {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
return schemesFromInfoPlist(JSON.parse(String(out)));
|
|
33
|
+
} catch {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const THIRD_PARTY_SCHEME = /^(?:fb\d+|com\.googleusercontent\.apps\.|msauth\.|msauthv2|twitterkit-|db-[a-z0-9]+$|spotify|snapchat|com\.facebook)/i;
|
|
38
|
+
function approvableSchemes(schemes) {
|
|
39
|
+
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));
|
|
40
|
+
}
|
|
41
|
+
function pickDevClientScheme(schemes) {
|
|
42
|
+
const all = approvableSchemes(schemes);
|
|
43
|
+
const expo = all.filter((s) => s.startsWith("exp+"));
|
|
44
|
+
return (expo.length ? expo : all).toSorted((a, b) => b.length - a.length)[0] ?? null;
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
4
47
|
//#region src/engine/app-install.ts
|
|
5
48
|
const INSTALL_ERROR = "STIM_INSTALL_FAILED";
|
|
6
49
|
const LAUNCH_ERROR = "STIM_LAUNCH_FAILED";
|
|
@@ -68,7 +111,7 @@ function installIosApp({ udid, appPath, bundleId = null, devClientScheme = null,
|
|
|
68
111
|
const artifactFinishedAt = now?.();
|
|
69
112
|
const artifactDurationMs = artifactStartedAt !== void 0 && artifactFinishedAt !== void 0 ? artifactFinishedAt - artifactStartedAt : void 0;
|
|
70
113
|
const devMenuKeys = bundleId && devClientScheme && !skipped ? IOS_DEV_MENU_OFF_KEYS : [];
|
|
71
|
-
const missingApprovals = (bundleId
|
|
114
|
+
const missingApprovals = (bundleId ? iosSchemeApprovalKeys(bundleId, [...approvableSchemes(readBundleSchemes(appPath, { exec: e })), ...devClientScheme ? [devClientScheme] : []]) : []).filter((key) => !schemeApprovals.includes(`${key}=${bundleId}`));
|
|
72
115
|
const preparing = bundleId && (devMenuKeys.length > 0 || missingApprovals.length > 0);
|
|
73
116
|
const preparationStartedAt = preparing ? artifactFinishedAt : void 0;
|
|
74
117
|
if (bundleId && preparing) try {
|
|
@@ -149,8 +192,8 @@ function devClientDeepLink(scheme, projectOrigin, { devMenuParams = false } = {}
|
|
|
149
192
|
function devClientUrl(scheme, metroPort, host = "localhost", options = {}) {
|
|
150
193
|
return devClientDeepLink(scheme, `http://${host}:${metroPort}`, options);
|
|
151
194
|
}
|
|
152
|
-
function iosSchemeApprovalKeys(bundleId,
|
|
153
|
-
return [.../* @__PURE__ */ new Set([bundleId,
|
|
195
|
+
function iosSchemeApprovalKeys(bundleId, schemes) {
|
|
196
|
+
return [.../* @__PURE__ */ new Set([bundleId, ...schemes])].map((target) => `${IOS_SCHEME_APPROVAL_OPENER}-->${target}`);
|
|
154
197
|
}
|
|
155
198
|
function restartedAppNote(restartedPid, lead = " ") {
|
|
156
199
|
return restartedPid ? `${lead}restarted running app (was pid ${restartedPid})` : "";
|
|
@@ -805,4 +848,4 @@ function androidAppProcess(serial, packageName, { exec = null } = {}) {
|
|
|
805
848
|
}
|
|
806
849
|
}
|
|
807
850
|
//#endregion
|
|
808
|
-
export { restartedAppNote as S, installIosApp as _, IOS_DEV_MENU_OFF_DEFAULTS_PLIST as a, launchAndroidReleaseApp as b, androidDevClientUrl as c, devClientUrl as d, deviceShellArg as f, installConflictKind as g, installAndroidApp as h, INSTALL_ERROR as i, clearOtherUserApps as l, hasMetroReverse as m, ANDROID_DISABLE_AUTO_LAUNCH_EXTRA as n, LAUNCH_ERROR as o, ensureMetroReverse as p, DEFAULT_METRO_PORT as r, androidAppProcess as s, ADB_INSTALL_TIMEOUT_MS as t, devClientDeepLink as u, iosAppProcess as v, launchIosApp as x, launchAndroidApp as y };
|
|
851
|
+
export { pickDevClientScheme as C, restartedAppNote as S, schemesFromInfoPlist as T, installIosApp as _, IOS_DEV_MENU_OFF_DEFAULTS_PLIST as a, launchAndroidReleaseApp as b, androidDevClientUrl as c, devClientUrl as d, deviceShellArg as f, installConflictKind as g, installAndroidApp as h, INSTALL_ERROR as i, clearOtherUserApps as l, hasMetroReverse as m, ANDROID_DISABLE_AUTO_LAUNCH_EXTRA as n, LAUNCH_ERROR as o, ensureMetroReverse as p, DEFAULT_METRO_PORT as r, androidAppProcess as s, ADB_INSTALL_TIMEOUT_MS as t, devClientDeepLink as u, iosAppProcess as v, readBundleSchemes as w, launchIosApp as x, launchAndroidApp as y };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { mkdirSync, renameSync, statSync, truncateSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { maintenanceAttemptFile, maintenanceChildLogFile, maintenanceDir } from "@stim-cli/core/state";
|
|
3
|
+
//#region src/maintenance/due.ts
|
|
4
|
+
const DEFERRED_RETRY_MS = 3e5;
|
|
5
|
+
const ATTEMPT_BACKOFF_MS = 6e4;
|
|
6
|
+
function due(state, settings, now, attemptedAt) {
|
|
7
|
+
const elapsed = (stamp) => stamp === void 0 || stamp > now ? Infinity : now - stamp;
|
|
8
|
+
if (elapsed(attemptedAt) < ATTEMPT_BACKOFF_MS) return [];
|
|
9
|
+
return ["pressure", "size"].filter((check) => {
|
|
10
|
+
if (elapsed(state?.deferredAt?.[check]) < DEFERRED_RETRY_MS) return false;
|
|
11
|
+
const interval = check === "pressure" ? settings.pressureCheckMinutes : settings.sizeCheckMinutes;
|
|
12
|
+
return elapsed(state?.lastAt[check]) >= interval * 6e4;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/maintenance/attempt.ts
|
|
17
|
+
const CHILD_LOG_MAX_BYTES = 65536;
|
|
18
|
+
/** Records that a child is about to start, so a child that dies before it can write anything does not respawn on every command. */
|
|
19
|
+
function stampAttempt(now) {
|
|
20
|
+
mkdirSync(maintenanceDir(), { recursive: true });
|
|
21
|
+
const file = maintenanceAttemptFile();
|
|
22
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
23
|
+
writeFileSync(tmp, `${JSON.stringify({ attemptedAt: now })}\n`);
|
|
24
|
+
try {
|
|
25
|
+
renameSync(tmp, file);
|
|
26
|
+
} finally {
|
|
27
|
+
try {
|
|
28
|
+
unlinkSync(tmp);
|
|
29
|
+
} catch {}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function capChildLog() {
|
|
33
|
+
try {
|
|
34
|
+
const file = maintenanceChildLogFile();
|
|
35
|
+
if (statSync(file).size > CHILD_LOG_MAX_BYTES) truncateSync(file);
|
|
36
|
+
} catch {}
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { stampAttempt as n, due as r, capChildLog as t };
|