hive-cycle 0.2.2 → 0.3.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/dist/HiveCycle.d.ts.map +1 -1
- package/dist/HiveCycle.js +27 -6
- package/dist/MemoryQueue.js +5 -1
- package/dist/index.js +19 -3
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/package.json +1 -1
package/dist/HiveCycle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HiveCycle.d.ts","sourceRoot":"","sources":["../src/HiveCycle.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAEhB,IAAI,EACJ,WAAW,EAEZ,MAAM,SAAS,CAAC;AAcjB,qBAAa,SAAS,CACpB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEzD,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,OAAO,CAEb;IACF,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,GAAE,gBAAqB;IAW1C;;OAEG;IACI,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EACrD,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC/B,IAAI;IAIP;;OAEG;IACU,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EACnD,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"HiveCycle.d.ts","sourceRoot":"","sources":["../src/HiveCycle.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAEhB,IAAI,EACJ,WAAW,EAEZ,MAAM,SAAS,CAAC;AAcjB,qBAAa,SAAS,CACpB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEzD,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,OAAO,CAEb;IACF,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,GAAE,gBAAqB;IAW1C;;OAEG;IACI,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EACrD,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC/B,IAAI;IAIP;;OAEG;IACU,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EACnD,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC;IAiBlB;;OAEG;IACI,KAAK,IAAI,IAAI;IAYpB;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,gBAAgB;YAOV,IAAI;YA0BJ,UAAU;IA4DxB,OAAO,CAAC,KAAK;CAGd"}
|
package/dist/HiveCycle.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HiveCycle = void 0;
|
|
4
|
+
const http_1 = require("http");
|
|
5
|
+
const MemoryQueue_1 = require("./MemoryQueue");
|
|
3
6
|
// I will implement a simple ID generator to avoid deps for now if I didn't install uuid.
|
|
4
7
|
// Wait, I haven't installed `uuid`. I should probably implement a simple random ID or install it later.
|
|
5
8
|
// User didn't ask for uuid specifically, so I'll use crypto.randomUUID if available or Math.random shim.
|
|
@@ -9,13 +12,13 @@ function generateId() {
|
|
|
9
12
|
}
|
|
10
13
|
return Math.random().toString(36).substring(2, 15);
|
|
11
14
|
}
|
|
12
|
-
|
|
15
|
+
class HiveCycle {
|
|
13
16
|
constructor(options = {}) {
|
|
14
17
|
this.handlers = new Map();
|
|
15
18
|
this.isRunning = false;
|
|
16
19
|
this.activeCount = 0;
|
|
17
20
|
this.options = {
|
|
18
|
-
queue: options.queue || new MemoryQueue(),
|
|
21
|
+
queue: options.queue || new MemoryQueue_1.MemoryQueue(),
|
|
19
22
|
pollingInterval: options.pollingInterval || 1000,
|
|
20
23
|
maxConcurrency: options.maxConcurrency || 1,
|
|
21
24
|
logger: options.logger || console,
|
|
@@ -40,7 +43,11 @@ export class HiveCycle {
|
|
|
40
43
|
timestamp: Date.now(),
|
|
41
44
|
...options,
|
|
42
45
|
};
|
|
43
|
-
|
|
46
|
+
const instances = options?.instances && options.instances > 0 ? options.instances : 1;
|
|
47
|
+
for (let i = 0; i < instances; i++) {
|
|
48
|
+
// Enqueue multiple instances if specified
|
|
49
|
+
await this.queue.enqueue(task);
|
|
50
|
+
}
|
|
44
51
|
return task.id;
|
|
45
52
|
}
|
|
46
53
|
/**
|
|
@@ -65,7 +72,7 @@ export class HiveCycle {
|
|
|
65
72
|
this.stopHealthServer();
|
|
66
73
|
}
|
|
67
74
|
startHealthServer(port) {
|
|
68
|
-
this.server = createServer((req, res) => {
|
|
75
|
+
this.server = (0, http_1.createServer)((req, res) => {
|
|
69
76
|
if (req.url === "/health" && req.method === "GET") {
|
|
70
77
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
71
78
|
res.end(JSON.stringify({
|
|
@@ -151,6 +158,19 @@ export class HiveCycle {
|
|
|
151
158
|
}
|
|
152
159
|
catch (err) {
|
|
153
160
|
this.options.logger.error(`Task ${task.id} failed:`, err);
|
|
161
|
+
if (task.retries && task.retries > 0) {
|
|
162
|
+
const attemptsLeft = task.retries - 1;
|
|
163
|
+
this.options.logger.log(`Retrying task ${task.id}. Attempts left: ${attemptsLeft}`);
|
|
164
|
+
const retryingTask = { ...task, retries: attemptsLeft };
|
|
165
|
+
try {
|
|
166
|
+
await this.queue.enqueue(retryingTask);
|
|
167
|
+
await this.queue.acknowledge(task.id);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
catch (requeueErr) {
|
|
171
|
+
this.options.logger.error(`Failed to requeue task ${task.id}`, requeueErr);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
154
174
|
// Depending on the queue implementation, reject might be handled differently
|
|
155
175
|
await this.queue.reject(task.id, err);
|
|
156
176
|
}
|
|
@@ -162,3 +182,4 @@ export class HiveCycle {
|
|
|
162
182
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
163
183
|
}
|
|
164
184
|
}
|
|
185
|
+
exports.HiveCycle = HiveCycle;
|
package/dist/MemoryQueue.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryQueue = void 0;
|
|
4
|
+
class MemoryQueue {
|
|
2
5
|
constructor() {
|
|
3
6
|
this.queue = [];
|
|
4
7
|
this.processing = new Map();
|
|
@@ -25,3 +28,4 @@ export class MemoryQueue {
|
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
}
|
|
31
|
+
exports.MemoryQueue = MemoryQueue;
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./HiveCycle"), exports);
|
|
19
|
+
__exportStar(require("./MemoryQueue"), exports);
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAC7C"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAC7C"}
|
package/dist/types.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|