one 2.11.5 → 2.12.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 (199) hide show
  1. package/android/src/main/java/com/margelo/nitro/one/HybridOneAudio.kt +309 -124
  2. package/dist/cjs/cli/build.cjs +31 -33
  3. package/dist/cjs/cli/build.native.cjs +31 -33
  4. package/dist/cjs/cli/build.native.js +31 -33
  5. package/dist/cjs/cli/build.native.js.map +1 -1
  6. package/dist/cjs/cli/buildPage.cjs +11 -7
  7. package/dist/cjs/cli/buildPage.native.cjs +11 -7
  8. package/dist/cjs/cli/buildPage.native.js +11 -7
  9. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  10. package/dist/cjs/cli/buildPageWorker.cjs +1 -1
  11. package/dist/cjs/cli/buildPageWorker.native.cjs +1 -1
  12. package/dist/cjs/cli/buildPageWorker.native.js +1 -1
  13. package/dist/cjs/cli/buildPageWorker.native.js.map +1 -1
  14. package/dist/cjs/cli-dev-memory.cjs +43 -0
  15. package/dist/cjs/cli-dev-memory.native.cjs +84 -0
  16. package/dist/cjs/cli-dev-memory.native.js +86 -0
  17. package/dist/cjs/cli-dev-memory.native.js.map +1 -0
  18. package/dist/cjs/headless-server.cjs +2 -5
  19. package/dist/cjs/headless-server.native.cjs +2 -5
  20. package/dist/cjs/headless-server.native.js +2 -5
  21. package/dist/cjs/headless-server.native.js.map +1 -1
  22. package/dist/cjs/platform/audio/index.cjs +83 -76
  23. package/dist/cjs/platform/audio/index.native.cjs +2 -2
  24. package/dist/cjs/platform/audio/index.native.js +2 -2
  25. package/dist/cjs/platform/audio/index.native.js.map +1 -1
  26. package/dist/cjs/platform/audio/nowPlaying.cjs +126 -0
  27. package/dist/cjs/platform/audio/nowPlaying.native.cjs +160 -0
  28. package/dist/cjs/platform/audio/nowPlaying.native.js +162 -0
  29. package/dist/cjs/platform/audio/nowPlaying.native.js.map +1 -0
  30. package/dist/cjs/platform/audio/player.cjs +15 -0
  31. package/dist/cjs/platform/audio/player.native.cjs +14 -0
  32. package/dist/cjs/platform/audio/player.native.js +14 -0
  33. package/dist/cjs/platform/audio/player.native.js.map +1 -1
  34. package/dist/cjs/platform/audio/unavailable.cjs +1 -1
  35. package/dist/cjs/platform/audio/unavailable.native.cjs +1 -1
  36. package/dist/cjs/platform/audio/unavailable.native.js +1 -1
  37. package/dist/cjs/platform/audio/unavailable.native.js.map +1 -1
  38. package/dist/cjs/serve-worker.cjs +0 -3
  39. package/dist/cjs/serve-worker.native.cjs +0 -3
  40. package/dist/cjs/serve-worker.native.js +0 -3
  41. package/dist/cjs/serve-worker.native.js.map +1 -1
  42. package/dist/cjs/server/oneServe.cjs +0 -6
  43. package/dist/cjs/server/oneServe.native.cjs +0 -6
  44. package/dist/cjs/server/oneServe.native.js +0 -6
  45. package/dist/cjs/server/oneServe.native.js.map +1 -1
  46. package/dist/cjs/server/workerHandler.cjs +12 -10
  47. package/dist/cjs/server/workerHandler.native.cjs +14 -10
  48. package/dist/cjs/server/workerHandler.native.js +14 -10
  49. package/dist/cjs/server/workerHandler.native.js.map +1 -1
  50. package/dist/cjs/vite/plugins/workerdDevPlugin.cjs +33 -37
  51. package/dist/cjs/vite/plugins/workerdDevPlugin.native.cjs +33 -37
  52. package/dist/cjs/vite/plugins/workerdDevPlugin.native.js +33 -37
  53. package/dist/cjs/vite/plugins/workerdDevPlugin.native.js.map +1 -1
  54. package/dist/esm/cli/build.mjs +31 -33
  55. package/dist/esm/cli/build.mjs.map +1 -1
  56. package/dist/esm/cli/build.native.js +31 -33
  57. package/dist/esm/cli/build.native.js.map +1 -1
  58. package/dist/esm/cli/buildPage.mjs +11 -7
  59. package/dist/esm/cli/buildPage.mjs.map +1 -1
  60. package/dist/esm/cli/buildPage.native.js +11 -7
  61. package/dist/esm/cli/buildPage.native.js.map +1 -1
  62. package/dist/esm/cli/buildPageWorker.mjs +1 -1
  63. package/dist/esm/cli/buildPageWorker.mjs.map +1 -1
  64. package/dist/esm/cli/buildPageWorker.native.js +1 -1
  65. package/dist/esm/cli/buildPageWorker.native.js.map +1 -1
  66. package/dist/esm/cli-dev-memory.mjs +23 -0
  67. package/dist/esm/cli-dev-memory.mjs.map +1 -0
  68. package/dist/esm/cli-dev-memory.native.js +62 -0
  69. package/dist/esm/cli-dev-memory.native.js.map +1 -0
  70. package/dist/esm/headless-server.mjs +2 -3
  71. package/dist/esm/headless-server.mjs.map +1 -1
  72. package/dist/esm/headless-server.native.js +2 -3
  73. package/dist/esm/headless-server.native.js.map +1 -1
  74. package/dist/esm/platform/audio/index.mjs +83 -76
  75. package/dist/esm/platform/audio/index.mjs.map +1 -1
  76. package/dist/esm/platform/audio/index.native.js +2 -2
  77. package/dist/esm/platform/audio/index.native.js.map +1 -1
  78. package/dist/esm/platform/audio/nowPlaying.mjs +102 -0
  79. package/dist/esm/platform/audio/nowPlaying.mjs.map +1 -0
  80. package/dist/esm/platform/audio/nowPlaying.native.js +134 -0
  81. package/dist/esm/platform/audio/nowPlaying.native.js.map +1 -0
  82. package/dist/esm/platform/audio/player.mjs +15 -0
  83. package/dist/esm/platform/audio/player.mjs.map +1 -1
  84. package/dist/esm/platform/audio/player.native.js +14 -0
  85. package/dist/esm/platform/audio/player.native.js.map +1 -1
  86. package/dist/esm/platform/audio/unavailable.mjs +1 -1
  87. package/dist/esm/platform/audio/unavailable.mjs.map +1 -1
  88. package/dist/esm/platform/audio/unavailable.native.js +1 -1
  89. package/dist/esm/platform/audio/unavailable.native.js.map +1 -1
  90. package/dist/esm/serve-worker.mjs +1 -2
  91. package/dist/esm/serve-worker.mjs.map +1 -1
  92. package/dist/esm/serve-worker.native.js +1 -2
  93. package/dist/esm/serve-worker.native.js.map +1 -1
  94. package/dist/esm/server/oneServe.mjs +0 -6
  95. package/dist/esm/server/oneServe.mjs.map +1 -1
  96. package/dist/esm/server/oneServe.native.js +0 -6
  97. package/dist/esm/server/oneServe.native.js.map +1 -1
  98. package/dist/esm/server/workerHandler.mjs +12 -10
  99. package/dist/esm/server/workerHandler.mjs.map +1 -1
  100. package/dist/esm/server/workerHandler.native.js +14 -10
  101. package/dist/esm/server/workerHandler.native.js.map +1 -1
  102. package/dist/esm/vite/plugins/workerdDevPlugin.mjs +33 -37
  103. package/dist/esm/vite/plugins/workerdDevPlugin.mjs.map +1 -1
  104. package/dist/esm/vite/plugins/workerdDevPlugin.native.js +33 -37
  105. package/dist/esm/vite/plugins/workerdDevPlugin.native.js.map +1 -1
  106. package/ios/Nitro/HybridOneAudio.swift +309 -96
  107. package/nitrogen/generated/android/c++/JAudioPlayOptions.hpp +61 -0
  108. package/nitrogen/generated/android/c++/JAudioRemoteCommandEvent.hpp +8 -3
  109. package/nitrogen/generated/android/c++/JFunc_void_AudioRemoteCommandEvent.hpp +1 -0
  110. package/nitrogen/generated/android/c++/JHybridOneAudioSpec.cpp +37 -3
  111. package/nitrogen/generated/android/c++/JHybridOneAudioSpec.hpp +3 -1
  112. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AudioPlayOptions.kt +56 -0
  113. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AudioRemoteCommandEvent.kt +9 -4
  114. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneAudioSpec.kt +40 -32
  115. package/nitrogen/generated/ios/One-Swift-Cxx-Umbrella.hpp +3 -0
  116. package/nitrogen/generated/ios/c++/HybridOneAudioSpecSwift.hpp +21 -2
  117. package/nitrogen/generated/ios/swift/AudioPlayOptions.swift +60 -0
  118. package/nitrogen/generated/ios/swift/AudioRemoteCommandEvent.swift +19 -1
  119. package/nitrogen/generated/ios/swift/HybridOneAudioSpec.swift +3 -1
  120. package/nitrogen/generated/ios/swift/HybridOneAudioSpec_cxx.swift +70 -32
  121. package/nitrogen/generated/shared/c++/AudioPlayOptions.hpp +87 -0
  122. package/nitrogen/generated/shared/c++/AudioRemoteCommandEvent.hpp +7 -2
  123. package/nitrogen/generated/shared/c++/HybridOneAudioSpec.cpp +2 -0
  124. package/nitrogen/generated/shared/c++/HybridOneAudioSpec.hpp +6 -1
  125. package/package.json +13 -13
  126. package/run.mjs +5 -1
  127. package/src/cli/build.ts +35 -32
  128. package/src/cli/buildPage.test.ts +152 -0
  129. package/src/cli/buildPage.ts +14 -9
  130. package/src/cli/buildPageWorker.ts +2 -1
  131. package/src/cli/workerPool.ts +1 -0
  132. package/src/cli-dev-memory.ts +24 -0
  133. package/src/headless-server.ts +2 -2
  134. package/src/index.ts +1 -0
  135. package/src/platform/audio/index.native.ts +4 -2
  136. package/src/platform/audio/index.ts +102 -74
  137. package/src/platform/audio/nowPlaying.ts +122 -0
  138. package/src/platform/audio/player.native.ts +17 -1
  139. package/src/platform/audio/player.ts +23 -1
  140. package/src/platform/audio/types.ts +6 -1
  141. package/src/platform/audio/unavailable.ts +3 -1
  142. package/src/platform/index.native.ts +1 -0
  143. package/src/platform/index.ts +1 -0
  144. package/src/platform/specs/OneAudio.nitro.ts +11 -1
  145. package/src/serve-worker.ts +2 -3
  146. package/src/server/oneServe.ts +0 -6
  147. package/src/server/workerHandler.ts +34 -18
  148. package/src/vite/plugins/workerdDevPlugin.ts +33 -37
  149. package/src/vite/resolveResponse.ts +2 -2
  150. package/types/cli/build.d.ts.map +1 -1
  151. package/types/cli/buildPage.d.ts +1 -1
  152. package/types/cli/buildPage.d.ts.map +1 -1
  153. package/types/cli/workerPool.d.ts +1 -0
  154. package/types/cli/workerPool.d.ts.map +1 -1
  155. package/types/cli-dev-memory.d.ts +2 -0
  156. package/types/cli-dev-memory.d.ts.map +1 -0
  157. package/types/headless-server.d.ts +3 -3
  158. package/types/headless-server.d.ts.map +1 -1
  159. package/types/index.d.ts +1 -1
  160. package/types/index.d.ts.map +1 -1
  161. package/types/platform/audio/index.d.ts +2 -2
  162. package/types/platform/audio/index.d.ts.map +1 -1
  163. package/types/platform/audio/index.native.d.ts +3 -3
  164. package/types/platform/audio/index.native.d.ts.map +1 -1
  165. package/types/platform/audio/nowPlaying.d.ts +12 -0
  166. package/types/platform/audio/nowPlaying.d.ts.map +1 -0
  167. package/types/platform/audio/player.d.ts +3 -1
  168. package/types/platform/audio/player.d.ts.map +1 -1
  169. package/types/platform/audio/player.native.d.ts +3 -1
  170. package/types/platform/audio/player.native.d.ts.map +1 -1
  171. package/types/platform/audio/types.d.ts +3 -1
  172. package/types/platform/audio/types.d.ts.map +1 -1
  173. package/types/platform/audio/unavailable.d.ts +3 -3
  174. package/types/platform/audio/unavailable.d.ts.map +1 -1
  175. package/types/platform/index.d.ts +1 -1
  176. package/types/platform/index.d.ts.map +1 -1
  177. package/types/platform/index.native.d.ts +1 -1
  178. package/types/platform/index.native.d.ts.map +1 -1
  179. package/types/platform/specs/OneAudio.nitro.d.ts +8 -1
  180. package/types/platform/specs/OneAudio.nitro.d.ts.map +1 -1
  181. package/types/serve-worker.d.ts +3 -3
  182. package/types/serve-worker.d.ts.map +1 -1
  183. package/types/server/oneServe.d.ts.map +1 -1
  184. package/types/server/workerHandler.d.ts +1 -1
  185. package/types/server/workerHandler.d.ts.map +1 -1
  186. package/types/vite/plugins/workerdDevPlugin.d.ts.map +1 -1
  187. package/types/vite/resolveResponse.d.ts +1 -1
  188. package/types/vite/resolveResponse.d.ts.map +1 -1
  189. package/dist/cjs/server/staticHtmlFetcher.cjs +0 -33
  190. package/dist/cjs/server/staticHtmlFetcher.native.cjs +0 -35
  191. package/dist/cjs/server/staticHtmlFetcher.native.js +0 -37
  192. package/dist/cjs/server/staticHtmlFetcher.native.js.map +0 -1
  193. package/dist/esm/server/staticHtmlFetcher.mjs +0 -10
  194. package/dist/esm/server/staticHtmlFetcher.mjs.map +0 -1
  195. package/dist/esm/server/staticHtmlFetcher.native.js +0 -10
  196. package/dist/esm/server/staticHtmlFetcher.native.js.map +0 -1
  197. package/src/server/staticHtmlFetcher.ts +0 -12
  198. package/types/server/staticHtmlFetcher.d.ts +0 -3
  199. package/types/server/staticHtmlFetcher.d.ts.map +0 -1
