@mostajs/octoswitcher
v2.1.45
Published
Data access switcher — ORM direct or NET transport, one interface, zero config in modules
Downloads
918
Maintainers
Readme
@mostajs/octoswitcher
Data access switcher — ORM direct or NET transport, one interface, zero config in modules.
Principe
MOSTA_DATA=orm → @mostajs/orm → SQL direct (SQLite, PostgreSQL, Oracle, MSSQL, etc.)
MOSTA_DATA=net → @mostajs/net → Transport distant (REST, GraphQL, gRPC, WS, MCP)Les modules @mostajs (auth, rbac, audit, settings, ticketing, secu) appellent getDialect() depuis octoswitcher — ils ne savent pas si les données viennent d'une base locale ou d'un serveur distant.
Installation
npm install @mostajs/octoswitcherUsage dans un module
import { getDialect } from '@mostajs/octoswitcher'
import { UserRepository } from './repositories/user.repository.js'
const dialect = await getDialect()
const repo = new UserRepository(dialect)
const users = await repo.findAll()Configuration (dans l'app, pas dans le module)
Mode ORM (accès direct base de données)
MOSTA_DATA=orm
DB_DIALECT=sqlite
SGBD_URI=./data/app.dbMode NET (accès distant via transport)
MOSTA_DATA=net
MOSTA_NET_URL=https://mcp.amia.fr/astro_08/
MOSTA_NET_TRANSPORT=restAPI
getDialect(): Promise<IDataDialect>
Retourne le dialect singleton — ORM ou NET selon MOSTA_DATA.
getDataMode(): DataMode
Retourne 'orm' ou 'net'.
isNetMode(): boolean
Raccourci pour getDataMode() === 'net'.
isOrmMode(): boolean
Raccourci pour getDataMode() === 'orm'.
setDialect(dialect): void
Injecte un dialect externe (pour les tests).
resetDialect(): void
Réinitialise le singleton (pour les tests).
Architecture
App (.env.local)
├── MOSTA_DATA=net + MOSTA_NET_URL=...
│
├── @mostajs/auth → @mostajs/rbac → octoswitcher → getDialect()
├── @mostajs/rbac → octoswitcher → getDialect()
├── @mostajs/audit → octoswitcher → getDialect()
├── @mostajs/settings → octoswitcher → getDialect()
├── @mostajs/ticketing → octoswitcher → getDialect()
└── @mostajs/secu → octoswitcher → getDialect()
│
┌─────────┴─────────┐
│ │
MOSTA_DATA=orm MOSTA_DATA=net
@mostajs/orm @mostajs/net
SQL direct REST/GraphQL/gRPCModules migrés
| Module | Avant | Après | |--------|-------|-------| | rbac | 212 lignes (data-mode.ts + NET factories) | 106 lignes | | audit | 130 lignes (data-mode.ts + NET factories) | 41 lignes | | settings | 119 lignes (data-mode.ts + NET factories) | 41 lignes | | ticketing | hardcodé ORM | 1 import changé | | secu | hardcodé ORM | 1 import changé |
Licence
AGPL-3.0-or-later — Dr Hamid MADANI [email protected]
