@vxrn/compiler 1.27.1 → 2.0.0-beta.45.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/cjs/cache.cjs +106 -117
  2. package/dist/cjs/configure.cjs +26 -28
  3. package/dist/cjs/constants.cjs +56 -60
  4. package/dist/cjs/index.cjs +420 -443
  5. package/dist/cjs/reactNativeCodegen.cjs +105 -114
  6. package/dist/cjs/reactNativeViewConfig.cjs +362 -381
  7. package/dist/cjs/refresh-runtime.cjs +390 -397
  8. package/dist/cjs/transformBabel.cjs +273 -263
  9. package/dist/cjs/transformHermesAsync.cjs +36 -47
  10. package/dist/cjs/transformHermesLoops.cjs +279 -281
  11. package/dist/cjs/transformSWC.cjs +183 -200
  12. package/dist/cjs/transformWorklets.cjs +107 -95
  13. package/dist/cjs/types.cjs +9 -11
  14. package/dist/cjs/worklets/autoworklet.cjs +277 -222
  15. package/dist/cjs/worklets/globals.cjs +124 -60
  16. package/dist/cjs/worklets/hash.cjs +23 -27
  17. package/dist/cjs/worklets/scope.cjs +338 -359
  18. package/dist/cjs/worklets/serialize.cjs +73 -75
  19. package/dist/cjs/worklets/transform.cjs +217 -222
  20. package/dist/cjs/worklets/types.cjs +9 -11
  21. package/dist/esm/cache.mjs +90 -97
  22. package/dist/esm/cache.mjs.map +1 -1
  23. package/dist/esm/configure.mjs +11 -10
  24. package/dist/esm/configure.mjs.map +1 -1
  25. package/dist/esm/constants.mjs +41 -41
  26. package/dist/esm/constants.mjs.map +1 -1
  27. package/dist/esm/index.js +417 -425
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/index.mjs +417 -425
  30. package/dist/esm/index.mjs.map +1 -1
  31. package/dist/esm/reactNativeCodegen.mjs +90 -88
  32. package/dist/esm/reactNativeCodegen.mjs.map +1 -1
  33. package/dist/esm/reactNativeViewConfig.mjs +347 -362
  34. package/dist/esm/reactNativeViewConfig.mjs.map +1 -1
  35. package/dist/esm/refresh-runtime.mjs +372 -376
  36. package/dist/esm/refresh-runtime.mjs.map +1 -1
  37. package/dist/esm/transformBabel.mjs +255 -237
  38. package/dist/esm/transformBabel.mjs.map +1 -1
  39. package/dist/esm/transformHermesAsync.mjs +20 -21
  40. package/dist/esm/transformHermesAsync.mjs.map +1 -1
  41. package/dist/esm/transformHermesLoops.mjs +264 -255
  42. package/dist/esm/transformHermesLoops.mjs.map +1 -1
  43. package/dist/esm/transformSWC.mjs +163 -171
  44. package/dist/esm/transformSWC.mjs.map +1 -1
  45. package/dist/esm/transformWorklets.mjs +89 -69
  46. package/dist/esm/transformWorklets.mjs.map +1 -1
  47. package/dist/esm/types.mjs +0 -2
  48. package/dist/esm/worklets/autoworklet.mjs +258 -200
  49. package/dist/esm/worklets/autoworklet.mjs.map +1 -1
  50. package/dist/esm/worklets/globals.mjs +109 -42
  51. package/dist/esm/worklets/globals.mjs.map +1 -1
  52. package/dist/esm/worklets/hash.mjs +10 -9
  53. package/dist/esm/worklets/hash.mjs.map +1 -1
  54. package/dist/esm/worklets/scope.mjs +325 -341
  55. package/dist/esm/worklets/scope.mjs.map +1 -1
  56. package/dist/esm/worklets/serialize.mjs +60 -58
  57. package/dist/esm/worklets/serialize.mjs.map +1 -1
  58. package/dist/esm/worklets/transform.mjs +201 -197
  59. package/dist/esm/worklets/transform.mjs.map +1 -1
  60. package/dist/esm/worklets/types.mjs +0 -2
  61. package/package.json +7 -6
  62. package/src/transformBabel.test.ts +77 -17
  63. package/src/transformBabel.ts +28 -12
  64. package/types/transformBabel.d.ts +12 -0
  65. package/types/transformBabel.d.ts.map +1 -1
  66. package/types/transformSWC.d.ts +1 -4
  67. package/types/transformSWC.d.ts.map +1 -1
  68. package/dist/cjs/transformBabel.test.cjs +0 -652
  69. package/dist/cjs/transformHermesLoops.test.cjs +0 -257
  70. package/dist/cjs/transformSWC.test.cjs +0 -117
  71. package/dist/cjs/transformWorklets.test.cjs +0 -604
  72. package/dist/esm/transformBabel.test.mjs +0 -629
  73. package/dist/esm/transformBabel.test.mjs.map +0 -1
  74. package/dist/esm/transformHermesLoops.test.mjs +0 -234
  75. package/dist/esm/transformHermesLoops.test.mjs.map +0 -1
  76. package/dist/esm/transformSWC.test.mjs +0 -118
  77. package/dist/esm/transformSWC.test.mjs.map +0 -1
  78. package/dist/esm/transformWorklets.test.mjs +0 -581
  79. package/dist/esm/transformWorklets.test.mjs.map +0 -1
  80. package/dist/esm/types.mjs.map +0 -1
  81. package/dist/esm/worklets/types.mjs.map +0 -1
  82. package/types/transformBabel.test.d.ts +0 -2
  83. package/types/transformBabel.test.d.ts.map +0 -1
  84. package/types/transformHermesLoops.test.d.ts +0 -2
  85. package/types/transformHermesLoops.test.d.ts.map +0 -1
  86. package/types/transformSWC.test.d.ts +0 -2
  87. package/types/transformSWC.test.d.ts.map +0 -1
  88. package/types/transformWorklets.test.d.ts +0 -2
  89. package/types/transformWorklets.test.d.ts.map +0 -1