@@ -84,7 +84,7 @@ open class HybridOneAudioSpec_cxx {
84
84
  }
85
85
  }
86
86
 
87
-
87
+
88
88
 
89
89
  /**
90
90
  * Get the memory size of the Swift class (plus size of any other allocations)
@@ -121,7 +121,7 @@ open class HybridOneAudioSpec_cxx {
121
121
  }
122
122
 
123
123
  // Properties
124
-
124
+
125
125
 
126
126
  // Methods
127
127
  @inline(__always)
@@ -142,7 +142,7 @@ open class HybridOneAudioSpec_cxx {
142
142
  return bridge.create_Result_std__shared_ptr_Promise_AudioRecordingPermission___(__exceptionPtr)
143
143
  }
144
144
  }
145
-
145
+
146
146
  @inline(__always)
147
147
  public final func requestRecordingPermission() -> bridge.Result_std__shared_ptr_Promise_AudioRecordingPermission___ {
148
148
  do {
@@ -161,11 +161,11 @@ open class HybridOneAudioSpec_cxx {
161
161
  return bridge.create_Result_std__shared_ptr_Promise_AudioRecordingPermission___(__exceptionPtr)
162
162
  }
163
163
  }
164
-
164
+
165
165
  @inline(__always)
166
- public final func play(uri: std.string) -> bridge.Result_std__shared_ptr_Promise_AudioPlaybackStatus___ {
166
+ public final func play(uri: std.string, options: AudioPlayOptions) -> bridge.Result_std__shared_ptr_Promise_AudioPlaybackStatus___ {
167
167
  do {
168
- let __result = try self.__implementation.play(uri: String(uri))
168
+ let __result = try self.__implementation.play(uri: String(uri), options: options)
169
169
  let __resultCpp = { () -> bridge.std__shared_ptr_Promise_AudioPlaybackStatus__ in
170
170
  let __promise = bridge.create_std__shared_ptr_Promise_AudioPlaybackStatus__()
171
171
  let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_AudioPlaybackStatus__(__promise)
@@ -180,7 +180,7 @@ open class HybridOneAudioSpec_cxx {
180
180
  return bridge.create_Result_std__shared_ptr_Promise_AudioPlaybackStatus___(__exceptionPtr)
181
181
  }
182
182
  }
183
-
183
+
184
184
  @inline(__always)
185
185
  public final func getPlaybackStatus() -> bridge.Result_std__shared_ptr_Promise_AudioPlaybackStatus___ {
186
186
  do {
@@ -199,7 +199,7 @@ open class HybridOneAudioSpec_cxx {
199
199
  return bridge.create_Result_std__shared_ptr_Promise_AudioPlaybackStatus___(__exceptionPtr)
200
200
  }
201
201
  }
202
-
202
+
203
203
  @inline(__always)
204
204
  public final func pause() -> bridge.Result_std__shared_ptr_Promise_AudioPlaybackStatus___ {
205
205
  do {
@@ -218,7 +218,7 @@ open class HybridOneAudioSpec_cxx {
218
218
  return bridge.create_Result_std__shared_ptr_Promise_AudioPlaybackStatus___(__exceptionPtr)
219
219
  }
220
220
  }
221
-
221
+
222
222
  @inline(__always)
223
223
  public final func resume() -> bridge.Result_std__shared_ptr_Promise_AudioPlaybackStatus___ {
224
224
  do {
@@ -237,7 +237,7 @@ open class HybridOneAudioSpec_cxx {
237
237
  return bridge.create_Result_std__shared_ptr_Promise_AudioPlaybackStatus___(__exceptionPtr)
238
238
  }
239
239
  }
240
-
240
+
241
241
  @inline(__always)
242
242
  public final func seek(positionMs: Double) -> bridge.Result_std__shared_ptr_Promise_AudioPlaybackStatus___ {
243
243
  do {
@@ -256,7 +256,7 @@ open class HybridOneAudioSpec_cxx {
256
256
  return bridge.create_Result_std__shared_ptr_Promise_AudioPlaybackStatus___(__exceptionPtr)
257
257
  }
258
258
  }
259
-
259
+
260
260
  @inline(__always)
261
261
  public final func stop() -> bridge.Result_std__shared_ptr_Promise_void___ {
262
262
  do {
@@ -275,7 +275,7 @@ open class HybridOneAudioSpec_cxx {
275
275
  return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
276
276
  }
277
277
  }
278
-
278
+
279
279
  @inline(__always)
280
280
  public final func startRecording() -> bridge.Result_std__shared_ptr_Promise_AudioRecordingStatus___ {
281
281
  do {
@@ -294,7 +294,7 @@ open class HybridOneAudioSpec_cxx {
294
294
  return bridge.create_Result_std__shared_ptr_Promise_AudioRecordingStatus___(__exceptionPtr)
295
295
  }
296
296
  }
297
-
297
+
298
298
  @inline(__always)
299
299
  public final func getRecordingStatus() -> bridge.Result_std__shared_ptr_Promise_AudioRecordingStatus___ {
300
300
  do {
@@ -313,7 +313,7 @@ open class HybridOneAudioSpec_cxx {
313
313
  return bridge.create_Result_std__shared_ptr_Promise_AudioRecordingStatus___(__exceptionPtr)
314
314
  }
315
315
  }
316
-
316
+
317
317
  @inline(__always)
318
318
  public final func pauseRecording() -> bridge.Result_std__shared_ptr_Promise_AudioRecordingStatus___ {
319
319
  do {
@@ -332,7 +332,7 @@ open class HybridOneAudioSpec_cxx {
332
332
  return bridge.create_Result_std__shared_ptr_Promise_AudioRecordingStatus___(__exceptionPtr)
333
333
  }
334
334
  }
335
-
335
+
336
336
  @inline(__always)
337
337
  public final func resumeRecording() -> bridge.Result_std__shared_ptr_Promise_AudioRecordingStatus___ {
338
338
  do {
@@ -351,7 +351,7 @@ open class HybridOneAudioSpec_cxx {
351
351
  return bridge.create_Result_std__shared_ptr_Promise_AudioRecordingStatus___(__exceptionPtr)
352
352
  }
353
353
  }
354
-
354
+
355
355
  @inline(__always)
356
356
  public final func stopRecording() -> bridge.Result_std__shared_ptr_Promise_AudioRecordingResult___ {
357
357
  do {
@@ -370,7 +370,7 @@ open class HybridOneAudioSpec_cxx {
370
370
  return bridge.create_Result_std__shared_ptr_Promise_AudioRecordingResult___(__exceptionPtr)
371
371
  }
372
372
  }
373
-
373
+
374
374
  @inline(__always)
375
375
  public final func addInterruptionListener(onEvent: bridge.Func_void_AudioInterruptionEvent) -> bridge.Result_std__function_void____ {
376
376
  do {
@@ -390,7 +390,7 @@ open class HybridOneAudioSpec_cxx {
390
390
  return bridge.create_Result_std__function_void____(__exceptionPtr)
391
391
  }
392
392
  }
393
-
393
+
394
394
  @inline(__always)
395
395
  public final func setNowPlayingInfo(info: AudioNowPlayingInfo) -> bridge.Result_std__shared_ptr_Promise_void___ {
396
396
  do {
@@ -409,7 +409,7 @@ open class HybridOneAudioSpec_cxx {
409
409
  return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
410
410
  }
411
411
  }
412
-
412
+
413
413
  @inline(__always)
414
414
  public final func clearNowPlayingInfo() -> bridge.Result_std__shared_ptr_Promise_void___ {
415
415
  do {
@@ -428,7 +428,7 @@ open class HybridOneAudioSpec_cxx {
428
428
  return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
429
429
  }
430
430
  }
431
-
431
+
432
432
  @inline(__always)
433
433
  public final func addRemoteCommandListener(onEvent: bridge.Func_void_AudioRemoteCommandEvent) -> bridge.Result_std__function_void____ {
434
434
  do {
@@ -448,7 +448,7 @@ open class HybridOneAudioSpec_cxx {
448
448
  return bridge.create_Result_std__function_void____(__exceptionPtr)
449
449
  }
450
450
  }
451
-
451
+
452
452
  @inline(__always)
453
453
  public final func createPlayer(sourceUri: bridge.std__optional_std__string_, headers: bridge.std__optional_std__unordered_map_std__string__std__string__) -> bridge.Result_std__string_ {
454
454
  do {
@@ -482,7 +482,7 @@ open class HybridOneAudioSpec_cxx {
482
482
  return bridge.create_Result_std__string_(__exceptionPtr)
483
483
  }
484
484
  }
485
-
485
+
486
486
  @inline(__always)
487
487
  public final func playerPlay(playerId: std.string) -> bridge.Result_void_ {
488
488
  do {
@@ -493,7 +493,7 @@ open class HybridOneAudioSpec_cxx {
493
493
  return bridge.create_Result_void_(__exceptionPtr)
494
494
  }
495
495
  }
496
-
496
+
497
497
  @inline(__always)
498
498
  public final func playerPause(playerId: std.string) -> bridge.Result_void_ {
499
499
  do {
@@ -504,7 +504,7 @@ open class HybridOneAudioSpec_cxx {
504
504
  return bridge.create_Result_void_(__exceptionPtr)
505
505
  }
506
506
  }
507
-
507
+
508
508
  @inline(__always)
509
509
  public final func playerSeek(playerId: std.string, seconds: Double, toleranceBeforeMs: bridge.std__optional_double_, toleranceAfterMs: bridge.std__optional_double_) -> bridge.Result_std__shared_ptr_Promise_void___ {
510
510
  do {
@@ -537,7 +537,7 @@ open class HybridOneAudioSpec_cxx {
537
537
  return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
538
538
  }
539
539
  }
540
-
540
+
541
541
  @inline(__always)
542
542
  public final func playerReplace(playerId: std.string, sourceUri: bridge.std__optional_std__string_, headers: bridge.std__optional_std__unordered_map_std__string__std__string__) -> bridge.Result_void_ {
543
543
  do {
@@ -570,7 +570,7 @@ open class HybridOneAudioSpec_cxx {
570
570
  return bridge.create_Result_void_(__exceptionPtr)
571
571
  }
572
572
  }
573
-
573
+
574
574
  @inline(__always)
575
575
  public final func removePlayer(playerId: std.string) -> bridge.Result_void_ {
576
576
  do {
@@ -581,7 +581,45 @@ open class HybridOneAudioSpec_cxx {
581
581
  return bridge.create_Result_void_(__exceptionPtr)
582
582
  }
583
583
  }
584
-
584
+
585
+ @inline(__always)
586
+ public final func setPlayerNowPlayingInfo(playerId: std.string, info: AudioNowPlayingInfo) -> bridge.Result_std__shared_ptr_Promise_void___ {
587
+ do {
588
+ let __result = try self.__implementation.setPlayerNowPlayingInfo(playerId: String(playerId), info: info)
589
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
590
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
591
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
592
+ __result
593
+ .then({ __result in __promiseHolder.resolve() })
594
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
595
+ return __promise
596
+ }()
597
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
598
+ } catch (let __error) {
599
+ let __exceptionPtr = __error.toCpp()
600
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
601
+ }
602
+ }
603
+
604
+ @inline(__always)
605
+ public final func clearPlayerNowPlayingInfo(playerId: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
606
+ do {
607
+ let __result = try self.__implementation.clearPlayerNowPlayingInfo(playerId: String(playerId))
608
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
609
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
610
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
611
+ __result
612
+ .then({ __result in __promiseHolder.resolve() })
613
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
614
+ return __promise
615
+ }()
616
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
617
+ } catch (let __error) {
618
+ let __exceptionPtr = __error.toCpp()
619
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
620
+ }
621
+ }
622
+
585
623
  @inline(__always)
586
624
  public final func getPlayerStatus(playerId: std.string) -> bridge.Result_AudioPlayerStatus_ {
587
625
  do {
@@ -593,7 +631,7 @@ open class HybridOneAudioSpec_cxx {
593
631
  return bridge.create_Result_AudioPlayerStatus_(__exceptionPtr)
594
632
  }
595
633
  }
596
-
634
+
597
635
  @inline(__always)
598
636
  public final func setPlayerRate(playerId: std.string, rate: Double, pitchQuality: bridge.std__optional_PitchCorrectionQuality_) -> bridge.Result_void_ {
599
637
  do {
@@ -604,7 +642,7 @@ open class HybridOneAudioSpec_cxx {
604
642
  return bridge.create_Result_void_(__exceptionPtr)
605
643
  }
606
644
  }
607
-
645
+
608
646
  @inline(__always)
609
647
  public final func setPlayerVolume(playerId: std.string, volume: Double) -> bridge.Result_void_ {
610
648
  do {
@@ -615,7 +653,7 @@ open class HybridOneAudioSpec_cxx {
615
653
  return bridge.create_Result_void_(__exceptionPtr)
616
654
  }
617
655
  }
618
-
656
+
619
657
  @inline(__always)
620
658
  public final func setPlayerMuted(playerId: std.string, muted: Bool) -> bridge.Result_void_ {
621
659
  do {
@@ -626,7 +664,7 @@ open class HybridOneAudioSpec_cxx {
626
664
  return bridge.create_Result_void_(__exceptionPtr)
627
665
  }
628
666
  }
629
-
667
+
630
668
  @inline(__always)
631
669
  public final func setPlayerLoop(playerId: std.string, loop: Bool) -> bridge.Result_void_ {
632
670
  do {
@@ -637,7 +675,7 @@ open class HybridOneAudioSpec_cxx {
637
675
  return bridge.create_Result_void_(__exceptionPtr)
638
676
  }
639
677
  }
640
-
678
+
641
679
  @inline(__always)
642
680
  public final func setPlayerPitchCorrection(playerId: std.string, enabled: Bool) -> bridge.Result_void_ {
643
681
  do {
@@ -0,0 +1,87 @@
1
+ ///
2
+ /// AudioPlayOptions.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/JSIConverter.hpp>)
11
+ #include <NitroModules/JSIConverter.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+ #if __has_include(<NitroModules/NitroDefines.hpp>)
16
+ #include <NitroModules/NitroDefines.hpp>
17
+ #else
18
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
19
+ #endif
20
+ #if __has_include(<NitroModules/JSIHelpers.hpp>)
21
+ #include <NitroModules/JSIHelpers.hpp>
22
+ #else
23
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
24
+ #endif
25
+ #if __has_include(<NitroModules/PropNameIDCache.hpp>)
26
+ #include <NitroModules/PropNameIDCache.hpp>
27
+ #else
28
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
29
+ #endif
30
+
31
+
32
+
33
+ #include <optional>
34
+
35
+ namespace margelo::nitro::one {
36
+
37
+ /**
38
+ * A struct which can be represented as a JavaScript object (AudioPlayOptions).
39
+ */
40
+ struct AudioPlayOptions final {
41
+ public:
42
+ std::optional<double> positionMs SWIFT_PRIVATE;
43
+ std::optional<bool> paused SWIFT_PRIVATE;
44
+
45
+ public:
46
+ AudioPlayOptions() = default;
47
+ explicit AudioPlayOptions(std::optional<double> positionMs, std::optional<bool> paused): positionMs(positionMs), paused(paused) {}
48
+
49
+ public:
50
+ friend bool operator==(const AudioPlayOptions& lhs, const AudioPlayOptions& rhs) = default;
51
+ };
52
+
53
+ } // namespace margelo::nitro::one
54
+
55
+ namespace margelo::nitro {
56
+
57
+ // C++ AudioPlayOptions <> JS AudioPlayOptions (object)
58
+ template <>
59
+ struct JSIConverter<margelo::nitro::one::AudioPlayOptions> final {
60
+ static inline margelo::nitro::one::AudioPlayOptions fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
61
+ jsi::Object obj = arg.asObject(runtime);
62
+ return margelo::nitro::one::AudioPlayOptions(
63
+ JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "positionMs"))),
64
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "paused")))
65
+ );
66
+ }
67
+ static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::one::AudioPlayOptions& arg) {
68
+ jsi::Object obj(runtime);
69
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "positionMs"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.positionMs));
70
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "paused"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.paused));
71
+ return obj;
72
+ }
73
+ static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
74
+ if (!value.isObject()) {
75
+ return false;
76
+ }
77
+ jsi::Object obj = value.getObject(runtime);
78
+ if (!nitro::isPlainObject(runtime, obj)) {
79
+ return false;
80
+ }
81
+ if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "positionMs")))) return false;
82
+ if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "paused")))) return false;
83
+ return true;
84
+ }
85
+ };
86
+
87
+ } // namespace margelo::nitro
@@ -33,6 +33,7 @@ namespace margelo::nitro::one { enum class AudioRemoteCommandType; }
33
33
 
