TypeScript monorepo of small, independently published @plugola/* packages built around a plugin system (message bus, plugin manager, store, streams, logger, etc.). See the README and each package's own README.md.
- npm workspaces: every package lives in
packages/*and is published independently. - Each package:
src/(source),test/(vitest specs),dist/(build output, generated), its ownpackage.json,tsconfig.json, andCHANGELOG.md. - Cross-package deps use published versions (e.g.
@plugola/plugin-managerdepends on@plugola/graph), wired via TypeScript project references in the root tsconfig.json.
npm ci— install.npm run build—tsc --buildacross all project references. Run before tests; packages import each other's compileddist/.npm test— runsnpm testin every workspace (each isvitest --run).npm start—tsc --build --watch.- Single package:
npm test --workspace @plugola/<name>orcd packages/<name> && npx vitest.
- ESM only: every package is
"type": "module"withmodule/moduleResolution: nodenext. Relative imports MUST include the.jsextension, even from.tsfiles (e.g.import Graph from '../src/Graph.js'). - TypeScript is strict, plus
noUnusedLocals,noUnusedParameters,noImplicitOverride,noImplicitReturns. Clean up unused code or the build fails. - Main class per package is usually a
default export; use#privateclass fields for internals. - Prettier (see prettier.config.js): no semicolons, single quotes.
lint-stagedformats on commit. - Tests: vitest with
import { test, expect, beforeEach } from 'vitest'. Inline snapshots (toMatchInlineSnapshot) are used heavily — regenerate withnpx vitest -u.
- Conventional Commits are enforced by commitlint + husky on commit (
feat:,fix:,chore:, etc.). Non-conforming messages are rejected. - Releases are automated via release-please (release-please-config.json); packages are versioned and tagged independently. Do not hand-edit
CHANGELOG.mdor bump versions manually.
PRs run npm ci && npm run build && npm test on Node 24 and 26 (pull-request.yml). Ensure a clean build and passing tests on a current Node version before pushing.