@onroad/core 4.0.0-alpha.3 → 4.0.0-alpha.31

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 (67) hide show
  1. package/README.md +409 -7
  2. package/dist/OnRoadExpress.d.ts.map +1 -1
  3. package/dist/OnRoadExpress.js +18 -5
  4. package/dist/OnRoadExpress.js.map +1 -1
  5. package/dist/core/AbstractController.d.ts +10 -0
  6. package/dist/core/AbstractController.d.ts.map +1 -1
  7. package/dist/core/AbstractController.js +48 -1
  8. package/dist/core/AbstractController.js.map +1 -1
  9. package/dist/core/AbstractService.d.ts +5 -0
  10. package/dist/core/AbstractService.d.ts.map +1 -1
  11. package/dist/core/AbstractService.js +36 -0
  12. package/dist/core/AbstractService.js.map +1 -1
  13. package/dist/core/SequelizeRepository.d.ts +4 -1
  14. package/dist/core/SequelizeRepository.d.ts.map +1 -1
  15. package/dist/core/SequelizeRepository.js +22 -1
  16. package/dist/core/SequelizeRepository.js.map +1 -1
  17. package/dist/database/ConnectionManager.d.ts +2 -0
  18. package/dist/database/ConnectionManager.d.ts.map +1 -1
  19. package/dist/database/ConnectionManager.js +12 -1
  20. package/dist/database/ConnectionManager.js.map +1 -1
  21. package/dist/dev/DevServer.d.ts +67 -0
  22. package/dist/dev/DevServer.d.ts.map +1 -0
  23. package/dist/dev/DevServer.js +496 -0
  24. package/dist/dev/DevServer.js.map +1 -0
  25. package/dist/dev/DevToolsController.d.ts +45 -0
  26. package/dist/dev/DevToolsController.d.ts.map +1 -0
  27. package/dist/dev/DevToolsController.js +426 -0
  28. package/dist/dev/DevToolsController.js.map +1 -0
  29. package/dist/dev/DevToolsPlugin.d.ts +10 -0
  30. package/dist/dev/DevToolsPlugin.d.ts.map +1 -0
  31. package/dist/dev/DevToolsPlugin.js +23 -0
  32. package/dist/dev/DevToolsPlugin.js.map +1 -0
  33. package/dist/dev/MigrationCLI.d.ts +19 -0
  34. package/dist/dev/MigrationCLI.d.ts.map +1 -0
  35. package/dist/dev/MigrationCLI.js +140 -0
  36. package/dist/dev/MigrationCLI.js.map +1 -0
  37. package/dist/dev/index.d.ts +8 -0
  38. package/dist/dev/index.d.ts.map +1 -0
  39. package/dist/dev/index.js +5 -0
  40. package/dist/dev/index.js.map +1 -0
  41. package/dist/entity/EntityRegistry.d.ts +26 -0
  42. package/dist/entity/EntityRegistry.d.ts.map +1 -1
  43. package/dist/entity/EntityRegistry.js +140 -4
  44. package/dist/entity/EntityRegistry.js.map +1 -1
  45. package/dist/entity/decorators.d.ts +1 -0
  46. package/dist/entity/decorators.d.ts.map +1 -1
  47. package/dist/entity/decorators.js.map +1 -1
  48. package/dist/filters/builtins/JwtFilter.d.ts +6 -3
  49. package/dist/filters/builtins/JwtFilter.d.ts.map +1 -1
  50. package/dist/filters/builtins/JwtFilter.js +29 -4
  51. package/dist/filters/builtins/JwtFilter.js.map +1 -1
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/storage/GCSStorageProvider.d.ts +15 -0
  57. package/dist/storage/GCSStorageProvider.d.ts.map +1 -0
  58. package/dist/storage/GCSStorageProvider.js +58 -0
  59. package/dist/storage/GCSStorageProvider.js.map +1 -0
  60. package/dist/storage/StorageProvider.d.ts +28 -0
  61. package/dist/storage/StorageProvider.d.ts.map +1 -1
  62. package/dist/storage/StorageProvider.js.map +1 -1
  63. package/dist/storage/index.d.ts +2 -1
  64. package/dist/storage/index.d.ts.map +1 -1
  65. package/dist/storage/index.js +1 -0
  66. package/dist/storage/index.js.map +1 -1
  67. package/package.json +11 -1
