@squadbase/vantage 0.6.1 → 0.6.2-dev2.777fe38
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-PLST5Q7T.js → chunk-MP3QSOXL.js} +21 -10
- package/dist/chunk-MP3QSOXL.js.map +1 -0
- package/dist/chunk-PXRX5PEC.js +54 -0
- package/dist/chunk-PXRX5PEC.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-MXI3PZFT.js → chunk-RPZAALCX.js} +5 -49
- package/dist/chunk-RPZAALCX.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 +3 -2
- package/dist/{dev-NZRLOQCL.js → dev-FCEC3UKQ.js} +17 -6
- package/dist/dev-FCEC3UKQ.js.map +1 -0
- package/dist/doc/index.d.ts +4 -0
- package/dist/doc/index.js +107 -11
- 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 +3 -2
- package/dist/table/index.js.map +1 -1
- package/dist/ui/index.js +2 -1
- package/dist/ui/index.js.map +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/en/routing.md +4 -2
- 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/docs/ja/routing.md +4 -2
- package/package.json +1 -1
- package/templates/agents/doc.md +2 -0
- package/theme.css +44 -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-MXI3PZFT.js.map +0 -1
- package/dist/chunk-PLST5Q7T.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
package/docs/en/cli-reference.md
CHANGED
|
@@ -357,6 +357,36 @@ vantage dev --strict-port # will not start unless 5173 is free
|
|
|
357
357
|
> default silently. A fullstack `preview` binds its Node server to exactly one port, so it is **always**
|
|
358
358
|
> strict and `--no-strict-port` has no effect there.
|
|
359
359
|
|
|
360
|
+
## `--host` / `--allowed-hosts` — running behind a reverse proxy
|
|
361
|
+
|
|
362
|
+
By default `vantage dev` and a SPA `vantage preview` bind to `localhost` only and **reject with 403**
|
|
363
|
+
any request whose `Host` header is not `localhost` or the bound address (Vite's DNS-rebinding
|
|
364
|
+
protection). When something with **another hostname** sits in front of the server — a sandbox
|
|
365
|
+
preview proxy, a tunnel, a container network — these two flags let it through.
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
vantage dev --host # listen on every interface
|
|
369
|
+
vantage dev --host 0.0.0.0 # or on one address (--host=:: works too)
|
|
370
|
+
vantage dev --allowed-hosts preview.example.com # allow the hostname the proxy presents (comma-separated for several)
|
|
371
|
+
vantage dev --allowed-hosts true # disable the Host check altogether
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
| Flag | Meaning |
|
|
375
|
+
|---|---|
|
|
376
|
+
| `--host [addr]` | Without a value, bind to **every interface**; with one, bind to that address (Vite's `server.host`) |
|
|
377
|
+
| `--allowed-hosts <list\|true>` | The `Host` headers to accept, comma-separated. `true` disables the check (Vite's `server.allowedHosts`) |
|
|
378
|
+
|
|
379
|
+
`--allowed-hosts` can also come from the environment variable **`VANTAGE_ALLOWED_HOSTS`** (same
|
|
380
|
+
format), which suits a supervisor that starts the server and knows the hostname. When both are
|
|
381
|
+
present, **the flag wins**. With neither, Vite's default applies and only `localhost` is accepted,
|
|
382
|
+
exactly as before.
|
|
383
|
+
|
|
384
|
+
> [!NOTE]
|
|
385
|
+
> `--host` takes the next token as its value, so `vantage --host dev` would read `dev` as the
|
|
386
|
+
> address — write `--host=<addr>` or put `--host` last when a command or path follows it. A fullstack
|
|
387
|
+
> `preview` runs the Node server, which listens on every interface and does no `Host` check, so
|
|
388
|
+
> neither flag has an effect there (the command says so).
|
|
389
|
+
|
|
360
390
|
## Browser output in dev — forwarding and the overlay
|
|
361
391
|
|
|
362
392
|
`vantage dev` **forwards what happens in the browser to the dev terminal**. By default that means
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
| Part | Role |
|
|
28
28
|
| --- | --- |
|
|
29
29
|
| `PageShell` | The outer stack |
|
|
30
|
-
| `PageShellHeader` | The underlined header band: heading on the left, `HeaderEnd` on the right |
|
|
30
|
+
| `PageShellHeader` | The underlined header band: heading on the left, `HeaderEnd` on the right. When the row is too narrow, `HeaderEnd` wraps below the heading |
|
|
31
31
|
| `PageShellHeading` / `PageShellTitle` / `PageShellDescription` | The heading block |
|
|
32
32
|
| `PageShellHeaderEnd` | The right-hand stack |
|
|
33
33
|
| `PageShellMeta` | Asides such as "updated 10 minutes ago" |
|
package/docs/en/routing.md
CHANGED
|
@@ -133,8 +133,10 @@ export default function JuneSummary() {
|
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
Headings, paragraphs, lists, tables, quotes and code inside `<Document>` are styled with no classes
|
|
136
|
-
written. See [UI & theming](ui-and-theming).
|
|
137
|
-
|
|
136
|
+
written. See [UI & theming](ui-and-theming). The "Save as PDF" button at the bottom right
|
|
137
|
+
(labelled "PDF として保存" in a Japanese browser) opens the print dialog. Only the document body is
|
|
138
|
+
printed — the app's header and sidebar are left out — and it prints in the light palette even in dark
|
|
139
|
+
mode. As with `.slide`, only a page module that becomes a route may carry `.doc`.
|
|
138
140
|
|
|
139
141
|
## Directories that are never routed
|
|
140
142
|
|
package/docs/ja/changelog.md
CHANGED
|
@@ -8,6 +8,30 @@ Vantage のリリースごとの変更点です。新しいものが上に来ま
|
|
|
8
8
|
> まだプロトタイプ(**0.x**)です。0.x の間は **minor が実質のメジャー**扱いで、後方互換性の
|
|
9
9
|
> ない変更は minor で入ることがあります。patch は後方互換の機能追加とバグ修正のみです。
|
|
10
10
|
|
|
11
|
+
## v0.6.3
|
|
12
|
+
|
|
13
|
+
リバースプロキシの後ろで dev サーバーを動かせるようになりました(2026-09-23)。
|
|
14
|
+
|
|
15
|
+
### 追加
|
|
16
|
+
|
|
17
|
+
- **`--host [addr]` と `--allowed-hosts <list|true>`** を `vantage dev` / `vantage preview`(SPA)に
|
|
18
|
+
追加しました。Vite は `Host` ヘッダが `localhost` 以外のリクエストを 403 で拒否するため、
|
|
19
|
+
サンドボックスのプレビュープロキシやトンネルなど**別のホスト名で前に立つもの**があると
|
|
20
|
+
そのままでは届きませんでした。`--allowed-hosts` は環境変数 **`VANTAGE_ALLOWED_HOSTS`** でも
|
|
21
|
+
渡せます(フラグが優先)。どちらも指定しなければ挙動は従来どおりです。詳細は
|
|
22
|
+
[CLI リファレンス](cli-reference)を参照してください。
|
|
23
|
+
|
|
24
|
+
## v0.6.2
|
|
25
|
+
|
|
26
|
+
ドキュメントのページを PDF として保存できるようになりました(2026-09-30)。
|
|
27
|
+
|
|
28
|
+
### 追加
|
|
29
|
+
|
|
30
|
+
- **`<Document>` が右下に「PDF として保存」ボタンを出します**(ブラウザの言語が日本語以外なら
|
|
31
|
+
「Save as PDF」)。押すとブラウザの印刷ダイアログが開きます。印刷されるのはドキュメントの本文だけで、
|
|
32
|
+
アプリのヘッダーやサイドバー、ブラウザが付ける日付・URL は載りません。ダークモードでもライトの配色で
|
|
33
|
+
印刷され、チャートは描き終わってから印刷されます。
|
|
34
|
+
|
|
11
35
|
## v0.6.1
|
|
12
36
|
|
|
13
37
|
ドキュメントのページを書けるようになりました(2026-09-25)。
|
package/docs/ja/cli-reference.md
CHANGED
|
@@ -351,6 +351,35 @@ vantage dev --strict-port # 5173 が取れなければ起動し
|
|
|
351
351
|
> また fullstack の `preview` は Node サーバーを 1 ポートに bind するだけなので**常に厳格**で、
|
|
352
352
|
> `--no-strict-port` は効きません。
|
|
353
353
|
|
|
354
|
+
## `--host` / `--allowed-hosts` — リバースプロキシの後ろで動かす
|
|
355
|
+
|
|
356
|
+
`vantage dev` と `vantage preview`(SPA)は、既定では `localhost` にしか bind せず、`Host` ヘッダが
|
|
357
|
+
`localhost` か bind したアドレス以外のリクエストを **403 で拒否**します(Vite の DNS リバインディング
|
|
358
|
+
対策)。サンドボックスのプレビュープロキシ・トンネル・コンテナのネットワークなど、**別のホスト名で
|
|
359
|
+
前に立つもの**があるときは、この 2 つを組み合わせて通します。
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
vantage dev --host # すべてのインターフェースで listen
|
|
363
|
+
vantage dev --host 0.0.0.0 # アドレスを明示(--host=:: の形も可)
|
|
364
|
+
vantage dev --allowed-hosts preview.example.com # プロキシが名乗るホスト名を許可(カンマ区切りで複数)
|
|
365
|
+
vantage dev --allowed-hosts true # Host の検査そのものを無効化
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
| フラグ | 意味 |
|
|
369
|
+
|---|---|
|
|
370
|
+
| `--host [addr]` | 値なしなら**すべてのインターフェース**、値があればそのアドレスに bind する(Vite の `server.host`)|
|
|
371
|
+
| `--allowed-hosts <list\|true>` | 受け付ける `Host` ヘッダの一覧(カンマ区切り)。`true` で検査を無効化(Vite の `server.allowedHosts`)|
|
|
372
|
+
|
|
373
|
+
`--allowed-hosts` は環境変数 **`VANTAGE_ALLOWED_HOSTS`** でも渡せます(同じ書式)。サーバーを起動する
|
|
374
|
+
側の仕組みがホスト名を知っている場合はそちらが便利です。フラグと環境変数の両方があれば**フラグが
|
|
375
|
+
勝ちます**。どちらも無ければ Vite の既定のままで、これまでどおり `localhost` だけを受け付けます。
|
|
376
|
+
|
|
377
|
+
> [!NOTE]
|
|
378
|
+
> `--host` の値は次のトークンを取ります。`vantage --host dev` のように直後にコマンドやパスが来る
|
|
379
|
+
> 書き方は値と取り違えるので、その場合は `--host=<addr>` か、末尾に `--host` を置いてください。
|
|
380
|
+
> fullstack の `preview` は Node サーバーがすべてのインターフェースで listen し `Host` を検査しない
|
|
381
|
+
> ので、どちらのフラグも効きません(その旨が表示されます)。
|
|
382
|
+
|
|
354
383
|
## dev のブラウザ出力 — 転送とオーバーレイ
|
|
355
384
|
|
|
356
385
|
`vantage dev` は、ブラウザ側で起きたことを**開発ターミナルへ転送します**。既定で転送するのは
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
| パーツ | 役割 |
|
|
28
28
|
| --- | --- |
|
|
29
29
|
| `PageShell` | 全体の縦積み |
|
|
30
|
-
| `PageShellHeader` | 下線付きのヘッダー帯。左に見出し、右に `HeaderEnd`
|
|
30
|
+
| `PageShellHeader` | 下線付きのヘッダー帯。左に見出し、右に `HeaderEnd`。幅が足りないと `HeaderEnd` は見出しの下へ回り込む |
|
|
31
31
|
| `PageShellHeading` / `PageShellTitle` / `PageShellDescription` | 見出しブロック |
|
|
32
32
|
| `PageShellHeaderEnd` | 右端の縦積み |
|
|
33
33
|
| `PageShellMeta` | 「最終更新 10 分前」のような補足 |
|
package/docs/ja/routing.md
CHANGED
|
@@ -128,8 +128,10 @@ export default function JuneSummary() {
|
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
`<Document>` の中の見出し・段落・リスト・表・引用・コードには、クラスを書かなくてもスタイルが
|
|
131
|
-
当たります。詳しくは [UI とテーマ](ui-and-theming)
|
|
132
|
-
|
|
131
|
+
当たります。詳しくは [UI とテーマ](ui-and-theming)。右下の「PDF として保存」ボタン(ブラウザの
|
|
132
|
+
言語が日本語以外なら「Save as PDF」)から印刷ダイアログを開けます。印刷されるのはドキュメントの本文
|
|
133
|
+
だけで、アプリのヘッダーやサイドバーは載らず、ダークモードでもライトの配色で出ます。`.slide` と
|
|
134
|
+
同じく、`.doc` を付けられるのはルートになるページモジュールだけです。
|
|
133
135
|
|
|
134
136
|
## ルーティングされないディレクトリ
|
|
135
137
|
|
package/package.json
CHANGED
package/templates/agents/doc.md
CHANGED
|
@@ -44,6 +44,8 @@ export default function JuneSummary() {
|
|
|
44
44
|
`useApiQuery` などで読み込むと、開くたびに値が変わります。
|
|
45
45
|
- **チャートは `EChart`(`@squadbase/vantage/components`)を文中に置く。** `figure` で囲めば
|
|
46
46
|
`figcaption` がキャプションになります。
|
|
47
|
+
- **PDF の保存ボタンは作らない。** `<Document>` が右下に PDF 保存のボタンを出し、印刷時は
|
|
48
|
+
本文だけをライトの配色で出します。
|
|
47
49
|
- **ページ全体を包むのは `<Document>` だけ。** `PageShell` などのダッシュボード用の枠で包まない
|
|
48
50
|
(本文の幅と余白は `<Document>` が決めます)。
|
|
49
51
|
|
package/theme.css
CHANGED
|
@@ -397,6 +397,50 @@
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
|
|
400
|
+
/* Printing a document (its "Save as PDF"): only the document reaches paper.
|
|
401
|
+
Scoped with `:has()` so a dashboard prints as it did. Unlayered on purpose —
|
|
402
|
+
these must beat the app frame's Tailwind utilities (`overflow-auto`,
|
|
403
|
+
`h-svh`, `fixed`). The dark theme is dropped by `doc/print.ts`, not here. */
|
|
404
|
+
@media print {
|
|
405
|
+
:root:has([data-slot="document"]) {
|
|
406
|
+
[data-slot="document-print"],
|
|
407
|
+
[data-slot="app-shell"] > header,
|
|
408
|
+
[data-slot="sidebar"],
|
|
409
|
+
[data-slot="sidebar-gap"],
|
|
410
|
+
[data-slot="sidebar-container"] {
|
|
411
|
+
display: none;
|
|
412
|
+
}
|
|
413
|
+
body,
|
|
414
|
+
#root,
|
|
415
|
+
[data-slot="sidebar-wrapper"],
|
|
416
|
+
[data-slot="app-shell"],
|
|
417
|
+
[data-slot="app-shell"] > main {
|
|
418
|
+
height: auto;
|
|
419
|
+
min-height: 0;
|
|
420
|
+
overflow: visible;
|
|
421
|
+
background: none;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/* The page margin is zeroed by `<Document>` (an `@page` rule cannot be
|
|
425
|
+
scoped to it here), which drops the browser's date / URL header and
|
|
426
|
+
footer; this padding is the margin instead, repeated on every page. */
|
|
427
|
+
[data-slot="document"] {
|
|
428
|
+
padding: 16mm 18mm;
|
|
429
|
+
-webkit-box-decoration-break: clone;
|
|
430
|
+
box-decoration-break: clone;
|
|
431
|
+
}
|
|
432
|
+
[data-slot="document"] :where(h1, h2, h3, h4) {
|
|
433
|
+
break-after: avoid;
|
|
434
|
+
}
|
|
435
|
+
[data-slot="document"] :where(figure, img, pre, blockquote, tr) {
|
|
436
|
+
break-inside: avoid;
|
|
437
|
+
}
|
|
438
|
+
[data-slot="document"] :where(table) {
|
|
439
|
+
display: table;
|
|
440
|
+
overflow: visible;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
400
444
|
/* ------------------------------------------------------------ utilities */
|
|
401
445
|
|
|
402
446
|
@utility no-scrollbar {
|
package/dist/add-EISGSZAH.js
DELETED
package/dist/add-EISGSZAH.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"add-EISGSZAH.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/util.ts"],"names":[],"mappings":"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","file":"chunk-3G43C6OL.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport pc from \"picocolors\"\nimport { PAGE_EXTENSIONS } from \"../core/constants\"\nimport type { Diagnostic } from \"../core/types\"\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([\n \"json\",\n \"help\",\n \"force\",\n \"verbose\",\n \"version\",\n \"all\",\n \"list\",\n \"regex\",\n \"pages\",\n \"apis\",\n \"detail\",\n \"strict-port\",\n \"no-strict-port\",\n \"overlay\",\n \"no-overlay\",\n \"h\",\n \"v\",\n])\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/**\n * Apply a `--api-base-url <url>` flag by setting `process.env.PUBLIC_API_BASE_URL`\n * so Vite inlines it into the client bundle (via envPrefix). Setting it on\n * process.env gives the flag precedence over any `.env` file value. No-op when\n * the flag is absent, leaving any `.env` value in effect.\n */\nexport function applyApiBaseUrlFlag(args: ParsedArgs): void {\n const value = args.flags[\"api-base-url\"]\n if (typeof value === \"string\" && value.length) {\n process.env.PUBLIC_API_BASE_URL = value\n }\n}\n\n/** A resolved `--port`, or the reason it could not be resolved. */\nexport type PortResolution =\n | { ok: true; port: number; strictPort: boolean }\n | { ok: false; error: string }\n\n/**\n * Resolve `--port` / `--strict-port` / `--no-strict-port` into Vite's server\n * options.\n *\n * An explicit `--port` is strict by default: writing `--port 3000` means the\n * port is a contract with something outside this process — a reverse proxy, a\n * container port mapping, an OAuth redirect URI — so binding 3001 instead is a\n * silent failure, not a recovery (a supervisor that only checks \"is anything\n * listening on 3000\" will happily report a server that nobody can reach).\n * Without the flag the default is merely \"some free port\", so Vite keeps\n * walking to the next one as it always has, and running two projects at once\n * needs no ceremony. `--strict-port` / `--no-strict-port` override either way.\n *\n * A bad value is an error rather than a silent fallback, for the same reason:\n * a typo'd `--port` that quietly became 5173 is exactly the failure strictness\n * exists to prevent.\n */\nexport function resolvePortOptions(\n flags: Record<string, string | boolean>,\n fallback: number,\n): PortResolution {\n const raw = flags.port\n let port = fallback\n if (raw !== undefined) {\n if (typeof raw !== \"string\") return { ok: false, error: \"--port needs a number, e.g. --port 3000\" }\n const n = Number(raw)\n if (!Number.isInteger(n) || n < 1 || n > 65535) {\n return { ok: false, error: `Invalid --port \"${raw}\" — use an integer between 1 and 65535.` }\n }\n port = n\n }\n const strictPort = flags[\"no-strict-port\"]\n ? false\n : Boolean(flags[\"strict-port\"]) || raw !== undefined\n return { ok: true, port, strictPort }\n}\n\n/**\n * Resolve `--overlay` / `--no-overlay` into Vite's `server.hmr.overlay`.\n *\n * The overlay stays on by default — it is the fastest way for a human to see a\n * runtime error. `--no-overlay` is for the cases where a full-screen error card\n * is in the way rather than helpful: screenshots and demos, and agent-driven\n * sessions where the error already arrives in the terminal through console\n * forwarding and the overlay only obscures the page being inspected.\n */\nexport function resolveHmrOverlay(flags: Record<string, string | boolean>): boolean {\n if (flags.overlay) return true\n return !flags[\"no-overlay\"]\n}\n\n/**\n * Report a strict bind that lost the port, in the one shape dev and preview\n * share. Returns false when `err` is anything else, so the caller rethrows.\n * Vite throws a plain Error (no `code`) for this, hence the message match — a\n * reworded Vite message degrades to the generic handler, not to a wrong one.\n */\nexport function reportPortInUse(err: unknown, port: number, strictPort: boolean): boolean {\n if (!strictPort || !(err instanceof Error) || !/already in use/.test(err.message)) return false\n log.error(`Port ${port} is already in use.`)\n log.info(\" free that port, pass a different --port, or --no-strict-port to take the next one\")\n return true\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/** How far up from a page file to look for the package root. */\nconst QUICK_ROOT_MAX_DEPTH = 5\n\n/**\n * Resolve a positional path to a quick-run project root.\n * A directory → itself; a page file (.tsx/.jsx) → its project; 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 // Walk up to the nearest package.json so `vantage ./demo/src/index.tsx`\n // starts in ./demo — the directory holding the page is not the project\n // root once pages live under src/ (or in any nested route directory).\n let dir = path.dirname(abs)\n for (let i = 0; i <= QUICK_ROOT_MAX_DEPTH; i++) {\n if (fs.existsSync(path.join(dir, \"package.json\"))) return dir\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\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"]}
|