fragment-ts 3.0.20 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +166 -179
  2. package/changes/multi-db-per-org-migration-note.md +24 -0
  3. package/dist/core/container/di-container.d.ts +1 -0
  4. package/dist/core/container/di-container.d.ts.map +1 -1
  5. package/dist/core/container/di-container.js +13 -9
  6. package/dist/core/container/di-container.js.map +1 -1
  7. package/dist/core/decorators/database.decorator.d.ts +7 -0
  8. package/dist/core/decorators/database.decorator.d.ts.map +1 -0
  9. package/dist/core/decorators/database.decorator.js +18 -0
  10. package/dist/core/decorators/database.decorator.js.map +1 -0
  11. package/dist/core/decorators/injection.decorators.d.ts +2 -1
  12. package/dist/core/decorators/injection.decorators.d.ts.map +1 -1
  13. package/dist/core/decorators/injection.decorators.js +4 -3
  14. package/dist/core/decorators/injection.decorators.js.map +1 -1
  15. package/dist/core/index.d.ts +0 -2
  16. package/dist/core/index.d.ts.map +1 -1
  17. package/dist/core/index.js +0 -2
  18. package/dist/core/index.js.map +1 -1
  19. package/dist/core/metadata/metadata-keys.d.ts +1 -18
  20. package/dist/core/metadata/metadata-keys.d.ts.map +1 -1
  21. package/dist/core/metadata/metadata-keys.js +1 -18
  22. package/dist/core/metadata/metadata-keys.js.map +1 -1
  23. package/dist/core/scanner/component-scanner.d.ts +0 -1
  24. package/dist/core/scanner/component-scanner.d.ts.map +1 -1
  25. package/dist/core/scanner/component-scanner.js +4 -41
  26. package/dist/core/scanner/component-scanner.js.map +1 -1
  27. package/dist/index.d.ts +3 -8
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +7 -18
  30. package/dist/index.js.map +1 -1
  31. package/dist/integrations/typeorm/config/DatabaseConfigLoader.d.ts +6 -1
  32. package/dist/integrations/typeorm/config/DatabaseConfigLoader.d.ts.map +1 -1
  33. package/dist/integrations/typeorm/config/DatabaseConfigLoader.js +86 -2
  34. package/dist/integrations/typeorm/config/DatabaseConfigLoader.js.map +1 -1
  35. package/dist/integrations/typeorm/repository-extensions.d.ts +5 -0
  36. package/dist/integrations/typeorm/repository-extensions.d.ts.map +1 -0
  37. package/dist/integrations/typeorm/repository-extensions.js +73 -0
  38. package/dist/integrations/typeorm/repository-extensions.js.map +1 -0
  39. package/dist/integrations/typeorm/typeorm-module.d.ts +11 -6
  40. package/dist/integrations/typeorm/typeorm-module.d.ts.map +1 -1
  41. package/dist/integrations/typeorm/typeorm-module.js +52 -19
  42. package/dist/integrations/typeorm/typeorm-module.js.map +1 -1
  43. package/dist/integrations/typeorm/types/SupportedDatabaseConfig.d.ts +1 -0
  44. package/dist/integrations/typeorm/types/SupportedDatabaseConfig.d.ts.map +1 -1
  45. package/dist/platform/cli/commands/init/command.d.ts.map +1 -1
  46. package/dist/platform/cli/commands/init/command.js +3 -18
  47. package/dist/platform/cli/commands/init/command.js.map +1 -1
  48. package/dist/platform/cli/commands/make/command.d.ts.map +1 -1
  49. package/dist/platform/cli/commands/make/command.js +5 -6
  50. package/dist/platform/cli/commands/make/command.js.map +1 -1
  51. package/dist/platform/cli/commands/migrate/command.d.ts +20 -12
  52. package/dist/platform/cli/commands/migrate/command.d.ts.map +1 -1
  53. package/dist/platform/cli/commands/migrate/command.js +263 -216
  54. package/dist/platform/cli/commands/migrate/command.js.map +1 -1
  55. package/dist/platform/cli/commands/register.d.ts.map +1 -1
  56. package/dist/platform/cli/commands/register.js +28 -33
  57. package/dist/platform/cli/commands/register.js.map +1 -1
  58. package/dist/platform/cli/commands/serve/command.d.ts +0 -2
  59. package/dist/platform/cli/commands/serve/command.d.ts.map +1 -1
  60. package/dist/platform/cli/commands/serve/command.js +3 -111
  61. package/dist/platform/cli/commands/serve/command.js.map +1 -1
  62. package/dist/platform/cli/scaffold/generate/component-generator.d.ts +1 -8
  63. package/dist/platform/cli/scaffold/generate/component-generator.d.ts.map +1 -1
  64. package/dist/platform/cli/scaffold/generate/component-generator.js +0 -157
  65. package/dist/platform/cli/scaffold/generate/component-generator.js.map +1 -1
  66. package/dist/platform/cli/scaffold/init/init.scaffold.d.ts.map +1 -1
  67. package/dist/platform/cli/scaffold/init/init.scaffold.js +96 -28
  68. package/dist/platform/cli/scaffold/init/init.scaffold.js.map +1 -1
  69. package/dist/platform/cli/scaffold/init/prompts.d.ts.map +1 -1
  70. package/dist/platform/cli/scaffold/init/prompts.js +20 -2
  71. package/dist/platform/cli/scaffold/init/prompts.js.map +1 -1
  72. package/dist/platform/web/bootstrap/ApplicationBootstrapper.d.ts +0 -4
  73. package/dist/platform/web/bootstrap/ApplicationBootstrapper.d.ts.map +1 -1
  74. package/dist/platform/web/bootstrap/ApplicationBootstrapper.js +2 -90
  75. package/dist/platform/web/bootstrap/ApplicationBootstrapper.js.map +1 -1
  76. package/dist/platform/web/bootstrap/ComponentScanner.d.ts.map +1 -1
  77. package/dist/platform/web/bootstrap/ComponentScanner.js +10 -19
  78. package/dist/platform/web/bootstrap/ComponentScanner.js.map +1 -1
  79. package/dist/platform/web/bootstrap/RouteRegistrar.d.ts.map +1 -1
  80. package/dist/platform/web/bootstrap/RouteRegistrar.js +1 -6
  81. package/dist/platform/web/bootstrap/RouteRegistrar.js.map +1 -1
  82. package/dist/platform/web/interfaces.d.ts +0 -8
  83. package/dist/platform/web/interfaces.d.ts.map +1 -1
  84. package/dist/platform/web/middleware/MiddlewareSetup.d.ts.map +1 -1
  85. package/dist/platform/web/middleware/MiddlewareSetup.js +1 -11
  86. package/dist/platform/web/middleware/MiddlewareSetup.js.map +1 -1
  87. package/dist/platform/web/utils/ConsoleLogger.d.ts.map +1 -1
  88. package/dist/platform/web/utils/ConsoleLogger.js +1 -2
  89. package/dist/platform/web/utils/ConsoleLogger.js.map +1 -1
  90. package/dist/platform/web/utils/RouteUtils.d.ts +0 -1
  91. package/dist/platform/web/utils/RouteUtils.d.ts.map +1 -1
  92. package/dist/platform/web/utils/RouteUtils.js +0 -9
  93. package/dist/platform/web/utils/RouteUtils.js.map +1 -1
  94. package/dist/shared/config.utils.d.ts +9 -44
  95. package/dist/shared/config.utils.d.ts.map +1 -1
  96. package/dist/shared/config.utils.js +47 -33
  97. package/dist/shared/config.utils.js.map +1 -1
  98. package/dist/shared/logger.d.ts +0 -3
  99. package/dist/shared/logger.d.ts.map +1 -1
  100. package/dist/shared/logger.js +0 -60
  101. package/dist/shared/logger.js.map +1 -1
  102. package/dist/shared/runtime.resolver.d.ts.map +1 -1
  103. package/dist/shared/runtime.resolver.js +1 -4
  104. package/dist/shared/runtime.resolver.js.map +1 -1
  105. package/package.json +5 -12
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Fragment TS
2
2
 
