@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.
Files changed (35) hide show
  1. package/dist/_chunks/ssr-data-BgSwMbN9.js +38 -0
  2. package/dist/_chunks/ssr-data-BgSwMbN9.js.map +1 -0
  3. package/dist/_chunks/{use-cookie-HcvNlW4L.js → use-cookie-D2cZu0jK.js} +3 -37
  4. package/dist/_chunks/use-cookie-D2cZu0jK.js.map +1 -0
  5. package/dist/client/error-boundary.d.ts +7 -0
  6. package/dist/client/error-boundary.d.ts.map +1 -1
  7. package/dist/client/error-boundary.js +5 -0
  8. package/dist/client/error-boundary.js.map +1 -1
  9. package/dist/client/index.js +15 -8
  10. package/dist/client/index.js.map +1 -1
  11. package/dist/client/ssr-data.d.ts +9 -0
  12. package/dist/client/ssr-data.d.ts.map +1 -1
  13. package/dist/client/use-router.d.ts.map +1 -1
  14. package/dist/cookies/index.js +1 -1
  15. package/dist/index.js +5 -11
  16. package/dist/index.js.map +1 -1
  17. package/dist/plugins/shims.d.ts.map +1 -1
  18. package/dist/server/index.js +9 -10
  19. package/dist/server/index.js.map +1 -1
  20. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  21. package/dist/server/slot-resolver.d.ts.map +1 -1
  22. package/dist/server/ssr-entry.d.ts +7 -0
  23. package/dist/server/ssr-entry.d.ts.map +1 -1
  24. package/dist/server/tree-builder.d.ts +10 -0
  25. package/dist/server/tree-builder.d.ts.map +1 -1
  26. package/package.json +1 -1
  27. package/src/client/error-boundary.tsx +23 -0
  28. package/src/client/ssr-data.ts +7 -0
  29. package/src/client/use-router.ts +15 -3
  30. package/src/plugins/shims.ts +8 -14
  31. package/src/server/rsc-entry/index.ts +10 -3
  32. package/src/server/slot-resolver.ts +24 -1
  33. package/src/server/ssr-entry.ts +8 -0
  34. package/src/server/tree-builder.ts +35 -10
  35. 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,CA6GvD"}
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"}
@@ -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(TimberErrorBoundary, {
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(TimberErrorBoundary, {
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(TimberErrorBoundary, {
1157
+ if (ErrorComponent) element = createElement(errorBoundaryComponent, {
1159
1158
  fallbackComponent: ErrorComponent,
1160
1159
  children: element
1161
1160
  });