@aravindc26/velu 0.12.7 → 0.12.9

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 (74) hide show
  1. package/package.json +1 -1
  2. package/src/build.ts +13 -0
  3. package/src/cli.ts +51 -9
  4. package/src/engine/app/(docs)/[...slug]/layout.tsx +21 -537
  5. package/src/engine/app/_preview/[sessionId]/[...slug]/layout.tsx +96 -0
  6. package/src/engine/app/_preview/[sessionId]/[...slug]/page.tsx +298 -0
  7. package/src/engine/app/_preview/[sessionId]/layout.tsx +56 -0
  8. package/src/{preview-engine/app → engine/app/_preview}/[sessionId]/page.tsx +7 -3
  9. package/src/engine/app/_preview/api/sessions/[sessionId]/assets/[...path]/route.ts +51 -0
  10. package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/init/route.ts +2 -2
  11. package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/route.ts +3 -3
  12. package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/sync/route.ts +2 -2
  13. package/src/{preview-engine/app → engine/app/_preview}/layout.tsx +4 -1
  14. package/src/engine/app/global.css +0 -3623
  15. package/src/engine/app/layout.tsx +4 -3
  16. package/src/engine/components/sidebar-links.tsx +11 -5
  17. package/src/engine/lib/docs-layout.tsx +605 -0
  18. package/src/engine/lib/layout.shared.ts +7 -7
  19. package/src/engine/lib/preview-config.ts +129 -0
  20. package/src/{preview-engine/lib/content-generator.ts → engine/lib/preview-content.ts} +242 -42
  21. package/src/engine/lib/source.ts +80 -97
  22. package/src/engine/lib/velu.ts +79 -55
  23. package/src/engine/mdx-components.tsx +14 -650
  24. package/src/engine/source.config.ts +11 -89
  25. package/src/engine/tsconfig.json +1 -0
  26. package/src/engine-core/components/assistant.tsx +361 -0
  27. package/src/engine-core/components/banner.tsx +80 -0
  28. package/src/engine-core/components/changelog-filters.tsx +114 -0
  29. package/src/engine-core/components/code-group.tsx +383 -0
  30. package/src/engine-core/components/color.tsx +118 -0
  31. package/src/engine-core/components/copy-page.tsx +223 -0
  32. package/src/engine-core/components/dropdown-switcher.tsx +142 -0
  33. package/src/engine-core/components/expandable.tsx +77 -0
  34. package/src/engine-core/components/header-tab-link.tsx +43 -0
  35. package/src/engine-core/components/icon.tsx +136 -0
  36. package/src/engine-core/components/image-zoom-fallback.tsx +147 -0
  37. package/src/engine-core/components/image.tsx +111 -0
  38. package/src/engine-core/components/lang-switcher.tsx +101 -0
  39. package/src/engine-core/components/manual-api-playground.tsx +154 -0
  40. package/src/engine-core/components/mermaid.tsx +142 -0
  41. package/src/engine-core/components/openapi-toc-sync.tsx +59 -0
  42. package/src/engine-core/components/openapi.tsx +1682 -0
  43. package/src/engine-core/components/page-feedback-api.test.ts +83 -0
  44. package/src/engine-core/components/page-feedback-api.ts +89 -0
  45. package/src/engine-core/components/page-feedback.tsx +200 -0
  46. package/src/engine-core/components/product-switcher.tsx +107 -0
  47. package/src/engine-core/components/prompt.tsx +90 -0
  48. package/src/engine-core/components/providers.tsx +21 -0
  49. package/src/engine-core/components/search.tsx +318 -0
  50. package/src/engine-core/components/sidebar-links.tsx +54 -0
  51. package/src/engine-core/components/synced-tabs.tsx +57 -0
  52. package/src/engine-core/components/theme-toggle.tsx +39 -0
  53. package/src/engine-core/components/toc-examples.tsx +110 -0
  54. package/src/engine-core/components/version-switcher.tsx +95 -0
  55. package/src/engine-core/components/view.tsx +344 -0
  56. package/src/engine-core/css/assistant.css +326 -0
  57. package/src/engine-core/css/copy-page.css +206 -0
  58. package/src/engine-core/css/search.css +142 -0
  59. package/src/engine-core/css/shared.css +3628 -0
  60. package/src/engine-core/lib/remark-plugins.ts +102 -0
  61. package/src/engine-core/lib/source-plugins.ts +105 -0
  62. package/src/engine-core/mdx-components.tsx +654 -0
  63. package/src/engine-core/types.ts +49 -0
  64. package/src/preview-engine/app/[sessionId]/[...slug]/page.tsx +0 -41
  65. package/src/preview-engine/app/[sessionId]/layout.tsx +0 -23
  66. package/src/preview-engine/app/global.css +0 -3
  67. package/src/preview-engine/lib/session-config.ts +0 -86
  68. package/src/preview-engine/lib/source.ts +0 -60
  69. package/src/preview-engine/next.config.mjs +0 -20
  70. package/src/preview-engine/postcss.config.mjs +0 -8
  71. package/src/preview-engine/source.config.ts +0 -26
  72. package/src/preview-engine/tsconfig.json +0 -32
  73. /package/src/{preview-engine/app → engine/app/_preview}/page.tsx +0 -0
  74. /package/src/{preview-engine/lib/auth.ts → engine/lib/preview-auth.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aravindc26/velu",
3
- "version": "0.12.7",
3
+ "version": "0.12.9",
4
4
  "description": "A modern documentation site generator powered by Markdown and JSON configuration",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/build.ts CHANGED
@@ -11,6 +11,9 @@ const __dirname = dirname(__filename);
11
11
  const PACKAGED_ENGINE_DIR = join(__dirname, "engine");
12
12
  const DEV_ENGINE_DIR = join(__dirname, "..", "src", "engine");
13
13
  const ENGINE_DIR = existsSync(DEV_ENGINE_DIR) ? DEV_ENGINE_DIR : PACKAGED_ENGINE_DIR;
14
+ const PACKAGED_ENGINE_CORE_DIR = join(__dirname, "engine-core");
15
+ const DEV_ENGINE_CORE_DIR = join(__dirname, "..", "src", "engine-core");
16
+ const ENGINE_CORE_DIR = existsSync(DEV_ENGINE_CORE_DIR) ? DEV_ENGINE_CORE_DIR : PACKAGED_ENGINE_CORE_DIR;
14
17
  const CLI_PACKAGE_JSON_PATH = join(__dirname, "..", "package.json");
15
18
  const PRIMARY_CONFIG_NAME = "docs.json";
16
19
  const LEGACY_CONFIG_NAME = "velu.json";
@@ -1193,6 +1196,16 @@ function build(docsDir: string, outDir: string) {
1193
1196
  cpSync(ENGINE_DIR, outDir, { recursive: true });
1194
1197
  // Remove legacy Astro template leftovers if present in the packaged engine.
1195
1198
  rmSync(join(outDir, "src"), { recursive: true, force: true });
1199
+
1200
+ // Copy engine-core for shared components, CSS, and plugins (@core/* imports)
1201
+ cpSync(ENGINE_CORE_DIR, join(outDir, "engine-core"), { recursive: true });
1202
+
1203
+ // Patch tsconfig so @core/* resolves to the co-located engine-core copy
1204
+ const outTsconfigPath = join(outDir, "tsconfig.json");
1205
+ if (existsSync(outTsconfigPath)) {
1206
+ const tsconfigContent = readFileSync(outTsconfigPath, "utf-8");
1207
+ writeFileSync(outTsconfigPath, tsconfigContent.replace('"../engine-core/*"', '"./engine-core/*"'), "utf-8");
1208
+ }
1196
1209
  console.log("📦 Copied engine files");
1197
1210
 
1198
1211
  // ── 2. Create additional directories ─────────────────────────────────────
package/src/cli.ts CHANGED
@@ -266,7 +266,7 @@ function prepareRuntimeOutDir(docsOutDir: string): string {
266
266
 
267
267
  async function buildStatic(outDir: string, docsDir: string) {
268
268
  await new Promise<void>((res, rej) => {
269
- const child = spawn("node", ["_server.mjs", "build"], {
269
+ const child = spawn(process.execPath, ["_server.mjs", "build"], {
270
270
  cwd: outDir,
271
271
  stdio: "inherit",
272
272
  env: engineEnv(docsDir),
@@ -491,8 +491,14 @@ async function buildSite(docsDir: string) {
491
491
  // ── preview-server ───────────────────────────────────────────────────────────────
492
492
 
493
493
  const PREVIEW_ENGINE_DIR = (() => {
494
- const dev = join(PACKAGE_ROOT, "src", "preview-engine");
495
- const packaged = join(dirname(__filename), "preview-engine");
494
+ const dev = join(PACKAGE_ROOT, "src", "engine");
495
+ const packaged = join(dirname(__filename), "engine");
496
+ return existsSync(dev) ? dev : packaged;
497
+ })();
498
+
499
+ const ENGINE_CORE_DIR = (() => {
500
+ const dev = join(PACKAGE_ROOT, "src", "engine-core");
501
+ const packaged = join(dirname(__filename), "engine-core");
496
502
  return existsSync(dev) ? dev : packaged;
497
503
  })();
498
504
 
@@ -505,16 +511,50 @@ function previewServerEnv(): NodeJS.ProcessEnv {
505
511
  }
506
512
 
507
513
  async function previewServer(port: number) {
508
- const runtimeDir = join(tmpdir(), "velu-preview-out");
514
+ const runtimeDir = join(PACKAGE_ROOT, ".preview-out");
509
515
 
510
- // Clean and copy preview engine to runtime dir
516
+ // Clean and copy MAIN ENGINE to runtime dir
511
517
  try { rmSync(runtimeDir, { recursive: true, force: true }); } catch {}
512
518
  copyDirMerge(PREVIEW_ENGINE_DIR, runtimeDir);
513
519
 
514
- // Symlink node_modules so Next.js can resolve dependencies (fumadocs-mdx, etc.)
520
+ // Copy engine-core for shared components, CSS, and plugins (@core/* imports)
521
+ copyDirMerge(ENGINE_CORE_DIR, join(runtimeDir, "engine-core"));
522
+
523
+ // Activate preview routes: move _preview/* to app root
524
+ const appDir = join(runtimeDir, "app");
525
+ const previewDir = join(appDir, "_preview");
526
+
527
+ // Remove production-only routes that don't apply to preview
528
+ for (const dir of ["(docs)", "sitemap.xml", "robots.txt", "og", "llms-file", "llms-full-file", "md-file", "rss-file", "_md"]) {
529
+ try { rmSync(join(appDir, dir), { recursive: true, force: true }); } catch {}
530
+ }
531
+ // Remove production root layout/page (preview has its own in _preview/)
532
+ for (const file of ["layout.tsx", "page.tsx"]) {
533
+ try { rmSync(join(appDir, file), { force: true }); } catch {}
534
+ }
535
+
536
+ // Move preview routes to app root
537
+ if (existsSync(previewDir)) {
538
+ copyDirMerge(previewDir, appDir);
539
+ rmSync(previewDir, { recursive: true, force: true });
540
+ }
541
+
542
+ // Create velu-theme.css that imports fumadocs neutral theme as baseline
543
+ // (per-session themes override via <style> tags injected in session layout)
544
+ writeFileSync(join(appDir, "velu-theme.css"), "@import 'fumadocs-ui/css/neutral.css';\n", "utf-8");
545
+
546
+ // Patch tsconfig so @core/* resolves to the co-located engine-core copy
547
+ const runtimeTsconfig = join(runtimeDir, "tsconfig.json");
548
+ if (existsSync(runtimeTsconfig)) {
549
+ const tsconfigContent = readFileSync(runtimeTsconfig, "utf-8");
550
+ writeFileSync(runtimeTsconfig, tsconfigContent.replace('"../engine-core/*"', '"./engine-core/*"'), "utf-8");
551
+ }
552
+
553
+ // Link node_modules so Next.js can resolve dependencies (fumadocs-mdx, etc.)
554
+ // Use 'junction' on Windows (no elevation required), symlink on other platforms
515
555
  const runtimeNodeModules = join(runtimeDir, "node_modules");
516
556
  if (!existsSync(runtimeNodeModules)) {
517
- symlinkSync(NODE_MODULES_PATH, runtimeNodeModules);
557
+ symlinkSync(NODE_MODULES_PATH, runtimeNodeModules, "junction");
518
558
  }
519
559
 
520
560
  console.log(` Starting preview server on port ${port}...`);
@@ -524,11 +564,13 @@ async function previewServer(port: number) {
524
564
  // Resolve the next binary from the CLI's own node_modules
525
565
  const nextBinPath = join(NODE_MODULES_PATH, "next", "dist", "bin", "next");
526
566
 
527
- const child = spawn("node", [nextBinPath, "dev", "--port", String(port), "--turbopack"], {
567
+ const child = spawn(process.execPath, [nextBinPath, "dev", "--port", String(port), "--turbopack"], {
528
568
  cwd: runtimeDir,
529
569
  stdio: ["inherit", "pipe", "inherit"],
530
570
  env: {
531
571
  ...previewServerEnv(),
572
+ // Align source.config.ts and content-generator on the same content dir
573
+ PREVIEW_CONTENT_DIR: process.env.PREVIEW_CONTENT_DIR || "./content",
532
574
  WATCHPACK_POLLING: process.env.WATCHPACK_POLLING || "true",
533
575
  },
534
576
  });
@@ -571,7 +613,7 @@ function warmupRoutes(port: number) {
571
613
  // ── run ──────────────────────────────────────────────────────────────────────────
572
614
 
573
615
  function spawnServer(outDir: string, command: string, port: number, docsDir: string) {
574
- const child = spawn("node", ["_server.mjs", command, "--port", String(port)], {
616
+ const child = spawn(process.execPath, ["_server.mjs", command, "--port", String(port)], {
575
617
  cwd: outDir,
576
618
  stdio: "inherit",
577
619
  env: engineEnv(docsDir),