@void/solid 0.7.4 → 0.7.5
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/README.md +1 -0
- package/dist/plugin.mjs +52 -34
- package/package.json +3 -3
- package/src/runtime/context.ts +4 -0
- package/src/runtime/index.ts +8 -1
- package/src/runtime/use-params.ts +10 -0
package/README.md
CHANGED
package/dist/plugin.mjs
CHANGED
|
@@ -341,7 +341,7 @@ function generateIslandRenderer(scan, pagesDir, isDev, islandCssMap, viteRoot, m
|
|
|
341
341
|
return `
|
|
342
342
|
import { renderToStringAsync, generateHydrationScript } from "solid-js/web";
|
|
343
343
|
import { createComponent } from "solid-js";
|
|
344
|
-
import { SharedContext, ErrorsContext } from "@void/solid";
|
|
344
|
+
import { SharedContext, ErrorsContext, ParamsContext } from "@void/solid";
|
|
345
345
|
import { renderHeadToString, renderHtmlAttrs, renderBodyAttrs } from "void/pages-head";
|
|
346
346
|
|
|
347
347
|
${generateComponentManifest(scan, pagesDir)}
|
|
@@ -367,15 +367,20 @@ export async function renderIslandPage(pageObj, assetTags) {
|
|
|
367
367
|
return createComponent(ErrorsContext.Provider, {
|
|
368
368
|
value: pageObj.errors || {},
|
|
369
369
|
get children() {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
370
|
+
return createComponent(ParamsContext.Provider, {
|
|
371
|
+
value: pageObj.params || {},
|
|
372
|
+
get children() {
|
|
373
|
+
// Build layout chain inside providers so contexts are available.
|
|
374
|
+
// No RouterContext — islands have no Void Router.
|
|
375
|
+
let element = createComponent(PageComponent, pageObj.props);
|
|
376
|
+
for (let i = layoutComponents.length - 1; i >= 0; i--) {
|
|
377
|
+
const Layout = layoutComponents[i];
|
|
378
|
+
const child = element;
|
|
379
|
+
element = createComponent(Layout, { get children() { return child; } });
|
|
380
|
+
}
|
|
381
|
+
return element;
|
|
382
|
+
}
|
|
383
|
+
});
|
|
379
384
|
}
|
|
380
385
|
});
|
|
381
386
|
}
|
|
@@ -504,7 +509,7 @@ function generateRendererModule(scan, pagesDir) {
|
|
|
504
509
|
return `
|
|
505
510
|
import { renderToStringAsync, generateHydrationScript } from "solid-js/web";
|
|
506
511
|
import { createComponent } from "solid-js";
|
|
507
|
-
import { SharedContext, ErrorsContext, RouterContext, NavigationContext } from "@void/solid";
|
|
512
|
+
import { SharedContext, ErrorsContext, ParamsContext, RouterContext, NavigationContext } from "@void/solid";
|
|
508
513
|
import { createSsrRouter, idleNavigationState } from "void/pages-client";
|
|
509
514
|
import { renderHeadToString, renderHtmlAttrs, renderBodyAttrs } from "void/pages-head";
|
|
510
515
|
import { serializePageData } from "void/pages-server";
|
|
@@ -526,19 +531,24 @@ export async function renderPage(pageObj, assetTags) {
|
|
|
526
531
|
value: pageObj.errors || {},
|
|
527
532
|
get children() {
|
|
528
533
|
return createComponent(RouterContext.Provider, {
|
|
529
|
-
value: createSsrRouter(pageObj.url || "/"),
|
|
534
|
+
value: createSsrRouter(pageObj.url || "/", pageObj.params || {}),
|
|
530
535
|
get children() {
|
|
531
536
|
return createComponent(NavigationContext.Provider, {
|
|
532
537
|
value: () => idleNavigationState(),
|
|
533
538
|
get children() {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
539
|
+
return createComponent(ParamsContext.Provider, {
|
|
540
|
+
value: pageObj.params || {},
|
|
541
|
+
get children() {
|
|
542
|
+
// Build layout chain inside providers so contexts are available
|
|
543
|
+
let element = createComponent(PageComponent, pageObj.props);
|
|
544
|
+
for (let i = layoutComponents.length - 1; i >= 0; i--) {
|
|
545
|
+
const Layout = layoutComponents[i];
|
|
546
|
+
const child = element;
|
|
547
|
+
element = createComponent(Layout, { get children() { return child; } });
|
|
548
|
+
}
|
|
549
|
+
return element;
|
|
550
|
+
}
|
|
551
|
+
});
|
|
542
552
|
}
|
|
543
553
|
});
|
|
544
554
|
}
|
|
@@ -573,7 +583,7 @@ function generateClientEntry(scan, pagesDir, viewTransitions, prefetch, staticPa
|
|
|
573
583
|
return `
|
|
574
584
|
import { createSignal, createComponent, batch } from "solid-js";
|
|
575
585
|
import { hydrate } from "solid-js/web";
|
|
576
|
-
import { SharedContext, ErrorsContext, RouterContext, NavigationContext, setActionRouter } from "@void/solid";
|
|
586
|
+
import { SharedContext, ErrorsContext, ParamsContext, RouterContext, NavigationContext, setActionRouter } from "@void/solid";
|
|
577
587
|
import { createRouterFacade, createVoidRouter, idleNavigationState } from "void/pages-client";
|
|
578
588
|
import { parseCacheFor } from "void/pages-prefetch";
|
|
579
589
|
|
|
@@ -585,6 +595,7 @@ const [layouts, setLayouts] = createSignal([]);
|
|
|
585
595
|
const [shared, setShared] = createSignal({});
|
|
586
596
|
const [errors, setErrors] = createSignal({});
|
|
587
597
|
const [routeUrl, setRouteUrl] = createSignal(window.location.pathname + window.location.search + window.location.hash);
|
|
598
|
+
const [routeParams, setRouteParams] = createSignal({});
|
|
588
599
|
const [navigation, setNavigation] = createSignal(idleNavigationState());
|
|
589
600
|
|
|
590
601
|
const { router, initialPageData, initialComponent, initialLayouts, start } =
|
|
@@ -601,6 +612,7 @@ const { router, initialPageData, initialComponent, initialLayouts, start } =
|
|
|
601
612
|
setLayouts(layoutComps);
|
|
602
613
|
setShared((prev) => ({ ...prev, ...(pageData.shared || {}) }));
|
|
603
614
|
setErrors(pageData.errors || {});
|
|
615
|
+
setRouteParams(pageData.params || {});
|
|
604
616
|
});
|
|
605
617
|
},
|
|
606
618
|
onDeferredUpdate(props) {
|
|
@@ -621,7 +633,7 @@ const { router, initialPageData, initialComponent, initialLayouts, start } =
|
|
|
621
633
|
},
|
|
622
634
|
});
|
|
623
635
|
|
|
624
|
-
const reactiveRouter = createRouterFacade(router, () => routeUrl());
|
|
636
|
+
const reactiveRouter = createRouterFacade(router, () => routeUrl(), () => routeParams());
|
|
625
637
|
|
|
626
638
|
setActionRouter(reactiveRouter);
|
|
627
639
|
|
|
@@ -631,6 +643,7 @@ batch(() => {
|
|
|
631
643
|
setLayouts(initialLayouts);
|
|
632
644
|
setShared(initialPageData.shared || {});
|
|
633
645
|
setErrors(initialPageData.errors || {});
|
|
646
|
+
setRouteParams(initialPageData.params || {});
|
|
634
647
|
});
|
|
635
648
|
|
|
636
649
|
function App() {
|
|
@@ -643,19 +656,24 @@ function App() {
|
|
|
643
656
|
return createComponent(RouterContext.Provider, {
|
|
644
657
|
value: reactiveRouter,
|
|
645
658
|
get children() {
|
|
646
|
-
return createComponent(
|
|
647
|
-
value
|
|
659
|
+
return createComponent(ParamsContext.Provider, {
|
|
660
|
+
get value() { return routeParams(); },
|
|
648
661
|
get children() {
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
662
|
+
return createComponent(NavigationContext.Provider, {
|
|
663
|
+
value: navigation,
|
|
664
|
+
get children() {
|
|
665
|
+
const Comp = component();
|
|
666
|
+
if (!Comp) return null;
|
|
667
|
+
let element = createComponent(Comp, pageProps());
|
|
668
|
+
const layoutList = layouts();
|
|
669
|
+
for (let i = layoutList.length - 1; i >= 0; i--) {
|
|
670
|
+
const Layout = layoutList[i];
|
|
671
|
+
const child = element;
|
|
672
|
+
element = createComponent(Layout, { get children() { return child; } });
|
|
673
|
+
}
|
|
674
|
+
return element;
|
|
675
|
+
}
|
|
676
|
+
});
|
|
659
677
|
}
|
|
660
678
|
});
|
|
661
679
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@void/solid",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/voidzero-dev/void.git",
|
|
@@ -43,12 +43,12 @@
|
|
|
43
43
|
"solid-js": "^1.9.12",
|
|
44
44
|
"vite": "npm:@voidzero-dev/vite-plus-core@0.1.20",
|
|
45
45
|
"vite-plus": "^0.1.20",
|
|
46
|
-
"void": "0.7.
|
|
46
|
+
"void": "0.7.5"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"solid-js": "^1.9.0",
|
|
50
50
|
"vite": "npm:@voidzero-dev/vite-plus-core@0.1.20",
|
|
51
|
-
"void": "0.7.
|
|
51
|
+
"void": "0.7.5"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"build": "vp pack",
|
package/src/runtime/context.ts
CHANGED
|
@@ -8,6 +8,10 @@ export const SharedContext: Context<Record<string, unknown> | null> = createCont
|
|
|
8
8
|
export const ErrorsContext: Context<
|
|
9
9
|
Record<string, string> | (() => Record<string, string>) | null
|
|
10
10
|
> = createContext<Record<string, string> | (() => Record<string, string>) | null>(null);
|
|
11
|
+
export const ParamsContext: Context<Record<string, string> | null> = createContext<Record<
|
|
12
|
+
string,
|
|
13
|
+
string
|
|
14
|
+
> | null>(null);
|
|
11
15
|
export const RouterContext: Context<VoidRouter | null> = createContext<VoidRouter | null>(null);
|
|
12
16
|
export const NavigationContext: Context<(() => NavigationState) | null> = createContext<
|
|
13
17
|
(() => NavigationState) | null
|
package/src/runtime/index.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
export { Link, type LinkProps } from './link.tsx';
|
|
2
2
|
export { useRouter } from './use-router.ts';
|
|
3
|
+
export { useParams } from './use-params.ts';
|
|
3
4
|
export { useShared } from './use-shared.ts';
|
|
4
5
|
export { useForm } from './use-form.ts';
|
|
5
6
|
export { useNavigation } from './use-navigation.ts';
|
|
6
7
|
export { useIslandForm } from './use-island-form.ts';
|
|
7
8
|
export { action, setActionRouter } from './action.ts';
|
|
8
|
-
export {
|
|
9
|
+
export {
|
|
10
|
+
SharedContext,
|
|
11
|
+
ErrorsContext,
|
|
12
|
+
ParamsContext,
|
|
13
|
+
RouterContext,
|
|
14
|
+
NavigationContext,
|
|
15
|
+
} from './context.ts';
|
|
9
16
|
export type { DeferredState as Deferred, InferProps } from 'void';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useContext } from 'solid-js';
|
|
2
|
+
import { ParamsContext } from './context.ts';
|
|
3
|
+
|
|
4
|
+
export function useParams<T extends Record<string, string> = Record<string, string>>(): T {
|
|
5
|
+
const params = useContext(ParamsContext);
|
|
6
|
+
if (params === null) {
|
|
7
|
+
throw new Error('useParams(): must be used inside a Void page.');
|
|
8
|
+
}
|
|
9
|
+
return params as T;
|
|
10
|
+
}
|