@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.
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/bin/bootstrap.js +26 -0
- package/dist/ambiten-cache/ambitenCache.d.ts +64 -0
- package/dist/ambiten-cache/ambitenCache.d.ts.map +1 -0
- package/dist/ambiten-cache/ambitenCache.js +127 -0
- package/dist/ambiten-cache/index.d.ts +2 -0
- package/dist/ambiten-cache/index.d.ts.map +1 -0
- package/dist/ambiten-cache/index.js +4 -0
- package/dist/browser.d.ts +32 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +37 -0
- package/dist/cli/ambiten-core-cli.d.ts +4 -0
- package/dist/cli/ambiten-core-cli.d.ts.map +1 -0
- package/dist/cli/ambiten-core-cli.js +41 -0
- package/dist/cli/buildInteractiveConfig.d.ts +4 -0
- package/dist/cli/buildInteractiveConfig.d.ts.map +1 -0
- package/dist/cli/buildInteractiveConfig.js +198 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/prompt.d.ts +10 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +48 -0
- package/dist/cli/types.d.ts +11 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/config/ambiten.config.schema.json +278 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/config/loadAmbitenConfig.d.ts +3 -0
- package/dist/config/loadAmbitenConfig.d.ts.map +1 -0
- package/dist/config/loadAmbitenConfig.js +131 -0
- package/dist/context/ambitenContext.d.ts +35 -0
- package/dist/context/ambitenContext.d.ts.map +1 -0
- package/dist/context/ambitenContext.js +147 -0
- package/dist/context/helpers/runManualTransaction.d.ts +3 -0
- package/dist/context/helpers/runManualTransaction.d.ts.map +1 -0
- package/dist/context/helpers/runManualTransaction.js +22 -0
- package/dist/context/helpers/transactionSession.d.ts +9 -0
- package/dist/context/helpers/transactionSession.d.ts.map +1 -0
- package/dist/context/helpers/transactionSession.js +8 -0
- package/dist/context/index.d.ts +4 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +6 -0
- package/dist/debug/debugLog.d.ts +2 -0
- package/dist/debug/debugLog.d.ts.map +1 -0
- package/dist/debug/debugLog.js +23 -0
- package/dist/debug/index.d.ts +2 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +4 -0
- package/dist/gc/ambitenGC.d.ts +49 -0
- package/dist/gc/ambitenGC.d.ts.map +1 -0
- package/dist/gc/ambitenGC.js +138 -0
- package/dist/gc/gcCron.browser.d.ts +2 -0
- package/dist/gc/gcCron.browser.d.ts.map +1 -0
- package/dist/gc/gcCron.browser.js +9 -0
- package/dist/gc/gcCron.node.d.ts +19 -0
- package/dist/gc/gcCron.node.d.ts.map +1 -0
- package/dist/gc/gcCron.node.js +47 -0
- package/dist/gc/gcManager.d.ts +37 -0
- package/dist/gc/gcManager.d.ts.map +1 -0
- package/dist/gc/gcManager.js +62 -0
- package/dist/gc/index.d.ts +5 -0
- package/dist/gc/index.d.ts.map +1 -0
- package/dist/gc/index.js +7 -0
- package/dist/graphql/ambitenGraphQL.d.ts +24 -0
- package/dist/graphql/ambitenGraphQL.d.ts.map +1 -0
- package/dist/graphql/ambitenGraphQL.js +215 -0
- package/dist/graphql/index.d.ts +2 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +4 -0
- package/dist/index-browser.js +25 -0
- package/dist/index-browser.js.map +1 -0
- package/dist/index-cli.js +26 -0
- package/dist/index-cli.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/init-cli/generate.project.d.ts +9 -0
- package/dist/init-cli/generate.project.d.ts.map +1 -0
- package/dist/init-cli/generate.project.js +38 -0
- package/dist/instrumentation/index.d.ts +3 -0
- package/dist/instrumentation/index.d.ts.map +1 -0
- package/dist/instrumentation/index.js +5 -0
- package/dist/instrumentation/measureQuery.browser.d.ts +3 -0
- package/dist/instrumentation/measureQuery.browser.d.ts.map +1 -0
- package/dist/instrumentation/measureQuery.browser.js +6 -0
- package/dist/instrumentation/measureQueryWithErrors.d.ts +11 -0
- package/dist/instrumentation/measureQueryWithErrors.d.ts.map +1 -0
- package/dist/instrumentation/measureQueryWithErrors.js +90 -0
- package/dist/lib-core/ambitenClient.d.ts +115 -0
- package/dist/lib-core/ambitenClient.d.ts.map +1 -0
- package/dist/lib-core/ambitenClient.js +537 -0
- package/dist/lib-core/ambitenModelFactory.d.ts +979 -0
- package/dist/lib-core/ambitenModelFactory.d.ts.map +1 -0
- package/dist/lib-core/ambitenModelFactory.js +3984 -0
- package/dist/lib-core/ambitenSchema.d.ts +126 -0
- package/dist/lib-core/ambitenSchema.d.ts.map +1 -0
- package/dist/lib-core/ambitenSchema.js +247 -0
- package/dist/lib-core/bootstrap/ambitenBootstrap.d.ts +38 -0
- package/dist/lib-core/bootstrap/ambitenBootstrap.d.ts.map +1 -0
- package/dist/lib-core/bootstrap/ambitenBootstrap.js +381 -0
- package/dist/lib-core/bootstrap/index.d.ts +2 -0
- package/dist/lib-core/bootstrap/index.d.ts.map +1 -0
- package/dist/lib-core/bootstrap/index.js +4 -0
- package/dist/lib-core/index.d.ts +5 -0
- package/dist/lib-core/index.d.ts.map +1 -0
- package/dist/lib-core/index.js +7 -0
- package/dist/middleware/authorization/auth.d.ts +22 -0
- package/dist/middleware/authorization/auth.d.ts.map +1 -0
- package/dist/middleware/authorization/auth.js +37 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +6 -0
- package/dist/middleware/rbac/rbacMiddleware.d.ts +103 -0
- package/dist/middleware/rbac/rbacMiddleware.d.ts.map +1 -0
- package/dist/middleware/rbac/rbacMiddleware.js +246 -0
- package/dist/middleware/rbac/rbacTypes.d.ts +4 -0
- package/dist/middleware/rbac/rbacTypes.d.ts.map +1 -0
- package/dist/middleware/rbac/rbacTypes.js +8 -0
- package/dist/plugins/index.d.ts +3 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +5 -0
- package/dist/plugins/softDelete/applySoftDelete.d.ts +5 -0
- package/dist/plugins/softDelete/applySoftDelete.d.ts.map +1 -0
- package/dist/plugins/softDelete/applySoftDelete.js +139 -0
- package/dist/plugins/softDelete/types.d.ts +14 -0
- package/dist/plugins/softDelete/types.d.ts.map +1 -0
- package/dist/plugins/softDelete/types.js +2 -0
- package/dist/redis-manager/index.d.ts +2 -0
- package/dist/redis-manager/index.d.ts.map +1 -0
- package/dist/redis-manager/index.js +4 -0
- package/dist/redis-manager/redisClient.d.ts +32 -0
- package/dist/redis-manager/redisClient.d.ts.map +1 -0
- package/dist/redis-manager/redisClient.js +146 -0
- package/dist/tanancy/MultiTenantManager.d.ts +98 -0
- package/dist/tanancy/MultiTenantManager.d.ts.map +1 -0
- package/dist/tanancy/MultiTenantManager.js +190 -0
- package/dist/tanancy/TenantContext.d.ts +31 -0
- package/dist/tanancy/TenantContext.d.ts.map +1 -0
- package/dist/tanancy/TenantContext.js +59 -0
- package/dist/tanancy/TenantModelResolver.d.ts +10 -0
- package/dist/tanancy/TenantModelResolver.d.ts.map +1 -0
- package/dist/tanancy/TenantModelResolver.js +114 -0
- package/dist/tanancy/index.d.ts +5 -0
- package/dist/tanancy/index.d.ts.map +1 -0
- package/dist/tanancy/index.js +7 -0
- package/dist/tanancy/init/initMultiTenancy.d.ts +29 -0
- package/dist/tanancy/init/initMultiTenancy.d.ts.map +1 -0
- package/dist/tanancy/init/initMultiTenancy.js +62 -0
- package/dist/templates/generateDefaultConfigContent.d.ts +10 -0
- package/dist/templates/generateDefaultConfigContent.d.ts.map +1 -0
- package/dist/templates/generateDefaultConfigContent.js +108 -0
- package/dist/templates/generateGCManagerFile.d.ts +2 -0
- package/dist/templates/generateGCManagerFile.d.ts.map +1 -0
- package/dist/templates/generateGCManagerFile.js +39 -0
- package/dist/templates/generateGCRunnerFile.d.ts +2 -0
- package/dist/templates/generateGCRunnerFile.d.ts.map +1 -0
- package/dist/templates/generateGCRunnerFile.js +25 -0
- package/dist/templates/generateMainEntry.d.ts +3 -0
- package/dist/templates/generateMainEntry.d.ts.map +1 -0
- package/dist/templates/generateMainEntry.js +24 -0
- package/dist/templates/index.d.ts +6 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +8 -0
- package/dist/templates/scaffold/structureGenerator.d.ts +4 -0
- package/dist/templates/scaffold/structureGenerator.d.ts.map +1 -0
- package/dist/templates/scaffold/structureGenerator.js +193 -0
- package/dist/types/GCConfig.d.ts +7 -0
- package/dist/types/GCConfig.d.ts.map +1 -0
- package/dist/types/GCConfig.js +2 -0
- package/dist/types/ambiten-runtime-type.d.ts +24 -0
- package/dist/types/ambiten-runtime-type.d.ts.map +1 -0
- package/dist/types/ambiten-runtime-type.js +2 -0
- package/dist/types/ambiten.client.type.d.ts +136 -0
- package/dist/types/ambiten.client.type.d.ts.map +1 -0
- package/dist/types/ambiten.client.type.js +3 -0
- package/dist/types/ambiten.model.type.d.ts +135 -0
- package/dist/types/ambiten.model.type.d.ts.map +1 -0
- package/dist/types/ambiten.model.type.js +4 -0
- package/dist/types/ambitenConfig.d.ts +103 -0
- package/dist/types/ambitenConfig.d.ts.map +1 -0
- package/dist/types/ambitenConfig.js +3 -0
- package/dist/types/bootstrapClient.type.d.ts +11 -0
- package/dist/types/bootstrapClient.type.d.ts.map +1 -0
- package/dist/types/bootstrapClient.type.js +2 -0
- package/dist/types/db.provider.d.ts +66 -0
- package/dist/types/db.provider.d.ts.map +1 -0
- package/dist/types/db.provider.js +2 -0
- package/dist/types/document.d.ts +7 -0
- package/dist/types/document.d.ts.map +1 -0
- package/dist/types/document.js +2 -0
- package/dist/types/event.type.d.ts +6 -0
- package/dist/types/event.type.d.ts.map +1 -0
- package/dist/types/event.type.js +27 -0
- package/dist/types/graphql.type.d.ts +22 -0
- package/dist/types/graphql.type.d.ts.map +1 -0
- package/dist/types/graphql.type.js +2 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +17 -0
- package/dist/types/logger.types.d.ts +15 -0
- package/dist/types/logger.types.d.ts.map +1 -0
- package/dist/types/logger.types.js +3 -0
- package/dist/types/middleware/types.d.ts +28 -0
- package/dist/types/middleware/types.d.ts.map +1 -0
- package/dist/types/middleware/types.js +2 -0
- package/dist/types/result.utils.types.d.ts +7 -0
- package/dist/types/result.utils.types.d.ts.map +1 -0
- package/dist/types/result.utils.types.js +2 -0
- package/dist/types/schema.type.d.ts +23 -0
- package/dist/types/schema.type.d.ts.map +1 -0
- package/dist/types/schema.type.js +10 -0
- package/dist/types/user.type.d.ts +11 -0
- package/dist/types/user.type.d.ts.map +1 -0
- package/dist/types/user.type.js +2 -0
- package/dist/utils/AuthUtils.d.ts +15 -0
- package/dist/utils/AuthUtils.d.ts.map +1 -0
- package/dist/utils/AuthUtils.js +26 -0
- package/dist/utils/ModelRegistry.d.ts +15 -0
- package/dist/utils/ModelRegistry.d.ts.map +1 -0
- package/dist/utils/ModelRegistry.js +35 -0
- package/dist/utils/banner.d.ts +2 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +20 -0
- package/dist/utils/builders/createModel.d.ts +37 -0
- package/dist/utils/builders/createModel.d.ts.map +1 -0
- package/dist/utils/builders/createModel.js +38 -0
- package/dist/utils/builders/getTenantDb.d.ts +12 -0
- package/dist/utils/builders/getTenantDb.d.ts.map +1 -0
- package/dist/utils/builders/getTenantDb.js +25 -0
- package/dist/utils/builders/index.d.ts +4 -0
- package/dist/utils/builders/index.d.ts.map +1 -0
- package/dist/utils/builders/index.js +6 -0
- package/dist/utils/builders/schema.d.ts +22 -0
- package/dist/utils/builders/schema.d.ts.map +1 -0
- package/dist/utils/builders/schema.js +26 -0
- package/dist/utils/cacheWithRedis.d.ts +27 -0
- package/dist/utils/cacheWithRedis.d.ts.map +1 -0
- package/dist/utils/cacheWithRedis.js +22 -0
- package/dist/utils/castId.d.ts +5 -0
- package/dist/utils/castId.d.ts.map +1 -0
- package/dist/utils/castId.js +52 -0
- package/dist/utils/color-palatte.d.ts +4 -0
- package/dist/utils/color-palatte.d.ts.map +1 -0
- package/dist/utils/color-palatte.js +24 -0
- package/dist/utils/configureAmbitenContext.d.ts +13 -0
- package/dist/utils/configureAmbitenContext.d.ts.map +1 -0
- package/dist/utils/configureAmbitenContext.js +35 -0
- package/dist/utils/detect-package-manager.d.ts +5 -0
- package/dist/utils/detect-package-manager.d.ts.map +1 -0
- package/dist/utils/detect-package-manager.js +59 -0
- package/dist/utils/ensureModelNameSafe.d.ts +12 -0
- package/dist/utils/ensureModelNameSafe.d.ts.map +1 -0
- package/dist/utils/ensureModelNameSafe.js +28 -0
- package/dist/utils/ensureRedis.d.ts +7 -0
- package/dist/utils/ensureRedis.d.ts.map +1 -0
- package/dist/utils/ensureRedis.js +40 -0
- package/dist/utils/error/ambitenError-handler.d.ts +24 -0
- package/dist/utils/error/ambitenError-handler.d.ts.map +1 -0
- package/dist/utils/error/ambitenError-handler.js +39 -0
- package/dist/utils/error/errorTypes.d.ts +27 -0
- package/dist/utils/error/errorTypes.d.ts.map +1 -0
- package/dist/utils/error/errorTypes.js +30 -0
- package/dist/utils/error/index.d.ts +3 -0
- package/dist/utils/error/index.d.ts.map +1 -0
- package/dist/utils/error/index.js +5 -0
- package/dist/utils/eventOptions.d.ts +38 -0
- package/dist/utils/eventOptions.d.ts.map +1 -0
- package/dist/utils/eventOptions.js +130 -0
- package/dist/utils/events.d.ts +5 -0
- package/dist/utils/events.d.ts.map +1 -0
- package/dist/utils/events.js +7 -0
- package/dist/utils/index.d.ts +23 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +25 -0
- package/dist/utils/invalidateTenantCache.d.ts +18 -0
- package/dist/utils/invalidateTenantCache.d.ts.map +1 -0
- package/dist/utils/invalidateTenantCache.js +27 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +27 -0
- package/dist/utils/modelLoader.d.ts +3 -0
- package/dist/utils/modelLoader.d.ts.map +1 -0
- package/dist/utils/modelLoader.js +41 -0
- package/dist/utils/resolveAmbitenOption.d.ts +2 -0
- package/dist/utils/resolveAmbitenOption.d.ts.map +1 -0
- package/dist/utils/resolveAmbitenOption.js +10 -0
- package/dist/utils/resolveRuntimeConfig.d.ts +22 -0
- package/dist/utils/resolveRuntimeConfig.d.ts.map +1 -0
- package/dist/utils/resolveRuntimeConfig.js +33 -0
- package/dist/utils/scaffoldLoger.d.ts +11 -0
- package/dist/utils/scaffoldLoger.d.ts.map +1 -0
- package/dist/utils/scaffoldLoger.js +68 -0
- package/dist/utils/symbols.d.ts +4 -0
- package/dist/utils/symbols.d.ts.map +1 -0
- package/dist/utils/symbols.js +6 -0
- package/dist/utils/time.d.ts +5 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +39 -0
- 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 @@
|
|
|
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"}
|
package/dist/gc/index.js
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|