(opts: HotStateReloadOptions<S>)
| 259 | } |
| 260 | |
| 261 | function createReloadAdapter<S>(opts: HotStateReloadOptions<S>): Readonly<{ |
| 262 | entryModule: string | URL; |
| 263 | targetLabel: "view" | "routes"; |
| 264 | applyReload: (moduleNs: unknown) => void; |
| 265 | }> { |
| 266 | if (isViewReloadOptions(opts)) { |
| 267 | const resolveView = opts.resolveView ?? defaultResolveView<S>; |
| 268 | return Object.freeze({ |
| 269 | entryModule: opts.viewModule, |
| 270 | targetLabel: "view" as const, |
| 271 | applyReload: (moduleNs: unknown) => { |
| 272 | const nextView = resolveView(moduleNs); |
| 273 | opts.app.replaceView(nextView); |
| 274 | opts.onReload?.(nextView); |
| 275 | }, |
| 276 | }); |
| 277 | } |
| 278 | |
| 279 | if (isRoutesReloadOptions(opts)) { |
| 280 | const resolveRoutes = opts.resolveRoutes ?? defaultResolveRoutes<S>; |
| 281 | return Object.freeze({ |
| 282 | entryModule: opts.routesModule, |
| 283 | targetLabel: "routes" as const, |
| 284 | applyReload: (moduleNs: unknown) => { |
| 285 | const nextRoutes = resolveRoutes(moduleNs); |
| 286 | opts.app.replaceRoutes(nextRoutes); |
| 287 | opts.onReload?.(nextRoutes); |
| 288 | }, |
| 289 | }); |
| 290 | } |
| 291 | |
| 292 | throw new Error("HSR options must provide either `viewModule` or `routesModule`"); |
| 293 | } |
| 294 | |
| 295 | export function createHotStateReload<S>(opts: HotStateReloadOptions<S>): HotStateReloadController { |
| 296 | const reloadAdapter = createReloadAdapter(opts); |
no test coverage detected