@ilha/router 0.3.6 → 0.3.7

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/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { C as wrapError, E as setHistoryMode, S as useRoute, T as getHistoryMode, _ as routeParams, a as RouterView, b as router, c as enableLinkInterception, d as loader, f as navigate, g as routeHash, h as redirect, i as RouterLink, l as error, m as prime, n as LoaderError, o as composeLoaders, p as prefetch, r as Redirect, s as defineLayout, t as LOADER_ENDPOINT, u as isActive, v as routePath, w as wrapLayout, x as src_default, y as routeSearch } from "./src-BFZ-RQw6.js";
1
+ import { C as wrapError, E as setHistoryMode, S as useRoute, T as getHistoryMode, _ as routeParams, a as RouterView, b as router, c as enableLinkInterception, d as loader, f as navigate, g as routeHash, h as redirect, i as RouterLink, l as error, m as prime, n as LoaderError, o as composeLoaders, p as prefetch, r as Redirect, s as defineLayout, t as LOADER_ENDPOINT, u as isActive, v as routePath, w as wrapLayout, x as src_default, y as routeSearch } from "./src-DB9CdFFS.js";
2
2
  export { LOADER_ENDPOINT, LoaderError, Redirect, RouterLink, RouterView, composeLoaders, src_default as default, defineLayout, enableLinkInterception, error, getHistoryMode, isActive, loader, navigate, prefetch, prime, redirect, routeHash, routeParams, routePath, routeSearch, router, setHistoryMode, useRoute, wrapError, wrapLayout };
@@ -180,7 +180,45 @@ function composeLoaders(loaders) {
180
180
  };
181
181
  }
182
182
  function wrapLayout(layout, page) {
183
- return layout(page);
183
+ const Wrapped = layout(Object.assign(page.key("page"), { toString: page.toString.bind(page) }));
184
+ function pageMountHost(host) {
185
+ return host.querySelector("[data-ilha-slot=\"k:page\"]") ?? host;
186
+ }
187
+ function preparePageMountHost(outer, mountHost) {
188
+ if (mountHost.hasAttribute("data-ilha-state")) return;
189
+ const outerState = outer.getAttribute("data-ilha-state");
190
+ if (!outerState) return;
191
+ try {
192
+ const snapshot = JSON.parse(outerState);
193
+ delete snapshot._skipOnMount;
194
+ mountHost.setAttribute("data-ilha-state", JSON.stringify(snapshot));
195
+ } catch {}
196
+ }
197
+ Wrapped.mount = (host, props) => {
198
+ const mountHost = pageMountHost(host);
199
+ preparePageMountHost(host, mountHost);
200
+ return page.mount(mountHost, props);
201
+ };
202
+ Wrapped[ISLAND_MOUNT_INTERNAL] = (host, props) => {
203
+ const mountHost = pageMountHost(host);
204
+ preparePageMountHost(host, mountHost);
205
+ const pageInternal = page[ISLAND_MOUNT_INTERNAL];
206
+ if (typeof pageInternal === "function") return pageInternal(mountHost, props);
207
+ return {
208
+ unmount: page.mount(mountHost, props),
209
+ updateProps: () => {}
210
+ };
211
+ };
212
+ Wrapped.hydratable = async (props, opts) => {
213
+ if (!opts?.name) throw new Error("wrapLayout: hydratable requires options.name");
214
+ const resolvedProps = props ?? {};
215
+ const pageBlock = await page.hydratable(resolvedProps, opts);
216
+ const openTag = pageBlock.match(/^<([a-zA-Z][\w-]*)\s([^>]*)>/);
217
+ if (!openTag) return pageBlock;
218
+ const layoutInner = Wrapped.toString(resolvedProps);
219
+ return `<${openTag[1]} ${openTag[2]}>${layoutInner}</${openTag[1]}>`;
220
+ };
221
+ return Wrapped;
184
222
  }
185
223
  function wrapError(handler, page) {
186
224
  const Wrapper = ilha.render(() => {
@@ -246,6 +284,10 @@ function wrapError(handler, page) {
246
284
  };
247
285
  }
248
286
  };
287
+ Wrapper.hydratable = async (props, opts) => {
288
+ if (!opts?.name) throw new Error("wrapError: hydratable requires options.name");
289
+ return page.hydratable(props ?? {}, opts);
290
+ };
249
291
  return Wrapper;
250
292
  }
251
293
  function defineLayout(layout) {
package/dist/vite.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as wrapError, w as wrapLayout } from "./src-BFZ-RQw6.js";
1
+ import { C as wrapError, w as wrapLayout } from "./src-DB9CdFFS.js";
2
2
  import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
3
3
  import { basename, dirname, extname, join, relative, resolve } from "node:path";
4
4
  //#region src/vite.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ilha/router",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "A tiny SPA router for Ilha",
5
5
  "license": "MIT",
6
6
  "author": "Ryuz <ryuzer@proton.me>",
@@ -30,7 +30,7 @@
30
30
  "test": "bun test"
31
31
  },
32
32
  "dependencies": {
33
- "ilha": "0.6.0",
33
+ "ilha": "0.6.1",
34
34
  "rou3": "0.8.1"
35
35
  },
36
36
  "devDependencies": {