34
34
  #include "AudioRemoteCommandType.hpp"
35
35
  #include <optional>
36
+ #include <string>
36
37
 
37
38
  namespace margelo::nitro::one {
38
39
 
@@ -43,10 +44,11 @@ namespace margelo::nitro::one {
43
44
  public:
44
45
  AudioRemoteCommandType type SWIFT_PRIVATE;
45
46
  std::optional<double> positionMs SWIFT_PRIVATE;
47
+ std::optional<std::string> playerId SWIFT_PRIVATE;
46
48
 
47
49
  public:
48
50
  AudioRemoteCommandEvent() = default;
49
- explicit AudioRemoteCommandEvent(AudioRemoteCommandType type, std::optional<double> positionMs): type(type), positionMs(positionMs) {}
51
+ explicit AudioRemoteCommandEvent(AudioRemoteCommandType type, std::optional<double> positionMs, std::optional<std::string> playerId): type(type), positionMs(positionMs), playerId(playerId) {}
50
52
 
51
53
  public:
52
54
  friend bool operator==(const AudioRemoteCommandEvent& lhs, const AudioRemoteCommandEvent& rhs) = default;
@@ -63,13 +65,15 @@ namespace margelo::nitro {
63
65
  jsi::Object obj = arg.asObject(runtime);
64
66
  return margelo::nitro::one::AudioRemoteCommandEvent(
65
67
  JSIConverter<margelo::nitro::one::AudioRemoteCommandType>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type"))),
66
- JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "positionMs")))
68
+ JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "positionMs"))),
69
+ JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "playerId")))
67
70
  );
