@chromahq/core 0.1.12 → 0.1.13
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/dist/{IJob-aWBqI3FC.js → IJob-ByOJx8qA.js} +8 -2
- package/dist/IJob-ByOJx8qA.js.map +1 -0
- package/dist/{IJob-Bds0eWrM.js → IJob-CoWGJUZM.js} +8 -1
- package/dist/IJob-CoWGJUZM.js.map +1 -0
- package/dist/boot.cjs.js +17 -21
- package/dist/boot.cjs.js.map +1 -1
- package/dist/boot.es.js +2 -6
- package/dist/boot.es.js.map +1 -1
- package/dist/index.cjs.js +3 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.es.js +3 -2
- package/dist/index.es.js.map +1 -1
- package/package.json +1 -1
- package/dist/IJob-Bds0eWrM.js.map +0 -1
- package/dist/IJob-aWBqI3FC.js.map +0 -1
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { Container } from '@inversifyjs/container';
|
|
2
|
+
|
|
1
3
|
const TOKENS = { Store: Symbol.for("Store") };
|
|
2
4
|
|
|
5
|
+
const container = new Container({
|
|
6
|
+
defaultScope: "Singleton"
|
|
7
|
+
});
|
|
8
|
+
|
|
3
9
|
var JobState = /* @__PURE__ */ ((JobState2) => {
|
|
4
10
|
JobState2["SCHEDULED"] = "scheduled";
|
|
5
11
|
JobState2["RUNNING"] = "running";
|
|
@@ -10,5 +16,5 @@ var JobState = /* @__PURE__ */ ((JobState2) => {
|
|
|
10
16
|
return JobState2;
|
|
11
17
|
})(JobState || {});
|
|
12
18
|
|
|
13
|
-
export { JobState as J, TOKENS as T };
|
|
14
|
-
//# sourceMappingURL=IJob-
|
|
19
|
+
export { JobState as J, TOKENS as T, container as c };
|
|
20
|
+
//# sourceMappingURL=IJob-ByOJx8qA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IJob-ByOJx8qA.js","sources":["../src/decorators/tokens.ts","../src/di/Container.ts","../src/scheduler/core/IJob.ts"],"sourcesContent":["export const TOKENS = { Store: Symbol.for('Store') };\n","import { Container as Di } from '@inversifyjs/container';\n\nexport const METADATA_KEY = {\n PARAM_TYPES: 'design:paramtypes',\n TYPE: 'design:type',\n RETURN_TYPE: 'design:returntype',\n};\n\nexport const container = new Di({\n defaultScope: 'Singleton',\n});\n\nexport const bind = <T>(id: symbol | (new (...a: any[]) => T), cls: new (...a: any[]) => T) =>\n container\n .bind<T>(id as any)\n .to(cls)\n .inSingletonScope();\n\nexport const resolve = <T>(id: symbol | (new (...a: any[]) => T)): T => container.get<T>(id as any);\n\nexport function isInjectable(target: any): boolean {\n return !!Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, target);\n}\n","import { JobOptions } from './JobOptions';\n\nexport interface IJob<T = unknown> {\n readonly data?: T;\n handle(context?: JobContext): Promise<void> | void;\n pause?(): Promise<void> | void;\n resume?(): Promise<void> | void;\n stop?(): Promise<void> | void;\n}\n\nexport enum JobState {\n SCHEDULED = 'scheduled',\n RUNNING = 'running',\n PAUSED = 'paused',\n STOPPED = 'stopped',\n COMPLETED = 'completed',\n FAILED = 'failed',\n}\n\nexport interface JobContext {\n id: string;\n options?: JobOptions;\n state: JobState;\n createdAt: Date;\n updatedAt: Date;\n startedAt?: Date;\n pausedAt?: Date;\n stoppedAt?: Date;\n completedAt?: Date;\n error?: Error;\n retryCount?: number;\n\n /**\n * Pause the job execution.\n * @returns Promise<void> | void\n */\n pause: () => Promise<void> | void;\n resume: () => Promise<void> | void;\n stop: () => Promise<void> | void;\n complete: () => Promise<void> | void;\n fail: (error: Error) => Promise<void> | void;\n retry: () => Promise<void> | void;\n\n isRunning: () => boolean;\n isPaused: () => boolean;\n isStopped: () => boolean;\n isCompleted: () => boolean;\n isFailed: () => boolean;\n isRetrying: () => boolean;\n isScheduled: () => boolean;\n isDelayed: () => boolean;\n isRecurring: () => boolean;\n isCron: () => boolean;\n isTimeout: () => boolean;\n isAlarm: () => boolean;\n}\n"],"names":["Di","JobState"],"mappings":";;AAAO,MAAM,SAAS,EAAE,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;;ACQ1C,MAAM,SAAA,GAAY,IAAIA,SAAA,CAAG;AAAA,EAC9B,YAAA,EAAc;AAChB,CAAC;;ACAM,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,UAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,UAAA,QAAA,CAAA,GAAS,QAAA;AANC,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;;;;"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var container$1 = require('@inversifyjs/container');
|
|
4
|
+
|
|
3
5
|
const TOKENS = { Store: Symbol.for("Store") };
|
|
4
6
|
|
|
7
|
+
const container = new container$1.Container({
|
|
8
|
+
defaultScope: "Singleton"
|
|
9
|
+
});
|
|
10
|
+
|
|
5
11
|
var JobState = /* @__PURE__ */ ((JobState2) => {
|
|
6
12
|
JobState2["SCHEDULED"] = "scheduled";
|
|
7
13
|
JobState2["RUNNING"] = "running";
|
|
@@ -14,4 +20,5 @@ var JobState = /* @__PURE__ */ ((JobState2) => {
|
|
|
14
20
|
|
|
15
21
|
exports.JobState = JobState;
|
|
16
22
|
exports.TOKENS = TOKENS;
|
|
17
|
-
|
|
23
|
+
exports.container = container;
|
|
24
|
+
//# sourceMappingURL=IJob-CoWGJUZM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IJob-CoWGJUZM.js","sources":["../src/decorators/tokens.ts","../src/di/Container.ts","../src/scheduler/core/IJob.ts"],"sourcesContent":["export const TOKENS = { Store: Symbol.for('Store') };\n","import { Container as Di } from '@inversifyjs/container';\n\nexport const METADATA_KEY = {\n PARAM_TYPES: 'design:paramtypes',\n TYPE: 'design:type',\n RETURN_TYPE: 'design:returntype',\n};\n\nexport const container = new Di({\n defaultScope: 'Singleton',\n});\n\nexport const bind = <T>(id: symbol | (new (...a: any[]) => T), cls: new (...a: any[]) => T) =>\n container\n .bind<T>(id as any)\n .to(cls)\n .inSingletonScope();\n\nexport const resolve = <T>(id: symbol | (new (...a: any[]) => T)): T => container.get<T>(id as any);\n\nexport function isInjectable(target: any): boolean {\n return !!Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, target);\n}\n","import { JobOptions } from './JobOptions';\n\nexport interface IJob<T = unknown> {\n readonly data?: T;\n handle(context?: JobContext): Promise<void> | void;\n pause?(): Promise<void> | void;\n resume?(): Promise<void> | void;\n stop?(): Promise<void> | void;\n}\n\nexport enum JobState {\n SCHEDULED = 'scheduled',\n RUNNING = 'running',\n PAUSED = 'paused',\n STOPPED = 'stopped',\n COMPLETED = 'completed',\n FAILED = 'failed',\n}\n\nexport interface JobContext {\n id: string;\n options?: JobOptions;\n state: JobState;\n createdAt: Date;\n updatedAt: Date;\n startedAt?: Date;\n pausedAt?: Date;\n stoppedAt?: Date;\n completedAt?: Date;\n error?: Error;\n retryCount?: number;\n\n /**\n * Pause the job execution.\n * @returns Promise<void> | void\n */\n pause: () => Promise<void> | void;\n resume: () => Promise<void> | void;\n stop: () => Promise<void> | void;\n complete: () => Promise<void> | void;\n fail: (error: Error) => Promise<void> | void;\n retry: () => Promise<void> | void;\n\n isRunning: () => boolean;\n isPaused: () => boolean;\n isStopped: () => boolean;\n isCompleted: () => boolean;\n isFailed: () => boolean;\n isRetrying: () => boolean;\n isScheduled: () => boolean;\n isDelayed: () => boolean;\n isRecurring: () => boolean;\n isCron: () => boolean;\n isTimeout: () => boolean;\n isAlarm: () => boolean;\n}\n"],"names":["Di","JobState"],"mappings":";;;;AAAO,MAAM,SAAS,EAAE,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;;ACQ1C,MAAM,SAAA,GAAY,IAAIA,qBAAA,CAAG;AAAA,EAC9B,YAAA,EAAc;AAChB,CAAC;;ACAM,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,UAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,UAAA,QAAA,CAAA,GAAS,QAAA;AANC,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;;;;;;"}
|
package/dist/boot.cjs.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const container = new container$1.Container({
|
|
7
|
-
defaultScope: "Singleton"
|
|
8
|
-
});
|
|
3
|
+
var IJob = require('./IJob-CoWGJUZM.js');
|
|
4
|
+
require('@inversifyjs/container');
|
|
9
5
|
|
|
10
6
|
class MiddlewareRegistryClass {
|
|
11
7
|
constructor() {
|
|
@@ -1098,7 +1094,7 @@ class Scheduler {
|
|
|
1098
1094
|
try {
|
|
1099
1095
|
this.registry.updateState(id, IJob.JobState.RUNNING);
|
|
1100
1096
|
console.log(`Executing job ${id}`);
|
|
1101
|
-
const jobInstance = container.get(id);
|
|
1097
|
+
const jobInstance = IJob.container.get(id);
|
|
1102
1098
|
console.log(jobInstance);
|
|
1103
1099
|
await jobInstance.handle.bind(jobInstance).call(jobInstance, context);
|
|
1104
1100
|
if (!context.isStopped() && !context.isPaused()) {
|
|
@@ -1179,7 +1175,7 @@ class ApplicationBootstrap {
|
|
|
1179
1175
|
await this.bootMessages();
|
|
1180
1176
|
await this.bootServices();
|
|
1181
1177
|
this.logger.success("\u{1F389} Chroma application initialization complete!");
|
|
1182
|
-
bootstrap$1({ container, keepAlive: keepPortAlive, portName });
|
|
1178
|
+
bootstrap$1({ container: IJob.container, keepAlive: keepPortAlive, portName });
|
|
1183
1179
|
} catch (error) {
|
|
1184
1180
|
this.logger.error("\u{1F4A5} Application bootstrap failed:", error);
|
|
1185
1181
|
throw error;
|
|
@@ -1193,7 +1189,7 @@ class ApplicationBootstrap {
|
|
|
1193
1189
|
console.log("services", this.serviceRegistry.entries());
|
|
1194
1190
|
for (const [serviceName, ServiceClass] of this.serviceRegistry.entries()) {
|
|
1195
1191
|
try {
|
|
1196
|
-
const instance = container.get(ServiceClass);
|
|
1192
|
+
const instance = IJob.container.get(ServiceClass);
|
|
1197
1193
|
if (typeof instance.onBoot === "function") {
|
|
1198
1194
|
await instance.onBoot();
|
|
1199
1195
|
this.logger.success(`Booted service: ${serviceName}`);
|
|
@@ -1253,9 +1249,9 @@ class ApplicationBootstrap {
|
|
|
1253
1249
|
for (const store of this.storeDefinitions) {
|
|
1254
1250
|
const { classes, store: storeInstance } = await chromaGlobal.initStores(store);
|
|
1255
1251
|
const diKey = `CentralStore:${store.name}`;
|
|
1256
|
-
container.bind(diKey).toConstantValue(storeInstance);
|
|
1252
|
+
IJob.container.bind(diKey).toConstantValue(storeInstance);
|
|
1257
1253
|
if (isFirstStore) {
|
|
1258
|
-
container.bind(IJob.TOKENS.Store).toConstantValue(storeInstance);
|
|
1254
|
+
IJob.container.bind(IJob.TOKENS.Store).toConstantValue(storeInstance);
|
|
1259
1255
|
isFirstStore = false;
|
|
1260
1256
|
}
|
|
1261
1257
|
this.registerMessageClass(classes.GetStoreStateMessage, `store:${store.name}:getState`);
|
|
@@ -1406,7 +1402,7 @@ class ApplicationBootstrap {
|
|
|
1406
1402
|
this.logger.error(`\u274C ${errorMessage}`);
|
|
1407
1403
|
return { success: false, message: errorMessage };
|
|
1408
1404
|
}
|
|
1409
|
-
container.bind(ServiceClass).toSelf().inSingletonScope();
|
|
1405
|
+
IJob.container.bind(ServiceClass).toSelf().inSingletonScope();
|
|
1410
1406
|
serviceMetadata.registered = true;
|
|
1411
1407
|
this.logger.success(`\u2705 Registered service: ${ServiceClass.name}`);
|
|
1412
1408
|
return { success: true, message: `Successfully registered ${ServiceClass.name}` };
|
|
@@ -1431,7 +1427,7 @@ class ApplicationBootstrap {
|
|
|
1431
1427
|
try {
|
|
1432
1428
|
const messageMetadata = Reflect.getMetadata("name", MessageClass);
|
|
1433
1429
|
const messageName = messageMetadata || MessageClass.name;
|
|
1434
|
-
container.bind(messageName).to(MessageClass).inSingletonScope();
|
|
1430
|
+
IJob.container.bind(messageName).to(MessageClass).inSingletonScope();
|
|
1435
1431
|
this.logger.success(`\u2705 Registered message: ${messageName}`);
|
|
1436
1432
|
} catch (error) {
|
|
1437
1433
|
this.logger.error(`\u274C Failed to register message ${MessageClass.name}:`, error);
|
|
@@ -1439,7 +1435,7 @@ class ApplicationBootstrap {
|
|
|
1439
1435
|
}
|
|
1440
1436
|
}
|
|
1441
1437
|
async registerMessageClass(MessageClass, name) {
|
|
1442
|
-
container.bind(name).to(MessageClass).inSingletonScope();
|
|
1438
|
+
IJob.container.bind(name).to(MessageClass).inSingletonScope();
|
|
1443
1439
|
this.logger.success(`\u2705 Registered message: ${name}`);
|
|
1444
1440
|
}
|
|
1445
1441
|
/**
|
|
@@ -1457,7 +1453,7 @@ class ApplicationBootstrap {
|
|
|
1457
1453
|
try {
|
|
1458
1454
|
const messageMetadata = Reflect.getMetadata("name", MessageClass);
|
|
1459
1455
|
const messageName = messageMetadata || MessageClass.name;
|
|
1460
|
-
const messageInstance = container.get(messageName);
|
|
1456
|
+
const messageInstance = IJob.container.get(messageName);
|
|
1461
1457
|
await messageInstance.boot();
|
|
1462
1458
|
this.logger.success(`\u2705 Booted message: ${messageName}`);
|
|
1463
1459
|
} catch (error) {
|
|
@@ -1474,21 +1470,21 @@ class ApplicationBootstrap {
|
|
|
1474
1470
|
"/src/app/jobs/**/*.job.{ts,js}",
|
|
1475
1471
|
{ eager: true }
|
|
1476
1472
|
);
|
|
1477
|
-
if (!container.isBound(Scheduler)) {
|
|
1478
|
-
container.bind(Scheduler).toSelf().inSingletonScope();
|
|
1473
|
+
if (!IJob.container.isBound(Scheduler)) {
|
|
1474
|
+
IJob.container.bind(Scheduler).toSelf().inSingletonScope();
|
|
1479
1475
|
}
|
|
1480
|
-
this.scheduler = container.get(Scheduler);
|
|
1476
|
+
this.scheduler = IJob.container.get(Scheduler);
|
|
1481
1477
|
for (const module of Object.values(jobModules)) {
|
|
1482
1478
|
const JobClass = module?.default;
|
|
1483
1479
|
if (!JobClass) continue;
|
|
1484
1480
|
try {
|
|
1485
1481
|
const jobMetadata = Reflect.getMetadata("name", JobClass);
|
|
1486
1482
|
const jobName = jobMetadata || JobClass.name;
|
|
1487
|
-
container.bind(JobClass).toSelf().inSingletonScope();
|
|
1483
|
+
IJob.container.bind(JobClass).toSelf().inSingletonScope();
|
|
1488
1484
|
const id = `${jobName.toLowerCase()}:${JobClass.name.toLowerCase()} ${Math.random().toString(36).substring(2, 15)}`;
|
|
1489
|
-
container.bind(id).to(JobClass).inSingletonScope();
|
|
1485
|
+
IJob.container.bind(id).to(JobClass).inSingletonScope();
|
|
1490
1486
|
const options = Reflect.getMetadata("job:options", JobClass) || {};
|
|
1491
|
-
const instance = container.get(JobClass);
|
|
1487
|
+
const instance = IJob.container.get(JobClass);
|
|
1492
1488
|
JobRegistry.instance.register(id, instance, options);
|
|
1493
1489
|
this.scheduler.schedule(id, options);
|
|
1494
1490
|
this.logger.success(`\u2705 Registered job: ${jobName}`);
|