vxrn 1.25.4 → 1.25.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.
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","it","getHermesSWCIncludes","getNativeTransformConfig","hmrClientNoopPlugin","vxrnCompilerPlugin","wrapNativeBundleModuleScope","root","_loop","_i2","_iter2","_loop2","_i12","_iter12","dev","platform","define","toBe","JSON","stringify","envObject","parse","TAMAGUI_TARGET","TAMAGUI_ENVIRONMENT","_i1","_iter1","length","_i","_iter","RUNTIME_MARKER","out","openIdx","indexOf","toBeGreaterThan","toBeLessThan","Function","not","toThrow","input","CLASS_SET","toEqual","arrayContaining","toContain","plugin","resolveId","load","VIRTUAL_ID","each","source","importer","id","external","toBeUndefined","result","moduleType","method","code","previousNodeEnv","process","env","NODE_ENV","transform"],"sources":["createNativeDevEngine.test.native.js"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { getHermesSWCIncludes, getNativeTransformConfig, hmrClientNoopPlugin, vxrnCompilerPlugin, wrapNativeBundleModuleScope } from \"./createNativeDevEngine\";\n\nvar root = \"/tmp/vxrn-native-env-define-test-nonexistent\";\ndescribe(\"getNativeTransformConfig platform env defines\", function() {\n\tvar _loop = function(_i2, _iter2) {\n\t\tvar _loop2 = function(_i12, _iter12) {\n\t\t\tvar dev = _iter12[_i12];\n\t\t\tit(`injects TAMAGUI_TARGET=native for ${platform} (dev=${dev})`, function() {\n\t\t\t\tvar { define } = getNativeTransformConfig(platform, dev, root);\n\t\t\t\texpect(define[\"import.meta.env.TAMAGUI_TARGET\"]).toBe(\"\\\"native\\\"\");\n\t\t\t\texpect(define[\"process.env.TAMAGUI_TARGET\"]).toBe(\"\\\"native\\\"\");\n\t\t\t\texpect(define[\"import.meta.env.TAMAGUI_ENVIRONMENT\"]).toBe(JSON.stringify(platform));\n\t\t\t\texpect(define[\"import.meta.env.VITE_ENVIRONMENT\"]).toBe(JSON.stringify(platform));\n\t\t\t\texpect(define[\"import.meta.env.VITE_NATIVE\"]).toBe(\"\\\"1\\\"\");\n\t\t\t\texpect(define[\"import.meta.env.EXPO_OS\"]).toBe(JSON.stringify(platform));\n\t\t\t\tvar envObject = JSON.parse(define[\"import.meta.env\"]);\n\t\t\t\texpect(envObject.TAMAGUI_TARGET).toBe(\"native\");\n\t\t\t\texpect(envObject.TAMAGUI_ENVIRONMENT).toBe(platform);\n\t\t\t});\n\t\t};\n\t\tvar platform = _iter2[_i2];\n\t\tfor (var _i1 = 0, _iter1 = [true, false]; _i1 < _iter1.length; _i1++) _loop2(_i1, _iter1);\n\t};\n\tfor (var _i = 0, _iter = [\"ios\", \"android\"]; _i < _iter.length; _i++) _loop(_i, _iter);\n});\ndescribe(\"wrapNativeBundleModuleScope\", function() {\n\tvar RUNTIME_MARKER = \"//#region \\\\0rolldown/runtime.js\";\n\tit(\"wraps module code after the prelude so top-level vars do not leak to global\", function() {\n\t\tvar out = wrapNativeBundleModuleScope(`globalThis.global = globalThis;\nglobalThis.__DEV__ = true;\n${RUNTIME_MARKER}\nvar fetch_hot, fetch$1, Headers, Request, Response$1;\nglobalThis.__rolldown_runtime__ = {};\n`);\n\t\tvar openIdx = out.indexOf(\";(function() {\");\n\t\texpect(openIdx).toBeGreaterThan(-1);\n\t\texpect(out.indexOf(\"globalThis.__DEV__\")).toBeLessThan(openIdx);\n\t\texpect(out.indexOf(\"var fetch_hot\")).toBeGreaterThan(openIdx);\n\t\texpect(function() {\n\t\t\treturn new Function(out);\n\t\t}).not.toThrow();\n\t});\n\tit(\"is a no-op when the runtime marker is absent (e.g. prod bundle)\", function() {\n\t\tvar input = \"var x = 1;\\nconsole.log(x);\\n\";\n\t\texpect(wrapNativeBundleModuleScope(input)).toBe(input);\n\t});\n});\ndescribe(\"getHermesSWCIncludes\", function() {\n\tvar CLASS_SET = [\n\t\t\"transform-classes\",\n\t\t\"transform-class-properties\",\n\t\t\"transform-class-static-block\",\n\t\t\"transform-private-methods\",\n\t\t\"transform-private-property-in-object\"\n\t];\n\tit(\"always includes the full Hermes class-transform set (dev and prod)\", function() {\n\t\texpect(getHermesSWCIncludes(true)).toEqual(expect.arrayContaining(CLASS_SET));\n\t\texpect(getHermesSWCIncludes(false)).toEqual(expect.arrayContaining(CLASS_SET));\n\t});\n\tit(\"adds transform-async-to-generator only in production\", function() {\n\t\texpect(getHermesSWCIncludes(true)).not.toContain(\"transform-async-to-generator\");\n\t\texpect(getHermesSWCIncludes(false)).toContain(\"transform-async-to-generator\");\n\t});\n});\ndescribe(\"hmrClientNoopPlugin\", function() {\n\tvar plugin = hmrClientNoopPlugin();\n\tvar resolveId = plugin.resolveId;\n\tvar load = plugin.load;\n\tvar VIRTUAL_ID = \"\\0vxrn-hmr-client-noop\";\n\tit.each([\n\t\t[\"react-native/Libraries/Utilities/HMRClient\", void 0],\n\t\t[\"../Utilities/HMRClient\", \"/project/node_modules/react-native/Libraries/Core.js\"],\n\t\t[\"../../Utilities/HMRClient.js\", \"/project/react-native/Libraries/Core.js\"],\n\t\t[\"..\\\\Utilities\\\\HMRClient.js\", \"C:\\\\project\\\\react-native\\\\Libraries\\\\Core.js\"],\n\t\t[\"../Utilities/HMRClient.ts\", \"/project/node_modules/react-native/Core.js\"],\n\t\t[\"../Utilities/HMRClient.tsx\", \"/project/node_modules/react-native/Core.js\"],\n\t\t[\"../Utilities/HMRClient.cjs\", \"/project/node_modules/react-native/Core.js\"]\n\t])(\"aliases RN HMRClient specifier %j to the no-op virtual module\", function(source, importer) {\n\t\texpect(resolveId(source, importer)).toEqual({\n\t\t\tid: VIRTUAL_ID,\n\t\t\texternal: false\n\t\t});\n\t});\n\tit.each([\n\t\t\"react-native/Libraries/Utilities/HMRClientRegistry\",\n\t\t\"some/MyUtilities/HMRClient\",\n\t\t\"react-native/Libraries/Core/setUpDeveloperTools\",\n\t\t\"react\"\n\t])(\"does not touch unrelated specifier %j\", function(source) {\n\t\texpect(resolveId(source)).toBeUndefined();\n\t});\n\tit(\"does not alias an app-authored Utilities/HMRClient module\", function() {\n\t\texpect(resolveId(\"../Utilities/HMRClient\", \"/project/src/App.tsx\")).toBeUndefined();\n\t});\n\tit(\"loads a no-op module exposing every HMRClient method RN calls\", function() {\n\t\tvar result = load(VIRTUAL_ID);\n\t\texpect(result === null || result === void 0 ? void 0 : result.moduleType).toBe(\"js\");\n\t\tfor (var _i = 0, _iter = [\n\t\t\t\"setup\",\n\t\t\t\"enable\",\n\t\t\t\"disable\",\n\t\t\t\"registerBundle\",\n\t\t\t\"log\",\n\t\t\t\"isEnabled\"\n\t\t]; _i < _iter.length; _i++) {\n\t\t\tvar method = _iter[_i];\n\t\t\texpect(result.code).toContain(method);\n\t\t}\n\t\texpect(result.code).toContain(\"export default HMRClient\");\n\t});\n\tit(\"does not load unrelated ids\", function() {\n\t\texpect(load(\"\\0some-other-virtual\")).toBeUndefined();\n\t});\n});\ndescribe(\"vxrnCompilerPlugin React Refresh registration\", function() {\n\tit(\"keeps initial-bundle registrations visible to rolldown\", async function() {\n\t\tvar previousNodeEnv = process.env.NODE_ENV;\n\t\tprocess.env.NODE_ENV = \"test\";\n\t\ttry {\n\t\t\tvar transform = vxrnCompilerPlugin(\"ios\", true).transform;\n\t\t\tvar code = (await transform(\"export const marker = \\\"$RefreshReg$(\\\"; export function Probe() { return <div>probe</div> }\", \"/project/src/Probe.tsx\")).code;\n\t\t\texpect(code).toContain(\"var __vxrnRefreshReg = globalThis.$RefreshReg$\");\n\t\t\texpect(code).toContain(\"__vxrnRefreshReg(\");\n\t\t\texpect(code).toContain(\"\\\"$RefreshReg$(\\\"\");\n\t\t} finally {\n\t\t\tprocess.env.NODE_ENV = previousNodeEnv;\n\t\t}\n\t});\n});\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["mkdtemp","rm","writeFile","tmpdir","join","dev","describe","expect","it","getHermesSWCIncludes","getHmrRuntimeSource","getNativeTransformConfig","hmrClientNoopPlugin","vxrnCompilerPlugin","wrapNativeBundleModuleScope","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","timeout","testRoot","entry","source","version","resolveInitialOutput","initialOutput","Promise","resolve","resolveHmrUpdate","hmrUpdate","engine","cwd","input","experimental","devMode","implement","format","onOutput","result2","onHmrUpdates","Error","changedFiles","length","_result_updates_find","run","initial","chunk","output","find","item","type","isEntry","toBeTruthy","globalThis","__rolldown_runtime__","Buffer","from","code","toString","runtime","clientId","toBe","registerClient","setTimeout","patch","race","_","reject","updates","update","applyHmrUpdate","changedIds","seq","__vxrnHmrBody","__vxrnHmrAccepted","close","recursive","force","root","_loop","_i2","_iter2","_loop2","_i12","_iter12","dev2","platform","define","JSON","stringify","envObject","parse","TAMAGUI_TARGET","TAMAGUI_ENVIRONMENT","_i1","_iter1","_i","_iter","RUNTIME_MARKER","out","openIdx","indexOf","toBeGreaterThan","toBeLessThan","Function","not","toThrow","CLASS_SET","toEqual","arrayContaining","toContain","plugin","resolveId","load","VIRTUAL_ID","each","importer","id","external","toBeUndefined","result","moduleType","method","previousNodeEnv","process","env","NODE_ENV","transform"],"sources":["createNativeDevEngine.test.native.js"],"sourcesContent":["import { mkdtemp, rm, writeFile } from \"fs/promises\";\nimport { tmpdir } from \"os\";\nimport { join } from \"path\";\nimport { dev } from \"rolldown/experimental\";\nimport { describe, expect, it } from \"vitest\";\nimport { getHermesSWCIncludes, getHmrRuntimeSource, getNativeTransformConfig, hmrClientNoopPlugin, vxrnCompilerPlugin, wrapNativeBundleModuleScope } from \"./createNativeDevEngine\";\n\nfunction _instanceof(left, right) {\n\tif (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) return !!right[Symbol.hasInstance](left);\n\telse return left instanceof right;\n}\nfunction _type_of(obj) {\n\t\"@swc/helpers - typeof\";\n\treturn obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\ndescribe(\"native Rolldown HMR runtime\", function() {\n\tit(\"registers a Rolldown 1.2 client and applies a self-accepted patch\", { timeout: 3e4 }, async function() {\n\t\tvar testRoot = await mkdtemp(join(tmpdir(), \"vxrn-native-hmr-\"));\n\t\tvar entry = join(testRoot, \"entry.js\");\n\t\tvar source = function(version) {\n\t\t\treturn `\nglobalThis.__vxrnHmrBody = '${version}'\nexport const value = '${version}'\nif (import.meta.hot) {\n import.meta.hot.accept((next) => {\n globalThis.__vxrnHmrAccepted = next.value\n })\n}\n`;\n\t\t};\n\t\tawait writeFile(entry, source(\"v1\"));\n\t\tvar resolveInitialOutput;\n\t\tvar initialOutput = new Promise(function(resolve) {\n\t\t\tresolveInitialOutput = resolve;\n\t\t});\n\t\tvar resolveHmrUpdate;\n\t\tvar hmrUpdate = new Promise(function(resolve) {\n\t\t\tresolveHmrUpdate = resolve;\n\t\t});\n\t\tvar engine = await dev({\n\t\t\tcwd: testRoot,\n\t\t\tinput: entry,\n\t\t\texperimental: { devMode: { implement: getHmrRuntimeSource() } }\n\t\t}, { format: \"esm\" }, {\n\t\t\tonOutput(result2) {\n\t\t\t\tresolveInitialOutput(result2);\n\t\t\t},\n\t\t\tonHmrUpdates(result2) {\n\t\t\t\tif (!_instanceof(result2, Error) && result2.changedFiles.length) resolveHmrUpdate(result2);\n\t\t\t}\n\t\t});\n\t\ttry {\n\t\t\tvar _result_updates_find;\n\t\t\tawait engine.run();\n\t\t\tvar initial = await initialOutput;\n\t\t\tif (_instanceof(initial, Error)) throw initial;\n\t\t\tvar chunk = initial.output.find(function(item) {\n\t\t\t\treturn item.type === \"chunk\" && item.isEntry;\n\t\t\t});\n\t\t\texpect(chunk).toBeTruthy();\n\t\t\tdelete globalThis.__rolldown_runtime__;\n\t\t\tawait import(`data:text/javascript;base64,${Buffer.from(chunk.code).toString(\"base64\")}`);\n\t\t\tvar runtime = globalThis.__rolldown_runtime__;\n\t\t\texpect(_type_of(runtime.clientId)).toBe(\"string\");\n\t\t\tawait engine.registerClient(runtime.clientId);\n\t\t\tawait new Promise(function(resolve) {\n\t\t\t\treturn setTimeout(resolve, 100);\n\t\t\t});\n\t\t\tawait writeFile(entry, source(\"v2\"));\n\t\t\tvar patch = (_result_updates_find = (await Promise.race([hmrUpdate, new Promise(function(_, reject) {\n\t\t\t\treturn setTimeout(function() {\n\t\t\t\t\treturn reject(/* @__PURE__ */ new Error(\"timed out waiting for HMR patch\"));\n\t\t\t\t}, 1e4);\n\t\t\t})])).updates.find(function(item) {\n\t\t\t\treturn item.clientId === runtime.clientId && item.update.type === \"Patch\";\n\t\t\t})) === null || _result_updates_find === void 0 ? void 0 : _result_updates_find.update;\n\t\t\texpect(patch).toBeTruthy();\n\t\t\texpect(runtime.applyHmrUpdate(patch.code, patch.changedIds, patch.seq)).toBe(true);\n\t\t\texpect(globalThis.__vxrnHmrBody).toBe(\"v2\");\n\t\t\texpect(globalThis.__vxrnHmrAccepted).toBe(\"v2\");\n\t\t} finally {\n\t\t\tawait engine.close();\n\t\t\tawait rm(testRoot, {\n\t\t\t\trecursive: true,\n\t\t\t\tforce: true\n\t\t\t});\n\t\t\tdelete globalThis.__rolldown_runtime__;\n\t\t\tdelete globalThis.__vxrnHmrBody;\n\t\t\tdelete globalThis.__vxrnHmrAccepted;\n\t\t}\n\t});\n});\nvar root = \"/tmp/vxrn-native-env-define-test-nonexistent\";\ndescribe(\"getNativeTransformConfig platform env defines\", function() {\n\tvar _loop = function(_i2, _iter2) {\n\t\tvar _loop2 = function(_i12, _iter12) {\n\t\t\tvar dev2 = _iter12[_i12];\n\t\t\tit(`injects TAMAGUI_TARGET=native for ${platform} (dev=${dev2})`, function() {\n\t\t\t\tvar { define } = getNativeTransformConfig(platform, dev2, root);\n\t\t\t\texpect(define[\"import.meta.env.TAMAGUI_TARGET\"]).toBe(\"\\\"native\\\"\");\n\t\t\t\texpect(define[\"process.env.TAMAGUI_TARGET\"]).toBe(\"\\\"native\\\"\");\n\t\t\t\texpect(define[\"import.meta.env.TAMAGUI_ENVIRONMENT\"]).toBe(JSON.stringify(platform));\n\t\t\t\texpect(define[\"import.meta.env.VITE_ENVIRONMENT\"]).toBe(JSON.stringify(platform));\n\t\t\t\texpect(define[\"import.meta.env.VITE_NATIVE\"]).toBe(\"\\\"1\\\"\");\n\t\t\t\texpect(define[\"import.meta.env.EXPO_OS\"]).toBe(JSON.stringify(platform));\n\t\t\t\tvar envObject = JSON.parse(define[\"import.meta.env\"]);\n\t\t\t\texpect(envObject.TAMAGUI_TARGET).toBe(\"native\");\n\t\t\t\texpect(envObject.TAMAGUI_ENVIRONMENT).toBe(platform);\n\t\t\t});\n\t\t};\n\t\tvar platform = _iter2[_i2];\n\t\tfor (var _i1 = 0, _iter1 = [true, false]; _i1 < _iter1.length; _i1++) _loop2(_i1, _iter1);\n\t};\n\tfor (var _i = 0, _iter = [\"ios\", \"android\"]; _i < _iter.length; _i++) _loop(_i, _iter);\n});\ndescribe(\"wrapNativeBundleModuleScope\", function() {\n\tvar RUNTIME_MARKER = \"//#region \\\\0rolldown/runtime.js\";\n\tit(\"wraps module code after the prelude so top-level vars do not leak to global\", function() {\n\t\tvar out = wrapNativeBundleModuleScope(`globalThis.global = globalThis;\nglobalThis.__DEV__ = true;\n${RUNTIME_MARKER}\nvar fetch_hot, fetch$1, Headers, Request, Response$1;\nglobalThis.__rolldown_runtime__ = {};\n`);\n\t\tvar openIdx = out.indexOf(\";(function() {\");\n\t\texpect(openIdx).toBeGreaterThan(-1);\n\t\texpect(out.indexOf(\"globalThis.__DEV__\")).toBeLessThan(openIdx);\n\t\texpect(out.indexOf(\"var fetch_hot\")).toBeGreaterThan(openIdx);\n\t\texpect(function() {\n\t\t\treturn new Function(out);\n\t\t}).not.toThrow();\n\t});\n\tit(\"is a no-op when the runtime marker is absent (e.g. prod bundle)\", function() {\n\t\tvar input = \"var x = 1;\\nconsole.log(x);\\n\";\n\t\texpect(wrapNativeBundleModuleScope(input)).toBe(input);\n\t});\n});\ndescribe(\"getHermesSWCIncludes\", function() {\n\tvar CLASS_SET = [\n\t\t\"transform-classes\",\n\t\t\"transform-class-properties\",\n\t\t\"transform-class-static-block\",\n\t\t\"transform-private-methods\",\n\t\t\"transform-private-property-in-object\"\n\t];\n\tit(\"always includes the full Hermes class-transform set (dev and prod)\", function() {\n\t\texpect(getHermesSWCIncludes(true)).toEqual(expect.arrayContaining(CLASS_SET));\n\t\texpect(getHermesSWCIncludes(false)).toEqual(expect.arrayContaining(CLASS_SET));\n\t});\n\tit(\"adds transform-async-to-generator only in production\", function() {\n\t\texpect(getHermesSWCIncludes(true)).not.toContain(\"transform-async-to-generator\");\n\t\texpect(getHermesSWCIncludes(false)).toContain(\"transform-async-to-generator\");\n\t});\n});\ndescribe(\"hmrClientNoopPlugin\", function() {\n\tvar plugin = hmrClientNoopPlugin();\n\tvar resolveId = plugin.resolveId;\n\tvar load = plugin.load;\n\tvar VIRTUAL_ID = \"\\0vxrn-hmr-client-noop\";\n\tit.each([\n\t\t[\"react-native/Libraries/Utilities/HMRClient\", void 0],\n\t\t[\"../Utilities/HMRClient\", \"/project/node_modules/react-native/Libraries/Core.js\"],\n\t\t[\"../../Utilities/HMRClient.js\", \"/project/react-native/Libraries/Core.js\"],\n\t\t[\"..\\\\Utilities\\\\HMRClient.js\", \"C:\\\\project\\\\react-native\\\\Libraries\\\\Core.js\"],\n\t\t[\"../Utilities/HMRClient.ts\", \"/project/node_modules/react-native/Core.js\"],\n\t\t[\"../Utilities/HMRClient.tsx\", \"/project/node_modules/react-native/Core.js\"],\n\t\t[\"../Utilities/HMRClient.cjs\", \"/project/node_modules/react-native/Core.js\"]\n\t])(\"aliases RN HMRClient specifier %j to the no-op virtual module\", function(source, importer) {\n\t\texpect(resolveId(source, importer)).toEqual({\n\t\t\tid: VIRTUAL_ID,\n\t\t\texternal: false\n\t\t});\n\t});\n\tit.each([\n\t\t\"react-native/Libraries/Utilities/HMRClientRegistry\",\n\t\t\"some/MyUtilities/HMRClient\",\n\t\t\"react-native/Libraries/Core/setUpDeveloperTools\",\n\t\t\"react\"\n\t])(\"does not touch unrelated specifier %j\", function(source) {\n\t\texpect(resolveId(source)).toBeUndefined();\n\t});\n\tit(\"does not alias an app-authored Utilities/HMRClient module\", function() {\n\t\texpect(resolveId(\"../Utilities/HMRClient\", \"/project/src/App.tsx\")).toBeUndefined();\n\t});\n\tit(\"loads a no-op module exposing every HMRClient method RN calls\", function() {\n\t\tvar result = load(VIRTUAL_ID);\n\t\texpect(result === null || result === void 0 ? void 0 : result.moduleType).toBe(\"js\");\n\t\tfor (var _i = 0, _iter = [\n\t\t\t\"setup\",\n\t\t\t\"enable\",\n\t\t\t\"disable\",\n\t\t\t\"registerBundle\",\n\t\t\t\"log\",\n\t\t\t\"isEnabled\"\n\t\t]; _i < _iter.length; _i++) {\n\t\t\tvar method = _iter[_i];\n\t\t\texpect(result.code).toContain(method);\n\t\t}\n\t\texpect(result.code).toContain(\"export default HMRClient\");\n\t});\n\tit(\"does not load unrelated ids\", function() {\n\t\texpect(load(\"\\0some-other-virtual\")).toBeUndefined();\n\t});\n});\ndescribe(\"vxrnCompilerPlugin React Refresh registration\", function() {\n\tit(\"keeps initial-bundle registrations visible to rolldown\", async function() {\n\t\tvar previousNodeEnv = process.env.NODE_ENV;\n\t\tprocess.env.NODE_ENV = \"test\";\n\t\ttry {\n\t\t\tvar transform = vxrnCompilerPlugin(\"ios\", true).transform;\n\t\t\tvar code = (await transform(\"export const marker = \\\"$RefreshReg$(\\\"; export function Probe() { return <div>probe</div> }\", \"/project/src/Probe.tsx\")).code;\n\t\t\texpect(code).toContain(\"var __vxrnRefreshReg = globalThis.$RefreshReg$\");\n\t\t\texpect(code).toContain(\"__vxrnRefreshReg(\");\n\t\t\texpect(code).toContain(\"\\\"$RefreshReg$(\\\"\");\n\t\t} finally {\n\t\t\tprocess.env.NODE_ENV = previousNodeEnv;\n\t\t}\n\t});\n});\n\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxrn",
3
- "version": "1.25.4",
3
+ "version": "1.25.6",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -62,16 +62,16 @@
62
62
  "@expo/config-plugins": "~57.0.6",