68
71
  }
69
72
  static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::one::AudioRemoteCommandEvent& arg) {
70
73
  jsi::Object obj(runtime);
71
74
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "type"), JSIConverter<margelo::nitro::one::AudioRemoteCommandType>::toJSI(runtime, arg.type));
72
75
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "positionMs"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.positionMs));
76
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "playerId"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.playerId));
73
77
  return obj;
74
78
  }
75
79
  static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
@@ -82,6 +86,7 @@ namespace margelo::nitro {
82
86
  }
83
87
  if (!JSIConverter<margelo::nitro::one::AudioRemoteCommandType>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type")))) return false;
84
88
  if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "positionMs")))) return false;
89
+ if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "playerId")))) return false;
85
90
  return true;
86
91
  }
87
92
  };
@@ -37,6 +37,8 @@ namespace margelo::nitro::one {
37
37
  prototype.registerHybridMethod("playerSeek", &HybridOneAudioSpec::playerSeek);
38
38
  prototype.registerHybridMethod("playerReplace", &HybridOneAudioSpec::playerReplace);
39
39
  prototype.registerHybridMethod("removePlayer", &HybridOneAudioSpec::removePlayer);
40
+ prototype.registerHybridMethod("setPlayerNowPlayingInfo", &HybridOneAudioSpec::setPlayerNowPlayingInfo);
41
+ prototype.registerHybridMethod("clearPlayerNowPlayingInfo", &HybridOneAudioSpec::clearPlayerNowPlayingInfo);
40
42
  prototype.registerHybridMethod("getPlayerStatus", &HybridOneAudioSpec::getPlayerStatus);
41
43
  prototype.registerHybridMethod("setPlayerRate", &HybridOneAudioSpec::setPlayerRate);
42
44
  prototype.registerHybridMethod("setPlayerVolume", &HybridOneAudioSpec::setPlayerVolume);
@@ -17,6 +17,8 @@
17
17
  namespace margelo::nitro::one { enum class AudioRecordingPermission; }
18
18
  // Forward declaration of `AudioPlaybackStatus` to properly resolve imports.
19
19
  namespace margelo::nitro::one { struct AudioPlaybackStatus; }
20
+ // Forward declaration of `AudioPlayOptions` to properly resolve imports.
21
+ namespace margelo::nitro::one { struct AudioPlayOptions; }
20
22
  // Forward declaration of `AudioRecordingStatus` to properly resolve imports.
21
23
  namespace margelo::nitro::one { struct AudioRecordingStatus; }
22
24
  // Forward declaration of `AudioRecordingResult` to properly resolve imports.
@@ -36,6 +38,7 @@ namespace margelo::nitro::one { enum class PitchCorrectionQuality; }
36
38
  #include <NitroModules/Promise.hpp>
37
39
  #include "AudioPlaybackStatus.hpp"
38
40
  #include <string>
41
+ #include "AudioPlayOptions.hpp"
39
42
  #include "AudioRecordingStatus.hpp"
40
43
  #include "AudioRecordingResult.hpp"
41
44
  #include <functional>
@@ -80,7 +83,7 @@ namespace margelo::nitro::one {
80
83
  // Methods
81
84
  virtual std::shared_ptr<Promise<AudioRecordingPermission>> getRecordingPermissionStatus() = 0;
82
85
  virtual std::shared_ptr<Promise<AudioRecordingPermission>> requestRecordingPermission() = 0;
83
- virtual std::shared_ptr<Promise<AudioPlaybackStatus>> play(const std::string& uri) = 0;
86
+ virtual std::shared_ptr<Promise<AudioPlaybackStatus>> play(const std::string& uri, const AudioPlayOptions& options) = 0;
84
87
  virtual std::shared_ptr<Promise<AudioPlaybackStatus>> getPlaybackStatus() = 0;
85
88
  virtual std::shared_ptr<Promise<AudioPlaybackStatus>> pause() = 0;
86
89
  virtual std::shared_ptr<Promise<AudioPlaybackStatus>> resume() = 0;
@@ -101,6 +104,8 @@ namespace margelo::nitro::one {
101
104
  virtual std::shared_ptr<Promise<void>> playerSeek(const std::string& playerId, double seconds, std::optional<double> toleranceBeforeMs, std::optional<double> toleranceAfterMs) = 0;
102
105
  virtual void playerReplace(const std::string& playerId, const std::optional<std::string>& sourceUri, const std::optional<std::unordered_map<std::string, std::string>>& headers) = 0;
103
106
  virtual void removePlayer(const std::string& playerId) = 0;
107
+ virtual std::shared_ptr<Promise<void>> setPlayerNowPlayingInfo(const std::string& playerId, const AudioNowPlayingInfo& info) = 0;
108
+ virtual std::shared_ptr<Promise<void>> clearPlayerNowPlayingInfo(const std::string& playerId) = 0;
104
109
  virtual AudioPlayerStatus getPlayerStatus(const std::string& playerId) = 0;
105
110
  virtual void setPlayerRate(const std::string& playerId, double rate, std::optional<PitchCorrectionQuality> pitchQuality) = 0;
106
111
  virtual void setPlayerVolume(const std::string& playerId, double volume) = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one",
3
- "version": "2.11.5",
3
+ "version": "2.12.1",
4
4
  "description": "One is a React framework for web, iOS, and Android apps.",
5
5
  "license": "BSD-3-Clause",
6
6
  "sideEffects": [
@@ -282,15 +282,15 @@
282
282
  "@react-navigation/routers": "8.0.0-alpha.21",
283
283
  "@rozenite/middleware": "^2.5.0",
284
284
  "@ungap/structured-clone": "^1.2.0",
285
- "@vxrn/color-scheme": "2.11.5",
286
- "@vxrn/compiler": "2.11.5",
287
- "@vxrn/resolve": "2.11.5",
288
- "@vxrn/tslib-lite": "2.11.5",
289
- "@vxrn/use-isomorphic-layout-effect": "2.11.5",
290
- "@vxrn/utils": "2.11.5",
285
+ "@vxrn/color-scheme": "2.12.1",
286
+ "@vxrn/compiler": "2.12.1",
287
+ "@vxrn/resolve": "2.12.1",
288
+ "@vxrn/tslib-lite": "2.12.1",
289
+ "@vxrn/use-isomorphic-layout-effect": "2.12.1",
290
+ "@vxrn/utils": "2.12.1",
291
291
  "citty": "^0.1.6",
292
292
  "core-js": "^3.38.1",
293
- "create-vxrn": "2.11.5",
293
+ "create-vxrn": "2.12.1",
294
294
  "escape-string-regexp": "^5.0.0",
295
295
  "fast-deep-equal": "^3.1.3",
296
296
  "fast-glob": "^3.3.3",
@@ -312,7 +312,7 @@
312
312
  "tsconfig-paths": "^4",
313
313
  "use-latest-callback": "^0.3.5",
314
314
  "vite": "^8.2.2",
315
- "vxrn": "2.11.5",
315
+ "vxrn": "2.12.1",
316
316
  "web-streams-polyfill": "^4.3.0",
317
317
  "ws": "^8.21.0",
318
318
  "xxhashjs": "^0.2.2"
@@ -342,7 +342,7 @@
342
342
  "@babel/types": "^7.28.5",
343
343
  "babel-dead-code-elimination": "1.0.10",
344
344
  "babel-plugin-module-resolver": "^5.0.2",
345
- "@vxrn/vite-plugin-metro": "2.11.5"
345
+ "@vxrn/vite-plugin-metro": "2.12.1"
346
346
  },
347
347
  "peerDependenciesMeta": {
348
348
  "@react-native/babel-preset": {
@@ -416,7 +416,7 @@
416
416
  "@types/react-dom": "^19.3.0",
417
417
  "@types/react-test-renderer": "^19.1.0",
418
418
  "@types/xxhashjs": "^0.2.4",
419
- "@vxrn/emitter": "2.11.5",
419
+ "@vxrn/emitter": "2.12.1",
420
420
  "depcheck": "^1.4.7",
421
421
  "esbuild": "^0.25.12",
422
422
  "immer": "^10.1.1",
@@ -444,7 +444,7 @@
444
444
  "@babel/types": "^7.28.5",
445
445
  "babel-dead-code-elimination": "1.0.10",
446
446
  "babel-plugin-module-resolver": "^5.0.2",
447
- "@vxrn/vite-plugin-metro": "2.11.5"
447
+ "@vxrn/vite-plugin-metro": "2.12.1"
448
448
  },
449
449
  "publishConfig": {
450
450
  "access": "public"
@@ -611,7 +611,7 @@
611
611
  }
612
612
  }
613
613
  },
614
- "releaseSourceCommit": "8932a95114b2e989999b3078d4246b40912e758c",
614
+ "releaseSourceCommit": "5c3b96955d1ba994e2a2957b90dcb6615af9a594",
615
615
  "repository": {
616
616
  "type": "git",
617
617
  "url": "git+https://github.com/onejs/one.git",
package/run.mjs CHANGED
@@ -1,3 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import './dist/esm/cli.mjs'
3
+ if (process.argv[2] === 'dev') {
4
+ const { initializeDevAllocator } = await import('./dist/esm/cli-dev-memory.mjs')
5
+ await initializeDevAllocator()
6
+ }
7
+ await import('./dist/esm/cli.mjs')
package/src/cli/build.ts CHANGED
@@ -548,6 +548,11 @@ export async function build(args: {
548
548
  // concurrency limiter for parallel page builds
549
549
  const limit = pLimit(buildConcurrency)
550
550
 
551
+ // native:false runs One as a pure web framework: no native bundle exists to
552
+ // read the per-loader .native.js twins, so buildPage omits them. default and
553
+ // native-enabled builds keep writing both twins.
554
+ const skipNativeLoaders = oneOptions.native === false
555
+
551
556
  // initialize worker pool if enabled (default: true)
552
557
  const useWorkers = shouldUseWorkers(oneOptions)
553
558
  const workerPool = useWorkers ? getWorkerPool(buildConcurrency) : null
@@ -1081,6 +1086,7 @@ export async function build(args: {
1081
1086
  deferredPreloads,
1082
1087
  useAfterLCP,
1083
1088
  useAfterLCPAggressive,
1089
+ skipNativeLoaders,
1084
1090
  })
1085
1091
  .then((built) => ({ built, path }))
1086
1092
  }
@@ -1110,7 +1116,8 @@ export async function build(args: {
1110
1116
  criticalPreloads,
1111
1117
  deferredPreloads,
1112
1118
  useAfterLCP,
1113
- useAfterLCPAggressive
1119
+ useAfterLCPAggressive,
1120
+ skipNativeLoaders
1114
1121
  )
1115
1122
  })
1116
1123
 
@@ -1351,7 +1358,7 @@ if (typeof MessageChannel === 'undefined') {
1351
1358
  }
1352
1359
  }
1353
1360
 
1354
- import { serve, setFetchStaticHtml, withRange } from 'one/serve-worker'
1361
+ import { serve, withRange } from 'one/serve-worker'
1355
1362
 
1356
1363
  // Lazy import map - modules load on-demand when route is matched
1357
1364
  const lazyRoutes = {
@@ -1374,44 +1381,40 @@ export default {
1374
1381
  server = await serve(buildInfo, lazyRoutes)
1375
1382
  }
1376
1383
 
1377
- // set up static HTML fetcher for this request (uses ASSETS binding)
1378
- if (env.ASSETS) {
1379
- setFetchStaticHtml(async (path) => {
1380
- try {
1381
- const url = new URL(request.url)
1382
- url.pathname = path
1383
- const assetResponse = await env.ASSETS.fetch(new Request(url))
1384
- if (assetResponse && assetResponse.ok) {
1385
- return await assetResponse.text()
1384
+ // keep the asset binding and origin scoped to this request
1385
+ const fetchStaticHtml = env.ASSETS
1386
+ ? async (path) => {
1387
+ try {
1388
+ const url = new URL(request.url)
1389
+ url.pathname = path
1390
+ const assetResponse = await env.ASSETS.fetch(new Request(url))
1391
+ if (assetResponse && assetResponse.ok) {
1392
+ return await assetResponse.text()
1393
+ }
1394
+ } catch (e) {
1395
+ // asset not found
1386
1396
  }
1387
- } catch (e) {
1388
- // asset not found
1397
+ return null
1389
1398
  }
1390
- return null
1391
- })
1392
- }
1399
+ : undefined
1393
1400
 
1394
- try {
1395
- const response = await server.fetch(request, env, ctx)
1401
+ const response = await server.fetch(request, env, ctx, fetchStaticHtml)
1396
1402
 
1397
- // no route matched or 404 → try static assets
1398
- if (!response || response.status === 404) {
1399
- if (env.ASSETS) {
1400
- try {
1401
- const assetResponse = await env.ASSETS.fetch(request)
1402
- if (assetResponse && assetResponse.status !== 404) {
1403
- return await withRange(request, assetResponse)
1404
- }
1405
- } catch (e) {
1406
- // asset not found, continue with original response
1403
+ // no route matched or 404 → try static assets
1404
+ if (!response || response.status === 404) {
1405
+ if (env.ASSETS) {
1406
+ try {
1407
+ const assetResponse = await env.ASSETS.fetch(request)
1408
+ if (assetResponse && assetResponse.status !== 404) {
1409
+ return await withRange(request, assetResponse)
1407
1410
  }
1411
+ } catch (e) {
1412
+ // asset not found, continue with original response
1408
1413
  }
1409
1414
  }
1410
-
1411
- return response
1412
- } finally {
1413
- setFetchStaticHtml(null)
1414
1415
  }
1416
+
1417
+ return response
1415
1418
  }
1416
1419
  }
1417
1420
  `