@ambiten/core 1.0.0

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 (304) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +247 -0
  3. package/bin/bootstrap.js +26 -0
  4. package/dist/ambiten-cache/ambitenCache.d.ts +64 -0
  5. package/dist/ambiten-cache/ambitenCache.d.ts.map +1 -0
  6. package/dist/ambiten-cache/ambitenCache.js +127 -0
  7. package/dist/ambiten-cache/index.d.ts +2 -0
  8. package/dist/ambiten-cache/index.d.ts.map +1 -0
  9. package/dist/ambiten-cache/index.js +4 -0
  10. package/dist/browser.d.ts +32 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +37 -0
  13. package/dist/cli/ambiten-core-cli.d.ts +4 -0
  14. package/dist/cli/ambiten-core-cli.d.ts.map +1 -0
  15. package/dist/cli/ambiten-core-cli.js +41 -0
  16. package/dist/cli/buildInteractiveConfig.d.ts +4 -0
  17. package/dist/cli/buildInteractiveConfig.d.ts.map +1 -0
  18. package/dist/cli/buildInteractiveConfig.js +198 -0
  19. package/dist/cli/index.d.ts +5 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +7 -0
  22. package/dist/cli/prompt.d.ts +10 -0
  23. package/dist/cli/prompt.d.ts.map +1 -0
  24. package/dist/cli/prompt.js +48 -0
  25. package/dist/cli/types.d.ts +11 -0
  26. package/dist/cli/types.d.ts.map +1 -0
  27. package/dist/cli/types.js +2 -0
  28. package/dist/config/ambiten.config.schema.json +278 -0
  29. package/dist/config/index.d.ts +2 -0
  30. package/dist/config/index.d.ts.map +1 -0
  31. package/dist/config/index.js +4 -0
  32. package/dist/config/loadAmbitenConfig.d.ts +3 -0
  33. package/dist/config/loadAmbitenConfig.d.ts.map +1 -0
  34. package/dist/config/loadAmbitenConfig.js +131 -0
  35. package/dist/context/ambitenContext.d.ts +35 -0
  36. package/dist/context/ambitenContext.d.ts.map +1 -0
  37. package/dist/context/ambitenContext.js +147 -0
  38. package/dist/context/helpers/runManualTransaction.d.ts +3 -0
  39. package/dist/context/helpers/runManualTransaction.d.ts.map +1 -0
  40. package/dist/context/helpers/runManualTransaction.js +22 -0
  41. package/dist/context/helpers/transactionSession.d.ts +9 -0
  42. package/dist/context/helpers/transactionSession.d.ts.map +1 -0
  43. package/dist/context/helpers/transactionSession.js +8 -0
  44. package/dist/context/index.d.ts +4 -0
  45. package/dist/context/index.d.ts.map +1 -0
  46. package/dist/context/index.js +6 -0
  47. package/dist/debug/debugLog.d.ts +2 -0
  48. package/dist/debug/debugLog.d.ts.map +1 -0
  49. package/dist/debug/debugLog.js +23 -0
  50. package/dist/debug/index.d.ts +2 -0
  51. package/dist/debug/index.d.ts.map +1 -0
  52. package/dist/debug/index.js +4 -0
  53. package/dist/gc/ambitenGC.d.ts +49 -0
  54. package/dist/gc/ambitenGC.d.ts.map +1 -0
  55. package/dist/gc/ambitenGC.js +138 -0
  56. package/dist/gc/gcCron.browser.d.ts +2 -0
  57. package/dist/gc/gcCron.browser.d.ts.map +1 -0
  58. package/dist/gc/gcCron.browser.js +9 -0
  59. package/dist/gc/gcCron.node.d.ts +19 -0
  60. package/dist/gc/gcCron.node.d.ts.map +1 -0
  61. package/dist/gc/gcCron.node.js +47 -0
  62. package/dist/gc/gcManager.d.ts +37 -0
  63. package/dist/gc/gcManager.d.ts.map +1 -0
  64. package/dist/gc/gcManager.js +62 -0
  65. package/dist/gc/index.d.ts +5 -0
  66. package/dist/gc/index.d.ts.map +1 -0
  67. package/dist/gc/index.js +7 -0
  68. package/dist/graphql/ambitenGraphQL.d.ts +24 -0
  69. package/dist/graphql/ambitenGraphQL.d.ts.map +1 -0
  70. package/dist/graphql/ambitenGraphQL.js +215 -0
  71. package/dist/graphql/index.d.ts +2 -0
  72. package/dist/graphql/index.d.ts.map +1 -0
  73. package/dist/graphql/index.js +4 -0
  74. package/dist/index-browser.js +25 -0
  75. package/dist/index-browser.js.map +1 -0
  76. package/dist/index-cli.js +26 -0
  77. package/dist/index-cli.js.map +1 -0
  78. package/dist/index.d.ts +30 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +25 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/init-cli/generate.project.d.ts +9 -0
  83. package/dist/init-cli/generate.project.d.ts.map +1 -0
  84. package/dist/init-cli/generate.project.js +38 -0
  85. package/dist/instrumentation/index.d.ts +3 -0
  86. package/dist/instrumentation/index.d.ts.map +1 -0
  87. package/dist/instrumentation/index.js +5 -0
  88. package/dist/instrumentation/measureQuery.browser.d.ts +3 -0
  89. package/dist/instrumentation/measureQuery.browser.d.ts.map +1 -0
  90. package/dist/instrumentation/measureQuery.browser.js +6 -0
  91. package/dist/instrumentation/measureQueryWithErrors.d.ts +11 -0
  92. package/dist/instrumentation/measureQueryWithErrors.d.ts.map +1 -0
  93. package/dist/instrumentation/measureQueryWithErrors.js +90 -0
  94. package/dist/lib-core/ambitenClient.d.ts +115 -0
  95. package/dist/lib-core/ambitenClient.d.ts.map +1 -0
  96. package/dist/lib-core/ambitenClient.js +537 -0
  97. package/dist/lib-core/ambitenModelFactory.d.ts +979 -0
  98. package/dist/lib-core/ambitenModelFactory.d.ts.map +1 -0
  99. package/dist/lib-core/ambitenModelFactory.js +3984 -0
  100. package/dist/lib-core/ambitenSchema.d.ts +126 -0
  101. package/dist/lib-core/ambitenSchema.d.ts.map +1 -0
  102. package/dist/lib-core/ambitenSchema.js +247 -0
  103. package/dist/lib-core/bootstrap/ambitenBootstrap.d.ts +38 -0
  104. package/dist/lib-core/bootstrap/ambitenBootstrap.d.ts.map +1 -0
  105. package/dist/lib-core/bootstrap/ambitenBootstrap.js +381 -0
  106. package/dist/lib-core/bootstrap/index.d.ts +2 -0
  107. package/dist/lib-core/bootstrap/index.d.ts.map +1 -0
  108. package/dist/lib-core/bootstrap/index.js +4 -0
  109. package/dist/lib-core/index.d.ts +5 -0
  110. package/dist/lib-core/index.d.ts.map +1 -0
  111. package/dist/lib-core/index.js +7 -0
  112. package/dist/middleware/authorization/auth.d.ts +22 -0
  113. package/dist/middleware/authorization/auth.d.ts.map +1 -0
  114. package/dist/middleware/authorization/auth.js +37 -0
  115. package/dist/middleware/index.d.ts +4 -0
  116. package/dist/middleware/index.d.ts.map +1 -0
  117. package/dist/middleware/index.js +6 -0
  118. package/dist/middleware/rbac/rbacMiddleware.d.ts +103 -0
  119. package/dist/middleware/rbac/rbacMiddleware.d.ts.map +1 -0
  120. package/dist/middleware/rbac/rbacMiddleware.js +246 -0
  121. package/dist/middleware/rbac/rbacTypes.d.ts +4 -0
  122. package/dist/middleware/rbac/rbacTypes.d.ts.map +1 -0
  123. package/dist/middleware/rbac/rbacTypes.js +8 -0
  124. package/dist/plugins/index.d.ts +3 -0
  125. package/dist/plugins/index.d.ts.map +1 -0
  126. package/dist/plugins/index.js +5 -0
  127. package/dist/plugins/softDelete/applySoftDelete.d.ts +5 -0
  128. package/dist/plugins/softDelete/applySoftDelete.d.ts.map +1 -0
  129. package/dist/plugins/softDelete/applySoftDelete.js +139 -0
  130. package/dist/plugins/softDelete/types.d.ts +14 -0
  131. package/dist/plugins/softDelete/types.d.ts.map +1 -0
  132. package/dist/plugins/softDelete/types.js +2 -0
  133. package/dist/redis-manager/index.d.ts +2 -0
  134. package/dist/redis-manager/index.d.ts.map +1 -0
  135. package/dist/redis-manager/index.js +4 -0
  136. package/dist/redis-manager/redisClient.d.ts +32 -0
  137. package/dist/redis-manager/redisClient.d.ts.map +1 -0
  138. package/dist/redis-manager/redisClient.js +146 -0
  139. package/dist/tanancy/MultiTenantManager.d.ts +98 -0
  140. package/dist/tanancy/MultiTenantManager.d.ts.map +1 -0
  141. package/dist/tanancy/MultiTenantManager.js +190 -0
  142. package/dist/tanancy/TenantContext.d.ts +31 -0
  143. package/dist/tanancy/TenantContext.d.ts.map +1 -0
  144. package/dist/tanancy/TenantContext.js +59 -0
  145. package/dist/tanancy/TenantModelResolver.d.ts +10 -0
  146. package/dist/tanancy/TenantModelResolver.d.ts.map +1 -0
  147. package/dist/tanancy/TenantModelResolver.js +114 -0
  148. package/dist/tanancy/index.d.ts +5 -0
  149. package/dist/tanancy/index.d.ts.map +1 -0
  150. package/dist/tanancy/index.js +7 -0
  151. package/dist/tanancy/init/initMultiTenancy.d.ts +29 -0
  152. package/dist/tanancy/init/initMultiTenancy.d.ts.map +1 -0
  153. package/dist/tanancy/init/initMultiTenancy.js +62 -0
  154. package/dist/templates/generateDefaultConfigContent.d.ts +10 -0
  155. package/dist/templates/generateDefaultConfigContent.d.ts.map +1 -0
  156. package/dist/templates/generateDefaultConfigContent.js +108 -0
  157. package/dist/templates/generateGCManagerFile.d.ts +2 -0
  158. package/dist/templates/generateGCManagerFile.d.ts.map +1 -0
  159. package/dist/templates/generateGCManagerFile.js +39 -0
  160. package/dist/templates/generateGCRunnerFile.d.ts +2 -0
  161. package/dist/templates/generateGCRunnerFile.d.ts.map +1 -0
  162. package/dist/templates/generateGCRunnerFile.js +25 -0
  163. package/dist/templates/generateMainEntry.d.ts +3 -0
  164. package/dist/templates/generateMainEntry.d.ts.map +1 -0
  165. package/dist/templates/generateMainEntry.js +24 -0
  166. package/dist/templates/index.d.ts +6 -0
  167. package/dist/templates/index.d.ts.map +1 -0
  168. package/dist/templates/index.js +8 -0
  169. package/dist/templates/scaffold/structureGenerator.d.ts +4 -0
  170. package/dist/templates/scaffold/structureGenerator.d.ts.map +1 -0
  171. package/dist/templates/scaffold/structureGenerator.js +193 -0
  172. package/dist/types/GCConfig.d.ts +7 -0
  173. package/dist/types/GCConfig.d.ts.map +1 -0
  174. package/dist/types/GCConfig.js +2 -0
  175. package/dist/types/ambiten-runtime-type.d.ts +24 -0
  176. package/dist/types/ambiten-runtime-type.d.ts.map +1 -0
  177. package/dist/types/ambiten-runtime-type.js +2 -0
  178. package/dist/types/ambiten.client.type.d.ts +136 -0
  179. package/dist/types/ambiten.client.type.d.ts.map +1 -0
  180. package/dist/types/ambiten.client.type.js +3 -0
  181. package/dist/types/ambiten.model.type.d.ts +135 -0
  182. package/dist/types/ambiten.model.type.d.ts.map +1 -0
  183. package/dist/types/ambiten.model.type.js +4 -0
  184. package/dist/types/ambitenConfig.d.ts +103 -0
  185. package/dist/types/ambitenConfig.d.ts.map +1 -0
  186. package/dist/types/ambitenConfig.js +3 -0
  187. package/dist/types/bootstrapClient.type.d.ts +11 -0
  188. package/dist/types/bootstrapClient.type.d.ts.map +1 -0
  189. package/dist/types/bootstrapClient.type.js +2 -0
  190. package/dist/types/db.provider.d.ts +66 -0
  191. package/dist/types/db.provider.d.ts.map +1 -0
  192. package/dist/types/db.provider.js +2 -0
  193. package/dist/types/document.d.ts +7 -0
  194. package/dist/types/document.d.ts.map +1 -0
  195. package/dist/types/document.js +2 -0
  196. package/dist/types/event.type.d.ts +6 -0
  197. package/dist/types/event.type.d.ts.map +1 -0
  198. package/dist/types/event.type.js +27 -0
  199. package/dist/types/graphql.type.d.ts +22 -0
  200. package/dist/types/graphql.type.d.ts.map +1 -0
  201. package/dist/types/graphql.type.js +2 -0
  202. package/dist/types/index.d.ts +15 -0
  203. package/dist/types/index.d.ts.map +1 -0
  204. package/dist/types/index.js +17 -0
  205. package/dist/types/logger.types.d.ts +15 -0
  206. package/dist/types/logger.types.d.ts.map +1 -0
  207. package/dist/types/logger.types.js +3 -0
  208. package/dist/types/middleware/types.d.ts +28 -0
  209. package/dist/types/middleware/types.d.ts.map +1 -0
  210. package/dist/types/middleware/types.js +2 -0
  211. package/dist/types/result.utils.types.d.ts +7 -0
  212. package/dist/types/result.utils.types.d.ts.map +1 -0
  213. package/dist/types/result.utils.types.js +2 -0
  214. package/dist/types/schema.type.d.ts +23 -0
  215. package/dist/types/schema.type.d.ts.map +1 -0
  216. package/dist/types/schema.type.js +10 -0
  217. package/dist/types/user.type.d.ts +11 -0
  218. package/dist/types/user.type.d.ts.map +1 -0
  219. package/dist/types/user.type.js +2 -0
  220. package/dist/utils/AuthUtils.d.ts +15 -0
  221. package/dist/utils/AuthUtils.d.ts.map +1 -0
  222. package/dist/utils/AuthUtils.js +26 -0
  223. package/dist/utils/ModelRegistry.d.ts +15 -0
  224. package/dist/utils/ModelRegistry.d.ts.map +1 -0
  225. package/dist/utils/ModelRegistry.js +35 -0
  226. package/dist/utils/banner.d.ts +2 -0
  227. package/dist/utils/banner.d.ts.map +1 -0
  228. package/dist/utils/banner.js +20 -0
  229. package/dist/utils/builders/createModel.d.ts +37 -0
  230. package/dist/utils/builders/createModel.d.ts.map +1 -0
  231. package/dist/utils/builders/createModel.js +38 -0
  232. package/dist/utils/builders/getTenantDb.d.ts +12 -0
  233. package/dist/utils/builders/getTenantDb.d.ts.map +1 -0
  234. package/dist/utils/builders/getTenantDb.js +25 -0
  235. package/dist/utils/builders/index.d.ts +4 -0
  236. package/dist/utils/builders/index.d.ts.map +1 -0
  237. package/dist/utils/builders/index.js +6 -0
  238. package/dist/utils/builders/schema.d.ts +22 -0
  239. package/dist/utils/builders/schema.d.ts.map +1 -0
  240. package/dist/utils/builders/schema.js +26 -0
  241. package/dist/utils/cacheWithRedis.d.ts +27 -0
  242. package/dist/utils/cacheWithRedis.d.ts.map +1 -0
  243. package/dist/utils/cacheWithRedis.js +22 -0
  244. package/dist/utils/castId.d.ts +5 -0
  245. package/dist/utils/castId.d.ts.map +1 -0
  246. package/dist/utils/castId.js +52 -0
  247. package/dist/utils/color-palatte.d.ts +4 -0
  248. package/dist/utils/color-palatte.d.ts.map +1 -0
  249. package/dist/utils/color-palatte.js +24 -0
  250. package/dist/utils/configureAmbitenContext.d.ts +13 -0
  251. package/dist/utils/configureAmbitenContext.d.ts.map +1 -0
  252. package/dist/utils/configureAmbitenContext.js +35 -0
  253. package/dist/utils/detect-package-manager.d.ts +5 -0
  254. package/dist/utils/detect-package-manager.d.ts.map +1 -0
  255. package/dist/utils/detect-package-manager.js +59 -0
  256. package/dist/utils/ensureModelNameSafe.d.ts +12 -0
  257. package/dist/utils/ensureModelNameSafe.d.ts.map +1 -0
  258. package/dist/utils/ensureModelNameSafe.js +28 -0
  259. package/dist/utils/ensureRedis.d.ts +7 -0
  260. package/dist/utils/ensureRedis.d.ts.map +1 -0
  261. package/dist/utils/ensureRedis.js +40 -0
  262. package/dist/utils/error/ambitenError-handler.d.ts +24 -0
  263. package/dist/utils/error/ambitenError-handler.d.ts.map +1 -0
  264. package/dist/utils/error/ambitenError-handler.js +39 -0
  265. package/dist/utils/error/errorTypes.d.ts +27 -0
  266. package/dist/utils/error/errorTypes.d.ts.map +1 -0
  267. package/dist/utils/error/errorTypes.js +30 -0
  268. package/dist/utils/error/index.d.ts +3 -0
  269. package/dist/utils/error/index.d.ts.map +1 -0
  270. package/dist/utils/error/index.js +5 -0
  271. package/dist/utils/eventOptions.d.ts +38 -0
  272. package/dist/utils/eventOptions.d.ts.map +1 -0
  273. package/dist/utils/eventOptions.js +130 -0
  274. package/dist/utils/events.d.ts +5 -0
  275. package/dist/utils/events.d.ts.map +1 -0
  276. package/dist/utils/events.js +7 -0
  277. package/dist/utils/index.d.ts +23 -0
  278. package/dist/utils/index.d.ts.map +1 -0
  279. package/dist/utils/index.js +25 -0
  280. package/dist/utils/invalidateTenantCache.d.ts +18 -0
  281. package/dist/utils/invalidateTenantCache.d.ts.map +1 -0
  282. package/dist/utils/invalidateTenantCache.js +27 -0
  283. package/dist/utils/logger.d.ts +3 -0
  284. package/dist/utils/logger.d.ts.map +1 -0
  285. package/dist/utils/logger.js +27 -0
  286. package/dist/utils/modelLoader.d.ts +3 -0
  287. package/dist/utils/modelLoader.d.ts.map +1 -0
  288. package/dist/utils/modelLoader.js +41 -0
  289. package/dist/utils/resolveAmbitenOption.d.ts +2 -0
  290. package/dist/utils/resolveAmbitenOption.d.ts.map +1 -0
  291. package/dist/utils/resolveAmbitenOption.js +10 -0
  292. package/dist/utils/resolveRuntimeConfig.d.ts +22 -0
  293. package/dist/utils/resolveRuntimeConfig.d.ts.map +1 -0
  294. package/dist/utils/resolveRuntimeConfig.js +33 -0
  295. package/dist/utils/scaffoldLoger.d.ts +11 -0
  296. package/dist/utils/scaffoldLoger.d.ts.map +1 -0
  297. package/dist/utils/scaffoldLoger.js +68 -0
  298. package/dist/utils/symbols.d.ts +4 -0
  299. package/dist/utils/symbols.d.ts.map +1 -0
  300. package/dist/utils/symbols.js +6 -0
  301. package/dist/utils/time.d.ts +5 -0
  302. package/dist/utils/time.d.ts.map +1 -0
  303. package/dist/utils/time.js +39 -0
  304. package/package.json +180 -0
