vxrn 2.9.0 → 2.9.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxrn",
3
- "version": "2.9.0",
3
+ "version": "2.9.2",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -80,14 +80,14 @@
80
80
  "@react-native-community/cli": "^20.2.0",
81
81
  "@react-native-community/cli-config": "^20.2.0",
82
82
  "@react-native/dev-middleware": "^0.88.0",
83
- "@vxrn/compiler": "2.9.0",
84
- "@vxrn/debug": "2.9.0",
85
- "@vxrn/query-string": "2.9.0",
86
- "@vxrn/resolve": "2.9.0",
87
- "@vxrn/url-parse": "2.9.0",
88
- "@vxrn/utils": "2.9.0",
89
- "@vxrn/vendor": "2.9.0",
90
- "@vxrn/vite-flow": "2.9.0",
83
+ "@vxrn/compiler": "2.9.2",
84
+ "@vxrn/debug": "2.9.2",
85
+ "@vxrn/query-string": "2.9.2",
86
+ "@vxrn/resolve": "2.9.2",
87
+ "@vxrn/url-parse": "2.9.2",
88
+ "@vxrn/utils": "2.9.2",
89
+ "@vxrn/vendor": "2.9.2",
90
+ "@vxrn/vite-flow": "2.9.2",
91
91
  "citty": "^0.1.6",
92
92
  "dotenv": "^17.2.1",
93
93
  "dotenv-expand": "^12.0.2",
@@ -103,7 +103,7 @@
103
103
  "find-node-modules": "^2.1.3",
104
104
  "fs-extra": "^11.2.0",
105
105
  "get-port-please": "^3.1.2",
106
- "hono": "^4.12.8",
106
+ "hono": "^4.13.11",
107
107
  "perfect-debounce": "^1.0.0",
108
108
  "picocolors": "^1.0.0",
109
109
  "pkg-types": "^1.0.3",
@@ -117,7 +117,7 @@
117
117
  "devDependencies": {
118
118
  "@biomejs/biome": "2.5.15",
119
119
  "@jridgewell/gen-mapping": "^0.3.5",
120
- "@tamagui/build": "3.0.18",
120
+ "@tamagui/build": "3.1.2",
121
121
  "@types/find-node-modules": "^2.1.2",
122
122
  "@types/node": "^24.10.0",
123
123
  "@types/ws": "^8.18.1",
@@ -127,20 +127,20 @@
127
127
  "react-native": "0.88.0",
128
128
  "typescript": "7.0.2",
129
129
  "vitest": "^4.1.0",
130
- "@vxrn/vite-plugin-metro": "2.9.0"
130
+ "@vxrn/vite-plugin-metro": "2.9.2"
131
131
  },
132
132
  "publishConfig": {
133
133
  "access": "public"
134
134
  },
135
135
  "peerDependencies": {
136
- "@vxrn/vite-plugin-metro": "2.9.0"
136
+ "@vxrn/vite-plugin-metro": "2.9.2"
137
137
  },
138
138
  "peerDependenciesMeta": {
139
139
  "@vxrn/vite-plugin-metro": {
140
140
  "optional": true
141
141
  }
142
142
  },
