blodemd 0.0.12 → 0.0.14

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 (138) hide show
  1. package/README.md +1 -1
  2. package/dev-server/lib/local-runtime.tsx +12 -15
  3. package/dev-server/next.config.js +19 -9
  4. package/dev-server/package.json +5 -1
  5. package/dev-server/tsconfig.json +0 -3
  6. package/dist/cli.mjs +1205 -969
  7. package/dist/cli.mjs.map +1 -1
  8. package/docs/app/globals.css +1 -1
  9. package/docs/components/api/api-playground.tsx +2 -5
  10. package/docs/components/api/api-reference.tsx +29 -3
  11. package/docs/components/docs/contextual-menu.tsx +37 -33
  12. package/docs/components/docs/copy-page-menu.tsx +18 -0
  13. package/docs/components/docs/doc-header.tsx +4 -1
  14. package/docs/components/docs/doc-shell.tsx +48 -18
  15. package/docs/components/docs/doc-sidebar.tsx +131 -89
  16. package/docs/components/docs/doc-toc.tsx +1 -0
  17. package/docs/components/docs/mobile-nav.tsx +72 -68
  18. package/docs/components/docs/sidebar-active-highlight.tsx +34 -0
  19. package/docs/components/docs/sidebar-scroll-area.tsx +9 -4
  20. package/docs/components/git/repo-picker.tsx +5 -2
  21. package/docs/components/mdx/index.tsx +31 -21
  22. package/docs/components/posthog-provider.tsx +42 -0
  23. package/docs/components/tenant-analytics.tsx +49 -0
  24. package/docs/components/third-parties.tsx +4 -1
  25. package/docs/components/ui/copy-button.tsx +16 -2
  26. package/docs/components/ui/search-dialog.tsx +431 -0
  27. package/docs/components/ui/search.tsx +44 -427
  28. package/docs/components/web-mcp.tsx +115 -0
  29. package/docs/lib/agent-skills.ts +48 -0
  30. package/docs/lib/config.ts +4 -5
  31. package/docs/lib/docs-collection.ts +7 -22
  32. package/docs/lib/docs-runtime.tsx +160 -10
  33. package/docs/lib/llms-full.ts +82 -0
  34. package/docs/lib/marketing-markdown.ts +79 -0
  35. package/docs/lib/marketing-site.ts +31 -0
  36. package/docs/lib/mdx.ts +17 -6
  37. package/docs/lib/routes.ts +19 -3
  38. package/docs/lib/shiki.ts +4 -0
  39. package/docs/lib/tenancy.ts +15 -2
  40. package/docs/lib/tenant-headers.ts +29 -0
  41. package/docs/lib/tenant-static.ts +73 -99
  42. package/package.json +10 -5
  43. package/packages/@repo/common/package.json +3 -3
  44. package/packages/@repo/contracts/dist/analytics.d.ts +21 -0
  45. package/packages/@repo/contracts/dist/analytics.d.ts.map +1 -0
  46. package/packages/@repo/contracts/dist/analytics.js +18 -0
  47. package/packages/@repo/contracts/dist/deployment.js +1 -1
  48. package/packages/@repo/contracts/dist/git.js +2 -2
  49. package/packages/@repo/contracts/dist/ids.d.ts.map +1 -1
  50. package/packages/@repo/contracts/dist/ids.js +2 -1
  51. package/packages/@repo/contracts/dist/index.d.ts +1 -0
  52. package/packages/@repo/contracts/dist/index.d.ts.map +1 -1
  53. package/packages/@repo/contracts/dist/index.js +1 -0
  54. package/packages/@repo/contracts/dist/project.d.ts +18 -1
  55. package/packages/@repo/contracts/dist/project.d.ts.map +1 -1
  56. package/packages/@repo/contracts/dist/project.js +3 -1
  57. package/packages/@repo/contracts/dist/tenant.d.ts +36 -0
  58. package/packages/@repo/contracts/dist/tenant.d.ts.map +1 -1
  59. package/packages/@repo/contracts/dist/tenant.js +2 -0
  60. package/packages/@repo/contracts/package.json +3 -3
  61. package/packages/@repo/contracts/src/analytics.ts +33 -0
  62. package/packages/@repo/contracts/src/deployment.ts +1 -1
  63. package/packages/@repo/contracts/src/git.ts +2 -2
  64. package/packages/@repo/contracts/src/ids.ts +2 -1
  65. package/packages/@repo/contracts/src/index.ts +1 -0
  66. package/packages/@repo/contracts/src/project.ts +3 -1
  67. package/packages/@repo/contracts/src/tenant.ts +2 -0
  68. package/packages/@repo/models/dist/docs-config.d.ts +0 -198
  69. package/packages/@repo/models/dist/docs-config.d.ts.map +1 -1
  70. package/packages/@repo/models/dist/docs-config.js +3 -2
  71. package/packages/@repo/models/dist/tenant.d.ts +12 -0
  72. package/packages/@repo/models/dist/tenant.d.ts.map +1 -1
  73. package/packages/@repo/models/package.json +3 -3
  74. package/packages/@repo/models/src/docs-config.ts +3 -3
  75. package/packages/@repo/models/src/tenant.ts +15 -0
  76. package/packages/@repo/prebuild/dist/openapi.d.ts.map +1 -1
  77. package/packages/@repo/prebuild/dist/openapi.js +32 -4
  78. package/packages/@repo/prebuild/package.json +3 -3
  79. package/packages/@repo/prebuild/src/openapi.ts +42 -4
  80. package/packages/@repo/previewing/dist/blob-source.d.ts.map +1 -1
  81. package/packages/@repo/previewing/dist/blob-source.js +18 -5
  82. package/packages/@repo/previewing/dist/config-loader.d.ts +134 -0
  83. package/packages/@repo/previewing/dist/config-loader.d.ts.map +1 -0
  84. package/packages/@repo/previewing/dist/config-loader.js +231 -0
  85. package/packages/@repo/previewing/dist/constants.d.ts +15 -0
  86. package/packages/@repo/previewing/dist/constants.d.ts.map +1 -0
  87. package/packages/@repo/previewing/dist/constants.js +14 -0
  88. package/packages/@repo/previewing/dist/content-index.d.ts +7 -0
  89. package/packages/@repo/previewing/dist/content-index.d.ts.map +1 -0
  90. package/packages/@repo/previewing/dist/content-index.js +291 -0
  91. package/packages/@repo/previewing/dist/index.d.ts +13 -121
  92. package/packages/@repo/previewing/dist/index.d.ts.map +1 -1
  93. package/packages/@repo/previewing/dist/index.js +11 -1003
  94. package/packages/@repo/previewing/dist/markdown/agent-markdown.d.ts +3 -0
  95. package/packages/@repo/previewing/dist/markdown/agent-markdown.d.ts.map +1 -0
  96. package/packages/@repo/previewing/dist/markdown/agent-markdown.js +176 -0
  97. package/packages/@repo/previewing/dist/markdown/format.d.ts +8 -0
  98. package/packages/@repo/previewing/dist/markdown/format.d.ts.map +1 -0
  99. package/packages/@repo/previewing/dist/markdown/format.js +43 -0
  100. package/packages/@repo/previewing/dist/markdown/links.d.ts +3 -0
  101. package/packages/@repo/previewing/dist/markdown/links.d.ts.map +1 -0
  102. package/packages/@repo/previewing/dist/markdown/links.js +31 -0
  103. package/packages/@repo/previewing/dist/openapi-pages.d.ts +7 -0
  104. package/packages/@repo/previewing/dist/openapi-pages.d.ts.map +1 -0
  105. package/packages/@repo/previewing/dist/openapi-pages.js +200 -0
  106. package/packages/@repo/previewing/dist/search-index.d.ts +4 -0
  107. package/packages/@repo/previewing/dist/search-index.d.ts.map +1 -0
  108. package/packages/@repo/previewing/dist/search-index.js +23 -0
  109. package/packages/@repo/previewing/dist/serialization.d.ts +13 -0
  110. package/packages/@repo/previewing/dist/serialization.d.ts.map +1 -0
  111. package/packages/@repo/previewing/dist/serialization.js +108 -0
  112. package/packages/@repo/previewing/dist/toc-index.d.ts +5 -0
  113. package/packages/@repo/previewing/dist/toc-index.d.ts.map +1 -0
  114. package/packages/@repo/previewing/dist/toc-index.js +53 -0
  115. package/packages/@repo/previewing/dist/types.d.ts +92 -0
  116. package/packages/@repo/previewing/dist/types.d.ts.map +1 -0
  117. package/packages/@repo/previewing/dist/types.js +1 -0
  118. package/packages/@repo/previewing/dist/utility-index.d.ts +7 -0
  119. package/packages/@repo/previewing/dist/utility-index.d.ts.map +1 -0
  120. package/packages/@repo/previewing/dist/utility-index.js +201 -0
  121. package/packages/@repo/previewing/package.json +3 -3
  122. package/packages/@repo/previewing/src/blob-source.ts +20 -5
  123. package/packages/@repo/previewing/src/config-loader.ts +316 -0
  124. package/packages/@repo/previewing/src/constants.ts +16 -0
  125. package/packages/@repo/previewing/src/content-index.ts +384 -0
  126. package/packages/@repo/previewing/src/index.ts +69 -1515
  127. package/packages/@repo/previewing/src/markdown/agent-markdown.ts +254 -0
  128. package/packages/@repo/previewing/src/markdown/format.ts +63 -0
  129. package/packages/@repo/previewing/src/markdown/links.ts +46 -0
  130. package/packages/@repo/previewing/src/openapi-pages.ts +319 -0
  131. package/packages/@repo/previewing/src/search-index.ts +38 -0
  132. package/packages/@repo/previewing/src/serialization.ts +191 -0
  133. package/packages/@repo/previewing/src/toc-index.ts +72 -0
  134. package/packages/@repo/previewing/src/types.ts +105 -0
  135. package/packages/@repo/previewing/src/utility-index.ts +304 -0
  136. package/packages/@repo/validation/package.json +3 -3
  137. package/scripts/repo-packages.mjs +8 -0
  138. package/docs/components/ui/site-footer.tsx +0 -41
