@squadbase/vantage 0.0.1

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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/chunk-73J5ZD4C.js +96 -0
  4. package/dist/chunk-73J5ZD4C.js.map +1 -0
  5. package/dist/chunk-ATYZ45XL.js +19 -0
  6. package/dist/chunk-ATYZ45XL.js.map +1 -0
  7. package/dist/chunk-B7LLBNLV.js +23 -0
  8. package/dist/chunk-B7LLBNLV.js.map +1 -0
  9. package/dist/chunk-ZGDU5YLH.js +753 -0
  10. package/dist/chunk-ZGDU5YLH.js.map +1 -0
  11. package/dist/cli.d.ts +1 -0
  12. package/dist/cli.js +765 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/client/index.d.ts +45 -0
  15. package/dist/client/index.js +141 -0
  16. package/dist/client/index.js.map +1 -0
  17. package/dist/define-page-B6y9TOfZ.d.ts +44 -0
  18. package/dist/index.d.ts +15 -0
  19. package/dist/index.js +13 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/query/index.d.ts +11 -0
  22. package/dist/query/index.js +4 -0
  23. package/dist/query/index.js.map +1 -0
  24. package/dist/router/index.d.ts +36 -0
  25. package/dist/router/index.js +27 -0
  26. package/dist/router/index.js.map +1 -0
  27. package/dist/server/index.d.ts +53 -0
  28. package/dist/server/index.js +3 -0
  29. package/dist/server/index.js.map +1 -0
  30. package/dist/server/node.d.ts +35 -0
  31. package/dist/server/node.js +84 -0
  32. package/dist/server/node.js.map +1 -0
  33. package/dist/ui/index.d.ts +217 -0
  34. package/dist/ui/index.js +616 -0
  35. package/dist/ui/index.js.map +1 -0
  36. package/dist/vite/index.d.ts +15 -0
  37. package/dist/vite/index.js +5 -0
  38. package/dist/vite/index.js.map +1 -0
  39. package/package.json +108 -0
  40. package/registry/blocks/sales-overview.tsx +37 -0
  41. package/registry/ui/data-table.tsx +115 -0
  42. package/theme.css +101 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/util.ts","../src/cli/add.ts","../src/core/diagnostics.ts","../src/cli/build.ts","../src/cli/check.ts","../src/cli/dev.ts","../src/cli/doctor.ts","../src/cli/preview.ts","../src/cli/routes.ts","../src/cli/upgrade.ts","../src/cli.ts"],"names":["path","fs","pc","require","rel","viteBuild","esbuildBuild","loadEnv","createRequire"],"mappings":"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","file":"cli.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport pc from \"picocolors\"\nimport { PAGE_EXTENSIONS } from \"../core/constants.js\"\nimport type { Diagnostic } from \"../core/types.js\"\n\n/** Parsed CLI arguments. */\nexport interface ParsedArgs {\n positionals: string[]\n flags: Record<string, string | boolean>\n}\n\n/** Flags that never take a value, so they don't swallow the next token. */\nconst BOOLEAN_FLAGS = new Set([\"json\", \"help\", \"force\", \"verbose\", \"version\", \"h\", \"v\"])\n\n/** Minimal argv parser: `--json`, `--port 3000`, `--port=3000`, `-v`, positionals. */\nexport function parseArgs(argv: string[]): ParsedArgs {\n const positionals: string[] = []\n const flags: Record<string, string | boolean> = {}\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]!\n if (arg.startsWith(\"--\")) {\n const eq = arg.indexOf(\"=\")\n if (eq !== -1) {\n flags[arg.slice(2, eq)] = arg.slice(eq + 1)\n continue\n }\n const key = arg.slice(2)\n if (BOOLEAN_FLAGS.has(key)) {\n flags[key] = true\n continue\n }\n const next = argv[i + 1]\n if (next !== undefined && !next.startsWith(\"-\")) {\n flags[key] = next\n i++\n } else {\n flags[key] = true\n }\n } else if (arg.length > 1 && arg.startsWith(\"-\") && !/^-\\d/.test(arg)) {\n // Single-dash short flags, e.g. `-v`, `-h` (each char is a boolean).\n for (const ch of arg.slice(1)) flags[ch] = true\n } else {\n positionals.push(arg)\n }\n }\n return { positionals, flags }\n}\n\n/** Parse a `--port` flag value into a valid port, falling back to a default. */\nexport function parsePort(value: string | boolean | undefined, fallback: number): number {\n if (typeof value === \"string\") {\n const n = Number(value)\n if (Number.isInteger(n) && n > 0 && n < 65536) return n\n }\n return fallback\n}\n\n/** Resolve the project root, honoring `--root`, defaulting to cwd. */\nexport function resolveRoot(flags: Record<string, string | boolean>): string {\n const raw = typeof flags.root === \"string\" ? flags.root : process.cwd()\n return path.resolve(raw)\n}\n\n/**\n * Resolve a positional path to a quick-run project root.\n * A directory → itself; a page file (.tsx/.jsx) → its parent dir; else null.\n */\nexport function resolveQuickRoot(target: string): string | null {\n try {\n const abs = path.resolve(target)\n const stat = fs.statSync(abs)\n if (stat.isDirectory()) return abs\n if (stat.isFile() && PAGE_EXTENSIONS.some((ext) => abs.endsWith(ext))) {\n return path.dirname(abs)\n }\n } catch {\n // statSync throws when the path does not exist → null (not a quick target)\n }\n return null\n}\n\nexport const log = {\n info: (msg: string) => console.log(msg),\n step: (msg: string) => console.log(pc.cyan(\"→ \") + msg),\n ok: (msg: string) => console.log(pc.green(\"✓ \") + msg),\n warn: (msg: string) => console.log(pc.yellow(\"! \") + msg),\n error: (msg: string) => console.error(pc.red(\"✗ \") + msg),\n brand: (msg: string) => console.log(pc.bold(pc.magenta(\"vantage \")) + msg),\n}\n\n/** Print diagnostics as human-readable text. */\nexport function printDiagnostics(diags: Diagnostic[]): void {\n for (const d of diags) {\n const badge =\n d.severity === \"error\" ? pc.red(pc.bold(\" ERROR \")) : pc.yellow(pc.bold(\" WARN \"))\n console.log(`${badge} ${pc.dim(d.code)} ${d.message}`)\n if (d.files?.length) console.log(` ${pc.dim(\"files:\")} ${d.files.join(\", \")}`)\n if (d.fix) console.log(` ${pc.dim(\"fix:\")} ${d.fix}`)\n }\n}\n\n/** Emit a JSON payload to stdout (for agent consumption). */\nexport function printJson(payload: unknown): void {\n process.stdout.write(JSON.stringify(payload, null, 2) + \"\\n\")\n}\n\n/** Read the vantage package version. */\nexport function frameworkVersion(): string {\n try {\n // dist/cli.js (and shared chunks) live in dist/, so package.json is one up.\n const url = new URL(\"../package.json\", import.meta.url)\n const pkg = JSON.parse(fs.readFileSync(url, \"utf8\")) as { version: string }\n return pkg.version\n } catch {\n return \"0.0.0\"\n }\n}\n\nexport function fileExists(p: string): boolean {\n try {\n return fs.existsSync(p)\n } catch {\n return false\n }\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { log, type ParsedArgs } from \"./util.js\"\n\nconst PKG = \"@squadbase/vantage\"\n\nfunction toPascalCase(segment: string): string {\n const cleaned = segment.replace(/\\[|\\]|\\./g, \"\").replace(/\\.\\.\\./g, \"\")\n const words = cleaned.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n const pascal = words.map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(\"\")\n return /^[A-Za-z]/.test(pascal) ? pascal : \"Page\"\n}\n\nfunction pageTemplate(name: string): string {\n const last = name.split(\"/\").pop() ?? name\n const component = last === \"index\" ? toPascalCase(name.split(\"/\").slice(-2)[0] ?? \"Home\") : toPascalCase(last)\n const title = last.replace(/-/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase())\n return `import { definePage } from \"${PKG}\"\n\nexport const page = definePage({ title: ${JSON.stringify(title)} })\n\nexport default function ${component}() {\n return (\n <main className=\"p-6\">\n <h1 className=\"text-2xl font-semibold\">${title}</h1>\n </main>\n )\n}\n`\n}\n\nfunction apiTemplate(): string {\n return `import type { ApiContext } from \"${PKG}/server\"\n\nexport async function GET({ request, params }: ApiContext) {\n return Response.json({ ok: true, params })\n}\n`\n}\n\nfunction resolveRegistryDir(root: string): string | null {\n try {\n const require = createRequire(path.join(root, \"noop.js\"))\n const pkgJson = require.resolve(`${PKG}/package.json`)\n return path.join(path.dirname(pkgJson), \"registry\")\n } catch {\n return null\n }\n}\n\nfunction copyFromRegistry(root: string, kind: \"ui\" | \"block\", name: string, force: boolean): number {\n const registry = resolveRegistryDir(root)\n if (!registry) {\n log.error(\"Could not resolve the Vantage registry.\")\n return 1\n }\n const sub = kind === \"ui\" ? \"ui\" : \"blocks\"\n const src = path.join(registry, sub, `${name}.tsx`)\n if (!fs.existsSync(src)) {\n const available = fs.existsSync(path.join(registry, sub))\n ? fs.readdirSync(path.join(registry, sub)).map((f) => f.replace(/\\.tsx$/, \"\"))\n : []\n log.error(`Unknown ${kind} \"${name}\". Available: ${available.join(\", \") || \"(none)\"}`)\n return 1\n }\n const destDir = path.join(root, \"components\", kind === \"ui\" ? \"ui\" : \"blocks\")\n const dest = path.join(destDir, `${name}.tsx`)\n if (fs.existsSync(dest) && !force) {\n log.error(`${path.relative(root, dest)} already exists. Use --force to overwrite.`)\n return 1\n }\n fs.mkdirSync(destDir, { recursive: true })\n fs.copyFileSync(src, dest)\n log.ok(`Added ${path.relative(root, dest)}`)\n return 0\n}\n\n/** `vantage add <page|api|ui|block> <name>` */\nexport async function add(root: string, args: ParsedArgs): Promise<number> {\n const kind = args.positionals[1]\n const name = args.positionals[2]\n const force = Boolean(args.flags.force)\n\n if (!kind || !name) {\n log.error(\"Usage: vantage add <page|api|ui|block> <name>\")\n return 1\n }\n\n if (kind === \"page\") {\n const file = path.join(root, name.endsWith(\".tsx\") ? name : `${name}.tsx`)\n if (fs.existsSync(file) && !force) {\n log.error(`${path.relative(root, file)} already exists. Use --force to overwrite.`)\n return 1\n }\n fs.mkdirSync(path.dirname(file), { recursive: true })\n fs.writeFileSync(file, pageTemplate(name))\n log.ok(`Added page ${path.relative(root, file)}`)\n return 0\n }\n\n if (kind === \"api\") {\n const rel = name.startsWith(\"server/api/\") ? name : path.join(\"server\", \"api\", name)\n const file = path.join(root, rel.endsWith(\".ts\") ? rel : `${rel}.ts`)\n if (fs.existsSync(file) && !force) {\n log.error(`${path.relative(root, file)} already exists. Use --force to overwrite.`)\n return 1\n }\n fs.mkdirSync(path.dirname(file), { recursive: true })\n fs.writeFileSync(file, apiTemplate())\n log.ok(`Added API ${path.relative(root, file)}`)\n return 0\n }\n\n if (kind === \"ui\") return copyFromRegistry(root, \"ui\", name, force)\n if (kind === \"block\") return copyFromRegistry(root, \"block\", name, force)\n\n log.error(`Unknown add target \"${kind}\". Use one of: page, api, ui, block.`)\n return 1\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { API_METHODS, FORBIDDEN_FILES, PUBLIC_ENV_PREFIX } from \"./constants.js\"\nimport type { Diagnostic, RouteModel } from \"./types.js\"\n\n/** Vite/env identifiers that are always allowed on `import.meta.env`. */\nconst ALLOWED_ENV_KEYS = new Set([\"MODE\", \"DEV\", \"PROD\", \"SSR\", \"BASE_URL\", \"PUBLIC_\"])\n\n/**\n * Strip block and line comments so commented-out code doesn't produce false\n * positives (or hide real issues). Naive but adequate for presence checks:\n * URLs (`http://`) are preserved via the `[^:]` guard before `//`.\n */\nfunction stripComments(src: string): string {\n return src.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\").replace(/(^|[^:\"'`\\\\])\\/\\/[^\\n]*/g, \"$1\")\n}\n\n/** Whether a module has a default export (direct, aliased, or re-exported). */\nfunction hasDefaultExport(src: string): boolean {\n return (\n /\\bexport\\s+default\\b/.test(src) ||\n /\\bexport\\s*\\{[^}]*\\bas\\s+default\\b[^}]*\\}/.test(src) ||\n /\\bexport\\s*\\{[^}]*\\bdefault\\b[^}]*\\}\\s*from\\b/.test(src)\n )\n}\n\n/** Collect client-side source files (everything outside server/ and generated dirs). */\nfunction collectClientFiles(root: string): string[] {\n const out: string[] = []\n const skipDirs = new Set([\"node_modules\", \".vantage\", \"dist\", \"server\", \"public\"])\n const walk = (dir: string) => {\n let entries: fs.Dirent[]\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true })\n } catch {\n return\n }\n for (const entry of entries) {\n if (entry.name.startsWith(\".\")) continue\n const abs = path.join(dir, entry.name)\n if (entry.isDirectory()) {\n if (skipDirs.has(entry.name)) continue\n walk(abs)\n } else if (/\\.(tsx?|jsx?)$/.test(entry.name)) {\n out.push(abs)\n }\n }\n }\n walk(root)\n return out\n}\n\nfunction rel(root: string, abs: string): string {\n return path.relative(root, abs).split(path.sep).join(\"/\")\n}\n\n/** Detect forbidden config files at the project root. */\nfunction checkForbiddenFiles(root: string): Diagnostic[] {\n const diags: Diagnostic[] = []\n let entries: string[] = []\n try {\n entries = fs.readdirSync(root)\n } catch {\n return diags\n }\n for (const name of entries) {\n for (const rule of FORBIDDEN_FILES) {\n if (rule.pattern.test(name)) {\n diags.push({\n code: \"FORBIDDEN_FILE\",\n severity: \"error\",\n message: `${rule.label} file \"${name}\" is not allowed in a Vantage project.`,\n files: [name],\n fix: rule.remedy,\n })\n }\n }\n }\n return diags\n}\n\n/** Detect two page files resolving to the same route path. */\nfunction checkRouteConflicts(model: RouteModel): Diagnostic[] {\n const byPath = new Map<string, string[]>()\n for (const page of model.pages) {\n const list = byPath.get(page.routePath) ?? []\n list.push(page.file)\n byPath.set(page.routePath, list)\n }\n const diags: Diagnostic[] = []\n for (const [routePath, files] of byPath) {\n if (files.length > 1) {\n diags.push({\n code: \"ROUTE_CONFLICT\",\n severity: \"error\",\n message: `${files.length} files resolve to ${routePath}`,\n files,\n fix: \"Rename or remove one route file so each route is unique.\",\n })\n }\n }\n return diags\n}\n\n/** Ensure every page module has a default export. */\nfunction checkPageExports(root: string, model: RouteModel): Diagnostic[] {\n const diags: Diagnostic[] = []\n const pageFiles = [\n ...model.pages.map((p) => p.absFile),\n ...model.layouts.map((l) => l.absFile),\n model.notFound && path.join(root, model.notFound),\n model.error && path.join(root, model.error),\n ].filter((x): x is string => Boolean(x))\n\n for (const abs of pageFiles) {\n let src: string\n try {\n src = stripComments(fs.readFileSync(abs, \"utf8\"))\n } catch {\n continue\n }\n if (!hasDefaultExport(src)) {\n diags.push({\n code: \"MISSING_DEFAULT_EXPORT\",\n severity: \"error\",\n message: `Page module has no default export.`,\n files: [rel(root, abs)],\n fix: \"A page/layout must `export default` a React component.\",\n })\n }\n }\n return diags\n}\n\n/** Ensure every API module exports at least one valid HTTP method handler. */\nfunction checkApiExports(root: string, model: RouteModel): Diagnostic[] {\n const diags: Diagnostic[] = []\n for (const api of model.apis) {\n let src: string\n try {\n src = stripComments(fs.readFileSync(api.absFile, \"utf8\"))\n } catch {\n continue\n }\n const exported = API_METHODS.filter((m) =>\n new RegExp(`export\\\\s+(async\\\\s+)?(function|const|let|var)\\\\s+${m}\\\\b`).test(src) ||\n new RegExp(`export\\\\s*\\\\{[^}]*\\\\b${m}\\\\b[^}]*\\\\}`).test(src),\n )\n if (exported.length === 0) {\n // Common mistake: lowercase method names.\n const lower = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"options\"].filter((m) =>\n new RegExp(`export\\\\s+(async\\\\s+)?function\\\\s+${m}\\\\b`).test(src),\n )\n diags.push({\n code: \"INVALID_API_EXPORT\",\n severity: \"error\",\n message: `API module exports no HTTP method handler${\n lower.length ? ` (found lowercase \"${lower.join(\", \")}\")` : \"\"\n }.`,\n files: [api.file],\n fix: `Export one of: ${API_METHODS.join(\", \")} (uppercase).`,\n })\n }\n }\n return diags\n}\n\n/** Flag client files that import from server/. */\nfunction checkClientServerBoundary(root: string): Diagnostic[] {\n const diags: Diagnostic[] = []\n const importRe = /(?:import|export)[^'\"]*?from\\s+[\"']([^\"']+)[\"']|import\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g\n for (const abs of collectClientFiles(root)) {\n let src: string\n try {\n src = stripComments(fs.readFileSync(abs, \"utf8\"))\n } catch {\n continue\n }\n let m: RegExpExecArray | null\n importRe.lastIndex = 0\n while ((m = importRe.exec(src))) {\n const spec = m[1] ?? m[2]\n if (!spec) continue\n const isServer =\n spec === \"server\" ||\n spec.startsWith(\"server/\") ||\n /(^|\\/)\\.\\.?\\/server(\\/|$)/.test(spec) ||\n /\\/server\\//.test(spec)\n if (isServer) {\n diags.push({\n code: \"CLIENT_IMPORTS_SERVER\",\n severity: \"error\",\n message: `Client module imports from server/ (\"${spec}\").`,\n files: [rel(root, abs)],\n fix: \"server/ code must never be imported by the client. Move shared code to lib/.\",\n })\n }\n }\n }\n return diags\n}\n\n/** Flag `import.meta.env.X` where X is not PUBLIC_ prefixed. */\nfunction checkPublicEnv(root: string): Diagnostic[] {\n const diags: Diagnostic[] = []\n const envRe = /import\\.meta\\.env\\.([A-Za-z_][A-Za-z0-9_]*)/g\n for (const abs of collectClientFiles(root)) {\n let src: string\n try {\n src = stripComments(fs.readFileSync(abs, \"utf8\"))\n } catch {\n continue\n }\n let m: RegExpExecArray | null\n envRe.lastIndex = 0\n const bad = new Set<string>()\n while ((m = envRe.exec(src))) {\n const key = m[1]!\n if (ALLOWED_ENV_KEYS.has(key)) continue\n if (key.startsWith(PUBLIC_ENV_PREFIX)) continue\n bad.add(key)\n }\n for (const key of bad) {\n diags.push({\n code: \"PUBLIC_ENV_MISUSE\",\n severity: \"warning\",\n message: `Client reads non-public env \"import.meta.env.${key}\".`,\n files: [rel(root, abs)],\n fix: `Only ${PUBLIC_ENV_PREFIX}* vars reach the client. Read secrets via ApiContext.env in server/.`,\n })\n }\n }\n return diags\n}\n\n/** Run all static diagnostics for a project. */\nexport function runDiagnostics(root: string, model: RouteModel): Diagnostic[] {\n return [\n ...checkForbiddenFiles(root),\n ...checkRouteConflicts(model),\n ...checkPageExports(root, model),\n ...checkApiExports(root, model),\n ...checkClientServerBoundary(root),\n ...checkPublicEnv(root),\n ]\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { build as viteBuild, loadEnv } from \"vite\"\nimport { build as esbuildBuild } from \"esbuild\"\nimport { MANIFEST_SCHEMA_VERSION, VANTAGE_DIR } from \"../core/constants.js\"\nimport { runDiagnostics } from \"../core/diagnostics.js\"\nimport { scanProject } from \"../core/scan.js\"\nimport type { RouteModel } from \"../core/types.js\"\nimport { vantagePlugin } from \"../vite/index.js\"\nimport { log, printDiagnostics, type ParsedArgs } from \"./util.js\"\n\nconst SERVER_ENTRY = `// AUTO-GENERATED by @squadbase/vantage.\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { startNodeServer } from \"@squadbase/vantage/server/node\"\nimport { apiRoutes } from \"./server-routes.gen\"\n\nconst clientDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"../client\")\nstartNodeServer({ apiRoutes, clientDir })\n`\n\n/** `vantage build` — build client and (optionally) server into dist/. */\nexport async function build(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n const errors = runDiagnostics(root, model).filter((d) => d.severity === \"error\")\n if (errors.length) {\n printDiagnostics(errors)\n log.error(\"Fix the errors above before building.\")\n return 1\n }\n\n const mode = \"production\"\n const env = { ...process.env, ...loadEnv(mode, root, \"\") }\n const quiet = Boolean(args.flags.json)\n\n if (!quiet) log.step(\"Building client…\")\n await viteBuild({\n configFile: false,\n root,\n mode,\n plugins: [vantagePlugin({ root, env })],\n logLevel: quiet ? \"silent\" : args.flags.verbose ? \"info\" : \"warn\",\n })\n\n // The HTML input lives in .vantage/, so Vite emits it to dist/client/.vantage/.\n // Hoist it to dist/client/index.html (asset URLs are already root-absolute).\n relocateClientHtml(root)\n\n if (model.hasServer) {\n if (!quiet) log.step(\"Building server…\")\n await buildServer(root)\n }\n\n writeDeployManifest(root, model)\n if (!quiet) log.ok(`Build complete → ${path.relative(process.cwd(), path.join(root, \"dist\")) || \"dist\"}/`)\n\n if (args.flags.json) {\n process.stdout.write(\n JSON.stringify({\n ok: true,\n mode: model.hasServer ? \"fullstack\" : \"spa\",\n output: \"dist\",\n pages: model.pages.length,\n apis: model.apis.length,\n }) + \"\\n\",\n )\n }\n return 0\n}\n\nfunction relocateClientHtml(root: string): void {\n const clientDir = path.join(root, \"dist\", \"client\")\n const nested = path.join(clientDir, VANTAGE_DIR, \"index.html\")\n const target = path.join(clientDir, \"index.html\")\n if (fs.existsSync(nested)) {\n fs.mkdirSync(clientDir, { recursive: true })\n fs.renameSync(nested, target)\n fs.rmSync(path.join(clientDir, VANTAGE_DIR), { recursive: true, force: true })\n }\n}\n\nasync function buildServer(root: string): Promise<void> {\n const vantageDir = path.join(root, VANTAGE_DIR)\n const entry = path.join(vantageDir, \"server-entry.ts\")\n fs.writeFileSync(entry, SERVER_ENTRY)\n await esbuildBuild({\n entryPoints: [entry],\n outfile: path.join(root, \"dist\", \"server\", \"index.mjs\"),\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n target: \"node20\",\n logLevel: \"warning\",\n banner: { js: \"// @squadbase/vantage server bundle\" },\n })\n}\n\nfunction writeDeployManifest(root: string, model: RouteModel): void {\n const dist = path.join(root, \"dist\")\n fs.mkdirSync(dist, { recursive: true })\n const manifest = {\n schemaVersion: MANIFEST_SCHEMA_VERSION,\n mode: model.hasServer ? \"fullstack\" : \"spa\",\n client: \"./client\",\n ...(model.hasServer ? { server: \"./server/index.mjs\" } : {}),\n spaFallback: \"./client/index.html\",\n runtime: \"node\",\n }\n fs.writeFileSync(path.join(dist, \"vantage-manifest.json\"), JSON.stringify(manifest, null, 2) + \"\\n\")\n}\n","import { runDiagnostics } from \"../core/diagnostics.js\"\nimport { scanProject } from \"../core/scan.js\"\nimport { log, printDiagnostics, printJson, type ParsedArgs } from \"./util.js\"\n\n/** `vantage check` — static verification of the project. */\nexport async function check(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n const diags = runDiagnostics(root, model)\n const errors = diags.filter((d) => d.severity === \"error\")\n const warnings = diags.filter((d) => d.severity === \"warning\")\n\n if (args.flags.json) {\n printJson({\n ok: errors.length === 0,\n errorCount: errors.length,\n warningCount: warnings.length,\n diagnostics: diags,\n })\n return errors.length ? 1 : 0\n }\n\n if (diags.length === 0) {\n log.ok(\"No problems found.\")\n return 0\n }\n printDiagnostics(diags)\n console.log(\"\")\n if (errors.length) log.error(`${errors.length} error(s), ${warnings.length} warning(s).`)\n else log.warn(`${warnings.length} warning(s).`)\n return errors.length ? 1 : 0\n}\n","import { createServer, loadEnv } from \"vite\"\nimport { runDiagnostics } from \"../core/diagnostics.js\"\nimport { scanProject } from \"../core/scan.js\"\nimport { vantagePlugin } from \"../vite/index.js\"\nimport { log, parsePort, printDiagnostics, type ParsedArgs } from \"./util.js\"\n\n/** `vantage dev` — start the dev server with HMR and the optional API server. */\nexport async function dev(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n const errors = runDiagnostics(root, model).filter((d) => d.severity === \"error\")\n if (errors.length) {\n printDiagnostics(errors)\n log.error(\"Fix the errors above before starting the dev server.\")\n return 1\n }\n\n const mode = \"development\"\n const env = { ...process.env, ...loadEnv(mode, root, \"\") }\n const port = parsePort(args.flags.port, 5173)\n\n const server = await createServer({\n configFile: false,\n root,\n mode,\n plugins: [vantagePlugin({ root, env })],\n server: { port },\n clearScreen: false,\n })\n\n await server.listen()\n log.brand(\"dev server ready\")\n server.printUrls()\n if (model.hasServer) log.info(\" \" + \"server/api enabled\")\n\n const shutdown = async () => {\n await server.close()\n process.exit(0)\n }\n process.on(\"SIGINT\", shutdown)\n process.on(\"SIGTERM\", shutdown)\n\n // Keep the process alive; the listening server owns the lifecycle.\n return new Promise<number>(() => {})\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { runDiagnostics } from \"../core/diagnostics.js\"\nimport { scanProject } from \"../core/scan.js\"\nimport { frameworkVersion, log, printJson, type ParsedArgs } from \"./util.js\"\n\ninterface Facet {\n name: string\n ok: boolean\n detail: string\n}\n\n/** `vantage doctor` — environment and installation health checks. */\nexport async function doctor(root: string, args: ParsedArgs): Promise<number> {\n const facets: Facet[] = []\n\n const nodeMajor = Number(process.versions.node.split(\".\")[0])\n facets.push({\n name: \"node\",\n ok: nodeMajor >= 20,\n detail: `v${process.versions.node}${nodeMajor >= 20 ? \"\" : \" (requires >= 20)\"}`,\n })\n\n const pkgPath = path.join(root, \"package.json\")\n facets.push({ name: \"package.json\", ok: fs.existsSync(pkgPath), detail: fs.existsSync(pkgPath) ? \"found\" : \"missing\" })\n\n const lockfiles = [\"pnpm-lock.yaml\", \"package-lock.json\", \"yarn.lock\"]\n const lock = lockfiles.find((f) => fs.existsSync(path.join(root, f)) || fs.existsSync(path.join(root, \"..\", f)) || fs.existsSync(path.join(root, \"..\", \"..\", f)))\n facets.push({ name: \"lockfile\", ok: Boolean(lock), detail: lock ?? \"none found\" })\n\n let installedVantage = \"not installed\"\n let vantageOk = false\n try {\n const require = createRequire(path.join(root, \"noop.js\"))\n const p = require.resolve(\"@squadbase/vantage/package.json\")\n installedVantage = (JSON.parse(fs.readFileSync(p, \"utf8\")) as { version: string }).version\n vantageOk = true\n } catch {\n /* not resolvable */\n }\n facets.push({ name: \"@squadbase/vantage\", ok: vantageOk, detail: installedVantage })\n\n const model = scanProject(root)\n const errors = runDiagnostics(root, model).filter((d) => d.severity === \"error\")\n facets.push({\n name: \"project\",\n ok: errors.length === 0,\n detail: errors.length === 0 ? \"no blocking errors\" : `${errors.length} error(s) (run \\`vantage check\\`)`,\n })\n\n const allOk = facets.every((f) => f.ok)\n\n if (args.flags.json) {\n printJson({ ok: allOk, cli: frameworkVersion(), facets })\n return allOk ? 0 : 1\n }\n\n log.brand(`doctor (cli v${frameworkVersion()})`)\n for (const f of facets) {\n const line = `${f.name.padEnd(22)} ${f.detail}`\n if (f.ok) log.ok(line)\n else log.error(line)\n }\n return allOk ? 0 : 1\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { spawn } from \"node:child_process\"\nimport { log, parsePort, type ParsedArgs } from \"./util.js\"\n\n/** `vantage preview` — run the production build locally. */\nexport async function preview(root: string, args: ParsedArgs): Promise<number> {\n const manifestPath = path.join(root, \"dist\", \"vantage-manifest.json\")\n if (!fs.existsSync(manifestPath)) {\n log.error(\"No build found. Run `vantage build` first.\")\n return 1\n }\n const manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf8\")) as { mode: string }\n const port = parsePort(args.flags.port, 4173)\n\n if (manifest.mode === \"fullstack\") {\n const serverPath = path.join(root, \"dist\", \"server\", \"index.mjs\")\n if (!fs.existsSync(serverPath)) {\n log.error(\"Server bundle missing. Re-run `vantage build`.\")\n return 1\n }\n log.brand(`preview (fullstack) → http://localhost:${port}`)\n const child = spawn(process.execPath, [serverPath], {\n stdio: \"inherit\",\n env: { ...process.env, PORT: String(port) },\n })\n return new Promise<number>((resolve) => {\n child.on(\"exit\", (code) => resolve(code ?? 0))\n const stop = () => child.kill(\"SIGINT\")\n process.on(\"SIGINT\", stop)\n process.on(\"SIGTERM\", stop)\n })\n }\n\n // SPA-only preview via Vite's static preview server.\n const { preview: vitePreview } = await import(\"vite\")\n const server = await vitePreview({\n configFile: false,\n root,\n build: { outDir: path.join(root, \"dist\", \"client\") },\n preview: { port },\n })\n log.brand(\"preview (spa)\")\n server.printUrls()\n return new Promise<number>(() => {})\n}\n","import pc from \"picocolors\"\nimport { scanProject } from \"../core/scan.js\"\nimport { printJson, type ParsedArgs } from \"./util.js\"\n\n/** `vantage routes` — show the page and API URL map. */\nexport async function routes(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n\n if (args.flags.json) {\n printJson({\n pages: model.pages.map((p) => ({ route: p.routePath, file: p.file, dynamic: p.dynamic })),\n layouts: model.layouts.map((l) => ({ dir: l.dir === \"\" ? \"/\" : l.dir, file: l.file })),\n notFound: model.notFound,\n error: model.error,\n apis: model.apis.map((a) => ({ route: a.routePath, file: a.file, params: a.params })),\n hasServer: model.hasServer,\n })\n return 0\n }\n\n console.log(pc.bold(\"\\nPages\"))\n if (model.pages.length === 0) console.log(pc.dim(\" (none)\"))\n for (const p of model.pages) {\n console.log(` ${pc.green(p.routePath.padEnd(28))} ${pc.dim(p.file)}`)\n }\n\n if (model.layouts.length || model.notFound || model.error) {\n console.log(pc.bold(\"\\nSpecial\"))\n for (const l of model.layouts) {\n console.log(` ${pc.cyan((\"layout \" + (l.dir === \"\" ? \"/\" : \"/\" + l.dir)).padEnd(28))} ${pc.dim(l.file)}`)\n }\n if (model.notFound) console.log(` ${pc.cyan(\"404\".padEnd(28))} ${pc.dim(model.notFound)}`)\n if (model.error) console.log(` ${pc.cyan(\"error\".padEnd(28))} ${pc.dim(model.error)}`)\n }\n\n if (model.hasServer) {\n console.log(pc.bold(\"\\nAPI\"))\n if (model.apis.length === 0) console.log(pc.dim(\" (none)\"))\n for (const a of model.apis) {\n console.log(` ${pc.yellow(a.routePath.padEnd(28))} ${pc.dim(a.file)}`)\n }\n }\n console.log(\"\")\n return 0\n}\n","import { generateArtifacts } from \"../core/generate.js\"\nimport { scanProject } from \"../core/scan.js\"\nimport { frameworkVersion, log, printJson, type ParsedArgs } from \"./util.js\"\n\n/**\n * `vantage upgrade` — reconcile generated artifacts with the installed\n * framework version and apply any needed code transforms. v0.1 only\n * regenerates artifacts; the migration hook exists for future major versions.\n */\nexport async function upgrade(root: string, args: ParsedArgs): Promise<number> {\n const version = frameworkVersion()\n const model = scanProject(root)\n generateArtifacts({ root, model })\n\n if (args.flags.json) {\n printJson({ ok: true, version, transforms: [], regenerated: true })\n return 0\n }\n\n log.brand(`upgrade → v${version}`)\n log.ok(\"Regenerated .vantage artifacts.\")\n log.info(\"No breaking code transforms required for this version.\")\n return 0\n}\n","#!/usr/bin/env node\nimport path from \"node:path\"\nimport pc from \"picocolors\"\nimport { add } from \"./cli/add.js\"\nimport { build } from \"./cli/build.js\"\nimport { check } from \"./cli/check.js\"\nimport { dev } from \"./cli/dev.js\"\nimport { doctor } from \"./cli/doctor.js\"\nimport { preview } from \"./cli/preview.js\"\nimport { routes } from \"./cli/routes.js\"\nimport { upgrade } from \"./cli/upgrade.js\"\nimport {\n frameworkVersion,\n log,\n parseArgs,\n resolveQuickRoot,\n resolveRoot,\n type ParsedArgs,\n} from \"./cli/util.js\"\n\nconst HELP = `${pc.bold(pc.magenta(\"vantage\"))} — data dashboard framework for Squadbase\n\n${pc.bold(\"Usage\")}\n vantage <command> [path] [options]\n vantage <path> Quick dev shortcut (folder or entry file)\n\n${pc.bold(\"Commands\")}\n dev Start the dev server (HMR + optional API)\n build Build client and optional server into dist/\n preview Run the production build locally\n check Static verification (routes, boundaries, forbidden files)\n routes Show page and API URL map\n add <kind> <name> Scaffold a page | api | ui | block\n doctor Environment and installation health checks\n upgrade Regenerate artifacts / apply migrations\n\n${pc.bold(\"Options\")}\n --json Machine-readable output (check, routes, doctor, build)\n --port <n> Port for dev/preview\n --root <dir> Project root (default: cwd)\n --force Overwrite when scaffolding\n -v, --version Print version\n -h, --help Print this help\n`\n\ntype Command = (root: string, args: ParsedArgs) => Promise<number>\n\nconst COMMANDS: Record<string, Command> = {\n dev,\n build,\n preview,\n check,\n routes,\n add,\n doctor,\n upgrade,\n}\n\nasync function main(): Promise<void> {\n const args = parseArgs(process.argv.slice(2))\n const command = args.positionals[0]\n\n if (args.flags.version || args.flags.v) {\n console.log(frameworkVersion())\n return\n }\n if (!command || args.flags.help || args.flags.h || command === \"help\") {\n console.log(HELP)\n return\n }\n\n let runFn = COMMANDS[command]\n let root: string\n\n if (runFn) {\n // Known command. Every root-scoped command except `add` may take a trailing\n // path positional as its root (`add` uses positionals for kind/name).\n const targetArg = command !== \"add\" ? args.positionals[1] : undefined\n if (targetArg !== undefined) {\n const quick = resolveQuickRoot(targetArg)\n if (!quick) {\n log.error(`No such file or directory: \"${targetArg}\"`)\n process.exitCode = 1\n return\n }\n root = quick\n } else {\n root = resolveRoot(args.flags)\n }\n } else {\n // Unknown first positional: if it's a path, quick-run dev on it; else error.\n const quick = resolveQuickRoot(command)\n if (!quick) {\n log.error(`Unknown command \"${command}\".`)\n console.log(HELP)\n process.exitCode = 1\n return\n }\n runFn = dev\n root = quick\n log.brand(`quick dev → ${path.relative(process.cwd(), root) || \".\"}`)\n }\n\n try {\n const code = await runFn(root, args)\n process.exitCode = code\n } catch (err) {\n log.error(err instanceof Error ? err.message : String(err))\n if (process.env.VANTAGE_DEBUG && err instanceof Error) console.error(err.stack)\n process.exitCode = 1\n }\n}\n\nvoid main()\n"]}
