stim 1.3.1 → 1.5.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 +16 -3
- package/dist/{android-hMj83VpN.mjs → android-DJWiTBkz.mjs} +65 -72
- package/dist/{android-cas-DXorPCi_.mjs → android-cas-CSS8gjR7.mjs} +15 -12
- package/dist/{android-CT-PkXUh.mjs → android-sobvO9ia.mjs} +197 -114
- package/dist/{app-install-DIp9riNx.mjs → app-install--PAocWvq.mjs} +2 -2
- package/dist/{build-slots-C4AouyNz.mjs → build-slots-CuPszJDu.mjs} +7 -8
- package/dist/{cache-manifest-CXR-Y8pH.mjs → cache-manifest-uoOKhgUD.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/cli.mjs +14 -13
- package/dist/collector-run.mjs +4 -4
- package/dist/{command-output-8wHMEde0.mjs → command-output-BuIb_ZOI.mjs} +1 -4
- package/dist/{config-CcefMY2Q.mjs → config-DMP7L7H6.mjs} +52 -52
- package/dist/dependency-state-CTL8A9p3.mjs +76 -0
- package/dist/{deps-0Yt0Inly.mjs → deps-BAGOnrc7.mjs} +1 -1
- package/dist/{dev-client-VfSZNLT4.mjs → dev-client-BoifdqkU.mjs} +12 -12
- package/dist/{device-Bbv45Z9Z.mjs → device-BUw4JBuH.mjs} +7 -7
- package/dist/{xcode-xnxyvJkD.mjs → device-DvKJ454A.mjs} +208 -967
- package/dist/{device-lease-CJwK7OZr.mjs → device-lease-r7yEQ1R8.mjs} +3 -3
- package/dist/{device-pool-CcBNTvM7.mjs → device-pool-DU4FQKp5.mjs} +4 -4
- package/dist/{device-remote-DAA0Zm6Z.mjs → device-remote-BTUqbl0i.mjs} +7 -6
- package/dist/{doctor-B4EITgQB.mjs → doctor-Di_B26uh.mjs} +396 -117
- package/dist/{error-diagnostics-DwhNBFDU.mjs → error-diagnostics-CTePWAzW.mjs} +7 -6
- package/dist/{gc-BRu62v4o.mjs → gc-C20dWw_8.mjs} +61 -27
- package/dist/{guide-D95E0u3i.mjs → guide-sAnoty2y.mjs} +151 -20
- package/dist/guide-status-BF6RsJJp.mjs +271 -0
- package/dist/{ios-DAju3TVy.mjs → ios-BdpkncL6.mjs} +2667 -2607
- package/dist/{ios-device-CWOM_S44.mjs → ios-device-DJOi9FR5.mjs} +1 -1
- package/dist/{logs-CAdwW6c2.mjs → logs-BfQdIhiF.mjs} +5 -5
- package/dist/metro-ato6ef3J.mjs +99 -0
- package/dist/named-ports-DH9SXd0f.mjs +137 -0
- package/dist/{ownership-8O073GIC.mjs → ownership-CD_XnpDu.mjs} +5 -5
- package/dist/{ownership-DXcol4oU.mjs → ownership-CVY9cqCr.mjs} +6 -6
- package/dist/ports-A6uTJSPj.mjs +39 -0
- package/dist/ports-BZprTJRa.mjs +90 -0
- package/dist/{project-fKmuIaMI.mjs → project-B_SDt4ip.mjs} +2 -2
- package/dist/{reclaim-CUmwucWG.mjs → reclaim-C_rB25f4.mjs} +20 -13
- package/dist/{reload-CWpXoOgN.mjs → reload-CYBJbJfI.mjs} +8 -8
- package/dist/rolldown-runtime-BsOwBuO_.mjs +30 -0
- package/dist/{server-bare-DEzPZLvf.mjs → server-bare-H3pAhbMs.mjs} +11 -35
- package/dist/server-expo-CSwUVYOa.mjs +2 -0
- package/dist/{server-expo-DizT4OMk.mjs → server-expo-Ds8_mfng.mjs} +6 -14
- package/dist/{settings-DEJf6_kJ.mjs → settings-kO2ZqIKy.mjs} +2 -2
- package/dist/{slot-launch-CZklomj6.mjs → slot-launch-BpHiHH6A.mjs} +4 -4
- package/dist/{start-B5G4NjiA.mjs → start-DiEfqEWk.mjs} +20 -22
- package/dist/state-CnWzvCWP.mjs +131 -0
- package/dist/{stats-CaaQr4yN.mjs → stats-DHrO0frH.mjs} +4 -4
- package/dist/{stats-BR-kwj0B.mjs → stats-Fo9ACIv7.mjs} +1 -1
- package/dist/{status-CI9clRSb.mjs → status-J5LAXpag.mjs} +15 -12
- package/dist/{stop-CjlgDk0a.mjs → stop-0jJNahwN.mjs} +15 -14
- package/dist/{stop-CQhffpmX.mjs → stop-CM1fejKW.mjs} +2 -2
- package/dist/supervisor-run.d.mts +7 -28
- package/dist/supervisor-run.mjs +20 -11
- package/dist/{teardown--gESs9ck.mjs → teardown-CAVcWeRD.mjs} +148 -109
- package/dist/{workspace-process-lock-IBj1Towr.mjs → workspace-process-lock-Bz19_R9R.mjs} +4 -4
- package/dist/workspace-state-WVwWw_hB.mjs +146 -0
- package/dist/{worktree-DtQGO9-s.mjs → worktree-CeUKDAQw.mjs} +38 -34
- package/dist/{worktree-Eq6TLH8N.mjs → worktree-DJnBbQZ9.mjs} +79 -22
- package/dist/xcode-BqDeRkpT.mjs +860 -0
- package/package.json +7 -7
- package/shim/expo-metro-config.cjs +11 -17
- package/dist/doctor-BueDfLYG.mjs +0 -530
- package/dist/metro-CORqXyTL.mjs +0 -184
- package/dist/ownership-claim-BtPtJVmq.mjs +0 -584
- package/dist/server-expo-44em5Pmg.mjs +0 -2
- package/dist/state-B3XA2wp2.mjs +0 -268
- package/shim/metro-cache-generation.cjs +0 -20
- package/shim/metro-cache-generation.d.cts +0 -5
package/dist/state-B3XA2wp2.mjs
DELETED
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import { D as sameProcessRecord, I as deviceSlotKey, R as parseDeviceSlotKey, k as withDirLock, u as getConfigDir } from "./config-CcefMY2Q.mjs";
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { dirname } from "node:path";
|
|
4
|
-
import { join as join$1, resolve as resolve$1 } from "path";
|
|
5
|
-
import { buildCacheRoot as sharedBuildCache, workspaceId, workspaceName as workspaceName$1, workspaceStateDir as workspaceDir } from "@stim-cli/core";
|
|
6
|
-
//#region src/paths.ts
|
|
7
|
-
const WORKSPACE_METADATA_FILE_NAME = "workspace.json";
|
|
8
|
-
function workspaceMetadataFile(projectRoot) {
|
|
9
|
-
return join$1(workspaceDir(projectRoot), WORKSPACE_METADATA_FILE_NAME);
|
|
10
|
-
}
|
|
11
|
-
function ensureWorkspaceStorage(projectRoot) {
|
|
12
|
-
const canonicalRoot = resolve$1(projectRoot);
|
|
13
|
-
const dir = workspaceDir(canonicalRoot);
|
|
14
|
-
const file = workspaceMetadataFile(canonicalRoot);
|
|
15
|
-
mkdirSync(dir, { recursive: true });
|
|
16
|
-
return withDirLock(join$1(dir, "metadata.lock"), () => {
|
|
17
|
-
if (!existsSync(file)) {
|
|
18
|
-
const metadata = {
|
|
19
|
-
projectRoot: canonicalRoot,
|
|
20
|
-
workspace: workspaceName$1(canonicalRoot),
|
|
21
|
-
version: 1
|
|
22
|
-
};
|
|
23
|
-
const tmp = `${file}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
|
|
24
|
-
writeFileSync(tmp, `${JSON.stringify(metadata, null, 2)}\n`);
|
|
25
|
-
try {
|
|
26
|
-
renameSync(tmp, file);
|
|
27
|
-
} catch (error) {
|
|
28
|
-
rmSync(tmp, { force: true });
|
|
29
|
-
throw error;
|
|
30
|
-
}
|
|
31
|
-
return dir;
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
if (JSON.parse(readFileSync(file, "utf-8")).projectRoot === canonicalRoot) return dir;
|
|
35
|
-
} catch {}
|
|
36
|
-
const error = /* @__PURE__ */ new Error(`Stim workspace collision at ${dir}: its workspace.json does not belong to ${canonicalRoot}.`);
|
|
37
|
-
error.code = "STIM_WORKSPACE_COLLISION";
|
|
38
|
-
throw error;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
function workspaceLogsDir(projectRoot) {
|
|
42
|
-
return join$1(workspaceDir(projectRoot), "logs");
|
|
43
|
-
}
|
|
44
|
-
function workspaceDerivedData(projectRoot) {
|
|
45
|
-
return join$1(workspaceDir(projectRoot), "derived-data");
|
|
46
|
-
}
|
|
47
|
-
function supervisorPidFile(projectRoot) {
|
|
48
|
-
return join$1(workspaceDir(projectRoot), "supervisor.pid");
|
|
49
|
-
}
|
|
50
|
-
function workspaceStateFile(projectRoot) {
|
|
51
|
-
return join$1(workspaceDir(projectRoot), "state.json");
|
|
52
|
-
}
|
|
53
|
-
function workspaceStateLock(projectRoot) {
|
|
54
|
-
return join$1(workspaceDir(projectRoot), "state.lock");
|
|
55
|
-
}
|
|
56
|
-
function supervisorLogFile(projectRoot) {
|
|
57
|
-
return join$1(workspaceLogsDir(projectRoot), "supervisor.log");
|
|
58
|
-
}
|
|
59
|
-
function emulatorLogFile(projectRoot) {
|
|
60
|
-
return join$1(workspaceLogsDir(projectRoot), "emulator.log");
|
|
61
|
-
}
|
|
62
|
-
function sharedCompilationCache() {
|
|
63
|
-
return join$1(getConfigDir(), "compilation-cache");
|
|
64
|
-
}
|
|
65
|
-
function sharedCcache() {
|
|
66
|
-
return join$1(getConfigDir(), "ccache");
|
|
67
|
-
}
|
|
68
|
-
//#endregion
|
|
69
|
-
//#region src/supervisor/state.ts
|
|
70
|
-
const MODE_BARE = "bare-inproc";
|
|
71
|
-
const MODE_EXPO = "expo-child";
|
|
72
|
-
function readMetroTunnel(root) {
|
|
73
|
-
const record = readWorkspaceState(root)?.metroTunnel;
|
|
74
|
-
if (!record || typeof record !== "object") return null;
|
|
75
|
-
const kind = record.kind;
|
|
76
|
-
const url = record.url;
|
|
77
|
-
if (typeof url !== "string" || url.length === 0) return null;
|
|
78
|
-
if (kind === "expo") return {
|
|
79
|
-
kind: "expo",
|
|
80
|
-
url
|
|
81
|
-
};
|
|
82
|
-
if (kind === "managed") {
|
|
83
|
-
const provider = record.provider;
|
|
84
|
-
const pid = record.pid;
|
|
85
|
-
const port = record.port;
|
|
86
|
-
const startedAt = record.startedAt;
|
|
87
|
-
const processToken = record.processToken;
|
|
88
|
-
const logFile = record.logFile;
|
|
89
|
-
if (provider !== "ngrok" && provider !== "cloudflared" || typeof pid !== "number" || typeof port !== "number") return null;
|
|
90
|
-
return {
|
|
91
|
-
kind: "managed",
|
|
92
|
-
provider,
|
|
93
|
-
pid,
|
|
94
|
-
url,
|
|
95
|
-
port,
|
|
96
|
-
startedAt: typeof startedAt === "string" ? startedAt : "",
|
|
97
|
-
processToken: typeof processToken === "string" && processToken.length > 0 ? processToken : null,
|
|
98
|
-
...typeof logFile === "string" && logFile.length > 0 ? { logFile } : {}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
function readWorkspaceState(root) {
|
|
104
|
-
try {
|
|
105
|
-
const parsed = JSON.parse(readFileSync(workspaceStateFile(root), "utf-8"));
|
|
106
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
|
|
107
|
-
return parsed;
|
|
108
|
-
} catch {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
function parseWorkspaceLaunchRecord(value) {
|
|
113
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
114
|
-
const record = value;
|
|
115
|
-
if (typeof record.appId !== "string" || record.appId.length === 0) return null;
|
|
116
|
-
if (typeof record.deviceId !== "string" || record.deviceId.length === 0) return null;
|
|
117
|
-
if (record.metroPort !== null && typeof record.metroPort !== "number") return null;
|
|
118
|
-
if (typeof record.release !== "boolean") return null;
|
|
119
|
-
if (typeof record.launchedAt !== "string") return null;
|
|
120
|
-
return record;
|
|
121
|
-
}
|
|
122
|
-
function readWorkspaceLaunches(root) {
|
|
123
|
-
const launches = readWorkspaceState(root)?.launches;
|
|
124
|
-
if (!launches || typeof launches !== "object" || Array.isArray(launches)) return {};
|
|
125
|
-
const records = {};
|
|
126
|
-
for (const [key, value] of Object.entries(launches)) {
|
|
127
|
-
const record = parseWorkspaceLaunchRecord(value);
|
|
128
|
-
if (parseDeviceSlotKey(key) && record) records[key] = record;
|
|
129
|
-
}
|
|
130
|
-
return records;
|
|
131
|
-
}
|
|
132
|
-
function writeWorkspaceLaunch(root, platform, record, slot = "default") {
|
|
133
|
-
withWorkspaceStateLock(root, () => {
|
|
134
|
-
const state = readWorkspaceState(root) ?? {};
|
|
135
|
-
const launches = state.launches && typeof state.launches === "object" ? state.launches : {};
|
|
136
|
-
replaceWorkspaceState(root, {
|
|
137
|
-
...state,
|
|
138
|
-
launches: {
|
|
139
|
-
...launches,
|
|
140
|
-
[deviceSlotKey(platform, slot)]: record
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
function readRemoteSession(root) {
|
|
146
|
-
const record = readWorkspaceState(root)?.remoteDevice;
|
|
147
|
-
if (!record || typeof record !== "object") return null;
|
|
148
|
-
const id = record.sessionId;
|
|
149
|
-
if (typeof id !== "string" || id.length === 0) return null;
|
|
150
|
-
const platform = record.platform;
|
|
151
|
-
const startedAt = record.startedAt;
|
|
152
|
-
return {
|
|
153
|
-
platform: platform === "ios" || platform === "android" ? platform : null,
|
|
154
|
-
sessionId: id,
|
|
155
|
-
startedAt: typeof startedAt === "string" ? startedAt : null
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
function readRemoteSessionId(root) {
|
|
159
|
-
return readRemoteSession(root)?.sessionId ?? null;
|
|
160
|
-
}
|
|
161
|
-
function clearRemoteSession(root, expectedSessionId) {
|
|
162
|
-
clearWorkspaceStateKey(root, "remoteDevice", (value) => {
|
|
163
|
-
if (typeof value !== "object" || value === null) return false;
|
|
164
|
-
return value.sessionId === expectedSessionId;
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
function withWorkspaceStateLock(root, fn) {
|
|
168
|
-
const file = workspaceStateFile(root);
|
|
169
|
-
return withDirLock(workspaceStateLock(root), fn, { ensureParent: () => {
|
|
170
|
-
ensureWorkspaceStorage(root);
|
|
171
|
-
mkdirSync(dirname(file), { recursive: true });
|
|
172
|
-
} });
|
|
173
|
-
}
|
|
174
|
-
function writeWorkspaceState(root, patch) {
|
|
175
|
-
return withWorkspaceStateLock(root, () => replaceWorkspaceState(root, {
|
|
176
|
-
...readWorkspaceState(root),
|
|
177
|
-
...patch
|
|
178
|
-
}));
|
|
179
|
-
}
|
|
180
|
-
function replaceWorkspaceState(root, state) {
|
|
181
|
-
const file = workspaceStateFile(root);
|
|
182
|
-
mkdirSync(dirname(file), { recursive: true });
|
|
183
|
-
const tmp = `${file}.tmp-${process.pid}`;
|
|
184
|
-
writeFileSync(tmp, `${JSON.stringify(state, null, 2)}\n`);
|
|
185
|
-
renameSync(tmp, file);
|
|
186
|
-
return state;
|
|
187
|
-
}
|
|
188
|
-
function clearWorkspaceSupervisor(root, expected) {
|
|
189
|
-
return withWorkspaceStateLock(root, () => {
|
|
190
|
-
const current = readWorkspaceState(root)?.supervisor;
|
|
191
|
-
if (current && expected !== void 0 && !sameProcessRecord(current, expected)) return false;
|
|
192
|
-
clearWorkspaceStateKey(root, "supervisor", () => true);
|
|
193
|
-
clearExpoMetroTunnel(root);
|
|
194
|
-
if (expected === void 0 || readPidFile(root) === expected?.pid) rmSync(supervisorPidFile(root), { force: true });
|
|
195
|
-
return true;
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
function clearExpoMetroTunnel(root) {
|
|
199
|
-
clearWorkspaceStateKey(root, "metroTunnel", (value) => {
|
|
200
|
-
return typeof value === "object" && value !== null && value.kind === "expo";
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
function clearManagedMetroTunnel(root, expected) {
|
|
204
|
-
if (!existsSync(workspaceStateFile(root))) return true;
|
|
205
|
-
return clearWorkspaceStateKey(root, "metroTunnel", (value) => {
|
|
206
|
-
if (typeof value !== "object" || value === null) return false;
|
|
207
|
-
const record = value;
|
|
208
|
-
return record.kind === "managed" && record.provider === expected.provider && record.pid === expected.pid && record.url === expected.url && record.port === expected.port && record.startedAt === expected.startedAt && (record.processToken ?? null) === (expected.processToken ?? null) && (record.logFile ?? null) === (expected.logFile ?? null);
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
function clearWorkspaceStateKeys(root, keys) {
|
|
212
|
-
if (!existsSync(workspaceStateFile(root))) return;
|
|
213
|
-
withWorkspaceStateLock(root, () => {
|
|
214
|
-
const state = readWorkspaceState(root);
|
|
215
|
-
const file = workspaceStateFile(root);
|
|
216
|
-
if (!state) {
|
|
217
|
-
try {
|
|
218
|
-
rmSync(file, { force: true });
|
|
219
|
-
} catch {}
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
let changed = false;
|
|
223
|
-
for (const key of keys) {
|
|
224
|
-
if (!(key in state)) continue;
|
|
225
|
-
delete state[key];
|
|
226
|
-
changed = true;
|
|
227
|
-
}
|
|
228
|
-
if (!changed) return;
|
|
229
|
-
if (Object.keys(state).length === 0) {
|
|
230
|
-
rmSync(file, { force: true });
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
replaceWorkspaceState(root, state);
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
function clearWorkspaceStateKey(root, key, shouldClear) {
|
|
237
|
-
return withWorkspaceStateLock(root, () => {
|
|
238
|
-
const state = readWorkspaceState(root);
|
|
239
|
-
if (!state || !(key in state)) return true;
|
|
240
|
-
if (!shouldClear(state[key])) return false;
|
|
241
|
-
delete state[key];
|
|
242
|
-
const file = workspaceStateFile(root);
|
|
243
|
-
if (Object.keys(state).length === 0) {
|
|
244
|
-
try {
|
|
245
|
-
rmSync(file, { force: true });
|
|
246
|
-
} catch {}
|
|
247
|
-
return true;
|
|
248
|
-
}
|
|
249
|
-
replaceWorkspaceState(root, state);
|
|
250
|
-
return true;
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
function writePidFile(root, pid) {
|
|
254
|
-
const file = supervisorPidFile(root);
|
|
255
|
-
mkdirSync(dirname(file), { recursive: true });
|
|
256
|
-
writeFileSync(file, `${pid}\n`);
|
|
257
|
-
return file;
|
|
258
|
-
}
|
|
259
|
-
function readPidFile(root) {
|
|
260
|
-
try {
|
|
261
|
-
const pid = parseInt(readFileSync(supervisorPidFile(root), "utf-8").trim(), 10);
|
|
262
|
-
return Number.isFinite(pid) ? pid : null;
|
|
263
|
-
} catch {
|
|
264
|
-
return null;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
//#endregion
|
|
268
|
-
export { supervisorLogFile as C, workspaceLogsDir as D, workspaceId as E, workspaceName$1 as O, sharedCompilationCache as S, workspaceDir as T, writeWorkspaceState as _, clearRemoteSession as a, sharedBuildCache as b, readMetroTunnel as c, readRemoteSessionId as d, readWorkspaceLaunches as f, writeWorkspaceLaunch as g, writePidFile as h, clearManagedMetroTunnel as i, workspaceStateFile as k, readPidFile as l, withWorkspaceStateLock as m, MODE_EXPO as n, clearWorkspaceStateKeys as o, readWorkspaceState as p, clearExpoMetroTunnel as r, clearWorkspaceSupervisor as s, MODE_BARE as t, readRemoteSession as u, emulatorLogFile as v, workspaceDerivedData as w, sharedCcache as x, ensureWorkspaceStorage as y };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { createHash } = require('node:crypto');
|
|
4
|
-
const { mkdirSync } = require('node:fs');
|
|
5
|
-
const { join } = require('node:path');
|
|
6
|
-
|
|
7
|
-
function applyMetroCacheGeneration(config, generation, directory) {
|
|
8
|
-
if (!generation) return config;
|
|
9
|
-
const fileMapCacheDirectory = join(directory, generation);
|
|
10
|
-
mkdirSync(fileMapCacheDirectory, { recursive: true });
|
|
11
|
-
return {
|
|
12
|
-
...config,
|
|
13
|
-
cacheVersion: createHash('sha256')
|
|
14
|
-
.update(JSON.stringify([config.cacheVersion ?? '1.0', generation]))
|
|
15
|
-
.digest('hex'),
|
|
16
|
-
fileMapCacheDirectory,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
module.exports = { applyMetroCacheGeneration };
|