@timber-js/app 0.2.0-alpha.1 → 0.2.0-alpha.3
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/browser-entry.d.ts +1 -2
- package/dist/client/browser-entry.d.ts.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +133 -91
- package/dist/client/index.js.map +1 -1
- package/dist/client/link.d.ts +12 -9
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/navigation-context.d.ts +9 -3
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/chunks.d.ts +9 -1
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/shims/image.d.ts +15 -15
- package/package.json +1 -1
- package/src/client/browser-entry.ts +6 -18
- package/src/client/index.ts +1 -1
- package/src/client/link.tsx +92 -34
- package/src/client/navigation-context.ts +54 -14
- package/src/client/top-loader.tsx +18 -15
- package/src/plugins/chunks.ts +9 -1
- package/dist/client/browser-links.d.ts +0 -32
- package/dist/client/browser-links.d.ts.map +0 -1
- package/dist/client/link-navigate-interceptor.d.ts +0 -28
- package/dist/client/link-navigate-interceptor.d.ts.map +0 -1
- package/src/client/browser-links.ts +0 -90
- package/src/client/link-navigate-interceptor.tsx +0 -62
package/dist/client/link.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { AnchorHTMLAttributes, ReactNode } from 'react';
|
|
2
2
|
import type { SearchParamsDefinition } from '#/search-params/create.js';
|
|
3
|
-
|
|
3
|
+
export type OnNavigateEvent = {
|
|
4
|
+
preventDefault: () => void;
|
|
5
|
+
};
|
|
6
|
+
export type OnNavigateHandler = (e: OnNavigateEvent) => void;
|
|
4
7
|
/**
|
|
5
8
|
* Base props shared by all Link variants.
|
|
6
9
|
*/
|
|
@@ -64,6 +67,8 @@ export interface LinkPropsWithParams extends LinkBaseProps {
|
|
|
64
67
|
}
|
|
65
68
|
export type LinkProps = LinkPropsWithHref | LinkPropsWithParams;
|
|
66
69
|
export declare function validateLinkHref(href: string): void;
|
|
70
|
+
/** Returns true if the href is an internal path (not an external URL) */
|
|
71
|
+
export declare function isInternalHref(href: string): boolean;
|
|
67
72
|
/**
|
|
68
73
|
* Interpolate dynamic segments in a route pattern with actual values.
|
|
69
74
|
* e.g. interpolateParams("/products/[id]", { id: "123" }) → "/products/123"
|
|
@@ -87,16 +92,13 @@ export declare function resolveHref(href: string, params?: Record<string, string
|
|
|
87
92
|
values: Record<string, unknown>;
|
|
88
93
|
}): string;
|
|
89
94
|
interface LinkOutputProps {
|
|
90
|
-
|
|
91
|
-
'data-timber-link'?: boolean;
|
|
92
|
-
'data-timber-prefetch'?: boolean;
|
|
93
|
-
'data-timber-scroll'?: string;
|
|
95
|
+
href: string;
|
|
94
96
|
}
|
|
95
97
|
/**
|
|
96
98
|
* Build the HTML attributes for a Link. Separated from the component
|
|
97
99
|
* for testability — the component just spreads these onto an <a>.
|
|
98
100
|
*/
|
|
99
|
-
export declare function buildLinkProps(props: Pick<LinkPropsWithHref, 'href'
|
|
101
|
+
export declare function buildLinkProps(props: Pick<LinkPropsWithHref, 'href'> & {
|
|
100
102
|
params?: Record<string, string | number | string[]>;
|
|
101
103
|
searchParams?: {
|
|
102
104
|
definition: SearchParamsDefinition<Record<string, unknown>>;
|
|
@@ -107,13 +109,14 @@ export declare function buildLinkProps(props: Pick<LinkPropsWithHref, 'href' | '
|
|
|
107
109
|
* Navigation link with progressive enhancement.
|
|
108
110
|
*
|
|
109
111
|
* Renders as a plain `<a>` tag — works without JavaScript. When the client
|
|
110
|
-
* runtime is active,
|
|
111
|
-
*
|
|
112
|
+
* runtime is active, the Link's onClick handler triggers RSC-based client
|
|
113
|
+
* navigation via the router. No global event delegation — each Link owns
|
|
114
|
+
* its own click handling.
|
|
112
115
|
*
|
|
113
116
|
* Supports typed routes via codegen overloads. At runtime:
|
|
114
117
|
* - `params` prop interpolates dynamic segments in the href pattern
|
|
115
118
|
* - `searchParams` prop serializes query parameters via a SearchParamsDefinition
|
|
116
119
|
*/
|
|
117
|
-
export declare function Link({ href, prefetch, scroll, params, searchParams, onNavigate, children, ...rest }: LinkProps): import("react/jsx-runtime").JSX.Element;
|
|
120
|
+
export declare function Link({ href, prefetch, scroll, params, searchParams, onNavigate, onClick: userOnClick, onMouseEnter: userOnMouseEnter, children, ...rest }: LinkProps): import("react/jsx-runtime").JSX.Element;
|
|
118
121
|
export {};
|
|
119
122
|
//# sourceMappingURL=link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/client/link.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/client/link.tsx"],"names":[],"mappings":"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"}
|
|
@@ -23,9 +23,15 @@
|
|
|
23
23
|
* that depend on these APIs are safe to call from any environment —
|
|
24
24
|
* they return null or no-op when the APIs aren't available.
|
|
25
25
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
26
|
+
* SINGLETON GUARANTEE: All shared mutable state uses globalThis via
|
|
27
|
+
* Symbol.for keys. The RSC client bundler can duplicate this module
|
|
28
|
+
* across chunks (browser-entry graph + client-reference graph). With
|
|
29
|
+
* ESM output, each chunk gets its own module scope — module-level
|
|
30
|
+
* variables would create separate singleton instances per chunk.
|
|
31
|
+
* globalThis guarantees a single instance regardless of duplication.
|
|
32
|
+
*
|
|
33
|
+
* This workaround will be removed when Rolldown ships `format: 'app'`
|
|
34
|
+
* (module registry format that deduplicates like webpack/Turbopack).
|
|
29
35
|
* See design/27-chunking-strategy.md.
|
|
30
36
|
*
|
|
31
37
|
* See design/19-client-navigation.md §"NavigationContext"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-context.d.ts","sourceRoot":"","sources":["../../src/client/navigation-context.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"navigation-context.d.ts","sourceRoot":"","sources":["../../src/client/navigation-context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuCD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,IAAI,CAM7D;AAMD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GACT,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAO9C;AA6BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE/D;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AA6BD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAKvD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,GAAG,KAAK,CAAC,YAAY,CAMrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"top-loader.d.ts","sourceRoot":"","sources":["../../src/client/top-loader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"top-loader.d.ts","sourceRoot":"","sources":["../../src/client/top-loader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA0F7F"}
|
package/dist/index.js
CHANGED
|
@@ -14237,7 +14237,15 @@ function timberReactProd() {
|
|
|
14237
14237
|
*
|
|
14238
14238
|
* Currently a no-op — Rolldown's default splitting produces the desired
|
|
14239
14239
|
* output (one main bundle + per-route chunks). The plugin is retained as
|
|
14240
|
-
* a hook point for future chunking adjustments
|
|
14240
|
+
* a hook point for future chunking adjustments.
|
|
14241
|
+
*
|
|
14242
|
+
* NOTE: Ideally we'd use Rolldown's `format: 'app'` (module registry format)
|
|
14243
|
+
* which guarantees single-copy module semantics like webpack/Turbopack.
|
|
14244
|
+
* However, `format: 'app'` is not yet implemented in Rolldown rc.10.
|
|
14245
|
+
* Until it ships, singleton state in navigation-context.ts uses
|
|
14246
|
+
* globalThis + Symbol.for as a cross-chunk safety net.
|
|
14247
|
+
*
|
|
14248
|
+
* Design docs: 27-chunking-strategy.md
|
|
14241
14249
|
*/
|
|
14242
14250
|
function timberChunks() {
|
|
14243
14251
|
return { name: "timber-chunks" };
|