@aravindc26/velu 0.12.8 → 0.12.10
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/package.json +1 -1
- package/src/build.ts +13 -0
- package/src/cli.ts +60 -11
- package/src/engine/app/(docs)/[...slug]/layout.tsx +21 -537
- package/src/engine/app/_preview/[sessionId]/[...slug]/layout.tsx +96 -0
- package/src/engine/app/_preview/[sessionId]/[...slug]/page.tsx +298 -0
- package/src/engine/app/_preview/[sessionId]/layout.tsx +56 -0
- package/src/{preview-engine/app → engine/app/_preview}/[sessionId]/page.tsx +7 -3
- package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/assets/[...path]/route.ts +1 -1
- package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/init/route.ts +2 -2
- package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/route.ts +3 -3
- package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/sync/route.ts +2 -2
- package/src/{preview-engine/app → engine/app/_preview}/layout.tsx +4 -1
- package/src/engine/app/global.css +0 -3623
- package/src/engine/app/layout.tsx +4 -3
- package/src/engine/components/sidebar-links.tsx +11 -5
- package/src/engine/lib/docs-layout.tsx +605 -0
- package/src/engine/lib/layout.shared.ts +7 -7
- package/src/engine/lib/preview-config.ts +129 -0
- package/src/{preview-engine/lib/content-generator.ts → engine/lib/preview-content.ts} +238 -42
- package/src/engine/lib/source.ts +80 -97
- package/src/engine/lib/velu.ts +79 -55
- package/src/engine/mdx-components.tsx +14 -650
- package/src/engine/source.config.ts +11 -89
- package/src/engine/tsconfig.json +1 -0
- package/src/engine-core/components/assistant.tsx +361 -0
- package/src/engine-core/components/banner.tsx +80 -0
- package/src/engine-core/components/changelog-filters.tsx +114 -0
- package/src/engine-core/components/code-group.tsx +383 -0
- package/src/engine-core/components/color.tsx +118 -0
- package/src/engine-core/components/copy-page.tsx +223 -0
- package/src/engine-core/components/dropdown-switcher.tsx +142 -0
- package/src/engine-core/components/expandable.tsx +77 -0
- package/src/engine-core/components/header-tab-link.tsx +43 -0
- package/src/engine-core/components/icon.tsx +136 -0
- package/src/engine-core/components/image-zoom-fallback.tsx +147 -0
- package/src/engine-core/components/image.tsx +111 -0
- package/src/engine-core/components/lang-switcher.tsx +101 -0
- package/src/engine-core/components/manual-api-playground.tsx +154 -0
- package/src/engine-core/components/mermaid.tsx +142 -0
- package/src/engine-core/components/openapi-toc-sync.tsx +59 -0
- package/src/engine-core/components/openapi.tsx +1682 -0
- package/src/engine-core/components/page-feedback-api.test.ts +83 -0
- package/src/engine-core/components/page-feedback-api.ts +89 -0
- package/src/engine-core/components/page-feedback.tsx +200 -0
- package/src/engine-core/components/product-switcher.tsx +107 -0
- package/src/engine-core/components/prompt.tsx +90 -0
- package/src/engine-core/components/providers.tsx +21 -0
- package/src/engine-core/components/search.tsx +318 -0
- package/src/engine-core/components/sidebar-links.tsx +54 -0
- package/src/engine-core/components/synced-tabs.tsx +57 -0
- package/src/engine-core/components/theme-toggle.tsx +39 -0
- package/src/engine-core/components/toc-examples.tsx +110 -0
- package/src/engine-core/components/version-switcher.tsx +95 -0
- package/src/engine-core/components/view.tsx +344 -0
- package/src/engine-core/css/assistant.css +326 -0
- package/src/engine-core/css/copy-page.css +206 -0
- package/src/engine-core/css/search.css +142 -0
- package/src/engine-core/css/shared.css +3628 -0
- package/src/engine-core/lib/remark-plugins.ts +102 -0
- package/src/engine-core/lib/source-plugins.ts +105 -0
- package/src/engine-core/mdx-components.tsx +654 -0
- package/src/engine-core/types.ts +49 -0
- package/src/preview-engine/app/[sessionId]/[...slug]/page.tsx +0 -41
- package/src/preview-engine/app/[sessionId]/layout.tsx +0 -26
- package/src/preview-engine/app/global.css +0 -29
- package/src/preview-engine/lib/session-config.ts +0 -86
- package/src/preview-engine/lib/session-layout.ts +0 -190
- package/src/preview-engine/lib/source.ts +0 -60
- package/src/preview-engine/next.config.mjs +0 -20
- package/src/preview-engine/postcss.config.mjs +0 -8
- package/src/preview-engine/source.config.ts +0 -26
- package/src/preview-engine/tsconfig.json +0 -32
- package/src/preview-engine/tsconfig.tsbuildinfo +0 -1
- /package/src/{preview-engine/app → engine/app/_preview}/page.tsx +0 -0
- /package/src/{preview-engine/lib/auth.ts → engine/lib/preview-auth.ts} +0 -0
package/package.json
CHANGED
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(
|
|
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", "
|
|
495
|
-
const packaged = join(dirname(__filename), "
|
|
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,57 @@ function previewServerEnv(): NodeJS.ProcessEnv {
|
|
|
505
511
|
}
|
|
506
512
|
|
|
507
513
|
async function previewServer(port: number) {
|
|
508
|
-
|
|
514
|
+
// Allow Docker to pre-populate the runtime dir via PREVIEW_RUNTIME_DIR
|
|
515
|
+
const runtimeDir = process.env.PREVIEW_RUNTIME_DIR || join(PACKAGE_ROOT, ".preview-out");
|
|
516
|
+
|
|
517
|
+
// Skip engine copy if the runtime dir is already set up (e.g. Docker pre-copy)
|
|
518
|
+
const runtimeAppDir = join(runtimeDir, "app");
|
|
519
|
+
if (existsSync(runtimeAppDir) && process.env.PREVIEW_RUNTIME_DIR) {
|
|
520
|
+
// Runtime dir already exists and was explicitly set — skip copy
|
|
521
|
+
} else {
|
|
522
|
+
// Clean and copy MAIN ENGINE to runtime dir
|
|
523
|
+
try { rmSync(runtimeDir, { recursive: true, force: true }); } catch {}
|
|
524
|
+
copyDirMerge(PREVIEW_ENGINE_DIR, runtimeDir);
|
|
525
|
+
|
|
526
|
+
// Copy engine-core for shared components, CSS, and plugins (@core/* imports)
|
|
527
|
+
copyDirMerge(ENGINE_CORE_DIR, join(runtimeDir, "engine-core"));
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// Activate preview routes: move _preview/* to app root (idempotent — skips if already done)
|
|
531
|
+
const appDir = join(runtimeDir, "app");
|
|
532
|
+
const previewDir = join(appDir, "_preview");
|
|
509
533
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
534
|
+
if (existsSync(previewDir)) {
|
|
535
|
+
// Remove production-only routes that don't apply to preview
|
|
536
|
+
for (const dir of ["(docs)", "sitemap.xml", "robots.txt", "og", "llms-file", "llms-full-file", "md-file", "rss-file", "_md"]) {
|
|
537
|
+
try { rmSync(join(appDir, dir), { recursive: true, force: true }); } catch {}
|
|
538
|
+
}
|
|
539
|
+
// Remove production root layout/page (preview has its own in _preview/)
|
|
540
|
+
for (const file of ["layout.tsx", "page.tsx"]) {
|
|
541
|
+
try { rmSync(join(appDir, file), { force: true }); } catch {}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
// Move preview routes to app root
|
|
545
|
+
copyDirMerge(previewDir, appDir);
|
|
546
|
+
rmSync(previewDir, { recursive: true, force: true });
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Create velu-theme.css that imports fumadocs neutral theme as baseline
|
|
550
|
+
// (per-session themes override via <style> tags injected in session layout)
|
|
551
|
+
writeFileSync(join(appDir, "velu-theme.css"), "@import 'fumadocs-ui/css/neutral.css';\n", "utf-8");
|
|
552
|
+
|
|
553
|
+
// Patch tsconfig so @core/* resolves to the co-located engine-core copy
|
|
554
|
+
const runtimeTsconfig = join(runtimeDir, "tsconfig.json");
|
|
555
|
+
if (existsSync(runtimeTsconfig)) {
|
|
556
|
+
const tsconfigContent = readFileSync(runtimeTsconfig, "utf-8");
|
|
557
|
+
writeFileSync(runtimeTsconfig, tsconfigContent.replace('"../engine-core/*"', '"./engine-core/*"'), "utf-8");
|
|
558
|
+
}
|
|
513
559
|
|
|
514
|
-
//
|
|
560
|
+
// Link node_modules so Next.js can resolve dependencies (fumadocs-mdx, etc.)
|
|
561
|
+
// Use 'junction' on Windows (no elevation required), symlink on other platforms
|
|
515
562
|
const runtimeNodeModules = join(runtimeDir, "node_modules");
|
|
516
563
|
if (!existsSync(runtimeNodeModules)) {
|
|
517
|
-
symlinkSync(NODE_MODULES_PATH, runtimeNodeModules);
|
|
564
|
+
symlinkSync(NODE_MODULES_PATH, runtimeNodeModules, "junction");
|
|
518
565
|
}
|
|
519
566
|
|
|
520
567
|
console.log(` Starting preview server on port ${port}...`);
|
|
@@ -524,11 +571,13 @@ async function previewServer(port: number) {
|
|
|
524
571
|
// Resolve the next binary from the CLI's own node_modules
|
|
525
572
|
const nextBinPath = join(NODE_MODULES_PATH, "next", "dist", "bin", "next");
|
|
526
573
|
|
|
527
|
-
const child = spawn(
|
|
574
|
+
const child = spawn(process.execPath, [nextBinPath, "dev", "--port", String(port), "--turbopack"], {
|
|
528
575
|
cwd: runtimeDir,
|
|
529
576
|
stdio: ["inherit", "pipe", "inherit"],
|
|
530
577
|
env: {
|
|
531
578
|
...previewServerEnv(),
|
|
579
|
+
// Align source.config.ts and content-generator on the same content dir
|
|
580
|
+
PREVIEW_CONTENT_DIR: process.env.PREVIEW_CONTENT_DIR || "./content",
|
|
532
581
|
WATCHPACK_POLLING: process.env.WATCHPACK_POLLING || "true",
|
|
533
582
|
},
|
|
534
583
|
});
|
|
@@ -571,7 +620,7 @@ function warmupRoutes(port: number) {
|
|
|
571
620
|
// ── run ──────────────────────────────────────────────────────────────────────────
|
|
572
621
|
|
|
573
622
|
function spawnServer(outDir: string, command: string, port: number, docsDir: string) {
|
|
574
|
-
const child = spawn(
|
|
623
|
+
const child = spawn(process.execPath, ["_server.mjs", command, "--port", String(port)], {
|
|
575
624
|
cwd: outDir,
|
|
576
625
|
stdio: "inherit",
|
|
577
626
|
env: engineEnv(docsDir),
|