@timber-js/app 0.2.0-alpha.169 → 0.2.0-alpha.170

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 (59) hide show
  1. package/LICENSE +8 -0
  2. package/dist/_chunks/{canonicalize-P41GR6tY.js → canonicalize-Du3o_ptW.js} +30 -12
  3. package/dist/_chunks/canonicalize-Du3o_ptW.js.map +1 -0
  4. package/dist/_chunks/{cli-schema-sync-B73L6pMq.js → cli-schema-sync-B5FDplGI.js} +55 -7
  5. package/dist/_chunks/cli-schema-sync-B5FDplGI.js.map +1 -0
  6. package/dist/_chunks/{segment-classify-CDDRVKs7.js → segment-classify-Byy425ng.js} +57 -18
  7. package/dist/_chunks/segment-classify-Byy425ng.js.map +1 -0
  8. package/dist/_chunks/{walkers-CoOC8Hga.js → walkers-DCoE-LJf.js} +23 -9
  9. package/dist/_chunks/walkers-DCoE-LJf.js.map +1 -0
  10. package/dist/cli-schema-sync.d.ts.map +1 -1
  11. package/dist/cli.js +1 -1
  12. package/dist/client/index.js +5 -2
  13. package/dist/client/index.js.map +1 -1
  14. package/dist/client/link.d.ts.map +1 -1
  15. package/dist/index.js +26 -4
  16. package/dist/index.js.map +1 -1
  17. package/dist/routing/index.js +3 -3
  18. package/dist/routing/link-codegen.d.ts.map +1 -1
  19. package/dist/routing/manifest-codegen.d.ts.map +1 -1
  20. package/dist/routing/scanner.d.ts.map +1 -1
  21. package/dist/routing/schema-validation.d.ts.map +1 -1
  22. package/dist/routing/segment-classify.d.ts +8 -2
  23. package/dist/routing/segment-classify.d.ts.map +1 -1
  24. package/dist/routing/types.d.ts +4 -0
  25. package/dist/routing/types.d.ts.map +1 -1
  26. package/dist/server/internal.js +13 -4
  27. package/dist/server/internal.js.map +1 -1
  28. package/dist/server/metadata-routes.d.ts +24 -4
  29. package/dist/server/metadata-routes.d.ts.map +1 -1
  30. package/dist/server/pipeline-interception.d.ts.map +1 -1
  31. package/dist/server/pipeline-phases.d.ts.map +1 -1
  32. package/dist/server/route-element-builder.d.ts.map +1 -1
  33. package/dist/server/route-matcher.d.ts.map +1 -1
  34. package/dist/server/sitemap-generator.d.ts.map +1 -1
  35. package/docs/more/01-advanced-routing.mdx +35 -1
  36. package/docs/more/04-metadata-and-fonts.mdx +2 -2
  37. package/package.json +7 -8
  38. package/src/cli-schema-sync.ts +15 -2
  39. package/src/cli.ts +0 -0
  40. package/src/client/link.tsx +4 -1
  41. package/src/routing/codegen.ts +13 -1
  42. package/src/routing/link-codegen.ts +15 -12
  43. package/src/routing/manifest-codegen.ts +6 -0
  44. package/src/routing/scanner.ts +85 -3
  45. package/src/routing/schema-validation.ts +7 -1
  46. package/src/routing/segment-classify.ts +49 -14
  47. package/src/routing/types.ts +4 -0
  48. package/src/server/metadata-routes.ts +71 -10
  49. package/src/server/pipeline-interception.ts +14 -1
  50. package/src/server/pipeline-phases.ts +7 -1
  51. package/src/server/route-element-builder.ts +12 -3
  52. package/src/server/route-matcher.ts +16 -2
  53. package/src/server/sitemap-generator.ts +5 -4
  54. package/src/server/slot-resolver.ts +7 -1
  55. package/src/server/tree-match.ts +46 -4
  56. package/dist/_chunks/canonicalize-P41GR6tY.js.map +0 -1
  57. package/dist/_chunks/cli-schema-sync-B73L6pMq.js.map +0 -1
  58. package/dist/_chunks/segment-classify-CDDRVKs7.js.map +0 -1
  59. package/dist/_chunks/walkers-CoOC8Hga.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/client/link.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/client/link.tsx"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as __esmMin, o as __exportAll, s as __toCommonJS } from "./_chunks/dist-BA3u1z3W.js";
2
- import { c as isDynamicMetadataExtension, l as isMetadataRouteServePath, r as canonicalize } from "./_chunks/canonicalize-P41GR6tY.js";
2
+ import { c as isDynamicMetadataExtension, l as isMetadataRouteServePath, r as canonicalize } from "./_chunks/canonicalize-Du3o_ptW.js";
3
3
  import { h as swallow } from "./_chunks/logger-AWfuX-KJ.js";
