@squadbase/vantage 0.6.1-dev2.5f947f1 → 0.6.2-dev1.a7c4a3e
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/dist/add-DY4AXANK.js +6 -0
- package/dist/add-DY4AXANK.js.map +1 -0
- package/dist/{build-O5TVNH4E.js → build-JB4VOMUI.js} +3 -3
- package/dist/{build-O5TVNH4E.js.map → build-JB4VOMUI.js.map} +1 -1
- package/dist/{check-WFBEDHDR.js → check-ZJYK6RLG.js} +3 -3
- package/dist/{check-WFBEDHDR.js.map → check-ZJYK6RLG.js.map} +1 -1
- package/dist/{chunk-LSRMRIXA.js → chunk-MP3QSOXL.js} +14 -9
- package/dist/chunk-MP3QSOXL.js.map +1 -0
- package/dist/{chunk-3G43C6OL.js → chunk-QI3XQKHS.js} +39 -3
- package/dist/chunk-QI3XQKHS.js.map +1 -0
- package/dist/{chunk-QDZA5JSL.js → chunk-U2M6HGKQ.js} +3 -3
- package/dist/{chunk-QDZA5JSL.js.map → chunk-U2M6HGKQ.js.map} +1 -1
- package/dist/cli.js +14 -11
- package/dist/cli.js.map +1 -1
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.js +1 -1
- package/dist/{dev-NZRLOQCL.js → dev-FCEC3UKQ.js} +17 -6
- package/dist/dev-FCEC3UKQ.js.map +1 -0
- package/dist/doc/index.js +2 -0
- package/dist/doc/index.js.map +1 -1
- package/dist/{docs-ZGDJUHJI.js → docs-EJJ3BECT.js} +3 -3
- package/dist/{docs-ZGDJUHJI.js.map → docs-EJJ3BECT.js.map} +1 -1
- package/dist/{doctor-VFKEMR54.js → doctor-WHZXPERA.js} +4 -4
- package/dist/doctor-WHZXPERA.js.map +1 -0
- package/dist/{preview-QDCIVVSR.js → preview-OGMCNQUO.js} +12 -4
- package/dist/preview-OGMCNQUO.js.map +1 -0
- package/dist/{routes-RHP5FVGD.js → routes-GTFO5PUF.js} +3 -3
- package/dist/{routes-RHP5FVGD.js.map → routes-GTFO5PUF.js.map} +1 -1
- package/dist/{search-RFBELGY7.js → search-6Y422SV6.js} +3 -3
- package/dist/{search-RFBELGY7.js.map → search-6Y422SV6.js.map} +1 -1
- package/dist/slide/index.js +14 -5
- package/dist/slide/index.js.map +1 -1
- package/dist/table/index.js +1 -1
- package/dist/{upgrade-GF2P67M6.js → upgrade-AL4KZZR4.js} +4 -4
- package/dist/{upgrade-GF2P67M6.js.map → upgrade-AL4KZZR4.js.map} +1 -1
- package/docs/en/changelog.md +24 -0
- package/docs/en/cli-reference.md +30 -0
- package/docs/en/parts/page-shell.md +1 -1
- package/docs/ja/changelog.md +24 -0
- package/docs/ja/cli-reference.md +29 -0
- package/docs/ja/parts/page-shell.md +1 -1
- package/package.json +1 -1
- package/theme.css +8 -0
- package/dist/add-EISGSZAH.js +0 -6
- package/dist/add-EISGSZAH.js.map +0 -1
- package/dist/chunk-3G43C6OL.js.map +0 -1
- package/dist/chunk-LSRMRIXA.js.map +0 -1
- package/dist/dev-NZRLOQCL.js.map +0 -1
- package/dist/doctor-VFKEMR54.js.map +0 -1
- package/dist/preview-QDCIVVSR.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/add.ts"],"names":["require"],"mappings":"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","file":"chunk-QDZA5JSL.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { resolvePageRoot } from \"../core/scan\"\nimport { log, type ParsedArgs } from \"./util\"\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 resolvePackageDir(root: string, sub: 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), sub)\n } catch {\n return null\n }\n}\n\nfunction resolveRegistryDir(root: string): string | null {\n return resolvePackageDir(root, \"registry\")\n}\n\nconst SKILL_FILE = \"SKILL.md\"\n\n/** Directories a placed skill never lives in — skipped while scanning. */\nconst SKILL_SCAN_SKIP = new Set([\n \"node_modules\",\n \".git\",\n \".vantage\",\n \"dist\",\n \"build\",\n \"out\",\n \"coverage\",\n \".next\",\n \".turbo\",\n \".cache\",\n \".vercel\",\n])\n\n/** How deep below the root the scan goes (`.claude/skills/<name>` is depth 3). */\nconst SKILL_SCAN_DEPTH = 4\n\n/** List the skill directories bundled with the installed framework. */\nfunction listBundledSkills(skillsDir: string): string[] {\n try {\n return fs\n .readdirSync(skillsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && fs.existsSync(path.join(skillsDir, e.name, SKILL_FILE)))\n .map((e) => e.name)\n .sort()\n } catch {\n return []\n }\n}\n\n/** Paths outside the project read better absolute than as a pile of `../`. */\nfunction displayPath(root: string, target: string): string {\n const rel = path.relative(root, target)\n return !rel ? \".\" : rel.startsWith(\"..\") ? target : rel\n}\n\n/**\n * Find where the bundled skills already live in this project.\n *\n * Placement is a convention, not a fixed path: apps keep them under the root,\n * under `.claude/skills/`, under `.squadbase/skills/`, … so `add skill` looks\n * for the skill *directories* rather than guessing one destination and adding a\n * second copy next to the one that is already there.\n */\nfunction findPlacedSkills(\n root: string,\n names: readonly string[],\n skillsDir: string,\n): Map<string, string[]> {\n const wanted = new Set(names)\n const found = new Map<string, string[]>()\n // A workspace that links the framework by path (not through node_modules)\n // would otherwise report the framework's own `skills/` as a placement.\n const isSource = (p: string) => !path.relative(skillsDir, p).startsWith(\"..\")\n const walk = (dir: string, depth: number): void => {\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.isDirectory() || SKILL_SCAN_SKIP.has(entry.name)) continue\n const abs = path.join(dir, entry.name)\n if (wanted.has(entry.name) && fs.existsSync(path.join(abs, SKILL_FILE))) {\n if (!isSource(abs)) found.set(entry.name, [...(found.get(entry.name) ?? []), abs])\n continue // skills never nest inside one another\n }\n if (depth < SKILL_SCAN_DEPTH) walk(abs, depth + 1)\n }\n }\n walk(root, 1)\n for (const list of found.values()) list.sort()\n return found\n}\n\n/** Copy one bundled skill directory to `dest`, creating parents as needed. */\nfunction writeSkill(root: string, skillsDir: string, name: string, dest: string, verb: string): void {\n fs.mkdirSync(path.dirname(dest), { recursive: true })\n fs.cpSync(path.join(skillsDir, name), dest, { recursive: true, force: true })\n log.ok(`${verb} skill ${displayPath(root, dest)}/`)\n}\n\n/** `vantage add skill` with no name — the bundled list plus where each one sits. */\nfunction printSkillList(root: string, available: string[], placed: Map<string, string[]>): number {\n const width = Math.max(...available.map((n) => n.length))\n log.info(\"Bundled skills:\")\n for (const name of available) {\n const where = placed.get(name)\n const status = where?.length\n ? where.map((p) => displayPath(root, p) + \"/\").join(\", \")\n : \"not placed\"\n log.info(` ${name.padEnd(width)} ${status}`)\n }\n const missing = available.filter((n) => !placed.get(n)?.length)\n if (missing.length) {\n log.info(\"\")\n log.info(\"Place the missing ones with: vantage add skill --all [--dir <path>]\")\n }\n return 0\n}\n\n/**\n * `vantage add skill [<name>|--all] [--dir <path>]` — copy Claude Code skills\n * out of the package.\n *\n * The command scans the project first: a skill that is already placed anywhere\n * (root, `.claude/skills/`, `.squadbase/skills/`, …) is a no-op and its location\n * is reported, so re-running never produces a second copy. `--force` refreshes\n * the placements that were found, in place. Only when nothing is found does the\n * destination matter — the project root, or `--dir` when given (an explicit\n * `--dir` also wins over refreshing somewhere else).\n */\nfunction addSkill(\n root: string,\n name: string | undefined,\n all: boolean,\n force: boolean,\n dir: string | undefined,\n): number {\n const skillsDir = resolvePackageDir(root, \"skills\")\n if (!skillsDir) {\n log.error(\"Could not resolve the Vantage skills directory.\")\n return 1\n }\n const available = listBundledSkills(skillsDir)\n if (available.length === 0) {\n log.error(\"No skills are bundled with this version of Vantage.\")\n return 1\n }\n const placed = findPlacedSkills(root, available, skillsDir)\n if (!all && !name) return printSkillList(root, available, placed)\n\n const destDir = path.resolve(root, dir ?? \".\")\n const targets = all ? available : [name as string]\n let failed = 0\n for (const target of targets) {\n if (!available.includes(target)) {\n log.error(`Unknown skill \"${target}\". Available: ${available.join(\", \")}`)\n failed++\n continue\n }\n const existing = placed.get(target) ?? []\n if (existing.length > 0 && !force) {\n const where = existing.map((p) => displayPath(root, p) + \"/\").join(\", \")\n log.info(`Skill ${target} is already placed at ${where} — skipped (--force to refresh).`)\n continue\n }\n // `--dir` names a destination explicitly, so it wins over refreshing copies\n // that live somewhere else; without it, `--force` updates them where they are.\n const inDestDir = existing.filter((p) => path.dirname(p) === destDir)\n const refresh = dir === undefined ? existing : inDestDir\n if (refresh.length > 0) {\n for (const dest of refresh) writeSkill(root, skillsDir, target, dest, \"Updated\")\n continue\n }\n if (existing.length > 0) {\n const where = existing.map((p) => displayPath(root, p) + \"/\").join(\", \")\n log.warn(`Skill ${target} is also placed at ${where} — left untouched.`)\n }\n writeSkill(root, skillsDir, target, path.join(destDir, target), \"Added\")\n }\n return failed === 0 ? 0 : 1\n}\n\nconst AGENTS_FILE = \"AGENTS.md\"\nconst AGENTS_KNOWLEDGE_DIR = \"agents\"\n\n/** Path to the framework's canonical AGENTS.md, or null if unresolved/absent. */\nfunction bundledAgentsPath(root: string): string | null {\n const dir = resolvePackageDir(root, \"templates\")\n if (!dir) return null\n const src = path.join(dir, AGENTS_FILE)\n return fs.existsSync(src) ? src : null\n}\n\n/** Directory bundling the per-artifact-type knowledge files (`agents/*.md`). */\nfunction bundledAgentsDir(root: string): string | null {\n const dir = resolvePackageDir(root, \"templates\")\n if (!dir) return null\n const sub = path.join(dir, AGENTS_KNOWLEDGE_DIR)\n return fs.existsSync(sub) ? sub : null\n}\n\n/** List the bundled `agents/*.md` knowledge file names. */\nfunction listBundledAgentsFiles(agentsDir: string): string[] {\n try {\n return fs\n .readdirSync(agentsDir, { withFileTypes: true })\n .filter((e) => e.isFile() && e.name.endsWith(\".md\"))\n .map((e) => e.name)\n .sort()\n } catch {\n return []\n }\n}\n\n/**\n * `vantage add agents` — copy the app-author AGENTS.md map, plus the\n * per-artifact-type knowledge files under `agents/`, into the app root.\n */\nfunction addAgents(root: string, force: boolean): number {\n const src = bundledAgentsPath(root)\n if (!src) {\n log.error(\"AGENTS.md is not bundled with this version of Vantage.\")\n return 1\n }\n const dest = path.join(root, AGENTS_FILE)\n if (fs.existsSync(dest) && !force) {\n log.error(`${AGENTS_FILE} already exists. Use --force to overwrite.`)\n return 1\n }\n fs.copyFileSync(src, dest)\n log.ok(`Added ${path.relative(root, dest) || AGENTS_FILE}`)\n\n const agentsDir = bundledAgentsDir(root)\n const destAgentsDir = path.join(root, AGENTS_KNOWLEDGE_DIR)\n if (agentsDir) {\n fs.mkdirSync(destAgentsDir, { recursive: true })\n const skipped: string[] = []\n for (const name of listBundledAgentsFiles(agentsDir)) {\n const destFile = path.join(destAgentsDir, name)\n if (fs.existsSync(destFile) && !force) {\n skipped.push(name)\n continue\n }\n fs.copyFileSync(path.join(agentsDir, name), destFile)\n log.ok(`Added ${path.relative(root, destFile)}`)\n }\n if (skipped.length > 0) {\n log.warn(\n `Skipped existing ${skipped.join(\", \")} in ${AGENTS_KNOWLEDGE_DIR}/. Use --force to overwrite.`,\n )\n }\n }\n return 0\n}\n\n/**\n * Re-sync a managed AGENTS.md (and its `agents/*.md` knowledge files) from the\n * framework's canonical copies. Only touches the app when AGENTS.md is already\n * present (opt-in via `vantage add agents`), and only rewrites files whose\n * content actually changed; bundled files missing locally are created, but\n * local files outside the bundle are never deleted. Used by `vantage upgrade`\n * so a single source-of-truth update reflects into apps that adopted the guide.\n */\nexport function syncAgentsFile(root: string): \"updated\" | \"unchanged\" | \"absent\" {\n const dest = path.join(root, AGENTS_FILE)\n if (!fs.existsSync(dest)) return \"absent\"\n\n let changed = false\n\n const src = bundledAgentsPath(root)\n if (src) {\n const next = fs.readFileSync(src, \"utf8\")\n if (fs.readFileSync(dest, \"utf8\") !== next) {\n fs.writeFileSync(dest, next)\n changed = true\n }\n }\n\n const agentsDir = bundledAgentsDir(root)\n if (agentsDir) {\n const destAgentsDir = path.join(root, AGENTS_KNOWLEDGE_DIR)\n fs.mkdirSync(destAgentsDir, { recursive: true })\n for (const name of listBundledAgentsFiles(agentsDir)) {\n const srcFile = path.join(agentsDir, name)\n const destFile = path.join(destAgentsDir, name)\n const next = fs.readFileSync(srcFile, \"utf8\")\n if (!fs.existsSync(destFile) || fs.readFileSync(destFile, \"utf8\") !== next) {\n fs.writeFileSync(destFile, next)\n changed = true\n }\n }\n }\n\n return changed ? \"updated\" : \"unchanged\"\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 // Copies land next to the pages that import them (src/components/… when the\n // project has a src/ layout).\n const destDir = path.join(resolvePageRoot(root).abs, \"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|skill> <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 const all = Boolean(args.flags.all)\n\n // `skill` accepts `--all` in place of a name, and `agents` takes no name at\n // all; handle both before the name guard.\n if (kind === \"skill\") {\n const dir = typeof args.flags.dir === \"string\" ? args.flags.dir : undefined\n return addSkill(root, name, all, force, dir)\n }\n if (kind === \"agents\") return addAgents(root, force)\n\n if (!kind || !name) {\n log.error(\"Usage: vantage add <page|api|ui|block|skill|agents> <name>\")\n return 1\n }\n\n if (kind === \"page\") {\n // Pages are named by their route, so they go under the page root — src/\n // when the project has one, the project root otherwise.\n const pageRoot = resolvePageRoot(root).abs\n const file = path.join(pageRoot, 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, skill, agents.`)\n return 1\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/add.ts"],"names":["require"],"mappings":"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","file":"chunk-U2M6HGKQ.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { resolvePageRoot } from \"../core/scan\"\nimport { log, type ParsedArgs } from \"./util\"\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 resolvePackageDir(root: string, sub: 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), sub)\n } catch {\n return null\n }\n}\n\nfunction resolveRegistryDir(root: string): string | null {\n return resolvePackageDir(root, \"registry\")\n}\n\nconst SKILL_FILE = \"SKILL.md\"\n\n/** Directories a placed skill never lives in — skipped while scanning. */\nconst SKILL_SCAN_SKIP = new Set([\n \"node_modules\",\n \".git\",\n \".vantage\",\n \"dist\",\n \"build\",\n \"out\",\n \"coverage\",\n \".next\",\n \".turbo\",\n \".cache\",\n \".vercel\",\n])\n\n/** How deep below the root the scan goes (`.claude/skills/<name>` is depth 3). */\nconst SKILL_SCAN_DEPTH = 4\n\n/** List the skill directories bundled with the installed framework. */\nfunction listBundledSkills(skillsDir: string): string[] {\n try {\n return fs\n .readdirSync(skillsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && fs.existsSync(path.join(skillsDir, e.name, SKILL_FILE)))\n .map((e) => e.name)\n .sort()\n } catch {\n return []\n }\n}\n\n/** Paths outside the project read better absolute than as a pile of `../`. */\nfunction displayPath(root: string, target: string): string {\n const rel = path.relative(root, target)\n return !rel ? \".\" : rel.startsWith(\"..\") ? target : rel\n}\n\n/**\n * Find where the bundled skills already live in this project.\n *\n * Placement is a convention, not a fixed path: apps keep them under the root,\n * under `.claude/skills/`, under `.squadbase/skills/`, … so `add skill` looks\n * for the skill *directories* rather than guessing one destination and adding a\n * second copy next to the one that is already there.\n */\nfunction findPlacedSkills(\n root: string,\n names: readonly string[],\n skillsDir: string,\n): Map<string, string[]> {\n const wanted = new Set(names)\n const found = new Map<string, string[]>()\n // A workspace that links the framework by path (not through node_modules)\n // would otherwise report the framework's own `skills/` as a placement.\n const isSource = (p: string) => !path.relative(skillsDir, p).startsWith(\"..\")\n const walk = (dir: string, depth: number): void => {\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.isDirectory() || SKILL_SCAN_SKIP.has(entry.name)) continue\n const abs = path.join(dir, entry.name)\n if (wanted.has(entry.name) && fs.existsSync(path.join(abs, SKILL_FILE))) {\n if (!isSource(abs)) found.set(entry.name, [...(found.get(entry.name) ?? []), abs])\n continue // skills never nest inside one another\n }\n if (depth < SKILL_SCAN_DEPTH) walk(abs, depth + 1)\n }\n }\n walk(root, 1)\n for (const list of found.values()) list.sort()\n return found\n}\n\n/** Copy one bundled skill directory to `dest`, creating parents as needed. */\nfunction writeSkill(root: string, skillsDir: string, name: string, dest: string, verb: string): void {\n fs.mkdirSync(path.dirname(dest), { recursive: true })\n fs.cpSync(path.join(skillsDir, name), dest, { recursive: true, force: true })\n log.ok(`${verb} skill ${displayPath(root, dest)}/`)\n}\n\n/** `vantage add skill` with no name — the bundled list plus where each one sits. */\nfunction printSkillList(root: string, available: string[], placed: Map<string, string[]>): number {\n const width = Math.max(...available.map((n) => n.length))\n log.info(\"Bundled skills:\")\n for (const name of available) {\n const where = placed.get(name)\n const status = where?.length\n ? where.map((p) => displayPath(root, p) + \"/\").join(\", \")\n : \"not placed\"\n log.info(` ${name.padEnd(width)} ${status}`)\n }\n const missing = available.filter((n) => !placed.get(n)?.length)\n if (missing.length) {\n log.info(\"\")\n log.info(\"Place the missing ones with: vantage add skill --all [--dir <path>]\")\n }\n return 0\n}\n\n/**\n * `vantage add skill [<name>|--all] [--dir <path>]` — copy Claude Code skills\n * out of the package.\n *\n * The command scans the project first: a skill that is already placed anywhere\n * (root, `.claude/skills/`, `.squadbase/skills/`, …) is a no-op and its location\n * is reported, so re-running never produces a second copy. `--force` refreshes\n * the placements that were found, in place. Only when nothing is found does the\n * destination matter — the project root, or `--dir` when given (an explicit\n * `--dir` also wins over refreshing somewhere else).\n */\nfunction addSkill(\n root: string,\n name: string | undefined,\n all: boolean,\n force: boolean,\n dir: string | undefined,\n): number {\n const skillsDir = resolvePackageDir(root, \"skills\")\n if (!skillsDir) {\n log.error(\"Could not resolve the Vantage skills directory.\")\n return 1\n }\n const available = listBundledSkills(skillsDir)\n if (available.length === 0) {\n log.error(\"No skills are bundled with this version of Vantage.\")\n return 1\n }\n const placed = findPlacedSkills(root, available, skillsDir)\n if (!all && !name) return printSkillList(root, available, placed)\n\n const destDir = path.resolve(root, dir ?? \".\")\n const targets = all ? available : [name as string]\n let failed = 0\n for (const target of targets) {\n if (!available.includes(target)) {\n log.error(`Unknown skill \"${target}\". Available: ${available.join(\", \")}`)\n failed++\n continue\n }\n const existing = placed.get(target) ?? []\n if (existing.length > 0 && !force) {\n const where = existing.map((p) => displayPath(root, p) + \"/\").join(\", \")\n log.info(`Skill ${target} is already placed at ${where} — skipped (--force to refresh).`)\n continue\n }\n // `--dir` names a destination explicitly, so it wins over refreshing copies\n // that live somewhere else; without it, `--force` updates them where they are.\n const inDestDir = existing.filter((p) => path.dirname(p) === destDir)\n const refresh = dir === undefined ? existing : inDestDir\n if (refresh.length > 0) {\n for (const dest of refresh) writeSkill(root, skillsDir, target, dest, \"Updated\")\n continue\n }\n if (existing.length > 0) {\n const where = existing.map((p) => displayPath(root, p) + \"/\").join(\", \")\n log.warn(`Skill ${target} is also placed at ${where} — left untouched.`)\n }\n writeSkill(root, skillsDir, target, path.join(destDir, target), \"Added\")\n }\n return failed === 0 ? 0 : 1\n}\n\nconst AGENTS_FILE = \"AGENTS.md\"\nconst AGENTS_KNOWLEDGE_DIR = \"agents\"\n\n/** Path to the framework's canonical AGENTS.md, or null if unresolved/absent. */\nfunction bundledAgentsPath(root: string): string | null {\n const dir = resolvePackageDir(root, \"templates\")\n if (!dir) return null\n const src = path.join(dir, AGENTS_FILE)\n return fs.existsSync(src) ? src : null\n}\n\n/** Directory bundling the per-artifact-type knowledge files (`agents/*.md`). */\nfunction bundledAgentsDir(root: string): string | null {\n const dir = resolvePackageDir(root, \"templates\")\n if (!dir) return null\n const sub = path.join(dir, AGENTS_KNOWLEDGE_DIR)\n return fs.existsSync(sub) ? sub : null\n}\n\n/** List the bundled `agents/*.md` knowledge file names. */\nfunction listBundledAgentsFiles(agentsDir: string): string[] {\n try {\n return fs\n .readdirSync(agentsDir, { withFileTypes: true })\n .filter((e) => e.isFile() && e.name.endsWith(\".md\"))\n .map((e) => e.name)\n .sort()\n } catch {\n return []\n }\n}\n\n/**\n * `vantage add agents` — copy the app-author AGENTS.md map, plus the\n * per-artifact-type knowledge files under `agents/`, into the app root.\n */\nfunction addAgents(root: string, force: boolean): number {\n const src = bundledAgentsPath(root)\n if (!src) {\n log.error(\"AGENTS.md is not bundled with this version of Vantage.\")\n return 1\n }\n const dest = path.join(root, AGENTS_FILE)\n if (fs.existsSync(dest) && !force) {\n log.error(`${AGENTS_FILE} already exists. Use --force to overwrite.`)\n return 1\n }\n fs.copyFileSync(src, dest)\n log.ok(`Added ${path.relative(root, dest) || AGENTS_FILE}`)\n\n const agentsDir = bundledAgentsDir(root)\n const destAgentsDir = path.join(root, AGENTS_KNOWLEDGE_DIR)\n if (agentsDir) {\n fs.mkdirSync(destAgentsDir, { recursive: true })\n const skipped: string[] = []\n for (const name of listBundledAgentsFiles(agentsDir)) {\n const destFile = path.join(destAgentsDir, name)\n if (fs.existsSync(destFile) && !force) {\n skipped.push(name)\n continue\n }\n fs.copyFileSync(path.join(agentsDir, name), destFile)\n log.ok(`Added ${path.relative(root, destFile)}`)\n }\n if (skipped.length > 0) {\n log.warn(\n `Skipped existing ${skipped.join(\", \")} in ${AGENTS_KNOWLEDGE_DIR}/. Use --force to overwrite.`,\n )\n }\n }\n return 0\n}\n\n/**\n * Re-sync a managed AGENTS.md (and its `agents/*.md` knowledge files) from the\n * framework's canonical copies. Only touches the app when AGENTS.md is already\n * present (opt-in via `vantage add agents`), and only rewrites files whose\n * content actually changed; bundled files missing locally are created, but\n * local files outside the bundle are never deleted. Used by `vantage upgrade`\n * so a single source-of-truth update reflects into apps that adopted the guide.\n */\nexport function syncAgentsFile(root: string): \"updated\" | \"unchanged\" | \"absent\" {\n const dest = path.join(root, AGENTS_FILE)\n if (!fs.existsSync(dest)) return \"absent\"\n\n let changed = false\n\n const src = bundledAgentsPath(root)\n if (src) {\n const next = fs.readFileSync(src, \"utf8\")\n if (fs.readFileSync(dest, \"utf8\") !== next) {\n fs.writeFileSync(dest, next)\n changed = true\n }\n }\n\n const agentsDir = bundledAgentsDir(root)\n if (agentsDir) {\n const destAgentsDir = path.join(root, AGENTS_KNOWLEDGE_DIR)\n fs.mkdirSync(destAgentsDir, { recursive: true })\n for (const name of listBundledAgentsFiles(agentsDir)) {\n const srcFile = path.join(agentsDir, name)\n const destFile = path.join(destAgentsDir, name)\n const next = fs.readFileSync(srcFile, \"utf8\")\n if (!fs.existsSync(destFile) || fs.readFileSync(destFile, \"utf8\") !== next) {\n fs.writeFileSync(destFile, next)\n changed = true\n }\n }\n }\n\n return changed ? \"updated\" : \"unchanged\"\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 // Copies land next to the pages that import them (src/components/… when the\n // project has a src/ layout).\n const destDir = path.join(resolvePageRoot(root).abs, \"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|skill> <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 const all = Boolean(args.flags.all)\n\n // `skill` accepts `--all` in place of a name, and `agents` takes no name at\n // all; handle both before the name guard.\n if (kind === \"skill\") {\n const dir = typeof args.flags.dir === \"string\" ? args.flags.dir : undefined\n return addSkill(root, name, all, force, dir)\n }\n if (kind === \"agents\") return addAgents(root, force)\n\n if (!kind || !name) {\n log.error(\"Usage: vantage add <page|api|ui|block|skill|agents> <name>\")\n return 1\n }\n\n if (kind === \"page\") {\n // Pages are named by their route, so they go under the page root — src/\n // when the project has one, the project root otherwise.\n const pageRoot = resolvePageRoot(root).abs\n const file = path.join(pageRoot, 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, skill, agents.`)\n return 1\n}\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { parseArgs, frameworkVersion, resolveQuickRoot, log, resolveRoot } from './chunk-
|
|
2
|
+
import { parseArgs, frameworkVersion, resolveQuickRoot, log, resolveRoot } from './chunk-QI3XQKHS.js';
|
|
3
3
|
import './chunk-C2CX6GLX.js';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import pc from 'picocolors';
|
|
@@ -30,6 +30,9 @@ ${pc.bold("Options")}
|
|
|
30
30
|
--port <n> Port for dev/preview \u2014 exact: fails when it is taken
|
|
31
31
|
--strict-port Require the default port too (dev/preview)
|
|
32
32
|
--no-strict-port Let --port fall through to the next free port
|
|
33
|
+
--host [addr] Listen on every interface, or only on <addr> (dev/preview)
|
|
34
|
+
--allowed-hosts <h> Hostnames to serve behind a reverse proxy: a,b or true (dev/preview)
|
|
35
|
+
(env: VANTAGE_ALLOWED_HOSTS; the flag wins)
|
|
33
36
|
--no-overlay Hide the full-screen HMR error overlay (dev)
|
|
34
37
|
--root <dir> Project root (default: cwd)
|
|
35
38
|
--force Overwrite when scaffolding
|
|
@@ -46,16 +49,16 @@ ${pc.bold("Options")}
|
|
|
46
49
|
-h, --help Print this help
|
|
47
50
|
`;
|
|
48
51
|
var COMMANDS = {
|
|
49
|
-
dev: () => import('./dev-
|
|
50
|
-
build: () => import('./build-
|
|
51
|
-
preview: () => import('./preview-
|
|
52
|
-
check: () => import('./check-
|
|
53
|
-
routes: () => import('./routes-
|
|
54
|
-
add: () => import('./add-
|
|
55
|
-
docs: () => import('./docs-
|
|
56
|
-
search: () => import('./search-
|
|
57
|
-
doctor: () => import('./doctor-
|
|
58
|
-
upgrade: () => import('./upgrade-
|
|
52
|
+
dev: () => import('./dev-FCEC3UKQ.js').then((m) => m.dev),
|
|
53
|
+
build: () => import('./build-JB4VOMUI.js').then((m) => m.build),
|
|
54
|
+
preview: () => import('./preview-OGMCNQUO.js').then((m) => m.preview),
|
|
55
|
+
check: () => import('./check-ZJYK6RLG.js').then((m) => m.check),
|
|
56
|
+
routes: () => import('./routes-GTFO5PUF.js').then((m) => m.routes),
|
|
57
|
+
add: () => import('./add-DY4AXANK.js').then((m) => m.add),
|
|
58
|
+
docs: () => import('./docs-EJJ3BECT.js').then((m) => m.docs),
|
|
59
|
+
search: () => import('./search-6Y422SV6.js').then((m) => m.search),
|
|
60
|
+
doctor: () => import('./doctor-WHZXPERA.js').then((m) => m.doctor),
|
|
61
|
+
upgrade: () => import('./upgrade-AL4KZZR4.js').then((m) => m.upgrade)
|
|
59
62
|
};
|
|
60
63
|
var NO_ROOT_POSITIONAL = /* @__PURE__ */ new Set(["add", "docs", "search"]);
|
|
61
64
|
async function main() {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;AAYA,IAAM,IAAA,GAAO,GAAG,EAAA,CAAG,IAAA,CAAK,GAAG,OAAA,CAAQ,SAAS,CAAC,CAAC,CAAA;;AAAA,EAE5C,EAAA,CAAG,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA;;AAAA,EAIhB,EAAA,CAAG,IAAA,CAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,EAcnB,EAAA,CAAG,IAAA,CAAK,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":["#!/usr/bin/env node\nimport path from \"node:path\"\nimport pc from \"picocolors\"\nimport {\n frameworkVersion,\n log,\n parseArgs,\n resolveQuickRoot,\n resolveRoot,\n type ParsedArgs,\n} from \"./cli/util\"\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 (--pages | --apis | --detail)\n add <kind> <name> Scaffold a page | api | ui | block | skill | agents\n (add skill with no name lists the skills and where they sit;\n add agents places AGENTS.md + agents/*.md)\n docs [name] Show the bundled guide and component reference\n search <query> Find components and docs by meaning, or by regex\n doctor Environment and installation health checks\n upgrade Regenerate artifacts, sync AGENTS.md + agents/ / apply migrations\n\n${pc.bold(\"Options\")}\n --json Machine-readable output (check, routes, doctor, build, docs, search)\n --port <n> Port for dev/preview — exact: fails when it is taken\n --strict-port Require the default port too (dev/preview)\n --no-strict-port Let --port fall through to the next free port\n --host [addr] Listen on every interface, or only on <addr> (dev/preview)\n --allowed-hosts <h> Hostnames to serve behind a reverse proxy: a,b or true (dev/preview)\n (env: VANTAGE_ALLOWED_HOSTS; the flag wins)\n --no-overlay Hide the full-screen HMR error overlay (dev)\n --root <dir> Project root (default: cwd)\n --force Overwrite when scaffolding\n --pages Show only page routes (routes)\n --apis Show only API routes (routes)\n --detail Add each route's static spec (routes)\n --list List pages without showing one (docs)\n --lang <ja|en> Documentation language (docs, search, default: ja)\n --regex Treat the query as a regular expression (search)\n --limit <n> Max results (search, default: 10)\n --all Add every bundled skill (add skill --all) | show every page (docs)\n --dir <path> Where to place skills when none is found (add skill, default: project root)\n -v, --version Print version\n -h, --help Print this help\n`\n\ntype Command = (root: string, args: ParsedArgs) => Promise<number>\n\n/**\n * Commands are loaded on demand, never statically. A static import graph would\n * pull Vite and the Tailwind plugin into *every* invocation — ~165ms of module\n * loading that `check`, `routes`, `docs`, `search` and `add` never use (and\n * that even `--version` used to pay). Keep these as `import()` thunks: tsup's\n * code splitting then emits one chunk per command and the dispatcher stays\n * dependency-free.\n */\ntype CommandLoader = () => Promise<Command>\n\nconst COMMANDS: Record<string, CommandLoader> = {\n dev: () => import(\"./cli/dev\").then((m) => m.dev),\n build: () => import(\"./cli/build\").then((m) => m.build),\n preview: () => import(\"./cli/preview\").then((m) => m.preview),\n check: () => import(\"./cli/check\").then((m) => m.check),\n routes: () => import(\"./cli/routes\").then((m) => m.routes),\n add: () => import(\"./cli/add\").then((m) => m.add),\n docs: () => import(\"./cli/docs\").then((m) => m.docs),\n search: () => import(\"./cli/search\").then((m) => m.search),\n doctor: () => import(\"./cli/doctor\").then((m) => m.doctor),\n upgrade: () => import(\"./cli/upgrade\").then((m) => m.upgrade),\n}\n\n/**\n * Commands whose trailing positionals are their own arguments, not a project\n * root: `add` takes kind/name, `docs` a page name, `search` a query.\n */\nconst NO_ROOT_POSITIONAL = new Set([\"add\", \"docs\", \"search\"])\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 load = COMMANDS[command]\n let root: string\n\n if (load) {\n // Known command. Every root-scoped command may take a trailing path\n // positional as its root, except the ones that use positionals themselves.\n const targetArg = !NO_ROOT_POSITIONAL.has(command) ? 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 load = COMMANDS.dev!\n root = quick\n log.brand(`quick dev → ${path.relative(process.cwd(), root) || \".\"}`)\n }\n\n try {\n const run = await load()\n const code = await run(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"]}
|
|
@@ -13,6 +13,13 @@ interface PageShellProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
13
13
|
declare const PageShell: React.ForwardRefExoticComponent<PageShellProps & React.RefAttributes<HTMLDivElement>>;
|
|
14
14
|
interface PageShellHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* A wrapping flex row, not a two-column grid: when the heading cannot keep its
|
|
18
|
+
* 20rem basis next to `PageShellHeaderEnd`, the end block drops below it. A
|
|
19
|
+
* `1fr auto` grid would instead hand the heading whatever the end block leaves,
|
|
20
|
+
* and a CJK title — breakable between any two characters — collapses into a
|
|
21
|
+
* one-character column.
|
|
22
|
+
*/
|
|
16
23
|
declare const PageShellHeader: React.ForwardRefExoticComponent<PageShellHeaderProps & React.RefAttributes<HTMLDivElement>>;
|
|
17
24
|
interface PageShellHeadingProps extends HTMLAttributes<HTMLDivElement> {
|
|
18
25
|
}
|
package/dist/components/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AppShell, DashboardCard, DashboardCardAction, DashboardCardContent, DashboardCardDescription, DashboardCardFooter, DashboardCardHeader, DashboardCardPreset, DashboardCardSkeleton, DashboardCardTitle, DataTable, DataTableColumnVisibility, DataTableContent, DataTablePagination, DataTablePreset, DataTableToolbar, DateRangePicker, EChart, FilterBar, FilterBarActiveChips, FilterBarClearButton, FilterBarMultiSelect, FilterBarPreset, FilterBarSelect, FunnelSteps, MetricUnit, MetricValue, MultiSelect, PageShell, PageShellActions, PageShellContent, PageShellDescription, PageShellHeader, PageShellHeaderEnd, PageShellHeading, PageShellMeta, PageShellSummary, PageShellSummaryCard, PageShellTitle, Placeholder, SearchableSelect, SectionHeader, SegmentedControl, Sparkline, StatusBadge, TrendIndicator, defaultPresets, flattenOptions, funnelStepsVariants, isGroupedOptions, metricValueVariants, pageShellSummaryCardVariants, useDataTable } from '../chunk-
|
|
1
|
+
export { AppShell, DashboardCard, DashboardCardAction, DashboardCardContent, DashboardCardDescription, DashboardCardFooter, DashboardCardHeader, DashboardCardPreset, DashboardCardSkeleton, DashboardCardTitle, DataTable, DataTableColumnVisibility, DataTableContent, DataTablePagination, DataTablePreset, DataTableToolbar, DateRangePicker, EChart, FilterBar, FilterBarActiveChips, FilterBarClearButton, FilterBarMultiSelect, FilterBarPreset, FilterBarSelect, FunnelSteps, MetricUnit, MetricValue, MultiSelect, PageShell, PageShellActions, PageShellContent, PageShellDescription, PageShellHeader, PageShellHeaderEnd, PageShellHeading, PageShellMeta, PageShellSummary, PageShellSummaryCard, PageShellTitle, Placeholder, SearchableSelect, SectionHeader, SegmentedControl, Sparkline, StatusBadge, TrendIndicator, defaultPresets, flattenOptions, funnelStepsVariants, isGroupedOptions, metricValueVariants, pageShellSummaryCardVariants, useDataTable } from '../chunk-MP3QSOXL.js';
|
|
2
2
|
import '../chunk-RPZAALCX.js';
|
|
3
3
|
import '../chunk-PXRX5PEC.js';
|
|
4
4
|
import '../chunk-A2UUGASH.js';
|
|
@@ -6,7 +6,7 @@ import './chunk-KLEIVDUV.js';
|
|
|
6
6
|
import { scanProject, timedAsync } from './chunk-ZVANIULZ.js';
|
|
7
7
|
import './chunk-46QI6GFC.js';
|
|
8
8
|
import './chunk-B7LLBNLV.js';
|
|
9
|
-
import { printDiagnostics, log, applyApiBaseUrlFlag, resolvePortOptions, resolveHmrOverlay, reportPortInUse } from './chunk-
|
|
9
|
+
import { printDiagnostics, log, applyApiBaseUrlFlag, resolvePortOptions, resolveHostOptions, resolveHmrOverlay, reportPortInUse } from './chunk-QI3XQKHS.js';
|
|
10
10
|
import './chunk-C2CX6GLX.js';
|
|
11
11
|
import { loadEnv, createServer } from 'vite';
|
|
12
12
|
|
|
@@ -28,6 +28,11 @@ async function dev(root, args) {
|
|
|
28
28
|
return 1;
|
|
29
29
|
}
|
|
30
30
|
const { port, strictPort } = ports;
|
|
31
|
+
const hosts = resolveHostOptions(args.flags);
|
|
32
|
+
if (!hosts.ok) {
|
|
33
|
+
log.error(hosts.error);
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
31
36
|
const overlay = resolveHmrOverlay(args.flags);
|
|
32
37
|
const server = await timedAsync(
|
|
33
38
|
"vite:createServer",
|
|
@@ -38,9 +43,15 @@ async function dev(root, args) {
|
|
|
38
43
|
// The model was just scanned for diagnostics; hand it over so the plugin
|
|
39
44
|
// does not walk the project again.
|
|
40
45
|
plugins: [vantagePlugin({ root, env, model })],
|
|
41
|
-
// `
|
|
42
|
-
//
|
|
43
|
-
|
|
46
|
+
// `host` / `allowedHosts` are only present when asked for, and `hmr` is
|
|
47
|
+
// left alone unless the overlay is being turned off, so Vite's own
|
|
48
|
+
// defaults (host, port, protocol) keep applying.
|
|
49
|
+
server: {
|
|
50
|
+
port,
|
|
51
|
+
strictPort,
|
|
52
|
+
...hosts.options,
|
|
53
|
+
...overlay ? {} : { hmr: { overlay: false } }
|
|
54
|
+
},
|
|
44
55
|
clearScreen: false
|
|
45
56
|
})
|
|
46
57
|
);
|
|
@@ -66,5 +77,5 @@ async function dev(root, args) {
|
|
|
66
77
|
}
|
|
67
78
|
|
|
68
79
|
export { dev };
|
|
69
|
-
//# sourceMappingURL=dev-
|
|
70
|
-
//# sourceMappingURL=dev-
|
|
80
|
+
//# sourceMappingURL=dev-FCEC3UKQ.js.map
|
|
81
|
+
//# sourceMappingURL=dev-FCEC3UKQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/dev.ts"],"names":[],"mappings":"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","file":"dev-FCEC3UKQ.js","sourcesContent":["import { createServer, loadEnv } from \"vite\"\nimport { runDiagnostics } from \"../core/diagnostics\"\nimport { timedAsync } from \"../core/profile\"\nimport { scanProject } from \"../core/scan\"\nimport { vantagePlugin } from \"../vite/index\"\nimport {\n applyApiBaseUrlFlag,\n log,\n printDiagnostics,\n reportPortInUse,\n resolveHmrOverlay,\n resolveHostOptions,\n resolvePortOptions,\n type ParsedArgs,\n} from \"./util\"\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 applyApiBaseUrlFlag(args)\n const env = { ...process.env, ...loadEnv(mode, root, \"\") }\n const ports = resolvePortOptions(args.flags, 5173)\n if (!ports.ok) {\n log.error(ports.error)\n return 1\n }\n const { port, strictPort } = ports\n const hosts = resolveHostOptions(args.flags)\n if (!hosts.ok) {\n log.error(hosts.error)\n return 1\n }\n const overlay = resolveHmrOverlay(args.flags)\n\n const server = await timedAsync(\"vite:createServer\", () =>\n createServer({\n configFile: false,\n root,\n mode,\n // The model was just scanned for diagnostics; hand it over so the plugin\n // does not walk the project again.\n plugins: [vantagePlugin({ root, env, model })],\n // `host` / `allowedHosts` are only present when asked for, and `hmr` is\n // left alone unless the overlay is being turned off, so Vite's own\n // defaults (host, port, protocol) keep applying.\n server: {\n port,\n strictPort,\n ...hosts.options,\n ...(overlay ? {} : { hmr: { overlay: false } }),\n },\n clearScreen: false,\n }),\n )\n\n try {\n await timedAsync(\"vite:listen\", () => server.listen())\n } catch (err) {\n await server.close().catch(() => {})\n if (reportPortInUse(err, port, strictPort)) return 1\n throw err\n }\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"]}
|
package/dist/doc/index.js
CHANGED
|
@@ -91,6 +91,7 @@ function themeToCssVars(theme) {
|
|
|
91
91
|
if (theme.maxWidth) vars["--doc-max-width"] = theme.maxWidth;
|
|
92
92
|
return Object.keys(vars).length > 0 ? vars : void 0;
|
|
93
93
|
}
|
|
94
|
+
var PRINT_PAGE_CSS = "@media print { @page { margin: 0 } }";
|
|
94
95
|
function printLabel() {
|
|
95
96
|
return navigator.language.toLowerCase().startsWith("ja") ? "PDF \u3068\u3057\u3066\u4FDD\u5B58" : "Save as PDF";
|
|
96
97
|
}
|
|
@@ -108,6 +109,7 @@ var Document = forwardRef(function Document2({ theme, style, ...props }, ref) {
|
|
|
108
109
|
...props
|
|
109
110
|
}
|
|
110
111
|
),
|
|
112
|
+
/* @__PURE__ */ jsx("style", { children: PRINT_PAGE_CSS }),
|
|
111
113
|
/* @__PURE__ */ jsxs(
|
|
112
114
|
Button,
|
|
113
115
|
{
|
package/dist/doc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/doc/print.ts","../../src/doc/document.tsx"],"names":["Document"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Printing a document — the browser's own print dialog, where \"Save as PDF\"\n * is the download. Paper is white and backgrounds are dropped by default, so a\n * dark theme would print pale text on nothing: the page is switched to light\n * for the duration and put back afterwards.\n */\n\nconst DARK_CLASS = \"dark\"\nconst THEME_ATTR = \"data-theme\"\n\ntype Restore = () => void\n\nlet restore: Restore | null = null\n\n/** Drop every dark marker on `<html>`/`<body>`, remembering exactly what was there. */\nfunction forceLight(): void {\n if (restore) return\n const undo: Restore[] = []\n for (const el of [document.documentElement, document.body]) {\n if (!el) continue\n if (el.classList.contains(DARK_CLASS)) {\n el.classList.remove(DARK_CLASS)\n undo.push(() => el.classList.add(DARK_CLASS))\n }\n if (el.getAttribute(THEME_ATTR) === \"dark\") {\n el.setAttribute(THEME_ATTR, \"light\")\n undo.push(() => el.setAttribute(THEME_ATTR, \"dark\"))\n }\n }\n restore = () => {\n for (const fn of undo) fn()\n }\n}\n\nfunction restoreTheme(): void {\n restore?.()\n restore = null\n}\n\nfunction nextFrame(): Promise<void> {\n return new Promise((resolve) => {\n let settled = false\n const settle = () => {\n if (settled) return\n settled = true\n resolve()\n }\n requestAnimationFrame(settle)\n setTimeout(settle, 50)\n })\n}\n\n/**\n * Canvas charts keep the colours they were painted with, and a CSS switch at\n * print time does not repaint them. Their tokens are re-read a frame after the\n * theme flips, then React re-inits the chart, which animates in from empty —\n * printed mid-way, the bars are missing. So wait a few frames for the re-init\n * to start, then for every chart to report its paint done.\n */\nconst REPAINT_FRAMES = 4\nconst CHART_TIMEOUT_MS = 3000\n\nasync function waitForCharts(): Promise<void> {\n const deadline = performance.now() + CHART_TIMEOUT_MS\n while (performance.now() < deadline) {\n if (!document.querySelector('[data-slot=\"echart-canvas\"][data-rendering]')) return\n await nextFrame()\n }\n}\n\n/**\n * The theme comes back on `afterprint` (see `watchPrintEvents`), not after\n * `window.print()` returns — not every browser blocks on the dialog.\n */\nexport async function printDocument(): Promise<void> {\n const wasForced = restore !== null\n forceLight()\n try {\n if (!wasForced && restore) {\n for (let i = 0; i < REPAINT_FRAMES; i++) await nextFrame()\n }\n await waitForCharts()\n window.print()\n } catch (error) {\n restoreTheme()\n throw error\n }\n}\n\n/**\n * Must be mounted while a document is on screen. It also covers the browser's\n * own Print command, which skips the button: flipping the theme in\n * `beforeprint` still gets the text and rules right, though canvas charts\n * cannot repaint in time on that path.\n */\nexport function watchPrintEvents(): () => void {\n window.addEventListener(\"beforeprint\", forceLight)\n window.addEventListener(\"afterprint\", restoreTheme)\n return () => {\n window.removeEventListener(\"beforeprint\", forceLight)\n window.removeEventListener(\"afterprint\", restoreTheme)\n }\n}\n","import { forwardRef, useEffect } from \"react\"\nimport type { CSSProperties, HTMLAttributes } from \"react\"\nimport { PrinterIcon } from \"lucide-react\"\n\nimport { Button } from \"../ui/button\"\nimport { printDocument, watchPrintEvents } from \"./print\"\nimport type { DocumentTheme } from \"./types\"\n\nexport interface DocumentProps extends HTMLAttributes<HTMLElement> {\n /** Token overrides for this document; anything omitted follows the app's theme. */\n theme?: DocumentTheme\n}\n\n/**\n * Only the keys the document set are emitted — the rest resolve up the\n * cascade to `--doc-*` in theme.css. Writing defaults here would freeze every\n * document to light.\n */\nfunction themeToCssVars(theme: DocumentTheme | undefined): CSSProperties | undefined {\n if (!theme) return undefined\n const vars: Record<string, string> = {}\n if (theme.fg) vars[\"--doc-fg\"] = theme.fg\n if (theme.muted) vars[\"--doc-muted\"] = theme.muted\n if (theme.accent) vars[\"--doc-accent\"] = theme.accent\n if (theme.border) vars[\"--doc-border\"] = theme.border\n if (theme.subtle) vars[\"--doc-subtle\"] = theme.subtle\n if (theme.fontBody) vars[\"--doc-font-body\"] = theme.fontBody\n if (theme.fontHeading) vars[\"--doc-font-heading\"] = theme.fontHeading\n if (theme.fontMono) vars[\"--doc-font-mono\"] = theme.fontMono\n if (theme.sizeBody) vars[\"--doc-size-body\"] = theme.sizeBody\n if (theme.lineHeight) vars[\"--doc-line-height\"] = theme.lineHeight\n if (theme.maxWidth) vars[\"--doc-max-width\"] = theme.maxWidth\n return Object.keys(vars).length > 0 ? (vars as CSSProperties) : undefined\n}\n\n/** The one piece of chrome a document shows: English, Japanese for a Japanese browser. */\nfunction printLabel(): string {\n return navigator.language.toLowerCase().startsWith(\"ja\") ? \"PDF として保存\" : \"Save as PDF\"\n}\n\n/**\n * The container of a document page. Plain elements written inside it —\n * headings, paragraphs, lists, tables, quotes, code, figures — are typeset by\n * the `[data-slot=\"document\"]` rules in theme.css, so the page body needs no\n * classes. Those rules sit in `@layer components`, below Tailwind utilities, so\n * a `className` on any element still wins.\n *\n * It also carries its own way out: a button that opens the print dialog, where\n * \"Save as PDF\" is the download. The print rules in theme.css leave only the\n * document on paper.\n */\nexport const Document = forwardRef<HTMLElement, DocumentProps>(function Document(\n { theme, style, ...props },\n ref,\n) {\n const themeVars = themeToCssVars(theme)\n const label = printLabel()\n useEffect(() => watchPrintEvents(), [])\n return (\n <>\n <article\n ref={ref}\n data-slot=\"document\"\n style={themeVars || style ? { ...themeVars, ...style } : undefined}\n {...props}\n />\n <Button\n data-slot=\"document-print\"\n variant=\"outline\"\n size=\"sm\"\n className=\"fixed right-4 bottom-4 z-10 shadow-sm\"\n onClick={() => void printDocument()}\n title={label}\n >\n <PrinterIcon aria-hidden=\"true\" />\n {label}\n </Button>\n </>\n )\n})\nDocument.displayName = \"Document\"\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/doc/print.ts","../../src/doc/document.tsx"],"names":["Document"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Printing a document — the browser's own print dialog, where \"Save as PDF\"\n * is the download. Paper is white and backgrounds are dropped by default, so a\n * dark theme would print pale text on nothing: the page is switched to light\n * for the duration and put back afterwards.\n */\n\nconst DARK_CLASS = \"dark\"\nconst THEME_ATTR = \"data-theme\"\n\ntype Restore = () => void\n\nlet restore: Restore | null = null\n\n/** Drop every dark marker on `<html>`/`<body>`, remembering exactly what was there. */\nfunction forceLight(): void {\n if (restore) return\n const undo: Restore[] = []\n for (const el of [document.documentElement, document.body]) {\n if (!el) continue\n if (el.classList.contains(DARK_CLASS)) {\n el.classList.remove(DARK_CLASS)\n undo.push(() => el.classList.add(DARK_CLASS))\n }\n if (el.getAttribute(THEME_ATTR) === \"dark\") {\n el.setAttribute(THEME_ATTR, \"light\")\n undo.push(() => el.setAttribute(THEME_ATTR, \"dark\"))\n }\n }\n restore = () => {\n for (const fn of undo) fn()\n }\n}\n\nfunction restoreTheme(): void {\n restore?.()\n restore = null\n}\n\nfunction nextFrame(): Promise<void> {\n return new Promise((resolve) => {\n let settled = false\n const settle = () => {\n if (settled) return\n settled = true\n resolve()\n }\n requestAnimationFrame(settle)\n setTimeout(settle, 50)\n })\n}\n\n/**\n * Canvas charts keep the colours they were painted with, and a CSS switch at\n * print time does not repaint them. Their tokens are re-read a frame after the\n * theme flips, then React re-inits the chart, which animates in from empty —\n * printed mid-way, the bars are missing. So wait a few frames for the re-init\n * to start, then for every chart to report its paint done.\n */\nconst REPAINT_FRAMES = 4\nconst CHART_TIMEOUT_MS = 3000\n\nasync function waitForCharts(): Promise<void> {\n const deadline = performance.now() + CHART_TIMEOUT_MS\n while (performance.now() < deadline) {\n if (!document.querySelector('[data-slot=\"echart-canvas\"][data-rendering]')) return\n await nextFrame()\n }\n}\n\n/**\n * The theme comes back on `afterprint` (see `watchPrintEvents`), not after\n * `window.print()` returns — not every browser blocks on the dialog.\n */\nexport async function printDocument(): Promise<void> {\n const wasForced = restore !== null\n forceLight()\n try {\n if (!wasForced && restore) {\n for (let i = 0; i < REPAINT_FRAMES; i++) await nextFrame()\n }\n await waitForCharts()\n window.print()\n } catch (error) {\n restoreTheme()\n throw error\n }\n}\n\n/**\n * Must be mounted while a document is on screen. It also covers the browser's\n * own Print command, which skips the button: flipping the theme in\n * `beforeprint` still gets the text and rules right, though canvas charts\n * cannot repaint in time on that path.\n */\nexport function watchPrintEvents(): () => void {\n window.addEventListener(\"beforeprint\", forceLight)\n window.addEventListener(\"afterprint\", restoreTheme)\n return () => {\n window.removeEventListener(\"beforeprint\", forceLight)\n window.removeEventListener(\"afterprint\", restoreTheme)\n }\n}\n","import { forwardRef, useEffect } from \"react\"\nimport type { CSSProperties, HTMLAttributes } from \"react\"\nimport { PrinterIcon } from \"lucide-react\"\n\nimport { Button } from \"../ui/button\"\nimport { printDocument, watchPrintEvents } from \"./print\"\nimport type { DocumentTheme } from \"./types\"\n\nexport interface DocumentProps extends HTMLAttributes<HTMLElement> {\n /** Token overrides for this document; anything omitted follows the app's theme. */\n theme?: DocumentTheme\n}\n\n/**\n * Only the keys the document set are emitted — the rest resolve up the\n * cascade to `--doc-*` in theme.css. Writing defaults here would freeze every\n * document to light.\n */\nfunction themeToCssVars(theme: DocumentTheme | undefined): CSSProperties | undefined {\n if (!theme) return undefined\n const vars: Record<string, string> = {}\n if (theme.fg) vars[\"--doc-fg\"] = theme.fg\n if (theme.muted) vars[\"--doc-muted\"] = theme.muted\n if (theme.accent) vars[\"--doc-accent\"] = theme.accent\n if (theme.border) vars[\"--doc-border\"] = theme.border\n if (theme.subtle) vars[\"--doc-subtle\"] = theme.subtle\n if (theme.fontBody) vars[\"--doc-font-body\"] = theme.fontBody\n if (theme.fontHeading) vars[\"--doc-font-heading\"] = theme.fontHeading\n if (theme.fontMono) vars[\"--doc-font-mono\"] = theme.fontMono\n if (theme.sizeBody) vars[\"--doc-size-body\"] = theme.sizeBody\n if (theme.lineHeight) vars[\"--doc-line-height\"] = theme.lineHeight\n if (theme.maxWidth) vars[\"--doc-max-width\"] = theme.maxWidth\n return Object.keys(vars).length > 0 ? (vars as CSSProperties) : undefined\n}\n\n/**\n * With no page margin the browser has nowhere to print its date / URL header\n * and footer. Rendered by `<Document>` rather than put in theme.css because an\n * `@page` rule cannot be scoped — there it would reach every dashboard too.\n */\nconst PRINT_PAGE_CSS = \"@media print { @page { margin: 0 } }\"\n\n/** The one piece of chrome a document shows: English, Japanese for a Japanese browser. */\nfunction printLabel(): string {\n return navigator.language.toLowerCase().startsWith(\"ja\") ? \"PDF として保存\" : \"Save as PDF\"\n}\n\n/**\n * The container of a document page. Plain elements written inside it —\n * headings, paragraphs, lists, tables, quotes, code, figures — are typeset by\n * the `[data-slot=\"document\"]` rules in theme.css, so the page body needs no\n * classes. Those rules sit in `@layer components`, below Tailwind utilities, so\n * a `className` on any element still wins.\n *\n * It also carries its own way out: a button that opens the print dialog, where\n * \"Save as PDF\" is the download. The print rules in theme.css leave only the\n * document on paper.\n */\nexport const Document = forwardRef<HTMLElement, DocumentProps>(function Document(\n { theme, style, ...props },\n ref,\n) {\n const themeVars = themeToCssVars(theme)\n const label = printLabel()\n useEffect(() => watchPrintEvents(), [])\n return (\n <>\n <article\n ref={ref}\n data-slot=\"document\"\n style={themeVars || style ? { ...themeVars, ...style } : undefined}\n {...props}\n />\n <style>{PRINT_PAGE_CSS}</style>\n <Button\n data-slot=\"document-print\"\n variant=\"outline\"\n size=\"sm\"\n className=\"fixed right-4 bottom-4 z-10 shadow-sm\"\n onClick={() => void printDocument()}\n title={label}\n >\n <PrinterIcon aria-hidden=\"true\" />\n {label}\n </Button>\n </>\n )\n})\nDocument.displayName = \"Document\"\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadCatalog, isDocLang, DOC_LANGS, DEFAULT_DOC_LANG, docsForLang, readDoc, resolveDoc, groupBySection } from './chunk-2KRCGXBY.js';
|
|
2
|
-
import { log, printJson } from './chunk-
|
|
2
|
+
import { log, printJson } from './chunk-QI3XQKHS.js';
|
|
3
3
|
import './chunk-C2CX6GLX.js';
|
|
4
4
|
import pc from 'picocolors';
|
|
5
5
|
|
|
@@ -110,5 +110,5 @@ async function docs(_root, args) {
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
export { docs };
|
|
113
|
-
//# sourceMappingURL=docs-
|
|
114
|
-
//# sourceMappingURL=docs-
|
|
113
|
+
//# sourceMappingURL=docs-EJJ3BECT.js.map
|
|
114
|
+
//# sourceMappingURL=docs-EJJ3BECT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/docs.ts"],"names":["content"],"mappings":"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","file":"docs-
|
|
1
|
+
{"version":3,"sources":["../src/cli/docs.ts"],"names":["content"],"mappings":"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","file":"docs-EJJ3BECT.js","sourcesContent":["import pc from \"picocolors\"\nimport {\n DEFAULT_DOC_LANG,\n DOC_LANGS,\n docsForLang,\n groupBySection,\n isDocLang,\n loadCatalog,\n readDoc,\n resolveDoc,\n type DocEntry,\n type DocLang,\n} from \"./docs-catalog\"\nimport { log, printJson, type ParsedArgs } from \"./util\"\n\n/** Highlight Markdown for a terminal. Piped output stays untouched. */\nfunction paint(markdown: string): string {\n if (!process.stdout.isTTY) return markdown\n let inFence = false\n return markdown\n .split(\"\\n\")\n .map((line) => {\n if (/^\\s*(```|~~~)/.test(line)) {\n inFence = !inFence\n return pc.dim(line)\n }\n if (inFence) return line\n if (/^#{1,6}\\s/.test(line)) return pc.bold(pc.magenta(line))\n if (/^>\\s?/.test(line)) return pc.dim(line)\n return line\n })\n .join(\"\\n\")\n}\n\nfunction printList(entries: DocEntry[]): void {\n const width = Math.max(...entries.map((doc) => doc.slug.length), 0)\n for (const group of groupBySection(entries)) {\n console.log(\"\")\n console.log(pc.bold(group.title))\n for (const doc of group.docs) {\n const slug = doc.slug.padEnd(width)\n console.log(` ${pc.cyan(slug)} ${doc.description || doc.title}`)\n }\n }\n console.log(\"\")\n console.log(pc.dim(\"vantage docs <name> show one page --json machine-readable\"))\n console.log(pc.dim(\"vantage docs --all show every page --lang ja | en\"))\n}\n\nfunction toJson(doc: DocEntry, content: string) {\n return {\n slug: doc.slug,\n lang: doc.lang,\n title: doc.title,\n description: doc.description,\n section: doc.section,\n sectionTitle: doc.sectionTitle,\n content,\n }\n}\n\n/** `vantage docs [name] [--list] [--all] [--json] [--lang ja|en]` */\nexport async function docs(_root: string, args: ParsedArgs): Promise<number> {\n const catalog = loadCatalog()\n if (!catalog) {\n log.error(\"The bundled documentation is missing. Reinstall @squadbase/vantage, or run `pnpm build` in the framework repo.\")\n return 1\n }\n\n const langFlag = args.flags.lang\n if (langFlag !== undefined && !isDocLang(langFlag)) {\n log.error(`Unknown --lang \"${String(langFlag)}\". Available: ${DOC_LANGS.join(\", \")}`)\n return 1\n }\n const lang: DocLang = isDocLang(langFlag) ? langFlag : DEFAULT_DOC_LANG\n\n const entries = docsForLang(catalog, lang)\n if (entries.length === 0) {\n log.error(`No documentation bundled for \"${lang}\".`)\n return 1\n }\n\n const json = Boolean(args.flags.json)\n const name = args.positionals[1]\n\n if (args.flags.all) {\n const pages = entries.map((doc) => ({ doc, content: readDoc(doc) }))\n if (json) {\n printJson({ lang, docs: pages.map(({ doc, content }) => toJson(doc, content)) })\n return 0\n }\n process.stdout.write(pages.map(({ content }) => content.trimEnd()).join(\"\\n\\n---\\n\\n\") + \"\\n\")\n return 0\n }\n\n if (!name || args.flags.list) {\n if (json) {\n printJson({\n lang,\n docs: entries.map(({ slug, title, description, section, sectionTitle }) => ({\n slug,\n title,\n description,\n section,\n sectionTitle,\n })),\n })\n return 0\n }\n printList(entries)\n return 0\n }\n\n const found = resolveDoc(entries, name)\n if (found.kind === \"ambiguous\") {\n log.error(`\"${name}\" matches several pages: ${found.matches.map((d) => d.slug).join(\", \")}`)\n return 1\n }\n if (found.kind === \"missing\") {\n const suggestions = found.suggestions.map((d) => d.slug)\n log.error(\n suggestions.length\n ? `No page named \"${name}\". Did you mean: ${suggestions.slice(0, 8).join(\", \")}?`\n : `No page named \"${name}\". Run \\`vantage docs\\` to list every page.`,\n )\n return 1\n }\n\n const content = readDoc(found.doc)\n if (json) {\n printJson(toJson(found.doc, content))\n return 0\n }\n process.stdout.write(paint(content.trimEnd()) + \"\\n\")\n return 0\n}\n"]}
|
|
@@ -2,7 +2,7 @@ import { runDiagnostics } from './chunk-BCE22JSM.js';
|
|
|
2
2
|
import './chunk-JGRMRXXZ.js';
|
|
3
3
|
import './chunk-KLEIVDUV.js';
|
|
4
4
|
import { scanProject } from './chunk-ZVANIULZ.js';
|
|
5
|
-
import { printJson, frameworkVersion, log } from './chunk-
|
|
5
|
+
import { printJson, frameworkVersion, log } from './chunk-QI3XQKHS.js';
|
|
6
6
|
import './chunk-C2CX6GLX.js';
|
|
7
7
|
import fs from 'fs';
|
|
8
8
|
import path from 'path';
|
|
@@ -19,7 +19,7 @@ async function doctor(root, args) {
|
|
|
19
19
|
});
|
|
20
20
|
const pkgPath = path.join(root, "package.json");
|
|
21
21
|
facets.push({ name: "package.json", ok: fs.existsSync(pkgPath), detail: fs.existsSync(pkgPath) ? "found" : "missing" });
|
|
22
|
-
const lockfiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock"];
|
|
22
|
+
const lockfiles = ["bun.lock", "bun.lockb", "pnpm-lock.yaml", "package-lock.json", "yarn.lock"];
|
|
23
23
|
const lock = lockfiles.find((f) => fs.existsSync(path.join(root, f)) || fs.existsSync(path.join(root, "..", f)) || fs.existsSync(path.join(root, "..", "..", f)));
|
|
24
24
|
facets.push({ name: "lockfile", ok: Boolean(lock), detail: lock ?? "none found" });
|
|
25
25
|
let installedVantage = "not installed";
|
|
@@ -54,5 +54,5 @@ async function doctor(root, args) {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
export { doctor };
|
|
57
|
-
//# sourceMappingURL=doctor-
|
|
58
|
-
//# sourceMappingURL=doctor-
|
|
57
|
+
//# sourceMappingURL=doctor-WHZXPERA.js.map
|
|
58
|
+
//# sourceMappingURL=doctor-WHZXPERA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/doctor.ts"],"names":["require"],"mappings":"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","file":"doctor-WHZXPERA.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { runDiagnostics } from \"../core/diagnostics\"\nimport { scanProject } from \"../core/scan\"\nimport { frameworkVersion, log, printJson, type ParsedArgs } from \"./util\"\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 = [\"bun.lock\", \"bun.lockb\", \"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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { log, resolvePortOptions, reportPortInUse } from './chunk-
|
|
1
|
+
import { log, resolvePortOptions, resolveHostOptions, reportPortInUse } from './chunk-QI3XQKHS.js';
|
|
2
2
|
import './chunk-C2CX6GLX.js';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
@@ -18,6 +18,11 @@ async function preview(root, args) {
|
|
|
18
18
|
return 1;
|
|
19
19
|
}
|
|
20
20
|
const { port, strictPort } = ports;
|
|
21
|
+
const hosts = resolveHostOptions(args.flags);
|
|
22
|
+
if (!hosts.ok) {
|
|
23
|
+
log.error(hosts.error);
|
|
24
|
+
return 1;
|
|
25
|
+
}
|
|
21
26
|
if (manifest.mode === "fullstack") {
|
|
22
27
|
const serverPath = path.join(root, "dist", "server", "index.mjs");
|
|
23
28
|
if (!fs.existsSync(serverPath)) {
|
|
@@ -25,6 +30,9 @@ async function preview(root, args) {
|
|
|
25
30
|
return 1;
|
|
26
31
|
}
|
|
27
32
|
if (!strictPort) log.info(" --no-strict-port has no effect on a fullstack preview");
|
|
33
|
+
if (Object.keys(hosts.options).length) {
|
|
34
|
+
log.info(" --host / --allowed-hosts have no effect on a fullstack preview");
|
|
35
|
+
}
|
|
28
36
|
log.brand(`preview (fullstack) \u2192 http://localhost:${port}`);
|
|
29
37
|
const child = spawn(process.execPath, [serverPath], {
|
|
30
38
|
stdio: "inherit",
|
|
@@ -44,7 +52,7 @@ async function preview(root, args) {
|
|
|
44
52
|
configFile: false,
|
|
45
53
|
root,
|
|
46
54
|
build: { outDir: path.join(root, "dist", "client") },
|
|
47
|
-
preview: { port, strictPort }
|
|
55
|
+
preview: { port, strictPort, ...hosts.options }
|
|
48
56
|
});
|
|
49
57
|
} catch (err) {
|
|
50
58
|
if (reportPortInUse(err, port, strictPort)) return 1;
|
|
@@ -57,5 +65,5 @@ async function preview(root, args) {
|
|
|
57
65
|
}
|
|
58
66
|
|
|
59
67
|
export { preview };
|
|
60
|
-
//# sourceMappingURL=preview-
|
|
61
|
-
//# sourceMappingURL=preview-
|
|
68
|
+
//# sourceMappingURL=preview-OGMCNQUO.js.map
|
|
69
|
+
//# sourceMappingURL=preview-OGMCNQUO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/preview.ts"],"names":[],"mappings":"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","file":"preview-OGMCNQUO.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { spawn } from \"node:child_process\"\nimport {\n log,\n reportPortInUse,\n resolveHostOptions,\n resolvePortOptions,\n type ParsedArgs,\n} from \"./util\"\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 ports = resolvePortOptions(args.flags, 4173)\n if (!ports.ok) {\n log.error(ports.error)\n return 1\n }\n const { port, strictPort } = ports\n const hosts = resolveHostOptions(args.flags)\n if (!hosts.ok) {\n log.error(hosts.error)\n return 1\n }\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 // The production Node server binds exactly one port and exits on EADDRINUSE,\n // so a fullstack preview is always strict — there is no walk to opt out of.\n if (!strictPort) log.info(\" --no-strict-port has no effect on a fullstack preview\")\n // The Node server listens on every interface and does no Host check, so\n // there is nothing for these to configure there.\n if (Object.keys(hosts.options).length) {\n log.info(\" --host / --allowed-hosts have no effect on a fullstack preview\")\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 let server: Awaited<ReturnType<typeof vitePreview>>\n try {\n server = await vitePreview({\n configFile: false,\n root,\n build: { outDir: path.join(root, \"dist\", \"client\") },\n preview: { port, strictPort, ...hosts.options },\n })\n } catch (err) {\n if (reportPortInUse(err, port, strictPort)) return 1\n throw err\n }\n log.brand(\"preview (spa)\")\n server.printUrls()\n return new Promise<number>(() => {})\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { extractPageSpec, extractApiSpec } from './chunk-JGRMRXXZ.js';
|
|
2
2
|
import './chunk-KLEIVDUV.js';
|
|
3
3
|
import { scanProject } from './chunk-ZVANIULZ.js';
|
|
4
|
-
import { printJson } from './chunk-
|
|
4
|
+
import { printJson } from './chunk-QI3XQKHS.js';
|
|
5
5
|
import './chunk-C2CX6GLX.js';
|
|
6
6
|
import pc from 'picocolors';
|
|
7
7
|
|
|
@@ -124,5 +124,5 @@ async function routes(root, args) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
export { routes };
|
|
127
|
-
//# sourceMappingURL=routes-
|
|
128
|
-
//# sourceMappingURL=routes-
|
|
127
|
+
//# sourceMappingURL=routes-GTFO5PUF.js.map
|
|
128
|
+
//# sourceMappingURL=routes-GTFO5PUF.js.map
|