Skip to content

Rules

  • SOLID — Each layer has a clear responsibility
  • DRY — Don’t duplicate logic between layers
  • Edge-first — Runtime never depends on Node
  • Type-first — Types are generated, not written manually
  • AST-first — Pure separation between construction and execution

Why no module augmentation for models?

ModelsTypes is used as a generic in Jsorm<TModels>, not via module augmentation, because:

  1. LS performance: module augmentation forces TS to globally resolve all declared types. A ModelsTypes generic resolves only when used.
  2. 0 conditional types: from(model) maps model.name → TModels[name] directly, without inference chains.
  3. No build order dependency: module augmentation requires types.d.ts to exist before TS resolves types. The generic works from the first save.

All packages are ESM-only (.mjs + .d.mts or .d.ts). No CJS support.

The CLI uses tsdown to generate bundles. typescript is an external dependency (not bundled) — the bundle is ~41 KB.