3
- Fragment TS is a Spring Boot-inspired TypeScript framework for Express and TypeORM, built around dependency injection and decorators, with a fully modular CLI. It now supports installable API and Web surfaces so backend controllers and React-driven pages can live in one modular runtime.
3
+ Fragment TS is a Spring Boot-inspired TypeScript framework for Express and TypeORM, built around dependency injection and decorators, with a fully modular CLI.
4
4
 
5
5
  This README is intentionally long and comprehensive so it can serve as a landing page for the framework site.
6
6
 
@@ -42,9 +42,8 @@ Key ideas:
42
42
  ## Quick Start
43
43
 
44
44
  1. Install the CLI: `npm install -g fragment-ts`
45
- 2. Initialize: `frag init my-app`
45
+ 2. Initialize: `fragment init my-app`
46
46
  3. Move into the directory: `cd my-app`
47
- 4. Install a surface with `frg install:api`, `frg install:web`, or let `fragment serve` prompt you on first run
48
47
  5. Run the dev server: `fragment serve`
49
48
 
50
49
  Hello World example:
@@ -76,20 +75,6 @@ async function bootstrap() {
76
75
  bootstrap();
77
76
  ```
78
77
 
79
- Surface-based quick start:
80
-
81
- ```bash
82
- frag init my-app
83
- cd my-app
84
- frg install:api
85
- frg install:web
86
- fragment serve
87
- ```
88
-
89
- By default `frag init` creates a clean shell project. This keeps the new flow modular, while `fragment init --template api`, `--template web`, and `--template full` remain available for backward-compatible one-shot scaffolding.
90
- `frg install:api` now uses a guided setup so the user can choose whether to add `src/main.ts`, the legacy API starter folders/files, the default SQLite database config, and shared subsystems such as Auth, AI, Mail, Jobs, and Notifications.
91
- `frg install:web` now guides the user through styling setup as well, including a generated CSS starter, Tailwind via CDN, or an unstyled setup.
92
-
93
78
  ## Philosophy
94
79
 
95
80
  Fragment TS borrows the clarity of Spring Boot and the ergonomics of modern TypeScript.
@@ -169,159 +154,112 @@ class SecureController {
169
154
  }
170
155
  ```
171
156
 
172
- ## Web Surface and Route Pointer
157
+ ## TypeORM
173
158
 
174
- Fragment can now run API controllers and server-rendered React pages in the same app.
159
+ TypeORM is wired through `TypeORMModule` and `fragment.json`.
160
+ Fragment supports:
175
161
 
176
- - API routes continue to use `@Controller` and HTTP method decorators.
177
- - The frontend surface isolates React setup inside Fragment helpers instead of pushing raw provider and observer wiring into every app file.
178
- - MobX is the default supported state-management model for the web surface.
179
- - Web pages can use `@FragmentView()`, `@Route()`, `@FragmentLayout()`, `@FragmentComponent()`, `@FragmentStore()`, and stateless reactive helpers, while JSX stays normal.
180
- - Route pointers track registered API and Web routes so a web page can discover backend endpoints without hardcoding URLs.
181
- - When both API and Web surfaces are enabled, Fragment reserves `/api` for API routes by default, mirroring the clean separation used by frameworks like Next.js.
182
- - `className` works normally in JSX. The Web installer can also generate a stylesheet and static asset path so those classes actually resolve visually.
162
+ - a legacy default connection through `database`
163
+ - multiple named connections through `databases`
164
+ - per-entity database assignment with `@UseDatabase("name")`
165
+ - repository injection through `@InjectRepository(...)`
166
+ - runtime switching through `repo.db("name")` or `repo.db(dbConfig)`
183
167
 
184
- Example:
168
+ Simple single-database setup:
185
169
 
186
- ```tsx
187
- import {
188
- Controller,
189
- FragmentComponent,
190
- FragmentLayout,
191
- FragmentStore,
192
- FragmentView,
193
- Get,
194
- Mutation,
195
- Route,
196
- RouteParam,
197
- RouteQuery,
198
- Selector,
199
- State,
200
- StoreState,
201
- UseStore,
202
- fragmentStatelessComponent,
203
- useStoreState,
204
- } from "fragment-ts";
205
-
206
- @Controller("/health")
207
- class HealthController {
208
- @Get()
209
- status() {
210
- return { ok: true };
170
+ ```json
171
+ {
172
+ "database": {
173
+ "type": "postgres",
174
+ "host": "localhost",
175
+ "port": 5432,
176
+ "username": "app",
177
+ "password": "secret",
178
+ "database": "app_main",
179
+ "entities": ["src/**/*.entity.ts"],
180
+ "migrations": ["src/migrations/**/*.ts"]
211
181
  }
212
182
  }
183
+ ```
213
184
 
214
- @FragmentStore()
215
- class DashboardStore {
216
- @State()
217
- visits = 1;
218
-
219
- @Selector()
220
- get headline() {
221
- return `Visits: ${this.visits}`;
222
- }
185
+ Named multi-database setup:
223
186
 
224
- @Mutation()
225
- bump() {
226
- this.visits += 1;
187
+ ```json
188
+ {
189
+ "databases": {
190
+ "primary": {
191
+ "type": "postgres",
192
+ "host": "localhost",
193
+ "port": 5432,
194
+ "username": "app",
195
+ "password": "secret",
196
+ "database": "app_main",
197
+ "entities": ["src/**/*.entity.ts"],
198
+ "migrations": ["src/migrations/primary/**/*.ts"]
199
+ },
200
+ "analytics": {
201
+ "type": "postgres",
202
+ "host": "localhost",
203
+ "port": 5432,
204
+ "username": "app",
205
+ "password": "secret",
206
+ "database": "app_analytics",
207
+ "entities": ["src/**/*.entity.ts"],
208
+ "migrations": ["src/migrations/analytics/**/*.ts"]
209
+ }
227
210
  }
228
211
  }
212
+ ```
229
213
 
230
- @FragmentComponent()
231
- class DashboardPanel {
232
- @StoreState(DashboardStore, (store) => store.headline)
233
- private headline!: string;
234
-
235
- render() {
236
- return <section>{this.headline}</section>;
237
- }
238
- }
214
+ Typical usage:
239
215
 
240
- const DashboardBadge = fragmentStatelessComponent(() => {
241
- const headline = useStoreState(DashboardStore, (store) => store.headline);
242
- return <aside>{headline}</aside>;
243
- });
216
+ ```ts
217
+ import {
218
+ Column,
219
+ Entity,
220
+ InjectRepository,
221
+ PrimaryGeneratedColumn,
222
+ Repository,
223
+ Service,
224
+ UseDatabase,
225
+ type DbConfig,
226
+ } from "fragment-ts";
244
227
 
245
- @FragmentLayout({ name: "dashboard" })
246
- class DashboardLayout {
247
- render({ children }: { children: any }) {
248
- return <main>{children}</main>;
249
- }
250
- }
228
+ @UseDatabase("analytics")
229
+ @Entity()
230
+ class EventRecord {
231
+ @PrimaryGeneratedColumn()
232
+ id!: number;
251
233
 
252
- @FragmentView()
253
- @Route({ path: "/products/:id", layout: "dashboard" })
254
- class HomePage {
255
- @RouteParam("id")
256
- private id!: string;
257
-
258
- @RouteQuery("tab")
259
- private tab?: string;
260
-
261
- render() {
262
- return (
263
- <>
264
- <p>
265
- Product: {this.id} | Tab: {this.tab || "overview"}
266
- </p>
267
- <DashboardBadge />
268
- <DashboardPanel />
269
- </>
270
- );
271
- }
234
+ @Column()
235
+ event!: string;
272
236
  }
273
- ```
274
-
275
- Backward compatibility note:
276
-
277
- - Existing controller-only projects still work without changes.
278
- - Database initialization is skipped unless a `database` block exists in `fragment.json`.
279
- - When both surfaces are enabled, API routes default to `/api` unless the user explicitly overrides `routePointer.apiPrefix`.
280
-
281
- ## Styling and Assets
282
237
 
283
- The Web surface is server-rendered, but it still supports normal CSS usage.
238
+ @Service()
239
+ class EventService {
240
+ @InjectRepository(EventRecord)
241
+ private events!: Repository<EventRecord>;
284
242
 
285
- - Generated frontend files can use `className` exactly as they would in React.
286
- - `frg install:web` can scaffold one of three styling modes:
287
- - `css`: generates `src/web/public/styles/global.css` and links it automatically.
288
- - `tailwind`: injects the Tailwind CDN script for utility-class usage without a bundler.
289
- - `unstyled`: no default stylesheet is added.
290
- - Static assets are served from `public/` and `src/web/public/`.
243
+ async fromAssignedDatabase() {
244
+ return this.events.findAll();
245
+ }
291
246
 
292
- Example `fragment.json`:
247
+ async fromNamedDatabase() {
248
+ return this.events.db("analytics").findAll();
249
+ }
293
250
 
294
- ```json
295
- {
296
- "web": {
297
- "sourceRoot": "src/web",
298
- "styling": {
299
- "provider": "css",
300
- "stylesheetPath": "/styles/global.css"
301
- }
251
+ async fromRuntimeConfig(dbConfig: DbConfig) {
252
+ return this.events.db(dbConfig).findAll();
302
253
  }
303
254
  }
304
255
  ```
305
256
 
306
- If you choose the CSS starter, `className="fragment-button"` and similar classes work immediately because the renderer links the generated stylesheet.
257
+ Rules of thumb:
307
258
 
308
- ## Shared Subsystems
309
-
310
- API and Web share the same app runtime, so subsystem setup is shared too.
311
-
312
- - `database`
313
- - `auth`
314
- - `ai`
315
- - `mail`
316
- - `jobs`
317
- - `notifications`
318
-
319
- If a subsystem is already configured in `fragment.json`, the install flow does not need to set it up again for the other surface. This keeps surface installs additive instead of duplicating config.
320
-
321
- ## TypeORM
322
-
323
- TypeORM is wired through `TypeORMModule` and `fragment.json`.
324
- Use `@InjectRepository` to access repositories.
259
+ - if `database` exists, it remains the default connection
260
+ - if only one named database exists in `databases`, Fragment treats it as the primary runtime default
261
+ - if multiple named databases exist and there is no default, entity/repository usage should be explicit
262
+ - migration and seed commands prompt for the database target when more than one database exists
325
263
 
326
264
  ## Plugins
327
265
 
@@ -350,16 +288,11 @@ Per-module runtime docs can be served at `/docs/modules/:module`.
350
288
 
351
289
  ## CLI Overview
352
290
 
353
- The CLI (`fragment`, `frg`, or `frag`) provides scaffolding, diagnostics, and automation.
291
+ The CLI (`fragment` or `frg`) provides scaffolding, diagnostics, and automation.
354
292
  Selected commands:
355
293
 
356
294
  - fragment init [dir]
357
- - fragment init --template api
358
- - fragment init --template web
359
- - fragment init --template full
360
295
  - fragment init --type=plugin
361
- - frg install:api
362
- - frg install:web
363
296
  - fragment serve
364
297
  - fragment build
365
298
  - fragment test
@@ -377,16 +310,15 @@ Selected commands:
377
310
  - fragment make:controller <name>
378
311
  - fragment make:service <name>
379
312
  - fragment make:client <name>
380
- - fragment make:view <name>
381
- - fragment make:store <name>
382
- - fragment make:component <name>
383
- - fragment make:template <name>
384
- - fragment make:layout <name>
385
- - fragment make:stateless <name>
386
313
  - fragment make:resource <name>
314
+ - fragment make:entity <name>
387
315
  - fragment make:dto <name>
316
+ - fragment make:repository <name>
388
317
  - fragment make:middleware <name>
389
318
  - fragment make:guard <name>
319
+ - fragment make:interceptor <name>
320
+ - fragment make:filter <name>
321
+ - fragment make:feature <name>
390
322
  - fragment make:job <name>
391
323
  - fragment make:mail <name>
392
324
  - fragment make:notification <name>
@@ -399,21 +331,6 @@ Example:
399
331
  ```json
400
332
  {
401
333
  "structure": { "type": "module" },
402
- "surfaces": { "api": true, "web": true },
403
- "routePointer": {
404
- "apiPrefix": "/api",
405
- "webPrefix": "/",
406
- "exposeApiToWeb": true
407
- },
408
- "web": {
409
- "sourceRoot": "src/web",
410
- "styling": {
411
- "provider": "css",
412
- "stylesheetPath": "/styles/global.css"
413
- }
414
- },
415
- "auth": { "enabled": true, "jwtSecretEnv": "JWT_SECRET", "jwtExpirationEnv": "JWT_EXPIRATION" },
416
- "ai": { "enabled": true, "provider": "openai", "apiKeyEnv": "OPENAI_API_KEY", "model": "gpt-4o-mini" },
417
334
  "verbose": false,
418
335
  "logging": { "level": "info", "structured": false },
419
336
  "docs": {
@@ -428,7 +345,9 @@ Example:
428
345
  "port": 5432,
429
346
  "username": "postgres",
430
347
  "password": "password",
431
- "database": "fragment"
348
+ "database": "fragment",
349
+ "entities": ["src/**/*.entity.ts"],
350
+ "migrations": ["src/migrations/**/*.ts"]
432
351
  },
433
352
  "mail": {
434
353
  "default": "primary",
@@ -452,6 +371,10 @@ Configuration keys (high-level):
452
371
  - database.\*
453
372
  - database.entities
454
373
  - database.migrations
374
+ - databases
375
+ - databases.<name>.*
376
+ - databases.<name>.entities
377
+ - databases.<name>.migrations
455
378
  - mail.default
456
379
  - mail.mailers
457
380
  - mail.templatesDir
@@ -488,7 +411,6 @@ describe("math", () => {
488
411
 
489
412
  Use `FragmentLogger` with configurable levels and structured output.
490
413
  `verbose` or `logging.level` controls the output verbosity.
491
- To mirror logs into a file, set `logging.file` in `fragment.json`, for example `\"logging\": { \"level\": \"info\", \"file\": \"logs/fragment.log\" }`.
492
414
 
493
415
  ## Feature Index
494
416
 
@@ -657,17 +579,19 @@ A: Set `docs.enabled` to `false` in `fragment.json`.
657
579
  - CLI: `fragment add <package>` is part of the primary workflow.
658
580
  - CLI: `fragment make:controller <name>` is part of the primary workflow.
659
581
  - CLI: `fragment make:service <name>` is part of the primary workflow.
582
+ - CLI: `fragment make:client <name>` is part of the primary workflow.
660
583
  - CLI: `fragment make:resource <name>` is part of the primary workflow.
584
+ - CLI: `fragment make:entity <name>` is part of the primary workflow.
661
585
  - CLI: `fragment make:dto <name>` is part of the primary workflow.
586
+ - CLI: `fragment make:repository <name>` is part of the primary workflow.
662
587
  - CLI: `fragment make:middleware <name>` is part of the primary workflow.
663
588
  - CLI: `fragment make:guard <name>` is part of the primary workflow.
589
+ - CLI: `fragment make:interceptor <name>` is part of the primary workflow.
590
+ - CLI: `fragment make:filter <name>` is part of the primary workflow.
591
+ - CLI: `fragment make:feature <name>` is part of the primary workflow.
664
592
  - CLI: `fragment make:job <name>` is part of the primary workflow.
665
593
  - CLI: `fragment make:mail <name>` is part of the primary workflow.
666
594
  - CLI: `fragment make:notification <name>` is part of the primary workflow.
667
- - CLI: `fragment make:view <name>` is part of the primary workflow.
668
- - CLI: `fragment make:store <name>` is part of the primary workflow.
669
- - CLI: `fragment make:component <name>` is part of the primary workflow.
670
- - CLI: `fragment make:template <name>` is part of the primary workflow.
671
595
  - Config: `structure.type` is a stable knob for behavior.
672
596
  - Config: `verbose` is a stable knob for behavior.
673
597
  - Config: `logging.level` is a stable knob for behavior.
@@ -729,6 +653,69 @@ class CustomerClient extends FrgClient {
729
653
  }
730
654
  ```
731
655
 
656
+ Multi-database setups can skip the top-level `database` block and use `databases` only:
657
+
658
+ ```json
659
+ {
660
+ "databases": {
661
+ "primary": {
662
+ "type": "postgres",
663
+ "database": "app_main",
664
+ "entities": ["src/**/*.entity.ts"]
665
+ },
666
+ "analytics": {
667
+ "type": "postgres",
668
+ "database": "app_analytics",
669
+ "entities": ["src/**/*.entity.ts"]
670
+ }
671
+ }
672
+ }
673
+ ```
674
+
675
+ If there is only one named database, Fragment treats it as the primary default at runtime. If there are multiple named databases and no default, entities should opt in explicitly with `@UseDatabase("name")` or repository injection should pass the database name.
676
+
677
+ ## Multi Database
678
+
679
+ Fragment now supports:
680
+
681
+ - one legacy default database via `database`
682
+ - any number of named databases via `databases`
683
+ - per-entity targeting with `@UseDatabase("analytics")`
684
+ - repository injection with `@InjectRepository(Entity, "analytics")`
685
+ - runtime repository switching with `repo.db("analytics")`
686
+ - runtime repository switching with ad hoc config objects via `repo.db(dbConfig)`
687
+
688
+ Migration and seed commands are database-aware too. Commands like `frg migrate`, `frg migrate:generate`, `frg seed:run`, and `frg seed:create` now prompt for the target database before running when more than one database is configured. You can also pass `--database <name>` to skip the prompt.
689
+
690
+ End-to-end flow:
691
+
692
+ 1. Define one or more connections in `fragment.json`
693
+ 2. Assign an entity with `@UseDatabase("name")`, or keep it on the default database
694
+ 3. Inject the repository with `@InjectRepository(Entity)` or `@InjectRepository(Entity, "name")`
695
+ 4. Optionally switch per-query with `repo.db("name")` or `repo.db(dbConfig)`
696
+ 5. Run `frg migrate` or `frg seed:run` and choose the database when prompted
697
+
698
+ Programmatic example:
699
+
700
+ ```ts
701
+ import {
702
+ type DbConfig,
703
+ InjectRepository,
704
+ Repository,
705
+ Service,
706
+ } from "fragment-ts";
707
+
708
+ @Service()
709
+ export class EventService {
710
+ @InjectRepository(EventRecord)
711
+ private events!: Repository<EventRecord>;
712
+
713
+ async run(acmeOrgDbConfig: DbConfig) {
714
+ return this.events.db(acmeOrgDbConfig).findAll();
715
+ }
716
+ }
717
+ ```
718
+
732
719
  What this adds:
733
720
 
734
721
  - Static `get`, `post`, `put`, `patch`, `delete`, `request`, and `raw`
@@ -0,0 +1,24 @@
1
+ Yes, it is possible.
2
+
3
+ But it is a major architecture change, not just "create database on signup".
4
+
5
+ Right now the system appears to be built mostly as shared-database multi-tenancy: records are separated by fields like `organization_system_id`. Moving to one database per organization would mean:
6
+
7
+ - Keep a central or platform database for global concerns such as organizations, users/auth, admin, billing plans, access control seeds, and system config.
8
+ - Create a separate tenant database when a new organization is provisioned.
9
+ - Store that tenant database name or connection info on the organization record.
10
+ - Add a tenant connection resolver so every organization-scoped request connects to the correct database.
11
+ - Run migrations and seeds per tenant database.
12
+ - Decide clearly which modules stay global and which become tenant-local.
13
+ - Migrate existing organization data from the shared database into dedicated tenant databases.
14
+
15
+ Best approach would be phased:
16
+
17
+ 1. Add tenant database provisioning during organization creation.
18
+ 2. Keep the current shared database working as a fallback.
19
+ 3. Add a tenant-aware repository and service layer.
20
+ 4. Move one module first, for example POS or products.
21
+ 5. Migrate other modules gradually.
22
+ 6. Finally move existing organization data into per-organization databases.
23
+
24
+ So yes, fully possible, but it should be treated as a careful multi-step migration, not a quick patch.
@@ -26,6 +26,7 @@ export declare class DIContainer {
26
26
  private injectMailProperty;
27
27
  private resolveValue;
28
28
  private resolveRepository;
29
+ private resolveRepositoryForDatabase;
29
30
  has(token: any): boolean;
30
31
  getAllInstances(): any[];
31
32
  clear(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"di-container.d.ts","sourceRoot":"","sources":["../../../src/core/container/di-container.ts"],"names":[],"mappings":"AAeA,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,WAAW;IAOjC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,IAAI;IAU/D,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAIzB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC;IAiE1D,OAAO,CAAC,cAAc;IA8CtB,OAAO,CAAC,kBAAkB;IAiD1B,OAAO,CAAC,gBAAgB;IA2GxB,OAAO,CAAC,2BAA2B;IA6CnC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,kBAAkB;IAoC1B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,YAAY;IAgDpB,OAAO,CAAC,iBAAiB;IAmBzB,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAQxB,eAAe,IAAI,GAAG,EAAE;IAIxB,KAAK,IAAI,IAAI;IAQb,KAAK,IAAI,IAAI;IAIb,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAwBF,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE;IAY9B,OAAO,CAAC,wBAAwB;IAkChC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;CAWvB"}
1
+ {"version":3,"file":"di-container.d.ts","sourceRoot":"","sources":["../../../src/core/container/di-container.ts"],"names":[],"mappings":"AAcA,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,WAAW;IAOjC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,IAAI;IAU/D,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAIzB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC;IAiE1D,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,kBAAkB;IAiD1B,OAAO,CAAC,gBAAgB;IA4GxB,OAAO,CAAC,2BAA2B;IA6CnC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,kBAAkB;IAoC1B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,YAAY;IAgDpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,4BAA4B;IAkCpC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAQxB,eAAe,IAAI,GAAG,EAAE;IAIxB,KAAK,IAAI,IAAI;IAQb,KAAK,IAAI,IAAI;IAIb,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAwBF,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE;IAY9B,OAAO,CAAC,wBAAwB;IAkChC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;CAWvB"}
@@ -6,7 +6,6 @@ const metadata_storage_1 = require("../metadata/metadata-storage");
6
6
  const logger_1 = require("../../shared/logger");
7
7
  const errors_1 = require("../../shared/errors");
8
8
  const config_utils_1 = require("../../shared/config.utils");
9
- const mobx_support_1 = require("../../platform/web/react/mobx-support");
10
9
  const logger = logger_1.FragmentLogger.for("di");
11
10
  class DIContainer {
12
11
  constructor() {
@@ -101,7 +100,6 @@ class DIContainer {
101
100
  const instance = new target(...params);
102
101
  // CRITICAL FIX: Inject properties using metadata storage
103
102
  this.injectProperties(instance);
104
- mobx_support_1.FragmentMobxSupport.initialize(instance, target);
105
103
  this.applyTraceWrappers(instance, target);
106
104
  // Call @PostConstruct method if exists
107
105
  const postConstructMethod = Reflect.getMetadata(metadata_keys_1.METADATA_KEYS.POST_CONSTRUCT, target);
@@ -171,7 +169,7 @@ class DIContainer {
171
169
  this.injectAllTokenProperty(instance, propertyKey, metadata?.token, className);
172
170
  break;
173
171
  case "repository":
174
- this.injectRepositoryProperty(instance, propertyKey, metadata?.entity, className);
172
+ this.injectRepositoryProperty(instance, propertyKey, metadata?.entity, metadata?.databaseName, className);
175
173
  break;
176
174
  case "value":
177
175
  this.injectValueProperty(instance, propertyKey, metadata?.expression, className);
@@ -250,9 +248,9 @@ class DIContainer {
250
248
  instance[propertyKey] = this.resolveAll(token);
251
249
  logger.debug(`✅ Injected all ${tokenName} implementations into ${className}.${propertyKey}`);
252
250
  }
253
- injectRepositoryProperty(instance, propertyKey, entity, className) {
254
- logger.debug(`💾 @InjectRepository: ${className}.${propertyKey} → Repository<${entity.name}>`);
255
- instance[propertyKey] = this.resolveRepository(entity);
251
+ injectRepositoryProperty(instance, propertyKey, entity, databaseName, className) {
252
+ logger.debug(`💾 @InjectRepository: ${className}.${propertyKey} → Repository<${entity.name}>${databaseName ? ` @ ${databaseName}` : ""}`);
253
+ instance[propertyKey] = this.resolveRepositoryForDatabase(entity, databaseName);
256
254
  logger.debug(`✅ Injected Repository<${entity.name}> into ${className}.${propertyKey}`);
257
255
  }
258
256
  injectValueProperty(instance, propertyKey, expression, className) {
@@ -356,16 +354,22 @@ class DIContainer {
356
354
  return defaultValue !== undefined ? defaultValue : undefined;
357
355
  }
358
356
  resolveRepository(entity) {
357
+ return this.resolveRepositoryForDatabase(entity);
358
+ }
359
+ resolveRepositoryForDatabase(entity, explicitDatabaseName) {
359
360
  try {
360
361
  const { TypeORMModule } = require("../../integrations/typeorm/typeorm-module");
361
- const dataSource = TypeORMModule.getDataSource();
362
+ const { createFragmentRepository, } = require("../../integrations/typeorm/repository-extensions");
363
+ const { getDatabaseNameForTarget, } = require("../decorators/database.decorator");
364
+ const databaseName = explicitDatabaseName || getDatabaseNameForTarget(entity);
365
+ const dataSource = TypeORMModule.getDataSource(databaseName);
362
366
  if (!dataSource || !dataSource.isInitialized) {
363
367
  throw new errors_1.DataSourceNotInitializedError("TypeORM DataSource not initialized");
364
368
  }
365
- return dataSource.getRepository(entity);
369
+ return createFragmentRepository(entity, dataSource.getRepository(entity));
366
370
  }
367
371
  catch (error) {
368
- throw new errors_1.RepositoryResolutionError(`Failed to resolve repository for ${entity.name}: ${error?.message}`);
372
+ throw new errors_1.RepositoryResolutionError(`Failed to resolve repository for ${entity.name}${explicitDatabaseName ? ` on ${explicitDatabaseName}` : ""}: ${error?.message}`);
369
373
  }
370
374
  }
371
375
  has(token) {
@@ -1 +1 @@
1
- {"version":3,"file":"di-container.js","sourceRoot":"","sources":["../../../src/core/container/di-container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"di-container.js","sourceRoot":"","sources":["../../../src/core/container/di-container.ts"],"names":[],"mappings":"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"}