@void/react 0.10.5 → 0.10.6

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.
@@ -0,0 +1,5 @@
1
+ //#region src/runtime/deferred-shell.ts
2
+ const DEFERRED_SHELL_END_ID = "__VOID_DEFERRED_SHELL_END__";
3
+ const DEFERRED_SHELL_END_MARKER = `<template id="${DEFERRED_SHELL_END_ID}"></template>`;
4
+ //#endregion
5
+ export { DEFERRED_SHELL_END_MARKER as n, DEFERRED_SHELL_END_ID as t };
package/dist/index.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as ParamsContext, c as action, d as useNavigation, f as useForm, g as Link, h as useRouter, i as NavigationContext, l as setActionRouter, m as useParams, n as InferProps, o as RouterContext, p as useShared, r as ErrorsContext, s as SharedContext, t as Deferred, u as useIslandForm } from "./index-CykTJ4Xm.mjs";
2
- export { Deferred, ErrorsContext, InferProps, Link, NavigationContext, ParamsContext, RouterContext, SharedContext, action, setActionRouter, useForm, useIslandForm, useNavigation, useParams, useRouter, useShared };
1
+ import { a as ParamsContext, c as action, d as useNavigation, f as useForm, g as Link, h as useRouter, i as NavigationContext, l as setActionRouter, m as useParams, n as InferProps, o as RouterContext, p as useShared, r as ErrorsContext, s as SharedContext, t as Deferred, u as useIslandForm } from "./index-5JoQg_-q.mjs";
2
+ export { Deferred, ErrorsContext, type InferProps, Link, NavigationContext, ParamsContext, RouterContext, SharedContext, action, setActionRouter, useForm, useIslandForm, useNavigation, useParams, useRouter, useShared };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "./context-CBGCQE3p.mjs";
2
- import { a as useParams, i as useShared, n as useNavigation, o as useRouter, r as useForm, s as Link, t as useIslandForm } from "./runtime-C0j3tKTP.mjs";
3
- import { n as setActionRouter, t as action } from "./action-BFWtavbf.mjs";
1
+ import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "./context-B0GL7p5m.mjs";
2
+ import { a as useParams, i as useShared, n as useNavigation, o as useRouter, r as useForm, s as Link, t as useIslandForm } from "./runtime-W1oiBA4P.mjs";
3
+ import { n as setActionRouter, t as action } from "./action-Bq1iSG6m.mjs";
4
4
  export { ErrorsContext, Link, NavigationContext, ParamsContext, RouterContext, SharedContext, action, setActionRouter, useForm, useIslandForm, useNavigation, useParams, useRouter, useShared };
package/dist/plugin.mjs CHANGED
@@ -377,7 +377,6 @@ initIslands(islands, hydrateIsland);
377
377
  }
378
378
  //#endregion
379
379
  //#region src/plugin-pages.ts
380
- const RENDERER_ID = "virtual:void-pages-renderer";
381
380
  const CLIENT_ENTRY_ID = "virtual:void-pages-client";
382
381
  const WORKER_ENVIRONMENT_NAME = "void_worker";
383
382
  const REACT_DEDUPE = ["react", "react-dom"];
@@ -423,7 +422,7 @@ function pagesPlugin(pagesDir, options) {
423
422
  return pendingRescan;
424
423
  };
