@timber-js/app 0.1.11 → 0.1.13
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/_chunks/ssr-data-BgSwMbN9.js +38 -0
- package/dist/_chunks/ssr-data-BgSwMbN9.js.map +1 -0
- package/dist/_chunks/{use-cookie-HcvNlW4L.js → use-cookie-D2cZu0jK.js} +3 -37
- package/dist/_chunks/use-cookie-D2cZu0jK.js.map +1 -0
- package/dist/client/error-boundary.d.ts +7 -0
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +5 -0
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/index.js +15 -8
- package/dist/client/index.js.map +1 -1
- package/dist/client/ssr-data.d.ts +9 -0
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/cookies/index.js +1 -1
- package/dist/index.js +5 -11
- package/dist/index.js.map +1 -1
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/server/index.js +9 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-entry.d.ts +7 -0
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +10 -0
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client/error-boundary.tsx +23 -0
- package/src/client/ssr-data.ts +7 -0
- package/src/client/use-router.ts +15 -3
- package/src/plugins/shims.ts +8 -14
- package/src/server/rsc-entry/index.ts +10 -3
- package/src/server/slot-resolver.ts +24 -1
- package/src/server/ssr-entry.ts +8 -0
- package/src/server/tree-builder.ts +35 -10
- package/dist/_chunks/use-cookie-HcvNlW4L.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shims.d.ts","sourceRoot":"","sources":["../../src/plugins/shims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA6DhD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"shims.d.ts","sourceRoot":"","sources":["../../src/plugins/shims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA6DhD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAuGvD"}
|
package/dist/server/index.js
CHANGED
|
@@ -2,7 +2,6 @@ import { a as warnDenyAfterFlush, c as warnRedirectInAccess, d as warnSlowSlotWi
|
|
|
2
2
|
import { i as getMetadataRouteServePath, n as classifyMetadataRoute, r as getMetadataRouteAutoLink, t as METADATA_ROUTE_CONVENTIONS } from "../_chunks/metadata-routes-BDnswgRO.js";
|
|
3
3
|
import { a as markResponseFlushed, c as setCookieSecrets, i as headers, l as setMutableCookieContext, n as cookies, o as runWithRequestContext, r as getSetCookieHeaders, s as searchParams, t as applyRequestHeaderOverlay, u as setParsedSearchParams } from "../_chunks/request-context-BzES06i1.js";
|
|
4
4
|
import { a as replaceTraceId, c as spanId, i as getTraceStore, l as traceId, n as generateTraceId, o as runWithTraceId, r as getOtelTraceId, s as setSpanAttribute, t as addSpanEvent, u as withSpan } from "../_chunks/tracing-BtOwb8O6.js";
|
|
5
|
-
import { TimberErrorBoundary } from "../client/error-boundary.js";
|
|
6
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
6
|
//#region src/server/primitives.ts
|
|
8
7
|
/**
|
|
@@ -1038,7 +1037,7 @@ function sendEarlyHints103(links) {
|
|
|
1038
1037
|
* Parallel slots are resolved at each layout level and composed as named props.
|
|
1039
1038
|
*/
|
|
1040
1039
|
async function buildElementTree(config) {
|
|
1041
|
-
const { segments, params, searchParams, loadModule, createElement } = config;
|
|
1040
|
+
const { segments, params, searchParams, loadModule, createElement, errorBoundaryComponent } = config;
|
|
1042
1041
|
if (segments.length === 0) throw new Error("[timber] buildElementTree: empty segment chain");
|
|
1043
1042
|
const leaf = segments[segments.length - 1];
|
|
1044
1043
|
if (leaf.route && !leaf.page) return {
|
|
@@ -1053,7 +1052,7 @@ async function buildElementTree(config) {
|
|
|
1053
1052
|
});
|
|
1054
1053
|
for (let i = segments.length - 1; i >= 0; i--) {
|
|
1055
1054
|
const segment = segments[i];
|
|
1056
|
-
element = await wrapWithErrorBoundaries(segment, element, loadModule, createElement);
|
|
1055
|
+
element = await wrapWithErrorBoundaries(segment, element, loadModule, createElement, errorBoundaryComponent);
|
|
1057
1056
|
if (segment.access) {
|
|
1058
1057
|
const accessFn = (await loadModule(segment.access)).default;
|
|
1059
1058
|
element = createElement("timber:access-gate", {
|
|
@@ -1068,7 +1067,7 @@ async function buildElementTree(config) {
|
|
|
1068
1067
|
const LayoutComponent = (await loadModule(segment.layout)).default;
|
|
1069
1068
|
if (LayoutComponent) {
|
|
1070
1069
|
const slotProps = {};
|
|
1071
|
-
if (segment.slots.size > 0) for (const [slotName, slotNode] of segment.slots) slotProps[slotName] = await buildSlotElement(slotNode, params, searchParams, loadModule, createElement);
|
|
1070
|
+
if (segment.slots.size > 0) for (const [slotName, slotNode] of segment.slots) slotProps[slotName] = await buildSlotElement(slotNode, params, searchParams, loadModule, createElement, errorBoundaryComponent);
|
|
1072
1071
|
element = createElement(LayoutComponent, {
|
|
1073
1072
|
...slotProps,
|
|
1074
1073
|
params,
|
|
@@ -1089,7 +1088,7 @@ async function buildElementTree(config) {
|
|
|
1089
1088
|
* Slots have their own access.ts (SlotAccessGate) and error boundaries.
|
|
1090
1089
|
* On access denial: denied.tsx → default.tsx → null (graceful degradation).
|
|
1091
1090
|
*/
|
|
1092
|
-
async function buildSlotElement(slotNode, params, searchParams, loadModule, createElement) {
|
|
1091
|
+
async function buildSlotElement(slotNode, params, searchParams, loadModule, createElement, errorBoundaryComponent) {
|
|
1093
1092
|
const PageComponent = (slotNode.page ? await loadModule(slotNode.page) : null)?.default;
|
|
1094
1093
|
const DefaultComponent = (slotNode.default ? await loadModule(slotNode.default) : null)?.default;
|
|
1095
1094
|
if (!PageComponent) return DefaultComponent ? createElement(DefaultComponent, {
|
|
@@ -1100,7 +1099,7 @@ async function buildSlotElement(slotNode, params, searchParams, loadModule, crea
|
|
|
1100
1099
|
params,
|
|
1101
1100
|
searchParams
|
|
1102
1101
|
});
|
|
1103
|
-
element = await wrapWithErrorBoundaries(slotNode, element, loadModule, createElement);
|
|
1102
|
+
element = await wrapWithErrorBoundaries(slotNode, element, loadModule, createElement, errorBoundaryComponent);
|
|
1104
1103
|
if (slotNode.access) {
|
|
1105
1104
|
const accessFn = (await loadModule(slotNode.access)).default;
|
|
1106
1105
|
const DeniedComponent = (slotNode.denied ? await loadModule(slotNode.denied) : null)?.default;
|
|
@@ -1131,13 +1130,13 @@ async function buildSlotElement(slotNode, params, searchParams, loadModule, crea
|
|
|
1131
1130
|
*
|
|
1132
1131
|
* This creates the fallback chain described in design/10-error-handling.md.
|
|
1133
1132
|
*/
|
|
1134
|
-
async function wrapWithErrorBoundaries(segment, element, loadModule, createElement) {
|
|
1133
|
+
async function wrapWithErrorBoundaries(segment, element, loadModule, createElement, errorBoundaryComponent) {
|
|
1135
1134
|
if (segment.statusFiles) {
|
|
1136
1135
|
for (const [key, file] of segment.statusFiles) if (key !== "4xx" && key !== "5xx") {
|
|
1137
1136
|
const status = parseInt(key, 10);
|
|
1138
1137
|
if (!isNaN(status)) {
|
|
1139
1138
|
const Component = (await loadModule(file)).default;
|
|
1140
|
-
if (Component) element = createElement(
|
|
1139
|
+
if (Component) element = createElement(errorBoundaryComponent, {
|
|
1141
1140
|
fallbackComponent: Component,
|
|
1142
1141
|
status,
|
|
1143
1142
|
children: element
|
|
@@ -1146,7 +1145,7 @@ async function wrapWithErrorBoundaries(segment, element, loadModule, createEleme
|
|
|
1146
1145
|
}
|
|
1147
1146
|
for (const [key, file] of segment.statusFiles) if (key === "4xx" || key === "5xx") {
|
|
1148
1147
|
const Component = (await loadModule(file)).default;
|
|
1149
|
-
if (Component) element = createElement(
|
|
1148
|
+
if (Component) element = createElement(errorBoundaryComponent, {
|
|
1150
1149
|
fallbackComponent: Component,
|
|
1151
1150
|
status: key === "4xx" ? 400 : 500,
|
|
1152
1151
|
children: element
|
|
@@ -1155,7 +1154,7 @@ async function wrapWithErrorBoundaries(segment, element, loadModule, createEleme
|
|
|
1155
1154
|
}
|
|
1156
1155
|
if (segment.error) {
|
|
1157
1156
|
const ErrorComponent = (await loadModule(segment.error)).default;
|
|
1158
|
-
if (ErrorComponent) element = createElement(
|
|
1157
|
+
if (ErrorComponent) element = createElement(errorBoundaryComponent, {
|
|
1159
1158
|
fallbackComponent: ErrorComponent,
|
|
1160
1159
|
children: element
|
|
1161
1160
|
});
|