vxrn 2.0.0-beta.99.1 → 2.6.1
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/backgroundComputation.mjs +145 -0
- package/dist/backgroundComputation.mjs.map +1 -0
- package/dist/backgroundComputation.native.js +163 -0
- package/dist/backgroundComputation.native.js.map +1 -0
- package/dist/backgroundComputationNative.mjs +16 -0
- package/dist/backgroundComputationNative.mjs.map +1 -0
- package/dist/backgroundComputationNative.native.js +18 -0
- package/dist/backgroundComputationNative.native.js.map +1 -0
- package/dist/config/getBaseViteConfigOnly.mjs +6 -10
- package/dist/config/getBaseViteConfigOnly.mjs.map +1 -1
- package/dist/config/getBaseViteConfigOnly.native.js +6 -10
- package/dist/config/getBaseViteConfigOnly.native.js.map +1 -1
- package/dist/config/getOptimizeDeps.mjs +2 -1
- package/dist/config/getOptimizeDeps.mjs.map +1 -1
- package/dist/config/getOptimizeDeps.native.js +2 -1
- package/dist/config/getOptimizeDeps.native.js.map +1 -1
- package/dist/config/getViteServerConfig.mjs +13 -0
- package/dist/config/getViteServerConfig.mjs.map +1 -1
- package/dist/config/getViteServerConfig.native.js +15 -1
- package/dist/config/getViteServerConfig.native.js.map +1 -1
- package/dist/constants/defaults.mjs +4 -0
- package/dist/constants/defaults.mjs.map +1 -1
- package/dist/constants/defaults.native.js +4 -0
- package/dist/constants/defaults.native.js.map +1 -1
- package/dist/exports/build.native.js +1 -1
- package/dist/exports/build.native.js.map +1 -1
- package/dist/exports/clean.native.js +1 -1
- package/dist/exports/clean.native.js.map +1 -1
- package/dist/exports/createServer.native.js +2 -2
- package/dist/exports/createServer.native.js.map +1 -1
- package/dist/exports/dev.mjs +3 -0
- package/dist/exports/dev.mjs.map +1 -1
- package/dist/exports/dev.native.js +6 -3
- package/dist/exports/dev.native.js.map +1 -1
- package/dist/exports/loadEnv.native.js +1 -1
- package/dist/exports/loadEnv.native.js.map +1 -1
- package/dist/exports/patch.native.js +1 -1
- package/dist/exports/patch.native.js.map +1 -1
- package/dist/exports/prebuild.mjs +0 -22
- package/dist/exports/prebuild.mjs.map +1 -1
- package/dist/exports/prebuild.native.js +1 -23
- package/dist/exports/prebuild.native.js.map +1 -1
- package/dist/exports/prebuildWithoutExpo.mjs +1116 -178
- package/dist/exports/prebuildWithoutExpo.mjs.map +1 -1
- package/dist/exports/prebuildWithoutExpo.native.js +1592 -243
- package/dist/exports/prebuildWithoutExpo.native.js.map +1 -1
- package/dist/exports/runAndroid.native.js +1 -1
- package/dist/exports/runAndroid.native.js.map +1 -1
- package/dist/exports/runIos.native.js +1 -1
- package/dist/exports/runIos.native.js.map +1 -1
- package/dist/exports/serve.native.js +1 -1
- package/dist/exports/serve.native.js.map +1 -1
- package/dist/exports/serveStaticAssets.native.js +1 -1
- package/dist/exports/serveStaticAssets.native.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.mjs +4 -1
- package/dist/index.native.js +4 -1
- package/dist/native-source-contract.mjs +3 -0
- package/dist/native-source-contract.native.js +3 -0
- package/dist/patches/builtInDepPatches.mjs +0 -13
- package/dist/patches/builtInDepPatches.mjs.map +1 -1
- package/dist/patches/builtInDepPatches.native.js +0 -13
- package/dist/patches/builtInDepPatches.native.js.map +1 -1
- package/dist/plugins/autoDepOptimizePlugin.mjs +3 -2
- package/dist/plugins/autoDepOptimizePlugin.mjs.map +1 -1
- package/dist/plugins/autoDepOptimizePlugin.native.js +6 -3
- package/dist/plugins/autoDepOptimizePlugin.native.js.map +1 -1
- package/dist/plugins/backgroundComputationPlugin.mjs +27 -0
- package/dist/plugins/backgroundComputationPlugin.mjs.map +1 -0
- package/dist/plugins/backgroundComputationPlugin.native.js +32 -0
- package/dist/plugins/backgroundComputationPlugin.native.js.map +1 -0
- package/dist/plugins/reactNativeCommonJsPlugin.native.js +3 -3
- package/dist/plugins/reactNativeCommonJsPlugin.native.js.map +1 -1
- package/dist/plugins/reactNativeDevAssetPlugin.mjs +2 -1
- package/dist/plugins/reactNativeDevAssetPlugin.mjs.map +1 -1
- package/dist/plugins/reactNativeDevAssetPlugin.native.js +3 -2
- package/dist/plugins/reactNativeDevAssetPlugin.native.js.map +1 -1
- package/dist/plugins/reactNativeDevServer.mjs +87 -24
- package/dist/plugins/reactNativeDevServer.mjs.map +1 -1
- package/dist/plugins/reactNativeDevServer.native.js +162 -45
- package/dist/plugins/reactNativeDevServer.native.js.map +1 -1
- package/dist/plugins/workletImportsPlugin.mjs +9 -30
- package/dist/plugins/workletImportsPlugin.mjs.map +1 -1
- package/dist/plugins/workletImportsPlugin.native.js +10 -35
- package/dist/plugins/workletImportsPlugin.native.js.map +1 -1
- package/dist/rn-commands/bundle/buildBundle.mjs +3 -3
- package/dist/rn-commands/bundle/buildBundle.mjs.map +1 -1
- package/dist/rn-commands/bundle/buildBundle.native.js +3 -3
- package/dist/rn-commands/bundle/buildBundle.native.js.map +1 -1
- package/dist/runtime/hmr-client.native.js +3 -7
- package/dist/runtime/hmr-client.native.js.map +1 -1
- package/dist/runtime/hmr-runtime.native.js +32 -40
- package/dist/runtime/hmr-runtime.native.js.map +1 -1
- package/dist/serve/node.native.js +2 -2
- package/dist/serve/node.native.js.map +1 -1
- package/dist/swift-package-id.mjs +3 -0
- package/dist/swift-package-id.native.js +3 -0
- package/dist/user-interface/index.native.js +6 -6
- package/dist/user-interface/index.native.js.map +1 -1
- package/dist/utils/compileNativeDevBytecode.mjs +93 -0
- package/dist/utils/compileNativeDevBytecode.mjs.map +1 -0
- package/dist/utils/compileNativeDevBytecode.native.js +98 -0
- package/dist/utils/compileNativeDevBytecode.native.js.map +1 -0
- package/dist/utils/createNativeDevEngine.mjs +227 -20
- package/dist/utils/createNativeDevEngine.mjs.map +1 -1
- package/dist/utils/createNativeDevEngine.native.js +249 -37
- package/dist/utils/createNativeDevEngine.native.js.map +1 -1
- package/dist/utils/execSync.native.js +1 -1
- package/dist/utils/execSync.native.js.map +1 -1
- package/dist/utils/getServerEntry.native.js +2 -2
- package/dist/utils/getServerEntry.native.js.map +1 -1
- package/dist/utils/nativeRun.mjs +32 -16
- package/dist/utils/nativeRun.mjs.map +1 -1
- package/dist/utils/nativeRun.native.js +43 -18
- package/dist/utils/nativeRun.native.js.map +1 -1
- package/dist/utils/nativeSourceContract.mjs +1823 -0
- package/dist/utils/nativeSourceContract.mjs.map +1 -0
- package/dist/utils/nativeSourceContract.native.js +2425 -0
- package/dist/utils/nativeSourceContract.native.js.map +1 -0
- package/dist/utils/patches.native.js +15 -24
- package/dist/utils/patches.native.js.map +1 -1
- package/dist/utils/printServerUrls.native.js +1 -1
- package/dist/utils/printServerUrls.native.js.map +1 -1
- package/dist/utils/scanDepsToOptimize.mjs +7 -1
- package/dist/utils/scanDepsToOptimize.mjs.map +1 -1
- package/dist/utils/scanDepsToOptimize.native.js +27 -2
- package/dist/utils/scanDepsToOptimize.native.js.map +1 -1
- package/dist/utils/swiftPackageId.mjs +31 -2
- package/dist/utils/swiftPackageId.mjs.map +1 -1
- package/dist/utils/swiftPackageId.native.js +50 -2
- package/dist/utils/swiftPackageId.native.js.map +1 -1
- package/dist/vxrn-vite-plugin.native.js +1 -1
- package/dist/vxrn-vite-plugin.native.js.map +1 -1
- package/expo-plugin.cjs +792 -2
- package/native-project-patches.cjs +201 -10
- package/package.json +34 -15
- package/src/backgroundComputation.ts +220 -0
- package/src/backgroundComputationNative.ts +23 -0
- package/src/config/getBaseViteConfigOnly.ts +8 -9
- package/src/config/getOptimizeDeps.ts +3 -1
- package/src/config/getViteServerConfig.ts +16 -0
- package/src/config/glbAssets.test.ts +228 -0
- package/src/constants/defaults.ts +6 -0
- package/src/exports/dev.ts +5 -1
- package/src/exports/expoPlugin.test.mjs +337 -15
- package/src/exports/prebuild.ts +0 -31
- package/src/exports/prebuildWithoutExpo.test.ts +1588 -48
- package/src/exports/prebuildWithoutExpo.ts +1573 -213
- package/src/index.ts +8 -0
- package/src/native-source-contract.ts +16 -0
- package/src/patches/builtInDepPatches.ts +0 -21
- package/src/plugins/autoDepOptimizePlugin.ts +7 -2
- package/src/plugins/backgroundComputationPlugin.test.ts +77 -0
- package/src/plugins/backgroundComputationPlugin.ts +29 -0
- package/src/plugins/reactNativeDevAssetPlugin.ts +5 -1
- package/src/plugins/reactNativeDevServer.test.ts +74 -0
- package/src/plugins/reactNativeDevServer.ts +145 -28
- package/src/plugins/rnCodegenPlugin.test.ts +30 -0
- package/src/plugins/workletImportsPlugin.ts +19 -37
- package/src/rn-commands/bundle/buildBundle.ts +5 -3
- package/src/swift-package-id.ts +1 -0
- package/src/utils/compileNativeDevBytecode.test.ts +168 -0
- package/src/utils/compileNativeDevBytecode.ts +117 -0
- package/src/utils/createNativeDevEngine.test.ts +643 -18
- package/src/utils/createNativeDevEngine.ts +278 -48
- package/src/utils/nativeRun.test.ts +125 -23
- package/src/utils/nativeRun.ts +51 -23
- package/src/utils/nativeSourceArtifacts.test.ts +39 -0
- package/src/utils/nativeSourceContract.test.ts +600 -0
- package/src/utils/nativeSourceContract.ts +1897 -0
- package/src/utils/scanDepsToOptimize.test.ts +80 -0
- package/src/utils/scanDepsToOptimize.ts +18 -7
- package/src/utils/swiftPackageId.ts +25 -1
- package/types/backgroundComputation.d.ts +28 -0
- package/types/backgroundComputation.d.ts.map +1 -0
- package/types/backgroundComputationNative.d.ts +2 -0
- package/types/backgroundComputationNative.d.ts.map +1 -0
- package/types/config/getBaseViteConfigOnly.d.ts.map +1 -1
- package/types/config/getOptimizeDeps.d.ts.map +1 -1
- package/types/config/getViteServerConfig.d.ts.map +1 -1
- package/types/constants/defaults.d.ts.map +1 -1
- package/types/exports/dev.d.ts.map +1 -1
- package/types/exports/prebuild.d.ts.map +1 -1
- package/types/exports/prebuildWithoutExpo.d.ts +6 -0
- package/types/exports/prebuildWithoutExpo.d.ts.map +1 -1
- package/types/index.d.ts +2 -0
- package/types/index.d.ts.map +1 -1
- package/types/native-source-contract.d.ts +2 -0
- package/types/native-source-contract.d.ts.map +1 -0
- package/types/patches/builtInDepPatches.d.ts.map +1 -1
- package/types/plugins/autoDepOptimizePlugin.d.ts.map +1 -1
- package/types/plugins/backgroundComputationPlugin.d.ts +3 -0
- package/types/plugins/backgroundComputationPlugin.d.ts.map +1 -0
- package/types/plugins/reactNativeDevAssetPlugin.d.ts.map +1 -1
- package/types/plugins/reactNativeDevServer.d.ts.map +1 -1
- package/types/plugins/workletImportsPlugin.d.ts.map +1 -1
- package/types/rn-commands/bundle/buildBundle.d.ts.map +1 -1
- package/types/swift-package-id.d.ts +2 -0
- package/types/swift-package-id.d.ts.map +1 -0
- package/types/utils/compileNativeDevBytecode.d.ts +3 -0
- package/types/utils/compileNativeDevBytecode.d.ts.map +1 -0
- package/types/utils/createNativeDevEngine.d.ts +7 -22
- package/types/utils/createNativeDevEngine.d.ts.map +1 -1
- package/types/utils/nativeRun.d.ts.map +1 -1
- package/types/utils/nativeSourceContract.d.ts +121 -0
- package/types/utils/nativeSourceContract.d.ts.map +1 -0
- package/types/utils/scanDepsToOptimize.d.ts +1 -0
- package/types/utils/scanDepsToOptimize.d.ts.map +1 -1
- package/types/utils/swiftPackageId.d.ts +1 -0
- package/types/utils/swiftPackageId.d.ts.map +1 -1
|
@@ -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 addConnectedNativeClient,\n removeConnectedNativeClient\n} from \"../utils/connectedNativeClients\";\nimport { URL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport { createDevMiddleware } from \"@react-native/dev-middleware\";\nimport { createNativeDevEngine } from \"../utils/createNativeDevEngine\";\nimport { getBoundPort } from \"../utils/getBoundPort\";\nimport {\n getNativeFramePlatform,\n isNativeBundleFrame,\n symbolicateNativeStack\n} from \"../utils/symbolicateNativeStack\";\nfunction getNativeAssetContentType(type) {\n switch (type.toLowerCase()) {\n case \"bmp\":\n return \"image/bmp\";\n case \"gif\":\n return \"image/gif\";\n case \"jpeg\":\n case \"jpg\":\n return \"image/jpeg\";\n case \"json\":\n return \"application/json\";\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 \"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 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 anonymousScopeId = randomUUID();\n server.middlewares.use(async (req, res, 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 try {\n expoConfigPath = projectRequire.resolve(\"@expo/config\");\n } catch {\n return next();\n }\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 try {\n const { exp, pkg } = getConfig(root);\n const hostUri = req.headers.host || `localhost:${getBoundPort(server)}`;\n const mainModuleName = resolveRelativeEntryPoint(root, { platform, pkg });\n const runtimeVersion = await Updates.getRuntimeVersionAsync(\n root,\n { ...exp, runtimeVersion: exp.runtimeVersion ?? { policy: \"sdkVersion\" } },\n platform\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: {},\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 if (!engine) return next();\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);\n if (!asset) {\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 res.writeHead(200, {\n \"Cache-Control\": \"no-cache\",\n \"Content-Length\": String(contents.byteLength),\n \"Content-Type\": getNativeAssetContentType(asset.type)\n });\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 res.once(\"finish\", () => pendingReloadPlatforms.delete(platform));\n res.writeHead(200, {\n \"Cache-Control\": \"no-store\",\n \"Content-Type\": \"text/javascript\"\n });\n res.end(bundle.code);\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 bundle = await (await getDevEngine(platform)).getBundle();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(symbolicateNativeStack(stack, bundle.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 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 bundle = await (await getDevEngine(platform)).getBundle();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(symbolicateNativeStack(stack, bundle.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,31 +1,89 @@
|
|
|
1
1
|
import { WebSocketServer } from "ws";
|
|
2
2
|
import { createMessageSocket } from "@vxrn/utils";
|
|
3
|
+
import { expoClientFromNativeApp } from "@vxrn/utils/nativeAppManifest";
|
|
3
4
|
import { addConnectedNativeClient, removeConnectedNativeClient } from "../utils/connectedNativeClients.native.js";
|
|
4
5
|
import { URL } from "url";
|
|
5
6
|
import { createRequire } from "module";
|
|
6
|
-
import { join } from "path";
|
|
7
|
+
import { extname, join, resolve, sep } from "path";
|
|
7
8
|
import { randomUUID } from "crypto";
|
|
9
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
8
10
|
import { readFile } from "fs/promises";
|
|
9
11
|
import { createDevMiddleware } from "@react-native/dev-middleware";
|
|
10
12
|
import { createNativeDevEngine } from "../utils/createNativeDevEngine.native.js";
|
|
13
|
+
import { nativeDevBytecodeCompiler } from "../utils/compileNativeDevBytecode.native.js";
|
|
11
14
|
import { getBoundPort } from "../utils/getBoundPort.native.js";
|
|
12
15
|
import { getNativeFramePlatform, isNativeBundleFrame, symbolicateNativeStack } from "../utils/symbolicateNativeStack.native.js";
|
|
13
16
|
|
|
17
|
+
function _async_iterator(iterable) {
|
|
18
|
+
var method, async, sync, retry = 2;
|
|
19
|
+
for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) {
|
|
20
|
+
if (async && null != (method = iterable[async])) return method.call(iterable);
|
|
21
|
+
if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));
|
|
22
|
+
async = "@@asyncIterator", sync = "@@iterator";
|
|
23
|
+
}
|
|
24
|
+
throw new TypeError("Object is not async iterable");
|
|
25
|
+
}
|
|
26
|
+
function AsyncFromSyncIterator(s) {
|
|
27
|
+
function AsyncFromSyncIteratorContinuation(r) {
|
|
28
|
+
if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
|
|
29
|
+
var done = r.done;
|
|
30
|
+
return Promise.resolve(r.value).then(function(value) {
|
|
31
|
+
return {
|
|
32
|
+
value,
|
|
33
|
+
done
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return AsyncFromSyncIterator = function(s2) {
|
|
38
|
+
this.s = s2, this.n = s2.next;
|
|
39
|
+
}, AsyncFromSyncIterator.prototype = {
|
|
40
|
+
s: null,
|
|
41
|
+
n: null,
|
|
42
|
+
next: function() {
|
|
43
|
+
return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
|
|
44
|
+
},
|
|
45
|
+
return: function(value) {
|
|
46
|
+
var ret = this.s.return;
|
|
47
|
+
return void 0 === ret ? Promise.resolve({
|
|
48
|
+
value,
|
|
49
|
+
done: true
|
|
50
|
+
}) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));
|
|
51
|
+
},
|
|
52
|
+
throw: function(value) {
|
|
53
|
+
var thr = this.s.return;
|
|
54
|
+
return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));
|
|
55
|
+
}
|
|
56
|
+
}, new AsyncFromSyncIterator(s);
|
|
57
|
+
}
|
|
14
58
|
function _type_of(obj) {
|
|
15
59
|
"@swc/helpers - typeof";
|
|
16
60
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17
61
|
}
|
|
62
|
+
function getProjectAssetFile(root, pathname) {
|
|
63
|
+
var filePath = resolve(root, pathname.slice("/assets/".length));
|
|
64
|
+
if (!filePath.startsWith(resolve(root) + sep)) return;
|
|
65
|
+
var type = extname(filePath).slice(1);
|
|
66
|
+
if (getNativeAssetContentType(type) === "application/octet-stream") return;
|
|
67
|
+
if (!existsSync(filePath) || !statSync(filePath).isFile()) return;
|
|
68
|
+
return {
|
|
69
|
+
filePath,
|
|
70
|
+
type
|
|
71
|
+
};
|
|
72
|
+
}
|
|
18
73
|
function getNativeAssetContentType(type) {
|
|
19
74
|
switch (type.toLowerCase()) {
|
|
20
75
|
case "bmp": return "image/bmp";
|
|
21
76
|
case "gif": return "image/gif";
|
|
77
|
+
case "glb": return "model/gltf-binary";
|
|
22
78
|
case "jpeg":
|
|
23
79
|
case "jpg": return "image/jpeg";
|
|
24
80
|
case "json": return "application/json";
|
|
81
|
+
case "mp4": return "video/mp4";
|
|
25
82
|
case "otf": return "font/otf";
|
|
26
83
|
case "png": return "image/png";
|
|
27
84
|
case "svg": return "image/svg+xml";
|
|
28
85
|
case "ttf": return "font/ttf";
|
|
86
|
+
case "txt": return "text/plain";
|
|
29
87
|
case "webp": return "image/webp";
|
|
30
88
|
case "woff": return "font/woff";
|
|
31
89
|
case "woff2": return "font/woff2";
|
|
@@ -36,7 +94,8 @@ function createReactNativeDevServerPlugin(options) {
|
|
|
36
94
|
return {
|
|
37
95
|
name: "vite-plugin-react-native-server",
|
|
38
96
|
configureServer(server) {
|
|
39
|
-
var
|
|
97
|
+
var _packageJson_dependencies, _packageJson_devDependencies;
|
|
98
|
+
var _globalThis___vxrnNativeEntryConfig, _server_httpServer;
|
|
40
99
|
var { host } = server.config.server;
|
|
41
100
|
var { root } = server.config;
|
|
42
101
|
var hmrWSS = new WebSocketServer({ noServer: true });
|
|
@@ -50,6 +109,7 @@ function createReactNativeDevServerPlugin(options) {
|
|
|
50
109
|
var devEngineCreating = {};
|
|
51
110
|
var warnedProdBundleRequest = /* @__PURE__ */ new Set();
|
|
52
111
|
var pendingReloadPlatforms = /* @__PURE__ */ new Set();
|
|
112
|
+
var compileBytecode;
|
|
53
113
|
var devToolsSocketEndpoints = ["/inspector/device", "/inspector/debug"];
|
|
54
114
|
var reactNativeDevToolsUrl = `http://${host}:${getBoundPort(server)}`;
|
|
55
115
|
var { middleware, websocketEndpoints } = createDevMiddleware({
|
|
@@ -58,8 +118,13 @@ function createReactNativeDevServerPlugin(options) {
|
|
|
58
118
|
unstable_experiments: { enableStandaloneFuseboxShell: false }
|
|
59
119
|
});
|
|
60
120
|
var projectRequire = createRequire(join(root, "package.json"));
|
|
121
|
+
var packageJsonPath = join(root, "package.json");
|
|
122
|
+
var packageJson = existsSync(packageJsonPath) ? JSON.parse(readFileSync(packageJsonPath, "utf8")) : {};
|
|
123
|
+
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");
|
|
124
|
+
var nativeApp = hasExpo ? void 0 : (_globalThis___vxrnNativeEntryConfig = globalThis.__vxrnNativeEntryConfig) === null || _globalThis___vxrnNativeEntryConfig === void 0 ? void 0 : _globalThis___vxrnNativeEntryConfig.app;
|
|
61
125
|
var anonymousScopeId = randomUUID();
|
|
62
126
|
server.middlewares.use(async function(req, res, next) {
|
|
127
|
+
if (!hasExpo && !nativeApp) return next();
|
|
63
128
|
if (req.method !== "GET" && req.method !== "HEAD") return next();
|
|
64
129
|
var url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
|
|
65
130
|
if (url.pathname !== "/" && url.pathname !== "/manifest" && url.pathname !== "/index.exp") {
|
|
@@ -69,28 +134,40 @@ function createReactNativeDevServerPlugin(options) {
|
|
|
69
134
|
var platform = validPlatforms[url.searchParams.get("platform") || String(header || "")];
|
|
70
135
|
if (!platform) return next();
|
|
71
136
|
var expoConfigPath;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
137
|
+
if (!nativeApp) {
|
|
138
|
+
try {
|
|
139
|
+
expoConfigPath = projectRequire.resolve("@expo/config");
|
|
140
|
+
} catch (unused) {
|
|
141
|
+
return next();
|
|
142
|
+
}
|
|
76
143
|
}
|
|
77
|
-
var expoRequire = createRequire(expoConfigPath);
|
|
78
|
-
var { getConfig } = expoRequire("@expo/config");
|
|
79
|
-
var { resolveRelativeEntryPoint } = expoRequire("@expo/config/paths");
|
|
80
|
-
var { Updates } = expoRequire("@expo/config-plugins");
|
|
81
144
|
try {
|
|
82
|
-
var
|
|
83
|
-
var _exp_extra_eas, _exp_extra;
|
|
84
|
-
var { exp, pkg } = getConfig(root);
|
|
145
|
+
var _ref, _ref1;
|
|
146
|
+
var _nativeApp_updates, _exp_extra_eas, _exp_extra;
|
|
85
147
|
var hostUri = req.headers.host || `localhost:${getBoundPort(server)}`;
|
|
86
|
-
var mainModuleName =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
148
|
+
var { exp, mainModuleName, runtimeVersion } = nativeApp ? {
|
|
149
|
+
exp: expoClientFromNativeApp(nativeApp),
|
|
150
|
+
mainModuleName: "index",
|
|
151
|
+
runtimeVersion: (_ref = (_nativeApp_updates = nativeApp.updates) === null || _nativeApp_updates === void 0 ? void 0 : _nativeApp_updates.runtimeVersion) !== null && _ref !== void 0 ? _ref : null
|
|
152
|
+
} : await (async function() {
|
|
153
|
+
var _exp_runtimeVersion;
|
|
154
|
+
var expoRequire = createRequire(expoConfigPath);
|
|
155
|
+
var { getConfig } = expoRequire("@expo/config");
|
|
156
|
+
var { resolveRelativeEntryPoint } = expoRequire("@expo/config/paths");
|
|
157
|
+
var { Updates } = expoRequire("@expo/config-plugins");
|
|
158
|
+
var { exp: exp2, pkg } = getConfig(root);
|
|
159
|
+
return {
|
|
160
|
+
exp: exp2,
|
|
161
|
+
mainModuleName: resolveRelativeEntryPoint(root, {
|
|
162
|
+
platform,
|
|
163
|
+
pkg
|
|
164
|
+
}),
|
|
165
|
+
runtimeVersion: await Updates.getRuntimeVersionAsync(root, {
|
|
166
|
+
...exp2,
|
|
167
|
+
runtimeVersion: (_exp_runtimeVersion = exp2.runtimeVersion) !== null && _exp_runtimeVersion !== void 0 ? _exp_runtimeVersion : { policy: "sdkVersion" }
|
|
168
|
+
}, platform)
|
|
169
|
+
};
|
|
170
|
+
})();
|
|
94
171
|
var manifest = JSON.stringify({
|
|
95
172
|
id: randomUUID(),
|
|
96
173
|
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -101,9 +178,9 @@ function createReactNativeDevServerPlugin(options) {
|
|
|
101
178
|
url: `http://${hostUri}/${encodeURI(mainModuleName.replace(/^\/+/, ""))}.bundle?platform=${platform}&dev=true&hot=false`
|
|
102
179
|
},
|
|
103
180
|
assets: [],
|
|
104
|
-
metadata: {},
|
|
181
|
+
metadata: nativeApp ? { oneNativeApp: true } : {},
|
|
105
182
|
extra: {
|
|
106
|
-
eas: { projectId: (
|
|
183
|
+
eas: { 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 },
|
|
107
184
|
expoClient: {
|
|
108
185
|
...exp,
|
|
109
186
|
hostUri
|
|
@@ -153,6 +230,7 @@ ${manifest}\r
|
|
|
153
230
|
}
|
|
154
231
|
});
|
|
155
232
|
server.middlewares.use(async function(req, res, next) {
|
|
233
|
+
var _ref;
|
|
156
234
|
if (req.method !== "GET" && req.method !== "HEAD") return next();
|
|
157
235
|
var rawUrl = req.url || "/";
|
|
158
236
|
var rawPathname = rawUrl.split("?", 1)[0];
|
|
@@ -160,7 +238,6 @@ ${manifest}\r
|
|
|
160
238
|
var url = new URL(rawUrl, `http://${req.headers.host || "localhost"}`);
|
|
161
239
|
var platform = validPlatforms[url.searchParams.get("platform") || ""];
|
|
162
240
|
var engine = platform ? devEngines[platform] : void 0;
|
|
163
|
-
if (!engine) return next();
|
|
164
241
|
var pathname;
|
|
165
242
|
try {
|
|
166
243
|
pathname = decodeURIComponent(rawPathname);
|
|
@@ -169,19 +246,44 @@ ${manifest}\r
|
|
|
169
246
|
res.end("Invalid native asset path");
|
|
170
247
|
return;
|
|
171
248
|
}
|
|
172
|
-
var asset = engine.getAsset(pathname, url.searchParams.get("hash") || void 0);
|
|
249
|
+
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);
|
|
173
250
|
if (!asset) {
|
|
251
|
+
if (!engine) return next();
|
|
174
252
|
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
175
253
|
res.end("Native asset not found");
|
|
176
254
|
return;
|
|
177
255
|
}
|
|
178
256
|
try {
|
|
179
257
|
var contents = await readFile(asset.filePath);
|
|
180
|
-
|
|
258
|
+
var headers = {
|
|
181
259
|
"Cache-Control": "no-cache",
|
|
260
|
+
"Accept-Ranges": "bytes",
|
|
182
261
|
"Content-Length": String(contents.byteLength),
|
|
183
262
|
"Content-Type": getNativeAssetContentType(asset.type)
|
|
184
|
-
}
|
|
263
|
+
};
|
|
264
|
+
var range = req.method === "GET" && !req.headers["if-range"] && /^bytes=(\d*)-(\d*)$/.exec(req.headers.range || "");
|
|
265
|
+
if (range && (range[1] || range[2])) {
|
|
266
|
+
var size = contents.byteLength;
|
|
267
|
+
var start = range[1] ? Number(range[1]) : Math.max(0, size - Number(range[2]));
|
|
268
|
+
var end = range[1] && range[2] ? Math.min(Number(range[2]), size - 1) : size - 1;
|
|
269
|
+
if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start > end || start >= size) {
|
|
270
|
+
res.writeHead(416, {
|
|
271
|
+
...headers,
|
|
272
|
+
"Content-Length": "0",
|
|
273
|
+
"Content-Range": `bytes */${size}`
|
|
274
|
+
});
|
|
275
|
+
res.end();
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
res.writeHead(206, {
|
|
279
|
+
...headers,
|
|
280
|
+
"Content-Length": String(end - start + 1),
|
|
281
|
+
"Content-Range": `bytes ${start}-${end}/${size}`
|
|
282
|
+
});
|
|
283
|
+
res.end(contents.subarray(start, end + 1));
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
res.writeHead(200, headers);
|
|
185
287
|
res.end(req.method === "HEAD" ? void 0 : contents);
|
|
186
288
|
} catch (error) {
|
|
187
289
|
console.error(`[vxrn] failed to serve native asset ${pathname}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -312,7 +414,7 @@ ${manifest}\r
|
|
|
312
414
|
}
|
|
313
415
|
});
|
|
314
416
|
});
|
|
315
|
-
var getDevEngine = async function(platform) {
|
|
417
|
+
var getDevEngine = async function getDevEngine2(platform) {
|
|
316
418
|
while (!devEngines[platform]) {
|
|
317
419
|
if (!devEngineCreating[platform]) {
|
|
318
420
|
var creating = (async function() {
|
|
@@ -324,7 +426,7 @@ ${manifest}\r
|
|
|
324
426
|
host: typeof host === "string" ? host : "localhost",
|
|
325
427
|
platform,
|
|
326
428
|
serverUrl: `http://${typeof host === "string" && host !== "0.0.0.0" ? host : "localhost"}:${getBoundPort(server)}`,
|
|
327
|
-
onHmrUpdate: function(update) {
|
|
429
|
+
onHmrUpdate: function onHmrUpdate(update) {
|
|
328
430
|
var msg = JSON.stringify(update);
|
|
329
431
|
var target = "clientId" in update ? update.clientId : void 0;
|
|
330
432
|
if (update.type === "hmr:reload" && !target) {
|
|
@@ -349,7 +451,7 @@ ${manifest}\r
|
|
|
349
451
|
}
|
|
350
452
|
return devEngines[platform];
|
|
351
453
|
};
|
|
352
|
-
var handleRNBundle = async function(req, res) {
|
|
454
|
+
var handleRNBundle = async function handleRNBundle2(req, res) {
|
|
353
455
|
var url = new URL(req.url, `http://${req.headers.host}`);
|
|
354
456
|
var platformString = url.searchParams.get("platform") || "";
|
|
355
457
|
var platform = validPlatforms[platformString];
|
|
@@ -362,6 +464,11 @@ ${manifest}\r
|
|
|
362
464
|
}
|
|
363
465
|
try {
|
|
364
466
|
var bundle = await (await getDevEngine(platform)).getBundle();
|
|
467
|
+
var body = bundle.code;
|
|
468
|
+
if (platform === "ios" && url.searchParams.get("bytecode") === "hermes") {
|
|
469
|
+
compileBytecode || (compileBytecode = nativeDevBytecodeCompiler(root));
|
|
470
|
+
body = await compileBytecode(bundle, `${url.origin}/index.bundle?platform=${platform}`);
|
|
471
|
+
}
|
|
365
472
|
res.once("finish", function() {
|
|
366
473
|
return pendingReloadPlatforms.delete(platform);
|
|
367
474
|
});
|
|
@@ -369,7 +476,7 @@ ${manifest}\r
|
|
|
369
476
|
"Cache-Control": "no-store",
|
|
370
477
|
"Content-Type": "text/javascript"
|
|
371
478
|
});
|
|
372
|
-
res.end(
|
|
479
|
+
res.end(body);
|
|
373
480
|
} catch (err) {
|
|
374
481
|
console.error(` Error building React Native bundle`);
|
|
375
482
|
console.error(err);
|
|
@@ -391,23 +498,33 @@ ${manifest}\r
|
|
|
391
498
|
server.middlewares.use("/symbolicate", async function(req, res) {
|
|
392
499
|
try {
|
|
393
500
|
var chunks = [];
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
for (var _iterator = req[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
397
|
-
var chunk = _step.value;
|
|
398
|
-
chunks.push(chunk);
|
|
399
|
-
}
|
|
400
|
-
} catch (err) {
|
|
401
|
-
_didIteratorError = true;
|
|
402
|
-
_iteratorError = err;
|
|
403
|
-
} finally {
|
|
501
|
+
{
|
|
502
|
+
var _iteratorAbruptCompletion = false, _didIteratorError = false, _iteratorError, _return;
|
|
404
503
|
try {
|
|
405
|
-
|
|
406
|
-
|
|
504
|
+
var _iterator = _async_iterator(req);
|
|
505
|
+
if (_iterator === null || typeof _iterator !== "object" && typeof _iterator !== "function") throw new TypeError("Iterator result is not an object");
|
|
506
|
+
for (var _next = _iterator.next, _step;; _iteratorAbruptCompletion = false) {
|
|
507
|
+
_step = await Reflect.apply(_next, _iterator, []);
|
|
508
|
+
if (_step === null || typeof _step !== "object" && typeof _step !== "function") throw new TypeError("Iterator result is not an object");
|
|
509
|
+
_iteratorAbruptCompletion = !_step.done;
|
|
510
|
+
if (!_iteratorAbruptCompletion) break;
|
|
511
|
+
var _value = _step.value;
|
|
512
|
+
var chunk = _value;
|
|
513
|
+
chunks.push(chunk);
|
|
407
514
|
}
|
|
515
|
+
} catch (err) {
|
|
516
|
+
_didIteratorError = true;
|
|
517
|
+
_iteratorError = err;
|
|
408
518
|
} finally {
|
|
409
|
-
|
|
410
|
-
|
|
519
|
+
try {
|
|
520
|
+
if (_iteratorAbruptCompletion && (_return = _iterator.return) != null) {
|
|
521
|
+
_step = await Reflect.apply(_return, _iterator, []);
|
|
522
|
+
if (_step === null || typeof _step !== "object" && typeof _step !== "function") throw new TypeError("Iterator result is not an object");
|
|
523
|
+
}
|
|
524
|
+
} finally {
|
|
525
|
+
if (_didIteratorError) {
|
|
526
|
+
throw _iteratorError;
|
|
527
|
+
}
|
|
411
528
|
}
|
|
412
529
|
}
|
|
413
530
|
}
|