@@ -1,234 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import * as vm from "node:vm";
3
- import { transformHermesLoops } from "./transformHermesLoops.mjs";
4
- function runAsHermes(code) {
5
- const asHermesWouldSeeIt = code.replace(/\b(?:let|const)\b/g, "var");
6
- const sandbox = {
7
- result: void 0,
8
- console
9
- };
10
- vm.runInNewContext(asHermesWouldSeeIt, sandbox);
11
- return sandbox.result;
12
- }
13
- function run(source) {
14
- const out = transformHermesLoops(source, "test.js");
15
- return runAsHermes(out ? out.code : source);
16
- }
17
- describe("transformHermesLoops", () => {
18
- it.each([["if (false)", []], ["if (true)", [1, 2]], ["for (var pass = 0; pass < 2; pass++)", [1, 2, 1, 2]], ["while (passes++ < 2)", [1, 2, 1, 2]]])("keeps a captured loop inside a single-statement %s body", (parent, expected) => {
19
- expect(run(`
20
- var fns = []
21
- var passes = 0
22
- ${parent} for (const n of [1, 2]) fns.push(() => n)
23
- result = fns.map((f) => f())
24
- `)).toEqual(expected);
25
- });
26
- it.each([true, false])("preserves if/else selection when the condition is %s", condition => {
27
- expect(run(`
28
- var fns = []
29
- if (${condition}) for (const n of [1, 2]) fns.push(() => n)
30
- else for (const n of [3, 4]) fns.push(() => n)
31
- result = fns.map((f) => f())
32
- `)).toEqual(condition ? [1, 2] : [3, 4]);
33
- });
34
- it("preserves a do/while with a single-statement loop body", () => {
35
- expect(run(`
36
- var fns = []
37
- var passes = 0
38
- do for (const n of [1, 2]) fns.push(() => n)
39
- while (passes++ < 1)
40
- result = fns.map((f) => f())
41
- `)).toEqual([1, 2, 1, 2]);
42
- });
43
- it("guards optional Zero query patches through nested loop transforms", () => {
44
- expect(run(`
45
- var fns = []
46
- var parts = [{}, { desiredQueriesPatches: { a: ['x', 'y'], b: ['z'] } }]
47
- for (const part of parts) {
48
- if (part.desiredQueriesPatches)
49
- for (const [clientID, queriesPatch] of Object.entries(part.desiredQueriesPatches))
50
- for (const op of queriesPatch) fns.push(() => clientID + ':' + op)
51
- }
52
- result = fns.map((f) => f())
53
- `)).toEqual(["a:x", "a:y", "b:z"]);
54
- });
55
- it("gives a C-style loop a per-iteration binding", () => {
56
- expect(run(`
57
- var fns = []
58
- for (let i = 0; i < 3; i++) fns.push(() => i)
59
- result = fns.map((f) => f())
60
- `)).toEqual([0, 1, 2]);
61
- });
62
- it("gives for-of and for-in per-iteration bindings", () => {
63
- expect(run(`
64
- var fns = []
65
- for (const label of ['a', 'b']) fns.push(() => label)
66
- for (const key in { x: 1, y: 2 }) fns.push(() => key)
67
- result = fns.map((f) => f())
68
- `)).toEqual(["a", "b", "x", "y"]);
69
- });
70
- it("preserves break", () => {
71
- expect(run(`
72
- var fns = []
73
- for (let i = 0; i < 10; i++) {
74
- if (i === 3) break
75
- fns.push(() => i)
76
- }
77
- result = fns.map((f) => f())
78
- `)).toEqual([0, 1, 2]);
79
- });
80
- it("preserves continue", () => {
81
- expect(run(`
82
- var fns = []
83
- for (let i = 0; i < 5; i++) {
84
- if (i % 2 === 0) continue
85
- fns.push(() => i)
86
- }
87
- result = fns.map((f) => f())
88
- `)).toEqual([1, 3]);
89
- });
90
- it("preserves return out of the enclosing function", () => {
91
- expect(run(`
92
- function find() {
93
- for (const n of [1, 2, 3]) {
94
- const get = () => n
95
- if (n === 2) return get()
96
- }
97
- return 'none'
98
- }
99
- result = find()
100
- `)).toBe(2);
101
- });
102
- it("preserves a bare return", () => {
103
- expect(run(`
104
- var fns = []
105
- function go() {
106
- for (let i = 0; i < 5; i++) {
107
- if (i === 2) return
108
- fns.push(() => i)
109
- }
110
- }
111
- go()
112
- result = fns.map((f) => f())
113
- `)).toEqual([0, 1]);
114
- });
115
- it("leaves break and continue belonging to a nested loop alone", () => {
116
- expect(run(`
117
- var fns = []
118
- for (let i = 0; i < 2; i++) {
119
- for (var j = 0; j < 5; j++) {
120
- if (j > 0) break
121
- }
122
- fns.push(() => i)
123
- }
124
- result = fns.map((f) => f())
125
- `)).toEqual([0, 1]);
126
- });
127
- it("handles nested capturing loops", () => {
128
- expect(run(`
129
- var fns = []
130
- for (let i = 0; i < 2; i++) {
131
- for (let j = 0; j < 2; j++) {
132
- fns.push(() => i + ':' + j)
133
- }
134
- }
135
- result = fns.map((f) => f())
136
- `)).toEqual(["0:0", "0:1", "1:0", "1:1"]);
137
- });
138
- it("handles await in the loop body", async () => {
139
- const out = transformHermesLoops(`
140
- var fns = []
141
- async function go() {
142
- for (const n of [1, 2]) {
143
- await Promise.resolve()
144
- fns.push(() => n)
145
- }
146
- return fns.map((f) => f())
147
- }
148
- result = go()
149
- `, "test.js");
150
- expect(out).not.toBeNull();
151
- await expect(runAsHermes(out.code)).resolves.toEqual([1, 2]);
152
- });
153
- it("destructures a for-of binding per iteration", () => {
154
- expect(run(`
155
- var fns = []
156
- for (const { id } of [{ id: 'a' }, { id: 'b' }]) fns.push(() => id)
157
- result = fns.map((f) => f())
158
- `)).toEqual(["a", "b"]);
159
- });
160
- it("rewrites the esbuild interop helper that broke every multi-export module", () => {
161
- expect(run(`
162
- var __defProp = Object.defineProperty
163
- var __getOwnPropNames = Object.getOwnPropertyNames
164
- var from = { a: 1, b: 2 }
165
- var to = {}
166
- for (let key of __getOwnPropNames(from)) {
167
- __defProp(to, key, { get: () => from[key], enumerable: true })
168
- }
169
- result = [to.a, to.b]
170
- `)).toEqual([1, 2]);
171
- });
172
- it("leaves loops that never capture their binding untouched", () => {
173
- expect(transformHermesLoops("for (let i = 0; i < 3; i++) sum += i", "test.js")).toBeNull();
174
- });
175
- it("gives a binding declared in the loop body a per-iteration copy", () => {
176
- expect(run(`
177
- var names = ['createAnimatedNode', 'addListener', 'removeListener']
178
- var wrappers = {}
179
- for (var ii = 0; ii < names.length; ii++) {
180
- const methodName = names[ii]
181
- wrappers[methodName] = () => methodName
182
- }
183
- result = names.map((n) => wrappers[n]())
184
- `)).toEqual(["createAnimatedNode", "addListener", "removeListener"]);
185
- });
186
- it("gives a binding declared in a nested block of the loop body a per-iteration copy", () => {
187
- expect(run(`
188
- var fns = []
189
- for (var i = 0; i < 3; i++) {
190
- if (i >= 0) {
191
- const doubled = i * 2
192
- fns.push(() => doubled)
193
- }
194
- }
195
- result = fns.map((f) => f())
196
- `)).toEqual([0, 2, 4]);
197
- });
198
- it("keeps `this` and `arguments` meaning what they meant outside the loop", () => {
199
- expect(run(`
200
- class PropsFilter {
201
- constructor() { this._map = { a: 'A', b: 'B' } }
202
- filter(props) {
203
- var out = []
204
- for (const key in props) {
205
- const label = key
206
- out.push(() => this._map[label] + arguments.length)
207
- }
208
- return out
209
- }
210
- }
211
- result = new PropsFilter().filter({ a: 1, b: 2 }).map((f) => f())
212
- `)).toEqual(["A1", "B1"]);
213
- });
214
- it("leaves a loop with no lexical binding untouched", () => {
215
- expect(transformHermesLoops("for (var i = 0; i < 3; i++) fns.push(() => i)", "test.js")).toBeNull();
216
- });
217
- it("leaves the head declaration alone so it cannot collide with a sibling", () => {
218
- const out = transformHermesLoops(`function build(gestures) {
219
- var handlers = []
220
- for (const gesture of gestures) { handlers.push(() => gesture) }
221
- const gesture = gestures[0]
222
- return gesture
223
- }`, "Pressable.js");
224
- expect(() => new vm.Script(out.code)).not.toThrow();
225
- });
226
- it("rewrites a loop in a .js file that still contains jsx", () => {
227
- const out = transformHermesLoops("for (const c of items) rows.push(() => <Row key={c} />)", "Rows.js");
228
- expect(out?.code).toContain("_hermesLoop0");
229
- });
230
- it("does not rewrite a loop that reassigns its own binding", () => {
231
- expect(transformHermesLoops("for (let i = 0; i < 3; i++) { i += 1; fns.push(() => i) }", "test.js")).toBeNull();
232
- });
233
- });
234
- //# sourceMappingURL=transformHermesLoops.test.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["describe","expect","it","vm","transformHermesLoops","runAsHermes","code","asHermesWouldSeeIt","replace","sandbox","result","console","runInNewContext","run","source","out","each","parent","expected","toEqual","condition","toBe","not","toBeNull","resolves","Script","toThrow","toContain"],"sources":["../../src/transformHermesLoops.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,118 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { runInNewContext } from "node:vm";
3
- import { rolldown } from "rolldown";
4
- import { transformOxc, transformSWC, transformSWCStripJSX } from "./transformSWC.mjs";
5
- describe("transformSWC / transformOxc with oxc-transform for Hermes lowering", () => {
6
- it("preserves unbraced for-await bodies and early returns", async () => {
7
- const result = await transformSWC("AsyncIterable.js", `
8
- async function collect(it) {
9
- const values = []
10
- for await (const value of it) values.push(value)
11
- return values
12
- }
13
- async function first(it) {
14
- for await (const value of it) return value
15
- return null
16
- }
17
- globalThis.result = Promise.all([collect([11, 22]), first([11, 22])])
18
- `, {
19
- environment: "ios",
20
- mode: "build",
21
- production: true
22
- });
23
- expect(result).toBeDefined();
24
- const bundle = await rolldown({
25
- input: "virtual:async-iterable.js",
26
- plugins: [{
27
- name: "async-iterable-fixture",
28
- resolveId(id) {
29
- if (id === "virtual:async-iterable.js") return id;
30
- },
31
- load(id) {
32
- if (id === "virtual:async-iterable.js") return result.code;
33
- }
34
- }]
35
- });
36
- try {
37
- const output = await bundle.generate({
38
- format: "iife"
39
- });
40
- const context = {};
41
- runInNewContext(output.output[0].code, context);
42
- await expect(context.result).resolves.toEqual([[11, 22], 11]);
43
- } finally {
44
- await bundle.close();
45
- }
46
- });
47
- it("lowers class fields, private fields, and static blocks with Hermes target and assumptions", async () => {
48
- const input = `
49
- class Sample {
50
- #secret = 42
51
- publicField = 100
52
- static {
53
- Sample.initialized = true
54
- }
55
- getSecret() {
56
- return this.#secret
57
- }
58
- }
59
- `;
60
- const res = await transformSWC("Sample.ts", input, {
61
- environment: "ios",
62
- mode: "build"
63
- });
64
- expect(res).toBeDefined();
65
- expect(res.code).not.toContain("#secret");
66
- expect(res.code).not.toMatch(/^\s*publicField\s*=/m);
67
- expect(res.code).not.toContain("static {");
68
- expect(res.code).toContain("this.publicField = 100");
69
- });
70
- it.each(["MyComponent.tsx", "MyComponent.js", "MyComponent.mjs", "MyComponent.cjs"])("lowers JSX in %s to react automatic runtime calls", async filename => {
71
- const input = `
72
- export function MyComponent() {
73
- return <div className="test"><span>Hello</span></div>
74
- }
75
- `;
76
- const res = await transformSWC(filename, input, {
77
- environment: "client",
78
- mode: "build"
79
- });
80
- expect(res).toBeDefined();
81
- expect(res.code).not.toContain("<div");
82
- expect(res.code).not.toContain("<span>");
83
- expect(res.code).toContain("_jsx");
84
- });
85
- it("respects sourcemaps option", async () => {
86
- const input = `
87
- class Sample {
88
- val = 1
89
- }
90
- `;
91
- const resWithoutMap = await transformSWC("Sample.ts", input, {
92
- environment: "ios",
93
- mode: "build"
94
- }, {
95
- sourceMaps: false
96
- });
97
- expect(resWithoutMap?.map).toBeUndefined();
98
- const resWithMap = await transformSWC("Sample.ts", input, {
99
- environment: "ios",
100
- mode: "build"
101
- }, {
102
- sourceMaps: true
103
- });
104
- expect(resWithMap?.map).toBeDefined();
105
- expect(resWithMap?.map.mappings).toBeDefined();
106
- });
107
- it("provides transformOxc alias", () => {
108
- expect(transformOxc).toBe(transformSWC);
109
- });
110
- it("strips JSX using transformSWCStripJSX", async () => {
111
- const input = `export const el = <div>Hello</div>`;
112
- const res = await transformSWCStripJSX("el.tsx", input);
113
- expect(res).toBeDefined();
114
- expect(res.code).not.toContain("<div>");
115
- expect(res.code).toContain("_jsx");
116
- });
117
- });
118
- //# sourceMappingURL=transformSWC.test.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["describe","expect","it","runInNewContext","rolldown","transformOxc","transformSWC","transformSWCStripJSX","result","environment","mode","production","toBeDefined","bundle","input","plugins","name","resolveId","id","load","code","output","generate","format","context","resolves","toEqual","close","res","not","toContain","toMatch","each","filename","resWithoutMap","sourceMaps","map","toBeUndefined","resWithMap","mappings","toBe"],"sources":["../../src/transformSWC.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}