pnpm dev— start dev server (all packages)pnpm build— production build (all packages)pnpm lint:fix— auto-fix lint issues (ESLint via@vida0905/eslint-config)pnpm typecheck— type check withtsgopnpm test— run all tests (Vitest)pnpm vitest run path/to/file.test.ts— run a single test file
Monorepo (pnpm workspaces) for VS Code extension around npmx.dev. Uses reactive-vscode for reactivity, tsdown for bundling, Volar for language server. Tests are colocated (.test.ts next to source).
extensions/vscode/— thin client (language client, commands, providers). Commands insrc/commands/must NOT importreactive-vscode; usevscodeAPI directly.packages/shared— constants, types, LSP protocol definitionspackages/language-core— extractors, API clients, workspace contextpackages/language-service— Volar plugins (hover, completion, diagnostics, document-link, catalog)packages/language-server— Volar server
- Extractor — parses package files into dependency AST data
- WorkspaceContext — per-folder state (package manager, catalogs, deps)
- Plugin — Volar language service plugin consuming resolved deps
- ESM, strict TypeScript — never use
anyor type-cast withas; validate rather than assert - Imports: type imports first, then
#aliases (#state,#utils/,#core/), then external packages, then relative — no blank lines between groups - No
node:built-in imports insrc/(browser-compat constraint); usesemversubpath imports (not baresemver) - Naming: files/folders
kebab-case, tests*.test.ts, functionscamelCase, constantsSCREAMING_SNAKE_CASE, typesPascalCase - Commits: Conventional Commits —
type(scope): description(lowercase subject)