This project is using Vite+, a unified toolchain built on top of Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task. Vite+ wraps runtime management, package management, and frontend tooling in a single global CLI called vp. Vite+ is distinct from Vite, but it invokes Vite through vp dev and vp build.
vp is a global binary that handles the full development lifecycle. Run vp help to print a list of commands and vp <command> --help for information about a specific command.
- create - Create a new project from a template
- migrate - Migrate an existing project to Vite+
- config - Configure hooks and agent integration
- staged - Run linters on staged files
- install (
i) - Install dependencies - env - Manage Node.js versions
- dev - Run the development server
- check - Run format, lint, and TypeScript type checks
- lint - Lint code
- fmt - Format code
- test - Run tests
- run - Run monorepo tasks
- exec - Execute a command from local
node_modules/.bin - dlx - Execute a package binary without installing it as a dependency
- cache - Manage the task cache
- build - Build for production
- pack - Build libraries
- preview - Preview production build
Vite+ automatically detects and wraps the underlying package manager such as pnpm, npm, or Yarn through the packageManager field in package.json or package manager-specific lockfiles.
- add - Add packages to dependencies
- remove (
rm,un,uninstall) - Remove packages from dependencies - update (
up) - Update packages to latest versions - dedupe - Deduplicate dependencies
- outdated - Check for outdated packages
- list (
ls) - List installed packages - why (
explain) - Show why a package is installed - info (
view,show) - View package information from the registry - link (
ln) / unlink - Manage local package links - pm - Forward a command to the package manager
- upgrade - Update
vpitself to the latest version
These commands map to their corresponding tools. For example, vp dev --port 3000 runs Vite's dev server and works the same as Vite. vp test runs JavaScript tests through the bundled Vitest. The version of all tools can be checked using vp --version. This is useful when researching documentation, features, and bugs.
- Using the package manager directly: Do not use pnpm, npm, or Yarn directly. Vite+ can handle all package manager operations.
- Always use Vite commands to run tools: Don't attempt to run
vp vitestorvp oxlint. They do not exist. Usevp testandvp lintinstead. - Running scripts: Vite+ built-in commands (
vp dev,vp build,vp test, etc.) always run the Vite+ built-in tool, not anypackage.jsonscript of the same name. To run a custom script that shares a name with a built-in command, usevp run <script>. For example, if you have a customdevscript that runs multiple services concurrently, run it withvp run dev, notvp dev(which always starts Vite's dev server). - Do not install Vitest, Oxlint, Oxfmt, or tsdown directly: Vite+ wraps these tools. They must not be installed directly. You cannot upgrade these tools by installing their latest versions. Always use Vite+ commands.
- Use Vite+ wrappers for one-off binaries: Use
vp dlxinstead of package-manager-specificdlx/npxcommands. - Import JavaScript modules from
vite-plus: Instead of importing fromviteorvitest, all modules should be imported from the project'svite-plusdependency. For example,import { defineConfig } from 'vite-plus';orimport { expect, test, vi } from 'vite-plus/test';. You must not installvitestto import test utilities. - Type-Aware Linting: There is no need to install
oxlint-tsgolint,vp lint --type-awareworks out of the box.
- Run
vp installafter pulling remote changes and before getting started. - Run
vp checkandvp testto validate changes.
OpenAPI 仕様から TypeScript の型定義と API クライアントを生成するモノレポ。
packages/generator/ - OpenAPI → TypeScript コードジェネレーター(本体)
apps/hono/ - 使用例(Hono アプリ)
OpenAPI 3.0.x / 3.1.x の仕様を受け取り、以下を生成する:
types:components.schemasから TypeScript 型定義client:pathsから型付きapiClientファクトリ関数
| ファイル | 役割 |
|---|---|
src/index.ts |
エントリーポイント。validate() → upgrade() で 3.1 に正規化してから生成 |
src/schema.ts |
SchemaLike 型と schemaToTypeString() / generateTypes() |
src/operations.ts |
OperationLike 型と getResponseType() / getQueryParameters() / getRequestBodyType() |
src/path-tree.ts |
PathTreeNode 構造と buildPathTree() |
src/client.ts |
generateClient() でパスツリーから apiClient 関数を文字列生成 |
src/cli.ts |
CLI エントリーポイント |
- バージョンチェックは
validチェックより先に行う:@scalar/openapi-parserは未対応バージョンをvalid: falseと判定するため、順序が逆だと誤ってエラーになる src/index.tsのif (!specification)を消さない:specificationはvalidチェック後も TypeScript 上undefinedの可能性が残るため必須- サポートバージョン: OpenAPI 3.0.x / 3.1.x のみ(3.2 は非対応)。内部では
upgrade()で 3.1 に正規化して処理する OperationLike/ParameterLike: テストで plain object を渡せるよう、@scalar/openapi-typesの厳密な型ではなく互換性のあるゆるい型をoperations.tsにローカル定義しているSchemaLike:schema.tsでローカル定義・エクスポートする再帰型。OpenAPIV3_1.SchemaObjectとの直接の型互換がないため、境界でキャストして使う
- 公開 API (
generateClient,generateTypes,buildPathTree) の引数は@scalar/openapi-typesの型を使用 - 内部処理 (
schemaToTypeString,getResponseType等) はSchemaLike/OperationLike等のローカル型を使用 @scalar/openapi-typesはdevDependenciesのみ(型定義はimport typeで使用)
cd tools/generator
vp check # フォーマット・lint・型チェック
vp test # テスト実行(93 件)
vp check --fix # フォーマット自動修正