63
63
  "@hono/node-server": "^1.19.14",
64
64
  "@react-native/dev-middleware": "^0.86.2",
65
- "@vxrn/compiler": "1.25.4",
66
- "@vxrn/debug": "1.25.4",
67
- "@vxrn/query-string": "1.25.4",
68
- "@vxrn/resolve": "1.25.4",
69
- "@vxrn/safe-area": "1.25.4",
70
- "@vxrn/url-parse": "1.25.4",
71
- "@vxrn/utils": "1.25.4",
72
- "@vxrn/vendor": "1.25.4",
73
- "@vxrn/vite-flow": "1.25.4",
74
- "@vxrn/vite-plugin-metro": "1.25.4",
65
+ "@vxrn/compiler": "1.25.6",
66
+ "@vxrn/debug": "1.25.6",
67
+ "@vxrn/query-string": "1.25.6",
68
+ "@vxrn/resolve": "1.25.6",
69
+ "@vxrn/safe-area": "1.25.6",
70
+ "@vxrn/url-parse": "1.25.6",
71
+ "@vxrn/utils": "1.25.6",
72
+ "@vxrn/vendor": "1.25.6",
73
+ "@vxrn/vite-flow": "1.25.6",
74
+ "@vxrn/vite-plugin-metro": "1.25.6",
75
75
  "citty": "^0.1.6",
