@stratal/framework 0.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 (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +88 -0
  3. package/dist/auth/auth.module.d.ts +37 -0
  4. package/dist/auth/auth.module.d.ts.map +1 -0
  5. package/dist/auth/auth.module.js +74 -0
  6. package/dist/auth/auth.module.js.map +1 -0
  7. package/dist/auth/auth.tokens.d.ts +5 -0
  8. package/dist/auth/auth.tokens.d.ts.map +1 -0
  9. package/dist/auth/auth.tokens.js +5 -0
  10. package/dist/auth/auth.tokens.js.map +1 -0
  11. package/dist/auth/errors/auth-errors.d.ts +74 -0
  12. package/dist/auth/errors/auth-errors.d.ts.map +1 -0
  13. package/dist/auth/errors/auth-errors.js +122 -0
  14. package/dist/auth/errors/auth-errors.js.map +1 -0
  15. package/dist/auth/errors/index.d.ts +5 -0
  16. package/dist/auth/errors/index.d.ts.map +1 -0
  17. package/dist/auth/errors/index.js +5 -0
  18. package/dist/auth/errors/index.js.map +1 -0
  19. package/dist/auth/errors/invalid-token.error.d.ts +5 -0
  20. package/dist/auth/errors/invalid-token.error.d.ts.map +1 -0
  21. package/dist/auth/errors/invalid-token.error.js +7 -0
  22. package/dist/auth/errors/invalid-token.error.js.map +1 -0
  23. package/dist/auth/errors/token-required.error.d.ts +5 -0
  24. package/dist/auth/errors/token-required.error.d.ts.map +1 -0
  25. package/dist/auth/errors/token-required.error.js +7 -0
  26. package/dist/auth/errors/token-required.error.js.map +1 -0
  27. package/dist/auth/errors/verification-failed.error.d.ts +5 -0
  28. package/dist/auth/errors/verification-failed.error.d.ts.map +1 -0
  29. package/dist/auth/errors/verification-failed.error.js +7 -0
  30. package/dist/auth/errors/verification-failed.error.js.map +1 -0
  31. package/dist/auth/index.d.ts +7 -0
  32. package/dist/auth/index.d.ts.map +1 -0
  33. package/dist/auth/index.js +7 -0
  34. package/dist/auth/index.js.map +1 -0
  35. package/dist/auth/middleware/auth-context.middleware.d.ts +12 -0
  36. package/dist/auth/middleware/auth-context.middleware.d.ts.map +1 -0
  37. package/dist/auth/middleware/auth-context.middleware.js +28 -0
  38. package/dist/auth/middleware/auth-context.middleware.js.map +1 -0
  39. package/dist/auth/middleware/index.d.ts +3 -0
  40. package/dist/auth/middleware/index.d.ts.map +1 -0
  41. package/dist/auth/middleware/index.js +3 -0
  42. package/dist/auth/middleware/index.js.map +1 -0
  43. package/dist/auth/middleware/session-verification.middleware.d.ts +18 -0
  44. package/dist/auth/middleware/session-verification.middleware.d.ts.map +1 -0
  45. package/dist/auth/middleware/session-verification.middleware.js +48 -0
  46. package/dist/auth/middleware/session-verification.middleware.js.map +1 -0
  47. package/dist/auth/services/auth.service.d.ts +32 -0
  48. package/dist/auth/services/auth.service.d.ts.map +1 -0
  49. package/dist/auth/services/auth.service.js +62 -0
  50. package/dist/auth/services/auth.service.js.map +1 -0
  51. package/dist/auth/services/index.d.ts +2 -0
  52. package/dist/auth/services/index.d.ts.map +1 -0
  53. package/dist/auth/services/index.js +2 -0
  54. package/dist/auth/services/index.js.map +1 -0
  55. package/dist/auth/utils/auth-helpers.d.ts +11 -0
  56. package/dist/auth/utils/auth-helpers.d.ts.map +1 -0
  57. package/dist/auth/utils/auth-helpers.js +31 -0
  58. package/dist/auth/utils/auth-helpers.js.map +1 -0
  59. package/dist/auth/utils/better-auth-error-handler.d.ts +11 -0
  60. package/dist/auth/utils/better-auth-error-handler.d.ts.map +1 -0
  61. package/dist/auth/utils/better-auth-error-handler.js +95 -0
  62. package/dist/auth/utils/better-auth-error-handler.js.map +1 -0
  63. package/dist/auth/utils/index.d.ts +3 -0
  64. package/dist/auth/utils/index.d.ts.map +1 -0
  65. package/dist/auth/utils/index.js +3 -0
  66. package/dist/auth/utils/index.js.map +1 -0
  67. package/dist/context/auth-context.d.ts +35 -0
  68. package/dist/context/auth-context.d.ts.map +1 -0
  69. package/dist/context/auth-context.js +65 -0
  70. package/dist/context/auth-context.js.map +1 -0
  71. package/dist/context/errors/context-not-initialized.error.d.ts +5 -0
  72. package/dist/context/errors/context-not-initialized.error.d.ts.map +1 -0
  73. package/dist/context/errors/context-not-initialized.error.js +7 -0
  74. package/dist/context/errors/context-not-initialized.error.js.map +1 -0
  75. package/dist/context/errors/index.d.ts +4 -0
  76. package/dist/context/errors/index.d.ts.map +1 -0
  77. package/dist/context/errors/index.js +4 -0
  78. package/dist/context/errors/index.js.map +1 -0
  79. package/dist/context/errors/user-not-authenticated.error.d.ts +5 -0
  80. package/dist/context/errors/user-not-authenticated.error.d.ts.map +1 -0
  81. package/dist/context/errors/user-not-authenticated.error.js +7 -0
  82. package/dist/context/errors/user-not-authenticated.error.js.map +1 -0
  83. package/dist/context/errors/user-not-authorized.error.d.ts +5 -0
  84. package/dist/context/errors/user-not-authorized.error.d.ts.map +1 -0
  85. package/dist/context/errors/user-not-authorized.error.js +7 -0
  86. package/dist/context/errors/user-not-authorized.error.js.map +1 -0
  87. package/dist/context/index.d.ts +3 -0
  88. package/dist/context/index.d.ts.map +1 -0
  89. package/dist/context/index.js +3 -0
  90. package/dist/context/index.js.map +1 -0
  91. package/dist/database/custom-pg-types.d.ts +21 -0
  92. package/dist/database/custom-pg-types.d.ts.map +1 -0
  93. package/dist/database/custom-pg-types.js +41 -0
  94. package/dist/database/custom-pg-types.js.map +1 -0
  95. package/dist/database/database.helpers.d.ts +18 -0
  96. package/dist/database/database.helpers.d.ts.map +1 -0
  97. package/dist/database/database.helpers.js +27 -0
  98. package/dist/database/database.helpers.js.map +1 -0
  99. package/dist/database/database.module.d.ts +21 -0
  100. package/dist/database/database.module.d.ts.map +1 -0
  101. package/dist/database/database.module.js +62 -0
  102. package/dist/database/database.module.js.map +1 -0
  103. package/dist/database/database.service.d.ts +18 -0
  104. package/dist/database/database.service.d.ts.map +1 -0
  105. package/dist/database/database.service.js +2 -0
  106. package/dist/database/database.service.js.map +1 -0
  107. package/dist/database/database.tokens.d.ts +6 -0
  108. package/dist/database/database.tokens.d.ts.map +1 -0
  109. package/dist/database/database.tokens.js +8 -0
  110. package/dist/database/database.tokens.js.map +1 -0
  111. package/dist/database/decorators/inject-db.decorator.d.ts +3 -0
  112. package/dist/database/decorators/inject-db.decorator.d.ts.map +1 -0
  113. package/dist/database/decorators/inject-db.decorator.js +6 -0
  114. package/dist/database/decorators/inject-db.decorator.js.map +1 -0
  115. package/dist/database/errors/database-config.error.d.ts +5 -0
  116. package/dist/database/errors/database-config.error.d.ts.map +1 -0
  117. package/dist/database/errors/database-config.error.js +8 -0
  118. package/dist/database/errors/database-config.error.js.map +1 -0
  119. package/dist/database/errors/database-error.d.ts +14 -0
  120. package/dist/database/errors/database-error.d.ts.map +1 -0
  121. package/dist/database/errors/database-error.js +20 -0
  122. package/dist/database/errors/database-error.js.map +1 -0
  123. package/dist/database/errors/foreign-key-constraint.error.d.ts +14 -0
  124. package/dist/database/errors/foreign-key-constraint.error.d.ts.map +1 -0
  125. package/dist/database/errors/foreign-key-constraint.error.js +19 -0
  126. package/dist/database/errors/foreign-key-constraint.error.js.map +1 -0
  127. package/dist/database/errors/from-zenstack-error.d.ts +22 -0
  128. package/dist/database/errors/from-zenstack-error.d.ts.map +1 -0
  129. package/dist/database/errors/from-zenstack-error.js +114 -0
  130. package/dist/database/errors/from-zenstack-error.js.map +1 -0
  131. package/dist/database/errors/index.d.ts +8 -0
  132. package/dist/database/errors/index.d.ts.map +1 -0
  133. package/dist/database/errors/index.js +8 -0
  134. package/dist/database/errors/index.js.map +1 -0
  135. package/dist/database/errors/invalid-error-code-range.error.d.ts +12 -0
  136. package/dist/database/errors/invalid-error-code-range.error.d.ts.map +1 -0
  137. package/dist/database/errors/invalid-error-code-range.error.js +14 -0
  138. package/dist/database/errors/invalid-error-code-range.error.js.map +1 -0
  139. package/dist/database/errors/record-not-found.error.d.ts +15 -0
  140. package/dist/database/errors/record-not-found.error.d.ts.map +1 -0
  141. package/dist/database/errors/record-not-found.error.js +20 -0
  142. package/dist/database/errors/record-not-found.error.js.map +1 -0
  143. package/dist/database/errors/unique-constraint.error.d.ts +15 -0
  144. package/dist/database/errors/unique-constraint.error.d.ts.map +1 -0
  145. package/dist/database/errors/unique-constraint.error.js +20 -0
  146. package/dist/database/errors/unique-constraint.error.js.map +1 -0
  147. package/dist/database/event-types.d.ts +144 -0
  148. package/dist/database/event-types.d.ts.map +1 -0
  149. package/dist/database/event-types.js +13 -0
  150. package/dist/database/event-types.js.map +1 -0
  151. package/dist/database/index.d.ts +10 -0
  152. package/dist/database/index.d.ts.map +1 -0
  153. package/dist/database/index.js +10 -0
  154. package/dist/database/index.js.map +1 -0
  155. package/dist/database/plugins/error-handler.plugin.d.ts +21 -0
  156. package/dist/database/plugins/error-handler.plugin.d.ts.map +1 -0
  157. package/dist/database/plugins/error-handler.plugin.js +24 -0
  158. package/dist/database/plugins/error-handler.plugin.js.map +1 -0
  159. package/dist/database/plugins/event-emitter.plugin.d.ts +37 -0
  160. package/dist/database/plugins/event-emitter.plugin.d.ts.map +1 -0
  161. package/dist/database/plugins/event-emitter.plugin.js +43 -0
  162. package/dist/database/plugins/event-emitter.plugin.js.map +1 -0
  163. package/dist/database/plugins/index.d.ts +4 -0
  164. package/dist/database/plugins/index.d.ts.map +1 -0
  165. package/dist/database/plugins/index.js +4 -0
  166. package/dist/database/plugins/index.js.map +1 -0
  167. package/dist/database/plugins/schema-switcher.plugin.d.ts +32 -0
  168. package/dist/database/plugins/schema-switcher.plugin.d.ts.map +1 -0
  169. package/dist/database/plugins/schema-switcher.plugin.js +27 -0
  170. package/dist/database/plugins/schema-switcher.plugin.js.map +1 -0
  171. package/dist/database/types.d.ts +51 -0
  172. package/dist/database/types.d.ts.map +1 -0
  173. package/dist/database/types.js +2 -0
  174. package/dist/database/types.js.map +1 -0
  175. package/dist/factory/factory.d.ts +56 -0
  176. package/dist/factory/factory.d.ts.map +1 -0
  177. package/dist/factory/factory.js +86 -0
  178. package/dist/factory/factory.js.map +1 -0
  179. package/dist/factory/index.d.ts +3 -0
  180. package/dist/factory/index.d.ts.map +1 -0
  181. package/dist/factory/index.js +3 -0
  182. package/dist/factory/index.js.map +1 -0
  183. package/dist/factory/sequence.d.ts +38 -0
  184. package/dist/factory/sequence.d.ts.map +1 -0
  185. package/dist/factory/sequence.js +54 -0
  186. package/dist/factory/sequence.js.map +1 -0
  187. package/dist/guards/auth.guard.d.ts +33 -0
  188. package/dist/guards/auth.guard.d.ts.map +1 -0
  189. package/dist/guards/auth.guard.js +99 -0
  190. package/dist/guards/auth.guard.js.map +1 -0
  191. package/dist/guards/index.d.ts +3 -0
  192. package/dist/guards/index.d.ts.map +1 -0
  193. package/dist/guards/index.js +5 -0
  194. package/dist/guards/index.js.map +1 -0
  195. package/dist/index.d.ts +3 -0
  196. package/dist/index.d.ts.map +1 -0
  197. package/dist/index.js +2 -0
  198. package/dist/index.js.map +1 -0
  199. package/dist/rbac/adapters/custom-zenstack-adapter.d.ts +61 -0
  200. package/dist/rbac/adapters/custom-zenstack-adapter.d.ts.map +1 -0
  201. package/dist/rbac/adapters/custom-zenstack-adapter.js +159 -0
  202. package/dist/rbac/adapters/custom-zenstack-adapter.js.map +1 -0
  203. package/dist/rbac/adapters/index.d.ts +2 -0
  204. package/dist/rbac/adapters/index.d.ts.map +1 -0
  205. package/dist/rbac/adapters/index.js +2 -0
  206. package/dist/rbac/adapters/index.js.map +1 -0
  207. package/dist/rbac/constants.d.ts +8 -0
  208. package/dist/rbac/constants.d.ts.map +1 -0
  209. package/dist/rbac/constants.js +8 -0
  210. package/dist/rbac/constants.js.map +1 -0
  211. package/dist/rbac/errors/index.d.ts +2 -0
  212. package/dist/rbac/errors/index.d.ts.map +1 -0
  213. package/dist/rbac/errors/index.js +2 -0
  214. package/dist/rbac/errors/index.js.map +1 -0
  215. package/dist/rbac/errors/insufficient-permissions.error.d.ts +14 -0
  216. package/dist/rbac/errors/insufficient-permissions.error.d.ts.map +1 -0
  217. package/dist/rbac/errors/insufficient-permissions.error.js +19 -0
  218. package/dist/rbac/errors/insufficient-permissions.error.js.map +1 -0
  219. package/dist/rbac/index.d.ts +9 -0
  220. package/dist/rbac/index.d.ts.map +1 -0
  221. package/dist/rbac/index.js +8 -0
  222. package/dist/rbac/index.js.map +1 -0
  223. package/dist/rbac/rbac.module.d.ts +26 -0
  224. package/dist/rbac/rbac.module.d.ts.map +1 -0
  225. package/dist/rbac/rbac.module.js +62 -0
  226. package/dist/rbac/rbac.module.js.map +1 -0
  227. package/dist/rbac/services/casbin-enforcer.service.d.ts +37 -0
  228. package/dist/rbac/services/casbin-enforcer.service.d.ts.map +1 -0
  229. package/dist/rbac/services/casbin-enforcer.service.js +86 -0
  230. package/dist/rbac/services/casbin-enforcer.service.js.map +1 -0
  231. package/dist/rbac/services/casbin.service.d.ts +37 -0
  232. package/dist/rbac/services/casbin.service.d.ts.map +1 -0
  233. package/dist/rbac/services/casbin.service.js +174 -0
  234. package/dist/rbac/services/casbin.service.js.map +1 -0
  235. package/dist/rbac/services/index.d.ts +3 -0
  236. package/dist/rbac/services/index.d.ts.map +1 -0
  237. package/dist/rbac/services/index.js +3 -0
  238. package/dist/rbac/services/index.js.map +1 -0
  239. package/dist/rbac/tokens.d.ts +10 -0
  240. package/dist/rbac/tokens.d.ts.map +1 -0
  241. package/dist/rbac/tokens.js +10 -0
  242. package/dist/rbac/tokens.js.map +1 -0
  243. package/dist/rbac/types.d.ts +12 -0
  244. package/dist/rbac/types.d.ts.map +1 -0
  245. package/dist/rbac/types.js +2 -0
  246. package/dist/rbac/types.js.map +1 -0
  247. package/package.json +118 -0
@@ -0,0 +1,14 @@
1
+ import { ApplicationError, ERROR_CODES } from 'stratal/errors';
2
+ /**
3
+ * InvalidErrorCodeRangeError
4
+ *
5
+ * Thrown when a DatabaseError subclass is constructed with an error code
6
+ * outside the valid database error range (2000-2999).
7
+ * This is a developer-facing error to enforce error code conventions.
8
+ */
9
+ export class InvalidErrorCodeRangeError extends ApplicationError {
10
+ constructor(code, expectedRange) {
11
+ super('errors.invalidErrorCodeRange', ERROR_CODES.SYSTEM.INVALID_ERROR_CODE_RANGE, { code, expectedRange });
12
+ }
13
+ }
14
+ //# sourceMappingURL=invalid-error-code-range.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalid-error-code-range.error.js","sourceRoot":"","sources":["../../../src/database/errors/invalid-error-code-range.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE9D;;;;;;GAMG;AACH,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAY,IAAY,EAAE,aAAqB;QAC7C,KAAK,CACH,8BAA8B,EAC9B,WAAW,CAAC,MAAM,CAAC,wBAAwB,EAC3C,EAAE,IAAI,EAAE,aAAa,EAAE,CACxB,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { DatabaseError } from './database-error';
2
+ /**
3
+ * RecordNotFoundError
4
+ *
5
+ * Generic error thrown when a database record is not found.
6
+ * This is typically thrown when a findUnique or findFirst operation
7
+ * returns null, or when a required record doesn't exist.
8
+ *
9
+ * Services should catch this and optionally refine it to a more specific
10
+ * domain error (e.g., NoteNotFoundError, UserNotFoundError).
11
+ */
12
+ export declare class RecordNotFoundError extends DatabaseError {
13
+ constructor(details?: string);
14
+ }
15
+ //# sourceMappingURL=record-not-found.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-not-found.error.d.ts","sourceRoot":"","sources":["../../../src/database/errors/record-not-found.error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,OAAO,CAAC,EAAE,MAAM;CAK7B"}
@@ -0,0 +1,20 @@
1
+ import { ERROR_CODES } from 'stratal/errors';
2
+ import { DatabaseError } from './database-error';
3
+ /**
4
+ * RecordNotFoundError
5
+ *
6
+ * Generic error thrown when a database record is not found.
7
+ * This is typically thrown when a findUnique or findFirst operation
8
+ * returns null, or when a required record doesn't exist.
9
+ *
10
+ * Services should catch this and optionally refine it to a more specific
11
+ * domain error (e.g., NoteNotFoundError, UserNotFoundError).
12
+ */
13
+ export class RecordNotFoundError extends DatabaseError {
14
+ constructor(details) {
15
+ super('errors.databaseRecordNotFound', ERROR_CODES.DATABASE.RECORD_NOT_FOUND, {
16
+ details,
17
+ });
18
+ }
19
+ }
20
+ //# sourceMappingURL=record-not-found.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-not-found.error.js","sourceRoot":"","sources":["../../../src/database/errors/record-not-found.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD,YAAY,OAAgB;QAC1B,KAAK,CAAC,+BAA+B,EAAE,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YAC5E,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { DatabaseError } from './database-error';
2
+ /**
3
+ * UniqueConstraintError
4
+ *
5
+ * Thrown when a database unique constraint is violated.
6
+ * This typically occurs when trying to insert or update a record
7
+ * with a value that already exists in a unique column.
8
+ *
9
+ * Services should catch this and optionally refine it to a more specific
10
+ * domain error (e.g., UserEmailAlreadyExistsError).
11
+ */
12
+ export declare class UniqueConstraintError extends DatabaseError {
13
+ constructor(fields?: string[]);
14
+ }
15
+ //# sourceMappingURL=unique-constraint.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique-constraint.error.d.ts","sourceRoot":"","sources":["../../../src/database/errors/unique-constraint.error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;gBAC1C,MAAM,CAAC,EAAE,MAAM,EAAE;CAK9B"}
@@ -0,0 +1,20 @@
1
+ import { ERROR_CODES } from 'stratal/errors';
2
+ import { DatabaseError } from './database-error';
3
+ /**
4
+ * UniqueConstraintError
5
+ *
6
+ * Thrown when a database unique constraint is violated.
7
+ * This typically occurs when trying to insert or update a record
8
+ * with a value that already exists in a unique column.
9
+ *
10
+ * Services should catch this and optionally refine it to a more specific
11
+ * domain error (e.g., UserEmailAlreadyExistsError).
12
+ */
13
+ export class UniqueConstraintError extends DatabaseError {
14
+ constructor(fields) {
15
+ super('errors.databaseUniqueConstraint', ERROR_CODES.DATABASE.UNIQUE_CONSTRAINT, {
16
+ fields,
17
+ });
18
+ }
19
+ }
20
+ //# sourceMappingURL=unique-constraint.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique-constraint.error.js","sourceRoot":"","sources":["../../../src/database/errors/unique-constraint.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,YAAY,MAAiB;QAC3B,KAAK,CAAC,iCAAiC,EAAE,WAAW,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YAC/E,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Database Event Types
3
+ *
4
+ * All ZenStack-dependent event types, parameterized by connection name.
5
+ * These types power the auto-complete and type-safe event contexts for
6
+ * database events like `after.User.create`.
7
+ *
8
+ * This module auto-augments core's `CustomEventRegistry` with `DatabaseEvents`,
9
+ * so that `EventContext<'after.User.create'>` resolves to a richly typed context
10
+ * with `data` and `result` derived from the ZenStack schema.
11
+ */
12
+ import type { AggregateArgs, AllCrudOperations, CountArgs, CreateArgs, CreateManyArgs, DeleteArgs, DeleteManyArgs, FindFirstArgs, FindManyArgs, FindUniqueArgs, GroupByArgs, ModelResult, UpdateArgs, UpdateManyArgs, UpsertArgs } from '@zenstackhq/orm';
13
+ import type { SchemaDef } from '@zenstackhq/schema';
14
+ import type { ConnectionName, InferConnectionSchema } from './types';
15
+ /**
16
+ * Event phase: before or after operation
17
+ */
18
+ export type EventPhase = 'before' | 'after';
19
+ /**
20
+ * All database operations that can trigger events
21
+ */
22
+ export type DatabaseOperation = AllCrudOperations;
23
+ /**
24
+ * Model names derived from a connection's schema.
25
+ * Falls back to `never` if no schemas are registered.
26
+ */
27
+ export type ModelName<K extends ConnectionName = ConnectionName> = InferConnectionSchema<K> extends {
28
+ models: infer M;
29
+ } ? Extract<keyof M, string> : never;
30
+ /**
31
+ * Database event names with all supported patterns, parameterized by connection.
32
+ */
33
+ export type DatabaseEventName<K extends ConnectionName = ConnectionName> = `${EventPhase}.${ModelName<K>}.${DatabaseOperation}` | `${EventPhase}.${ModelName<K>}` | `${EventPhase}.${DatabaseOperation}` | EventPhase;
34
+ /**
35
+ * Map operation name to ZenStack Args type for a given schema and model
36
+ */
37
+ type OperationArgsMap<S extends SchemaDef, M extends Extract<keyof S['models'], string>, O extends DatabaseOperation> = O extends 'create' ? CreateArgs<S, M> : O extends 'createMany' ? CreateManyArgs<S, M> : O extends 'update' ? UpdateArgs<S, M> : O extends 'updateMany' ? UpdateManyArgs<S, M> : O extends 'delete' ? DeleteArgs<S, M> : O extends 'deleteMany' ? DeleteManyArgs<S, M> : O extends 'findUnique' ? FindUniqueArgs<S, M> : O extends 'findFirst' ? FindFirstArgs<S, M> : O extends 'findMany' ? FindManyArgs<S, M> : O extends 'upsert' ? UpsertArgs<S, M> : O extends 'count' ? CountArgs<S, M> : O extends 'aggregate' ? AggregateArgs<S, M> : O extends 'groupBy' ? GroupByArgs<S, M> : never;
38
+ /**
39
+ * Extract the data/where property from operation args for a connection.
40
+ */
41
+ export type GetData<K extends ConnectionName, M extends ModelName<K>, O extends DatabaseOperation> = M extends Extract<keyof InferConnectionSchema<K>['models'], string> ? OperationArgsMap<InferConnectionSchema<K>, M, O> extends {
42
+ data: infer D;
43
+ } ? D : OperationArgsMap<InferConnectionSchema<K>, M, O> extends {
44
+ where: infer W;
45
+ } ? W : OperationArgsMap<InferConnectionSchema<K>, M, O> : unknown;
46
+ /**
47
+ * Extract result type for a model operation on a connection.
48
+ */
49
+ export type GetResult<K extends ConnectionName, M extends ModelName<K>, O extends DatabaseOperation> = M extends Extract<keyof InferConnectionSchema<K>['models'], string> ? O extends 'findMany' | 'createMany' | 'updateMany' | 'deleteMany' ? ModelResult<InferConnectionSchema<K>, M>[] : O extends 'count' ? number : ModelResult<InferConnectionSchema<K>, M> : unknown;
50
+ /**
51
+ * Parse event string into structured type for discriminated unions
52
+ */
53
+ export type ParseEvent<K extends ConnectionName, E extends string> = E extends `${infer Phase extends EventPhase}.${infer Model extends ModelName<K>}.${infer Op extends DatabaseOperation}` ? {
54
+ phase: Phase;
55
+ model: Model;
56
+ operation: Op;
57
+ type: 'exact';
58
+ } : E extends `${infer Phase extends EventPhase}.${infer Second}` ? Second extends ModelName<K> ? {
59
+ phase: Phase;
60
+ model: Second;
61
+ type: 'model-wildcard';
62
+ } : Second extends DatabaseOperation ? {
63
+ phase: Phase;
64
+ operation: Second;
65
+ type: 'operation-wildcard';
66
+ } : never : E extends EventPhase ? {
67
+ phase: E;
68
+ type: 'phase-wildcard';
69
+ } : never;
70
+ /** Base context fields present in all events */
71
+ interface BaseEventContext {
72
+ }
73
+ /** Context for exact database events (e.g., "after.User.create") */
74
+ interface ExactDatabaseEventContext<K extends ConnectionName, M extends ModelName<K>, O extends DatabaseOperation, Phase extends EventPhase> extends BaseEventContext {
75
+ data: Phase extends 'before' ? GetData<K, M, O> : Readonly<GetData<K, M, O>>;
76
+ result: Phase extends 'after' ? GetResult<K, M, O> : undefined;
77
+ }
78
+ /** Context for model wildcard events (e.g., "after.User") */
79
+ interface ModelWildcardEventContext<Phase extends EventPhase> extends BaseEventContext {
80
+ operation: DatabaseOperation;
81
+ data: Phase extends 'before' ? unknown : Readonly<unknown>;
82
+ result: Phase extends 'after' ? unknown : undefined;
83
+ }
84
+ /** Context for operation wildcard events (e.g., "after.create") */
85
+ interface OperationWildcardEventContext<K extends ConnectionName, Phase extends EventPhase> extends BaseEventContext {
86
+ model: ModelName<K>;
87
+ data: Phase extends 'before' ? unknown : Readonly<unknown>;
88
+ result: Phase extends 'after' ? unknown : undefined;
89
+ }
90
+ /** Context for phase wildcard events (e.g., "after" or "before") */
91
+ interface PhaseWildcardEventContext<K extends ConnectionName, Phase extends EventPhase> extends BaseEventContext {
92
+ model: ModelName<K>;
93
+ operation: DatabaseOperation;
94
+ data: Phase extends 'before' ? unknown : Readonly<unknown>;
95
+ result: Phase extends 'after' ? unknown : undefined;
96
+ }
97
+ /**
98
+ * Type-safe event context with discriminated unions, parameterized by connection.
99
+ */
100
+ type DatabaseEventContext<K extends ConnectionName, E extends string> = ParseEvent<K, E> extends {
101
+ phase: infer P extends EventPhase;
102
+ model: infer M extends ModelName<K>;
103
+ operation: infer O extends DatabaseOperation;
104
+ type: 'exact';
105
+ } ? ExactDatabaseEventContext<K, M, O, P> : ParseEvent<K, E> extends {
106
+ phase: infer P extends EventPhase;
107
+ model: infer _M extends ModelName<K>;
108
+ type: 'model-wildcard';
109
+ } ? ModelWildcardEventContext<P> : ParseEvent<K, E> extends {
110
+ phase: infer P extends EventPhase;
111
+ operation: infer _O extends DatabaseOperation;
112
+ type: 'operation-wildcard';
113
+ } ? OperationWildcardEventContext<K, P> : ParseEvent<K, E> extends {
114
+ phase: infer P extends EventPhase;
115
+ type: 'phase-wildcard';
116
+ } ? PhaseWildcardEventContext<K, P> : BaseEventContext;
117
+ /**
118
+ * Mapped type that produces all database event name → context pairs for a connection.
119
+ *
120
+ * Used to augment core's `CustomEventRegistry`:
121
+ *
122
+ * @example Augment with all connections (default)
123
+ * ```typescript
124
+ * declare module 'stratal/events' {
125
+ * interface CustomEventRegistry extends DatabaseEvents {}
126
+ * }
127
+ * ```
128
+ *
129
+ * @example Narrow to a specific connection
130
+ * ```typescript
131
+ * declare module 'stratal/events' {
132
+ * interface CustomEventRegistry extends DatabaseEvents<'main'> {}
133
+ * }
134
+ * ```
135
+ */
136
+ export type DatabaseEvents<K extends ConnectionName = ConnectionName> = {
137
+ [E in DatabaseEventName<K>]: DatabaseEventContext<K, E>;
138
+ };
139
+ declare module 'stratal/events' {
140
+ interface CustomEventRegistry extends DatabaseEvents {
141
+ }
142
+ }
143
+ export {};
144
+ //# sourceMappingURL=event-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/database/event-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Database Event Types
3
+ *
4
+ * All ZenStack-dependent event types, parameterized by connection name.
5
+ * These types power the auto-complete and type-safe event contexts for
6
+ * database events like `after.User.create`.
7
+ *
8
+ * This module auto-augments core's `CustomEventRegistry` with `DatabaseEvents`,
9
+ * so that `EventContext<'after.User.create'>` resolves to a richly typed context
10
+ * with `data` and `result` derived from the ZenStack schema.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=event-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-types.js","sourceRoot":"","sources":["../../src/database/event-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,10 @@
1
+ export * from './database.service';
2
+ export * from './database.module';
3
+ export * from './database.tokens';
4
+ export * from './custom-pg-types';
5
+ export * from './decorators/inject-db.decorator';
6
+ export * from './event-types';
7
+ export * from './types';
8
+ export * from './errors';
9
+ export * from './plugins';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kCAAkC,CAAA;AAChD,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,10 @@
1
+ export * from './database.service';
2
+ export * from './database.module';
3
+ export * from './database.tokens';
4
+ export * from './custom-pg-types';
5
+ export * from './decorators/inject-db.decorator';
6
+ export * from './event-types';
7
+ export * from './types';
8
+ export * from './errors';
9
+ export * from './plugins';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kCAAkC,CAAA;AAChD,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { type RuntimePlugin } from '@zenstackhq/orm';
2
+ import { type SchemaDef } from '@zenstackhq/orm/schema';
3
+ /**
4
+ * ZenStack runtime plugin that transforms ORM errors into ApplicationError instances.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * super(schema, {
9
+ * dialect: new PostgresDialect({ pool }),
10
+ * plugins: [new ErrorHandlerPlugin()]
11
+ * })
12
+ * ```
13
+ */
14
+ export declare class ErrorHandlerPlugin implements RuntimePlugin<SchemaDef, Record<string, unknown>, Record<string, unknown>> {
15
+ readonly id = "error-handler";
16
+ onQuery: ({ args, proceed }: {
17
+ args: Record<string, unknown> | undefined;
18
+ proceed: (args: Record<string, unknown> | undefined) => Promise<unknown>;
19
+ }) => Promise<unknown>;
20
+ }
21
+ //# sourceMappingURL=error-handler.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.plugin.d.ts","sourceRoot":"","sources":["../../../src/database/plugins/error-handler.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGvD;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,YAAW,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnH,QAAQ,CAAC,EAAE,mBAAkB;IAE7B,OAAO,GAAU,mBAAmB;QAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;QACzC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KACzE,KAAG,OAAO,CAAC,OAAO,CAAC,CAMnB;CACF"}
@@ -0,0 +1,24 @@
1
+ import { fromZenStackError } from '../errors';
2
+ /**
3
+ * ZenStack runtime plugin that transforms ORM errors into ApplicationError instances.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * super(schema, {
8
+ * dialect: new PostgresDialect({ pool }),
9
+ * plugins: [new ErrorHandlerPlugin()]
10
+ * })
11
+ * ```
12
+ */
13
+ export class ErrorHandlerPlugin {
14
+ id = 'error-handler';
15
+ onQuery = async ({ args, proceed }) => {
16
+ try {
17
+ return await proceed(args);
18
+ }
19
+ catch (error) {
20
+ throw fromZenStackError(error);
21
+ }
22
+ };
23
+ }
24
+ //# sourceMappingURL=error-handler.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.plugin.js","sourceRoot":"","sources":["../../../src/database/plugins/error-handler.plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,kBAAkB;IACpB,EAAE,GAAG,eAAe,CAAA;IAE7B,OAAO,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAG/B,EAAoB,EAAE;QACrB,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;IACH,CAAC,CAAA;CACF"}
@@ -0,0 +1,37 @@
1
+ import { type RuntimePlugin } from '@zenstackhq/orm';
2
+ import { type SchemaDef } from '@zenstackhq/orm/schema';
3
+ import type { IEventRegistry } from 'stratal/events';
4
+ export interface EventEmitterPluginOptions {
5
+ eventRegistry: IEventRegistry;
6
+ }
7
+ /**
8
+ * ZenStack runtime plugin that emits before/after events for database operations.
9
+ *
10
+ * Emits events in the format:
11
+ * - `before.{Model}.{operation}` - Before the database operation
12
+ * - `after.{Model}.{operation}` - After the database operation
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * super(schema, {
17
+ * dialect: new PostgresDialect({ pool }),
18
+ * plugins: [
19
+ * new EventEmitterPlugin({
20
+ * eventRegistry,
21
+ * })
22
+ * ]
23
+ * })
24
+ * ```
25
+ */
26
+ export declare class EventEmitterPlugin implements RuntimePlugin<SchemaDef, Record<string, unknown>, Record<string, unknown>> {
27
+ private options;
28
+ readonly id = "event-emitter";
29
+ constructor(options: EventEmitterPluginOptions);
30
+ onQuery: ({ model, operation, args, proceed }: {
31
+ model: string;
32
+ operation: string;
33
+ args: Record<string, unknown> | undefined;
34
+ proceed: (args: Record<string, unknown> | undefined) => Promise<unknown>;
35
+ }) => Promise<unknown>;
36
+ }
37
+ //# sourceMappingURL=event-emitter.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.plugin.d.ts","sourceRoot":"","sources":["../../../src/database/plugins/event-emitter.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/D,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,cAAc,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,kBAAmB,YAAW,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGvG,OAAO,CAAC,OAAO;IAF3B,QAAQ,CAAC,EAAE,mBAAkB;gBAET,OAAO,EAAE,yBAAyB;IAEtD,OAAO,GAAU,qCAAqC;QACpD,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;QACzC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KACzE,KAAG,OAAO,CAAC,OAAO,CAAC,CAmBnB;CACF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * ZenStack runtime plugin that emits before/after events for database operations.
3
+ *
4
+ * Emits events in the format:
5
+ * - `before.{Model}.{operation}` - Before the database operation
6
+ * - `after.{Model}.{operation}` - After the database operation
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * super(schema, {
11
+ * dialect: new PostgresDialect({ pool }),
12
+ * plugins: [
13
+ * new EventEmitterPlugin({
14
+ * eventRegistry,
15
+ * })
16
+ * ]
17
+ * })
18
+ * ```
19
+ */
20
+ export class EventEmitterPlugin {
21
+ options;
22
+ id = 'event-emitter';
23
+ constructor(options) {
24
+ this.options = options;
25
+ }
26
+ onQuery = async ({ model, operation, args, proceed }) => {
27
+ const { eventRegistry } = this.options;
28
+ const eventBase = `${model}.${operation}`;
29
+ // Emit BEFORE event
30
+ await eventRegistry.emit(`before.${eventBase}`, {
31
+ data: args,
32
+ });
33
+ // Execute the actual database operation
34
+ const result = await proceed(args);
35
+ // Emit AFTER event
36
+ await eventRegistry.emit(`after.${eventBase}`, {
37
+ data: args,
38
+ result,
39
+ });
40
+ return result;
41
+ };
42
+ }
43
+ //# sourceMappingURL=event-emitter.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.plugin.js","sourceRoot":"","sources":["../../../src/database/plugins/event-emitter.plugin.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,kBAAkB;IAGT;IAFX,EAAE,GAAG,eAAe,CAAA;IAE7B,YAAoB,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAI,CAAC;IAE3D,OAAO,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAKjD,EAAoB,EAAE;QACrB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QACtC,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,SAAS,EAAE,CAAA;QAEzC,oBAAoB;QACpB,MAAM,aAAa,CAAC,IAAI,CAAC,UAAU,SAAS,EAAe,EAAE;YAC3D,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;QAEF,wCAAwC;QACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;QAElC,mBAAmB;QACnB,MAAM,aAAa,CAAC,IAAI,CAAC,SAAS,SAAS,EAAe,EAAE;YAC1D,IAAI,EAAE,IAAI;YACV,MAAM;SACP,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;CACF"}
@@ -0,0 +1,4 @@
1
+ export * from './error-handler.plugin';
2
+ export * from './event-emitter.plugin';
3
+ export * from './schema-switcher.plugin';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './error-handler.plugin';
2
+ export * from './event-emitter.plugin';
3
+ export * from './schema-switcher.plugin';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { type RuntimePlugin } from "@zenstackhq/orm";
2
+ import { type SchemaDef } from "@zenstackhq/orm/schema";
3
+ export interface SchemaSwitcherPluginOptions {
4
+ schemaName: string;
5
+ }
6
+ /**
7
+ * ZenStack runtime plugin that sets PostgreSQL search_path before each query.
8
+ * Used for tenant isolation in multi-tenant applications.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * super(schema, {
13
+ * dialect: new PostgresDialect({ pool }),
14
+ * plugins: [
15
+ * new SchemaSwitcherPlugin({ schemaName: `tenant_${tenantId}` })
16
+ * ]
17
+ * })
18
+ * ```
19
+ */
20
+ export declare class SchemaSwitcherPlugin implements RuntimePlugin<SchemaDef, Record<string, unknown>, Record<string, unknown>> {
21
+ private options;
22
+ readonly id = "schema-switcher";
23
+ constructor(options: SchemaSwitcherPluginOptions);
24
+ onQuery: ({ args, proceed, client }: {
25
+ args: Record<string, unknown> | undefined;
26
+ proceed: (args: Record<string, unknown> | undefined) => Promise<unknown>;
27
+ client: {
28
+ $executeRawUnsafe: (sql: string) => Promise<unknown>;
29
+ };
30
+ }) => Promise<unknown>;
31
+ }
32
+ //# sourceMappingURL=schema-switcher.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-switcher.plugin.d.ts","sourceRoot":"","sources":["../../../src/database/plugins/schema-switcher.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,YAAW,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGzG,OAAO,CAAC,OAAO;IAF3B,QAAQ,CAAC,EAAE,qBAAoB;gBAEX,OAAO,EAAE,2BAA2B;IAExD,OAAO,GAAU,2BAA2B;QAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;QACzC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QACxE,MAAM,EAAE;YAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;SAAE,CAAA;KACjE,KAAG,OAAO,CAAC,OAAO,CAAC,CAInB;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ZenStack runtime plugin that sets PostgreSQL search_path before each query.
3
+ * Used for tenant isolation in multi-tenant applications.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * super(schema, {
8
+ * dialect: new PostgresDialect({ pool }),
9
+ * plugins: [
10
+ * new SchemaSwitcherPlugin({ schemaName: `tenant_${tenantId}` })
11
+ * ]
12
+ * })
13
+ * ```
14
+ */
15
+ export class SchemaSwitcherPlugin {
16
+ options;
17
+ id = 'schema-switcher';
18
+ constructor(options) {
19
+ this.options = options;
20
+ }
21
+ onQuery = async ({ args, proceed, client }) => {
22
+ // Set search_path before each query
23
+ await client.$executeRawUnsafe(`SET search_path TO "${this.options.schemaName}"`);
24
+ return proceed(args);
25
+ };
26
+ }
27
+ //# sourceMappingURL=schema-switcher.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-switcher.plugin.js","sourceRoot":"","sources":["../../../src/database/plugins/schema-switcher.plugin.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,oBAAoB;IAGX;IAFX,EAAE,GAAG,iBAAiB,CAAA;IAE/B,YAAoB,OAAoC;QAApC,YAAO,GAAP,OAAO,CAA6B;IAAI,CAAC;IAE7D,OAAO,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAIvC,EAAoB,EAAE;QACrB,oCAAoC;QACpC,MAAM,MAAM,CAAC,iBAAiB,CAAC,uBAAuB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAA;QACjF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC,CAAA;CACF"}
@@ -0,0 +1,51 @@
1
+ import type { SchemaDef } from '@zenstackhq/schema';
2
+ /**
3
+ * Augmentable schema registry for strict DatabaseService typing.
4
+ *
5
+ * Users augment this interface to register their ZenStack schemas per connection:
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * declare module '@stratal/framework/database' {
10
+ * interface DatabaseSchemaRegistry {
11
+ * main: typeof mainSchema
12
+ * analytics: typeof analyticsSchema
13
+ * }
14
+ * }
15
+ * ```
16
+ */
17
+ export interface DatabaseSchemaRegistry {
18
+ }
19
+ /**
20
+ * Augmentable interface to declare the default database connection.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * declare module '@stratal/framework/database' {
25
+ * interface DefaultDatabaseConnection {
26
+ * name: 'main'
27
+ * }
28
+ * }
29
+ * ```
30
+ */
31
+ export interface DefaultDatabaseConnection {
32
+ }
33
+ /** Connection name with autocomplete when augmented, string fallback otherwise */
34
+ export type ConnectionName = keyof DatabaseSchemaRegistry extends never ? string : Extract<keyof DatabaseSchemaRegistry, string>;
35
+ /** Default connection name from augmentation */
36
+ export type DefaultConnectionName = DefaultDatabaseConnection extends {
37
+ name: infer N extends string;
38
+ } ? N : string;
39
+ /** Resolve schema type for a named connection */
40
+ export type InferConnectionSchema<K extends string> = K extends keyof DatabaseSchemaRegistry ? DatabaseSchemaRegistry[K] extends SchemaDef ? DatabaseSchemaRegistry[K] : SchemaDef : SchemaDef;
41
+ /** Union of all registered schemas (used by the event system for model name inference) */
42
+ export type InferDatabaseSchema = InferConnectionSchema<ConnectionName>;
43
+ /**
44
+ * Internal context used by database service for dynamic event emission
45
+ * @internal
46
+ */
47
+ export interface InternalDatabaseEventContext {
48
+ data: unknown;
49
+ result?: unknown;
50
+ }
51
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,sBAAsB;CAAI;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,yBAAyB;CAAI;AAE9C,kFAAkF;AAClF,MAAM,MAAM,cAAc,GAAG,MAAM,sBAAsB,SAAS,KAAK,GACnE,MAAM,GACN,OAAO,CAAC,MAAM,sBAAsB,EAAE,MAAM,CAAC,CAAA;AAEjD,gDAAgD;AAChD,MAAM,MAAM,qBAAqB,GAC/B,yBAAyB,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GAAG,CAAC,GAAG,MAAM,CAAA;AAEjF,iDAAiD;AACjD,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,MAAM,IAChD,CAAC,SAAS,MAAM,sBAAsB,GACpC,sBAAsB,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,sBAAsB,CAAC,CAAC,CAAC,GAAG,SAAS,GACnF,SAAS,CAAA;AAEb,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAA;AAEvE;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":""}