@squadbase/vantage 0.6.1-dev2.5f947f1 → 0.6.2-dev1.3e69e88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/add-DY4AXANK.js +6 -0
  2. package/dist/add-DY4AXANK.js.map +1 -0
  3. package/dist/{build-O5TVNH4E.js → build-JB4VOMUI.js} +3 -3
  4. package/dist/{build-O5TVNH4E.js.map → build-JB4VOMUI.js.map} +1 -1
  5. package/dist/{check-WFBEDHDR.js → check-ZJYK6RLG.js} +3 -3
  6. package/dist/{check-WFBEDHDR.js.map → check-ZJYK6RLG.js.map} +1 -1
  7. package/dist/{chunk-LSRMRIXA.js → chunk-MP3QSOXL.js} +14 -9
  8. package/dist/chunk-MP3QSOXL.js.map +1 -0
  9. package/dist/{chunk-3G43C6OL.js → chunk-QI3XQKHS.js} +39 -3
  10. package/dist/chunk-QI3XQKHS.js.map +1 -0
  11. package/dist/{chunk-QDZA5JSL.js → chunk-U2M6HGKQ.js} +3 -3
  12. package/dist/{chunk-QDZA5JSL.js.map → chunk-U2M6HGKQ.js.map} +1 -1
  13. package/dist/cli.js +14 -11
  14. package/dist/cli.js.map +1 -1
  15. package/dist/components/index.d.ts +7 -0
  16. package/dist/components/index.js +1 -1
  17. package/dist/{dev-NZRLOQCL.js → dev-FCEC3UKQ.js} +17 -6
  18. package/dist/dev-FCEC3UKQ.js.map +1 -0
  19. package/dist/doc/index.js +2 -0
  20. package/dist/doc/index.js.map +1 -1
  21. package/dist/{docs-ZGDJUHJI.js → docs-EJJ3BECT.js} +3 -3
  22. package/dist/{docs-ZGDJUHJI.js.map → docs-EJJ3BECT.js.map} +1 -1
  23. package/dist/{doctor-VFKEMR54.js → doctor-WHZXPERA.js} +4 -4
  24. package/dist/doctor-WHZXPERA.js.map +1 -0
  25. package/dist/{preview-QDCIVVSR.js → preview-OGMCNQUO.js} +12 -4
  26. package/dist/preview-OGMCNQUO.js.map +1 -0
  27. package/dist/{routes-RHP5FVGD.js → routes-GTFO5PUF.js} +3 -3
  28. package/dist/{routes-RHP5FVGD.js.map → routes-GTFO5PUF.js.map} +1 -1
  29. package/dist/{search-RFBELGY7.js → search-6Y422SV6.js} +3 -3
  30. package/dist/{search-RFBELGY7.js.map → search-6Y422SV6.js.map} +1 -1
  31. package/dist/slide/index.js +61 -15
  32. package/dist/slide/index.js.map +1 -1
  33. package/dist/table/index.js +1 -1
  34. package/dist/{upgrade-GF2P67M6.js → upgrade-AL4KZZR4.js} +4 -4
  35. package/dist/{upgrade-GF2P67M6.js.map → upgrade-AL4KZZR4.js.map} +1 -1
  36. package/docs/en/changelog.md +24 -0
  37. package/docs/en/cli-reference.md +30 -0
  38. package/docs/en/parts/page-shell.md +1 -1
  39. package/docs/ja/changelog.md +24 -0
  40. package/docs/ja/cli-reference.md +29 -0
  41. package/docs/ja/parts/page-shell.md +1 -1
  42. package/package.json +6 -2
  43. package/theme.css +8 -0
  44. package/dist/add-EISGSZAH.js +0 -6
  45. package/dist/add-EISGSZAH.js.map +0 -1
  46. package/dist/chunk-3G43C6OL.js.map +0 -1
  47. package/dist/chunk-LSRMRIXA.js.map +0 -1
  48. package/dist/dev-NZRLOQCL.js.map +0 -1
  49. package/dist/doctor-VFKEMR54.js.map +0 -1
  50. package/dist/preview-QDCIVVSR.js.map +0 -1
