reroute-js 0.15.0 → 0.16.0

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 (121) hide show
  1. package/_/blog/src/client/routes/blog/content/5-mdx-with-components.mdx +5 -2
  2. package/_/blog/src/client/routes/blog/index.tsx +1 -0
  3. package/cli/bin.d.ts +1 -1
  4. package/cli/bin.js +62 -12
  5. package/cli/bin.js.map +7 -7
  6. package/cli/index.d.ts +1 -1
  7. package/cli/index.js +5 -5
  8. package/cli/index.js.map +2 -2
  9. package/cli/src/cli.d.ts +1 -1
  10. package/cli/src/commands/analyze.d.ts +1 -1
  11. package/cli/src/commands/build.d.ts +1 -1
  12. package/cli/src/commands/dev.d.ts +1 -1
  13. package/cli/src/commands/gen.d.ts +1 -1
  14. package/cli/src/commands/index.d.ts +1 -1
  15. package/cli/src/commands/init.d.ts +1 -1
  16. package/cli/src/commands/lib/command.d.ts +1 -1
  17. package/cli/src/commands/lib/env.d.ts +1 -1
  18. package/cli/src/commands/lib/index.d.ts +1 -1
  19. package/cli/src/commands/lib/log.d.ts +1 -1
  20. package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
  21. package/cli/src/commands/lib/markdown/index.d.ts +1 -1
  22. package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
  23. package/cli/src/commands/lib/production.d.ts +1 -1
  24. package/cli/src/commands/lib/server.d.ts +1 -1
  25. package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
  26. package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
  27. package/cli/src/commands/lib/tailwind.d.ts +1 -1
  28. package/cli/src/commands/lib/version.d.ts +1 -1
  29. package/cli/src/commands/start.d.ts +1 -1
  30. package/cli/src/index.d.ts +1 -1
  31. package/core/index.d.ts +1 -1
  32. package/core/index.js +57 -7
  33. package/core/index.js.map +5 -5
  34. package/core/src/bundler/hash.d.ts +1 -1
  35. package/core/src/bundler/index.d.ts +1 -1
  36. package/core/src/config.d.ts +1 -1
  37. package/core/src/content/discovery.d.ts +1 -1
  38. package/core/src/content/index.d.ts +1 -1
  39. package/core/src/content/metadata.d.ts +1 -1
  40. package/core/src/index.d.ts +1 -1
  41. package/core/src/rss/discovery.d.ts +1 -1
  42. package/core/src/rss/generator.d.ts +1 -1
  43. package/core/src/rss/index.d.ts +1 -1
  44. package/core/src/sitemap/discovery.d.ts +1 -1
  45. package/core/src/sitemap/generator.d.ts +1 -1
  46. package/core/src/sitemap/index.d.ts +1 -1
  47. package/core/src/ssr/index.d.ts +1 -1
  48. package/core/src/ssr/lib/cache.d.ts +1 -1
  49. package/core/src/ssr/lib/collections.d.ts +1 -1
  50. package/core/src/ssr/lib/compression.d.ts +1 -1
  51. package/core/src/ssr/lib/compute.d.ts +1 -1
  52. package/core/src/ssr/lib/data.d.ts +1 -1
  53. package/core/src/ssr/lib/html.d.ts +1 -1
  54. package/core/src/ssr/lib/index.d.ts +1 -1
  55. package/core/src/ssr/lib/metadata.d.ts +1 -1
  56. package/core/src/ssr/lib/mime.d.ts +1 -1
  57. package/core/src/ssr/lib/modules.d.ts +1 -1
  58. package/core/src/ssr/lib/path.d.ts +1 -1
  59. package/core/src/ssr/lib/preload.d.ts +1 -1
  60. package/core/src/ssr/lib/scripts.d.ts +1 -1
  61. package/core/src/ssr/lib/scripts.d.ts.map +1 -1
  62. package/core/src/ssr/lib/seed.d.ts +1 -1
  63. package/core/src/ssr/lib/styles.d.ts +1 -1
  64. package/core/src/ssr/lib/template.d.ts +1 -1
  65. package/core/src/ssr/lib/types.d.ts +1 -1
  66. package/core/src/ssr/render.d.ts +1 -1
  67. package/core/src/ssr/stream.d.ts +1 -1
  68. package/elysia/index.d.ts +1 -1
  69. package/elysia/index.js +57 -7
  70. package/elysia/index.js.map +5 -5
  71. package/elysia/src/index.d.ts +1 -1
  72. package/elysia/src/libs/cache.d.ts +1 -1
  73. package/elysia/src/libs/http.d.ts +1 -1
  74. package/elysia/src/libs/image.d.ts +1 -1
  75. package/elysia/src/plugin.d.ts +1 -1
  76. package/elysia/src/routes/artifacts.d.ts +1 -1
  77. package/elysia/src/routes/content.d.ts +1 -1
  78. package/elysia/src/routes/image.d.ts +1 -1
  79. package/elysia/src/routes/internal.d.ts +1 -1
  80. package/elysia/src/routes/redirects.d.ts +1 -1
  81. package/elysia/src/routes/rss.d.ts +1 -1
  82. package/elysia/src/routes/sitemap.d.ts +1 -1
  83. package/elysia/src/routes/ssr.d.ts +1 -1
  84. package/elysia/src/routes/static.d.ts +1 -1
  85. package/elysia/src/types.d.ts +1 -1
  86. package/package.json +1 -1
  87. package/react/index.d.ts +1 -1
  88. package/react/index.js +29 -6
  89. package/react/index.js.map +4 -4
  90. package/react/src/components/ClientOnly.d.ts +1 -1
  91. package/react/src/components/ContentRoute.d.ts +1 -1
  92. package/react/src/components/Image.d.ts +1 -1
  93. package/react/src/components/LazyRoute.d.ts +1 -1
  94. package/react/src/components/Link.d.ts +1 -1
  95. package/react/src/components/Markdown.d.ts +1 -1
  96. package/react/src/components/Outlet.d.ts +1 -1
  97. package/react/src/components/index.d.ts +1 -1
  98. package/react/src/hooks/index.d.ts +1 -1
  99. package/react/src/hooks/useContent.d.ts +7 -1
  100. package/react/src/hooks/useContent.d.ts.map +1 -1
  101. package/react/src/hooks/useData.d.ts +1 -1
  102. package/react/src/hooks/useFeed.d.ts +1 -1
  103. package/react/src/hooks/useLayoutData.d.ts +1 -1
  104. package/react/src/hooks/useNavigate.d.ts +1 -1
  105. package/react/src/hooks/useParams.d.ts +1 -1
  106. package/react/src/hooks/useRouter.d.ts +1 -1
  107. package/react/src/hooks/useSearchParams.d.ts +1 -1
  108. package/react/src/index.d.ts +1 -1
  109. package/react/src/lib/content.d.ts +1 -1
  110. package/react/src/lib/head.d.ts +1 -1
  111. package/react/src/lib/index.d.ts +1 -1
  112. package/react/src/lib/lazy-route.d.ts +1 -1
  113. package/react/src/lib/route-loader.d.ts +1 -1
  114. package/react/src/providers/ContentProvider.d.ts +1 -1
  115. package/react/src/providers/ContentProvider.d.ts.map +1 -1
  116. package/react/src/providers/RerouteProvider.d.ts +1 -1
  117. package/react/src/providers/RouterProvider.d.ts +1 -1
  118. package/react/src/providers/index.d.ts +1 -1
  119. package/react/src/types/any.d.ts +1 -1
  120. package/react/src/types/index.d.ts +1 -1
  121. package/react/src/types/router.d.ts +1 -1
