vxrn 2.7.5 → 2.7.6
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/plugins/reactNativeDevServer.mjs +8 -0
- package/dist/plugins/reactNativeDevServer.mjs.map +1 -1
- package/dist/plugins/reactNativeDevServer.native.js +8 -0
- package/dist/plugins/reactNativeDevServer.native.js.map +1 -1
- package/package.json +12 -12
- package/src/plugins/reactNativeDevServer.ts +18 -0
- package/src/utils/createNativeDevEngine.test.ts +75 -0
- package/types/plugins/reactNativeDevServer.d.ts.map +1 -1
|
@@ -295,6 +295,8 @@ ${manifest}\r
|
|
|
295
295
|
return;
|
|
296
296
|
}
|
|
297
297
|
addConnectedNativeClient();
|
|
298
|
+
const clientSuffix = socket.vxrnClientId.slice(-6);
|
|
299
|
+
console.info(`[hmr] native client connected platform=${socket.vxrnPlatform} client=...${clientSuffix}`);
|
|
298
300
|
if (pendingReloadPlatforms.has(socket.vxrnPlatform)) {
|
|
299
301
|
socket.send(JSON.stringify({ type: "hmr:reload" }));
|
|
300
302
|
}
|
|
@@ -315,6 +317,7 @@ ${manifest}\r
|
|
|
315
317
|
}
|
|
316
318
|
});
|
|
317
319
|
socket.on("close", () => {
|
|
320
|
+
console.info(`[hmr] native client disconnected platform=${socket.vxrnPlatform} client=...${clientSuffix}`);
|
|
318
321
|
removeConnectedNativeClient();
|
|
319
322
|
currentEngine.engine.removeClient(socket.vxrnClientId).catch((error) => {
|
|
320
323
|
console.error("[hmr] failed to remove native client", error);
|
|
@@ -359,12 +362,17 @@ ${manifest}\r
|
|
|
359
362
|
if (update.type === "hmr:reload" && !target) {
|
|
360
363
|
pendingReloadPlatforms.add(platform);
|
|
361
364
|
}
|
|
365
|
+
let delivered = 0;
|
|
362
366
|
hmrWSS.clients.forEach((client) => {
|
|
363
367
|
const nativeClient = client;
|
|
364
368
|
if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (!target || nativeClient.vxrnClientId === target)) {
|
|
365
369
|
client.send(msg);
|
|
370
|
+
delivered++;
|
|
366
371
|
}
|
|
367
372
|
});
|
|
373
|
+
if (target && delivered === 0) {
|
|
374
|
+
console.info(`[hmr] ${update.type} for client ...${target.slice(-6)} had no connected socket (dropped)`);
|
|
375
|
+
}
|
|
368
376
|
}
|
|
369
377
|
});
|
|
370
378
|
console.info(`[vxrn] rolldown DevEngine ready for ${platform}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactNativeDevServer.js","names":[],"sources":["plugins/reactNativeDevServer.js"],"sourcesContent":["import { WebSocketServer } from \"ws\";\nimport { createMessageSocket } from \"@vxrn/utils\";\nimport {\n expoClientFromNativeApp\n} from \"@vxrn/utils/nativeAppManifest\";\nimport {\n addConnectedNativeClient,\n removeConnectedNativeClient\n} from \"../utils/connectedNativeClients\";\nimport { URL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport { extname, join, resolve, sep } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { createDevMiddleware } from \"@react-native/dev-middleware\";\nimport { createNativeDevEngine } from \"../utils/createNativeDevEngine\";\nimport { nativeDevBytecodeCompiler } from \"../utils/compileNativeDevBytecode\";\nimport { getBoundPort } from \"../utils/getBoundPort\";\nimport {\n getNativeFramePlatform,\n isNativeBundleFrame,\n symbolicateNativeStack\n} from \"../utils/symbolicateNativeStack\";\nfunction getProjectAssetFile(root, pathname) {\n const filePath = resolve(root, pathname.slice(\"/assets/\".length));\n if (!filePath.startsWith(resolve(root) + sep)) return;\n const type = extname(filePath).slice(1);\n if (getNativeAssetContentType(type) === \"application/octet-stream\") return;\n if (!existsSync(filePath) || !statSync(filePath).isFile()) return;\n return { filePath, type };\n}\nfunction getNativeAssetContentType(type) {\n switch (type.toLowerCase()) {\n case \"bmp\":\n return \"image/bmp\";\n case \"gif\":\n return \"image/gif\";\n case \"glb\":\n return \"model/gltf-binary\";\n case \"jpeg\":\n case \"jpg\":\n return \"image/jpeg\";\n case \"json\":\n return \"application/json\";\n case \"mp4\":\n return \"video/mp4\";\n case \"otf\":\n return \"font/otf\";\n case \"png\":\n return \"image/png\";\n case \"svg\":\n return \"image/svg+xml\";\n case \"ttf\":\n return \"font/ttf\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"woff\":\n return \"font/woff\";\n case \"woff2\":\n return \"font/woff2\";\n default:\n return \"application/octet-stream\";\n }\n}\nfunction createReactNativeDevServerPlugin(options) {\n return {\n name: \"vite-plugin-react-native-server\",\n configureServer(server) {\n const { host } = server.config.server;\n const { root } = server.config;\n const hmrWSS = new WebSocketServer({ noServer: true });\n const clientWSS = new WebSocketServer({ noServer: true });\n const messageWSS = createMessageSocket();\n const validPlatforms = {\n ios: \"ios\",\n android: \"android\"\n };\n const devEngines = {};\n const devEngineCreating = {};\n const warnedProdBundleRequest = /* @__PURE__ */ new Set();\n const pendingReloadPlatforms = /* @__PURE__ */ new Set();\n let compileBytecode;\n const devToolsSocketEndpoints = [\"/inspector/device\", \"/inspector/debug\"];\n const reactNativeDevToolsUrl = `http://${host}:${getBoundPort(server)}`;\n const { middleware, websocketEndpoints } = createDevMiddleware({\n serverBaseUrl: reactNativeDevToolsUrl,\n logger: console,\n unstable_experiments: {\n enableStandaloneFuseboxShell: false\n }\n });\n const projectRequire = createRequire(join(root, \"package.json\"));\n const packageJsonPath = join(root, \"package.json\");\n const packageJson = existsSync(packageJsonPath) ? JSON.parse(readFileSync(packageJsonPath, \"utf8\")) : {};\n const hasExpo = Object.hasOwn(packageJson.dependencies ?? {}, \"expo\") || Object.hasOwn(packageJson.devDependencies ?? {}, \"expo\");\n const nativeApp = hasExpo ? void 0 : globalThis.__vxrnNativeEntryConfig?.app;\n const anonymousScopeId = randomUUID();\n server.middlewares.use(async (req, res, next) => {\n if (!hasExpo && !nativeApp) return next();\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n const url = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\n if (url.pathname !== \"/\" && url.pathname !== \"/manifest\" && url.pathname !== \"/index.exp\") {\n return next();\n }\n const header = req.headers[\"expo-platform\"] || req.headers[\"exponent-platform\"];\n const platform = validPlatforms[url.searchParams.get(\"platform\") || String(header || \"\")];\n if (!platform) return next();\n let expoConfigPath;\n if (!nativeApp) {\n try {\n expoConfigPath = projectRequire.resolve(\"@expo/config\");\n } catch {\n return next();\n }\n }\n try {\n const hostUri = req.headers.host || `localhost:${getBoundPort(server)}`;\n const { exp, mainModuleName, runtimeVersion } = nativeApp ? {\n exp: expoClientFromNativeApp(nativeApp),\n // the vite native server answers any `.bundle` path with the\n // app entry, so `index` is what a one app's native build loads.\n mainModuleName: \"index\",\n runtimeVersion: nativeApp.updates?.runtimeVersion ?? null\n } : await (async () => {\n const expoRequire = createRequire(expoConfigPath);\n const { getConfig } = expoRequire(\"@expo/config\");\n const { resolveRelativeEntryPoint } = expoRequire(\"@expo/config/paths\");\n const { Updates } = expoRequire(\"@expo/config-plugins\");\n const { exp: exp2, pkg } = getConfig(root);\n return {\n exp: exp2,\n mainModuleName: resolveRelativeEntryPoint(root, {\n platform,\n pkg\n }),\n runtimeVersion: await Updates.getRuntimeVersionAsync(\n root,\n {\n ...exp2,\n runtimeVersion: exp2.runtimeVersion ?? { policy: \"sdkVersion\" }\n },\n platform\n )\n };\n })();\n const manifest = JSON.stringify({\n id: randomUUID(),\n createdAt: (/* @__PURE__ */ new Date()).toISOString(),\n runtimeVersion,\n launchAsset: {\n key: \"bundle\",\n contentType: \"application/javascript\",\n url: `http://${hostUri}/${encodeURI(mainModuleName.replace(/^\\/+/, \"\"))}.bundle?platform=${platform}&dev=true&hot=false`\n },\n assets: [],\n metadata: nativeApp ? { oneNativeApp: true } : {},\n extra: {\n eas: { projectId: exp.extra?.eas?.projectId ?? void 0 },\n expoClient: { ...exp, hostUri },\n expoGo: {\n debuggerHost: hostUri,\n developer: { tool: \"expo-cli\", projectRoot: root },\n packagerOpts: { dev: true },\n mainModuleName\n },\n scopeKey: `@anonymous/${exp.slug}-${anonymousScopeId}`\n }\n });\n const headers = {\n \"expo-protocol-version\": \"0\",\n \"expo-sfv-version\": \"0\",\n \"cache-control\": \"private, max-age=0\"\n };\n const accept = String(req.headers.accept || \"\");\n if (accept.includes(\"multipart/mixed\")) {\n const boundary = `vxrn-${randomUUID()}`;\n res.writeHead(200, {\n ...headers,\n \"content-type\": `multipart/mixed; boundary=${boundary}`\n });\n res.end(\n `--${boundary}\\r\ncontent-disposition: form-data; name=\"manifest\"\\r\ncontent-type: application/json\\r\n\\r\n${manifest}\\r\n--${boundary}--\\r\n`\n );\n return;\n }\n const contentType = accept.includes(\"application/expo+json\") ? \"application/expo+json\" : accept.includes(\"application/json\") ? \"application/json\" : \"text/plain\";\n res.writeHead(200, { ...headers, \"content-type\": contentType });\n res.end(req.method === \"HEAD\" ? void 0 : manifest);\n } catch (error) {\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(error instanceof Error ? error.stack || error.message : String(error));\n }\n });\n server.middlewares.use(async (req, res, next) => {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n const rawUrl = req.url || \"/\";\n const rawPathname = rawUrl.split(\"?\", 1)[0];\n if (!rawPathname.startsWith(\"/assets/\")) return next();\n const url = new URL(rawUrl, `http://${req.headers.host || \"localhost\"}`);\n const platform = validPlatforms[url.searchParams.get(\"platform\") || \"\"];\n const engine = platform ? devEngines[platform] : void 0;\n let pathname;\n try {\n pathname = decodeURIComponent(rawPathname);\n } catch {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Invalid native asset path\");\n return;\n }\n const asset = engine?.getAsset(pathname, url.searchParams.get(\"hash\") || void 0) ?? getProjectAssetFile(root, pathname);\n if (!asset) {\n if (!engine) return next();\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Native asset not found\");\n return;\n }\n try {\n const contents = await readFile(asset.filePath);\n const headers = {\n \"Cache-Control\": \"no-cache\",\n \"Accept-Ranges\": \"bytes\",\n \"Content-Length\": String(contents.byteLength),\n \"Content-Type\": getNativeAssetContentType(asset.type)\n };\n const range = req.method === \"GET\" && !req.headers[\"if-range\"] && /^bytes=(\\d*)-(\\d*)$/.exec(req.headers.range || \"\");\n if (range && (range[1] || range[2])) {\n const size = contents.byteLength;\n const start = range[1] ? Number(range[1]) : Math.max(0, size - Number(range[2]));\n const end = range[1] && range[2] ? Math.min(Number(range[2]), size - 1) : size - 1;\n if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start > end || start >= size) {\n res.writeHead(416, {\n ...headers,\n \"Content-Length\": \"0\",\n \"Content-Range\": `bytes */${size}`\n });\n res.end();\n return;\n }\n res.writeHead(206, {\n ...headers,\n \"Content-Length\": String(end - start + 1),\n \"Content-Range\": `bytes ${start}-${end}/${size}`\n });\n res.end(contents.subarray(start, end + 1));\n return;\n }\n res.writeHead(200, headers);\n res.end(req.method === \"HEAD\" ? void 0 : contents);\n } catch (error) {\n console.error(\n `[vxrn] failed to serve native asset ${pathname}: ${error instanceof Error ? error.message : String(error)}`\n );\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(\"Failed to read native asset\");\n }\n });\n server.middlewares.use(middleware);\n server.httpServer?.on(\"upgrade\", (req, socket, head) => {\n const url = req.url || \"\";\n for (const endpoint of devToolsSocketEndpoints) {\n if (url.startsWith(endpoint)) {\n const wss = websocketEndpoints[endpoint];\n wss.handleUpgrade(req, socket, head, (ws) => {\n wss.emit(\"connection\", ws, req);\n });\n return;\n }\n }\n if (url.startsWith(\"/hot\")) {\n const hmrUrl = new URL(url, `http://${req.headers.host || \"localhost\"}`);\n const platform = validPlatforms[hmrUrl.searchParams.get(\"platform\") || \"\"];\n const clientId = hmrUrl.searchParams.get(\"clientId\");\n if (!platform || !clientId) {\n socket.destroy();\n return;\n }\n hmrWSS.handleUpgrade(req, socket, head, (ws) => {\n Object.assign(ws, {\n vxrnClientId: clientId,\n vxrnPlatform: platform\n });\n hmrWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/message\" || url.startsWith(\"/message?\")) {\n messageWSS.handleUpgrade(req, socket, head, (ws) => {\n messageWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/__client\") {\n clientWSS.handleUpgrade(req, socket, head, (ws) => {\n clientWSS.emit(\"connection\", ws, req);\n });\n }\n });\n hmrWSS.on(\"connection\", async (socket) => {\n const currentEngine = devEngines[socket.vxrnPlatform];\n if (!currentEngine) {\n socket.close(1013, \"native dev engine unavailable\");\n return;\n }\n try {\n await currentEngine.engine.registerClient(socket.vxrnClientId);\n } catch (error) {\n console.error(\"[hmr] failed to register native client\", error);\n socket.close(1011, \"native HMR registration failed\");\n return;\n }\n addConnectedNativeClient();\n if (pendingReloadPlatforms.has(socket.vxrnPlatform)) {\n socket.send(JSON.stringify({ type: \"hmr:reload\" }));\n }\n socket.on(\"message\", (message) => {\n const value = message.toString();\n if (value === \"ping\") {\n socket.send(\"pong\");\n return;\n }\n let update;\n try {\n update = JSON.parse(value);\n } catch {\n return;\n }\n if (update.type === \"hmr:invalidate\") {\n socket.send(JSON.stringify({ type: \"hmr:reload\" }));\n }\n });\n socket.on(\"close\", () => {\n removeConnectedNativeClient();\n currentEngine.engine.removeClient(socket.vxrnClientId).catch((error) => {\n console.error(\"[hmr] failed to remove native client\", error);\n });\n });\n socket.on(\"error\", (error) => {\n console.error(\"[hmr] error\", error);\n });\n });\n clientWSS.on(\"connection\", (socket) => {\n socket.on(\"message\", (messageRaw) => {\n const message = JSON.parse(messageRaw.toString());\n switch (message.type) {\n case \"client-log\": {\n if (message.level === \"warn\" && message.data[0]?.startsWith(\n \"Sending `appearanceChanged` with no listeners registered.\"\n )) {\n return;\n }\n console.info(\n ` \\u2460 ${message.level === \"info\" ? \"\" : ` [${message.level}]`}`,\n ...message.data\n );\n return;\n }\n default: {\n console.warn(` \\u2460 Unknown message type`, message);\n }\n }\n });\n });\n const getDevEngine = async (platform) => {\n while (!devEngines[platform]) {\n if (!devEngineCreating[platform]) {\n const creating = (async () => {\n try {\n console.info(`[vxrn] creating rolldown DevEngine for ${platform}...`);\n devEngines[platform] = await createNativeDevEngine({\n root,\n port: getBoundPort(server),\n host: typeof host === \"string\" ? host : \"localhost\",\n platform,\n serverUrl: `http://${typeof host === \"string\" && host !== \"0.0.0.0\" ? host : \"localhost\"}:${getBoundPort(server)}`,\n onHmrUpdate: (update) => {\n const msg = JSON.stringify(update);\n const target = \"clientId\" in update ? update.clientId : void 0;\n if (update.type === \"hmr:reload\" && !target) {\n pendingReloadPlatforms.add(platform);\n }\n hmrWSS.clients.forEach((client) => {\n const nativeClient = client;\n if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (!target || nativeClient.vxrnClientId === target)) {\n client.send(msg);\n }\n });\n }\n });\n console.info(`[vxrn] rolldown DevEngine ready for ${platform}`);\n } finally {\n devEngineCreating[platform] = null;\n }\n })();\n devEngineCreating[platform] = creating;\n }\n await devEngineCreating[platform];\n }\n return devEngines[platform];\n };\n const handleRNBundle = async (req, res) => {\n const url = new URL(req.url, `http://${req.headers.host}`);\n const platformString = url.searchParams.get(\"platform\") || \"\";\n const platform = validPlatforms[platformString];\n if (!platform) {\n return;\n }\n if (url.searchParams.get(\"dev\") === \"false\" && !warnedProdBundleRequest.has(platform)) {\n warnedProdBundleRequest.add(platform);\n console.warn(\n `[vxrn] ${platform} bundle requested with dev=false, but the dev server only builds dev bundles. Serving a dev bundle. Use the build command for a production one.`\n );\n }\n try {\n const bundle = await (await getDevEngine(platform)).getBundle();\n let body = bundle.code;\n if (platform === \"ios\" && url.searchParams.get(\"bytecode\") === \"hermes\") {\n compileBytecode ||= nativeDevBytecodeCompiler(root);\n body = await compileBytecode(\n bundle,\n `${url.origin}/index.bundle?platform=${platform}`\n );\n }\n res.once(\"finish\", () => pendingReloadPlatforms.delete(platform));\n res.writeHead(200, {\n \"Cache-Control\": \"no-store\",\n \"Content-Type\": \"text/javascript\"\n });\n res.end(body);\n } catch (err) {\n console.error(` Error building React Native bundle`);\n console.error(err);\n console.error(\n `\n\n Note, some errors may happen due to a stale Vite cache, you may want to try re-running with the \"--clean\" flag`\n );\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(err instanceof Error ? err.stack || err.message : String(err));\n }\n };\n server.middlewares.use((req, res, next) => {\n if (req.url?.split(\"?\")[0].endsWith(\".bundle\")) {\n handleRNBundle(req, res, next);\n } else {\n next();\n }\n });\n server.middlewares.use(\"/symbolicate\", async (req, res) => {\n try {\n const chunks = [];\n for await (const chunk of req) chunks.push(chunk);\n const body = JSON.parse(\n Buffer.concat(chunks).toString(\"utf8\")\n );\n const stack = body.stack;\n if (!Array.isArray(stack)) {\n throw new Error(\"expected a `stack` array in the request body\");\n }\n const bundleFrame = stack.find((frame) => isNativeBundleFrame(frame.file));\n if (!bundleFrame) {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ stack, codeFrame: null }));\n return;\n }\n const framePlatform = getNativeFramePlatform(bundleFrame.file);\n const platform = validPlatforms[framePlatform ?? \"\"];\n if (!platform) {\n throw new Error(\n `could not tell which platform \"${bundleFrame.file}\" was bundled for`\n );\n }\n const map = await (await getDevEngine(platform)).getSourceMap();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(symbolicateNativeStack(stack, map)));\n } catch (err) {\n console.error(`[vxrn] symbolicate failed`, err);\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n error: err instanceof Error ? err.message : String(err)\n })\n );\n }\n });\n }\n };\n}\nexport {\n createReactNativeDevServerPlugin,\n getNativeAssetContentType\n};\n//# sourceMappingURL=reactNativeDevServer.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reactNativeDevServer.js","names":[],"sources":["plugins/reactNativeDevServer.js"],"sourcesContent":["import { WebSocketServer } from \"ws\";\nimport { createMessageSocket } from \"@vxrn/utils\";\nimport {\n expoClientFromNativeApp\n} from \"@vxrn/utils/nativeAppManifest\";\nimport {\n addConnectedNativeClient,\n removeConnectedNativeClient\n} from \"../utils/connectedNativeClients\";\nimport { URL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport { extname, join, resolve, sep } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { createDevMiddleware } from \"@react-native/dev-middleware\";\nimport { createNativeDevEngine } from \"../utils/createNativeDevEngine\";\nimport { nativeDevBytecodeCompiler } from \"../utils/compileNativeDevBytecode\";\nimport { getBoundPort } from \"../utils/getBoundPort\";\nimport {\n getNativeFramePlatform,\n isNativeBundleFrame,\n symbolicateNativeStack\n} from \"../utils/symbolicateNativeStack\";\nfunction getProjectAssetFile(root, pathname) {\n const filePath = resolve(root, pathname.slice(\"/assets/\".length));\n if (!filePath.startsWith(resolve(root) + sep)) return;\n const type = extname(filePath).slice(1);\n if (getNativeAssetContentType(type) === \"application/octet-stream\") return;\n if (!existsSync(filePath) || !statSync(filePath).isFile()) return;\n return { filePath, type };\n}\nfunction getNativeAssetContentType(type) {\n switch (type.toLowerCase()) {\n case \"bmp\":\n return \"image/bmp\";\n case \"gif\":\n return \"image/gif\";\n case \"glb\":\n return \"model/gltf-binary\";\n case \"jpeg\":\n case \"jpg\":\n return \"image/jpeg\";\n case \"json\":\n return \"application/json\";\n case \"mp4\":\n return \"video/mp4\";\n case \"otf\":\n return \"font/otf\";\n case \"png\":\n return \"image/png\";\n case \"svg\":\n return \"image/svg+xml\";\n case \"ttf\":\n return \"font/ttf\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"woff\":\n return \"font/woff\";\n case \"woff2\":\n return \"font/woff2\";\n default:\n return \"application/octet-stream\";\n }\n}\nfunction createReactNativeDevServerPlugin(options) {\n return {\n name: \"vite-plugin-react-native-server\",\n configureServer(server) {\n const { host } = server.config.server;\n const { root } = server.config;\n const hmrWSS = new WebSocketServer({ noServer: true });\n const clientWSS = new WebSocketServer({ noServer: true });\n const messageWSS = createMessageSocket();\n const validPlatforms = {\n ios: \"ios\",\n android: \"android\"\n };\n const devEngines = {};\n const devEngineCreating = {};\n const warnedProdBundleRequest = /* @__PURE__ */ new Set();\n const pendingReloadPlatforms = /* @__PURE__ */ new Set();\n let compileBytecode;\n const devToolsSocketEndpoints = [\"/inspector/device\", \"/inspector/debug\"];\n const reactNativeDevToolsUrl = `http://${host}:${getBoundPort(server)}`;\n const { middleware, websocketEndpoints } = createDevMiddleware({\n serverBaseUrl: reactNativeDevToolsUrl,\n logger: console,\n unstable_experiments: {\n enableStandaloneFuseboxShell: false\n }\n });\n const projectRequire = createRequire(join(root, \"package.json\"));\n const packageJsonPath = join(root, \"package.json\");\n const packageJson = existsSync(packageJsonPath) ? JSON.parse(readFileSync(packageJsonPath, \"utf8\")) : {};\n const hasExpo = Object.hasOwn(packageJson.dependencies ?? {}, \"expo\") || Object.hasOwn(packageJson.devDependencies ?? {}, \"expo\");\n const nativeApp = hasExpo ? void 0 : globalThis.__vxrnNativeEntryConfig?.app;\n const anonymousScopeId = randomUUID();\n server.middlewares.use(async (req, res, next) => {\n if (!hasExpo && !nativeApp) return next();\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n const url = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\n if (url.pathname !== \"/\" && url.pathname !== \"/manifest\" && url.pathname !== \"/index.exp\") {\n return next();\n }\n const header = req.headers[\"expo-platform\"] || req.headers[\"exponent-platform\"];\n const platform = validPlatforms[url.searchParams.get(\"platform\") || String(header || \"\")];\n if (!platform) return next();\n let expoConfigPath;\n if (!nativeApp) {\n try {\n expoConfigPath = projectRequire.resolve(\"@expo/config\");\n } catch {\n return next();\n }\n }\n try {\n const hostUri = req.headers.host || `localhost:${getBoundPort(server)}`;\n const { exp, mainModuleName, runtimeVersion } = nativeApp ? {\n exp: expoClientFromNativeApp(nativeApp),\n // the vite native server answers any `.bundle` path with the\n // app entry, so `index` is what a one app's native build loads.\n mainModuleName: \"index\",\n runtimeVersion: nativeApp.updates?.runtimeVersion ?? null\n } : await (async () => {\n const expoRequire = createRequire(expoConfigPath);\n const { getConfig } = expoRequire(\"@expo/config\");\n const { resolveRelativeEntryPoint } = expoRequire(\"@expo/config/paths\");\n const { Updates } = expoRequire(\"@expo/config-plugins\");\n const { exp: exp2, pkg } = getConfig(root);\n return {\n exp: exp2,\n mainModuleName: resolveRelativeEntryPoint(root, {\n platform,\n pkg\n }),\n runtimeVersion: await Updates.getRuntimeVersionAsync(\n root,\n {\n ...exp2,\n runtimeVersion: exp2.runtimeVersion ?? { policy: \"sdkVersion\" }\n },\n platform\n )\n };\n })();\n const manifest = JSON.stringify({\n id: randomUUID(),\n createdAt: (/* @__PURE__ */ new Date()).toISOString(),\n runtimeVersion,\n launchAsset: {\n key: \"bundle\",\n contentType: \"application/javascript\",\n url: `http://${hostUri}/${encodeURI(mainModuleName.replace(/^\\/+/, \"\"))}.bundle?platform=${platform}&dev=true&hot=false`\n },\n assets: [],\n metadata: nativeApp ? { oneNativeApp: true } : {},\n extra: {\n eas: { projectId: exp.extra?.eas?.projectId ?? void 0 },\n expoClient: { ...exp, hostUri },\n expoGo: {\n debuggerHost: hostUri,\n developer: { tool: \"expo-cli\", projectRoot: root },\n packagerOpts: { dev: true },\n mainModuleName\n },\n scopeKey: `@anonymous/${exp.slug}-${anonymousScopeId}`\n }\n });\n const headers = {\n \"expo-protocol-version\": \"0\",\n \"expo-sfv-version\": \"0\",\n \"cache-control\": \"private, max-age=0\"\n };\n const accept = String(req.headers.accept || \"\");\n if (accept.includes(\"multipart/mixed\")) {\n const boundary = `vxrn-${randomUUID()}`;\n res.writeHead(200, {\n ...headers,\n \"content-type\": `multipart/mixed; boundary=${boundary}`\n });\n res.end(\n `--${boundary}\\r\ncontent-disposition: form-data; name=\"manifest\"\\r\ncontent-type: application/json\\r\n\\r\n${manifest}\\r\n--${boundary}--\\r\n`\n );\n return;\n }\n const contentType = accept.includes(\"application/expo+json\") ? \"application/expo+json\" : accept.includes(\"application/json\") ? \"application/json\" : \"text/plain\";\n res.writeHead(200, { ...headers, \"content-type\": contentType });\n res.end(req.method === \"HEAD\" ? void 0 : manifest);\n } catch (error) {\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(error instanceof Error ? error.stack || error.message : String(error));\n }\n });\n server.middlewares.use(async (req, res, next) => {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n const rawUrl = req.url || \"/\";\n const rawPathname = rawUrl.split(\"?\", 1)[0];\n if (!rawPathname.startsWith(\"/assets/\")) return next();\n const url = new URL(rawUrl, `http://${req.headers.host || \"localhost\"}`);\n const platform = validPlatforms[url.searchParams.get(\"platform\") || \"\"];\n const engine = platform ? devEngines[platform] : void 0;\n let pathname;\n try {\n pathname = decodeURIComponent(rawPathname);\n } catch {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Invalid native asset path\");\n return;\n }\n const asset = engine?.getAsset(pathname, url.searchParams.get(\"hash\") || void 0) ?? getProjectAssetFile(root, pathname);\n if (!asset) {\n if (!engine) return next();\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Native asset not found\");\n return;\n }\n try {\n const contents = await readFile(asset.filePath);\n const headers = {\n \"Cache-Control\": \"no-cache\",\n \"Accept-Ranges\": \"bytes\",\n \"Content-Length\": String(contents.byteLength),\n \"Content-Type\": getNativeAssetContentType(asset.type)\n };\n const range = req.method === \"GET\" && !req.headers[\"if-range\"] && /^bytes=(\\d*)-(\\d*)$/.exec(req.headers.range || \"\");\n if (range && (range[1] || range[2])) {\n const size = contents.byteLength;\n const start = range[1] ? Number(range[1]) : Math.max(0, size - Number(range[2]));\n const end = range[1] && range[2] ? Math.min(Number(range[2]), size - 1) : size - 1;\n if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start > end || start >= size) {\n res.writeHead(416, {\n ...headers,\n \"Content-Length\": \"0\",\n \"Content-Range\": `bytes */${size}`\n });\n res.end();\n return;\n }\n res.writeHead(206, {\n ...headers,\n \"Content-Length\": String(end - start + 1),\n \"Content-Range\": `bytes ${start}-${end}/${size}`\n });\n res.end(contents.subarray(start, end + 1));\n return;\n }\n res.writeHead(200, headers);\n res.end(req.method === \"HEAD\" ? void 0 : contents);\n } catch (error) {\n console.error(\n `[vxrn] failed to serve native asset ${pathname}: ${error instanceof Error ? error.message : String(error)}`\n );\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(\"Failed to read native asset\");\n }\n });\n server.middlewares.use(middleware);\n server.httpServer?.on(\"upgrade\", (req, socket, head) => {\n const url = req.url || \"\";\n for (const endpoint of devToolsSocketEndpoints) {\n if (url.startsWith(endpoint)) {\n const wss = websocketEndpoints[endpoint];\n wss.handleUpgrade(req, socket, head, (ws) => {\n wss.emit(\"connection\", ws, req);\n });\n return;\n }\n }\n if (url.startsWith(\"/hot\")) {\n const hmrUrl = new URL(url, `http://${req.headers.host || \"localhost\"}`);\n const platform = validPlatforms[hmrUrl.searchParams.get(\"platform\") || \"\"];\n const clientId = hmrUrl.searchParams.get(\"clientId\");\n if (!platform || !clientId) {\n socket.destroy();\n return;\n }\n hmrWSS.handleUpgrade(req, socket, head, (ws) => {\n Object.assign(ws, {\n vxrnClientId: clientId,\n vxrnPlatform: platform\n });\n hmrWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/message\" || url.startsWith(\"/message?\")) {\n messageWSS.handleUpgrade(req, socket, head, (ws) => {\n messageWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/__client\") {\n clientWSS.handleUpgrade(req, socket, head, (ws) => {\n clientWSS.emit(\"connection\", ws, req);\n });\n }\n });\n hmrWSS.on(\"connection\", async (socket) => {\n const currentEngine = devEngines[socket.vxrnPlatform];\n if (!currentEngine) {\n socket.close(1013, \"native dev engine unavailable\");\n return;\n }\n try {\n await currentEngine.engine.registerClient(socket.vxrnClientId);\n } catch (error) {\n console.error(\"[hmr] failed to register native client\", error);\n socket.close(1011, \"native HMR registration failed\");\n return;\n }\n addConnectedNativeClient();\n const clientSuffix = socket.vxrnClientId.slice(-6);\n console.info(\n `[hmr] native client connected platform=${socket.vxrnPlatform} client=...${clientSuffix}`\n );\n if (pendingReloadPlatforms.has(socket.vxrnPlatform)) {\n socket.send(JSON.stringify({ type: \"hmr:reload\" }));\n }\n socket.on(\"message\", (message) => {\n const value = message.toString();\n if (value === \"ping\") {\n socket.send(\"pong\");\n return;\n }\n let update;\n try {\n update = JSON.parse(value);\n } catch {\n return;\n }\n if (update.type === \"hmr:invalidate\") {\n socket.send(JSON.stringify({ type: \"hmr:reload\" }));\n }\n });\n socket.on(\"close\", () => {\n console.info(\n `[hmr] native client disconnected platform=${socket.vxrnPlatform} client=...${clientSuffix}`\n );\n removeConnectedNativeClient();\n currentEngine.engine.removeClient(socket.vxrnClientId).catch((error) => {\n console.error(\"[hmr] failed to remove native client\", error);\n });\n });\n socket.on(\"error\", (error) => {\n console.error(\"[hmr] error\", error);\n });\n });\n clientWSS.on(\"connection\", (socket) => {\n socket.on(\"message\", (messageRaw) => {\n const message = JSON.parse(messageRaw.toString());\n switch (message.type) {\n case \"client-log\": {\n if (message.level === \"warn\" && message.data[0]?.startsWith(\n \"Sending `appearanceChanged` with no listeners registered.\"\n )) {\n return;\n }\n console.info(\n ` \\u2460 ${message.level === \"info\" ? \"\" : ` [${message.level}]`}`,\n ...message.data\n );\n return;\n }\n default: {\n console.warn(` \\u2460 Unknown message type`, message);\n }\n }\n });\n });\n const getDevEngine = async (platform) => {\n while (!devEngines[platform]) {\n if (!devEngineCreating[platform]) {\n const creating = (async () => {\n try {\n console.info(`[vxrn] creating rolldown DevEngine for ${platform}...`);\n devEngines[platform] = await createNativeDevEngine({\n root,\n port: getBoundPort(server),\n host: typeof host === \"string\" ? host : \"localhost\",\n platform,\n serverUrl: `http://${typeof host === \"string\" && host !== \"0.0.0.0\" ? host : \"localhost\"}:${getBoundPort(server)}`,\n onHmrUpdate: (update) => {\n const msg = JSON.stringify(update);\n const target = \"clientId\" in update ? update.clientId : void 0;\n if (update.type === \"hmr:reload\" && !target) {\n pendingReloadPlatforms.add(platform);\n }\n let delivered = 0;\n hmrWSS.clients.forEach((client) => {\n const nativeClient = client;\n if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (!target || nativeClient.vxrnClientId === target)) {\n client.send(msg);\n delivered++;\n }\n });\n if (target && delivered === 0) {\n console.info(\n `[hmr] ${update.type} for client ...${target.slice(-6)} had no connected socket (dropped)`\n );\n }\n }\n });\n console.info(`[vxrn] rolldown DevEngine ready for ${platform}`);\n } finally {\n devEngineCreating[platform] = null;\n }\n })();\n devEngineCreating[platform] = creating;\n }\n await devEngineCreating[platform];\n }\n return devEngines[platform];\n };\n const handleRNBundle = async (req, res) => {\n const url = new URL(req.url, `http://${req.headers.host}`);\n const platformString = url.searchParams.get(\"platform\") || \"\";\n const platform = validPlatforms[platformString];\n if (!platform) {\n return;\n }\n if (url.searchParams.get(\"dev\") === \"false\" && !warnedProdBundleRequest.has(platform)) {\n warnedProdBundleRequest.add(platform);\n console.warn(\n `[vxrn] ${platform} bundle requested with dev=false, but the dev server only builds dev bundles. Serving a dev bundle. Use the build command for a production one.`\n );\n }\n try {\n const bundle = await (await getDevEngine(platform)).getBundle();\n let body = bundle.code;\n if (platform === \"ios\" && url.searchParams.get(\"bytecode\") === \"hermes\") {\n compileBytecode ||= nativeDevBytecodeCompiler(root);\n body = await compileBytecode(\n bundle,\n `${url.origin}/index.bundle?platform=${platform}`\n );\n }\n res.once(\"finish\", () => pendingReloadPlatforms.delete(platform));\n res.writeHead(200, {\n \"Cache-Control\": \"no-store\",\n \"Content-Type\": \"text/javascript\"\n });\n res.end(body);\n } catch (err) {\n console.error(` Error building React Native bundle`);\n console.error(err);\n console.error(\n `\n\n Note, some errors may happen due to a stale Vite cache, you may want to try re-running with the \"--clean\" flag`\n );\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(err instanceof Error ? err.stack || err.message : String(err));\n }\n };\n server.middlewares.use((req, res, next) => {\n if (req.url?.split(\"?\")[0].endsWith(\".bundle\")) {\n handleRNBundle(req, res, next);\n } else {\n next();\n }\n });\n server.middlewares.use(\"/symbolicate\", async (req, res) => {\n try {\n const chunks = [];\n for await (const chunk of req) chunks.push(chunk);\n const body = JSON.parse(\n Buffer.concat(chunks).toString(\"utf8\")\n );\n const stack = body.stack;\n if (!Array.isArray(stack)) {\n throw new Error(\"expected a `stack` array in the request body\");\n }\n const bundleFrame = stack.find((frame) => isNativeBundleFrame(frame.file));\n if (!bundleFrame) {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ stack, codeFrame: null }));\n return;\n }\n const framePlatform = getNativeFramePlatform(bundleFrame.file);\n const platform = validPlatforms[framePlatform ?? \"\"];\n if (!platform) {\n throw new Error(\n `could not tell which platform \"${bundleFrame.file}\" was bundled for`\n );\n }\n const map = await (await getDevEngine(platform)).getSourceMap();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(symbolicateNativeStack(stack, map)));\n } catch (err) {\n console.error(`[vxrn] symbolicate failed`, err);\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n error: err instanceof Error ? err.message : String(err)\n })\n );\n }\n });\n }\n };\n}\nexport {\n createReactNativeDevServerPlugin,\n getNativeAssetContentType\n};\n//# sourceMappingURL=reactNativeDevServer.js.map\n"],"mappings":"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"}
|
|
@@ -367,6 +367,8 @@ ${manifest}\r
|
|
|
367
367
|
return;
|
|
368
368
|
}
|
|
369
369
|
addConnectedNativeClient();
|
|
370
|
+
var clientSuffix = socket.vxrnClientId.slice(-6);
|
|
371
|
+
console.info(`[hmr] native client connected platform=${socket.vxrnPlatform} client=...${clientSuffix}`);
|
|
370
372
|
if (pendingReloadPlatforms.has(socket.vxrnPlatform)) {
|
|
371
373
|
socket.send(JSON.stringify({ type: "hmr:reload" }));
|
|
372
374
|
}
|
|
@@ -387,6 +389,7 @@ ${manifest}\r
|
|
|
387
389
|
}
|
|
388
390
|
});
|
|
389
391
|
socket.on("close", function() {
|
|
392
|
+
console.info(`[hmr] native client disconnected platform=${socket.vxrnPlatform} client=...${clientSuffix}`);
|
|
390
393
|
removeConnectedNativeClient();
|
|
391
394
|
currentEngine.engine.removeClient(socket.vxrnClientId).catch(function(error) {
|
|
392
395
|
console.error("[hmr] failed to remove native client", error);
|
|
@@ -432,12 +435,17 @@ ${manifest}\r
|
|
|
432
435
|
if (update.type === "hmr:reload" && !target) {
|
|
433
436
|
pendingReloadPlatforms.add(platform);
|
|
434
437
|
}
|
|
438
|
+
var delivered = 0;
|
|
435
439
|
hmrWSS.clients.forEach(function(client) {
|
|
436
440
|
var nativeClient = client;
|
|
437
441
|
if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (!target || nativeClient.vxrnClientId === target)) {
|
|
438
442
|
client.send(msg);
|
|
443
|
+
delivered++;
|
|
439
444
|
}
|
|
440
445
|
});
|
|
446
|
+
if (target && delivered === 0) {
|
|
447
|
+
console.info(`[hmr] ${update.type} for client ...${target.slice(-6)} had no connected socket (dropped)`);
|
|
448
|
+
}
|
|
441
449
|
}
|
|
442
450
|
});
|
|
443
451
|
console.info(`[vxrn] rolldown DevEngine ready for ${platform}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactNativeDevServer.native.js","names":[],"sources":["plugins/reactNativeDevServer.native.js"],"sourcesContent":["import { WebSocketServer } from \"ws\";\nimport { createMessageSocket } from \"@vxrn/utils\";\nimport { expoClientFromNativeApp } from \"@vxrn/utils/nativeAppManifest\";\nimport { addConnectedNativeClient, removeConnectedNativeClient } from \"../utils/connectedNativeClients\";\nimport { URL } from \"url\";\nimport { createRequire } from \"module\";\nimport { extname, join, resolve, sep } from \"path\";\nimport { randomUUID } from \"crypto\";\nimport { existsSync, readFileSync, statSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport { createDevMiddleware } from \"@react-native/dev-middleware\";\nimport { createNativeDevEngine } from \"../utils/createNativeDevEngine\";\nimport { nativeDevBytecodeCompiler } from \"../utils/compileNativeDevBytecode\";\nimport { getBoundPort } from \"../utils/getBoundPort\";\nimport { getNativeFramePlatform, isNativeBundleFrame, symbolicateNativeStack } from \"../utils/symbolicateNativeStack\";\nfunction _async_iterator(iterable) {\n var method, async, sync, retry = 2;\n for (\"undefined\" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--; ) {\n if (async && null != (method = iterable[async])) return method.call(iterable);\n if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));\n async = \"@@asyncIterator\", sync = \"@@iterator\";\n }\n throw new TypeError(\"Object is not async iterable\");\n}\nfunction AsyncFromSyncIterator(s) {\n function AsyncFromSyncIteratorContinuation(r) {\n if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\"));\n var done = r.done;\n return Promise.resolve(r.value).then(function(value) {\n return {\n value,\n done\n };\n });\n }\n return AsyncFromSyncIterator = function(s2) {\n this.s = s2, this.n = s2.next;\n }, AsyncFromSyncIterator.prototype = {\n s: null,\n n: null,\n next: function() {\n return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n },\n return: function(value) {\n var ret = this.s.return;\n return void 0 === ret ? Promise.resolve({\n value,\n done: true\n }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));\n },\n throw: function(value) {\n var thr = this.s.return;\n return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));\n }\n }, new AsyncFromSyncIterator(s);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction getProjectAssetFile(root, pathname) {\n var filePath = resolve(root, pathname.slice(\"/assets/\".length));\n if (!filePath.startsWith(resolve(root) + sep)) return;\n var type = extname(filePath).slice(1);\n if (getNativeAssetContentType(type) === \"application/octet-stream\") return;\n if (!existsSync(filePath) || !statSync(filePath).isFile()) return;\n return {\n filePath,\n type\n };\n}\nfunction getNativeAssetContentType(type) {\n switch (type.toLowerCase()) {\n case \"bmp\":\n return \"image/bmp\";\n case \"gif\":\n return \"image/gif\";\n case \"glb\":\n return \"model/gltf-binary\";\n case \"jpeg\":\n case \"jpg\":\n return \"image/jpeg\";\n case \"json\":\n return \"application/json\";\n case \"mp4\":\n return \"video/mp4\";\n case \"otf\":\n return \"font/otf\";\n case \"png\":\n return \"image/png\";\n case \"svg\":\n return \"image/svg+xml\";\n case \"ttf\":\n return \"font/ttf\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"woff\":\n return \"font/woff\";\n case \"woff2\":\n return \"font/woff2\";\n default:\n return \"application/octet-stream\";\n }\n}\nfunction createReactNativeDevServerPlugin(options) {\n return {\n name: \"vite-plugin-react-native-server\",\n configureServer(server) {\n var _packageJson_dependencies, _packageJson_devDependencies;\n var _globalThis___vxrnNativeEntryConfig, _server_httpServer;\n var { host } = server.config.server;\n var { root } = server.config;\n var hmrWSS = new WebSocketServer({\n noServer: true\n });\n var clientWSS = new WebSocketServer({\n noServer: true\n });\n var messageWSS = createMessageSocket();\n var validPlatforms = {\n ios: \"ios\",\n android: \"android\"\n };\n var devEngines = {};\n var devEngineCreating = {};\n var warnedProdBundleRequest = /* @__PURE__ */ new Set();\n var pendingReloadPlatforms = /* @__PURE__ */ new Set();\n var compileBytecode;\n var devToolsSocketEndpoints = [\n \"/inspector/device\",\n \"/inspector/debug\"\n ];\n var reactNativeDevToolsUrl = `http://${host}:${getBoundPort(server)}`;\n var { middleware, websocketEndpoints } = createDevMiddleware({\n serverBaseUrl: reactNativeDevToolsUrl,\n logger: console,\n unstable_experiments: {\n enableStandaloneFuseboxShell: false\n }\n });\n var projectRequire = createRequire(join(root, \"package.json\"));\n var packageJsonPath = join(root, \"package.json\");\n var packageJson = existsSync(packageJsonPath) ? JSON.parse(readFileSync(packageJsonPath, \"utf8\")) : {};\n var hasExpo = Object.hasOwn((_packageJson_dependencies = packageJson.dependencies) !== null && _packageJson_dependencies !== void 0 ? _packageJson_dependencies : {}, \"expo\") || Object.hasOwn((_packageJson_devDependencies = packageJson.devDependencies) !== null && _packageJson_devDependencies !== void 0 ? _packageJson_devDependencies : {}, \"expo\");\n var nativeApp = hasExpo ? void 0 : (_globalThis___vxrnNativeEntryConfig = globalThis.__vxrnNativeEntryConfig) === null || _globalThis___vxrnNativeEntryConfig === void 0 ? void 0 : _globalThis___vxrnNativeEntryConfig.app;\n var anonymousScopeId = randomUUID();\n server.middlewares.use(async function(req, res, next) {\n if (!hasExpo && !nativeApp) return next();\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n var url = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\n if (url.pathname !== \"/\" && url.pathname !== \"/manifest\" && url.pathname !== \"/index.exp\") {\n return next();\n }\n var header = req.headers[\"expo-platform\"] || req.headers[\"exponent-platform\"];\n var platform = validPlatforms[url.searchParams.get(\"platform\") || String(header || \"\")];\n if (!platform) return next();\n var expoConfigPath;\n if (!nativeApp) {\n try {\n expoConfigPath = projectRequire.resolve(\"@expo/config\");\n } catch (unused) {\n return next();\n }\n }\n try {\n var _ref, _ref1;\n var _nativeApp_updates, _exp_extra_eas, _exp_extra;\n var hostUri = req.headers.host || `localhost:${getBoundPort(server)}`;\n var { exp, mainModuleName, runtimeVersion } = nativeApp ? {\n exp: expoClientFromNativeApp(nativeApp),\n // the vite native server answers any `.bundle` path with the\n // app entry, so `index` is what a one app's native build loads.\n mainModuleName: \"index\",\n runtimeVersion: (_ref = (_nativeApp_updates = nativeApp.updates) === null || _nativeApp_updates === void 0 ? void 0 : _nativeApp_updates.runtimeVersion) !== null && _ref !== void 0 ? _ref : null\n } : await (async function() {\n var _exp_runtimeVersion;\n var expoRequire = createRequire(expoConfigPath);\n var { getConfig } = expoRequire(\"@expo/config\");\n var { resolveRelativeEntryPoint } = expoRequire(\"@expo/config/paths\");\n var { Updates } = expoRequire(\"@expo/config-plugins\");\n var { exp: exp2, pkg } = getConfig(root);\n return {\n exp: exp2,\n mainModuleName: resolveRelativeEntryPoint(root, {\n platform,\n pkg\n }),\n runtimeVersion: await Updates.getRuntimeVersionAsync(root, {\n ...exp2,\n runtimeVersion: (_exp_runtimeVersion = exp2.runtimeVersion) !== null && _exp_runtimeVersion !== void 0 ? _exp_runtimeVersion : {\n policy: \"sdkVersion\"\n }\n }, platform)\n };\n })();\n var manifest = JSON.stringify({\n id: randomUUID(),\n createdAt: (/* @__PURE__ */ new Date()).toISOString(),\n runtimeVersion,\n launchAsset: {\n key: \"bundle\",\n contentType: \"application/javascript\",\n url: `http://${hostUri}/${encodeURI(mainModuleName.replace(/^\\/+/, \"\"))}.bundle?platform=${platform}&dev=true&hot=false`\n },\n assets: [],\n metadata: nativeApp ? {\n oneNativeApp: true\n } : {},\n extra: {\n eas: {\n projectId: (_ref1 = (_exp_extra = exp.extra) === null || _exp_extra === void 0 ? void 0 : (_exp_extra_eas = _exp_extra.eas) === null || _exp_extra_eas === void 0 ? void 0 : _exp_extra_eas.projectId) !== null && _ref1 !== void 0 ? _ref1 : void 0\n },\n expoClient: {\n ...exp,\n hostUri\n },\n expoGo: {\n debuggerHost: hostUri,\n developer: {\n tool: \"expo-cli\",\n projectRoot: root\n },\n packagerOpts: {\n dev: true\n },\n mainModuleName\n },\n scopeKey: `@anonymous/${exp.slug}-${anonymousScopeId}`\n }\n });\n var headers = {\n \"expo-protocol-version\": \"0\",\n \"expo-sfv-version\": \"0\",\n \"cache-control\": \"private, max-age=0\"\n };\n var accept = String(req.headers.accept || \"\");\n if (accept.includes(\"multipart/mixed\")) {\n var boundary = `vxrn-${randomUUID()}`;\n res.writeHead(200, {\n ...headers,\n \"content-type\": `multipart/mixed; boundary=${boundary}`\n });\n res.end(`--${boundary}\\r\ncontent-disposition: form-data; name=\"manifest\"\\r\ncontent-type: application/json\\r\n\\r\n${manifest}\\r\n--${boundary}--\\r\n`);\n return;\n }\n var contentType = accept.includes(\"application/expo+json\") ? \"application/expo+json\" : accept.includes(\"application/json\") ? \"application/json\" : \"text/plain\";\n res.writeHead(200, {\n ...headers,\n \"content-type\": contentType\n });\n res.end(req.method === \"HEAD\" ? void 0 : manifest);\n } catch (error) {\n res.writeHead(500, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(error instanceof Error ? error.stack || error.message : String(error));\n }\n });\n server.middlewares.use(async function(req, res, next) {\n var _ref;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n var rawUrl = req.url || \"/\";\n var rawPathname = rawUrl.split(\"?\", 1)[0];\n if (!rawPathname.startsWith(\"/assets/\")) return next();\n var url = new URL(rawUrl, `http://${req.headers.host || \"localhost\"}`);\n var platform = validPlatforms[url.searchParams.get(\"platform\") || \"\"];\n var engine = platform ? devEngines[platform] : void 0;\n var pathname;\n try {\n pathname = decodeURIComponent(rawPathname);\n } catch (unused) {\n res.writeHead(400, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(\"Invalid native asset path\");\n return;\n }\n var asset = (_ref = engine === null || engine === void 0 ? void 0 : engine.getAsset(pathname, url.searchParams.get(\"hash\") || void 0)) !== null && _ref !== void 0 ? _ref : getProjectAssetFile(root, pathname);\n if (!asset) {\n if (!engine) return next();\n res.writeHead(404, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(\"Native asset not found\");\n return;\n }\n try {\n var contents = await readFile(asset.filePath);\n var headers = {\n \"Cache-Control\": \"no-cache\",\n \"Accept-Ranges\": \"bytes\",\n \"Content-Length\": String(contents.byteLength),\n \"Content-Type\": getNativeAssetContentType(asset.type)\n };\n var range = req.method === \"GET\" && !req.headers[\"if-range\"] && /^bytes=(\\d*)-(\\d*)$/.exec(req.headers.range || \"\");\n if (range && (range[1] || range[2])) {\n var size = contents.byteLength;\n var start = range[1] ? Number(range[1]) : Math.max(0, size - Number(range[2]));\n var end = range[1] && range[2] ? Math.min(Number(range[2]), size - 1) : size - 1;\n if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start > end || start >= size) {\n res.writeHead(416, {\n ...headers,\n \"Content-Length\": \"0\",\n \"Content-Range\": `bytes */${size}`\n });\n res.end();\n return;\n }\n res.writeHead(206, {\n ...headers,\n \"Content-Length\": String(end - start + 1),\n \"Content-Range\": `bytes ${start}-${end}/${size}`\n });\n res.end(contents.subarray(start, end + 1));\n return;\n }\n res.writeHead(200, headers);\n res.end(req.method === \"HEAD\" ? void 0 : contents);\n } catch (error) {\n console.error(`[vxrn] failed to serve native asset ${pathname}: ${error instanceof Error ? error.message : String(error)}`);\n res.writeHead(500, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(\"Failed to read native asset\");\n }\n });\n server.middlewares.use(middleware);\n (_server_httpServer = server.httpServer) === null || _server_httpServer === void 0 ? void 0 : _server_httpServer.on(\"upgrade\", function(req, socket, head) {\n var url = req.url || \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n var _loop = function() {\n var endpoint = _step.value;\n if (url.startsWith(endpoint)) {\n var wss = websocketEndpoints[endpoint];\n wss.handleUpgrade(req, socket, head, function(ws) {\n wss.emit(\"connection\", ws, req);\n });\n return {\n v: void 0\n };\n }\n };\n for (var _iterator = devToolsSocketEndpoints[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ret = _loop();\n if (_type_of(_ret) === \"object\") return _ret.v;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (url.startsWith(\"/hot\")) {\n var hmrUrl = new URL(url, `http://${req.headers.host || \"localhost\"}`);\n var platform = validPlatforms[hmrUrl.searchParams.get(\"platform\") || \"\"];\n var clientId = hmrUrl.searchParams.get(\"clientId\");\n if (!platform || !clientId) {\n socket.destroy();\n return;\n }\n hmrWSS.handleUpgrade(req, socket, head, function(ws) {\n Object.assign(ws, {\n vxrnClientId: clientId,\n vxrnPlatform: platform\n });\n hmrWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/message\" || url.startsWith(\"/message?\")) {\n messageWSS.handleUpgrade(req, socket, head, function(ws) {\n messageWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/__client\") {\n clientWSS.handleUpgrade(req, socket, head, function(ws) {\n clientWSS.emit(\"connection\", ws, req);\n });\n }\n });\n hmrWSS.on(\"connection\", async function(socket) {\n var currentEngine = devEngines[socket.vxrnPlatform];\n if (!currentEngine) {\n socket.close(1013, \"native dev engine unavailable\");\n return;\n }\n try {\n await currentEngine.engine.registerClient(socket.vxrnClientId);\n } catch (error) {\n console.error(\"[hmr] failed to register native client\", error);\n socket.close(1011, \"native HMR registration failed\");\n return;\n }\n addConnectedNativeClient();\n if (pendingReloadPlatforms.has(socket.vxrnPlatform)) {\n socket.send(JSON.stringify({\n type: \"hmr:reload\"\n }));\n }\n socket.on(\"message\", function(message) {\n var value = message.toString();\n if (value === \"ping\") {\n socket.send(\"pong\");\n return;\n }\n var update;\n try {\n update = JSON.parse(value);\n } catch (unused) {\n return;\n }\n if (update.type === \"hmr:invalidate\") {\n socket.send(JSON.stringify({\n type: \"hmr:reload\"\n }));\n }\n });\n socket.on(\"close\", function() {\n removeConnectedNativeClient();\n currentEngine.engine.removeClient(socket.vxrnClientId).catch(function(error) {\n console.error(\"[hmr] failed to remove native client\", error);\n });\n });\n socket.on(\"error\", function(error) {\n console.error(\"[hmr] error\", error);\n });\n });\n clientWSS.on(\"connection\", function(socket) {\n socket.on(\"message\", function(messageRaw) {\n var message = JSON.parse(messageRaw.toString());\n switch (message.type) {\n case \"client-log\": {\n var _message_data_;\n if (message.level === \"warn\" && ((_message_data_ = message.data[0]) === null || _message_data_ === void 0 ? void 0 : _message_data_.startsWith(\"Sending `appearanceChanged` with no listeners registered.\"))) {\n return;\n }\n console.info(` \\u2460 ${message.level === \"info\" ? \"\" : ` [${message.level}]`}`, ...message.data);\n return;\n }\n default: {\n console.warn(` \\u2460 Unknown message type`, message);\n }\n }\n });\n });\n var getDevEngine = async function getDevEngine2(platform) {\n while (!devEngines[platform]) {\n if (!devEngineCreating[platform]) {\n var creating = (async function() {\n try {\n console.info(`[vxrn] creating rolldown DevEngine for ${platform}...`);\n devEngines[platform] = await createNativeDevEngine({\n root,\n port: getBoundPort(server),\n host: typeof host === \"string\" ? host : \"localhost\",\n platform,\n serverUrl: `http://${typeof host === \"string\" && host !== \"0.0.0.0\" ? host : \"localhost\"}:${getBoundPort(server)}`,\n onHmrUpdate: function onHmrUpdate(update) {\n var msg = JSON.stringify(update);\n var target = \"clientId\" in update ? update.clientId : void 0;\n if (update.type === \"hmr:reload\" && !target) {\n pendingReloadPlatforms.add(platform);\n }\n hmrWSS.clients.forEach(function(client) {\n var nativeClient = client;\n if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (!target || nativeClient.vxrnClientId === target)) {\n client.send(msg);\n }\n });\n }\n });\n console.info(`[vxrn] rolldown DevEngine ready for ${platform}`);\n } finally {\n devEngineCreating[platform] = null;\n }\n })();\n devEngineCreating[platform] = creating;\n }\n await devEngineCreating[platform];\n }\n return devEngines[platform];\n };\n var handleRNBundle = async function handleRNBundle2(req, res) {\n var url = new URL(req.url, `http://${req.headers.host}`);\n var platformString = url.searchParams.get(\"platform\") || \"\";\n var platform = validPlatforms[platformString];\n if (!platform) {\n return;\n }\n if (url.searchParams.get(\"dev\") === \"false\" && !warnedProdBundleRequest.has(platform)) {\n warnedProdBundleRequest.add(platform);\n console.warn(`[vxrn] ${platform} bundle requested with dev=false, but the dev server only builds dev bundles. Serving a dev bundle. Use the build command for a production one.`);\n }\n try {\n var bundle = await (await getDevEngine(platform)).getBundle();\n var body = bundle.code;\n if (platform === \"ios\" && url.searchParams.get(\"bytecode\") === \"hermes\") {\n compileBytecode || (compileBytecode = nativeDevBytecodeCompiler(root));\n body = await compileBytecode(bundle, `${url.origin}/index.bundle?platform=${platform}`);\n }\n res.once(\"finish\", function() {\n return pendingReloadPlatforms.delete(platform);\n });\n res.writeHead(200, {\n \"Cache-Control\": \"no-store\",\n \"Content-Type\": \"text/javascript\"\n });\n res.end(body);\n } catch (err) {\n console.error(` Error building React Native bundle`);\n console.error(err);\n console.error(`\n\n Note, some errors may happen due to a stale Vite cache, you may want to try re-running with the \"--clean\" flag`);\n res.writeHead(500, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(err instanceof Error ? err.stack || err.message : String(err));\n }\n };\n server.middlewares.use(function(req, res, next) {\n var _req_url;\n if ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.split(\"?\")[0].endsWith(\".bundle\")) {\n handleRNBundle(req, res, next);\n } else {\n next();\n }\n });\n server.middlewares.use(\"/symbolicate\", async function(req, res) {\n try {\n var chunks = [];\n {\n var _iteratorAbruptCompletion = false, _didIteratorError = false, _iteratorError, _return;\n try {\n var _iterator = _async_iterator(req);\n if (_iterator === null || typeof _iterator !== \"object\" && typeof _iterator !== \"function\") throw new TypeError(\"Iterator result is not an object\");\n for (var _next = _iterator.next, _step; ; _iteratorAbruptCompletion = false) {\n _step = await Reflect.apply(_next, _iterator, []);\n if (_step === null || typeof _step !== \"object\" && typeof _step !== \"function\") throw new TypeError(\"Iterator result is not an object\");\n _iteratorAbruptCompletion = !_step.done;\n if (!_iteratorAbruptCompletion) break;\n var _value = _step.value;\n var chunk = _value;\n chunks.push(chunk);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (_iteratorAbruptCompletion && (_return = _iterator.return) != null) {\n _step = await Reflect.apply(_return, _iterator, []);\n if (_step === null || typeof _step !== \"object\" && typeof _step !== \"function\") throw new TypeError(\"Iterator result is not an object\");\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var body = JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n var stack = body.stack;\n if (!Array.isArray(stack)) {\n throw new Error(\"expected a `stack` array in the request body\");\n }\n var bundleFrame = stack.find(function(frame) {\n return isNativeBundleFrame(frame.file);\n });\n if (!bundleFrame) {\n res.writeHead(200, {\n \"Content-Type\": \"application/json\"\n });\n res.end(JSON.stringify({\n stack,\n codeFrame: null\n }));\n return;\n }\n var framePlatform = getNativeFramePlatform(bundleFrame.file);\n var platform = validPlatforms[framePlatform !== null && framePlatform !== void 0 ? framePlatform : \"\"];\n if (!platform) {\n throw new Error(`could not tell which platform \"${bundleFrame.file}\" was bundled for`);\n }\n var map = await (await getDevEngine(platform)).getSourceMap();\n res.writeHead(200, {\n \"Content-Type\": \"application/json\"\n });\n res.end(JSON.stringify(symbolicateNativeStack(stack, map)));\n } catch (err) {\n console.error(`[vxrn] symbolicate failed`, err);\n res.writeHead(500, {\n \"Content-Type\": \"application/json\"\n });\n res.end(JSON.stringify({\n error: err instanceof Error ? err.message : String(err)\n }));\n }\n });\n }\n };\n}\nexport {\n createReactNativeDevServerPlugin,\n getNativeAssetContentType\n};\n//# sourceMappingURL=reactNativeDevServer.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reactNativeDevServer.native.js","names":[],"sources":["plugins/reactNativeDevServer.native.js"],"sourcesContent":["import { WebSocketServer } from \"ws\";\nimport { createMessageSocket } from \"@vxrn/utils\";\nimport { expoClientFromNativeApp } from \"@vxrn/utils/nativeAppManifest\";\nimport { addConnectedNativeClient, removeConnectedNativeClient } from \"../utils/connectedNativeClients\";\nimport { URL } from \"url\";\nimport { createRequire } from \"module\";\nimport { extname, join, resolve, sep } from \"path\";\nimport { randomUUID } from \"crypto\";\nimport { existsSync, readFileSync, statSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport { createDevMiddleware } from \"@react-native/dev-middleware\";\nimport { createNativeDevEngine } from \"../utils/createNativeDevEngine\";\nimport { nativeDevBytecodeCompiler } from \"../utils/compileNativeDevBytecode\";\nimport { getBoundPort } from \"../utils/getBoundPort\";\nimport { getNativeFramePlatform, isNativeBundleFrame, symbolicateNativeStack } from \"../utils/symbolicateNativeStack\";\nfunction _async_iterator(iterable) {\n var method, async, sync, retry = 2;\n for (\"undefined\" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--; ) {\n if (async && null != (method = iterable[async])) return method.call(iterable);\n if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));\n async = \"@@asyncIterator\", sync = \"@@iterator\";\n }\n throw new TypeError(\"Object is not async iterable\");\n}\nfunction AsyncFromSyncIterator(s) {\n function AsyncFromSyncIteratorContinuation(r) {\n if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\"));\n var done = r.done;\n return Promise.resolve(r.value).then(function(value) {\n return {\n value,\n done\n };\n });\n }\n return AsyncFromSyncIterator = function(s2) {\n this.s = s2, this.n = s2.next;\n }, AsyncFromSyncIterator.prototype = {\n s: null,\n n: null,\n next: function() {\n return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n },\n return: function(value) {\n var ret = this.s.return;\n return void 0 === ret ? Promise.resolve({\n value,\n done: true\n }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));\n },\n throw: function(value) {\n var thr = this.s.return;\n return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));\n }\n }, new AsyncFromSyncIterator(s);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction getProjectAssetFile(root, pathname) {\n var filePath = resolve(root, pathname.slice(\"/assets/\".length));\n if (!filePath.startsWith(resolve(root) + sep)) return;\n var type = extname(filePath).slice(1);\n if (getNativeAssetContentType(type) === \"application/octet-stream\") return;\n if (!existsSync(filePath) || !statSync(filePath).isFile()) return;\n return {\n filePath,\n type\n };\n}\nfunction getNativeAssetContentType(type) {\n switch (type.toLowerCase()) {\n case \"bmp\":\n return \"image/bmp\";\n case \"gif\":\n return \"image/gif\";\n case \"glb\":\n return \"model/gltf-binary\";\n case \"jpeg\":\n case \"jpg\":\n return \"image/jpeg\";\n case \"json\":\n return \"application/json\";\n case \"mp4\":\n return \"video/mp4\";\n case \"otf\":\n return \"font/otf\";\n case \"png\":\n return \"image/png\";\n case \"svg\":\n return \"image/svg+xml\";\n case \"ttf\":\n return \"font/ttf\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"woff\":\n return \"font/woff\";\n case \"woff2\":\n return \"font/woff2\";\n default:\n return \"application/octet-stream\";\n }\n}\nfunction createReactNativeDevServerPlugin(options) {\n return {\n name: \"vite-plugin-react-native-server\",\n configureServer(server) {\n var _packageJson_dependencies, _packageJson_devDependencies;\n var _globalThis___vxrnNativeEntryConfig, _server_httpServer;\n var { host } = server.config.server;\n var { root } = server.config;\n var hmrWSS = new WebSocketServer({\n noServer: true\n });\n var clientWSS = new WebSocketServer({\n noServer: true\n });\n var messageWSS = createMessageSocket();\n var validPlatforms = {\n ios: \"ios\",\n android: \"android\"\n };\n var devEngines = {};\n var devEngineCreating = {};\n var warnedProdBundleRequest = /* @__PURE__ */ new Set();\n var pendingReloadPlatforms = /* @__PURE__ */ new Set();\n var compileBytecode;\n var devToolsSocketEndpoints = [\n \"/inspector/device\",\n \"/inspector/debug\"\n ];\n var reactNativeDevToolsUrl = `http://${host}:${getBoundPort(server)}`;\n var { middleware, websocketEndpoints } = createDevMiddleware({\n serverBaseUrl: reactNativeDevToolsUrl,\n logger: console,\n unstable_experiments: {\n enableStandaloneFuseboxShell: false\n }\n });\n var projectRequire = createRequire(join(root, \"package.json\"));\n var packageJsonPath = join(root, \"package.json\");\n var packageJson = existsSync(packageJsonPath) ? JSON.parse(readFileSync(packageJsonPath, \"utf8\")) : {};\n var hasExpo = Object.hasOwn((_packageJson_dependencies = packageJson.dependencies) !== null && _packageJson_dependencies !== void 0 ? _packageJson_dependencies : {}, \"expo\") || Object.hasOwn((_packageJson_devDependencies = packageJson.devDependencies) !== null && _packageJson_devDependencies !== void 0 ? _packageJson_devDependencies : {}, \"expo\");\n var nativeApp = hasExpo ? void 0 : (_globalThis___vxrnNativeEntryConfig = globalThis.__vxrnNativeEntryConfig) === null || _globalThis___vxrnNativeEntryConfig === void 0 ? void 0 : _globalThis___vxrnNativeEntryConfig.app;\n var anonymousScopeId = randomUUID();\n server.middlewares.use(async function(req, res, next) {\n if (!hasExpo && !nativeApp) return next();\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n var url = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\n if (url.pathname !== \"/\" && url.pathname !== \"/manifest\" && url.pathname !== \"/index.exp\") {\n return next();\n }\n var header = req.headers[\"expo-platform\"] || req.headers[\"exponent-platform\"];\n var platform = validPlatforms[url.searchParams.get(\"platform\") || String(header || \"\")];\n if (!platform) return next();\n var expoConfigPath;\n if (!nativeApp) {\n try {\n expoConfigPath = projectRequire.resolve(\"@expo/config\");\n } catch (unused) {\n return next();\n }\n }\n try {\n var _ref, _ref1;\n var _nativeApp_updates, _exp_extra_eas, _exp_extra;\n var hostUri = req.headers.host || `localhost:${getBoundPort(server)}`;\n var { exp, mainModuleName, runtimeVersion } = nativeApp ? {\n exp: expoClientFromNativeApp(nativeApp),\n // the vite native server answers any `.bundle` path with the\n // app entry, so `index` is what a one app's native build loads.\n mainModuleName: \"index\",\n runtimeVersion: (_ref = (_nativeApp_updates = nativeApp.updates) === null || _nativeApp_updates === void 0 ? void 0 : _nativeApp_updates.runtimeVersion) !== null && _ref !== void 0 ? _ref : null\n } : await (async function() {\n var _exp_runtimeVersion;\n var expoRequire = createRequire(expoConfigPath);\n var { getConfig } = expoRequire(\"@expo/config\");\n var { resolveRelativeEntryPoint } = expoRequire(\"@expo/config/paths\");\n var { Updates } = expoRequire(\"@expo/config-plugins\");\n var { exp: exp2, pkg } = getConfig(root);\n return {\n exp: exp2,\n mainModuleName: resolveRelativeEntryPoint(root, {\n platform,\n pkg\n }),\n runtimeVersion: await Updates.getRuntimeVersionAsync(root, {\n ...exp2,\n runtimeVersion: (_exp_runtimeVersion = exp2.runtimeVersion) !== null && _exp_runtimeVersion !== void 0 ? _exp_runtimeVersion : {\n policy: \"sdkVersion\"\n }\n }, platform)\n };\n })();\n var manifest = JSON.stringify({\n id: randomUUID(),\n createdAt: (/* @__PURE__ */ new Date()).toISOString(),\n runtimeVersion,\n launchAsset: {\n key: \"bundle\",\n contentType: \"application/javascript\",\n url: `http://${hostUri}/${encodeURI(mainModuleName.replace(/^\\/+/, \"\"))}.bundle?platform=${platform}&dev=true&hot=false`\n },\n assets: [],\n metadata: nativeApp ? {\n oneNativeApp: true\n } : {},\n extra: {\n eas: {\n projectId: (_ref1 = (_exp_extra = exp.extra) === null || _exp_extra === void 0 ? void 0 : (_exp_extra_eas = _exp_extra.eas) === null || _exp_extra_eas === void 0 ? void 0 : _exp_extra_eas.projectId) !== null && _ref1 !== void 0 ? _ref1 : void 0\n },\n expoClient: {\n ...exp,\n hostUri\n },\n expoGo: {\n debuggerHost: hostUri,\n developer: {\n tool: \"expo-cli\",\n projectRoot: root\n },\n packagerOpts: {\n dev: true\n },\n mainModuleName\n },\n scopeKey: `@anonymous/${exp.slug}-${anonymousScopeId}`\n }\n });\n var headers = {\n \"expo-protocol-version\": \"0\",\n \"expo-sfv-version\": \"0\",\n \"cache-control\": \"private, max-age=0\"\n };\n var accept = String(req.headers.accept || \"\");\n if (accept.includes(\"multipart/mixed\")) {\n var boundary = `vxrn-${randomUUID()}`;\n res.writeHead(200, {\n ...headers,\n \"content-type\": `multipart/mixed; boundary=${boundary}`\n });\n res.end(`--${boundary}\\r\ncontent-disposition: form-data; name=\"manifest\"\\r\ncontent-type: application/json\\r\n\\r\n${manifest}\\r\n--${boundary}--\\r\n`);\n return;\n }\n var contentType = accept.includes(\"application/expo+json\") ? \"application/expo+json\" : accept.includes(\"application/json\") ? \"application/json\" : \"text/plain\";\n res.writeHead(200, {\n ...headers,\n \"content-type\": contentType\n });\n res.end(req.method === \"HEAD\" ? void 0 : manifest);\n } catch (error) {\n res.writeHead(500, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(error instanceof Error ? error.stack || error.message : String(error));\n }\n });\n server.middlewares.use(async function(req, res, next) {\n var _ref;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return next();\n var rawUrl = req.url || \"/\";\n var rawPathname = rawUrl.split(\"?\", 1)[0];\n if (!rawPathname.startsWith(\"/assets/\")) return next();\n var url = new URL(rawUrl, `http://${req.headers.host || \"localhost\"}`);\n var platform = validPlatforms[url.searchParams.get(\"platform\") || \"\"];\n var engine = platform ? devEngines[platform] : void 0;\n var pathname;\n try {\n pathname = decodeURIComponent(rawPathname);\n } catch (unused) {\n res.writeHead(400, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(\"Invalid native asset path\");\n return;\n }\n var asset = (_ref = engine === null || engine === void 0 ? void 0 : engine.getAsset(pathname, url.searchParams.get(\"hash\") || void 0)) !== null && _ref !== void 0 ? _ref : getProjectAssetFile(root, pathname);\n if (!asset) {\n if (!engine) return next();\n res.writeHead(404, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(\"Native asset not found\");\n return;\n }\n try {\n var contents = await readFile(asset.filePath);\n var headers = {\n \"Cache-Control\": \"no-cache\",\n \"Accept-Ranges\": \"bytes\",\n \"Content-Length\": String(contents.byteLength),\n \"Content-Type\": getNativeAssetContentType(asset.type)\n };\n var range = req.method === \"GET\" && !req.headers[\"if-range\"] && /^bytes=(\\d*)-(\\d*)$/.exec(req.headers.range || \"\");\n if (range && (range[1] || range[2])) {\n var size = contents.byteLength;\n var start = range[1] ? Number(range[1]) : Math.max(0, size - Number(range[2]));\n var end = range[1] && range[2] ? Math.min(Number(range[2]), size - 1) : size - 1;\n if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start > end || start >= size) {\n res.writeHead(416, {\n ...headers,\n \"Content-Length\": \"0\",\n \"Content-Range\": `bytes */${size}`\n });\n res.end();\n return;\n }\n res.writeHead(206, {\n ...headers,\n \"Content-Length\": String(end - start + 1),\n \"Content-Range\": `bytes ${start}-${end}/${size}`\n });\n res.end(contents.subarray(start, end + 1));\n return;\n }\n res.writeHead(200, headers);\n res.end(req.method === \"HEAD\" ? void 0 : contents);\n } catch (error) {\n console.error(`[vxrn] failed to serve native asset ${pathname}: ${error instanceof Error ? error.message : String(error)}`);\n res.writeHead(500, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(\"Failed to read native asset\");\n }\n });\n server.middlewares.use(middleware);\n (_server_httpServer = server.httpServer) === null || _server_httpServer === void 0 ? void 0 : _server_httpServer.on(\"upgrade\", function(req, socket, head) {\n var url = req.url || \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n var _loop = function() {\n var endpoint = _step.value;\n if (url.startsWith(endpoint)) {\n var wss = websocketEndpoints[endpoint];\n wss.handleUpgrade(req, socket, head, function(ws) {\n wss.emit(\"connection\", ws, req);\n });\n return {\n v: void 0\n };\n }\n };\n for (var _iterator = devToolsSocketEndpoints[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ret = _loop();\n if (_type_of(_ret) === \"object\") return _ret.v;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (url.startsWith(\"/hot\")) {\n var hmrUrl = new URL(url, `http://${req.headers.host || \"localhost\"}`);\n var platform = validPlatforms[hmrUrl.searchParams.get(\"platform\") || \"\"];\n var clientId = hmrUrl.searchParams.get(\"clientId\");\n if (!platform || !clientId) {\n socket.destroy();\n return;\n }\n hmrWSS.handleUpgrade(req, socket, head, function(ws) {\n Object.assign(ws, {\n vxrnClientId: clientId,\n vxrnPlatform: platform\n });\n hmrWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/message\" || url.startsWith(\"/message?\")) {\n messageWSS.handleUpgrade(req, socket, head, function(ws) {\n messageWSS.emit(\"connection\", ws, req);\n });\n return;\n }\n if (url === \"/__client\") {\n clientWSS.handleUpgrade(req, socket, head, function(ws) {\n clientWSS.emit(\"connection\", ws, req);\n });\n }\n });\n hmrWSS.on(\"connection\", async function(socket) {\n var currentEngine = devEngines[socket.vxrnPlatform];\n if (!currentEngine) {\n socket.close(1013, \"native dev engine unavailable\");\n return;\n }\n try {\n await currentEngine.engine.registerClient(socket.vxrnClientId);\n } catch (error) {\n console.error(\"[hmr] failed to register native client\", error);\n socket.close(1011, \"native HMR registration failed\");\n return;\n }\n addConnectedNativeClient();\n var clientSuffix = socket.vxrnClientId.slice(-6);\n console.info(`[hmr] native client connected platform=${socket.vxrnPlatform} client=...${clientSuffix}`);\n if (pendingReloadPlatforms.has(socket.vxrnPlatform)) {\n socket.send(JSON.stringify({\n type: \"hmr:reload\"\n }));\n }\n socket.on(\"message\", function(message) {\n var value = message.toString();\n if (value === \"ping\") {\n socket.send(\"pong\");\n return;\n }\n var update;\n try {\n update = JSON.parse(value);\n } catch (unused) {\n return;\n }\n if (update.type === \"hmr:invalidate\") {\n socket.send(JSON.stringify({\n type: \"hmr:reload\"\n }));\n }\n });\n socket.on(\"close\", function() {\n console.info(`[hmr] native client disconnected platform=${socket.vxrnPlatform} client=...${clientSuffix}`);\n removeConnectedNativeClient();\n currentEngine.engine.removeClient(socket.vxrnClientId).catch(function(error) {\n console.error(\"[hmr] failed to remove native client\", error);\n });\n });\n socket.on(\"error\", function(error) {\n console.error(\"[hmr] error\", error);\n });\n });\n clientWSS.on(\"connection\", function(socket) {\n socket.on(\"message\", function(messageRaw) {\n var message = JSON.parse(messageRaw.toString());\n switch (message.type) {\n case \"client-log\": {\n var _message_data_;\n if (message.level === \"warn\" && ((_message_data_ = message.data[0]) === null || _message_data_ === void 0 ? void 0 : _message_data_.startsWith(\"Sending `appearanceChanged` with no listeners registered.\"))) {\n return;\n }\n console.info(` \\u2460 ${message.level === \"info\" ? \"\" : ` [${message.level}]`}`, ...message.data);\n return;\n }\n default: {\n console.warn(` \\u2460 Unknown message type`, message);\n }\n }\n });\n });\n var getDevEngine = async function getDevEngine2(platform) {\n while (!devEngines[platform]) {\n if (!devEngineCreating[platform]) {\n var creating = (async function() {\n try {\n console.info(`[vxrn] creating rolldown DevEngine for ${platform}...`);\n devEngines[platform] = await createNativeDevEngine({\n root,\n port: getBoundPort(server),\n host: typeof host === \"string\" ? host : \"localhost\",\n platform,\n serverUrl: `http://${typeof host === \"string\" && host !== \"0.0.0.0\" ? host : \"localhost\"}:${getBoundPort(server)}`,\n onHmrUpdate: function onHmrUpdate(update) {\n var msg = JSON.stringify(update);\n var target = \"clientId\" in update ? update.clientId : void 0;\n if (update.type === \"hmr:reload\" && !target) {\n pendingReloadPlatforms.add(platform);\n }\n var delivered = 0;\n hmrWSS.clients.forEach(function(client) {\n var nativeClient = client;\n if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (!target || nativeClient.vxrnClientId === target)) {\n client.send(msg);\n delivered++;\n }\n });\n if (target && delivered === 0) {\n console.info(`[hmr] ${update.type} for client ...${target.slice(-6)} had no connected socket (dropped)`);\n }\n }\n });\n console.info(`[vxrn] rolldown DevEngine ready for ${platform}`);\n } finally {\n devEngineCreating[platform] = null;\n }\n })();\n devEngineCreating[platform] = creating;\n }\n await devEngineCreating[platform];\n }\n return devEngines[platform];\n };\n var handleRNBundle = async function handleRNBundle2(req, res) {\n var url = new URL(req.url, `http://${req.headers.host}`);\n var platformString = url.searchParams.get(\"platform\") || \"\";\n var platform = validPlatforms[platformString];\n if (!platform) {\n return;\n }\n if (url.searchParams.get(\"dev\") === \"false\" && !warnedProdBundleRequest.has(platform)) {\n warnedProdBundleRequest.add(platform);\n console.warn(`[vxrn] ${platform} bundle requested with dev=false, but the dev server only builds dev bundles. Serving a dev bundle. Use the build command for a production one.`);\n }\n try {\n var bundle = await (await getDevEngine(platform)).getBundle();\n var body = bundle.code;\n if (platform === \"ios\" && url.searchParams.get(\"bytecode\") === \"hermes\") {\n compileBytecode || (compileBytecode = nativeDevBytecodeCompiler(root));\n body = await compileBytecode(bundle, `${url.origin}/index.bundle?platform=${platform}`);\n }\n res.once(\"finish\", function() {\n return pendingReloadPlatforms.delete(platform);\n });\n res.writeHead(200, {\n \"Cache-Control\": \"no-store\",\n \"Content-Type\": \"text/javascript\"\n });\n res.end(body);\n } catch (err) {\n console.error(` Error building React Native bundle`);\n console.error(err);\n console.error(`\n\n Note, some errors may happen due to a stale Vite cache, you may want to try re-running with the \"--clean\" flag`);\n res.writeHead(500, {\n \"Content-Type\": \"text/plain\"\n });\n res.end(err instanceof Error ? err.stack || err.message : String(err));\n }\n };\n server.middlewares.use(function(req, res, next) {\n var _req_url;\n if ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.split(\"?\")[0].endsWith(\".bundle\")) {\n handleRNBundle(req, res, next);\n } else {\n next();\n }\n });\n server.middlewares.use(\"/symbolicate\", async function(req, res) {\n try {\n var chunks = [];\n {\n var _iteratorAbruptCompletion = false, _didIteratorError = false, _iteratorError, _return;\n try {\n var _iterator = _async_iterator(req);\n if (_iterator === null || typeof _iterator !== \"object\" && typeof _iterator !== \"function\") throw new TypeError(\"Iterator result is not an object\");\n for (var _next = _iterator.next, _step; ; _iteratorAbruptCompletion = false) {\n _step = await Reflect.apply(_next, _iterator, []);\n if (_step === null || typeof _step !== \"object\" && typeof _step !== \"function\") throw new TypeError(\"Iterator result is not an object\");\n _iteratorAbruptCompletion = !_step.done;\n if (!_iteratorAbruptCompletion) break;\n var _value = _step.value;\n var chunk = _value;\n chunks.push(chunk);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (_iteratorAbruptCompletion && (_return = _iterator.return) != null) {\n _step = await Reflect.apply(_return, _iterator, []);\n if (_step === null || typeof _step !== \"object\" && typeof _step !== \"function\") throw new TypeError(\"Iterator result is not an object\");\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var body = JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n var stack = body.stack;\n if (!Array.isArray(stack)) {\n throw new Error(\"expected a `stack` array in the request body\");\n }\n var bundleFrame = stack.find(function(frame) {\n return isNativeBundleFrame(frame.file);\n });\n if (!bundleFrame) {\n res.writeHead(200, {\n \"Content-Type\": \"application/json\"\n });\n res.end(JSON.stringify({\n stack,\n codeFrame: null\n }));\n return;\n }\n var framePlatform = getNativeFramePlatform(bundleFrame.file);\n var platform = validPlatforms[framePlatform !== null && framePlatform !== void 0 ? framePlatform : \"\"];\n if (!platform) {\n throw new Error(`could not tell which platform \"${bundleFrame.file}\" was bundled for`);\n }\n var map = await (await getDevEngine(platform)).getSourceMap();\n res.writeHead(200, {\n \"Content-Type\": \"application/json\"\n });\n res.end(JSON.stringify(symbolicateNativeStack(stack, map)));\n } catch (err) {\n console.error(`[vxrn] symbolicate failed`, err);\n res.writeHead(500, {\n \"Content-Type\": \"application/json\"\n });\n res.end(JSON.stringify({\n error: err instanceof Error ? err.message : String(err)\n }));\n }\n });\n }\n };\n}\nexport {\n createReactNativeDevServerPlugin,\n getNativeAssetContentType\n};\n//# sourceMappingURL=reactNativeDevServer.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vxrn",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.6",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -81,15 +81,15 @@
|
|
|
81
81
|
"@react-native-community/cli": "^20.2.0",
|
|
82
82
|
"@react-native-community/cli-config": "^20.2.0",
|
|
83
83
|
"@react-native/dev-middleware": "^0.87.1",
|
|
84
|
-
"@vxrn/compiler": "2.7.
|
|
85
|
-
"@vxrn/debug": "2.7.
|
|
86
|
-
"@vxrn/query-string": "2.7.
|
|
87
|
-
"@vxrn/resolve": "2.7.
|
|
88
|
-
"@vxrn/url-parse": "2.7.
|
|
89
|
-
"@vxrn/utils": "2.7.
|
|
90
|
-
"@vxrn/vendor": "2.7.
|
|
91
|
-
"@vxrn/vite-flow": "2.7.
|
|
92
|
-
"@vxrn/vite-plugin-metro": "2.7.
|
|
84
|
+
"@vxrn/compiler": "2.7.6",
|
|
85
|
+
"@vxrn/debug": "2.7.6",
|
|
86
|
+
"@vxrn/query-string": "2.7.6",
|
|
87
|
+
"@vxrn/resolve": "2.7.6",
|
|
88
|
+
"@vxrn/url-parse": "2.7.6",
|
|
89
|
+
"@vxrn/utils": "2.7.6",
|
|
90
|
+
"@vxrn/vendor": "2.7.6",
|
|
91
|
+
"@vxrn/vite-flow": "2.7.6",
|
|
92
|
+
"@vxrn/vite-plugin-metro": "2.7.6",
|
|
93
93
|
"citty": "^0.1.6",
|
|
94
94
|
"dotenv": "^17.2.1",
|
|
95
95
|
"dotenv-expand": "^12.0.2",
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
"devDependencies": {
|
|
120
120
|
"@biomejs/biome": "2.3.3",
|
|
121
121
|
"@jridgewell/gen-mapping": "^0.3.5",
|
|
122
|
-
"@tamagui/build": "3.0.
|
|
122
|
+
"@tamagui/build": "3.0.15",
|
|
123
123
|
"@types/find-node-modules": "^2.1.2",
|
|
124
124
|
"@types/node": "^24.10.0",
|
|
125
125
|
"@types/ws": "^8.18.1",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"publishConfig": {
|
|
134
134
|
"access": "public"
|
|
135
135
|
},
|
|
136
|
-
"releaseSourceCommit": "
|
|
136
|
+
"releaseSourceCommit": "844022deda905e7838e1a39eea9a847d92a46de9",
|
|
137
137
|
"repository": {
|
|
138
138
|
"type": "git",
|
|
139
139
|
"url": "git+https://github.com/onejs/one.git",
|
|
@@ -415,6 +415,12 @@ export function createReactNativeDevServerPlugin(
|
|
|
415
415
|
return
|
|
416
416
|
}
|
|
417
417
|
addConnectedNativeClient()
|
|
418
|
+
// logged so a lost update can be told apart from a client that never
|
|
419
|
+
// connected
|
|
420
|
+
const clientSuffix = socket.vxrnClientId.slice(-6)
|
|
421
|
+
console.info(
|
|
422
|
+
`[hmr] native client connected platform=${socket.vxrnPlatform} client=...${clientSuffix}`
|
|
423
|
+
)
|
|
418
424
|
if (pendingReloadPlatforms.has(socket.vxrnPlatform)) {
|
|
419
425
|
socket.send(JSON.stringify({ type: 'hmr:reload' }))
|
|
420
426
|
}
|
|
@@ -441,6 +447,9 @@ export function createReactNativeDevServerPlugin(
|
|
|
441
447
|
})
|
|
442
448
|
|
|
443
449
|
socket.on('close', () => {
|
|
450
|
+
console.info(
|
|
451
|
+
`[hmr] native client disconnected platform=${socket.vxrnPlatform} client=...${clientSuffix}`
|
|
452
|
+
)
|
|
444
453
|
removeConnectedNativeClient()
|
|
445
454
|
currentEngine.engine.removeClient(socket.vxrnClientId).catch((error) => {
|
|
446
455
|
console.error('[hmr] failed to remove native client', error)
|
|
@@ -506,6 +515,7 @@ export function createReactNativeDevServerPlugin(
|
|
|
506
515
|
// its replacement is still mounting and connecting.
|
|
507
516
|
pendingReloadPlatforms.add(platform)
|
|
508
517
|
}
|
|
518
|
+
let delivered = 0
|
|
509
519
|
hmrWSS.clients.forEach((client) => {
|
|
510
520
|
const nativeClient = client as NativeHmrSocket
|
|
511
521
|
if (
|
|
@@ -514,8 +524,16 @@ export function createReactNativeDevServerPlugin(
|
|
|
514
524
|
(!target || nativeClient.vxrnClientId === target)
|
|
515
525
|
) {
|
|
516
526
|
client.send(msg)
|
|
527
|
+
delivered++
|
|
517
528
|
}
|
|
518
529
|
})
|
|
530
|
+
// otherwise a patch computed for a gone client vanishes
|
|
531
|
+
// without a trace
|
|
532
|
+
if (target && delivered === 0) {
|
|
533
|
+
console.info(
|
|
534
|
+
`[hmr] ${update.type} for client ...${target.slice(-6)} had no connected socket (dropped)`
|
|
535
|
+
)
|
|
536
|
+
}
|
|
519
537
|
},
|
|
520
538
|
})
|
|
521
539
|
console.info(`[vxrn] rolldown DevEngine ready for ${platform}`)
|
|
@@ -3096,3 +3096,78 @@ describe('native package context identity', () => {
|
|
|
3096
3096
|
}
|
|
3097
3097
|
)
|
|
3098
3098
|
})
|
|
3099
|
+
|
|
3100
|
+
describe('native zero-client edit recoverability', () => {
|
|
3101
|
+
// with no client registered an edit earns no patch, so it must stale the
|
|
3102
|
+
// output for the next bundle request instead of vanishing
|
|
3103
|
+
it(
|
|
3104
|
+
'marks output stale on a zero-client write and serves it on the next bundle',
|
|
3105
|
+
{ timeout: 60_000 },
|
|
3106
|
+
async () => {
|
|
3107
|
+
const root = realpathSync(await mkdtemp(join(tmpdir(), 'vxrn-native-hmr-stale-')))
|
|
3108
|
+
await mkdir(join(root, 'app'), { recursive: true })
|
|
3109
|
+
await mkdir(join(root, 'features/hmr'), { recursive: true })
|
|
3110
|
+
const childPath = join(root, 'features/hmr/HmrProbeChild.tsx')
|
|
3111
|
+
const childSource = (version: string) =>
|
|
3112
|
+
`export function HmrProbeChild() { return ${JSON.stringify(version)} }\nglobalThis.childVersion = HmrProbeChild()\n`
|
|
3113
|
+
await writeFile(childPath, childSource('component-v1'))
|
|
3114
|
+
await writeFile(
|
|
3115
|
+
join(root, 'app/hmr-probe.tsx'),
|
|
3116
|
+
`import { HmrProbeChild } from '../features/hmr/HmrProbeChild.tsx'\nexport default function HmrProbe() { return HmrProbeChild() }\n`
|
|
3117
|
+
)
|
|
3118
|
+
let fullBuildCount = 0
|
|
3119
|
+
const updates: any[] = []
|
|
3120
|
+
const native = await createNativeDevEngine({
|
|
3121
|
+
root,
|
|
3122
|
+
port: 0,
|
|
3123
|
+
platform: 'ios',
|
|
3124
|
+
plugins: [
|
|
3125
|
+
{
|
|
3126
|
+
name: 'native-hmr-stale-entry',
|
|
3127
|
+
transform(code, id) {
|
|
3128
|
+
if ((id as string).endsWith('/__virtual-native-entry.tsx')) {
|
|
3129
|
+
const registryImport =
|
|
3130
|
+
code.match(/import \{ routes \} from [^;]+;/)?.[0] ?? ''
|
|
3131
|
+
const accept = code.slice(code.lastIndexOf('if (import.meta.hot)'))
|
|
3132
|
+
return `${registryImport}\nglobalThis.routeMap = routes\n${accept}`
|
|
3133
|
+
}
|
|
3134
|
+
},
|
|
3135
|
+
renderChunk() {
|
|
3136
|
+
fullBuildCount++
|
|
3137
|
+
return null
|
|
3138
|
+
},
|
|
3139
|
+
},
|
|
3140
|
+
],
|
|
3141
|
+
onHmrUpdate(update) {
|
|
3142
|
+
updates.push(update)
|
|
3143
|
+
},
|
|
3144
|
+
})
|
|
3145
|
+
try {
|
|
3146
|
+
const initial = await native.getBundle()
|
|
3147
|
+
expect(initial.code).toContain('component-v1')
|
|
3148
|
+
expect(fullBuildCount).toBe(1)
|
|
3149
|
+
|
|
3150
|
+
// no client is registered here: this is the app that never connected.
|
|
3151
|
+
await writeFile(childPath, childSource('component-v2'))
|
|
3152
|
+
const staleDeadline = Date.now() + 10_000
|
|
3153
|
+
let stale = false
|
|
3154
|
+
while (Date.now() < staleDeadline) {
|
|
3155
|
+
if ((await native.engine.getBundleState()).hasStaleOutput) {
|
|
3156
|
+
stale = true
|
|
3157
|
+
break
|
|
3158
|
+
}
|
|
3159
|
+
await new Promise((resolve) => setTimeout(resolve, 100))
|
|
3160
|
+
}
|
|
3161
|
+
expect(stale).toBe(true)
|
|
3162
|
+
expect(updates).toHaveLength(0)
|
|
3163
|
+
|
|
3164
|
+
const rebuilt = await native.getBundle()
|
|
3165
|
+
expect(fullBuildCount).toBe(2)
|
|
3166
|
+
expect(rebuilt.code).toContain('component-v2')
|
|
3167
|
+
} finally {
|
|
3168
|
+
await native.close()
|
|
3169
|
+
await rm(root, { recursive: true, force: true })
|
|
3170
|
+
}
|
|
3171
|
+
}
|
|
3172
|
+
)
|
|
3173
|
+
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAW1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AA2CnE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC9D;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAAC,CACrF,GACA,MAAM,
|
|
1
|
+
{"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAW1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AA2CnE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC9D;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAAC,CACrF,GACA,MAAM,CA0jBR"}
|