@@ -0,0 +1,126 @@
1
+ import type { Collection, OptionalUnlessRequiredId } from 'mongodb';
2
+ import type { SchemaDefinition, Document, Relationship, GCConfig } from '../types';
3
+ import type { AmbitenMiddlewareOperation, AmbitenMiddlewareContext, AmbitenMiddlewareHandler } from '../types';
4
+ /**
5
+ * The AmbitenSchema class allows you to define a schema for MongoDB documents.
6
+ * It supports:
7
+ * - schema definition
8
+ * - custom validation
9
+ * - indexes
10
+ * - relationships
11
+ * - virtual fields
12
+ * - context-aware middleware
13
+ * - garbage collection metadata
14
+ */
15
+ export declare class AmbitenSchema<T extends Document> {
16
+ private schemaDefinition;
17
+ private indexes;
18
+ private virtuals;
19
+ private validators;
20
+ private relationships;
21
+ private gcConfig?;
22
+ private middleware;
23
+ /**
24
+ * Creates an instance of AmbitenSchema.
25
+ * @param schemaDefinition - The schema definition for the document.
26
+ */
27
+ constructor(schemaDefinition: SchemaDefinition<T>);
28
+ /**
29
+ * Retrieves the schema definition.
30
+ */
31
+ getSchema(): SchemaDefinition<T>;
32
+ /**
33
+ * Re-registers the schema definition.
34
+ */
35
+ registerSchema(schemaDefinition: SchemaDefinition<T>): void;
36
+ /**
37
+ * Adds a custom validator for a specific field.
38
+ */
39
+ validator(field: string, fn: (value: any, doc?: OptionalUnlessRequiredId<T>) => boolean | Promise<boolean>): void;
40
+ /**
41
+ * Validates a document synchronously.
42
+ * Throws if an async validator is encountered.
43
+ */
44
+ validate(doc: OptionalUnlessRequiredId<T>): void;
45
+ /**
46
+ * Validates a document asynchronously.
47
+ */
48
+ validateAsync(doc: OptionalUnlessRequiredId<T>): Promise<void>;
49
+ /**
50
+ * Adds an index to the schema.
51
+ */
52
+ index(fields: any, options?: any): void;
53
+ /**
54
+ * Applies all defined indexes to a MongoDB collection.
55
+ */
56
+ applyIndexes(collection: Collection<any>): Promise<void>;
57
+ /**
58
+ * Adds a relationship to the schema.
59
+ */
60
+ addRelationship(ref: string, localField: keyof T): void;
61
+ /**
62
+ * Retrieves all relationships defined in the schema.
63
+ */
64
+ getRelationships(): Relationship[];
65
+ /**
66
+ * Adds a virtual field to the schema.
67
+ */
68
+ virtual(name: string, getter: (doc: T) => any): void;
69
+ /**
70
+ * Applies all virtual fields to a document.
71
+ */
72
+ applyVirtuals(doc: T): void;
73
+ /**
74
+ * Adds a pre-middleware handler for a specific operation.
75
+ */
76
+ pre(operation: AmbitenMiddlewareOperation, fn: AmbitenMiddlewareHandler<T>): this;
77
+ /**
78
+ * Adds a post-middleware handler for a specific operation.
79
+ */
80
+ post(operation: AmbitenMiddlewareOperation, fn: AmbitenMiddlewareHandler<T>): this;
81
+ /**
82
+ * Returns all pre-middleware for an operation.
83
+ */
84
+ getPreHooks(operation: AmbitenMiddlewareOperation): AmbitenMiddlewareHandler<T>[];
85
+ /**
86
+ * Returns all post-middleware for an operation.
87
+ */
88
+ getPostHooks(operation: AmbitenMiddlewareOperation): AmbitenMiddlewareHandler<T>[];
89
+ /**
90
+ * Backward-compatible hook reader.
91
+ * Defaults to pre hooks to avoid breaking older callers that expect getHooks(action).
92
+ */
93
+ getHooks(operation: AmbitenMiddlewareOperation, phase?: 'pre' | 'post'): AmbitenMiddlewareHandler<T>[];
94
+ /**
95
+ * Executes pre-middleware for an operation.
96
+ */
97
+ executePre(operation: AmbitenMiddlewareOperation, ctx: AmbitenMiddlewareContext<T>): Promise<void>;
98
+ /**
99
+ * Executes post-middleware for an operation.
100
+ */
101
+ executePost(operation: AmbitenMiddlewareOperation, ctx: AmbitenMiddlewareContext<T>): Promise<void>;
102
+ /**
103
+ * Executes middleware for a given phase and operation.
104
+ */
105
+ executeMiddleware(phase: 'pre' | 'post', operation: AmbitenMiddlewareOperation, ctx: AmbitenMiddlewareContext<T>): Promise<void>;
106
+ /**
107
+ * Backward-compatible alias.
108
+ * If older callers use triggerMiddleware(action, data), they should be upgraded
109
+ * to pass explicit phase + operation + context.
110
+ */
111
+ triggerMiddleware(phase: 'pre' | 'post', operation: AmbitenMiddlewareOperation, ctx: AmbitenMiddlewareContext<T>): Promise<void>;
112
+ /**
113
+ * Sets garbage collection configuration.
114
+ */
115
+ setGCConfig(config: GCConfig): this;
116
+ /**
117
+ * Gets garbage collection configuration.
118
+ */
119
+ getGCConfig(): GCConfig | undefined;
120
+ }
121
+ export declare class Schema<T extends Document = Document> extends AmbitenSchema<T> {
122
+ constructor(schemaDefinition: SchemaDefinition<T>);
123
+ create(data: OptionalUnlessRequiredId<T>): Promise<T>;
124
+ static create<T extends Document = Document>(schemaDefinition: SchemaDefinition<T>): Schema<T>;
125
+ }
126
+ //# sourceMappingURL=ambitenSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambitenSchema.d.ts","sourceRoot":"","sources":["../../src/lib-core/ambitenSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Schema = exports.AmbitenSchema = void 0;
4
+ /**
5
+ * The AmbitenSchema class allows you to define a schema for MongoDB documents.
6
+ * It supports:
7
+ * - schema definition
8
+ * - custom validation
9
+ * - indexes
10
+ * - relationships
11
+ * - virtual fields
12
+ * - context-aware middleware
13
+ * - garbage collection metadata
14
+ */
15
+ class AmbitenSchema {
16
+ schemaDefinition;
17
+ indexes = [];
18
+ virtuals = {};
19
+ validators = {};
20
+ relationships = [];
21
+ gcConfig;
22
+ middleware = {
23
+ pre: {},
24
+ post: {},
25
+ };
26
+ /**
27
+ * Creates an instance of AmbitenSchema.
28
+ * @param schemaDefinition - The schema definition for the document.
29
+ */
30
+ constructor(schemaDefinition) {
31
+ this.schemaDefinition = schemaDefinition;
32
+ }
33
+ /**
34
+ * Retrieves the schema definition.
35
+ */
36
+ getSchema() {
37
+ return this.schemaDefinition;
38
+ }
39
+ /**
40
+ * Re-registers the schema definition.
41
+ */
42
+ registerSchema(schemaDefinition) {
43
+ this.schemaDefinition = schemaDefinition;
44
+ console.info('Schema registered:', this.schemaDefinition);
45
+ }
46
+ /**
47
+ * Adds a custom validator for a specific field.
48
+ */
49
+ validator(field, fn) {
50
+ this.validators[field] = fn;
51
+ }
52
+ /**
53
+ * Validates a document synchronously.
54
+ * Throws if an async validator is encountered.
55
+ */
56
+ validate(doc) {
57
+ for (const [field, validate] of Object.entries(this.validators)) {
58
+ const result = validate(doc[field], doc);
59
+ if (result instanceof Promise) {
60
+ throw new Error(`Validator for field "${field}" is async. Use validateAsync() instead.`);
61
+ }
62
+ if (!result) {
63
+ console.log(`[error]: Validation failed for field: ${field}`);
64
+ throw new Error(`Validation failed for field: ${field}`);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Validates a document asynchronously.
70
+ */
71
+ async validateAsync(doc) {
72
+ for (const [field, validate] of Object.entries(this.validators)) {
73
+ const isValid = await validate(doc[field], doc);
74
+ if (!isValid) {
75
+ console.log(`[error]: Validation failed for field: ${field}`);
76
+ throw new Error(`Validation failed for field: ${field}`);
77
+ }
78
+ }
79
+ }
80
+ /**
81
+ * Adds an index to the schema.
82
+ */
83
+ index(fields, options) {
84
+ this.indexes.push({ fields, options });
85
+ }
86
+ /**
87
+ * Applies all defined indexes to a MongoDB collection.
88
+ */
89
+ async applyIndexes(collection) {
90
+ for (const { fields, options } of this.indexes) {
91
+ await collection.createIndex(fields, options);
92
+ }
93
+ }
94
+ /**
95
+ * Adds a relationship to the schema.
96
+ */
97
+ addRelationship(ref, localField) {
98
+ this.relationships.push({ ref, localField });
99
+ }
100
+ /**
101
+ * Retrieves all relationships defined in the schema.
102
+ */
103
+ getRelationships() {
104
+ return this.relationships;
105
+ }
106
+ /**
107
+ * Adds a virtual field to the schema.
108
+ */
109
+ virtual(name, getter) {
110
+ this.virtuals[name] = getter;
111
+ }
112
+ /**
113
+ * Applies all virtual fields to a document.
114
+ */
115
+ applyVirtuals(doc) {
116
+ for (const [key, getter] of Object.entries(this.virtuals)) {
117
+ Object.defineProperty(doc, key, {
118
+ get: () => getter(doc),
119
+ enumerable: true,
120
+ });
121
+ }
122
+ }
123
+ /**
124
+ * Adds a pre-middleware handler for a specific operation.
125
+ */
126
+ pre(operation, fn) {
127
+ if (!this.middleware.pre[operation]) {
128
+ this.middleware.pre[operation] = [];
129
+ }
130
+ this.middleware.pre[operation].push(fn);
131
+ return this;
132
+ }
133
+ /**
134
+ * Adds a post-middleware handler for a specific operation.
135
+ */
136
+ post(operation, fn) {
137
+ if (!this.middleware.post[operation]) {
138
+ this.middleware.post[operation] = [];
139
+ }
140
+ this.middleware.post[operation].push(fn);
141
+ return this;
142
+ }
143
+ /**
144
+ * Returns all pre-middleware for an operation.
145
+ */
146
+ getPreHooks(operation) {
147
+ return this.middleware.pre[operation] || [];
148
+ }
149
+ /**
150
+ * Returns all post-middleware for an operation.
151
+ */
152
+ getPostHooks(operation) {
153
+ return this.middleware.post[operation] || [];
154
+ }
155
+ /**
156
+ * Backward-compatible hook reader.
157
+ * Defaults to pre hooks to avoid breaking older callers that expect getHooks(action).
158
+ */
159
+ getHooks(operation, phase = 'pre') {
160
+ return phase === 'pre'
161
+ ? this.getPreHooks(operation)
162
+ : this.getPostHooks(operation);
163
+ }
164
+ /**
165
+ * Executes pre-middleware for an operation.
166
+ */
167
+ async executePre(operation, ctx) {
168
+ const hooks = this.getPreHooks(operation);
169
+ for (const hook of hooks) {
170
+ await hook(ctx);
171
+ }
172
+ }
173
+ /**
174
+ * Executes post-middleware for an operation.
175
+ */
176
+ async executePost(operation, ctx) {
177
+ const hooks = this.getPostHooks(operation);
178
+ for (const hook of hooks) {
179
+ await hook(ctx);
180
+ }
181
+ }
182
+ /**
183
+ * Executes middleware for a given phase and operation.
184
+ */
185
+ async executeMiddleware(phase, operation, ctx) {
186
+ const hooks = this.getHooks(operation, phase);
187
+ for (const hook of hooks) {
188
+ try {
189
+ await hook(ctx);
190
+ }
191
+ catch (error) {
192
+ console.error(`[error]: Error in ${phase}:${operation} middleware:`, error);
193
+ throw error;
194
+ }
195
+ }
196
+ }
197
+ /**
198
+ * Backward-compatible alias.
199
+ * If older callers use triggerMiddleware(action, data), they should be upgraded
200
+ * to pass explicit phase + operation + context.
201
+ */
202
+ async triggerMiddleware(phase, operation, ctx) {
203
+ await this.executeMiddleware(phase, operation, ctx);
204
+ }
205
+ /**
206
+ * Sets garbage collection configuration.
207
+ */
208
+ setGCConfig(config) {
209
+ this.gcConfig = config;
210
+ return this;
211
+ }
212
+ /**
213
+ * Gets garbage collection configuration.
214
+ */
215
+ getGCConfig() {
216
+ return this.gcConfig;
217
+ }
218
+ }
219
+ exports.AmbitenSchema = AmbitenSchema;
220
+ class Schema extends AmbitenSchema {
221
+ constructor(schemaDefinition) {
222
+ super(schemaDefinition);
223
+ this.registerSchema(schemaDefinition);
224
+ }
225
+ async create(data) {
226
+ await this.validateAsync(data);
227
+ const ctx = {
228
+ operation: 'create',
229
+ collectionName: 'schema-test',
230
+ doc: data,
231
+ };
232
+ await this.executePre('create', ctx);
233
+ const result = data;
234
+ this.applyVirtuals(result);
235
+ const postCtx = {
236
+ ...ctx,
237
+ result,
238
+ doc: result,
239
+ };
240
+ await this.executePost('create', postCtx);
241
+ return result;
242
+ }
243
+ static create(schemaDefinition) {
244
+ return new Schema(schemaDefinition);
245
+ }
246
+ }
247
+ exports.Schema = Schema;
@@ -0,0 +1,38 @@
1
+ import { InitMultiTenancyOptions } from '../../tanancy';
2
+ import type { AmbitenAdapter } from '@ambiten/adapter-types';
3
+ import type { AmbitenConfig } from '../../types';
4
+ import { AmbitenRuntime } from '../../types/ambiten-runtime-type';
5
+ export interface RegisterMultiTenancyOptions {
6
+ adapter?: AmbitenAdapter;
7
+ tenants?: Record<string, string>;
8
+ headerKey?: string;
9
+ initOptions?: InitMultiTenancyOptions;
10
+ }
11
+ export interface AmbitenBootstrapFactoryOptions {
12
+ config?: string | AmbitenConfig;
13
+ adapter?: AmbitenAdapter;
14
+ }
15
+ /**
16
+ * Factory class to create an instance of AmbitenBootstrap.
17
+ * This class encapsulates the logic for initializing the Ambiten application stack,
18
+ * including MongoDB, Multi-Tenancy, Redis, GraphQL logger etc. setup.
19
+ * It can be used to create a fully configured Ambiten instance
20
+ * with optional configuration parameters.
21
+ * @example
22
+ * const Ambiten = await AmbitenBootstrapFactory.create();
23
+ * const db = Ambiten.getMongoClient();
24
+ * await db.connect();
25
+ * const graphql = await Ambiten.getGraphQL();
26
+ * // You can now use the GraphQL instance to generate schema or start a server
27
+ * // or perform other GraphQL related operations
28
+ * graphql.generateSchema();
29
+ * Ambiten.getRedisClient();
30
+ * // or with custom config
31
+ * const Ambiten = await AmbitenBootstrapFactory.create(customConfig);
32
+ * @param {AmbitenConfig} [config] - Optional configuration object for Ambiten.
33
+ * @returns {Promise<AmbitenBootstrap>} - A promise that resolves to an instance of AmbitenBootstrap.
34
+ */
35
+ export declare class AmbitenBootstrapFactory {
36
+ static create(options?: AmbitenBootstrapFactoryOptions): Promise<AmbitenRuntime>;
37
+ }
38
+ //# sourceMappingURL=ambitenBootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambitenBootstrap.d.ts","sourceRoot":"","sources":["../../../src/lib-core/bootstrap/ambitenBootstrap.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAA+C,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAOlE,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IAChC,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAkaD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,uBAAuB;WACrB,MAAM,CACjB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,cAAc,CAAC;CAK3B"}