@@ -8,10 +8,57 @@ export class AbstractController {
8
8
  this.service = service;
9
9
  }
10
10
  getRoutes() {
11
- return this.config.routes ?? {};
11
+ const explicitRoutes = this.config.routes ?? {};
12
+ const prefix = this.config.prefix ? `/${this.config.prefix.replace(/^\//, "")}` : null;
13
+ const autoConfig = prefix
14
+ ? {
15
+ create: { method: "post", path: prefix },
16
+ update: { method: "put", path: `${prefix}/:id` },
17
+ read: { method: "get", path: `${prefix}/:id` },
18
+ readAll: { method: "get", path: prefix },
19
+ delete: { method: "delete", path: `${prefix}/:id` },
20
+ }
21
+ : {
22
+ create: { method: "post", path: "/" },
23
+ update: { method: "put", path: "/:id" },
24
+ read: { method: "get", path: "/:id" },
25
+ readAll: { method: "get", path: "/" },
26
+ delete: { method: "delete", path: "/:id" },
27
+ };
28
+ return { ...autoConfig, ...explicitRoutes };
12
29
  }
13
30
  getServiceClass() {
14
31
  return this.config.service;
15
32
  }
33
+ async create(req, res) {
34
+ if (this.service && typeof this.service.create === "function") {
35
+ return this.service.create(req.body);
36
+ }
37
+ res.status(404).json({ error: "Method create not implemented on service" });
38
+ }
39
+ async readAll(req, res) {
40
+ if (this.service && typeof this.service.readAll === "function") {
41
+ return this.service.readAll(req.query);
42
+ }
43
+ res.status(404).json({ error: "Method readAll not implemented on service" });
44
+ }
45
+ async read(req, res) {
46
+ if (this.service && typeof this.service.read === "function") {
47
+ return this.service.read(req.params.id);
48
+ }
49
+ res.status(404).json({ error: "Method read not implemented on service" });
50
+ }
51
+ async update(req, res) {
52
+ if (this.service && typeof this.service.update === "function") {
53
+ return this.service.update(req.params.id, req.body);
54
+ }
55
+ res.status(404).json({ error: "Method update not implemented on service" });
56
+ }
57
+ async delete(req, res) {
58
+ if (this.service && typeof this.service.delete === "function") {
59
+ return this.service.delete(req.params.id);
60
+ }
61
+ res.status(404).json({ error: "Method delete not implemented on service" });
62
+ }
16
63
  }
17
64
  //# sourceMappingURL=AbstractController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractController.js","sourceRoot":"","sources":["../../src/core/AbstractController.ts"],"names":[],"mappings":"AAcA,MAAM,OAAgB,kBAAkB;IAC5B,OAAO,CAAW;IAClB,MAAM,CAA4B;IAE5C,YAAY,MAAkC;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,UAAU,CAAC,OAAiB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;IACjC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"AbstractController.js","sourceRoot":"","sources":["../../src/core/AbstractController.ts"],"names":[],"mappings":"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"}
@@ -20,5 +20,10 @@ export declare abstract class AbstractService<TRepository = unknown> {
20
20
  * }
21
21
  */
22
22
  configDependencies(_resolve: ServiceResolver): void;
23
+ readAll(_query?: unknown): Promise<unknown>;
24
+ read(id: unknown, ..._args: unknown[]): Promise<unknown>;
25
+ create(data: unknown, ..._args: unknown[]): Promise<unknown>;
26
+ update(id: unknown, data: unknown, ..._args: unknown[]): Promise<unknown>;
27
+ delete(id: unknown, ..._args: unknown[]): Promise<unknown>;
23
28
  }
