@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 @@
1
+ {"version":3,"file":"gcCron.node.d.ts","sourceRoot":"","sources":["../../src/gc/gcCron.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,MAAM,GAAG,+BAA6C,sBAqDhE"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scheduleGarbageCollector = scheduleGarbageCollector;
4
+ const tslib_1 = require("tslib");
5
+ const cron = tslib_1.__importStar(require("node-cron"));
6
+ const gcManager_1 = require("./gcManager");
7
+ const ModelRegistry_1 = require("../utils/ModelRegistry");
8
+ const utils_1 = require("../utils");
9
+ /**
10
+ * Schedules registry-driven garbage collection.
11
+ *
12
+ * The cron task uses registered model instances and delegates cleanup to
13
+ * `model.runGC()` so Ambiten's runtime context, middleware, schema hooks,
14
+ * instrumentation, cache invalidation, and events remain centralized.
15
+ *
16
+ * @param options - Cron expression or scheduler options.
17
+ * @returns The scheduled cron task.
18
+ */
19
+ function scheduleGarbageCollector(options = '0 * * * *') {
20
+ const cronExpr = typeof options === 'string'
21
+ ? options
22
+ : options.cronExpr ?? '0 * * * *';
23
+ const ctx = typeof options === 'string'
24
+ ? undefined
25
+ : options.ctx;
26
+ const continueOnError = typeof options === 'string'
27
+ ? true
28
+ : options.continueOnError ?? true;
29
+ return cron.schedule(cronExpr, async () => {
30
+ try {
31
+ const models = ModelRegistry_1.AmbitenModelRegistry.getAllModels();
32
+ if (models.length === 0) {
33
+ console.warn((0, utils_1.colorize)('[GC] Skipping GC: no registered models found.', 'yellow'));
34
+ return;
35
+ }
36
+ console.log((0, utils_1.colorize)(`[GC] Running garbage collector at ${new Date().toISOString()}`, 'blue'));
37
+ const result = await (0, gcManager_1.runGarbageCollectorOnAllModels)({
38
+ ctx,
39
+ continueOnError
40
+ });
41
+ console.log((0, utils_1.colorize)(`[GC] Completed. scanned=${result.scanned}, succeeded=${result.succeeded}, failed=${result.failed}`, result.failed > 0 ? 'yellow' : 'blue'));
42
+ }
43
+ catch (error) {
44
+ console.error((0, utils_1.colorize)('[GC] Error running garbage collector', 'red'), error);
45
+ }
46
+ });
47
+ }
@@ -0,0 +1,37 @@
1
+ import type { ModelContext } from '../types';
2
+ export interface GarbageCollectorRunOptions {
3
+ ctx?: ModelContext;
4
+ continueOnError?: boolean;
5
+ }
6
+ export interface GarbageCollectorModelResult {
7
+ collectionName?: string;
8
+ success: boolean;
9
+ error?: unknown;
10
+ }
11
+ export interface GarbageCollectorRunResult {
12
+ scanned: number;
13
+ succeeded: number;
14
+ failed: number;
15
+ models: GarbageCollectorModelResult[];
16
+ }
17
+ /**
18
+ * Runs garbage collection on all registered Ambiten model instances.
19
+ *
20
+ * This delegates cleanup to each model's `runGC()` method so the operation
21
+ * remains context-aware and preserves middleware, schema hooks, query
22
+ * instrumentation, cache invalidation, and event publishing.
23
+ *
24
+ * @param options - Optional garbage collection execution options.
25
+ * @returns Summary of the garbage collection run.
26
+ */
27
+ export declare function runGarbageCollectorOnAllModels(options?: GarbageCollectorRunOptions): Promise<GarbageCollectorRunResult>;
28
+ /**
29
+ * Runs garbage collection on a single Ambiten model instance.
30
+ *
31
+ * @param model - Registered Ambiten model instance.
32
+ * @param ctx - Optional model execution context.
33
+ */
34
+ export declare function runGarbageCollector(model: {
35
+ runGC(ctx?: ModelContext): Promise<void>;
36
+ }, ctx?: ModelContext): Promise<void>;
37
+ //# sourceMappingURL=gcManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcManager.d.ts","sourceRoot":"","sources":["../../src/gc/gcManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,2BAA2B,EAAE,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CAiDpC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE;IAAE,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EACnD,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runGarbageCollectorOnAllModels = runGarbageCollectorOnAllModels;
4
+ exports.runGarbageCollector = runGarbageCollector;
5
+ const ModelRegistry_1 = require("../utils/ModelRegistry");
6
+ const utils_1 = require("../utils");
7
+ /**
8
+ * Runs garbage collection on all registered Ambiten model instances.
9
+ *
10
+ * This delegates cleanup to each model's `runGC()` method so the operation
11
+ * remains context-aware and preserves middleware, schema hooks, query
12
+ * instrumentation, cache invalidation, and event publishing.
13
+ *
14
+ * @param options - Optional garbage collection execution options.
15
+ * @returns Summary of the garbage collection run.
16
+ */
17
+ async function runGarbageCollectorOnAllModels(options = {}) {
18
+ const models = ModelRegistry_1.AmbitenModelRegistry.getAllModels();
19
+ const result = {
20
+ scanned: models.length,
21
+ succeeded: 0,
22
+ failed: 0,
23
+ models: []
24
+ };
25
+ for (const model of models) {
26
+ const modelContext = model.getContext?.();
27
+ const collectionName = modelContext?.ctx?.collectionName;
28
+ try {
29
+ if (typeof model.runGC !== 'function') {
30
+ throw new Error('Registered model does not implement runGC().');
31
+ }
32
+ await model.runGC(options.ctx);
33
+ result.succeeded += 1;
34
+ result.models.push({
35
+ collectionName,
36
+ success: true
37
+ });
38
+ }
39
+ catch (error) {
40
+ result.failed += 1;
41
+ result.models.push({
42
+ collectionName,
43
+ success: false,
44
+ error
45
+ });
46
+ console.error((0, utils_1.colorize)(`[GC] Failed on collection "${collectionName ?? 'unknown'}"`, 'red'), error);
47
+ if (!options.continueOnError) {
48
+ throw error;
49
+ }
50
+ }
51
+ }
52
+ return result;
53
+ }
54
+ /**
55
+ * Runs garbage collection on a single Ambiten model instance.
56
+ *
57
+ * @param model - Registered Ambiten model instance.
58
+ * @param ctx - Optional model execution context.
59
+ */
60
+ async function runGarbageCollector(model, ctx) {
61
+ await model.runGC(ctx);
62
+ }
@@ -0,0 +1,5 @@
1
+ export * from './ambitenGC';
2
+ export * from './gcCron.node';
3
+ export * from './gcManager';
4
+ export * from './gcCron.browser';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gc/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./ambitenGC"), exports);
5
+ tslib_1.__exportStar(require("./gcCron.node"), exports);
6
+ tslib_1.__exportStar(require("./gcManager"), exports);
7
+ tslib_1.__exportStar(require("./gcCron.browser"), exports);
@@ -0,0 +1,24 @@
1
+ import 'dotenv/config';
2
+ import type { GraphQLSchema } from 'graphql';
3
+ import type { AmbitenGraphQLOptions } from '../types';
4
+ export declare class AmbitenGraphQL {
5
+ private readonly options;
6
+ private typeDefs;
7
+ private resolvers;
8
+ private readonly useRedis;
9
+ private readonly provider;
10
+ private subscriber;
11
+ private publisher;
12
+ constructor(options: AmbitenGraphQLOptions);
13
+ customTypeDefs(schema: string | string[]): this;
14
+ customResolvers(resolver: Record<string, any>): this;
15
+ private toModelContext;
16
+ private getCollection;
17
+ private ensureRedis;
18
+ private publishEvent;
19
+ private defaultTypeDefs;
20
+ private defaultResolvers;
21
+ subscriptions(): boolean;
22
+ generateSchema(): Promise<GraphQLSchema>;
23
+ }
24
+ //# sourceMappingURL=ambitenGraphQL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambitenGraphQL.d.ts","sourceRoot":"","sources":["../../src/graphql/ambitenGraphQL.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,OAAO,KAAK,EAIV,qBAAqB,EAEtB,MAAM,UAAU,CAAC;AAGlB,qBAAa,cAAc;IAQb,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAa;gBAED,OAAO,EAAE,qBAAqB;IAO3D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS/C,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKpD,OAAO,CAAC,cAAc;YAYR,aAAa;YAQb,WAAW;YA6BX,YAAY;IAkB1B,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,gBAAgB;IAiIxB,aAAa,IAAI,OAAO;IAIlB,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;CAQ/C"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AmbitenGraphQL = void 0;
4
+ require("dotenv/config");
5
+ const schema_1 = require("@graphql-tools/schema");
6
+ const graphql_tag_1 = require("graphql-tag");
7
+ const mongodb_1 = require("mongodb");
8
+ const redis_manager_1 = require("../redis-manager");
9
+ const utils_1 = require("../utils");
10
+ class AmbitenGraphQL {
11
+ options;
12
+ typeDefs = [];
13
+ resolvers = [];
14
+ useRedis;
15
+ provider;
16
+ subscriber = null;
17
+ publisher = null;
18
+ constructor(options) {
19
+ this.options = options;
20
+ this.useRedis = options.useRedis !== false;
21
+ this.typeDefs = options.customTypeDefs ?? [];
22
+ this.resolvers = options.customResolvers ?? [];
23
+ this.provider = options.provider;
24
+ }
25
+ customTypeDefs(schema) {
26
+ if (Array.isArray(schema)) {
27
+ this.typeDefs.push(...schema);
28
+ }
29
+ else {
30
+ this.typeDefs.push(schema);
31
+ }
32
+ return this;
33
+ }
34
+ customResolvers(resolver) {
35
+ this.resolvers.push(resolver);
36
+ return this;
37
+ }
38
+ toModelContext(context, collectionName) {
39
+ return {
40
+ tenantId: context.tenantId,
41
+ dbName: context.dbName,
42
+ collectionName: collectionName ?? context.collectionName,
43
+ session: context.session
44
+ };
45
+ }
46
+ async getCollection(context, collectionName) {
47
+ const ctx = this.toModelContext(context, collectionName);
48
+ return context.provider.collection(collectionName, ctx);
49
+ }
50
+ async ensureRedis() {
51
+ if (!this.useRedis) {
52
+ return;
53
+ }
54
+ const client = await redis_manager_1.redis.get();
55
+ if (!client) {
56
+ return;
57
+ }
58
+ if (!client.isOpen && typeof client.connect === 'function') {
59
+ await client.connect();
60
+ }
61
+ if (!this.publisher) {
62
+ this.publisher = typeof client.duplicate === 'function' ? client.duplicate() : client;
63
+ if (this.publisher?.connect && !this.publisher.isOpen) {
64
+ await this.publisher.connect();
65
+ }
66
+ }
67
+ if (!this.subscriber) {
68
+ this.subscriber = typeof client.duplicate === 'function' ? client.duplicate() : client;
69
+ if (this.subscriber?.connect && !this.subscriber.isOpen) {
70
+ await this.subscriber.connect();
71
+ }
72
+ }
73
+ }
74
+ async publishEvent(channel, payload) {
75
+ if (!this.useRedis) {
76
+ return;
77
+ }
78
+ await this.ensureRedis();
79
+ const client = await redis_manager_1.redis.get();
80
+ if (this.publisher?.publish) {
81
+ await this.publisher.publish(channel, JSON.stringify(payload));
82
+ return;
83
+ }
84
+ if (client?.publish) {
85
+ await client.publish(channel, JSON.stringify(payload));
86
+ }
87
+ }
88
+ defaultTypeDefs() {
89
+ return (0, graphql_tag_1.gql) `
90
+ scalar JSON
91
+
92
+ type Document {
93
+ _id: ID!
94
+ }
95
+
96
+ type Query {
97
+ findOne(collection: String!, id: ID!): JSON
98
+ findAll(collection: String!): [JSON!]!
99
+ }
100
+
101
+ type Mutation {
102
+ insertOne(collection: String!, data: JSON!): JSON
103
+ updateOne(collection: String!, id: ID!, data: JSON!): JSON
104
+ deleteOne(collection: String!, id: ID!): Boolean
105
+ }
106
+
107
+ type Subscription {
108
+ documentInserted(collection: String!): JSON
109
+ documentUpdated(collection: String!): JSON
110
+ documentDeleted(collection: String!): JSON
111
+ }
112
+ `;
113
+ }
114
+ defaultResolvers() {
115
+ return {
116
+ Query: {
117
+ findOne: async (_, { collection, id }, context) => {
118
+ const col = await this.getCollection(context, collection);
119
+ return col.findOne({ _id: new mongodb_1.ObjectId(id) });
120
+ },
121
+ findAll: async (_, { collection }, context) => {
122
+ const col = await this.getCollection(context, collection);
123
+ return col.find({}).toArray();
124
+ }
125
+ },
126
+ Mutation: {
127
+ insertOne: async (_, { collection, data }, context) => {
128
+ const col = await this.getCollection(context, collection);
129
+ const result = await col.insertOne(data);
130
+ const newDoc = await col.findOne({ _id: result.insertedId });
131
+ await this.publishEvent(`${utils_1.DB_CHANGE_EVENT}`, {
132
+ documentInserted: {
133
+ action: 'insertOne',
134
+ collectionName: collection,
135
+ doc: newDoc,
136
+ tenantId: context.tenantId
137
+ }
138
+ });
139
+ return newDoc;
140
+ },
141
+ updateOne: async (_, { collection, id, data }, context) => {
142
+ const col = await this.getCollection(context, collection);
143
+ await col.updateOne({ _id: new mongodb_1.ObjectId(id) }, { $set: data });
144
+ const updatedDoc = await col.findOne({ _id: new mongodb_1.ObjectId(id) });
145
+ await this.publishEvent(`${utils_1.DB_CHANGE_EVENT}`, {
146
+ documentUpdated: {
147
+ action: 'updateOne',
148
+ collectionName: collection,
149
+ doc: updatedDoc,
150
+ tenantId: context.tenantId
151
+ }
152
+ });
153
+ return updatedDoc;
154
+ },
155
+ deleteOne: async (_, { collection, id }, context) => {
156
+ const col = await this.getCollection(context, collection);
157
+ const result = await col.deleteOne({ _id: new mongodb_1.ObjectId(id) });
158
+ if (result.deletedCount === 1) {
159
+ await this.publishEvent(`${utils_1.DB_CHANGE_EVENT}`, {
160
+ documentDeleted: {
161
+ action: 'deleteOne',
162
+ collectionName: collection,
163
+ id,
164
+ tenantId: context.tenantId
165
+ }
166
+ });
167
+ return true;
168
+ }
169
+ return false;
170
+ }
171
+ },
172
+ Subscription: {
173
+ documentInserted: {
174
+ subscribe: async () => {
175
+ if (!this.useRedis) {
176
+ return null;
177
+ }
178
+ await this.ensureRedis();
179
+ return this.subscriber;
180
+ }
181
+ },
182
+ documentUpdated: {
183
+ subscribe: async () => {
184
+ if (!this.useRedis) {
185
+ return null;
186
+ }
187
+ await this.ensureRedis();
188
+ return this.subscriber;
189
+ }
190
+ },
191
+ documentDeleted: {
192
+ subscribe: async () => {
193
+ if (!this.useRedis) {
194
+ return undefined;
195
+ }
196
+ await this.ensureRedis();
197
+ return this.subscriber;
198
+ }
199
+ }
200
+ }
201
+ };
202
+ }
203
+ subscriptions() {
204
+ return this.useRedis;
205
+ }
206
+ async generateSchema() {
207
+ await this.ensureRedis();
208
+ return (0, schema_1.makeExecutableSchema)({
209
+ typeDefs: [this.defaultTypeDefs(), ...this.typeDefs],
210
+ resolvers: [this.defaultResolvers(), ...this.resolvers]
211
+ });
212
+ }
213
+ }
214
+ exports.AmbitenGraphQL = AmbitenGraphQL;
215
+ ;
@@ -0,0 +1,2 @@
1
+ export * from './ambitenGraphQL';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./ambitenGraphQL"), exports);