76
76
  "dotenv": "^17.2.1",
77
77
  "dotenv-expand": "^12.0.2",
@@ -1,5 +1,5 @@
1
1
  import type { Connect, Plugin, ViteDevServer } from 'vite'
2
- import { WebSocketServer } from 'ws'
2
+ import { WebSocketServer, type WebSocket } from 'ws'
3
3
  import { createMessageSocket } from '@vxrn/utils'
4
4
  import {
5
5
  addConnectedNativeClient,
@@ -17,6 +17,11 @@ type ClientMessage = {
17
17
  data: string[]
18
18
  }
19
19
 
20
+ type NativeHmrSocket = WebSocket & {
21
+ vxrnClientId: string
22
+ vxrnPlatform: 'ios' | 'android'
23
+ }
24
+
20
25
  export function createReactNativeDevServerPlugin(
21
26
  options?: Partial<
22
27
  Pick<VXRNOptionsFilled, 'cacheDir' | 'debugBundle' | 'debugBundlePaths' | 'entries'>
@@ -61,18 +66,17 @@ export function createReactNativeDevServerPlugin(
61
66
 
62
67
  // rolldown HMR socket (used by rolldown dev() HMR client)
63
68
  if (url.startsWith('/hot')) {
69
+ const hmrUrl = new URL(url, `http://${req.headers.host || 'localhost'}`)
70
+ const platform = validPlatforms[hmrUrl.searchParams.get('platform') || '']
71
+ const clientId = hmrUrl.searchParams.get('clientId')
72
+ if (!platform || !clientId) {
73
+ socket.destroy()
74
+ return
75
+ }
64
76
  hmrWSS.handleUpgrade(req, socket, head, (ws) => {
65
- // listen for module registration messages from client
66
- ws.on('message', async (data: any) => {
67
- try {
68
- const msg = JSON.parse(data.toString())
69
- if (msg.type === 'hmr:module-registered' && msg.modules) {
70
- const currentEngine = devEngines['ios'] || devEngines['android']
71
- if (currentEngine?.engine) {
72
- await currentEngine.engine.registerModules('vxrn-dev', msg.modules)
73
- }
74
- }
75
- } catch {}
77
+ Object.assign(ws, {
78
+ vxrnClientId: clientId,
79
+ vxrnPlatform: platform,
76
80
  })
77
81
  hmrWSS.emit('connection', ws, req)
78
82
  })
@@ -95,17 +99,47 @@ export function createReactNativeDevServerPlugin(
95
99
  }
96
100
  })
97
101
 
98
- hmrWSS.on('connection', (socket) => {
102
+ hmrWSS.on('connection', async (socket: NativeHmrSocket) => {
103
+ const currentEngine = devEngines[socket.vxrnPlatform]
104
+ if (!currentEngine) {
105
+ socket.close(1013, 'native dev engine unavailable')
106
+ return
107
+ }
108
+
109
+ try {
110
+ await currentEngine.engine.registerClient(socket.vxrnClientId)
111
+ } catch (error) {
112
+ console.error('[hmr] failed to register native client', error)
113
+ socket.close(1011, 'native HMR registration failed')
114
+ return
115
+ }
99
116
  addConnectedNativeClient()
100
117
 
101
- socket.on('message', (message) => {
102
- if (message.toString().includes('ping')) {
118
+ socket.on('message', async (message) => {
119
+ const value = message.toString()
120
+ if (value === 'ping') {
103
121
  socket.send('pong')
122
+ return
123
+ }
124
+
125
+ let update: { type?: string }
126
+ try {
127
+ update = JSON.parse(value)
128
+ } catch {
129
+ return
130
+ }
131
+ if (update.type === 'hmr:invalidate') {
132
+ currentEngine.engine.triggerFullBuild()
133
+ await currentEngine.engine.ensureLatestBuildOutput()
134
+ socket.send(JSON.stringify({ type: 'hmr:reload' }))
104
135
  }
105
136
  })
106
137
 
107
138
  socket.on('close', () => {
108
139
  removeConnectedNativeClient()
140
+ currentEngine.engine.removeClient(socket.vxrnClientId).catch((error) => {
141
+ console.error('[hmr] failed to remove native client', error)
142
+ })
109
143
  })
110
144
 
111
145
  socket.on('error', (error) => {
@@ -181,8 +215,14 @@ export function createReactNativeDevServerPlugin(
181
215
  serverUrl: `http://${typeof host === 'string' && host !== '0.0.0.0' ? host : 'localhost'}:${getBoundPort(server)}`,
182
216
  onHmrUpdate: (update) => {
183
217
  const msg = JSON.stringify(update)
184
- hmrWSS.clients.forEach((client: any) => {
185
- if (client.readyState === 1) {
218
+ hmrWSS.clients.forEach((client) => {
219
+ const nativeClient = client as NativeHmrSocket
220
+ if (
221
+ nativeClient.readyState === 1 &&
222
+ nativeClient.vxrnPlatform === platform &&
223
+ (update.type === 'hmr:error' ||
224
+ nativeClient.vxrnClientId === update.clientId)
225
+ ) {
186
226
  client.send(msg)
187
227
  }
188
228
  })
@@ -1,12 +1,107 @@
1
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises'
2
+ import { tmpdir } from 'node:os'
3
+ import { join } from 'node:path'
4
+ import { dev } from 'rolldown/experimental'
1
5
  import { describe, expect, it } from 'vitest'
2
6
  import {
3
7
  getHermesSWCIncludes,
8
+ getHmrRuntimeSource,
4
9
  getNativeTransformConfig,
5
10
  hmrClientNoopPlugin,
6
11
  vxrnCompilerPlugin,
7
12
  wrapNativeBundleModuleScope,
8
13
  } from './createNativeDevEngine'
9
14
 
15
+ describe('native Rolldown HMR runtime', () => {
16
+ it(
17
+ 'registers a Rolldown 1.2 client and applies a self-accepted patch',
18
+ { timeout: 30_000 },
19
+ async () => {
20
+ const testRoot = await mkdtemp(join(tmpdir(), 'vxrn-native-hmr-'))
21
+ const entry = join(testRoot, 'entry.js')
22
+ const source = (version: string) => `
23
+ globalThis.__vxrnHmrBody = '${version}'
24
+ export const value = '${version}'
25
+ if (import.meta.hot) {
26
+ import.meta.hot.accept((next) => {
27
+ globalThis.__vxrnHmrAccepted = next.value
28
+ })
29
+ }
30
+ `
31
+ await writeFile(entry, source('v1'))
32
+
33
+ let resolveInitialOutput!: (output: any) => void
34
+ const initialOutput = new Promise<any>((resolve) => {
35
+ resolveInitialOutput = resolve
36
+ })
37
+ let resolveHmrUpdate!: (output: any) => void
38
+ const hmrUpdate = new Promise<any>((resolve) => {
39
+ resolveHmrUpdate = resolve
40
+ })
41
+ const engine = await dev(
42
+ {
43
+ cwd: testRoot,
44
+ input: entry,
45
+ experimental: { devMode: { implement: getHmrRuntimeSource() } },
46
+ },
47
+ { format: 'esm' },
48
+ {
49
+ onOutput(result) {
50
+ resolveInitialOutput(result)
51
+ },
52
+ onHmrUpdates(result) {
53
+ if (!(result instanceof Error) && result.changedFiles.length) {
54
+ resolveHmrUpdate(result)
55
+ }
56
+ },
57
+ }
58
+ )
59
+
60
+ try {
61
+ await engine.run()
62
+ const initial = await initialOutput
63
+ if (initial instanceof Error) throw initial
64
+ const chunk = initial.output.find(
65
+ (item: any) => item.type === 'chunk' && item.isEntry
66
+ )
67
+ expect(chunk).toBeTruthy()
68
+
69
+ delete (globalThis as any).__rolldown_runtime__
70
+ await import(
71
+ `data:text/javascript;base64,${Buffer.from(chunk.code).toString('base64')}`
72
+ )
73
+ const runtime = (globalThis as any).__rolldown_runtime__
74
+ expect(typeof runtime.clientId).toBe('string')
75
+ await engine.registerClient(runtime.clientId)
76
+
77
+ await new Promise((resolve) => setTimeout(resolve, 100))
78
+ await writeFile(entry, source('v2'))
79
+ const result = await Promise.race([
80
+ hmrUpdate,
81
+ new Promise((_, reject) =>
82
+ setTimeout(() => reject(new Error('timed out waiting for HMR patch')), 10_000)
83
+ ),
84
+ ])
85
+ const patch = result.updates.find(
86
+ (item: any) =>
87
+ item.clientId === runtime.clientId && item.update.type === 'Patch'
88
+ )?.update
89
+ expect(patch).toBeTruthy()
90
+
91
+ expect(runtime.applyHmrUpdate(patch.code, patch.changedIds, patch.seq)).toBe(true)
92
+ expect((globalThis as any).__vxrnHmrBody).toBe('v2')
93
+ expect((globalThis as any).__vxrnHmrAccepted).toBe('v2')
94
+ } finally {
95
+ await engine.close()
96
+ await rm(testRoot, { recursive: true, force: true })
97
+ delete (globalThis as any).__rolldown_runtime__
98
+ delete (globalThis as any).__vxrnHmrBody
99
+ delete (globalThis as any).__vxrnHmrAccepted
100
+ }
101
+ }
102
+ )
103
+ })
104
+
10
105
  // use a root with no .env files so only the platform defines are present
11
106
  const root = '/tmp/vxrn-native-env-define-test-nonexistent'
12
107