425
424
  const invalidatePageModules = (server) => {
426
- for (const env of Object.values(server.environments)) for (const id of ["\0" + RENDERER_ID, "\0" + CLIENT_ENTRY_ID]) {
425
+ for (const env of Object.values(server.environments)) for (const id of ["\0virtual:void-pages-renderer", "\0virtual:void-pages-client"]) {
427
426
  const mod = env.moduleGraph.getModuleById(id);
428
427
  if (mod) env.moduleGraph.invalidateModule(mod);
429
428
  }
@@ -444,11 +443,11 @@ function pagesPlugin(pagesDir, options) {
444
443
  async handler(id) {
445
444
  if (isDev && pendingRescan) await pendingRescan;
446
445
  if (!pageScan && existsSync(pagesDir)) await runRescan();
447
- if (id === "\0" + RENDERER_ID) {
446
+ if (id === "\0virtual:void-pages-renderer") {
448
447
  if (!pageScan) return "export function renderPage() { throw new Error('No pages found'); }";
449
448
  return generateRendererModule(pageScan, pagesDir, isDev);
450
449
  }
451
- if (id === "\0" + CLIENT_ENTRY_ID) {
450
+ if (id === "\0virtual:void-pages-client") {
452
451
  if (!pageScan) return "";
453
452
  return generateClientEntry(pageScan, pagesDir, options?.viewTransitions, options?.prefetch, resolveStaticPageDataBuildOptions(root, { publicDir: viteConfig?.publicDir }));
454
453
  }
@@ -1,2 +1,2 @@
1
- import { a as ParamsContext, c as action, d as useNavigation, f as useForm, g as Link, h as useRouter, i as NavigationContext, l as setActionRouter, m as useParams, n as InferProps, o as RouterContext, p as useShared, r as ErrorsContext, s as SharedContext, t as Deferred, u as useIslandForm } from "../index-CykTJ4Xm.mjs";
2
- export { Deferred, ErrorsContext, InferProps, Link, NavigationContext, ParamsContext, RouterContext, SharedContext, action, setActionRouter, useForm, useIslandForm, useNavigation, useParams, useRouter, useShared };
1
+ import { a as ParamsContext, c as action, d as useNavigation, f as useForm, g as Link, h as useRouter, i as NavigationContext, l as setActionRouter, m as useParams, n as InferProps, o as RouterContext, p as useShared, r as ErrorsContext, s as SharedContext, t as Deferred, u as useIslandForm } from "../index-5JoQg_-q.mjs";
2
+ export { Deferred, ErrorsContext, type InferProps, Link, NavigationContext, ParamsContext, RouterContext, SharedContext, action, setActionRouter, useForm, useIslandForm, useNavigation, useParams, useRouter, useShared };
@@ -1,4 +1,4 @@
1
- import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "../context-CBGCQE3p.mjs";
2
- import { a as useParams, i as useShared, n as useNavigation, o as useRouter, r as useForm, s as Link, t as useIslandForm } from "../runtime-C0j3tKTP.mjs";
3
- import { n as setActionRouter, t as action } from "../action-BFWtavbf.mjs";
1
+ import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "../context-B0GL7p5m.mjs";
2
+ import { a as useParams, i as useShared, n as useNavigation, o as useRouter, r as useForm, s as Link, t as useIslandForm } from "../runtime-W1oiBA4P.mjs";
3
+ import { n as setActionRouter, t as action } from "../action-Bq1iSG6m.mjs";
4
4
  export { ErrorsContext, Link, NavigationContext, ParamsContext, RouterContext, SharedContext, action, setActionRouter, useForm, useIslandForm, useNavigation, useParams, useRouter, useShared };
@@ -1,5 +1,6 @@
1
- import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "../context-CBGCQE3p.mjs";
2
- import { n as setActionRouter } from "../action-BFWtavbf.mjs";
1
+ import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "../context-B0GL7p5m.mjs";
2
+ import { n as setActionRouter } from "../action-Bq1iSG6m.mjs";
3
+ import { t as DEFERRED_SHELL_END_ID } from "../deferred-shell-CBIT2Zwq.mjs";
3
4
  import React, { Suspense, startTransition, use, useCallback, useEffect, useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useTransition } from "react";
4
5
  import { createPageNavigationEngine, createRouterFacade, idleNavigationState, isAbortError, isCallSiteActionError } from "void/pages-client";
5
6
  import { createRoot, hydrateRoot } from "react-dom/client";
@@ -423,13 +424,16 @@ async function startReactPages(config) {
423
424
  setActionRouter(router);
424
425
  const appEl = document.getElementById("app");
425
426
  if (!appEl) throw new Error("pages: Missing #app element for Void React pages hydration.");
426
- const app = React.createElement(App, {
427
+ const appRoot = React.createElement(App, {
427
428
  engine,
428
429
  router,
429
430
  viewTransitions: config.viewTransitions
430
431
  });
432
+ const isSsr = appEl.getAttribute("data-void-ssr") !== "false";
433
+ const hasDeferred = Boolean(engine.initialPageData.deferredKeys);
434
+ const app = isSsr && hasDeferred ? React.createElement(React.Fragment, null, appRoot, React.createElement("template", { id: DEFERRED_SHELL_END_ID })) : appRoot;
431
435
  startTransition(() => {
432
- if (appEl.getAttribute("data-void-ssr") === "false") createRoot(appEl).render(app);
436
+ if (!isSsr) createRoot(appEl).render(app);
433
437
  else hydrateRoot(appEl, app);
434
438
  });
435
439
  appEl.setAttribute("data-hydrated", "true");
@@ -1,4 +1,5 @@
1
- import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "../context-CBGCQE3p.mjs";
1
+ import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext, t as ErrorsContext } from "../context-B0GL7p5m.mjs";
2
+ import { n as DEFERRED_SHELL_END_MARKER, t as DEFERRED_SHELL_END_ID } from "../deferred-shell-CBIT2Zwq.mjs";
2
3
  import React from "react";
3
4
  import { createSsrRouter, idleNavigationState } from "void/pages-client";
4
5
  import { renderToReadableStream } from "react-dom/server";
@@ -6,8 +7,6 @@ import { renderBodyAttrs, renderHeadToString, renderHtmlAttrs } from "void/pages
6
7
  import { serializePageData } from "void/pages-server";
7
8
  //#region src/runtime/pages-server.ts
8
9
  const DEFERRED_SHELL_CANCEL_REASON = "Void deferred shell complete";
9
- const DEFERRED_SHELL_END_ID = "__VOID_DEFERRED_SHELL_END__";
10
- const DEFERRED_SHELL_END_MARKER = `<template id="${DEFERRED_SHELL_END_ID}"></template>`;
11
10
  function createPendingDeferred() {
12
11
  return new Promise(() => {});
13
12
  }
@@ -62,7 +61,7 @@ function readDeferredShell(stream) {
62
61
  buffer += decoder.decode(value, { stream: true });
63
62
  const markerIndex = buffer.indexOf(DEFERRED_SHELL_END_MARKER);
64
63
  if (markerIndex !== -1) {
65
- flush(buffer.slice(0, markerIndex));
64
+ flush(buffer.slice(0, markerIndex + DEFERRED_SHELL_END_MARKER.length));
66
65
  await reader.cancel(DEFERRED_SHELL_CANCEL_REASON);
67
66
  break;
68
67
  }
@@ -1,5 +1,5 @@
1
- import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext } from "./context-CBGCQE3p.mjs";
2
- import "./action-BFWtavbf.mjs";
1
+ import { a as SharedContext, i as RouterContext, n as NavigationContext, r as ParamsContext } from "./context-B0GL7p5m.mjs";
2
+ import "./action-Bq1iSG6m.mjs";
3
3
  import { useActionState, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { VoidActionError, categorizeActionError, isAbortError, isEqualFormValue, ssrProxy, submitAction } from "void/pages-client";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -65,7 +65,8 @@ function Link({ href, method = "GET", data, preserveScroll = false, preserveStat
65
65
  if (reloadDocument && !isGet) throw new Error("Link: reloadDocument only supports GET links.");
66
66
  const doPrefetch = useCallback(() => {
67
67
  if (!router?.prefetch) return;
68
- if (hrefWithData === window.location.pathname + window.location.search) return;
68
+ const current = window.location.pathname + window.location.search;
69
+ if (hrefWithData === current) return;
69
70
  const options = {};
70
71
  if (cacheFor !== void 0) options.cacheFor = cacheFor;
71
72
  if (normalizedMethod) options.method = normalizedMethod;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@void/react",
3
- "version": "0.10.5",
3
+ "version": "0.10.6",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/voidzero-dev/void.git",
@@ -40,24 +40,24 @@
40
40
  "access": "public"
41
41
  },
42
42
  "dependencies": {
43
- "@vitejs/plugin-react": "^6.0.1"
43
+ "@vitejs/plugin-react": "^6.0.3"
44
44
  },
45
45
  "devDependencies": {
46
- "@types/node": "^25.6.2",
47
- "@types/react": "^19.2.14",
46
+ "@types/node": "^26.1.0",
47
+ "@types/react": "^19.2.17",
48
48
  "@types/react-dom": "^19.2.3",
49
49
  "pathe": "^2.0.3",
50
- "react": "^19.2.6",
51
- "react-dom": "^19.2.6",
52
- "vite": "npm:@voidzero-dev/vite-plus-core@0.1.20",
53
- "vite-plus": "^0.1.20",
54
- "void": "0.10.5"
50
+ "react": "^19.2.7",
51
+ "react-dom": "^19.2.7",
52
+ "vite": "npm:@voidzero-dev/vite-plus-core@0.2.2",
53
+ "vite-plus": "^0.2.2",
54
+ "void": "0.10.6"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "react": "^19.0.0",
58
58
  "react-dom": "^19.0.0",
59
59
  "vite": "^8.0.0",
60
- "void": "0.10.5"
60
+ "void": "0.10.6"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "vp pack",