@balena/pinejs 23.2.8-build-db-layer-maps-b55587f950e0d11ce1bf4d10fbb9b6aa3a032244-1 → 23.2.9-build-renovate-major-24-node-36463d131436a7d9e05445d3c4876f968a036720-1

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.
@@ -19,7 +19,7 @@ export interface TaskHandler<T = AnyObject> {
19
19
  }
20
20
  export declare class Worker {
21
21
  private readonly client;
22
- handlers: Record<string, TaskHandler>;
22
+ handlers: Map<string, TaskHandler<AnyObject>>;
23
23
  private readonly concurrency;
24
24
  private readonly interval;
25
25
  private running;
@@ -17,7 +17,7 @@ const selectColumns = Object.entries({
17
17
  .join(', ');
18
18
  export class Worker {
19
19
  client;
20
- handlers = {};
20
+ handlers = new Map();
21
21
  concurrency;
22
22
  interval;
23
23
  running = false;
@@ -28,12 +28,12 @@ export class Worker {
28
28
  this.interval = tasksEnv.queueIntervalMS;
29
29
  }
30
30
  canExecute() {
31
- return (this.executing < this.concurrency && Object.keys(this.handlers).length > 0);
31
+ return this.executing < this.concurrency && this.handlers.size > 0;
32
32
  }
33
33
  async execute(task, tx) {
34
34
  this.executing++;
35
35
  try {
36
- const handler = this.handlers[task.is_executed_by__handler];
36
+ const handler = this.handlers.get(task.is_executed_by__handler);
37
37
  const startedOnTime = new Date();
38
38
  if (handler == null) {
39
39
  await this.update(tx, task, startedOnTime, 'failed', 'Matching task handler not found, this should never happen!');
@@ -122,8 +122,7 @@ export class Worker {
122
122
  if (!this.canExecute()) {
123
123
  return;
124
124
  }
125
- const handlerNames = Object.keys(this.handlers);
126
- if (handlerNames.length === 0) {
125
+ if (this.handlers.size === 0) {
127
126
  return;
128
127
  }
129
128
  await sbvrUtils.db.transaction(async (tx) => {
@@ -140,7 +139,7 @@ export class Worker {
140
139
  ORDER BY
141
140
  t."is scheduled to execute on-time" ASC,
142
141
  t."id" ASC
143
- LIMIT 1 FOR UPDATE SKIP LOCKED`, [handlerNames, Math.ceil(this.interval / 1000)]);
142
+ LIMIT 1 FOR UPDATE SKIP LOCKED`, [Array.from(this.handlers.keys()), Math.ceil(this.interval / 1000)]);
144
143
  if (result.rows.length > 0) {
145
144
  await this.execute(result.rows[0], tx);
146
145
  executed = true;
@@ -168,7 +167,6 @@ export class Worker {
168
167
  if (sbvrUtils.db.engine !== 'postgres') {
169
168
  throw new Error('Database does not support tasks, giving up on starting worker');
170
169
  }
171
- const handlerNames = Object.keys(this.handlers);
172
170
  const tasksWithUnknownHandlers = await this.client.get({
173
171
  resource: 'task',
174
172
  passthrough: {
@@ -177,9 +175,11 @@ export class Worker {
177
175
  options: {
178
176
  $filter: {
179
177
  status: 'queued',
180
- ...(handlerNames.length > 0 && {
178
+ ...(this.handlers.size > 0 && {
181
179
  $not: {
182
- is_executed_by__handler: { $in: handlerNames },
180
+ is_executed_by__handler: {
181
+ $in: Array.from(this.handlers.keys()),
182
+ },
183
183
  },
184
184
  }),
185
185
  },
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tasks/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tasks/worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAiClC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;IACpC,EAAE,EAAE,IAAI;IACR,wBAAwB,EAAE,yBAAyB;IACnD,gCAAgC,EAAE,iCAAiC;IACnE,mCAAmC,EAAE,oCAAoC;IACzE,eAAe,EAAE,eAAe;IAChC,eAAe,EAAE,eAAe;IAChC,qBAAqB,EAAE,sBAAsB;CACA,CAAC;KAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC;KACjD,IAAI,CAAC,IAAI,CAAC,CAAC;AAKb,MAAM,OAAO,MAAM;IAOW;IANtB,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChC,WAAW,CAAS;IACpB,QAAQ,CAAS;IAC1B,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAG,CAAC,CAAC;IAEtB,YAA6B,MAAgC;QAAhC,WAAM,GAAN,MAAM,CAA0B;QAC5D,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC;IAC1C,CAAC;IAGO,UAAU;QACjB,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAiB,EAAE,EAAS;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC;YAEJ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAChE,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;YAGjC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,MAAM,CAChB,EAAE,EACF,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,4DAA4D,CAC5D,CAAC;gBACF,OAAO;YACR,CAAC;YAKD,IACC,OAAO,CAAC,QAAQ,IAAI,IAAI;gBACxB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,EACtD,CAAC;gBACF,MAAM,IAAI,CAAC,MAAM,CAChB,EAAE,EACF,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,0BAA0B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CACnE,CAAC;gBACF,OAAO;YACR,CAAC;YAGD,IAAI,MAAM,GAA2B,QAAQ,CAAC;YAC9C,IAAI,KAAyB,CAAC;YAC9B,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC;oBAChC,GAAG,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC;oBACzB,MAAM,EAAE,IAAI,CAAC,+BAA+B,IAAI,EAAE;iBAClD,CAAC,CAAC;gBACH,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBACxB,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACV,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAEd,OAAO,CAAC,KAAK,CACZ,0BAA0B,IAAI,CAAC,EAAE,iBAAiB,IAAI,CAAC,uBAAuB,GAAG,EACjF,GAAG,CACH,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,SAAS,EAAE,CAAC;QAClB,CAAC;IACF,CAAC;IAGO,KAAK,CAAC,MAAM,CACnB,EAAS,EACT,IAAiB,EACjB,aAAmB,EACnB,MAA8B,EAC9B,YAAqB;QAErB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAC5C,MAAM,IAAI,GAA2B;YACpC,gBAAgB,EAAE,aAAa;YAC/B,cAAc,EAAE,IAAI,IAAI,EAAE;YAC1B,MAAM;YACN,aAAa,EAAE,YAAY;YAC3B,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;SAC5D,CAAC;QAIF,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YAGvB,IAAI,CAAC,gCAAgC;gBACpC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;QAGD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACvB,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE;gBACZ,EAAE;gBACF,GAAG,EAAE,WAAW,CAAC,IAAI;aACrB;YACD,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI;SACJ,CAAC,CAAC;QAIH,IACC,IAAI,CAAC,MAAM,IAAI,IAAI;YACnB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,kCAAkC,IAAI,IAAI,EAC9C,CAAC;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACtB,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE;oBACZ,EAAE;oBACF,GAAG,EAAE,WAAW,CAAC,IAAI;iBACrB;gBACD,OAAO,EAAE;oBACR,cAAc,EAAE,KAAK;iBACrB;gBACD,IAAI,EAAE;oBACL,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;oBAC/C,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;oBACrD,+BAA+B,EAAE,IAAI,CAAC,+BAA+B;oBACrE,kCAAkC,EACjC,IAAI,CAAC,kCAAkC;iBACxC;aACD,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAGO,kBAAkB,CAAC,OAAe;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IACrC,CAAC;IAIO,IAAI;QACX,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACJ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;oBACxB,OAAO;gBACR,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAE9B,OAAO;gBACR,CAAC;gBACD,MAAM,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;oBAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CACjC,UAAU,aAAa;;;;;;;;;;;;;qCAaQ,EAC/B,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CACnE,CAAC;oBAGF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC;wBACtD,QAAQ,GAAG,IAAI,CAAC;oBACjB,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;gBAGhD,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACf,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACb,CAAC;YACF,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;IACN,CAAC;IAEM,IAAI;QACV,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;IAGM,KAAK,CAAC,KAAK;QAEjB,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACd,+DAA+D,CAC/D,CAAC;QACH,CAAC;QAGD,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YACtD,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE;gBACZ,GAAG,EAAE,WAAW,CAAC,IAAI;aACrB;YACD,OAAO,EAAE;gBACR,OAAO,EAAE;oBACR,MAAM,EAAE,QAAQ;oBAChB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI;wBAC7B,IAAI,EAAE;4BACL,uBAAuB,EAAE;gCACxB,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;6BACrC;yBACD;qBACD,CAAC;iBACF;aACD;SACD,CAAC,CAAC;QACH,IAAI,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACd,sCAAsC,wBAAwB;iBAC5D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,uBAAuB,GAAG,CAAC;iBAC5D,IAAI,CAAC,IAAI,CAAC,EAAE,CACd,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;IACF,CAAC;CACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@balena/pinejs",
3
- "version": "23.2.8-build-db-layer-maps-b55587f950e0d11ce1bf4d10fbb9b6aa3a032244-1",
3
+ "version": "23.2.9-build-renovate-major-24-node-36463d131436a7d9e05445d3c4876f968a036720-1",
4
4
  "main": "out/server-glue/module.js",
5
5
  "type": "module",
6
6
  "repository": "git@github.com:balena-io/pinejs.git",
@@ -45,7 +45,7 @@
45
45
  "@types/memoizee": "^0.4.12",
46
46
  "@types/method-override": "^3.0.0",
47
47
  "@types/mysql": "^2.15.27",
48
- "@types/node": "^20.19.21",
48
+ "@types/node": "^24.0.0",
49
49
  "@types/passport": "^1.0.17",
50
50
  "@types/passport-local": "^1.0.38",
51
51
  "@types/passport-strategy": "^0.2.38",
@@ -149,6 +149,6 @@
149
149
  "recursive": true
150
150
  },
151
151
  "versionist": {
152
- "publishedAt": "2025-11-05T14:53:30.452Z"
152
+ "publishedAt": "2025-11-05T15:06:12.051Z"
153
153
  }
154
154
  }
@@ -2,7 +2,7 @@
2
2
  import type Mysql from 'mysql';
3
3
  import type Pg from 'pg';
4
4
  import type PgConnectionString from 'pg-connection-string';
5
- import type { Resolvable } from '../sbvr-api/common-types.js';
5
+ import type { Dictionary, Resolvable } from '../sbvr-api/common-types.js';
6
6
 
7
7
  import { Engines } from '@balena/abstract-sql-compiler';
8
8
  import { EventEmitter } from 'eventemitter3';
@@ -136,7 +136,7 @@ const validateTransactionLockParameter = (
136
136
  }
137
137
  };
138
138
 
139
- const transactionLockNamespaceMap = new Map<string, number>();
139
+ const transactionLockNamespaceMap: Dictionary<number> = {};
140
140
 
141
141
  /**
142
142
  *
@@ -150,23 +150,26 @@ export function registerTransactionLockNamespace(
150
150
  namespaceId: number,
151
151
  ) {
152
152
  validateTransactionLockParameter(namespaceId, 'namespaceId');
153
- if (transactionLockNamespaceMap.has(namespaceKey)) {
153
+ if (transactionLockNamespaceMap[namespaceKey] != null) {
154
154
  throw new Error(
155
155
  `Error while registering transaction lock namespace '${namespaceKey}'. Namespace key is already registered.`,
156
156
  );
157
157
  }
158
- for (const entry of transactionLockNamespaceMap.entries()) {
159
- if (entry[1] === namespaceId) {
160
- throw new Error(
161
- `Error while registering transaction lock namespace '${namespaceKey}'. Transaction lock namespace id '${namespaceId}' already registered for namespace ${entry[0]}.`,
162
- );
163
- }
158
+ const existingNamespaceEntry = Object.entries(
159
+ transactionLockNamespaceMap,
160
+ ).find(([, id]) => id === namespaceId);
161
+ if (existingNamespaceEntry != null) {
162
+ throw new Error(
163
+ `Error while registering transaction lock namespace '${namespaceKey}'. Transaction lock namespace id '${namespaceId}' already registered for namespace ${existingNamespaceEntry[0]}.`,
164
+ );
164
165
  }
165
166
 
166
- transactionLockNamespaceMap.set(namespaceKey, namespaceId);
167
+ transactionLockNamespaceMap[namespaceKey] = namespaceId;
167
168
  }
168
169
 
169
- const maybePrepareCache = new Map<string, number>();
170
+ const maybePrepareCache: {
171
+ [sqlHash: string]: number;
172
+ } = {};
170
173
  const getPreparedName = (sql: Sql): string | undefined => {
171
174
  if (env.db.prepareAfterN === false) {
172
175
  return;
@@ -177,12 +180,12 @@ const getPreparedName = (sql: Sql): string | undefined => {
177
180
  return sqlHash;
178
181
  }
179
182
 
180
- const currentCount = maybePrepareCache.get(sqlHash) ?? 0;
181
- if (currentCount > env.db.prepareAfterN) {
183
+ maybePrepareCache[sqlHash] ??= 0;
184
+ if (maybePrepareCache[sqlHash] > env.db.prepareAfterN) {
182
185
  return sqlHash;
183
186
  }
184
187
  // Only increment if we haven't already reached the threshold as we don't care past that point
185
- maybePrepareCache.set(sqlHash, currentCount + 1);
188
+ maybePrepareCache[sqlHash]++;
186
189
  };
187
190
 
188
191
  const atomicExecuteSql: Database['executeSql'] = async function (
@@ -709,7 +712,7 @@ if (maybePg != null) {
709
712
  blocking = true,
710
713
  ) {
711
714
  validateTransactionLockParameter(key, 'key');
712
- const namespaceId = transactionLockNamespaceMap.get(namespaceKey);
715
+ const namespaceId = transactionLockNamespaceMap[namespaceKey];
713
716
  if (namespaceId == null) {
714
717
  throw new Error(
715
718
  `Transaction lock namespace ${namespaceKey} not registered.`,
@@ -1371,9 +1371,11 @@ const runODataRequest = (req: Express.Request, vocabulary: string) => {
1371
1371
  });
1372
1372
  const { resourceRenames } = models[version];
1373
1373
  if (resourceRenames) {
1374
- const resourceRename = resourceRenames[resolveSynonym($request)];
1375
- if (resourceRename) {
1376
- $request.resourceName = sqlNameToODataName(resourceRename);
1374
+ const resourceName = resolveSynonym($request);
1375
+ if (resourceRenames[resourceName]) {
1376
+ $request.resourceName = sqlNameToODataName(
1377
+ resourceRenames[resourceName],
1378
+ );
1377
1379
  }
1378
1380
  }
1379
1381
  }
@@ -137,7 +137,7 @@ export function setup(): void {
137
137
  if (handlerName == null) {
138
138
  throw new Error(`Must specify a task handler to execute`);
139
139
  }
140
- const handler = worker?.handlers[handlerName];
140
+ const handler = worker?.handlers.get(handlerName);
141
141
  if (handler == null) {
142
142
  throw new Error(
143
143
  `No task handler with name '${handlerName}' registered`,
@@ -182,12 +182,12 @@ export function addTaskHandler<T extends Schema>(
182
182
  throw new Error('Database does not support tasks');
183
183
  }
184
184
 
185
- if (worker.handlers[name] != null) {
185
+ if (worker.handlers.has(name)) {
186
186
  throw new Error(`Task handler with name '${name}' already registered`);
187
187
  }
188
- worker.handlers[name] = {
188
+ worker.handlers.set(name, {
189
189
  name,
190
190
  fn,
191
191
  validate: schema != null ? ajv.compile(schema) : undefined,
192
- };
192
+ });
193
193
  }
@@ -55,7 +55,7 @@ const selectColumns = Object.entries({
55
55
  // It polls the database for tasks to execute. It will execute
56
56
  // tasks in parallel up to a certain concurrency limit.
57
57
  export class Worker {
58
- public handlers: Record<string, TaskHandler> = {};
58
+ public handlers = new Map<string, TaskHandler>();
59
59
  private readonly concurrency: number;
60
60
  private readonly interval: number;
61
61
  private running = false;
@@ -68,16 +68,14 @@ export class Worker {
68
68
 
69
69
  // Check if instance can execute more tasks
70
70
  private canExecute(): boolean {
71
- return (
72
- this.executing < this.concurrency && Object.keys(this.handlers).length > 0
73
- );
71
+ return this.executing < this.concurrency && this.handlers.size > 0;
74
72
  }
75
73
 
76
74
  private async execute(task: PartialTask, tx: Db.Tx): Promise<void> {
77
75
  this.executing++;
78
76
  try {
79
77
  // Get specified handler
80
- const handler = this.handlers[task.is_executed_by__handler];
78
+ const handler = this.handlers.get(task.is_executed_by__handler);
81
79
  const startedOnTime = new Date();
82
80
 
83
81
  // This should never actually happen
@@ -215,8 +213,7 @@ export class Worker {
215
213
  if (!this.canExecute()) {
216
214
  return;
217
215
  }
218
- const handlerNames = Object.keys(this.handlers);
219
- if (handlerNames.length === 0) {
216
+ if (this.handlers.size === 0) {
220
217
  // No handlers currently added so just wait for next poll in case one is added in the meantime
221
218
  return;
222
219
  }
@@ -236,7 +233,7 @@ export class Worker {
236
233
  t."is scheduled to execute on-time" ASC,
237
234
  t."id" ASC
238
235
  LIMIT 1 FOR UPDATE SKIP LOCKED`,
239
- [handlerNames, Math.ceil(this.interval / 1000)],
236
+ [Array.from(this.handlers.keys()), Math.ceil(this.interval / 1000)],
240
237
  );
241
238
 
242
239
  // Execute task if one was found
@@ -274,8 +271,6 @@ export class Worker {
274
271
  );
275
272
  }
276
273
 
277
- const handlerNames = Object.keys(this.handlers);
278
-
279
274
  // Check for any pending tasks with unknown handlers
280
275
  const tasksWithUnknownHandlers = await this.client.get({
281
276
  resource: 'task',
@@ -285,9 +280,11 @@ export class Worker {
285
280
  options: {
286
281
  $filter: {
287
282
  status: 'queued',
288
- ...(handlerNames.length > 0 && {
283
+ ...(this.handlers.size > 0 && {
289
284
  $not: {
290
- is_executed_by__handler: { $in: handlerNames },
285
+ is_executed_by__handler: {
286
+ $in: Array.from(this.handlers.keys()),
287
+ },
291
288
  },
292
289
  }),
293
290
  },