24
29
  //# sourceMappingURL=AbstractService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractService.d.ts","sourceRoot":"","sources":["../../src/core/AbstractService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,WAAW,aAAa,CAAC,WAAW;IACxC,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;CACrC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAE7D,8BAAsB,eAAe,CAAC,WAAW,GAAG,OAAO;IAG7C,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC;IAFxD,SAAS,CAAC,UAAU,EAAG,WAAW,CAAA;gBAEZ,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC;IAExD,aAAa,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAI5C,kBAAkB,IAAI,WAAW,CAAC,WAAW,CAAC;IAI9C;;;;;;;;;OASG;IAEH,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;CAGpD"}
1
+ {"version":3,"file":"AbstractService.d.ts","sourceRoot":"","sources":["../../src/core/AbstractService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,WAAW,aAAa,CAAC,WAAW;IACxC,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;CACrC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAE7D,8BAAsB,eAAe,CAAC,WAAW,GAAG,OAAO;IAG7C,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC;IAFxD,SAAS,CAAC,UAAU,EAAG,WAAW,CAAA;gBAEZ,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC;IAExD,aAAa,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAI5C,kBAAkB,IAAI,WAAW,CAAC,WAAW,CAAC;IAI9C;;;;;;;;;OASG;IAEH,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAM7C,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3C,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAQxD,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ5D,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOjE"}
@@ -24,5 +24,41 @@ export class AbstractService {
24
24
  configDependencies(_resolve) {
25
25
  // Default no-op — override in concrete services
26
26
  }
27
+ // --- Default CRUD — delegate to repository when available ---
28
+ async readAll(_query) {
29
+ const repo = this.repository;
30
+ if (repo && typeof repo.findAll === "function") {
31
+ return repo.findAll();
32
+ }
33
+ return [];
34
+ }
35
+ async read(id, ..._args) {
36
+ const repo = this.repository;
37
+ if (repo && typeof repo.findByPk === "function") {
38
+ return repo.findByPk(id);
39
+ }
40
+ return null;
41
+ }
42
+ async create(data, ..._args) {
43
+ const repo = this.repository;
44
+ if (repo && typeof repo.create === "function") {
45
+ return repo.create(data);
46
+ }
47
+ return null;
48
+ }
49
+ async update(id, data, ..._args) {
50
+ const repo = this.repository;
51
+ if (repo && typeof repo.update === "function") {
52
+ return repo.update(id, data);
53
+ }
54
+ return null;
55
+ }
56
+ async delete(id, ..._args) {
57
+ const repo = this.repository;
58
+ if (repo && typeof repo.destroy === "function") {
59
+ return repo.destroy(id);
60
+ }
61
+ return null;
62
+ }
27
63
  }
28
64
  //# sourceMappingURL=AbstractService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractService.js","sourceRoot":"","sources":["../../src/core/AbstractService.ts"],"names":[],"mappings":"AAQA,MAAM,OAAgB,eAAe;IAGb;IAFZ,UAAU,CAAc;IAElC,YAAsB,MAAkC;QAAlC,WAAM,GAAN,MAAM,CAA4B;IAAG,CAAC;IAE5D,aAAa,CAAC,UAAuB;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;IAC/B,CAAC;IAED;;;;;;;;;OASG;IACH,6DAA6D;IAC7D,kBAAkB,CAAC,QAAyB;QAC1C,gDAAgD;IAClD,CAAC;CACF"}
1
+ {"version":3,"file":"AbstractService.js","sourceRoot":"","sources":["../../src/core/AbstractService.ts"],"names":[],"mappings":"AAQA,MAAM,OAAgB,eAAe;IAGb;IAFZ,UAAU,CAAc;IAElC,YAAsB,MAAkC;QAAlC,WAAM,GAAN,MAAM,CAA4B;IAAG,CAAC;IAE5D,aAAa,CAAC,UAAuB;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;IAC/B,CAAC;IAED;;;;;;;;;OASG;IACH,6DAA6D;IAC7D,kBAAkB,CAAC,QAAyB;QAC1C,gDAAgD;IAClD,CAAC;IAED,+DAA+D;IAE/D,KAAK,CAAC,OAAO,CAAC,MAAgB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAqC,CAAA;QACvD,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;QACvB,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAW,EAAE,GAAG,KAAgB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAqC,CAAA;QACvD,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAa,EAAE,GAAG,KAAgB;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAqC,CAAA;QACvD,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAW,EAAE,IAAa,EAAE,GAAG,KAAgB;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAqC,CAAA;QACvD,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAW,EAAE,GAAG,KAAgB;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAqC,CAAA;QACvD,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -5,10 +5,13 @@ export declare abstract class SequelizeRepository<_TEntity = unknown> extends Ab
5
5
  protected connectionManager: ConnectionManager<unknown>;
6
6
  protected tenant: string;
7
7
  protected entityClass?: Constructor;
8
+ private _cachedConnection;
9
+ /** Cached Sequelize connection for the current tenant. Available after any model operation (findAll, findByPk, etc.) */
10
+ get connection(): any;
8
11
  setConnectionManager(manager: ConnectionManager<unknown>): void;
9
12
  setTenant(tenant: string): void;
10
13
  setEntityClass(entity: Constructor): void;
11
- protected getConnection(): Promise<unknown>;
14
+ getConnection(): Promise<unknown>;
12
15
  protected getModel(): Promise<any>;
13
16
  findAll(options?: unknown): Promise<unknown[]>;
14
17
  findByPk(id: unknown, options?: unknown): Promise<unknown | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"SequelizeRepository.d.ts","sourceRoot":"","sources":["../../src/core/SequelizeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAG5D,8BAAsB,mBAAmB,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,kBAAkB;IACtF,SAAS,CAAC,iBAAiB,EAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACxD,SAAS,CAAC,MAAM,EAAG,MAAM,CAAA;IACzB,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAEnC,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI;IAI/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;cAIzB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;cAKjC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAQlC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAK9C,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAKjE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAIhE"}
1
+ {"version":3,"file":"SequelizeRepository.d.ts","sourceRoot":"","sources":["../../src/core/SequelizeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAG5D,8BAAsB,mBAAmB,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,kBAAkB;IACtF,SAAS,CAAC,iBAAiB,EAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACxD,SAAS,CAAC,MAAM,EAAG,MAAM,CAAA;IACzB,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAEnC,OAAO,CAAC,iBAAiB,CAAY;IAErC,wHAAwH;IAExH,IAAI,UAAU,IAAI,GAAG,CAYpB;IAED,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI;IAI/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAInC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;cAOvB,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAQlC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAK9C,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAKjE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAIhE"}
@@ -4,17 +4,38 @@ export class SequelizeRepository extends AbstractRepository {
4
4
  connectionManager;
5
5
  tenant;
6
6
  entityClass;
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ _cachedConnection = null;
9
+ /** Cached Sequelize connection for the current tenant. Available after any model operation (findAll, findByPk, etc.) */
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ get connection() {
12
+ if (this._cachedConnection)
13
+ return this._cachedConnection;
14
+ // Return a shim so raw queries work even before the first model operation
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ const self = this;
17
+ return {
18
+ query: async (sql, options) => {
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ const conn = (await self.getConnection());
21
+ return conn.query(sql, options);
22
+ },
23
+ };
24
+ }
7
25
  setConnectionManager(manager) {
8
26
  this.connectionManager = manager;
9
27
  }
10
28
  setTenant(tenant) {
11
29
  this.tenant = tenant;
30
+ this._cachedConnection = null;
12
31
  }
13
32
  setEntityClass(entity) {
14
33
  this.entityClass = entity;
15
34
  }
16
35
  async getConnection() {
17
- return this.connectionManager.getConnection(this.tenant);
36
+ const conn = await this.connectionManager.getConnection(this.tenant);
37
+ this._cachedConnection = conn;
38
+ return conn;
18
39
  }
19
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
41
  async getModel() {
@@ -1 +1 @@
1
- {"version":3,"file":"SequelizeRepository.js","sourceRoot":"","sources":["../../src/core/SequelizeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,OAAgB,mBAAwC,SAAQ,kBAAkB;IAC5E,iBAAiB,CAA6B;IAC9C,MAAM,CAAS;IACf,WAAW,CAAc;IAEnC,oBAAoB,CAAC,OAAmC;QACtD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAA;IAClC,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,cAAc,CAAC,MAAmB;QAChC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;IAC3B,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1D,CAAC;IAED,8DAA8D;IACpD,KAAK,CAAC,QAAQ;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;QAC1G,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAC7C,OAAO,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACvE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAiB;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAW,EAAE,OAAiB;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnC,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAa,EAAE,OAAiB;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAW,EAAE,IAAa,EAAE,OAAiB;QACxD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,OAAkB,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAW,EAAE,OAAiB;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,OAAkB,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;IACzE,CAAC;CACF"}
1
+ {"version":3,"file":"SequelizeRepository.js","sourceRoot":"","sources":["../../src/core/SequelizeRepository.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,9 @@ export interface DatabaseConfig {
3
3
  port?: number;
4
4
  user?: string;
5
5
  password?: string;
6
+ database?: string;
6
7
  prefix?: string;
8
+ suffix?: string;
7
9
  uri?: string;
8
10
  pool?: {
9
11
  max?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../../src/database/ConnectionManager.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,8BAAsB,iBAAiB,CAAC,WAAW;IACjD,SAAS,CAAC,WAAW,2BAAiC;IACtD,SAAS,CAAC,MAAM,EAAE,cAAc,CAAA;gBAEpB,MAAM,EAAE,cAAc;IAIlC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEjF,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/D,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;CAG3E"}
1
+ {"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../../src/database/ConnectionManager.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,8BAAsB,iBAAiB,CAAC,WAAW;IACjD,SAAS,CAAC,WAAW,2BAAiC;IACtD,SAAS,CAAC,MAAM,EAAE,cAAc,CAAA;gBAEpB,MAAM,EAAE,cAAc;IAIlC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEjF,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAS/D,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;CAM3E"}
@@ -8,10 +8,21 @@ export class ConnectionManager {
8
8
  return this.constructor.name;
9
9
  }
10
10
  buildKey(tenant, dataSource) {
11
+ // When database name is fixed (single-tenant), all tenants share the same
12
+ // connection — key by database name to avoid creating duplicate pools.
13
+ if (this.config.database) {
14
+ return dataSource ? `${this.config.database}:${dataSource}` : this.config.database;
15
+ }
11
16
  return dataSource ? `${tenant}:${dataSource}` : tenant;
12
17
  }
13
18
  resolveDatabaseName(tenant, dataSource) {
14
- return dataSource ?? `${this.config.prefix}_${tenant}`;
19
+ if (this.config.database)
20
+ return this.config.database;
21
+ if (dataSource)
22
+ return dataSource;
23
+ if (this.config.suffix)
24
+ return `${tenant}_${this.config.suffix}`;
25
+ return `${this.config.prefix}_${tenant}`;
15
26
  }
16
27
  }
17
28
  //# sourceMappingURL=ConnectionManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../../src/database/ConnectionManager.ts"],"names":[],"mappings":"AAeA,MAAM,OAAgB,iBAAiB;IAC3B,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,MAAM,CAAgB;IAEhC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAQD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAES,QAAQ,CAAC,MAAc,EAAE,UAAmB;QACpD,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IACxD,CAAC;IAES,mBAAmB,CAAC,MAAc,EAAE,UAAmB;QAC/D,OAAO,UAAU,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAA;IACxD,CAAC;CACF"}
1
+ {"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../../src/database/ConnectionManager.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAgB,iBAAiB;IAC3B,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,MAAM,CAAgB;IAEhC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAQD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAES,QAAQ,CAAC,MAAc,EAAE,UAAmB;QACpD,0EAA0E;QAC1E,uEAAuE;QACvE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA;QACpF,CAAC;QACD,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IACxD,CAAC;IAES,mBAAmB,CAAC,MAAc,EAAE,UAAmB;QAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA;QACrD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAA;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QAChE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,67 @@
1
+ import type { OnRoadExpress, BuildServerConfig } from "../OnRoadExpress.js";
2
+ export interface DevDatabaseConfig {
3
+ engine: "postgres" | "mysql";
4
+ port?: number;
5
+ user?: string;
6
+ password?: string;
7
+ database?: string;
8
+ image?: string;
9
+ containerName?: string;
10
+ }
11
+ /** GCP Cloud SQL backup restore configuration */
12
+ export interface GcpRestoreConfig {
13
+ /** Cloud SQL instance connection name, e.g. "project:region:instance" */
14
+ instance: string;
15
+ /** Source database name on Cloud SQL */
16
+ sourceDatabase: string;
17
+ /** GCS bucket for intermediate dump storage (optional — uses gcloud sql export) */
18
+ gcsBucket?: string;
19
+ /** Cloud SQL user for export (default: "postgres") */
20
+ sqlUser?: string;
21
+ }
22
+ export interface DevServerConfig {
23
+ app: OnRoadExpress;
24
+ databases?: DevDatabaseConfig[];
25
+ frontendVars?: Record<string, string>;
26
+ migrationsPath?: string;
27
+ projectRoot?: string;
28
+ autoMigrate?: boolean;
29
+ composeFile?: string;
30
+ tenants?: string[];
31
+ /** Restore latest backup from GCP Cloud SQL on startup */
32
+ gcpRestore?: GcpRestoreConfig;
33
+ }
34
+ export declare class DevServer {
35
+ private readonly app;
36
+ private readonly logger;
37
+ private readonly databases;
38
+ private readonly frontendVars;
39
+ private readonly migrationsPath?;
40
+ private readonly projectRoot;
41
+ private readonly autoMigrate;
42
+ private readonly composeFile;
43
+ private readonly tenants;
44
+ private readonly gcpRestore?;
45
+ private containers;
46
+ private composeCmd;
47
+ constructor(config: DevServerConfig);
48
+ start(buildConfig?: BuildServerConfig): Promise<void>;
49
+ stop(): Promise<void>;
50
+ private ensureComposeFile;
51
+ private generateComposeContent;
52
+ private getComposeCommand;
53
+ private startContainers;
54
+ private stopContainers;
55
+ private isDockerAvailable;
56
+ private waitForDatabases;
57
+ private waitForContainer;
58
+ private populateContainersFromConfig;
59
+ private waitForSequelizeConnection;
60
+ private runMigrations;
61
+ private printFrontendEnvVars;
62
+ private printBanner;
63
+ private printSummary;
64
+ private restoreFromGcp;
65
+ private localDbHasData;
66
+ }
67
+ //# sourceMappingURL=DevServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevServer.d.ts","sourceRoot":"","sources":["../../src/dev/DevServer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAM3E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAA;IACtB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,CAAA;IAClB,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B;AAcD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAkB;IAC9C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,UAAU,CAAsB;gBAE5B,MAAM,EAAE,eAAe;IAe7B,KAAK,CAAC,WAAW,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,sBAAsB;IA+E9B,OAAO,CAAC,iBAAiB;YAyBX,eAAe;IAiC7B,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,iBAAiB;YAWX,gBAAgB;YAahB,gBAAgB;IA0B9B,OAAO,CAAC,4BAA4B;YAiBtB,0BAA0B;YAgC1B,aAAa;IAmC3B,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,YAAY;YAwBN,cAAc;YA0Ed,cAAc;CAW7B"}