@@ -2,7 +2,7 @@ import { FILE_PAGE_MAX_ROWS, FILE_PAGE_MAX_BYTES } from '../chunk-C2CX6GLX.js';
2
2
  import { useQuery } from '../chunk-PVTHHV7X.js';
3
3
  import '../chunk-DTDVSFRY.js';
4
4
  import { Loading, ErrorState } from '../chunk-5ZOP4SQR.js';
5
- import { PageShell, PageShellHeader, PageShellHeading, PageShellTitle, PageShellMeta, PageShellActions, PageShellContent } from '../chunk-LSRMRIXA.js';
5
+ import { PageShell, PageShellHeader, PageShellHeading, PageShellTitle, PageShellMeta, PageShellActions, PageShellContent } from '../chunk-MP3QSOXL.js';
6
6
  import '../chunk-RPZAALCX.js';
7
7
  import { Button } from '../chunk-PXRX5PEC.js';
8
8
  import { cn } from '../chunk-A2UUGASH.js';
@@ -1,8 +1,8 @@
1
- import { syncAgentsFile } from './chunk-QDZA5JSL.js';
1
+ import { syncAgentsFile } from './chunk-U2M6HGKQ.js';
2
2
  import { generateArtifacts } from './chunk-EP6JHXSR.js';
3
3
  import './chunk-KLEIVDUV.js';
4
4
  import { scanProject } from './chunk-ZVANIULZ.js';
5
- import { frameworkVersion, printJson, log } from './chunk-3G43C6OL.js';
5
+ import { frameworkVersion, printJson, log } from './chunk-QI3XQKHS.js';
6
6
  import './chunk-C2CX6GLX.js';
7
7
 
8
8
  // @squadbase/vantage — generated build. Do not edit.
@@ -25,5 +25,5 @@ async function upgrade(root, args) {
25
25
  }
26
26
 
27
27
  export { upgrade };