143
- "releaseSourceCommit": "28cc4531bbc4fa1e392a92dc05529d318278d832",
143
+ "releaseSourceCommit": "ce34ec2d7ee2bcbc559d7c3f110f5324dea3bff6",
144
144
  "repository": {
145
145
  "type": "git",
146
146
  "url": "git+https://github.com/onejs/one.git",
@@ -2,7 +2,7 @@ import { mkdtemp, mkdir, rm, writeFile } from 'node:fs/promises'
2
2
  import { tmpdir } from 'node:os'
3
3
  import { join } from 'node:path'
4
4
  import { createServer } from 'vite'
5
- import { expect, it } from 'vitest'
5
+ import { expect, it, vi } from 'vitest'
6
6
  import { createReactNativeDevServerPlugin } from './reactNativeDevServer'
7
7
 
8
8
  it('serves native media with byte ranges and preview content types', async () => {
@@ -72,3 +72,77 @@ it('serves native media with byte ranges and preview content types', async () =>
72
72
  await rm(root, { recursive: true, force: true })
73
73
  }
74
74
  })
75
+
76
+ it('starts the native multipart response before bundling finishes', async () => {
77
+ const root = await mkdtemp(join(tmpdir(), 'native-bundle-http-'))
78
+ let finishBuild!: () => void
79
+ const building = new Promise<void>((resolve) => {
80
+ finishBuild = resolve
81
+ })
82
+ vi.useFakeTimers({ toFake: ['setInterval', 'clearInterval'] })
83
+ let failBuild = false
84
+ const previousPlugins = globalThis.__vxrnAddNativePlugins
85
+ globalThis.__vxrnAddNativePlugins = () => [
86
+ {
87
+ name: 'blocked-native-bundle',
88
+ transform(_code, id) {
89
+ if (id.endsWith('/__virtual-native-entry.tsx'))
90
+ return 'globalThis.nativeBundleReady = true'
91
+ },
92
+ async renderChunk() {
93
+ await building
94
+ if (failBuild) throw new Error('native fixture failed')
95
+ },
96
+ },
97
+ ]
98
+ const server = await createServer({
99
+ root,
100
+ configFile: false,
101
+ plugins: [createReactNativeDevServerPlugin()],
102
+ server: { host: '127.0.0.1', port: 0 },
103
+ })
104
+ try {
105
+ await server.listen()
106
+ const { port } = server.httpServer!.address() as { port: number }
107
+ const response = await fetch(`http://127.0.0.1:${port}/index.bundle?platform=ios`, {
108
+ headers: { accept: 'multipart/mixed' },
109
+ signal: AbortSignal.timeout(1_000),
110
+ })
111
+ expect(response.headers.get('content-type')).toMatch(
112
+ /multipart\/mixed; boundary="[^"]+"/
113
+ )
114
+ const reader = response.body!.getReader()
115
+ const preamble = await reader.read()
116
+ await vi.advanceTimersByTimeAsync(10_000)
117
+ const progress = await reader.read()
118
+ expect(new TextDecoder().decode(progress.value)).toContain('"status":"Bundling"')
119
+ finishBuild()
120
+ reader.releaseLock()
121
+ let body =
122
+ new TextDecoder().decode(preamble.value) + new TextDecoder().decode(progress.value)
123
+ for await (const chunk of response.body!) {
124
+ body += new TextDecoder().decode(chunk)
125
+ }
126
+ expect(body).toContain('X-Http-Status: 200')
127
+ expect(body).toContain('nativeBundleReady')
128
+ const boundary = response.headers.get('content-type')!.match(/boundary="([^"]+)"/)![1]
129
+ expect(body.endsWith(`\r\n--${boundary}--\r\n`)).toBe(true)
130
+ const plain = await fetch(`http://127.0.0.1:${port}/index.bundle?platform=ios`)
131
+ expect(plain.headers.get('content-type')).toBe('text/javascript')
132
+ expect(await plain.text()).toContain('nativeBundleReady')
133
+
134
+ failBuild = true
135
+ const failed = await fetch(`http://127.0.0.1:${port}/index.bundle?platform=android`, {
136
+ headers: { accept: 'multipart/mixed' },
137
+ })
138
+ const error = await failed.text()
139
+ expect(error).toContain('X-Http-Status: 500')
140
+ expect(error).toContain('native fixture failed')
141
+ } finally {
142
+ finishBuild()
143
+ await server.close()
144
+ globalThis.__vxrnAddNativePlugins = previousPlugins
145
+ vi.useRealTimers()
146
+ await rm(root, { recursive: true, force: true })
147
+ }
148
+ })
@@ -573,6 +573,42 @@ export function createReactNativeDevServerPlugin(
573
573
  )
574
574
  }
575
575
 
576
+ // react native's default URLSession times out while waiting for a
577
+ // silent rebuild. start its multipart stream before building, as metro
578
+ // does, so the native loader can wait for the bundle on that stream.
579
+ const boundary = String(req.headers.accept || '').includes('multipart/mixed')
580
+ ? `vxrn-${randomUUID()}`
581
+ : undefined
582
+ let progressTimer: ReturnType<typeof setInterval> | undefined
583
+ if (boundary) {
584
+ res.writeHead(200, {
585
+ 'Cache-Control': 'no-store',
586
+ 'Content-Type': `multipart/mixed; boundary="${boundary}"`,
587
+ })
588
+ res.write('Bundling native code')
589
+ // URLSession also enforces an idle timeout after receiving headers.
590
+ // keep reporting the ongoing build until its final part is ready.
591
+ progressTimer = setInterval(() => {
592
+ res.write(
593
+ `\r\n--${boundary}\r\nContent-Type: application/json\r\n\r\n${JSON.stringify({ status: 'Bundling' })}`
594
+ )
595
+ }, 10_000)
596
+ progressTimer.unref()
597
+ res.once('close', () => clearInterval(progressTimer))
598
+ }
599
+ const sendBundle = (status: number, type: string, body: string | Buffer) => {
600
+ if (boundary) {
601
+ res.write(
602
+ `\r\n--${boundary}\r\nContent-Type: ${type}\r\nX-Http-Status: ${status}\r\n\r\n`
603
+ )
604
+ res.write(body)
605
+ res.end(`\r\n--${boundary}--\r\n`)
606
+ } else {
607
+ res.writeHead(status, { 'Cache-Control': 'no-store', 'Content-Type': type })
608
+ res.end(body)
609
+ }
610
+ }
611
+
576
612
  try {
577
613
  const bundle = await (await getDevEngine(platform)).getBundle()
578
614
  let body: string | Buffer = bundle.code
@@ -591,19 +627,20 @@ export function createReactNativeDevServerPlugin(
591
627
  // a DevSettings reload requests this exact URL again. native URL
592
628
  // loading may otherwise reuse the first response and restart the app
593
629
  // on a route map from before a file was added or removed.
594
- res.writeHead(200, {
595
- 'Cache-Control': 'no-store',
596
- 'Content-Type': 'text/javascript',
597
- })
598
- res.end(body)
630
+ sendBundle(200, 'text/javascript', body)
599
631
  } catch (err) {
600
632
  console.error(` Error building React Native bundle`)
601
633
  console.error(err)
602
634
  console.error(
603
635
  `\n\n Note, some errors may happen due to a stale Vite cache, you may want to try re-running with the "--clean" flag`
604
636
  )
605
- res.writeHead(500, { 'Content-Type': 'text/plain' })
606
- res.end(err instanceof Error ? err.stack || err.message : String(err))
637
+ sendBundle(
638
+ 500,
639
+ 'text/plain',
640
+ err instanceof Error ? err.stack || err.message : String(err)
641
+ )
642
+ } finally {
643
+ clearInterval(progressTimer)
607
644
  }
608
645
  }