@@ -0,0 +1,45 @@
1
+ import { ComponentType } from 'react';
2
+ import { a as PageConfig } from '../define-page-B6y9TOfZ.js';
3
+
4
+ /** A page module as loaded by a route loader. */
5
+ interface PageModule {
6
+ default: ComponentType<unknown>;
7
+ page?: PageConfig;
8
+ }
9
+ /** Lazy loader for a page/layout module. */
10
+ type Loader = () => Promise<PageModule>;
11
+ interface ClientLayout {
12
+ id: string;
13
+ parentId: string | null;
14
+ path: string;
15
+ load: Loader;
16
+ }
17
+ interface ClientPage {
18
+ parentLayoutId: string | null;
19
+ path: string;
20
+ index: boolean;
21
+ routePath: string;
22
+ title?: string;
23
+ description?: string;
24
+ load: Loader;
25
+ }
26
+ /** The route manifest emitted into `.vantage/route-tree.gen.ts`. */
27
+ interface ClientManifest {
28
+ rootLayout: Loader | null;
29
+ notFound: Loader | null;
30
+ error: Loader | null;
31
+ layouts: ClientLayout[];
32
+ pages: ClientPage[];
33
+ }
34
+
35
+ /**
36
+ * Client entrypoint. The generated `.vantage/client-entry.tsx` calls this with
37
+ * the route manifest. Owns React root creation and the provider tree:
38
+ *
39
+ * <AppErrorBoundary>
40
+ * <QueryClientProvider>
41
+ * <RouterProvider />
42
+ */
43
+ declare function bootstrap(manifest: ClientManifest): void;
44
+
45
+ export { type ClientLayout, type ClientManifest, type ClientPage, type Loader, type PageModule, bootstrap };
@@ -0,0 +1,141 @@
1
+ import { createQueryClient } from '../chunk-ATYZ45XL.js';
2
+ import { StrictMode, Component } from 'react';
3
+ import { createRoot } from 'react-dom/client';
4
+ import { RouterProvider, createRootRoute, createRoute, createRouter, Outlet, lazyRouteComponent } from '@tanstack/react-router';
5
+ import { QueryClientProvider } from '@tanstack/react-query';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ // @squadbase/vantage — generated build. Do not edit.
9
+ function DefaultPending() {
10
+ return /* @__PURE__ */ jsx("div", { className: "flex min-h-[40vh] items-center justify-center", role: "status", "aria-live": "polite", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 text-sm text-[var(--muted-foreground,#71717a)]", children: [
11
+ /* @__PURE__ */ jsx("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }),
12
+ "Loading\u2026"
13
+ ] }) });
14
+ }
15
+ function DefaultError({ error }) {
16
+ const message = error instanceof Error ? error.message : String(error);
17
+ return /* @__PURE__ */ jsx("div", { className: "mx-auto max-w-2xl p-6", role: "alert", children: /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-[var(--border,#e4e4e7)] bg-[var(--card,#fff)] p-6", children: [
18
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-[var(--foreground,#09090b)]", children: "Something went wrong" }),
19
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-[var(--muted-foreground,#71717a)]", children: message })
20
+ ] }) });
21
+ }
22
+ function DefaultNotFound() {
23
+ return /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-2xl p-6 text-center", children: [
24
+ /* @__PURE__ */ jsx("p", { className: "text-5xl font-bold text-[var(--muted-foreground,#a1a1aa)]", children: "404" }),
25
+ /* @__PURE__ */ jsx("h2", { className: "mt-3 text-lg font-semibold text-[var(--foreground,#09090b)]", children: "Page not found" }),
26
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-[var(--muted-foreground,#71717a)]", children: "The page you are looking for does not exist." })
27
+ ] });
28
+ }
29
+ var AppErrorBoundary = class extends Component {
30
+ state = { error: null };
31
+ static getDerivedStateFromError(error) {
32
+ return { error };
33
+ }
34
+ componentDidCatch(error, info) {
35
+ console.error("[vantage] Unhandled application error:", error, info.componentStack);
36
+ }
37
+ render() {
38
+ if (this.state.error != null) {
39
+ return this.props.fallback ? this.props.fallback(this.state.error) : /* @__PURE__ */ jsx(DefaultError, { error: this.state.error });
40
+ }
41
+ return this.props.children;
42
+ }
43
+ };
44
+ function RootPassthrough() {
45
+ return /* @__PURE__ */ jsx(Outlet, {});
46
+ }
47
+ function lazyComponent(load) {
48
+ return lazyRouteComponent(load);
49
+ }
50
+ function lazyErrorComponent(load) {
51
+ return lazyRouteComponent(load);
52
+ }
53
+ function buildRouter(manifest) {
54
+ const rootRoute = createRootRoute({
55
+ component: manifest.rootLayout ? lazyComponent(manifest.rootLayout) : RootPassthrough,
56
+ errorComponent: manifest.error ? lazyErrorComponent(manifest.error) : DefaultError,
57
+ notFoundComponent: manifest.notFound ? lazyComponent(manifest.notFound) : DefaultNotFound
58
+ });
59
+ const layoutById = /* @__PURE__ */ new Map();
60
+ const childrenByParent = /* @__PURE__ */ new Map();
61
+ const meta = /* @__PURE__ */ new Map();
62
+ const pushChild = (parentKey, route) => {
63
+ const list = childrenByParent.get(parentKey) ?? [];
64
+ list.push(route);
65
+ childrenByParent.set(parentKey, list);
66
+ };
67
+ for (const layout of manifest.layouts) {
68
+ const parentKey = layout.parentId ?? "__root__";
69
+ const route = createRoute({
70
+ getParentRoute: () => layout.parentId ? layoutById.get(layout.parentId) : rootRoute,
71
+ path: layout.path,
72
+ component: lazyComponent(layout.load)
73
+ });
74
+ layoutById.set(layout.id, route);
75
+ pushChild(parentKey, route);
76
+ }
77
+ for (const page of manifest.pages) {
78
+ const parentKey = page.parentLayoutId ?? "__root__";
79
+ const route = createRoute({
80
+ getParentRoute: () => page.parentLayoutId ? layoutById.get(page.parentLayoutId) : rootRoute,
81
+ path: page.path,
82
+ component: lazyComponent(page.load),
83
+ staticData: { title: page.title, description: page.description, routePath: page.routePath }
84
+ });
85
+ pushChild(parentKey, route);
86
+ }
87
+ const layoutsDeepFirst = [...manifest.layouts].sort(
88
+ (a, b) => layoutDepth(b, manifest) - layoutDepth(a, manifest)
89
+ );
90
+ for (const layout of layoutsDeepFirst) {
91
+ const route = layoutById.get(layout.id);
92
+ route.addChildren(childrenByParent.get(layout.id) ?? []);
93
+ }
94
+ rootRoute.addChildren(childrenByParent.get("__root__") ?? []);
95
+ const router = createRouter({
96
+ routeTree: rootRoute,
97
+ defaultPendingComponent: DefaultPending,
98
+ defaultErrorComponent: DefaultError,
99
+ defaultNotFoundComponent: DefaultNotFound,
100
+ defaultPreload: "intent",
101
+ scrollRestoration: true
102
+ });
103
+ return { router, meta };
104
+ }
105
+ function layoutDepth(layout, manifest) {
106
+ let depth = 0;
107
+ let current = layout.parentId;
108
+ const byId = new Map(manifest.layouts.map((l) => [l.id, l]));
109
+ while (current) {
110
+ depth++;
111
+ current = byId.get(current)?.parentId ?? null;
112
+ }
113
+ return depth;
114
+ }
115
+ function bootstrap(manifest) {
116
+ const { router } = buildRouter(manifest);
117
+ const queryClient = createQueryClient();
118
+ const defaultTitle = document.title;
119
+ const updateTitle = () => {
120
+ try {
121
+ const matches = router.state?.matches ?? [];
122
+ const leaf = matches[matches.length - 1];
123
+ const title = leaf?.staticData?.title;
124
+ document.title = typeof title === "string" && title.length > 0 ? title : defaultTitle;
125
+ } catch {
126
+ }
127
+ };
128
+ router.subscribe?.("onResolved", updateTitle);
129
+ const el = document.getElementById("root");
130
+ if (!el) {
131
+ throw new Error('[vantage] Root element "#root" was not found in the document.');
132
+ }
133
+ createRoot(el).render(
134
+ /* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsx(AppErrorBoundary, { children: /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(RouterProvider, { router }) }) }) })
135
+ );
136
+ updateTitle();
137
+ }
138
+
139
+ export { bootstrap };
140
+ //# sourceMappingURL=index.js.map
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/client/states.tsx","../../src/client/error-boundary.tsx","../../src/client/build-router.tsx","../../src/client/bootstrap.tsx"],"names":["jsx"],"mappings":"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","file":"index.js","sourcesContent":["import type { ReactNode } from \"react\"\n\n/** Minimal internal states used as router-level defaults. */\n\nexport function DefaultPending(): ReactNode {\n return (\n <div className=\"flex min-h-[40vh] items-center justify-center\" role=\"status\" aria-live=\"polite\">\n <div className=\"flex items-center gap-3 text-sm text-[var(--muted-foreground,#71717a)]\">\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n Loading…\n </div>\n </div>\n )\n}\n\nexport function DefaultError({ error }: { error: unknown }): ReactNode {\n const message = error instanceof Error ? error.message : String(error)\n return (\n <div className=\"mx-auto max-w-2xl p-6\" role=\"alert\">\n <div className=\"rounded-lg border border-[var(--border,#e4e4e7)] bg-[var(--card,#fff)] p-6\">\n <h2 className=\"text-lg font-semibold text-[var(--foreground,#09090b)]\">Something went wrong</h2>\n <p className=\"mt-2 text-sm text-[var(--muted-foreground,#71717a)]\">{message}</p>\n </div>\n </div>\n )\n}\n\nexport function DefaultNotFound(): ReactNode {\n return (\n <div className=\"mx-auto max-w-2xl p-6 text-center\">\n <p className=\"text-5xl font-bold text-[var(--muted-foreground,#a1a1aa)]\">404</p>\n <h2 className=\"mt-3 text-lg font-semibold text-[var(--foreground,#09090b)]\">Page not found</h2>\n <p className=\"mt-1 text-sm text-[var(--muted-foreground,#71717a)]\">\n The page you are looking for does not exist.\n </p>\n </div>\n )\n}\n","import { Component, type ErrorInfo, type ReactNode } from \"react\"\nimport { DefaultError } from \"./states.js\"\n\ninterface Props {\n children: ReactNode\n fallback?: (error: unknown) => ReactNode\n}\n\ninterface State {\n error: unknown\n}\n\n/**\n * Top-level error boundary that wraps the entire application (outside the\n * router). Route-level errors are handled by the router's errorComponent; this\n * catches catastrophic render failures in the provider tree.\n */\nexport class AppErrorBoundary extends Component<Props, State> {\n state: State = { error: null }\n\n static getDerivedStateFromError(error: unknown): State {\n return { error }\n }\n\n componentDidCatch(error: unknown, info: ErrorInfo): void {\n // Forwarded to the terminal in dev via the console bridge.\n console.error(\"[vantage] Unhandled application error:\", error, info.componentStack)\n }\n\n render(): ReactNode {\n if (this.state.error != null) {\n return this.props.fallback\n ? this.props.fallback(this.state.error)\n : <DefaultError error={this.state.error} />\n }\n return this.props.children\n }\n}\n","import {\n createRootRoute,\n createRoute,\n createRouter,\n lazyRouteComponent,\n Outlet,\n} from \"@tanstack/react-router\"\nimport type { ClientManifest, Loader } from \"./manifest.js\"\nimport { DefaultError, DefaultNotFound, DefaultPending } from \"./states.js\"\n\n// The programmatic route tree fights TanStack's file-route generics, which are\n// designed for codegen. Internal assembly is intentionally untyped; the public\n// surface (pages, definePage) stays fully typed.\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype AnyRoute = any\n\nfunction RootPassthrough() {\n return <Outlet />\n}\n\nfunction lazyComponent(load: Loader): AnyRoute {\n return lazyRouteComponent(load as () => Promise<{ default: any }>)\n}\n\nfunction lazyErrorComponent(load: Loader): AnyRoute {\n return lazyRouteComponent(load as () => Promise<{ default: any }>)\n}\n\nexport interface BuiltRouter {\n router: AnyRoute\n /** routeId -> page meta, for the title manager. */\n meta: Map<string, { title?: string; description?: string; routePath: string }>\n}\n\n/** Assemble a TanStack Router instance from the generated manifest. */\nexport function buildRouter(manifest: ClientManifest): BuiltRouter {\n const rootRoute = createRootRoute({\n component: manifest.rootLayout ? lazyComponent(manifest.rootLayout) : RootPassthrough,\n errorComponent: manifest.error ? lazyErrorComponent(manifest.error) : DefaultError,\n notFoundComponent: manifest.notFound ? lazyComponent(manifest.notFound) : DefaultNotFound,\n })\n\n const layoutById = new Map<string, AnyRoute>()\n const childrenByParent = new Map<string, AnyRoute[]>()\n const meta = new Map<string, { title?: string; description?: string; routePath: string }>()\n\n const pushChild = (parentKey: string, route: AnyRoute) => {\n const list = childrenByParent.get(parentKey) ?? []\n list.push(route)\n childrenByParent.set(parentKey, list)\n }\n\n // 1. Create layout routes (parents referenced lazily via getParentRoute).\n for (const layout of manifest.layouts) {\n const parentKey = layout.parentId ?? \"__root__\"\n const route: AnyRoute = createRoute({\n getParentRoute: () =>\n layout.parentId ? layoutById.get(layout.parentId)! : rootRoute,\n path: layout.path,\n component: lazyComponent(layout.load),\n } as AnyRoute)\n layoutById.set(layout.id, route)\n pushChild(parentKey, route)\n }\n\n // 2. Create page routes.\n for (const page of manifest.pages) {\n const parentKey = page.parentLayoutId ?? \"__root__\"\n const route: AnyRoute = createRoute({\n getParentRoute: () =>\n page.parentLayoutId ? layoutById.get(page.parentLayoutId)! : rootRoute,\n path: page.path,\n component: lazyComponent(page.load),\n staticData: { title: page.title, description: page.description, routePath: page.routePath },\n } as AnyRoute)\n pushChild(parentKey, route)\n // route.id is finalized after createRouter; index by routePath-derived key\n // is unreliable, so the title manager reads staticData off matches instead.\n }\n\n // 3. Attach children — deepest layouts first so nested trees are built before\n // their parent references them.\n const layoutsDeepFirst = [...manifest.layouts].sort(\n (a, b) => layoutDepth(b, manifest) - layoutDepth(a, manifest),\n )\n for (const layout of layoutsDeepFirst) {\n const route = layoutById.get(layout.id)!\n route.addChildren(childrenByParent.get(layout.id) ?? [])\n }\n rootRoute.addChildren(childrenByParent.get(\"__root__\") ?? [])\n\n const router = createRouter({\n routeTree: rootRoute,\n defaultPendingComponent: DefaultPending,\n defaultErrorComponent: DefaultError,\n defaultNotFoundComponent: DefaultNotFound,\n defaultPreload: \"intent\",\n scrollRestoration: true,\n } as AnyRoute)\n\n return { router, meta }\n}\n\nfunction layoutDepth(layout: { id: string; parentId: string | null }, manifest: ClientManifest): number {\n let depth = 0\n let current: string | null = layout.parentId\n const byId = new Map(manifest.layouts.map((l) => [l.id, l]))\n while (current) {\n depth++\n current = byId.get(current)?.parentId ?? null\n }\n return depth\n}\n","import { StrictMode } from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport { RouterProvider } from \"@tanstack/react-router\"\nimport { QueryClientProvider } from \"@tanstack/react-query\"\nimport { createQueryClient } from \"../query/client.js\"\nimport { AppErrorBoundary } from \"./error-boundary.js\"\nimport { buildRouter } from \"./build-router.js\"\nimport type { ClientManifest } from \"./manifest.js\"\n\n/**\n * Client entrypoint. The generated `.vantage/client-entry.tsx` calls this with\n * the route manifest. Owns React root creation and the provider tree:\n *\n * <AppErrorBoundary>\n * <QueryClientProvider>\n * <RouterProvider />\n */\nexport function bootstrap(manifest: ClientManifest): void {\n const { router } = buildRouter(manifest)\n const queryClient = createQueryClient()\n\n // The document's initial title is the fallback for pages without a definePage\n // title, so navigating away from a titled page doesn't leave a stale title.\n const defaultTitle = document.title\n\n const updateTitle = () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const matches: any[] = router.state?.matches ?? []\n const leaf = matches[matches.length - 1]\n const title = leaf?.staticData?.title\n document.title = typeof title === \"string\" && title.length > 0 ? title : defaultTitle\n } catch {\n /* title updates are best-effort */\n }\n }\n router.subscribe?.(\"onResolved\", updateTitle)\n\n const el = document.getElementById(\"root\")\n if (!el) {\n throw new Error('[vantage] Root element \"#root\" was not found in the document.')\n }\n\n createRoot(el).render(\n <StrictMode>\n <AppErrorBoundary>\n <QueryClientProvider client={queryClient}>\n <RouterProvider router={router} />\n </QueryClientProvider>\n </AppErrorBoundary>\n </StrictMode>,\n )\n\n updateTitle()\n}\n"]}
@@ -0,0 +1,44 @@
1
+ import { ComponentType, ReactNode } from 'react';
2
+
3
+ /**
4
+ * Optional per-page configuration. The only required part of a page module is
5
+ * its default-exported component; `definePage` covers everything else.
6
+ */
7
+ interface PageConfig {
8
+ /** Document title applied when this route is active. */
9
+ title?: string;
10
+ /** Description metadata for the page. */
11
+ description?: string;
12
+ /**
13
+ * Component rendered while the route is loading.
14
+ * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)
15
+ */
16
+ pendingComponent?: ComponentType;
17
+ /**
18
+ * Component rendered when the route throws.
19
+ * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)
20
+ */
21
+ errorComponent?: ComponentType<{
22
+ error: unknown;
23
+ }>;
24
+ /**
25
+ * Validate/transform the URL search params for this route.
26
+ * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)
27
+ */
28
+ validateSearch?: (search: Record<string, unknown>) => Record<string, unknown>;
29
+ }
30
+ /**
31
+ * Declare optional page configuration.
32
+ *
33
+ * ```tsx
34
+ * export const page = definePage({ title: "Monthly Analysis" })
35
+ * export default function MonthlyAnalysis() { return <div/> }
36
+ * ```
37
+ */
38
+ declare function definePage(config: PageConfig): PageConfig;
39
+ /** Convenience type for a Vantage page component. */
40
+ type PageComponent = ComponentType & {
41
+ (): ReactNode;
42
+ };
43
+
44
+ export { type PageComponent as P, type PageConfig as a, definePage as d };
@@ -0,0 +1,15 @@
1
+ export { P as PageComponent, a as PageConfig, d as definePage } from './define-page-B6y9TOfZ.js';
2
+ import 'react';
3
+
4
+ /**
5
+ * `@squadbase/vantage` — public runtime surface.
6
+ *
7
+ * The only import most pages need. Server state lives in
8
+ * `@squadbase/vantage/query`, navigation in `@squadbase/vantage/router`,
9
+ * UI in `@squadbase/vantage/ui`, and API types in `@squadbase/vantage/server`.
10
+ */
11
+
12
+ /** Framework version, kept in sync with package.json at build time. */
13
+ declare const VERSION = "0.1.0";
14
+
15
+ export { VERSION };
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ // @squadbase/vantage — generated build. Do not edit.
2
+
3
+ // src/runtime/define-page.ts
4
+ function definePage(config) {
5
+ return config;
6
+ }
7
+
8
+ // src/index.ts
9
+ var VERSION = "0.1.0";
10
+
11
+ export { VERSION, definePage };
12
+ //# sourceMappingURL=index.js.map
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/define-page.ts","../src/index.ts"],"names":[],"mappings":";;;AAoCO,SAAS,WAAW,MAAA,EAAgC;AACzD,EAAA,OAAO,MAAA;AACT;;;AC3BO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["import type { ComponentType, ReactNode } from \"react\"\n\n/**\n * Optional per-page configuration. The only required part of a page module is\n * its default-exported component; `definePage` covers everything else.\n */\nexport interface PageConfig {\n /** Document title applied when this route is active. */\n title?: string\n /** Description metadata for the page. */\n description?: string\n /**\n * Component rendered while the route is loading.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n pendingComponent?: ComponentType\n /**\n * Component rendered when the route throws.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n errorComponent?: ComponentType<{ error: unknown }>\n /**\n * Validate/transform the URL search params for this route.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n validateSearch?: (search: Record<string, unknown>) => Record<string, unknown>\n}\n\n/**\n * Declare optional page configuration.\n *\n * ```tsx\n * export const page = definePage({ title: \"Monthly Analysis\" })\n * export default function MonthlyAnalysis() { return <div/> }\n * ```\n */\nexport function definePage(config: PageConfig): PageConfig {\n return config\n}\n\n/** Convenience type for a Vantage page component. */\nexport type PageComponent = ComponentType & { (): ReactNode }\n","/**\n * `@squadbase/vantage` — public runtime surface.\n *\n * The only import most pages need. Server state lives in\n * `@squadbase/vantage/query`, navigation in `@squadbase/vantage/router`,\n * UI in `@squadbase/vantage/ui`, and API types in `@squadbase/vantage/server`.\n */\nexport { definePage } from \"./runtime/define-page.js\"\nexport type { PageConfig, PageComponent } from \"./runtime/define-page.js\"\n\n/** Framework version, kept in sync with package.json at build time. */\nexport const VERSION = \"0.1.0\"\n"]}
@@ -0,0 +1,11 @@
1
+ import { QueryClient } from '@tanstack/react-query';
2
+ export { QueryClient, QueryKey, UseInfiniteQueryOptions, UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult, keepPreviousData, useInfiniteQuery, useIsFetching, useIsMutating, useMutation, useQueries, useQuery, useQueryClient } from '@tanstack/react-query';
3
+
4
+ /**
5
+ * Create the QueryClient with Vantage defaults. Individual queries may override
6
+ * these, but replacing the QueryClient wholesale is intentionally not exposed —
7
+ * Squadbase relies on a single managed client for auth, logging and telemetry.
8
+ */
9
+ declare function createQueryClient(): QueryClient;
10
+
11
+ export { createQueryClient };
@@ -0,0 +1,4 @@
1
+ export { createQueryClient } from '../chunk-ATYZ45XL.js';
2
+ export { QueryClient, keepPreviousData, useInfiniteQuery, useIsFetching, useIsMutating, useMutation, useQueries, useQuery, useQueryClient } from '@tanstack/react-query';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -0,0 +1,36 @@
1
+ export { Outlet, notFound, redirect, useRouterState } from '@tanstack/react-router';
2
+ import { ReactNode } from 'react';
3
+
4
+ /**
5
+ * Vantage's thin router API. Users depend on `@squadbase/vantage/router`
6
+ * instead of `@tanstack/react-router`, so the underlying router can evolve
7
+ * without touching user code. Only the ergonomic, SPA-relevant surface is
8
+ * exposed; typed-route generics are intentionally relaxed to plain strings.
9
+ */
10
+
11
+ interface LinkProps {
12
+ to: string;
13
+ params?: Record<string, string>;
14
+ search?: Record<string, unknown>;
15
+ hash?: string;
16
+ replace?: boolean;
17
+ className?: string;
18
+ activeClassName?: string;
19
+ children?: ReactNode;
20
+ [key: string]: unknown;
21
+ }
22
+ /** Client-side navigation link. */
23
+ declare function Link({ activeClassName, className, ...props }: LinkProps): ReactNode;
24
+ /** Route params for the current route (e.g. `{ customerId: "42" }`). */
25
+ declare function useParams(): Record<string, string>;
26
+ /** Validated/raw search params for the current route. */
27
+ declare function useSearch(): Record<string, unknown>;
28
+ /** Imperative navigation. `navigate({ to: "/sales/42" })`. */
29
+ declare function useNavigate(): (opts: {
30
+ to: string;
31
+ params?: Record<string, string>;
32
+ search?: Record<string, unknown>;
33
+ replace?: boolean;
34
+ }) => void;
35
+
36
+ export { Link, type LinkProps, useNavigate, useParams, useSearch };
@@ -0,0 +1,27 @@
1
+ import { Link as Link$1, useParams as useParams$1, useSearch as useSearch$1, useNavigate as useNavigate$1 } from '@tanstack/react-router';
2
+ export { Outlet, notFound, redirect, useRouterState } from '@tanstack/react-router';
3
+ import { createElement } from 'react';
4
+
5
+ // @squadbase/vantage — generated build. Do not edit.
6
+
7
+ function Link({ activeClassName, className, ...props }) {
8
+ const anyLink = Link$1;
9
+ return createElement(anyLink, {
10
+ ...props,
11
+ className,
12
+ activeProps: activeClassName ? { className: `${className ?? ""} ${activeClassName}`.trim() } : void 0
13
+ });
14
+ }
15
+ function useParams() {
16
+ return useParams$1({ strict: false });
17
+ }
18
+ function useSearch() {
19
+ return useSearch$1({ strict: false });
20
+ }
21
+ function useNavigate() {
22
+ return useNavigate$1();
23
+ }
24
+
25
+ export { Link, useNavigate, useParams, useSearch };
26
+ //# sourceMappingURL=index.js.map
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/router/index.ts"],"names":["TanstackLink","useParamsBase","useSearchBase","useNavigateBase"],"mappings":";;;;;;AAiCO,SAAS,KAAK,EAAE,eAAA,EAAiB,SAAA,EAAW,GAAG,OAAM,EAAyB;AAEnF,EAAA,MAAM,OAAA,GAAUA,MAAA;AAChB,EAAA,OAAO,cAAc,OAAA,EAAS;AAAA,IAC5B,GAAG,KAAA;AAAA,IACH,SAAA;AAAA,IACA,WAAA,EAAa,eAAA,GAAkB,EAAE,SAAA,EAAW,CAAA,EAAG,SAAA,IAAa,EAAE,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA,CAAG,IAAA,EAAK,EAAE,GAAI;AAAA,GAChG,CAAA;AACH;AAGO,SAAS,SAAA,GAAoC;AAElD,EAAA,OAAOC,WAAA,CAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AACxC;AAGO,SAAS,SAAA,GAAqC;AAEnD,EAAA,OAAOC,WAAA,CAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AACxC;AAGO,SAAS,WAAA,GAAoI;AAElJ,EAAA,OAAOC,aAAA,EAAgB;AACzB","file":"index.js","sourcesContent":["/**\n * Vantage's thin router API. Users depend on `@squadbase/vantage/router`\n * instead of `@tanstack/react-router`, so the underlying router can evolve\n * without touching user code. Only the ergonomic, SPA-relevant surface is\n * exposed; typed-route generics are intentionally relaxed to plain strings.\n */\nimport {\n Link as TanstackLink,\n Outlet,\n useNavigate as useNavigateBase,\n useParams as useParamsBase,\n useSearch as useSearchBase,\n useRouterState,\n redirect,\n notFound,\n} from \"@tanstack/react-router\"\nimport { createElement, type ReactNode } from \"react\"\n\nexport { Outlet, useRouterState, redirect, notFound }\n\nexport interface LinkProps {\n to: string\n params?: Record<string, string>\n search?: Record<string, unknown>\n hash?: string\n replace?: boolean\n className?: string\n activeClassName?: string\n children?: ReactNode\n [key: string]: unknown\n}\n\n/** Client-side navigation link. */\nexport function Link({ activeClassName, className, ...props }: LinkProps): ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyLink = TanstackLink as any\n return createElement(anyLink, {\n ...props,\n className,\n activeProps: activeClassName ? { className: `${className ?? \"\"} ${activeClassName}`.trim() } : undefined,\n })\n}\n\n/** Route params for the current route (e.g. `{ customerId: \"42\" }`). */\nexport function useParams(): Record<string, string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return useParamsBase({ strict: false }) as any\n}\n\n/** Validated/raw search params for the current route. */\nexport function useSearch(): Record<string, unknown> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return useSearchBase({ strict: false }) as any\n}\n\n/** Imperative navigation. `navigate({ to: \"/sales/42\" })`. */\nexport function useNavigate(): (opts: { to: string; params?: Record<string, string>; search?: Record<string, unknown>; replace?: boolean }) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return useNavigateBase() as any\n}\n"]}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * `@squadbase/vantage/server` — the server API contract.
3
+ *
4
+ * API modules under `server/api/**` export HTTP method handlers that receive an
5
+ * `ApiContext` built from Web Standards (`Request`, `Response`, `URL`).
6
+ */
7
+ /** Context passed to every API handler. */
8
+ interface ApiContext {
9
+ /** The incoming Web `Request`. */
10
+ request: Request;
11
+ /** Route params, e.g. `{ customerId: "42" }`. */
12
+ params: Record<string, string>;
13
+ /** Server environment variables (secrets included; never sent to the client). */
14
+ env: Record<string, string | undefined>;
15
+ /** Register background work to run after the response is sent. */
16
+ waitUntil(promise: Promise<unknown>): void;
17
+ }
18
+ /** An API method handler. */
19
+ type ApiHandler = (ctx: ApiContext) => Response | Promise<Response>;
20
+ /** The set of method exports an API module may provide. */
21
+ interface ApiModule {
22
+ GET?: ApiHandler;
23
+ POST?: ApiHandler;
24
+ PUT?: ApiHandler;
25
+ PATCH?: ApiHandler;
26
+ DELETE?: ApiHandler;
27
+ OPTIONS?: ApiHandler;
28
+ }
29
+ /** Convenience JSON response helper (equivalent to `Response.json`). */
30
+ declare function json(data: unknown, init?: ResponseInit): Response;
31
+ /**
32
+ * Stable cross-realm brand. `instanceof HttpError` breaks when this module is
33
+ * evaluated in two realms — in dev the user's API module is loaded through
34
+ * Vite's `ssrLoadModule`, a separate module graph from the Node-side dispatch
35
+ * chunk — so the two `HttpError` classes are different objects. `Symbol.for`
36
+ * draws from the process-global registry, so every realm resolves the same
37
+ * symbol; `isHttpError` matches on this brand instead of class identity.
38
+ */
39
+ declare const HTTP_ERROR_BRAND: unique symbol;
40
+ /** Throwable HTTP error that the runtime converts into a JSON response. */
41
+ declare class HttpError extends Error {
42
+ status: number;
43
+ readonly [HTTP_ERROR_BRAND] = true;
44
+ constructor(status: number, message: string);
45
+ }
46
+ /**
47
+ * Realm-independent check for {@link HttpError}. Use this instead of
48
+ * `instanceof` anywhere an error may have crossed a module-realm boundary
49
+ * (notably the dev `ssrLoadModule` seam), so dev and prod behave identically.
50
+ */
51
+ declare function isHttpError(err: unknown): err is HttpError;
52
+
53
+ export { type ApiContext, type ApiHandler, type ApiModule, HttpError, isHttpError, json };
@@ -0,0 +1,3 @@
1
+ export { HttpError, isHttpError, json } from '../chunk-B7LLBNLV.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}