vxrn 1.25.7 → 1.25.8

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,9 +1,10 @@
1
1
  import { mkdtemp, rm, writeFile } from "fs/promises";
2
2
  import { tmpdir } from "os";
3
3
  import { join } from "path";
4
+ import { rolldown } from "rolldown";
4
5
  import { dev } from "rolldown/experimental";
5
6
  import { describe, expect, it } from "vitest";
6
- import { getHermesSWCIncludes, getHmrRuntimeSource, getNativeTransformConfig, hmrClientNoopPlugin, vxrnCompilerPlugin, wrapNativeBundleModuleScope } from "./createNativeDevEngine.native.js";
7
+ import { getHermesSWCIncludes, getHmrRuntimeSource, getNativeTransformConfig, hermesCompatSWCPlugin, hmrClientNoopPlugin, vxrnCompilerPlugin, wrapNativeBundleModuleScope } from "./createNativeDevEngine.native.js";
7
8
  function _instanceof(left, right) {
8
9
  if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) return !!right[Symbol.hasInstance](left);else return left instanceof right;
9
10
  }
@@ -38,6 +39,7 @@ if (import.meta.hot) {
38
39
  var hmrUpdate = new Promise(function (resolve) {
39
40
  resolveHmrUpdate = resolve;
40
41
  });
42
+ var registeredClientId;
41
43
  var engine = await dev({
42
44
  cwd: testRoot,
43
45
  input: entry,
@@ -53,7 +55,9 @@ if (import.meta.hot) {
53
55
  resolveInitialOutput(result2);
54
56
  },
55
57
  onHmrUpdates(result2) {
56
- if (!_instanceof(result2, Error) && result2.changedFiles.length) resolveHmrUpdate(result2);
58
+ if (!_instanceof(result2, Error) && result2.updates.some(function (item) {
59
+ return item.clientId === registeredClientId && item.update.type === "Patch";
60
+ })) resolveHmrUpdate(result2);
57
61
  }
58
62
  });
59
63
  try {
@@ -69,10 +73,8 @@ if (import.meta.hot) {
69
73
  await import(`data:text/javascript;base64,${Buffer.from(chunk.code).toString("base64")}`);
70
74
  var runtime = globalThis.__rolldown_runtime__;
71
75
  expect(_type_of(runtime.clientId)).toBe("string");
76
+ registeredClientId = runtime.clientId;
72
77
  await engine.registerClient(runtime.clientId);
73
- await new Promise(function (resolve) {
74
- return setTimeout(resolve, 100);
75
- });
76
78
  await writeFile(entry, source("v2"));
77
79
  var patch = (_result_updates_find = (await Promise.race([hmrUpdate, new Promise(function (_, reject) {
78
80
  return setTimeout(function () {
@@ -145,7 +147,7 @@ globalThis.__rolldown_runtime__ = {};
145
147
  });
146
148
  });
147
149
  describe("getHermesSWCIncludes", function () {
148
- var CLASS_SET = ["transform-classes", "transform-class-properties", "transform-class-static-block", "transform-private-methods", "transform-private-property-in-object"];
150
+ var CLASS_SET = ["transform-classes", "transform-parameters", "transform-class-properties", "transform-class-static-block", "transform-private-methods", "transform-private-property-in-object"];
149
151
  it("always includes the full Hermes class-transform set (dev and prod)", function () {
150
152
  expect(getHermesSWCIncludes(true)).toEqual(expect.arrayContaining(CLASS_SET));
151
153
  expect(getHermesSWCIncludes(false)).toEqual(expect.arrayContaining(CLASS_SET));
@@ -154,6 +156,41 @@ describe("getHermesSWCIncludes", function () {
154
156
  expect(getHermesSWCIncludes(true)).not.toContain("transform-async-to-generator");
155
157
  expect(getHermesSWCIncludes(false)).toContain("transform-async-to-generator");
156
158
  });
159
+ it("bundles lowered classes whose constructors use default and rest parameters", async function () {
160
+ var testRoot = await mkdtemp(join(tmpdir(), "vxrn-hermes-parameters-"));
161
+ var entry = join(testRoot, "entry.js");
162
+ await writeFile(entry, `
163
+ class ParameterProbe {
164
+ prefix = 'value'
165
+
166
+ constructor(value = 'default', ...rest) {
167
+ this.result = [this.prefix, value, ...rest].join(':')
168
+ }
169
+ }
170
+
171
+ export const result = new ParameterProbe(undefined, 'rest-a', 'rest-b').result
172
+ `);
173
+ var build = await rolldown({
174
+ input: entry,
175
+ plugins: [hermesCompatSWCPlugin(true)]
176
+ });
177
+ try {
178
+ var chunk = (await build.generate({
179
+ format: "esm"
180
+ })).output.find(function (item) {
181
+ return item.type === "chunk";
182
+ });
183
+ expect(chunk).toBeTruthy();
184
+ if (!chunk) throw new Error("Rolldown did not emit a JavaScript chunk");
185
+ expect((await import(`data:text/javascript;base64,${Buffer.from(chunk.code).toString("base64")}`)).result).toBe("value:default:rest-a:rest-b");
186
+ } finally {
187
+ await build.close();
188
+ await rm(testRoot, {
189
+ recursive: true,
190
+ force: true
191
+ });
192
+ }
193
+ });
157
194
  });
158
195
  describe("hmrClientNoopPlugin", function () {
159
196
  var plugin = hmrClientNoopPlugin();
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"names":["mkdtemp","rm","writeFile","tmpdir","join","rolldown","dev","describe","expect","it","getHermesSWCIncludes","getHmrRuntimeSource","getNativeTransformConfig","hermesCompatSWCPlugin","hmrClientNoopPlugin","vxrnCompilerPlugin","wrapNativeBundleModuleScope","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","timeout","testRoot","entry","source","version","resolveInitialOutput","initialOutput","Promise","resolve","resolveHmrUpdate","hmrUpdate","registeredClientId","engine","cwd","input","experimental","devMode","implement","format","onOutput","result2","onHmrUpdates","Error","updates","some","item","clientId","update","type","_result_updates_find","run","initial","chunk","output","find","isEntry","toBeTruthy","globalThis","__rolldown_runtime__","Buffer","from","code","toString","runtime","toBe","registerClient","patch","race","_","reject","setTimeout","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","length","_i","_iter","RUNTIME_MARKER","out","openIdx","indexOf","toBeGreaterThan","toBeLessThan","Function","not","toThrow","CLASS_SET","toEqual","arrayContaining","toContain","build","plugins","generate","result","plugin","resolveId","load","VIRTUAL_ID","each","importer","id","external","toBeUndefined","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 { rolldown } from \"rolldown\";\nimport { dev } from \"rolldown/experimental\";\nimport { describe, expect, it } from \"vitest\";\nimport { getHermesSWCIncludes, getHmrRuntimeSource, getNativeTransformConfig, hermesCompatSWCPlugin, 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 registeredClientId;\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.updates.some(function(item) {\n\t\t\t\t\treturn item.clientId === registeredClientId && item.update.type === \"Patch\";\n\t\t\t\t})) 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\tregisteredClientId = runtime.clientId;\n\t\t\tawait engine.registerClient(runtime.clientId);\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-parameters\",\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\tit(\"bundles lowered classes whose constructors use default and rest parameters\", async function() {\n\t\tvar testRoot = await mkdtemp(join(tmpdir(), \"vxrn-hermes-parameters-\"));\n\t\tvar entry = join(testRoot, \"entry.js\");\n\t\tawait writeFile(entry, `\nclass ParameterProbe {\n prefix = 'value'\n\n constructor(value = 'default', ...rest) {\n this.result = [this.prefix, value, ...rest].join(':')\n }\n}\n\nexport const result = new ParameterProbe(undefined, 'rest-a', 'rest-b').result\n`);\n\t\tvar build = await rolldown({\n\t\t\tinput: entry,\n\t\t\tplugins: [hermesCompatSWCPlugin(true)]\n\t\t});\n\t\ttry {\n\t\t\tvar chunk = (await build.generate({ format: \"esm\" })).output.find(function(item) {\n\t\t\t\treturn item.type === \"chunk\";\n\t\t\t});\n\t\t\texpect(chunk).toBeTruthy();\n\t\t\tif (!chunk) throw new Error(\"Rolldown did not emit a JavaScript chunk\");\n\t\t\texpect((await import(`data:text/javascript;base64,${Buffer.from(chunk.code).toString(\"base64\")}`)).result).toBe(\"value:default:rest-a:rest-b\");\n\t\t} finally {\n\t\t\tawait build.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}\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":[]}
@@ -0,0 +1,44 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { createNativeDevEngine } from "./createNativeDevEngine.mjs";
3
+ const rolldownState = vi.hoisted(() => ({
4
+ firstBuildError: new Error("first native build failed")
5
+ }));
6
+ vi.mock("rolldown/experimental", () => ({
7
+ viteImportGlobPlugin: () => ({
8
+ name: "test:import-glob"
9
+ }),
10
+ dev: async (_input, _output, callbacks) => ({
11
+ async run() {
12
+ await callbacks.onOutput(rolldownState.firstBuildError);
13
+ },
14
+ async ensureLatestBuildOutput() {},
15
+ async close() {}
16
+ })
17
+ }));
18
+ afterEach(() => {
19
+ vi.restoreAllMocks();
20
+ vi.useRealTimers();
21
+ });
22
+ describe("createNativeDevEngine initial build failure", () => {
23
+ it("rejects the bundle request immediately with the Rolldown error", async () => {
24
+ vi.useFakeTimers();
25
+ vi.spyOn(console, "error").mockImplementation(() => {});
26
+ const engine = await createNativeDevEngine({
27
+ root: "/tmp/vxrn-native-build-error-test",
28
+ port: 4400,
29
+ platform: "ios"
30
+ });
31
+ let settled = false;
32
+ const bundleResult = engine.getBundle().then(() => new Error("bundle request unexpectedly resolved"), error => {
33
+ settled = true;
34
+ return error;
35
+ });
36
+ await vi.advanceTimersByTimeAsync(0);
37
+ const settledBeforeTimeout = settled;
38
+ await vi.advanceTimersByTimeAsync(12e4);
39
+ expect(settledBeforeTimeout).toBe(true);
40
+ expect(await bundleResult).toBe(rolldownState.firstBuildError);
41
+ await engine.close();
42
+ });
43
+ });
44
+ //# sourceMappingURL=createNativeDevEngineFailure.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["afterEach","describe","expect","it","vi","createNativeDevEngine","rolldownState","hoisted","firstBuildError","Error","mock","viteImportGlobPlugin","name","dev","_input","_output","callbacks","run","onOutput","ensureLatestBuildOutput","close","restoreAllMocks","useRealTimers","useFakeTimers","spyOn","console","mockImplementation","engine","root","port","platform","settled","bundleResult","getBundle","then","error","advanceTimersByTimeAsync","settledBeforeTimeout","toBe"],"sources":["../../src/utils/createNativeDevEngineFailure.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,EAAWC,QAAA,EAAUC,MAAA,EAAQC,EAAA,EAAIC,EAAA,QAAU;AAqBpD,SAASC,qBAAA,QAA6B;AAnBtC,MAAMC,aAAA,GAAgBF,EAAA,CAAGG,OAAA,CAAQ,OAAO;EACtCC,eAAA,EAAiB,IAAIC,KAAA,CAAM,2BAA2B;AACxD,EAAE;AAEFL,EAAA,CAAGM,IAAA,CAAK,yBAAyB,OAAO;EACtCC,oBAAA,EAAsBA,CAAA,MAAO;IAAEC,IAAA,EAAM;EAAmB;EACxDC,GAAA,EAAK,MAAAA,CACHC,MAAA,EACAC,OAAA,EACAC,SAAA,MACI;IACJ,MAAMC,IAAA,EAAM;MACV,MAAMD,SAAA,CAAUE,QAAA,CAASZ,aAAA,CAAcE,eAAe;IACxD;IACA,MAAMW,wBAAA,EAA0B,CAAC;IACjC,MAAMC,MAAA,EAAQ,CAAC;EACjB;AACF,EAAE;AAIFpB,SAAA,CAAU,MAAM;EACdI,EAAA,CAAGiB,eAAA,CAAgB;EACnBjB,EAAA,CAAGkB,aAAA,CAAc;AACnB,CAAC;AAEDrB,QAAA,CAAS,+CAA+C,MAAM;EAC5DE,EAAA,CAAG,kEAAkE,YAAY;IAC/EC,EAAA,CAAGmB,aAAA,CAAc;IACjBnB,EAAA,CAAGoB,KAAA,CAAMC,OAAA,EAAS,OAAO,EAAEC,kBAAA,CAAmB,MAAM,CAAC,CAAC;IAEtD,MAAMC,MAAA,GAAS,MAAMtB,qBAAA,CAAsB;MACzCuB,IAAA,EAAM;MACNC,IAAA,EAAM;MACNC,QAAA,EAAU;IACZ,CAAC;IAED,IAAIC,OAAA,GAAU;IACd,MAAMC,YAAA,GAAeL,MAAA,CAAOM,SAAA,CAAU,EAAEC,IAAA,CACtC,MAAM,IAAIzB,KAAA,CAAM,sCAAsC,GACrD0B,KAAA,IAAU;MACTJ,OAAA,GAAU;MACV,OAAOI,KAAA;IACT,CACF;IAEA,MAAM/B,EAAA,CAAGgC,wBAAA,CAAyB,CAAC;IACnC,MAAMC,oBAAA,GAAuBN,OAAA;IAC7B,MAAM3B,EAAA,CAAGgC,wBAAA,CAAyB,IAAO;IAEzClC,MAAA,CAAOmC,oBAAoB,EAAEC,IAAA,CAAK,IAAI;IACtCpC,MAAA,CAAO,MAAM8B,YAAY,EAAEM,IAAA,CAAKhC,aAAA,CAAcE,eAAe;IAC7D,MAAMmB,MAAA,CAAOP,KAAA,CAAM;EACrB,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { createNativeDevEngine } from "./createNativeDevEngine.native.js";
3
+ var rolldownState = vi.hoisted(function () {
4
+ return {
5
+ firstBuildError: new Error("first native build failed")
6
+ };
7
+ });
8
+ vi.mock("rolldown/experimental", function () {
9
+ return {
10
+ viteImportGlobPlugin: function () {
11
+ return {
12
+ name: "test:import-glob"
13
+ };
14
+ },
15
+ dev: async function (_input, _output, callbacks) {
16
+ return {
17
+ async run() {
18
+ await callbacks.onOutput(rolldownState.firstBuildError);
19
+ },
20
+ async ensureLatestBuildOutput() {},
21
+ async close() {}
22
+ };
23
+ }
24
+ };
25
+ });
26
+ afterEach(function () {
27
+ vi.restoreAllMocks();
28
+ vi.useRealTimers();
29
+ });
30
+ describe("createNativeDevEngine initial build failure", function () {
31
+ it("rejects the bundle request immediately with the Rolldown error", async function () {
32
+ vi.useFakeTimers();
33
+ vi.spyOn(console, "error").mockImplementation(function () {});
34
+ var engine = await createNativeDevEngine({
35
+ root: "/tmp/vxrn-native-build-error-test",
36
+ port: 4400,
37
+ platform: "ios"
38
+ });
39
+ var settled = false;
40
+ var bundleResult = engine.getBundle().then(function () {
41
+ return new Error("bundle request unexpectedly resolved");
42
+ }, function (error) {
43
+ settled = true;
44
+ return error;
45
+ });
46
+ await vi.advanceTimersByTimeAsync(0);
47
+ var settledBeforeTimeout = settled;
48
+ await vi.advanceTimersByTimeAsync(12e4);
49
+ expect(settledBeforeTimeout).toBe(true);
50
+ expect(await bundleResult).toBe(rolldownState.firstBuildError);
51
+ await engine.close();
52
+ });
53
+ });
54
+ //# sourceMappingURL=createNativeDevEngineFailure.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["afterEach","describe","expect","it","vi","createNativeDevEngine","rolldownState","hoisted","firstBuildError","Error","mock","viteImportGlobPlugin","name","dev","_input","_output","callbacks","run","onOutput","ensureLatestBuildOutput","close","restoreAllMocks","useRealTimers","useFakeTimers","spyOn","console","mockImplementation","engine","root","port","platform","settled","bundleResult","getBundle","then","error"],"sources":["../../src/utils/createNativeDevEngineFailure.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,EAAWC,QAAA,EAAUC,MAAA,EAAQC,EAAA,EAAIC,EAAA,QAAU;AAqBpD,SAASC,qBAAA,QAA6B;AAnBtC,IAAAC,aAAM,GAAAF,EAAgB,CAAAG,OAAG,aAAe;EACtC;IACAC,eAAA,MAAAC,KAAA;EAEF,CAAG;AAAqC,EACtC;AAAwDL,EACxD,CAAAM,IAAK,wBAGH;EACI,OACJ;IACEC,oBAAgB,WAAAA,CAAA,EAAS;MAC3B;QACAC,IAAM;MAA2B;IACjC;IAAeC,GAAA,iBAAAA,CAAAC,MAAA,EAAAC,OAAA,EAAAC,SAAA;MACjB;QACA,MAAAC,IAAA;UAIQ,MAAMD,SAAA,CAAAE,QAAA,CAAAZ,aAAA,CAAAE,eAAA;QACX;QACA,MAAAW,uBAAcA,CAAA,GAClB;QAED,MAASC,MAAA,GACJ;MACD,CAAG;IACH;EAAoD;AAEpD;AAA2CpB,SACzC,aAAM;EAAAI,EAAA,CAAAiB,eACA;EAAAjB,EAAA,CAAAkB,aACI;AAAA;AAGZrB,QAAI,8CAAU;EACdE,EAAA,iEAAwC;IAAAC,EACtC,CAAAmB,aAAU,EAAM;IAAsCnB,EACtD,CAACoB,KAAA,CAAAC,OAAU,WAAAC,kBAAA,cACT;IACA,IAAAC,MAAA,GAAO,MAAAtB,qBAAA;MACTuB,IAAA;MACFC,IAAA;MAEAC,QAAS;IACT;IACA,IAAAC,OAAS;IAET,IAAAC,YAAO,GAAAL,MAAA,CAAAM,SAA2B,GAAIC,IAAA;MACtC,OAAO,IAAMzB,KAAA,uCAAiC;IAC9C,aAAM0B,KAAO,EAAM;MACpBJ,OAAA;MACF,OAAAI,KAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxrn",
3
- "version": "1.25.7",
3
+ "version": "1.25.8",
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.7",
66
- "@vxrn/debug": "1.25.7",
67
- "@vxrn/query-string": "1.25.7",
68
- "@vxrn/resolve": "1.25.7",
69
- "@vxrn/safe-area": "1.25.7",
70
- "@vxrn/url-parse": "1.25.7",
71
- "@vxrn/utils": "1.25.7",
72
- "@vxrn/vendor": "1.25.7",
73
- "@vxrn/vite-flow": "1.25.7",
74
- "@vxrn/vite-plugin-metro": "1.25.7",
65
+ "@vxrn/compiler": "1.25.8",
66
+ "@vxrn/debug": "1.25.8",
67
+ "@vxrn/query-string": "1.25.8",
68
+ "@vxrn/resolve": "1.25.8",
69
+ "@vxrn/safe-area": "1.25.8",
70
+ "@vxrn/url-parse": "1.25.8",
71
+ "@vxrn/utils": "1.25.8",
72
+ "@vxrn/vendor": "1.25.8",
73
+ "@vxrn/vite-flow": "1.25.8",
74
+ "@vxrn/vite-plugin-metro": "1.25.8",
75
75
  "citty": "^0.1.6",
76
76
  "dotenv": "^17.2.1",
77
77
  "dotenv-expand": "^12.0.2",
@@ -1,12 +1,14 @@
1
1
  import { mkdtemp, rm, writeFile } from 'node:fs/promises'
2
2
  import { tmpdir } from 'node:os'
3
3
  import { join } from 'node:path'
4
+ import { rolldown } from 'rolldown'
4
5
  import { dev } from 'rolldown/experimental'
5
6
  import { describe, expect, it } from 'vitest'
6
7
  import {
7
8
  getHermesSWCIncludes,
8
9
  getHmrRuntimeSource,
9
10
  getNativeTransformConfig,
11
+ hermesCompatSWCPlugin,
10
12
  hmrClientNoopPlugin,
11
13
  vxrnCompilerPlugin,
12
14
  wrapNativeBundleModuleScope,
@@ -38,6 +40,7 @@ if (import.meta.hot) {
38
40
  const hmrUpdate = new Promise<any>((resolve) => {
39
41
  resolveHmrUpdate = resolve
40
42
  })
43
+ let registeredClientId: string | undefined
41
44
  const engine = await dev(
42
45
  {
43
46
  cwd: testRoot,
@@ -50,7 +53,13 @@ if (import.meta.hot) {
50
53
  resolveInitialOutput(result)
51
54
  },
52
55
  onHmrUpdates(result) {
53
- if (!(result instanceof Error) && result.changedFiles.length) {
56
+ if (
57
+ !(result instanceof Error) &&
58
+ result.updates.some(
59
+ (item) =>
60
+ item.clientId === registeredClientId && item.update.type === 'Patch'
61
+ )
62
+ ) {
54
63
  resolveHmrUpdate(result)
55
64
  }
56
65
  },
@@ -72,9 +81,9 @@ if (import.meta.hot) {
72
81
  )
73
82
  const runtime = (globalThis as any).__rolldown_runtime__
74
83
  expect(typeof runtime.clientId).toBe('string')
84
+ registeredClientId = runtime.clientId
75
85
  await engine.registerClient(runtime.clientId)
76
86
 
77
- await new Promise((resolve) => setTimeout(resolve, 100))
78
87
  await writeFile(entry, source('v2'))
79
88
  const result = await Promise.race([
80
89
  hmrUpdate,
@@ -164,6 +173,7 @@ describe('wrapNativeBundleModuleScope', () => {
164
173
  describe('getHermesSWCIncludes', () => {
165
174
  const CLASS_SET = [
166
175
  'transform-classes',
176
+ 'transform-parameters',
167
177
  'transform-class-properties',
168
178
  'transform-class-static-block',
169
179
  'transform-private-methods',
@@ -181,6 +191,45 @@ describe('getHermesSWCIncludes', () => {
181
191
  expect(getHermesSWCIncludes(true)).not.toContain('transform-async-to-generator')
182
192
  expect(getHermesSWCIncludes(false)).toContain('transform-async-to-generator')
183
193
  })
194
+
195
+ it('bundles lowered classes whose constructors use default and rest parameters', async () => {
196
+ const testRoot = await mkdtemp(join(tmpdir(), 'vxrn-hermes-parameters-'))
197
+ const entry = join(testRoot, 'entry.js')
198
+ await writeFile(
199
+ entry,
200
+ `
201
+ class ParameterProbe {
202
+ prefix = 'value'
203
+
204
+ constructor(value = 'default', ...rest) {
205
+ this.result = [this.prefix, value, ...rest].join(':')
206
+ }
207
+ }
208
+
209
+ export const result = new ParameterProbe(undefined, 'rest-a', 'rest-b').result
210
+ `
211
+ )
212
+
213
+ const build = await rolldown({
214
+ input: entry,
215
+ plugins: [hermesCompatSWCPlugin(true)],
216
+ })
217
+
218
+ try {
219
+ const output = await build.generate({ format: 'esm' })
220
+ const chunk = output.output.find((item) => item.type === 'chunk')
221
+ expect(chunk).toBeTruthy()
222
+ if (!chunk) throw new Error('Rolldown did not emit a JavaScript chunk')
223
+
224
+ const module = await import(
225
+ `data:text/javascript;base64,${Buffer.from(chunk.code).toString('base64')}`
226
+ )
227
+ expect(module.result).toBe('value:default:rest-a:rest-b')
228
+ } finally {
229
+ await build.close()
230
+ await rm(testRoot, { recursive: true, force: true })
231
+ }
232
+ })
184
233
  })
185
234
 
186
235
  describe('hmrClientNoopPlugin', () => {
@@ -27,6 +27,7 @@ const FLOW_FILE_PATTERN = /node_modules[\\/](?:react-native|@react-native)[\\/].
27
27
  // hand-copied include lists).
28
28
  const HERMES_CLASS_TRANSFORMS = [
29
29
  'transform-classes',
30
+ 'transform-parameters',
30
31
  'transform-class-properties',
31
32
  'transform-class-static-block',
32
33
  'transform-private-methods',
@@ -412,8 +413,10 @@ export async function createNativeDevEngine(
412
413
  })
413
414
 
414
415
  let currentBundle: { code: string } | null = null
415
- let bundleResolve: ((value: any) => void) | null = null
416
- let bundlePromise: Promise<any> | null = null
416
+ let firstBuildError: Error | null = null
417
+ let bundleResolve: ((value: { code: string }) => void) | null = null
418
+ let bundleReject: ((error: Error) => void) | null = null
419
+ let bundlePromise: Promise<{ code: string }> | null = null
417
420
 
418
421
  const resolvedHost = host === '0.0.0.0' ? 'localhost' : host
419
422
 
@@ -494,12 +497,23 @@ try {
494
497
  onOutput: async (result) => {
495
498
  if (result instanceof Error) {
496
499
  console.error('[vxrn] native bundle error:', result.message)
500
+ if (!currentBundle) {
501
+ firstBuildError ||= result
502
+ if (bundleReject) {
503
+ const reject = bundleReject
504
+ bundleResolve = null
505
+ bundleReject = null
506
+ bundlePromise = null
507
+ reject(firstBuildError)
508
+ }
509
+ }
497
510
  return
498
511
  }
499
512
 
500
513
  const output = result as RolldownOutput
501
514
  const chunk = output.output.find((o) => o.type === 'chunk' && o.isEntry)
502
515
  if (chunk && 'code' in chunk) {
516
+ firstBuildError = null
503
517
  let code = postProcessNativeBundle(chunk.code)
504
518
 
505
519
  // downlevel class fields from the rolldown runtime (virtual module
@@ -516,6 +530,7 @@ try {
516
530
  if (bundleResolve) {
517
531
  bundleResolve(currentBundle)
518
532
  bundleResolve = null
533
+ bundleReject = null
519
534
  bundlePromise = null
520
535
  }
521
536
  }
@@ -558,6 +573,7 @@ try {
558
573
  // that output before serving the cached bundle to the restarted app.
559
574
  await engine.ensureLatestBuildOutput()
560
575
  if (currentBundle) return currentBundle
576
+ if (firstBuildError) throw firstBuildError
561
577
  if (!bundlePromise) {
562
578
  let timeoutId: ReturnType<typeof setTimeout>
563
579
  bundlePromise = new Promise((resolve, reject) => {
@@ -565,8 +581,17 @@ try {
565
581
  clearTimeout(timeoutId)
566
582
  resolve(value)
567
583
  }
584
+ bundleReject = (error) => {
585
+ clearTimeout(timeoutId)
586
+ reject(error)
587
+ }
568
588
  timeoutId = setTimeout(
569
- () => reject(new Error('[vxrn] bundle build timed out after 120s')),
589
+ () => {
590
+ bundleResolve = null
591
+ bundleReject = null
592
+ bundlePromise = null
593
+ reject(new Error('[vxrn] bundle build timed out after 120s'))
594
+ },
570
595
  120_000
571
596
  )
572
597
  })
@@ -1105,7 +1130,7 @@ function assetPlugin(opts: {
1105
1130
  * Transforms class properties and private fields that Hermes doesn't support.
1106
1131
  * Inspired by rollipop's swc-plugin.ts.
1107
1132
  */
1108
- function hermesCompatSWCPlugin(dev: boolean): Plugin {
1133
+ export function hermesCompatSWCPlugin(dev: boolean): Plugin {
1109
1134
  let swc: typeof import('@swc/core') | null = null
1110
1135
 
1111
1136
  return {
@@ -0,0 +1,57 @@
1
+ import { afterEach, describe, expect, it, vi } from 'vitest'
2
+
3
+ const rolldownState = vi.hoisted(() => ({
4
+ firstBuildError: new Error('first native build failed'),
5
+ }))
6
+
7
+ vi.mock('rolldown/experimental', () => ({
8
+ viteImportGlobPlugin: () => ({ name: 'test:import-glob' }),
9
+ dev: async (
10
+ _input: unknown,
11
+ _output: unknown,
12
+ callbacks: { onOutput: (result: Error) => Promise<void> }
13
+ ) => ({
14
+ async run() {
15
+ await callbacks.onOutput(rolldownState.firstBuildError)
16
+ },
17
+ async ensureLatestBuildOutput() {},
18
+ async close() {},
19
+ }),
20
+ }))
21
+
22
+ import { createNativeDevEngine } from './createNativeDevEngine'
23
+
24
+ afterEach(() => {
25
+ vi.restoreAllMocks()
26
+ vi.useRealTimers()
27
+ })
28
+
29
+ describe('createNativeDevEngine initial build failure', () => {
30
+ it('rejects the bundle request immediately with the Rolldown error', async () => {
31
+ vi.useFakeTimers()
32
+ vi.spyOn(console, 'error').mockImplementation(() => {})
33
+
34
+ const engine = await createNativeDevEngine({
35
+ root: '/tmp/vxrn-native-build-error-test',
36
+ port: 4400,
37
+ platform: 'ios',
38
+ })
39
+
40
+ let settled = false
41
+ const bundleResult = engine.getBundle().then(
42
+ () => new Error('bundle request unexpectedly resolved'),
43
+ (error) => {
44
+ settled = true
45
+ return error
46
+ }
47
+ )
48
+
49
+ await vi.advanceTimersByTimeAsync(0)
50
+ const settledBeforeTimeout = settled
51
+ await vi.advanceTimersByTimeAsync(120_000)
52
+
53
+ expect(settledBeforeTimeout).toBe(true)
54
+ expect(await bundleResult).toBe(rolldownState.firstBuildError)
55
+ await engine.close()
56
+ })
57
+ })
@@ -113,6 +113,12 @@ export declare function hmrClientNoopPlugin(): Plugin;
113
113
  * same pipeline as metro, single babel pass per file.
114
114
  */
115
115
  export declare function vxrnCompilerPlugin(platform: string, dev: boolean, projectRoot?: string): Plugin;
116
+ /**
117
+ * SWC transform for Hermes compatibility.
118
+ * Transforms class properties and private fields that Hermes doesn't support.
119
+ * Inspired by rollipop's swc-plugin.ts.
120
+ */
121
+ export declare function hermesCompatSWCPlugin(dev: boolean): Plugin;
116
122
  export declare function getHmrRuntimeSource(): string;
117
123
  export {};
118
124
  //# sourceMappingURL=createNativeDevEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNativeDevEngine.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAA+B,MAAM,EAAkB,MAAM,UAAU,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AA0BtD,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAE3D;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;CACZ,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAEzB,UAAU,qBAAqB;IAC7B,MAAM,EAAE,SAAS,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAuBD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,GAAG,SAAS,EAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM;;;;;;;;EAqHb;AAgGD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhE;AAoDD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA4LhC;AAID,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8DzC;AA4KD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAuB5C;AAoBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,EACZ,WAAW,SAAgB,GAC1B,MAAM,CAyGR;AAwJD,wBAAgB,mBAAmB,IAAI,MAAM,CA+K5C"}
1
+ {"version":3,"file":"createNativeDevEngine.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAA+B,MAAM,EAAkB,MAAM,UAAU,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AA2BtD,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAE3D;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;CACZ,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAEzB,UAAU,qBAAqB;IAC7B,MAAM,EAAE,SAAS,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAuBD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,GAAG,SAAS,EAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM;;;;;;;;EAqHb;AAgGD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhE;AAoDD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAoNhC;AAID,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8DzC;AA4KD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAuB5C;AAoBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,EACZ,WAAW,SAAgB,GAC1B,MAAM,CAyGR;AA8FD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAiD1D;AAID,wBAAgB,mBAAmB,IAAI,MAAM,CA+K5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createNativeDevEngineFailure.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNativeDevEngineFailure.test.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngineFailure.test.ts"],"names":[],"mappings":""}