@timber-js/app 0.2.0-alpha.110 → 0.2.0-alpha.111
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/{actions-D6gyxlGQ.js → actions-ILhDUzES.js} +46 -10
- package/dist/_chunks/actions-ILhDUzES.js.map +1 -0
- package/dist/_chunks/{build-output-helper-5TK2Emwp.js → build-output-helper-DhxiT18k.js} +1 -1
- package/dist/_chunks/{build-output-helper-5TK2Emwp.js.map → build-output-helper-DhxiT18k.js.map} +1 -1
- package/dist/_chunks/cli-schema-sync-BvvuK8Rp.js +137 -0
- package/dist/_chunks/cli-schema-sync-BvvuK8Rp.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-i2OEL2-p.js +2 -0
- package/dist/_chunks/codec-registry-V7ARyeLN.js +21 -0
- package/dist/_chunks/codec-registry-V7ARyeLN.js.map +1 -0
- package/dist/_chunks/{define-Dn98bPbb.js → define-8zQ8Vm7x.js} +3 -3
- package/dist/_chunks/{define-Dn98bPbb.js.map → define-8zQ8Vm7x.js.map} +1 -1
- package/dist/_chunks/{define-BflNsrwD.js → define-a0CCE6Nx.js} +3 -3
- package/dist/_chunks/{define-BflNsrwD.js.map → define-a0CCE6Nx.js.map} +1 -1
- package/dist/_chunks/{format-CYBGxKtc.js → format-CR6v1pWE.js} +1 -1
- package/dist/_chunks/{format-CYBGxKtc.js.map → format-CR6v1pWE.js.map} +1 -1
- package/dist/_chunks/{handler-store-B_df5Npe.js → handler-store-iqnt2ghN.js} +1 -1
- package/dist/_chunks/{handler-store-B_df5Npe.js.map → handler-store-iqnt2ghN.js.map} +1 -1
- package/dist/_chunks/{merge-search-params-Cm_KIWDX.js → merge-search-params-CwxJzBLS.js} +1 -1
- package/dist/_chunks/{merge-search-params-Cm_KIWDX.js.map → merge-search-params-CwxJzBLS.js.map} +1 -1
- package/dist/_chunks/{navigation-root-2ypaZQDx.js → navigation-root-CY3pRMxF.js} +2 -2
- package/dist/_chunks/{navigation-root-2ypaZQDx.js.map → navigation-root-CY3pRMxF.js.map} +1 -1
- package/dist/_chunks/{registry-DB93kT5c.js → registry-Dp_hJL4s.js} +1 -1
- package/dist/_chunks/{registry-DB93kT5c.js.map → registry-Dp_hJL4s.js.map} +1 -1
- package/dist/_chunks/resolve-schema-DO8B0mO9.js +65 -0
- package/dist/_chunks/resolve-schema-DO8B0mO9.js.map +1 -0
- package/dist/_chunks/{router-ref-TkUdmqtM.js → router-ref-sektkr-t.js} +2 -2
- package/dist/_chunks/{router-ref-TkUdmqtM.js.map → router-ref-sektkr-t.js.map} +1 -1
- package/dist/_chunks/scanner-DmfoB7iK.js +336 -0
- package/dist/_chunks/scanner-DmfoB7iK.js.map +1 -0
- package/dist/_chunks/{schema-bridge-C3xl_vfb.js → schema-bridge-eL5vQDSA.js} +1 -1
- package/dist/_chunks/{schema-bridge-C3xl_vfb.js.map → schema-bridge-eL5vQDSA.js.map} +1 -1
- package/dist/_chunks/{segment-context-Dc-GbSTe.js → segment-context-EsfQpS--.js} +1 -1
- package/dist/_chunks/{segment-context-Dc-GbSTe.js.map → segment-context-EsfQpS--.js.map} +1 -1
- package/dist/_chunks/{ssr-data-DzuI0bIV.js → ssr-data-BO5OvEvg.js} +1 -1
- package/dist/_chunks/{ssr-data-DzuI0bIV.js.map → ssr-data-BO5OvEvg.js.map} +1 -1
- package/dist/_chunks/{stale-reload-D6FlD3xn.js → stale-reload-BCPRG0Cv.js} +1 -1
- package/dist/_chunks/{stale-reload-D6FlD3xn.js.map → stale-reload-BCPRG0Cv.js.map} +1 -1
- package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -1
- package/dist/_chunks/{use-query-states-B-cLl8mx.js → use-query-states-D9SBlAfp.js} +2 -2
- package/dist/_chunks/{use-query-states-B-cLl8mx.js.map → use-query-states-D9SBlAfp.js.map} +1 -1
- package/dist/_chunks/{use-segment-params-07V1TIxL.js → use-segment-params-BSt_O2cb.js} +2 -2
- package/dist/_chunks/{use-segment-params-07V1TIxL.js.map → use-segment-params-BSt_O2cb.js.map} +1 -1
- package/dist/_chunks/{validation-DfyuMoK2.js → validation-Bm3Je-09.js} +1 -1
- package/dist/_chunks/{validation-DfyuMoK2.js.map → validation-Bm3Je-09.js.map} +1 -1
- package/dist/_chunks/{walkers-DQn5NNrf.js → walkers-DGTmJT0f.js} +109 -353
- package/dist/_chunks/walkers-DGTmJT0f.js.map +1 -0
- package/dist/adapters/cloudflare.js +1 -1
- package/dist/adapters/nitro.js +1 -1
- package/dist/cache/index.js +3 -2
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/sizeof.d.ts.map +1 -1
- package/dist/cli-schema-sync.d.ts +37 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +8 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +34 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -1
- package/dist/client/error-boundary.js +5 -3
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/index.js +27 -9
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.js +7 -7
- package/dist/client/link.d.ts.map +1 -1
- package/dist/codec.js +1 -1
- package/dist/cookies/index.js +3 -3
- package/dist/dev-tools/browser-logs.d.ts.map +1 -1
- package/dist/dev-tools/error-page.d.ts.map +1 -1
- package/dist/dev-tools/logs.d.ts.map +1 -1
- package/dist/dev-tools/overlay.d.ts +1 -1
- package/dist/dev-tools/overlay.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -16
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +52 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +33 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +8 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -1
- package/dist/routing/codegen-types.d.ts +5 -0
- package/dist/routing/codegen-types.d.ts.map +1 -1
- package/dist/routing/codegen.d.ts +5 -0
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/index.js +2 -1
- package/dist/routing/link-codegen.d.ts +2 -2
- package/dist/routing/link-codegen.d.ts.map +1 -1
- package/dist/search-params/index.js +3 -3
- package/dist/segment-params/index.js +1 -1
- package/dist/server/als-registry.d.ts +7 -0
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/internal.js +30 -4
- package/dist/server/internal.js.map +1 -1
- package/dist/server/node-stream-transforms.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +12 -2
- package/dist/server/param-coercion.d.ts.map +1 -1
- package/dist/server/pipeline-phases.d.ts.map +1 -1
- package/dist/server/pipeline.d.ts +18 -0
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/request-context.d.ts +17 -3
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +8 -14
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/package.json +11 -6
- package/src/cache/sizeof.ts +3 -1
- package/src/cli-schema-sync.ts +209 -0
- package/src/cli.ts +49 -2
- package/src/client/browser-entry/action-dispatch.ts +15 -5
- package/src/client/browser-entry/index.ts +6 -0
- package/src/client/error-boundary.tsx +2 -2
- package/src/client/link.tsx +25 -1
- package/src/dev-tools/browser-logs.ts +5 -2
- package/src/dev-tools/error-page.ts +3 -6
- package/src/dev-tools/logs.ts +6 -2
- package/src/dev-tools/overlay.ts +18 -5
- package/src/index.ts +5 -0
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +72 -0
- package/src/params/index.ts +11 -0
- package/src/params/resolve-schema.ts +88 -0
- package/src/plugins/dev-server.ts +24 -16
- package/src/plugins/mdx.ts +5 -1
- package/src/plugins/routing.ts +107 -2
- package/src/routing/codegen-shared.ts +11 -0
- package/src/routing/codegen-types.ts +5 -0
- package/src/routing/codegen.ts +129 -21
- package/src/routing/link-codegen.ts +19 -5
- package/src/server/als-registry.ts +7 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/fallback-error.ts +3 -3
- package/src/server/html-injectors.ts +11 -22
- package/src/server/node-stream-transforms.ts +6 -16
- package/src/server/param-coercion.ts +55 -2
- package/src/server/pipeline-phases.ts +8 -0
- package/src/server/pipeline.ts +19 -0
- package/src/server/request-context.ts +58 -3
- package/src/server/rsc-entry/helpers.ts +3 -2
- package/src/server/rsc-entry/index.ts +28 -35
- package/LICENSE +0 -8
- package/dist/_chunks/actions-D6gyxlGQ.js.map +0 -1
- package/dist/_chunks/walkers-DQn5NNrf.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/dev-tools/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAIzE,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AA2ID;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAsBnD;
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/dev-tools/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAIzE,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AA2ID;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAsBnD;AAwDD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAiBzD"}
|
|
@@ -19,7 +19,7 @@ import type { ViteDevServer } from 'vite';
|
|
|
19
19
|
export type ErrorPhase = 'module-transform' | 'proxy' | 'middleware' | 'access' | 'render' | 'handler';
|
|
20
20
|
/** Labels for terminal output. */
|
|
21
21
|
export declare const PHASE_LABELS: Record<ErrorPhase, string>;
|
|
22
|
-
export { classifyFrame, classifyStack, type FrameType, type ClassifiedFrame } from './stack-classifier.js';
|
|
22
|
+
export { classifyFrame, classifyStack, type FrameType, type ClassifiedFrame, } from './stack-classifier.js';
|
|
23
23
|
/**
|
|
24
24
|
* Extract the React component stack from an error, if present.
|
|
25
25
|
* React attaches this as `componentStack` during renderToReadableStream errors.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/dev-tools/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,MAAM,CAAC;AAqC1D,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,SAAS,CAAC;AAEd,kCAAkC;AAClC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAOnD,CAAC;AAIF,OAAO,
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/dev-tools/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,MAAM,CAAC;AAqC1D,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,SAAS,CAAC;AAEd,kCAAkC;AAClC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAOnD,CAAC;AAIF,OAAO,EACL,aAAa,EACb,aAAa,EACb,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAI/B;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAUnE;AAID,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAqB5F;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAehF;AAOD,OAAO,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,eAAO,MAAM,mBAAmB,6BAAuB,CAAC;AAIxD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAiCjF;AAkBD,wBAAgB,2BAA2B,IAAI,MAAM,CA6BpD;AAuHD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAMhG;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,GAC3C,IAAI,CA0CN"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import type { PluginOption } from 'vite';
|
|
13
13
|
import type { TimberUserConfig } from './config-types.js';
|
|
14
14
|
export type { TimberUserConfig } from './config-types.js';
|
|
15
|
+
export type { InferCodecType, SchemaConfig } from './params/define-schema.js';
|
|
15
16
|
export type { Metadata, MetadataRoute, MetadataHandler, MetadataResult } from './server/types.js';
|
|
16
17
|
/**
|
|
17
18
|
* Route map interface — augmented by the generated timber-routes.d.ts.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,MAAM,CAAC;AAyBjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,MAAM,CAAC;AAyBjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAQ9E,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElG;;;;;;;;;GASG;AAEH,MAAM,WAAW,MAAM;CAAG;AAE1B;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAEvE;AAgGD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CA+UhE;AAED,eAAe,MAAM,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { n as setViteServer } from "./_chunks/warnings-B30wpfaS.js";
|
|
2
2
|
import { h as swallow } from "./_chunks/logger-DDmK5skc.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as
|
|
3
|
+
import { t as scanRoutes } from "./_chunks/scanner-DmfoB7iK.js";
|
|
4
|
+
import { n as collectInterceptionRewrites, r as generateRouteMap, t as collectLeafRoutes } from "./_chunks/walkers-DGTmJT0f.js";
|
|
5
|
+
import { n as findSchemaFile, r as parseExistingSchemaKeys, t as collectDynamicSegments } from "./_chunks/cli-schema-sync-BvvuK8Rp.js";
|
|
6
|
+
import { t as formatSize } from "./_chunks/format-CR6v1pWE.js";
|
|
5
7
|
import { dirname, extname, join, normalize, resolve } from "node:path";
|
|
6
8
|
import { createRequire } from "node:module";
|
|
7
9
|
import react, { reactCompilerPreset } from "@vitejs/plugin-react";
|
|
@@ -425,7 +427,8 @@ function calculateModuleRunnerOffset() {
|
|
|
425
427
|
return _cachedOffset;
|
|
426
428
|
}
|
|
427
429
|
_cachedOffset = (src.slice(0, bodyIndex).match(/\n/g) || []).length;
|
|
428
|
-
} catch {
|
|
430
|
+
} catch (e) {
|
|
431
|
+
console.debug("[timber] overlay offset calculation failed:", e instanceof Error ? e.message : e);
|
|
429
432
|
_cachedOffset = 2;
|
|
430
433
|
}
|
|
431
434
|
return _cachedOffset;
|
|
@@ -501,7 +504,8 @@ function rewriteStacktrace(stack, moduleGraph) {
|
|
|
501
504
|
line: origLine,
|
|
502
505
|
column: origCol
|
|
503
506
|
});
|
|
504
|
-
} catch {
|
|
507
|
+
} catch (e) {
|
|
508
|
+
console.debug("[timber] source map tracing failed:", e instanceof Error ? e.message : e);
|
|
505
509
|
return input;
|
|
506
510
|
}
|
|
507
511
|
if (!pos.source || pos.line == null) return input;
|
|
@@ -566,7 +570,9 @@ function sendErrorToOverlay(server, error, phase, projectRoot, rscDebugComponent
|
|
|
566
570
|
} : void 0
|
|
567
571
|
}
|
|
568
572
|
});
|
|
569
|
-
} catch {
|
|
573
|
+
} catch (e) {
|
|
574
|
+
console.debug("[timber] overlay error send failed:", e instanceof Error ? e.message : e);
|
|
575
|
+
}
|
|
570
576
|
}
|
|
571
577
|
//#endregion
|
|
572
578
|
//#region src/server/utils/escape-html.ts
|
|
@@ -636,7 +642,8 @@ function readSourceContext(filePath, line, contextLines = 3) {
|
|
|
636
642
|
highlight: start + 1 + i === line
|
|
637
643
|
}))
|
|
638
644
|
};
|
|
639
|
-
} catch {
|
|
645
|
+
} catch (e) {
|
|
646
|
+
console.debug("[timber] source context extraction failed:", e instanceof Error ? e.message : e);
|
|
640
647
|
return null;
|
|
641
648
|
}
|
|
642
649
|
}
|
|
@@ -1417,10 +1424,10 @@ function createTimberMiddleware(server, projectRoot) {
|
|
|
1417
1424
|
if (!rscEnv?.runner?.import) throw new Error("[timber] RSC environment is not runnable");
|
|
1418
1425
|
const rscModule = await rscEnv.runner.import(RSC_ENTRY_ID);
|
|
1419
1426
|
handler = rscModule.default;
|
|
1420
|
-
const
|
|
1421
|
-
if (
|
|
1427
|
+
const config = rscModule.pipelineConfig;
|
|
1428
|
+
if (config) config.devPipelineErrorHandler = (error, _phase, debugComponents) => {
|
|
1422
1429
|
sendErrorToOverlay(server, error, classifyErrorPhase(error, projectRoot), projectRoot, debugComponents);
|
|
1423
|
-
}
|
|
1430
|
+
};
|
|
1424
1431
|
const setSourceMap = rscModule.setDevSourceMapHandler;
|
|
1425
1432
|
if (typeof setSourceMap === "function") setSourceMap((error) => {
|
|
1426
1433
|
fixErrorStacktrace(server, error);
|
|
@@ -1470,7 +1477,9 @@ function respond500(res, error, phase, projectRoot, hmrOptions) {
|
|
|
1470
1477
|
res.setHeader("content-type", "text/html; charset=utf-8");
|
|
1471
1478
|
res.end(html);
|
|
1472
1479
|
return;
|
|
1473
|
-
} catch {
|
|
1480
|
+
} catch (e) {
|
|
1481
|
+
console.debug("[timber] dev error page generation failed, falling back to text/plain:", e instanceof Error ? e.message : e);
|
|
1482
|
+
}
|
|
1474
1483
|
res.statusCode = 500;
|
|
1475
1484
|
res.setHeader("content-type", "text/plain");
|
|
1476
1485
|
res.end(`[timber] Internal server error\n\n${error instanceof Error ? error.stack ?? error.message : String(error)}`);
|
|
@@ -1604,7 +1613,9 @@ function listenForClientErrors(server, projectRoot) {
|
|
|
1604
1613
|
} : void 0
|
|
1605
1614
|
}
|
|
1606
1615
|
});
|
|
1607
|
-
} catch {
|
|
1616
|
+
} catch (e) {
|
|
1617
|
+
console.debug("[timber] overlay send failed:", e instanceof Error ? e.message : e);
|
|
1618
|
+
}
|
|
1608
1619
|
});
|
|
1609
1620
|
}
|
|
1610
1621
|
//#endregion
|
|
@@ -1891,7 +1902,8 @@ async function tryImport(name, projectRoot) {
|
|
|
1891
1902
|
try {
|
|
1892
1903
|
const mod = await import(name);
|
|
1893
1904
|
return mod.default ?? mod;
|
|
1894
|
-
} catch {
|
|
1905
|
+
} catch (e) {
|
|
1906
|
+
console.debug(`[timber] optional MDX dependency '${name}' not available:`, e instanceof Error ? e.message : e);
|
|
1895
1907
|
return;
|
|
1896
1908
|
}
|
|
1897
1909
|
}
|
|
@@ -2204,10 +2216,12 @@ var VIRTUAL_MODULE_ID$1 = "virtual:timber-route-manifest";
|
|
|
2204
2216
|
var RESOLVED_VIRTUAL_ID$1 = `\0${VIRTUAL_MODULE_ID$1}`;
|
|
2205
2217
|
var SEARCH_PARAMS_REGISTRY_ID = "virtual:timber-search-params-registry";
|
|
2206
2218
|
var RESOLVED_SEARCH_PARAMS_REGISTRY_ID = `\0${SEARCH_PARAMS_REGISTRY_ID}`;
|
|
2219
|
+
var SCHEMA_ID = "virtual:timber-schema";
|
|
2220
|
+
var RESOLVED_SCHEMA_ID = `\0${SCHEMA_ID}`;
|
|
2207
2221
|
/**
|
|
2208
2222
|
* File convention names we track for changes that require manifest regeneration.
|
|
2209
2223
|
*/
|
|
2210
|
-
var ROUTE_FILE_PATTERNS = /\/(page|layout|middleware|access|route|error|global-error|default|denied|params|\d{3}|[45]xx|not-found|forbidden|unauthorized|sitemap|robots|manifest|favicon|icon|opengraph-image|twitter-image|apple-icon)\./;
|
|
2224
|
+
var ROUTE_FILE_PATTERNS = /\/(page|layout|middleware|access|route|error|global-error|default|denied|params|schema|\d{3}|[45]xx|not-found|forbidden|unauthorized|sitemap|robots|manifest|favicon|icon|opengraph-image|twitter-image|apple-icon)\./;
|
|
2211
2225
|
/**
|
|
2212
2226
|
* Create the timber-routing Vite plugin.
|
|
2213
2227
|
*
|
|
@@ -2269,6 +2283,7 @@ function timberRouting(ctx) {
|
|
|
2269
2283
|
ctx.routeTree = scanRoutes(ctx.appDir, { pageExtensions: ctx.config.pageExtensions });
|
|
2270
2284
|
ctx.timer.end("route-scan");
|
|
2271
2285
|
writeCodegen(ctx);
|
|
2286
|
+
warnUnregisteredSegments(ctx);
|
|
2272
2287
|
const newConventionWarnings = lintConventions(ctx.routeTree, ctx.appDir).filter((w) => !warnedFiles.has(w.id));
|
|
2273
2288
|
if (newConventionWarnings.length > 0) {
|
|
2274
2289
|
for (const w of newConventionWarnings) warnedFiles.add(w.id);
|
|
@@ -2283,6 +2298,7 @@ function timberRouting(ctx) {
|
|
|
2283
2298
|
if (cleanId === VIRTUAL_MODULE_ID$1) return RESOLVED_VIRTUAL_ID$1;
|
|
2284
2299
|
if (cleanId.endsWith(`/${VIRTUAL_MODULE_ID$1}`)) return RESOLVED_VIRTUAL_ID$1;
|
|
2285
2300
|
if (cleanId === SEARCH_PARAMS_REGISTRY_ID || cleanId.endsWith(`/${SEARCH_PARAMS_REGISTRY_ID}`)) return RESOLVED_SEARCH_PARAMS_REGISTRY_ID;
|
|
2301
|
+
if (cleanId === SCHEMA_ID || cleanId.endsWith(`/${SCHEMA_ID}`)) return RESOLVED_SCHEMA_ID;
|
|
2286
2302
|
return null;
|
|
2287
2303
|
},
|
|
2288
2304
|
load(id) {
|
|
@@ -2294,6 +2310,7 @@ function timberRouting(ctx) {
|
|
|
2294
2310
|
if (!ctx.routeTree) rescan();
|
|
2295
2311
|
return generateSearchParamsRegistryModule(ctx.routeTree);
|
|
2296
2312
|
}
|
|
2313
|
+
if (id === RESOLVED_SCHEMA_ID) return generateSchemaModule(ctx.appDir);
|
|
2297
2314
|
return null;
|
|
2298
2315
|
},
|
|
2299
2316
|
buildStart() {
|
|
@@ -2346,11 +2363,32 @@ function timberRouting(ctx) {
|
|
|
2346
2363
|
* When the route tree changes, any environment that has imported the manifest
|
|
2347
2364
|
* needs to be invalidated so the next request/transform picks up the new tree.
|
|
2348
2365
|
*/
|
|
2366
|
+
/** Set of segments we've already warned about — avoid repeating on every rescan. */
|
|
2367
|
+
var _warnedSegments = /* @__PURE__ */ new Set();
|
|
2368
|
+
/**
|
|
2369
|
+
* Warn about dynamic segments not registered in app/schema.ts.
|
|
2370
|
+
* Only fires when a schema file exists. Logs once per segment per session.
|
|
2371
|
+
*/
|
|
2372
|
+
function warnUnregisteredSegments(ctx) {
|
|
2373
|
+
const schemaPath = findSchemaFile(ctx.appDir);
|
|
2374
|
+
if (!schemaPath) return;
|
|
2375
|
+
const filesystemSegments = collectDynamicSegments(ctx.appDir);
|
|
2376
|
+
if (filesystemSegments.length === 0) return;
|
|
2377
|
+
const existingKeys = parseExistingSchemaKeys(readFileSync(schemaPath, "utf-8"));
|
|
2378
|
+
const missing = filesystemSegments.filter((seg) => !existingKeys.includes(seg) && !_warnedSegments.has(seg));
|
|
2379
|
+
if (missing.length === 0) return;
|
|
2380
|
+
for (const seg of missing) _warnedSegments.add(seg);
|
|
2381
|
+
console.warn(`[timber] New segment${missing.length > 1 ? "s" : ""} not in schema: ${missing.join(", ")}\n Run: timber schema sync`);
|
|
2382
|
+
}
|
|
2349
2383
|
function invalidateManifest(server) {
|
|
2350
2384
|
for (const envName of Object.keys(server.environments)) {
|
|
2351
2385
|
const env = server.environments[envName];
|
|
2352
2386
|
if (!env?.moduleGraph) continue;
|
|
2353
|
-
for (const virtualId of [
|
|
2387
|
+
for (const virtualId of [
|
|
2388
|
+
RESOLVED_VIRTUAL_ID$1,
|
|
2389
|
+
RESOLVED_SEARCH_PARAMS_REGISTRY_ID,
|
|
2390
|
+
RESOLVED_SCHEMA_ID
|
|
2391
|
+
]) {
|
|
2354
2392
|
const mod = env.moduleGraph.getModuleById(virtualId);
|
|
2355
2393
|
if (mod) env.moduleGraph.invalidateModule(mod);
|
|
2356
2394
|
}
|
|
@@ -2366,6 +2404,46 @@ function invalidateManifest(server) {
|
|
|
2366
2404
|
* <Link> can look up the definition from the original `href` prop before
|
|
2367
2405
|
* segmentParams are interpolated.
|
|
2368
2406
|
*/
|
|
2407
|
+
/** Schema file extensions to check, in priority order. */
|
|
2408
|
+
var SCHEMA_EXTENSIONS = [
|
|
2409
|
+
".ts",
|
|
2410
|
+
".tsx",
|
|
2411
|
+
".js",
|
|
2412
|
+
".jsx"
|
|
2413
|
+
];
|
|
2414
|
+
/**
|
|
2415
|
+
* TIM-931: Generate the virtual:timber-schema module.
|
|
2416
|
+
*
|
|
2417
|
+
* When app/schema.{ts,tsx,js,jsx} exists, generates a module that
|
|
2418
|
+
* imports the schema and resolves its segmentParams codecs into a
|
|
2419
|
+
* bare-name codec map for runtime coercion.
|
|
2420
|
+
*
|
|
2421
|
+
* When no schema exists, exports null.
|
|
2422
|
+
*/
|
|
2423
|
+
function generateSchemaModule(appDir) {
|
|
2424
|
+
let schemaPath = null;
|
|
2425
|
+
for (const ext of SCHEMA_EXTENSIONS) {
|
|
2426
|
+
const candidate = join(appDir, `schema${ext}`);
|
|
2427
|
+
if (existsSync(candidate)) {
|
|
2428
|
+
schemaPath = candidate;
|
|
2429
|
+
break;
|
|
2430
|
+
}
|
|
2431
|
+
}
|
|
2432
|
+
if (!schemaPath) return ["// Auto-generated schema loader — no app/schema.ts found.", "export default null;"].join("\n");
|
|
2433
|
+
return [
|
|
2434
|
+
"// Auto-generated schema loader — do not edit.",
|
|
2435
|
+
"// Generated by timber-routing plugin (TIM-931).",
|
|
2436
|
+
"",
|
|
2437
|
+
`import schema from ${JSON.stringify(schemaPath)};`,
|
|
2438
|
+
`import { resolveSchemaCodecs } from '@timber-js/app/params';`,
|
|
2439
|
+
"",
|
|
2440
|
+
"const globalCodecs = schema?.segmentParams",
|
|
2441
|
+
" ? resolveSchemaCodecs(schema.segmentParams)",
|
|
2442
|
+
" : null;",
|
|
2443
|
+
"",
|
|
2444
|
+
"export default globalCodecs;"
|
|
2445
|
+
].join("\n");
|
|
2446
|
+
}
|
|
2369
2447
|
function generateSearchParamsRegistryModule(tree) {
|
|
2370
2448
|
const entries = [];
|
|
2371
2449
|
function walk(node) {
|
|
@@ -5739,7 +5817,9 @@ function patchConsole(server, projectRoot) {
|
|
|
5739
5817
|
timestamp: Date.now()
|
|
5740
5818
|
};
|
|
5741
5819
|
server.hot.send("timber:server-log", payload);
|
|
5742
|
-
} catch {
|
|
5820
|
+
} catch (e) {
|
|
5821
|
+
originals.get("debug")("[timber] server log forwarding failed:", e instanceof Error ? e.message : e);
|
|
5822
|
+
}
|
|
5743
5823
|
};
|
|
5744
5824
|
}
|
|
5745
5825
|
return () => {
|
|
@@ -5927,7 +6007,9 @@ function timberDevBrowserLogs(ctx) {
|
|
|
5927
6007
|
const formatted = formatBrowserLog(payload);
|
|
5928
6008
|
if (payload.level === "error") process.stderr.write(formatted + "\n");
|
|
5929
6009
|
else process.stdout.write(formatted + "\n");
|
|
5930
|
-
} catch {
|
|
6010
|
+
} catch (e) {
|
|
6011
|
+
process.stderr.write(`[timber] log forwarding failed: ${e instanceof Error ? e.message : e}\n`);
|
|
6012
|
+
}
|
|
5931
6013
|
});
|
|
5932
6014
|
},
|
|
5933
6015
|
transformIndexHtml() {
|