28
- //# sourceMappingURL=upgrade-GF2P67M6.js.map
29
- //# sourceMappingURL=upgrade-GF2P67M6.js.map
28
+ //# sourceMappingURL=upgrade-AL4KZZR4.js.map
29
+ //# sourceMappingURL=upgrade-AL4KZZR4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/upgrade.ts"],"names":[],"mappings":";;;;;;;;;;AAWA,eAAsB,OAAA,CAAQ,MAAc,IAAA,EAAmC;AAC7E,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,EAAA,iBAAA,CAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAKjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAElC,EAAA,IAAI,IAAA,CAAK,MAAM,IAAA,EAAM;AACnB,IAAA,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,EAAC,EAAG,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,MAAA,KAAW,SAAA,EAAW,CAAA;AACtG,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,KAAA,CAAM,CAAA,gBAAA,EAAc,OAAO,CAAA,CAAE,CAAA;AACjC,EAAA,GAAA,CAAI,GAAG,iCAAiC,CAAA;AACxC,EAAA,IAAI,MAAA,KAAW,SAAA,EAAW,GAAA,CAAI,EAAA,CAAG,kDAAkD,CAAA;AACnF,EAAA,GAAA,CAAI,KAAK,wDAAwD,CAAA;AACjE,EAAA,OAAO,CAAA;AACT","file":"upgrade-GF2P67M6.js","sourcesContent":["import { generateArtifacts } from \"../core/generate\"\nimport { scanProject } from \"../core/scan\"\nimport { syncAgentsFile } from \"./add\"\nimport { frameworkVersion, log, printJson, type ParsedArgs } from \"./util\"\n\n/**\n * `vantage upgrade` — reconcile generated artifacts with the installed\n * framework version and apply any needed code transforms. v0.1 only\n * regenerates artifacts and re-syncs a managed AGENTS.md + agents/*.md; the\n * migration hook exists for future major versions.\n */\nexport async function upgrade(root: string, args: ParsedArgs): Promise<number> {\n const version = frameworkVersion()\n const model = scanProject(root)\n generateArtifacts({ root, model })\n\n // Keep an adopted AGENTS.md + agents/*.md (the app-author map and its\n // per-artifact-type knowledge files) in step with the framework's canonical\n // copies. No-op when the app never ran `vantage add agents`.\n const agents = syncAgentsFile(root)\n\n if (args.flags.json) {\n printJson({ ok: true, version, transforms: [], regenerated: true, agentsSynced: agents === \"updated\" })\n return 0\n }\n\n log.brand(`upgrade → v${version}`)\n log.ok(\"Regenerated .vantage artifacts.\")\n if (agents === \"updated\") log.ok(\"Synced AGENTS.md and agents/ from the framework.\")\n log.info(\"No breaking code transforms required for this version.\")\n return 0\n}\n"]}
1
+ {"version":3,"sources":["../src/cli/upgrade.ts"],"names":[],"mappings":";;;;;;;;;;AAWA,eAAsB,OAAA,CAAQ,MAAc,IAAA,EAAmC;AAC7E,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,EAAA,iBAAA,CAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAKjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAElC,EAAA,IAAI,IAAA,CAAK,MAAM,IAAA,EAAM;AACnB,IAAA,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,EAAC,EAAG,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,MAAA,KAAW,SAAA,EAAW,CAAA;AACtG,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,KAAA,CAAM,CAAA,gBAAA,EAAc,OAAO,CAAA,CAAE,CAAA;AACjC,EAAA,GAAA,CAAI,GAAG,iCAAiC,CAAA;AACxC,EAAA,IAAI,MAAA,KAAW,SAAA,EAAW,GAAA,CAAI,EAAA,CAAG,kDAAkD,CAAA;AACnF,EAAA,GAAA,CAAI,KAAK,wDAAwD,CAAA;AACjE,EAAA,OAAO,CAAA;AACT","file":"upgrade-AL4KZZR4.js","sourcesContent":["import { generateArtifacts } from \"../core/generate\"\nimport { scanProject } from \"../core/scan\"\nimport { syncAgentsFile } from \"./add\"\nimport { frameworkVersion, log, printJson, type ParsedArgs } from \"./util\"\n\n/**\n * `vantage upgrade` — reconcile generated artifacts with the installed\n * framework version and apply any needed code transforms. v0.1 only\n * regenerates artifacts and re-syncs a managed AGENTS.md + agents/*.md; the\n * migration hook exists for future major versions.\n */\nexport async function upgrade(root: string, args: ParsedArgs): Promise<number> {\n const version = frameworkVersion()\n const model = scanProject(root)\n generateArtifacts({ root, model })\n\n // Keep an adopted AGENTS.md + agents/*.md (the app-author map and its\n // per-artifact-type knowledge files) in step with the framework's canonical\n // copies. No-op when the app never ran `vantage add agents`.\n const agents = syncAgentsFile(root)\n\n if (args.flags.json) {\n printJson({ ok: true, version, transforms: [], regenerated: true, agentsSynced: agents === \"updated\" })\n return 0\n }\n\n log.brand(`upgrade → v${version}`)\n log.ok(\"Regenerated .vantage artifacts.\")\n if (agents === \"updated\") log.ok(\"Synced AGENTS.md and agents/ from the framework.\")\n log.info(\"No breaking code transforms required for this version.\")\n return 0\n}\n"]}
@@ -9,6 +9,30 @@ What changed in each Vantage release. Newest is on top.
9
9
  > minor release may include backwards-incompatible changes. A patch is limited to
10
10
  > backwards-compatible additions and bug fixes.
11
11
 