4
- import { i as scanRoutes } from "./_chunks/cli-schema-sync-B73L6pMq.js";
5
- import { a as generateRouteMap, c as fileHasDirective, d as getPrerenderExport, i as validateSchemaAgainstRoutes, l as fileHasExport, n as collectInterceptionRewrites, o as fileHasAnyExport, s as fileHasDefaultExport, t as collectLeafRoutes, u as fileHasStarExport } from "./_chunks/walkers-CoOC8Hga.js";
4
+ import { i as scanRoutes } from "./_chunks/cli-schema-sync-B5FDplGI.js";
5
+ import { a as generateRouteMap, c as fileHasDirective, d as getPrerenderExport, i as validateSchemaAgainstRoutes, l as fileHasExport, n as collectInterceptionRewrites, o as fileHasAnyExport, s as fileHasDefaultExport, t as collectLeafRoutes, u as fileHasStarExport } from "./_chunks/walkers-DCoE-LJf.js";
6
6
  import { a as resolveAppDir, c as createNoopTimer, n as loadTimberConfigFile, o as resolveBuildDir, r as mergeFileConfig, s as resolveClientJavascript, t as createPluginContext } from "./_chunks/plugin-context---kTF5v8.js";
7
7
  import { t as fnv1aHash } from "./_chunks/fast-hash-D6hIVt1Y.js";
8
8
  import { t as formatSize } from "./_chunks/format-CfwjgPz9.js";
@@ -1523,6 +1523,10 @@ function collectEffectiveChildren(node, groupChain = []) {
1523
1523
  function isTerminal(node) {
1524
1524
  return !!(node.page || node.route);
1525
1525
  }
1526
+ /** Combined affix length for specificity ordering. */
1527
+ function affixLength(node) {
1528
+ return (node.paramPrefix?.length ?? 0) + (node.paramSuffix?.length ?? 0);
1529
+ }
1526
1530
  /**
1527
1531
  * Recursive depth-first matcher with backtracking.
1528
1532
  *
@@ -1551,7 +1555,23 @@ function matchNode(node, parts, index, chain, params, requireTerminal) {
1551
1555
  if (matchNode(child, parts, index + 1, chain, params, requireTerminal)) return true;
1552
1556
  chain.length -= groupChain.length;
1553
1557
  }
1554
- for (const { child, groupChain } of effective) if (child.segmentType === "dynamic" && child.paramName) {
1558
+ const affixed = effective.filter(({ child }) => child.segmentType === "dynamic" && child.paramName && (child.paramPrefix || child.paramSuffix));
1559
+ affixed.sort((a, b) => affixLength(b.child) - affixLength(a.child));
1560
+ for (const { child, groupChain } of affixed) {
1561
+ const prefix = child.paramPrefix ?? "";
1562
+ const suffix = child.paramSuffix ?? "";
1563
+ if (part.length > prefix.length + suffix.length && (!prefix || part.startsWith(prefix)) && (!suffix || part.endsWith(suffix))) {
1564
+ const value = part.slice(prefix.length, part.length - (suffix.length || 0));
1565
+ chain.push(...groupChain);
1566
+ const prev = params[child.paramName];
1567
+ params[child.paramName] = value;
1568
+ if (matchNode(child, parts, index + 1, chain, params, requireTerminal)) return true;
1569
+ chain.length -= groupChain.length;
1570
+ if (prev !== void 0) params[child.paramName] = prev;
1571
+ else delete params[child.paramName];
1572
+ }
1573
+ }
1574
+ for (const { child, groupChain } of effective) if (child.segmentType === "dynamic" && child.paramName && !child.paramPrefix && !child.paramSuffix) {
1555
1575
  chain.push(...groupChain);
1556
1576
  const prev = params[child.paramName];
1557
1577
  params[child.paramName] = part;
@@ -2418,6 +2438,8 @@ function generateManifestModule(tree, viteRoot) {
2418
2438
  parts.push(`${nextIndent}segmentType: ${JSON.stringify(node.segmentType)},`);
2419
2439
  parts.push(`${nextIndent}urlPath: ${JSON.stringify(node.urlPath)},`);
2420
2440
  if (node.paramName) parts.push(`${nextIndent}paramName: ${JSON.stringify(node.paramName)},`);
2441
+ if (node.paramPrefix) parts.push(`${nextIndent}paramPrefix: ${JSON.stringify(node.paramPrefix)},`);
2442
+ if (node.paramSuffix) parts.push(`${nextIndent}paramSuffix: ${JSON.stringify(node.paramSuffix)},`);
2421
2443
  if (node.interceptionMarker) parts.push(`${nextIndent}interceptionMarker: ${JSON.stringify(node.interceptionMarker)},`);
2422
2444
  if (node.interceptedSegmentName) parts.push(`${nextIndent}interceptedSegmentName: ${JSON.stringify(node.interceptedSegmentName)},`);
2423
2445
  for (const key of SINGLE_FILE_KEYS) {