@@ -27,7 +27,7 @@ MDX is markdown with JSX. It lets you:
27
27
  The best practice is to create reusable components in separate files and import them:
28
28
 
29
29
  ```typescript
30
- // At the top of your MDX file
30
+ // At the top of your MDX file (after frontmatter)
31
31
  import { Highlight } from '../../../components/Highlight';
32
32
  import { Alert } from '../../../components/Alert';
33
33
  import { BarChart } from '../../../components/BarChart';
@@ -38,6 +38,7 @@ This approach gives you:
38
38
  - ✅ **Type safety** - TypeScript interfaces for props
39
39
  - ✅ **Maintainability** - Update once, affects all uses
40
40
  - ✅ **Testability** - Components can be tested separately
41
+ - ✅ **Frontmatter access** - Use `meta` variable to access frontmatter data
41
42
 
42
43
  ## Highlight Component Example
43
44
 
@@ -269,4 +270,6 @@ MDX gives you the best of both worlds: the simplicity of markdown with the power
269
270
 
270
271
  ---
271
272
 
272
- *This entire page imports and uses external React components: `<Highlight>`, `<Alert>`, and `<BarChart>`!*
273
+ 🚀*This entire page imports and uses external React components: `<Highlight>`, `<Alert>`, and `<BarChart>`!*
274
+
275
+ ✨*Page created at {meta.date}*
@@ -9,6 +9,7 @@ const meta = {
9
9
  function BlogIndex() {
10
10
  const { items } = useContent({
11
11
  collection: 'blog',
12
+ sort: { date: 'desc' },
12
13
  });
13
14
 
14
15
  return (
package/cli/bin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.15.0
2
+ * reroute-js v0.16.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2025 stewones <hi@stewan.io>
package/cli/bin.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
3
  /**
4
- * reroute-js v0.15.0
4
+ * reroute-js v0.16.0
5
5
  *
6
6
  * @license MIT
7
7
  * @copyright 2025 stewones <hi@stewan.io>
@@ -47,7 +47,7 @@ async function getVersionString() {
47
47
  }
48
48
  async function getVersion() {
49
49
  if (true) {
50
- return "0.15.0";
50
+ return "0.16.0";
51
51
  }
52
52
  const possiblePaths = [
53
53
  path.join(import.meta.dir, "../../../../package.json"),
@@ -65,7 +65,7 @@ async function getVersion() {
65
65
  }
66
66
  async function getCommit() {
67
67
  if (true) {
68
- return "a6ee9c5";
68
+ return "b8bc515";
69
69
  }
70
70
  return "dev";
71
71
  }
@@ -442,7 +442,7 @@ async function getContentMeta(absPath, isWatchMode) {
442
442
  try {
443
443
  const url = pathToFileURL2(absPath).href;
444
444
  const mod = await import(`${url}${isWatchMode ? `?t=${Date.now()}` : ""}`);
445
- const meta = mod.meta || mod.frontmatter || {};
445
+ const meta = mod.meta || {};
446
446
  if (meta && typeof meta === "object")
447
447
  return meta;
448
448
  return {};
@@ -1825,7 +1825,7 @@ async function seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode) {
1825
1825
  globalThis.__REROUTE_SSR_MODULES__ = globalThis.__REROUTE_SSR_MODULES__ || {};
1826
1826
  globalThis.__REROUTE_SSR_MODULES__[key] = C;
1827
1827
  try {
1828
- const pageMeta = mod.meta || mod.frontmatter || {};
1828
+ const pageMeta = mod.meta || {};
1829
1829
  const pageSSR = mod.ssr || {};
1830
1830
  globalThis.__REROUTE_SSR_EXPORTS__ = globalThis.__REROUTE_SSR_EXPORTS__ || {};
1831
1831
  globalThis.__REROUTE_SSR_EXPORTS__[key] = {
@@ -2380,6 +2380,39 @@ function createFeedsScript() {
2380
2380
  return "";
2381
2381
  }
2382
2382
  }
2383
+ function pickFields(item, fields) {
2384
+ const result = {};
2385
+ const mandatory = ["collection", "name", "slug", "href", "module"];
2386
+ for (const field of mandatory) {
2387
+ if (item[field] !== undefined) {
2388
+ result[field] = item[field];
2389
+ }
2390
+ }
2391
+ for (const field of fields) {
2392
+ const parts = field.split(".");
2393
+ let src = item;
2394
+ let dst = result;
2395
+ let valid = true;
2396
+ for (let i = 0;i < parts.length - 1; i++) {
2397
+ const key = parts[i];
2398
+ src = src?.[key];
2399
+ if (src === undefined) {
2400
+ valid = false;
2401
+ break;
2402
+ }
2403
+ if (!dst[key])
2404
+ dst[key] = {};
2405
+ dst = dst[key];
2406
+ }
2407
+ if (valid) {
2408
+ const lastKey = parts[parts.length - 1];
2409
+ if (src && src[lastKey] !== undefined) {
2410
+ dst[lastKey] = src[lastKey];
2411
+ }
2412
+ }
2413
+ }
2414
+ return result;
2415
+ }
2383
2416
  function processCollections(accessedCollections, byCollectionForSSR) {
2384
2417
  const sortByDate = (order) => (a, b) => {
2385
2418
  const da = a?.meta?.date ? Date.parse(String(a.meta.date)) : 0;
@@ -2390,13 +2423,19 @@ function processCollections(accessedCollections, byCollectionForSSR) {
2390
2423
  if (accessedCollections && typeof accessedCollections.forEach === "function") {
2391
2424
  accessedCollections.forEach((c) => {
2392
2425
  if (typeof c === "string")
2393
- usage[c] = { limit: Number.POSITIVE_INFINITY, sort: "custom" };
2426
+ usage[c] = {
2427
+ limit: Number.POSITIVE_INFINITY,
2428
+ sort: "custom",
2429
+ fields: "all"
2430
+ };
2394
2431
  });
2395
2432
  } else if (accessedCollections && typeof accessedCollections === "object") {
2396
2433
  for (const [k, v] of Object.entries(accessedCollections)) {
2397
2434
  const lim = typeof v?.limit === "number" ? v.limit : Number.POSITIVE_INFINITY;
2398
2435
  const s = typeof v?.sort === "string" ? v.sort : "custom";
2399
- usage[k] = { limit: lim, sort: s };
2436
+ const slugs = v?.slugs instanceof Set ? v.slugs : undefined;
2437
+ const fields = v?.fields === "all" || v?.fields instanceof Set ? v.fields : "all";
2438
+ usage[k] = { limit: lim, sort: s, slugs, fields };
2400
2439
  }
2401
2440
  }
2402
2441
  const collections = Object.keys(usage);
@@ -2415,8 +2454,19 @@ function processCollections(accessedCollections, byCollectionForSSR) {
2415
2454
  arr = full.slice(0, conf.limit);
2416
2455
  }
2417
2456
  }
2457
+ if (conf.fields !== "all" && conf.fields instanceof Set) {
2458
+ const fields = conf.fields;
2459
+ const slugs = conf.slugs || new Set;
2460
+ arr = arr.map((item) => {
2461
+ const doc = item;
2462
+ if (doc.slug && slugs.has(doc.slug)) {
2463
+ return doc;
2464
+ }
2465
+ return pickFields(doc, fields);
2466
+ });
2467
+ }
2418
2468
  subset[c] = arr;
2419
- partial[c] = Array.isArray(arr) && Array.isArray(full) ? arr.length < full.length : false;
2469
+ partial[c] = Array.isArray(arr) && Array.isArray(full) && arr.length < full.length || conf.fields !== "all";
2420
2470
  }
2421
2471
  return { subset, partial };
2422
2472
  }
@@ -3295,7 +3345,7 @@ ${typeDefinitions}
3295
3345
  // MDX compiled content with imports and component
3296
3346
  ${typedMdx}
3297
3347
 
3298
- // Add metadata exports
3348
+ // Frontmatter exports
3299
3349
  export const meta = ${JSON.stringify(frontmatter, null, 2)};
3300
3350
 
3301
3351
  export const ssr = {
@@ -7563,7 +7613,7 @@ async function getVersionString2() {
7563
7613
  }
7564
7614
  async function getVersion2() {
7565
7615
  if (true) {
7566
- return "0.15.0";
7616
+ return "0.16.0";
7567
7617
  }
7568
7618
  const possiblePaths = [
7569
7619
  path3.join(import.meta.dir, "../../../package.json"),
@@ -7580,10 +7630,10 @@ async function getVersion2() {
7580
7630
  }
7581
7631
  async function getCommit2() {
7582
7632
  if (true) {
7583
- return "a6ee9c5";
7633
+ return "b8bc515";
7584
7634
  }
7585
7635
  return "dev";
7586
7636
  }
7587
7637
  main();
7588
7638
 
7589
- //# debugId=57C1D506F32841DA64756E2164756E21
7639
+ //# debugId=30740D5F0C39AC8F64756E2164756E21