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.
- package/dist/utils/createNativeDevEngine.mjs +27 -3
- package/dist/utils/createNativeDevEngine.mjs.map +1 -1
- package/dist/utils/createNativeDevEngine.native.js +25 -3
- package/dist/utils/createNativeDevEngine.native.js.map +1 -1
- package/dist/utils/createNativeDevEngine.test.mjs +39 -4
- package/dist/utils/createNativeDevEngine.test.mjs.map +1 -1
- package/dist/utils/createNativeDevEngine.test.native.js +43 -6
- package/dist/utils/createNativeDevEngine.test.native.js.map +1 -1
- package/dist/utils/createNativeDevEngineFailure.test.mjs +44 -0
- package/dist/utils/createNativeDevEngineFailure.test.mjs.map +1 -0
- package/dist/utils/createNativeDevEngineFailure.test.native.js +54 -0
- package/dist/utils/createNativeDevEngineFailure.test.native.js.map +1 -0
- package/package.json +11 -11
- package/src/utils/createNativeDevEngine.test.ts +51 -2
- package/src/utils/createNativeDevEngine.ts +29 -4
- package/src/utils/createNativeDevEngineFailure.test.ts +57 -0
- package/types/utils/createNativeDevEngine.d.ts +6 -0
- package/types/utils/createNativeDevEngine.d.ts.map +1 -1
- package/types/utils/createNativeDevEngineFailure.test.d.ts +2 -0
- package/types/utils/createNativeDevEngineFailure.test.d.ts.map +1 -0
|
@@ -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.
|
|
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.
|
|
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.
|
|
66
|
-
"@vxrn/debug": "1.25.
|
|
67
|
-
"@vxrn/query-string": "1.25.
|
|
68
|
-
"@vxrn/resolve": "1.25.
|
|
69
|
-
"@vxrn/safe-area": "1.25.
|
|
70
|
-
"@vxrn/url-parse": "1.25.
|
|
71
|
-
"@vxrn/utils": "1.25.
|
|
72
|
-
"@vxrn/vendor": "1.25.
|
|
73
|
-
"@vxrn/vite-flow": "1.25.
|
|
74
|
-
"@vxrn/vite-plugin-metro": "1.25.
|
|
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 (
|
|
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
|
|
416
|
-
let
|
|
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
|
-
() =>
|
|
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;
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"createNativeDevEngineFailure.test.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngineFailure.test.ts"],"names":[],"mappings":""}
|