package/README.md CHANGED
@@ -23,7 +23,7 @@ Or run without installing:
23
23
  npx blodemd
24
24
  ```
25
25
 
26
- Requires Node.js 20.17+.
26
+ Requires Node.js 24.x.
27
27
 
28
28
  ## Quick Start
29
29
 
@@ -4,7 +4,6 @@ import type { PageMode, SiteConfig } from "@repo/models";
4
4
  import {
5
5
  buildContentIndex,
6
6
  buildPageMetadataMap,
7
- loadContentSource,
8
7
  loadSiteConfig,
9
8
  } from "@repo/previewing";
10
9
  import type {
@@ -12,6 +11,7 @@ import type {
12
11
  ContentSource,
13
12
  PageMetadata,
14
13
  } from "@repo/previewing";
14
+ import { cache } from "react";
15
15
 
16
16
  import {
17
17
  getDocsCollection,
@@ -279,10 +279,13 @@ const buildArtifacts = async (): Promise<PreviewArtifactsResult> => {
279
279
  };
280
280
  };
281
281
 
282
- const getArtifacts = async () =>
282
+ // Memoized per request so metadata + page render + content fetch share one
283
+ // artifact build instead of rebuilding it on each call within a request.
284
+ const getArtifacts = cache(async () =>
283
285
  USE_LOCAL_RUNTIME_CACHE
284
286
  ? await artifactsCache.getOrCreate("preview", buildArtifacts)
285
- : await buildArtifacts();
287
+ : await buildArtifacts()
288
+ );
286
289
 
287
290
  const buildRenderedPageData = async ({
288
291
  artifacts,
@@ -293,10 +296,7 @@ const buildRenderedPageData = async ({
293
296
  relativePath: string;
294
297
  useToc: boolean;
295
298
  }): Promise<RenderedPageData> => {
296
- const rawContent = await loadContentSource(
297
- artifacts.contentSource,
298
- relativePath
299
- );
299
+ const rawContent = await artifacts.contentSource.readFile(relativePath);
300
300
  const { content, frontmatter } = await renderMdx(rawContent);
301
301
 
302
302
  return {
@@ -388,7 +388,7 @@ export const getOpenApiProxyContext = async (): Promise<{
388
388
  };
389
389
 
390
390
  // oxlint-disable-next-line eslint/complexity
391
- export const getDocShellData = async (slugKey: string) => {
391
+ export const getDocShellData = cache(async (slugKey: string) => {
392
392
  const artifacts = await getArtifacts();
393
393
 
394
394
  if (!artifacts || isConfigErrorResult(artifacts)) {
@@ -497,10 +497,7 @@ export const getDocShellData = async (slugKey: string) => {
497
497
  let toc: ReturnType<typeof extractToc> = [];
498
498
 
499
499
  try {
500
- rawContent = await loadContentSource(
501
- artifacts.contentSource,
502
- entry.relativePath
503
- );
500
+ rawContent = await artifacts.contentSource.readFile(entry.relativePath);
504
501
 
505
502
  if (useToc) {
506
503
  toc = extractToc(rawContent);
@@ -530,9 +527,9 @@ export const getDocShellData = async (slugKey: string) => {
530
527
  tabs: artifacts.tabs,
531
528
  toc,
532
529
  };
533
- };
530
+ });
534
531
 
535
- export const getDocPageContent = async (slugKey: string) => {
532
+ export const getDocPageContent = cache(async (slugKey: string) => {
536
533
  const artifacts = await getArtifacts();
537
534
 
538
535
  if (!artifacts || isConfigErrorResult(artifacts)) {
@@ -555,4 +552,4 @@ export const getDocPageContent = async (slugKey: string) => {
555
552
  relativePath: entry.relativePath,
556
553
  useToc,
557
554
  });
558
- };
555
+ });
@@ -3,12 +3,29 @@ import { fileURLToPath } from "node:url";
3
3
 
4
4
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
5
5
  const packagesDir = process.env.BLODEMD_PACKAGES_DIR;
6
+ const isStandalone = Boolean(packagesDir);
6
7
  const turbopackRoot =
7
8
  process.env.BLODEMD_TURBOPACK_ROOT ||
8
- (packagesDir
9
+ (isStandalone
9
10
  ? path.resolve(__dirname, "..")
10
11
  : path.resolve(__dirname, "../.."));
11
12
 
13
+ // In monorepo mode we transpile @repo/* from source so edits to the
14
+ // package src/ files hot-reload. In standalone mode the @repo packages
15
+ // ship pre-built `dist/` via their package.json `exports`; transpiling
16
+ // their `src/` would make Turbopack miss the `.js` → `.ts` resolution
17
+ // for same-package imports, so we let Next consume the compiled output.
18
+ const repoTranspilePackages = isStandalone
19
+ ? []
20
+ : [
21
+ "@repo/common",
22
+ "@repo/contracts",
23
+ "@repo/models",
24
+ "@repo/prebuild",
25
+ "@repo/previewing",
26
+ "@repo/validation",
27
+ ];
28
+
12
29
  /** @type {import('next').NextConfig} */
13
30
  const nextConfig = {
14
31
  allowedDevOrigins: ["127.0.0.1"],
@@ -26,14 +43,7 @@ const nextConfig = {
26
43
  images: {
27
44
  unoptimized: true,
28
45
  },
29
- transpilePackages: [
30
- "@repo/common",
31
- "@repo/contracts",
32
- "@repo/models",
33
- "@repo/prebuild",
34
- "@repo/previewing",
35
- "@repo/validation",
36
- ],
46
+ transpilePackages: repoTranspilePackages,
37
47
  turbopack: {
38
48
  // The dev server consumes sibling docs/ and workspace packages/
39
49
  // directories, so Turbopack needs a root that includes them.
@@ -46,12 +46,16 @@
46
46
  "devDependencies": {
47
47
  "@repo/typescript-config": "*",
48
48
  "@types/mdx": "^2.0.13",
49
- "@types/node": "^22.19.15",
49
+ "@types/node": "^24.12.2",
50
50
  "@types/react": "19.2.14",
51
51
  "@types/react-dom": "19.2.3",
52
52
  "oxfmt": "^0.42.0",
53
53
  "oxlint": "^1.57.0",
54
+ "postcss": "^8.5.3",
54
55
  "typescript": "6.0.2",
55
56
  "ultracite": "^7.3.2"
57
+ },
58
+ "engines": {
59
+ "node": "24.x"
56
60
  }
57
61
  }
@@ -23,9 +23,6 @@
23
23
  ],
24
24
  "@dev/*": [
25
25
  "./*"
26
- ],
27
- "@repo/*": [
28
- "../packages/@repo/*/src/index.ts"
29
26
  ]
30
27
  },
31
28
  "plugins": [