@void/svelte 0.7.4 → 0.7.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.
- package/README.md +1 -0
- package/dist/plugin.mjs +16 -22
- package/package.json +3 -3
- package/src/runtime/App.svelte +7 -1
- package/src/runtime/index.ts +1 -0
- package/src/runtime/use-params.ts +9 -0
package/README.md
CHANGED
package/dist/plugin.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
|
2
2
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
3
3
|
import { normalizePath } from "vite";
|
|
4
4
|
import { generateComponentManifest, resolveEffectiveLayoutChain, resolveStaticPageDataBuildOptions, scanPages } from "void/pages";
|
|
5
|
-
import { ISLANDS_CLIENT_ENTRY_ID, ISLANDS_RENDERER_ID, computePagesNeedingClientJS,
|
|
5
|
+
import { ISLANDS_CLIENT_ENTRY_ID, ISLANDS_RENDERER_ID, computePagesNeedingClientJS, extractCssImports, needsIslandClientBundle, resolveSpecifier, rewriteCssImportForVirtualModule, watchPagesForRescan } from "void/pages-islands-plugin";
|
|
6
6
|
//#region ../../node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs
|
|
7
7
|
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
8
8
|
function normalizeWindowsPath(input = "") {
|
|
@@ -153,13 +153,7 @@ function islandsPlugin(pagesDir) {
|
|
|
153
153
|
const islandCssFiles = /* @__PURE__ */ new Set();
|
|
154
154
|
let isDev = false;
|
|
155
155
|
let viteRoot = "";
|
|
156
|
-
const islandCssMap = /* @__PURE__ */ new Map();
|
|
157
156
|
let resolvedConfig = null;
|
|
158
|
-
/** Rebuild islandCssMap from current file contents (re-runs fileHasCssImports). */
|
|
159
|
-
function rebuildIslandCssMap$1() {
|
|
160
|
-
if (!pageScan) return;
|
|
161
|
-
rebuildIslandCssMap(pageScan, pagesDir, islandCssMap, fileHasCssImports);
|
|
162
|
-
}
|
|
163
157
|
function computePagesNeedingClientJS$1() {
|
|
164
158
|
if (!pageScan) return /* @__PURE__ */ new Set();
|
|
165
159
|
return computePagesNeedingClientJS(pageScan, pagesDir, resolvedConfig);
|
|
@@ -173,10 +167,8 @@ function islandsPlugin(pagesDir) {
|
|
|
173
167
|
isDev = config.command === "serve";
|
|
174
168
|
},
|
|
175
169
|
configureServer(server) {
|
|
176
|
-
configureIslandCssServer(server, islandCssFiles, viteRoot, rebuildIslandCssMap$1);
|
|
177
170
|
watchPagesForRescan(server, pagesDir, root, (scan) => {
|
|
178
171
|
pageScan = scan;
|
|
179
|
-
rebuildIslandCssMap$1();
|
|
180
172
|
});
|
|
181
173
|
},
|
|
182
174
|
async buildStart() {
|
|
@@ -224,7 +216,6 @@ function islandsPlugin(pagesDir) {
|
|
|
224
216
|
const layoutChain = resolveEffectiveLayoutChain(page, pageScan.layouts, pageScan.namedLayouts);
|
|
225
217
|
for (const layout of layoutChain) islandCssFiles.add(normalizePath(resolve(pagesDir, layout.filePath)));
|
|
226
218
|
}
|
|
227
|
-
rebuildIslandCssMap$1();
|
|
228
219
|
}
|
|
229
220
|
},
|
|
230
221
|
resolveId: {
|
|
@@ -250,7 +241,7 @@ function islandsPlugin(pagesDir) {
|
|
|
250
241
|
const mdPlugin = resolvedConfig?.plugins?.find((p) => p.name === "void-md");
|
|
251
242
|
const mdScriptIds = new Set(mdPlugin?.api?.getClientScripts?.()?.keys() ?? []);
|
|
252
243
|
const needsJS = computePagesNeedingClientJS$1();
|
|
253
|
-
return generateIslandRenderer(pageScan, pagesDir,
|
|
244
|
+
return generateIslandRenderer(pageScan, pagesDir, mdScriptIds, needsJS);
|
|
254
245
|
}
|
|
255
246
|
if (id === "\0" + ISLANDS_CLIENT_ENTRY_ID) {
|
|
256
247
|
if (!pageScan) return "";
|
|
@@ -350,13 +341,7 @@ function generateWrapperComponent(id) {
|
|
|
350
341
|
</div>
|
|
351
342
|
`;
|
|
352
343
|
}
|
|
353
|
-
function generateIslandRenderer(scan, pagesDir,
|
|
354
|
-
let cssMapCode = "";
|
|
355
|
-
if (isDev && islandCssMap.size > 0) {
|
|
356
|
-
const cssMapObj = {};
|
|
357
|
-
for (const [compId, paths] of islandCssMap) cssMapObj[compId] = paths.map((p) => "/" + normalizePath(relative(viteRoot, p)) + ".css");
|
|
358
|
-
cssMapCode = `const __cssPaths = ${JSON.stringify(cssMapObj)};`;
|
|
359
|
-
}
|
|
344
|
+
function generateIslandRenderer(scan, pagesDir, mdScriptIds, pagesNeedingClientJS) {
|
|
360
345
|
const mdScriptIdsCode = `const __mdClientScriptIds = new Set(${JSON.stringify([...mdScriptIds])});`;
|
|
361
346
|
const needsJSCode = `const __pagesNeedingClientJS = new Set(${JSON.stringify([...pagesNeedingClientJS])});`;
|
|
362
347
|
return `
|
|
@@ -365,7 +350,6 @@ import App from "@void/svelte/App.svelte";
|
|
|
365
350
|
import { renderHeadToString, renderHtmlAttrs, renderBodyAttrs } from "void/pages-head";
|
|
366
351
|
|
|
367
352
|
${generateComponentManifest(scan, pagesDir)}
|
|
368
|
-
${cssMapCode}
|
|
369
353
|
${mdScriptIdsCode}
|
|
370
354
|
${needsJSCode}
|
|
371
355
|
|
|
@@ -387,6 +371,7 @@ export async function renderIslandPage(pageObj, assetTags) {
|
|
|
387
371
|
pageProps: pageObj.props,
|
|
388
372
|
shared: pageObj.shared || {},
|
|
389
373
|
errors: pageObj.errors || {},
|
|
374
|
+
params: pageObj.params || {},
|
|
390
375
|
router: null,
|
|
391
376
|
stores: null,
|
|
392
377
|
},
|
|
@@ -399,7 +384,7 @@ export async function renderIslandPage(pageObj, assetTags) {
|
|
|
399
384
|
|
|
400
385
|
return \`<!doctype html>
|
|
401
386
|
<html\${htmlAttrs}>
|
|
402
|
-
<head>\${headHtml}\${
|
|
387
|
+
<head>\${headHtml}\${head}\${assetTags.css}\${__pagesNeedingClientJS.has(pageObj.component) ? assetTags.preloads : ""}</head>
|
|
403
388
|
<body\${bodyAttrs}>
|
|
404
389
|
<div id="app"\${__mdScriptAttr}>\${html}</div>
|
|
405
390
|
\${__pagesNeedingClientJS.has(pageObj.component) ? assetTags.body : ""}
|
|
@@ -548,7 +533,8 @@ export async function renderPage(pageObj, assetTags) {
|
|
|
548
533
|
pageProps: pageObj.props,
|
|
549
534
|
shared: pageObj.shared || {},
|
|
550
535
|
errors: pageObj.errors || {},
|
|
551
|
-
|
|
536
|
+
params: pageObj.params || {},
|
|
537
|
+
router: createSsrRouter(pageObj.url || "/", pageObj.params || {}),
|
|
552
538
|
routeUrl: pageObj.url || "/",
|
|
553
539
|
navigation: idleNavigationState(),
|
|
554
540
|
stores: null,
|
|
@@ -588,7 +574,9 @@ const propsStore = writable({});
|
|
|
588
574
|
const layoutsStore = writable([]);
|
|
589
575
|
const sharedStore = writable({});
|
|
590
576
|
const errorsStore = writable({});
|
|
577
|
+
const paramsStore = writable({});
|
|
591
578
|
let routeUrl = window.location.pathname + window.location.search + window.location.hash;
|
|
579
|
+
let routeParams = {};
|
|
592
580
|
const routeStore = writable(routeUrl);
|
|
593
581
|
const navigationStore = writable(idleNavigationState());
|
|
594
582
|
|
|
@@ -603,6 +591,8 @@ const { router, initialPageData, initialComponent, initialLayouts, start } =
|
|
|
603
591
|
propsStore.set(pageData.props);
|
|
604
592
|
sharedStore.update((s) => ({ ...s, ...(pageData.shared || {}) }));
|
|
605
593
|
errorsStore.set(pageData.errors || {});
|
|
594
|
+
routeParams = pageData.params || {};
|
|
595
|
+
paramsStore.set(routeParams);
|
|
606
596
|
layoutsStore.set(layouts);
|
|
607
597
|
pageStore.set(comp);
|
|
608
598
|
},
|
|
@@ -625,7 +615,7 @@ const { router, initialPageData, initialComponent, initialLayouts, start } =
|
|
|
625
615
|
},
|
|
626
616
|
});
|
|
627
617
|
|
|
628
|
-
const reactiveRouter = createRouterFacade(router, () => routeUrl);
|
|
618
|
+
const reactiveRouter = createRouterFacade(router, () => routeUrl, () => routeParams);
|
|
629
619
|
|
|
630
620
|
setActionRouter(reactiveRouter);
|
|
631
621
|
|
|
@@ -634,6 +624,8 @@ propsStore.set(initialPageData.props);
|
|
|
634
624
|
layoutsStore.set(initialLayouts);
|
|
635
625
|
sharedStore.set(initialPageData.shared || {});
|
|
636
626
|
errorsStore.set(initialPageData.errors || {});
|
|
627
|
+
routeParams = initialPageData.params || {};
|
|
628
|
+
paramsStore.set(routeParams);
|
|
637
629
|
|
|
638
630
|
const appEl = document.getElementById("app");
|
|
639
631
|
hydrate(App, {
|
|
@@ -644,6 +636,7 @@ hydrate(App, {
|
|
|
644
636
|
pageProps: initialPageData.props,
|
|
645
637
|
shared: initialPageData.shared || {},
|
|
646
638
|
errors: initialPageData.errors || {},
|
|
639
|
+
params: initialPageData.params || {},
|
|
647
640
|
router,
|
|
648
641
|
routeUrl,
|
|
649
642
|
navigation: idleNavigationState(),
|
|
@@ -653,6 +646,7 @@ hydrate(App, {
|
|
|
653
646
|
layouts: layoutsStore,
|
|
654
647
|
shared: sharedStore,
|
|
655
648
|
errors: errorsStore,
|
|
649
|
+
params: paramsStore,
|
|
656
650
|
route: routeStore,
|
|
657
651
|
navigation: navigationStore,
|
|
658
652
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@void/svelte",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.6",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/voidzero-dev/void.git",
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
"svelte": "^5.55.5",
|
|
45
45
|
"vite": "npm:@voidzero-dev/vite-plus-core@0.1.20",
|
|
46
46
|
"vite-plus": "^0.1.20",
|
|
47
|
-
"void": "0.7.
|
|
47
|
+
"void": "0.7.6"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"svelte": "^5.0.0",
|
|
51
51
|
"vite": "npm:@voidzero-dev/vite-plus-core@0.1.20",
|
|
52
|
-
"void": "0.7.
|
|
52
|
+
"void": "0.7.6"
|
|
53
53
|
},
|
|
54
54
|
"scripts": {
|
|
55
55
|
"build": "vp pack",
|
package/src/runtime/App.svelte
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
pageProps: props.pageProps,
|
|
14
14
|
shared: props.shared,
|
|
15
15
|
errors: props.errors,
|
|
16
|
+
params: props.params,
|
|
16
17
|
router: props.router,
|
|
17
18
|
routeUrl: props.routeUrl,
|
|
18
19
|
navigation: props.navigation,
|
|
@@ -25,9 +26,10 @@
|
|
|
25
26
|
let currentPageProps = $state(init.pageProps);
|
|
26
27
|
let shared = $state(init.shared);
|
|
27
28
|
let errors = $state(init.errors);
|
|
29
|
+
let params = $state(init.params || {});
|
|
28
30
|
let routeUrl = $state(init.routeUrl || "/");
|
|
29
31
|
let navigation = $state(init.navigation || idleNavigationState());
|
|
30
|
-
const router = createRouterFacade(init.router, () => routeUrl);
|
|
32
|
+
const router = createRouterFacade(init.router, () => routeUrl, () => params);
|
|
31
33
|
|
|
32
34
|
// Capitalized alias for dynamic component rendering
|
|
33
35
|
let Page = $derived(currentPage);
|
|
@@ -39,6 +41,9 @@
|
|
|
39
41
|
setContext("__void_errors", {
|
|
40
42
|
get value() { return errors; },
|
|
41
43
|
});
|
|
44
|
+
setContext("__void_params", {
|
|
45
|
+
get value() { return params; },
|
|
46
|
+
});
|
|
42
47
|
setContext("__void_router", router);
|
|
43
48
|
setContext("__void_navigation", {
|
|
44
49
|
get value() { return navigation; },
|
|
@@ -54,6 +59,7 @@
|
|
|
54
59
|
init.stores.layouts.subscribe((v) => { currentLayouts = v; }),
|
|
55
60
|
init.stores.shared.subscribe((v) => { shared = v; }),
|
|
56
61
|
init.stores.errors.subscribe((v) => { errors = v; }),
|
|
62
|
+
init.stores.params.subscribe((v) => { params = v; }),
|
|
57
63
|
init.stores.route.subscribe((v) => { routeUrl = v; }),
|
|
58
64
|
init.stores.navigation.subscribe((v) => { navigation = v; }),
|
|
59
65
|
];
|
package/src/runtime/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { default as Link } from './Link.svelte';
|
|
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.svelte.ts';
|
|
5
6
|
export { useNavigation } from './use-navigation.ts';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getContext } from 'svelte';
|
|
2
|
+
|
|
3
|
+
export function useParams<T extends Record<string, string> = Record<string, string>>(): T {
|
|
4
|
+
const ctx = getContext<{ value: T }>('__void_params');
|
|
5
|
+
if (!ctx) {
|
|
6
|
+
throw new Error('useParams(): must be used inside a Void page.');
|
|
7
|
+
}
|
|
8
|
+
return ctx.value;
|
|
9
|
+
}
|