12
+ ## v0.6.3
13
+
14
+ The dev server can now run behind a reverse proxy (2026-09-23).
15
+
16
+ ### Added
17
+
18
+ - **`--host [addr]` and `--allowed-hosts <list|true>`** on `vantage dev` / SPA `vantage preview`.
19
+ Vite rejects with 403 any request whose `Host` header is not `localhost`, so anything with
20
+ **another hostname in front of the server** — a sandbox preview proxy, a tunnel — could not reach
21
+ it before. `--allowed-hosts` can also come from the **`VANTAGE_ALLOWED_HOSTS`** environment
22
+ variable (the flag wins). With neither, nothing changes. See the
23
+ [CLI reference](cli-reference).
24
+
25
+ ## v0.6.2
26
+
27
+ Document pages can now be saved as PDF (2026-09-30).
28
+
29
+ ### Added
30
+
31
+ - **`<Document>` shows a "Save as PDF" button at the bottom right** (labelled "PDF として保存" in a
32
+ Japanese browser). It opens the browser's print dialog. Only the document body is printed — the
33
+ app's header and sidebar, and the date / URL the browser adds, are left out. It prints in the light
34
+ palette even in dark mode, and charts are printed once they have finished drawing.
35
+
12
36
  ## v0.6.1
13
37
 
14
38
  Pages can now be written as documents (2026-09-25).
@@ -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" |
@@ -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)。
@@ -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` の 2 列 |
30
+ | `PageShellHeader` | 下線付きのヘッダー帯。左に見出し、右に `HeaderEnd`。幅が足りないと `HeaderEnd` は見出しの下へ回り込む |
31
31
  | `PageShellHeading` / `PageShellTitle` / `PageShellDescription` | 見出しブロック |
32
32
  | `PageShellHeaderEnd` | 右端の縦積み |
33
33
  | `PageShellMeta` | 「最終更新 10 分前」のような補足 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squadbase/vantage",
3
- "version": "0.6.1-dev2.5f947f1",
3
+ "version": "0.6.2-dev1.3e69e88",
4
4
  "description": "Data dashboard framework for Squadbase Editor. Vite-powered, config-free, one-file first.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -106,6 +106,8 @@
106
106
  "build:docs": "node scripts/build-docs.mjs",
107
107
  "dev": "tsup --watch --no-dts",
108
108
  "dev:types": "tsc --noEmit --watch",
109
+ "test": "vitest run",
110
+ "test:watch": "vitest",
109
111
  "typecheck": "tsc --noEmit",
110
112
  "type-check": "tsc --noEmit",
111
113
  "prepublishOnly": "node scripts/build-docs.mjs && node scripts/build.mjs",
@@ -152,9 +154,11 @@
152
154
  "@types/papaparse": "^5.5.2",
153
155
  "@types/react": "^19.2.0",
154
156
  "@types/react-dom": "^19.2.0",
157
+ "jsdom": "^26.0.0",
155
158
  "react": "^19.2.7",
156
159
  "react-dom": "^19.2.7",
157
160
  "tsup": "^8.5.1",
158
- "typescript": "^5.7.0"
161
+ "typescript": "^5.7.0",
162
+ "vitest": "^4.1.11"
159
163
  }
160
164
  }
package/theme.css CHANGED
@@ -421,6 +421,14 @@
421
421
  background: none;
422
422
  }
423
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
+ }
424
432
  [data-slot="document"] :where(h1, h2, h3, h4) {
425
433
  break-after: avoid;
426
434
  }
@@ -1,6 +0,0 @@
1
- export { add, syncAgentsFile } from './chunk-QDZA5JSL.js';
2
- import './chunk-ZVANIULZ.js';
3
- import './chunk-3G43C6OL.js';
4
- import './chunk-C2CX6GLX.js';
5
- //# sourceMappingURL=add-EISGSZAH.js.map
6
- //# sourceMappingURL=add-EISGSZAH.js.map
@@ -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"]}