609
646
 
@@ -366,9 +366,8 @@ export function normalizeNativeCommonJSInterop(code: string): string {
366
366
  `[vxrn] cannot normalize native CommonJS interop: the bundle does not parse (${errors[0].message})`
367
367
  )
368
368
  }
369
- // delete each `, 1` from the end of the bundle backwards so earlier offsets
370
- // stay valid. only the comma and the `1` go; the surrounding whitespace
371
- // stays, so every line keeps the number the source map recorded for it.
369
+ // collect spans against the original bundle. copying the entire bundle for
370
+ // each interop call creates gigabytes of temporary strings during a reload.
372
371
  const deletions: Array<[start: number, end: number]> = []
373
372
  const stack: unknown[] = [program]
374
373
  while (stack.length) {
@@ -388,11 +387,16 @@ export function normalizeNativeCommonJSInterop(code: string): string {
388
387
  stack.push(node[key])
389
388
  }
390
389
  }
391
- deletions.sort((a, b) => b[0] - a[0])
390
+ if (!deletions.length) return code
391
+ deletions.sort((a, b) => a[0] - b[0])
392
+ const parts: string[] = []
393
+ let copied = 0
392
394
  for (const [start, end] of deletions) {
393
- code = code.slice(0, start) + code.slice(end)
395
+ parts.push(code.slice(copied, start))
396
+ copied = end
394
397
  }
395
- return code
398
+ parts.push(code.slice(copied))
399
+ return parts.join('')
396
400
  }
397
401
 
398
402
  interface InteropSyntaxNode {
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAW1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AA2CnE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC9D;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAAC,CACrF,GACA,MAAM,CA0jBR"}
1
+ {"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAW1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AA2CnE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC9D;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAAC,CACrF,GACA,MAAM,CA+lBR"}
@@ -1 +1 @@
1
- {"version":3,"file":"createNativeDevEngine.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createNativeDevEngine.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,OAAO,KAAK,EAA+B,MAAM,EAAkB,MAAM,UAAU,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAiCtD,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAE3D;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,GAAG,EAAE,OAAO,CAAA;CACb;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,GAGD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAEzB;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,UAAU,qBAAqB;IAC7B,MAAM,EAAE,SAAS,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;IACzC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAA;IACzE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AA8BD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,GAAG,SAAS,EAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM;IAsEV,GAAG;QAGD,OAAO,EAAE,SAAS;;IAEpB,MAAM;IAiCN,MAAM;QACJ,KAAK;;EAGV;AA6FD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8CnE;AAoJD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkD5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUhE;AA4ED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAwYhC;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;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkFzC;AA2ND;;;;;;GAMG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA6BlD;AA+ED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAuB5C;AAmRD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,EACZ,WAAW,SAAgB,EAC3B,UAAU,UAAQ,GACjB,MAAM,CA6PR;AAuED,KAAK,eAAe,GAAG;IACrB,gBAAgB,EAAE,IAAI,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wBAAgB,4BAA4B,IAAI;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IAC1C,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAA;CACzE,CAuBA;AAyDD,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CA4D1B;AAiED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,UAAU,UAAQ,EAClB,SAAS,UAAQ,GAChB,MAAM,CA8DR;AAED,eAAO,MAAM,kBAAkB,8BAAwB,CAAA;AAEvD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,UAAQ,GAAG,MAAM,CAuB5D;AAID,wBAAgB,mBAAmB,IAAI,MAAM,CA8O5C"}