@nifrajs/web-svelte 2.11.0 → 2.12.1

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/client.d.ts CHANGED
@@ -1,7 +1,15 @@
1
1
  import type { MountRouterOptions, RenderProps } from "@nifrajs/web";
2
2
  export { errorBoundary } from "./error.js";
3
3
  /** Hydrate a server-rendered Svelte layout `chain` (with the loader `props`) inside `container`. */
4
- export declare function hydrate(chain: readonly unknown[], props: RenderProps, container: unknown): void;
4
+ export interface HydrationAssuranceOptions {
5
+ readonly onWarning?: (message: string) => void;
6
+ }
7
+ export declare function hydrate(chain: readonly unknown[], props: RenderProps, container: unknown, options?: HydrationAssuranceOptions): void;
8
+ /** Testing hook used by verification runners to observe Svelte warnings and identity. */
9
+ export declare const hydrationAssuranceHook: Readonly<{
10
+ framework: "svelte";
11
+ runtimeIdentity: () => object;
12
+ }>;
5
13
  /**
6
14
  * Hydrate a stateful Svelte Router. The `Router` component holds the store snapshot in `$state` and
7
15
  * re-renders the matched layout chain on each store change - so client navigations swap routes without
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAenE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,oGAAoG;AACpG,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAK/F;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAI7D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAenE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,oGAAoG;AACpG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/C;AAWD,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAYN;AAED,yFAAyF;AACzF,eAAO,MAAM,sBAAsB;;2BAEZ,MAAM;EAC3B,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAc7D"}
package/dist/client.js CHANGED
@@ -12,13 +12,34 @@ import Router from "./Router.svelte";
12
12
  // The `_error` boundary marker - Chain.svelte renders it as a <svelte:boundary>. Re-exported here so
13
13
  // nifra's client codegen resolves it from `@nifrajs/web-svelte/client` alongside `mountRouter`.
14
14
  export { errorBoundary } from "./error.js";
15
- /** Hydrate a server-rendered Svelte layout `chain` (with the loader `props`) inside `container`. */
16
- export function hydrate(chain, props, container) {
17
- svelteHydrate(Chain, {
18
- target: container,
19
- props: { chain, props, layoutData: props.layoutData },
20
- });
15
+ function assuranceWarning() {
16
+ const value = globalThis[Symbol.for("nifra.hydration.assurance")];
17
+ if (typeof value !== "object" || value === null)
18
+ return undefined;
19
+ const callback = value.onWarning;
20
+ return typeof callback === "function" ? callback : undefined;
21
21
  }
22
+ export function hydrate(chain, props, container, options) {
23
+ const warning = options?.onWarning ?? assuranceWarning();
24
+ const originalWarn = console.warn;
25
+ if (warning !== undefined)
26
+ console.warn = (...args) => warning(args.map(String).join(" "));
27
+ try {
28
+ svelteHydrate(Chain, {
29
+ target: container,
30
+ props: { chain, props, layoutData: props.layoutData },
31
+ });
32
+ }
33
+ finally {
34
+ if (warning !== undefined)
35
+ console.warn = originalWarn;
36
+ }
37
+ }
38
+ /** Testing hook used by verification runners to observe Svelte warnings and identity. */
39
+ export const hydrationAssuranceHook = Object.freeze({
40
+ framework: "svelte",
41
+ runtimeIdentity: () => svelteHydrate,
42
+ });
22
43
  /**
23
44
  * Hydrate a stateful Svelte Router. The `Router` component holds the store snapshot in `$state` and
24
45
  * re-renders the matched layout chain on each store change - so client navigations swap routes without
@@ -28,6 +49,19 @@ export function hydrate(chain, props, container) {
28
49
  export function mountRouter(options) {
29
50
  const { router, routes, searchSchemas, container } = options;
30
51
  setMountedRouter(router); // expose it to useFetcher/useFetchers (same page, client-only)
31
- svelteHydrate(Router, { target: container, props: { router, routes, searchSchemas } });
52
+ const warning = assuranceWarning();
53
+ const originalWarn = console.warn;
54
+ if (warning !== undefined)
55
+ console.warn = (...args) => warning(args.map(String).join(" "));
56
+ try {
57
+ svelteHydrate(Router, {
58
+ target: container,
59
+ props: { router, routes, searchSchemas },
60
+ });
61
+ }
62
+ finally {
63
+ if (warning !== undefined)
64
+ console.warn = originalWarn;
65
+ }
32
66
  }
33
67
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,KAAK,MAAM,gBAAgB,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAEpC,qGAAqG;AACrG,gGAAgG;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,oGAAoG;AACpG,MAAM,UAAU,OAAO,CAAC,KAAyB,EAAE,KAAkB,EAAE,SAAkB;IACvF,aAAa,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,SAAoB;QAC5B,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;KACtD,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAC5D,gBAAgB,CAAC,MAAM,CAAC,CAAA,CAAC,+DAA+D;IACxF,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAoB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AACnG,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,KAAK,MAAM,gBAAgB,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAEpC,qGAAqG;AACrG,gGAAgG;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAO1C,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAI,UAAsD,CACnE,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CACxC,CAAA;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IACjE,MAAM,QAAQ,GAAI,KAAiC,CAAC,SAAS,CAAA;IAC7D,OAAO,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAE,QAAsC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,KAAyB,EACzB,KAAkB,EAClB,SAAkB,EAClB,OAAmC;IAEnC,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,CAAA;IACxD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAA;IACjC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1F,IAAI,CAAC;QACH,aAAa,CAAC,KAAK,EAAE;YACnB,MAAM,EAAE,SAAoB;YAC5B,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACtD,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,YAAY,CAAA;IACxD,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,SAAS,EAAE,QAAiB;IAC5B,eAAe,EAAE,GAAW,EAAE,CAAC,aAAa;CAC7C,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAC5D,gBAAgB,CAAC,MAAM,CAAC,CAAA,CAAC,+DAA+D;IACxF,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAA;IACjC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1F,IAAI,CAAC;QACH,aAAa,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,SAAoB;YAC5B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE;SACzC,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,YAAY,CAAA;IACxD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "@nifrajs/web-svelte",
3
- "version": "2.11.0",
3
+ "version": "2.12.1",
4
4
  "description": "Svelte 5 render adapter for @nifrajs/web - SSR + hydration + the .svelte compiler Bun-plugin.",
5
5
  "keywords": [
6
6
  "bun",
7
7
  "typescript",
8
8
  "nifra",
9
- "web-framework",
10
- "full-stack",
11
- "edge",
12
- "ssr"
9
+ "svelte",
10
+ "svelte5",
11
+ "ssr",
12
+ "hydration",
13
+ "render-adapter",
14
+ "full-stack"
13
15
  ],
14
16
  "type": "module",
15
17
  "main": "./dist/index.js",
@@ -98,10 +100,10 @@
98
100
  "access": "public"
99
101
  },
100
102
  "dependencies": {
101
- "@nifrajs/core": "2.11.0",
102
- "@nifrajs/i18n": "2.11.0",
103
- "@nifrajs/image": "2.11.0",
104
- "@nifrajs/web": "2.11.0"
103
+ "@nifrajs/core": "2.12.1",
104
+ "@nifrajs/i18n": "2.12.1",
105
+ "@nifrajs/image": "2.12.1",
106
+ "@nifrajs/web": "2.12.1"
105
107
  },
106
108
  "peerDependencies": {
107
109
  "mdsvex": "^0.12",
package/src/client.ts CHANGED
@@ -16,13 +16,44 @@ import Router from "./Router.svelte"
16
16
  export { errorBoundary } from "./error.ts"
17
17
 
18
18
  /** Hydrate a server-rendered Svelte layout `chain` (with the loader `props`) inside `container`. */
19
- export function hydrate(chain: readonly unknown[], props: RenderProps, container: unknown): void {
20
- svelteHydrate(Chain, {
21
- target: container as Element,
22
- props: { chain, props, layoutData: props.layoutData },
23
- })
19
+ export interface HydrationAssuranceOptions {
20
+ readonly onWarning?: (message: string) => void
24
21
  }
25
22
 
23
+ function assuranceWarning(): ((message: string) => void) | undefined {
24
+ const value = (globalThis as unknown as Record<PropertyKey, unknown>)[
25
+ Symbol.for("nifra.hydration.assurance")
26
+ ]
27
+ if (typeof value !== "object" || value === null) return undefined
28
+ const callback = (value as { onWarning?: unknown }).onWarning
29
+ return typeof callback === "function" ? (callback as (message: string) => void) : undefined
30
+ }
31
+
32
+ export function hydrate(
33
+ chain: readonly unknown[],
34
+ props: RenderProps,
35
+ container: unknown,
36
+ options?: HydrationAssuranceOptions,
37
+ ): void {
38
+ const warning = options?.onWarning ?? assuranceWarning()
39
+ const originalWarn = console.warn
40
+ if (warning !== undefined) console.warn = (...args) => warning(args.map(String).join(" "))
41
+ try {
42
+ svelteHydrate(Chain, {
43
+ target: container as Element,
44
+ props: { chain, props, layoutData: props.layoutData },
45
+ })
46
+ } finally {
47
+ if (warning !== undefined) console.warn = originalWarn
48
+ }
49
+ }
50
+
51
+ /** Testing hook used by verification runners to observe Svelte warnings and identity. */
52
+ export const hydrationAssuranceHook = Object.freeze({
53
+ framework: "svelte" as const,
54
+ runtimeIdentity: (): object => svelteHydrate,
55
+ })
56
+
26
57
  /**
27
58
  * Hydrate a stateful Svelte Router. The `Router` component holds the store snapshot in `$state` and
28
59
  * re-renders the matched layout chain on each store change - so client navigations swap routes without
@@ -32,5 +63,15 @@ export function hydrate(chain: readonly unknown[], props: RenderProps, container
32
63
  export function mountRouter(options: MountRouterOptions): void {
33
64
  const { router, routes, searchSchemas, container } = options
34
65
  setMountedRouter(router) // expose it to useFetcher/useFetchers (same page, client-only)
35
- svelteHydrate(Router, { target: container as Element, props: { router, routes, searchSchemas } })
66
+ const warning = assuranceWarning()
67
+ const originalWarn = console.warn
68
+ if (warning !== undefined) console.warn = (...args) => warning(args.map(String).join(" "))
69
+ try {
70
+ svelteHydrate(Router, {
71
+ target: container as Element,
72
+ props: { router, routes, searchSchemas },
73
+ })
74
+ } finally {
75
+ if (warning !== undefined) console.warn = originalWarn
76
+ }
36
77
  }