@tstdl/base 0.93.140 → 0.93.142
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/application/application.d.ts +1 -1
- package/application/application.js +1 -1
- package/application/providers.d.ts +20 -2
- package/application/providers.js +34 -7
- package/audit/module.d.ts +5 -0
- package/audit/module.js +9 -1
- package/authentication/client/authentication.service.d.ts +1 -0
- package/authentication/client/authentication.service.js +3 -2
- package/authentication/server/module.d.ts +5 -0
- package/authentication/server/module.js +9 -1
- package/authentication/tests/authentication.api-controller.test.js +1 -1
- package/authentication/tests/authentication.api-request-token.provider.test.js +1 -1
- package/authentication/tests/authentication.client-service.test.js +1 -1
- package/circuit-breaker/circuit-breaker.d.ts +6 -4
- package/circuit-breaker/postgres/circuit-breaker.d.ts +1 -0
- package/circuit-breaker/postgres/circuit-breaker.js +8 -5
- package/circuit-breaker/postgres/module.d.ts +1 -0
- package/circuit-breaker/postgres/module.js +5 -1
- package/circuit-breaker/tests/circuit-breaker.test.js +20 -0
- package/document-management/server/configure.js +5 -1
- package/document-management/server/module.d.ts +1 -1
- package/document-management/server/module.js +1 -1
- package/document-management/server/services/document-management-ancillary.service.js +1 -1
- package/document-management/tests/ai-config-hierarchy.test.js +0 -5
- package/document-management/tests/document-management-ai-overrides.test.js +0 -1
- package/document-management/tests/document-validation-ai-overrides.test.js +0 -1
- package/examples/document-management/main.d.ts +1 -0
- package/examples/document-management/main.js +14 -11
- package/key-value-store/postgres/module.d.ts +1 -0
- package/key-value-store/postgres/module.js +5 -1
- package/lock/postgres/module.d.ts +1 -0
- package/lock/postgres/module.js +5 -1
- package/mail/module.d.ts +5 -1
- package/mail/module.js +11 -6
- package/module/modules/web-server.module.js +2 -3
- package/notification/server/module.d.ts +1 -0
- package/notification/server/module.js +5 -1
- package/notification/tests/notification-api.test.js +5 -1
- package/notification/tests/notification-flow.test.js +8 -5
- package/orm/decorators.d.ts +22 -5
- package/orm/decorators.js +10 -1
- package/orm/server/bootstrap.d.ts +11 -0
- package/orm/server/bootstrap.js +31 -0
- package/orm/server/drizzle/schema-converter.d.ts +3 -1
- package/orm/server/drizzle/schema-converter.js +85 -56
- package/orm/server/encryption.d.ts +0 -1
- package/orm/server/encryption.js +1 -4
- package/orm/server/extension.d.ts +14 -0
- package/orm/server/extension.js +27 -0
- package/orm/server/index.d.ts +3 -6
- package/orm/server/index.js +3 -6
- package/orm/server/migration.d.ts +18 -0
- package/orm/server/migration.js +58 -0
- package/orm/server/repository.d.ts +2 -1
- package/orm/server/repository.js +19 -9
- package/orm/server/transaction.d.ts +6 -10
- package/orm/server/transaction.js +25 -26
- package/orm/server/transactional.js +3 -3
- package/orm/tests/database-extension.test.js +63 -0
- package/orm/tests/database-migration.test.js +83 -0
- package/orm/tests/encryption.test.js +3 -4
- package/orm/tests/repository-compound-primary-key.test.d.ts +2 -0
- package/orm/tests/repository-compound-primary-key.test.js +234 -0
- package/orm/tests/schema-generation.test.d.ts +1 -0
- package/orm/tests/schema-generation.test.js +52 -5
- package/orm/utils.d.ts +17 -2
- package/orm/utils.js +49 -1
- package/package.json +5 -4
- package/rate-limit/postgres/module.d.ts +1 -0
- package/rate-limit/postgres/module.js +5 -1
- package/reflection/decorator-data.js +11 -12
- package/task-queue/README.md +2 -10
- package/task-queue/postgres/drizzle/0000_great_gwen_stacy.sql +84 -0
- package/task-queue/postgres/drizzle/meta/0000_snapshot.json +250 -89
- package/task-queue/postgres/drizzle/meta/_journal.json +2 -2
- package/task-queue/postgres/module.d.ts +1 -0
- package/task-queue/postgres/module.js +6 -1
- package/task-queue/postgres/schemas.d.ts +15 -6
- package/task-queue/postgres/schemas.js +4 -3
- package/task-queue/postgres/task-queue.d.ts +18 -15
- package/task-queue/postgres/task-queue.js +797 -499
- package/task-queue/postgres/task.model.d.ts +20 -9
- package/task-queue/postgres/task.model.js +65 -39
- package/task-queue/task-context.d.ts +12 -7
- package/task-queue/task-context.js +8 -6
- package/task-queue/task-queue.d.ts +364 -43
- package/task-queue/task-queue.js +153 -41
- package/task-queue/tests/coverage-branch.test.d.ts +1 -0
- package/task-queue/tests/coverage-branch.test.js +395 -0
- package/task-queue/tests/coverage-enhancement.test.d.ts +1 -0
- package/task-queue/tests/coverage-enhancement.test.js +150 -0
- package/task-queue/tests/dag.test.d.ts +1 -0
- package/task-queue/tests/dag.test.js +188 -0
- package/task-queue/tests/dependencies.test.js +165 -47
- package/task-queue/tests/enqueue-batch.test.d.ts +1 -0
- package/task-queue/tests/enqueue-batch.test.js +125 -0
- package/task-queue/tests/fan-out-spawning.test.d.ts +1 -0
- package/task-queue/tests/fan-out-spawning.test.js +94 -0
- package/task-queue/tests/idempotent-replacement.test.d.ts +1 -0
- package/task-queue/tests/idempotent-replacement.test.js +114 -0
- package/task-queue/tests/missing-idempotent-tasks.test.d.ts +1 -0
- package/task-queue/tests/missing-idempotent-tasks.test.js +39 -0
- package/task-queue/tests/queue.test.js +294 -49
- package/task-queue/tests/shutdown.test.d.ts +1 -0
- package/task-queue/tests/shutdown.test.js +41 -0
- package/task-queue/tests/transactions.test.d.ts +1 -0
- package/task-queue/tests/transactions.test.js +47 -0
- package/task-queue/tests/worker.test.js +63 -15
- package/task-queue/tests/zombie-parent.test.d.ts +1 -0
- package/task-queue/tests/zombie-parent.test.js +45 -0
- package/task-queue/tests/zombie-recovery.test.d.ts +1 -0
- package/task-queue/tests/zombie-recovery.test.js +51 -0
- package/test5.js +5 -5
- package/testing/integration-setup.d.ts +4 -4
- package/testing/integration-setup.js +56 -29
- package/text/localization.service.js +2 -2
- package/utils/file-reader.js +1 -2
- package/utils/timing.d.ts +2 -2
- package/task-queue/postgres/drizzle/0000_simple_invisible_woman.sql +0 -74
- package/task-queue/tests/complex.test.js +0 -306
- package/task-queue/tests/extensive-dependencies.test.js +0 -234
- /package/{task-queue/tests/complex.test.d.ts → orm/tests/database-extension.test.d.ts} +0 -0
- /package/{task-queue/tests/extensive-dependencies.test.d.ts → orm/tests/database-migration.test.d.ts} +0 -0
|
@@ -1,19 +1,25 @@
|
|
|
1
|
+
/** biome-ignore-all lint/nursery/noExcessiveClassesPerFile: <explanation> */
|
|
1
2
|
import { BaseEntity, type Json, type Timestamp } from '../../orm/index.js';
|
|
2
|
-
import type { ObjectLiteral
|
|
3
|
-
import {
|
|
4
|
-
export declare
|
|
3
|
+
import type { ObjectLiteral } from '../../types/types.js';
|
|
4
|
+
import { type Task, TaskDependencyType, TaskStatus } from '../task-queue.js';
|
|
5
|
+
export declare const terminalStatuses: TaskStatus[];
|
|
6
|
+
export declare const finalizedStatuses: TaskStatus[];
|
|
7
|
+
export declare const nonFinalizedStatuses: TaskStatus[];
|
|
8
|
+
export declare const queueableStatuses: TaskStatus[];
|
|
9
|
+
export declare const waitableStatuses: TaskStatus[];
|
|
10
|
+
export declare const queueableOrWaitableStatuses: TaskStatus[];
|
|
11
|
+
export declare abstract class PostgresTaskBase<Data extends ObjectLiteral = ObjectLiteral, State extends ObjectLiteral = ObjectLiteral, Result extends ObjectLiteral = ObjectLiteral> extends BaseEntity implements Task {
|
|
5
12
|
namespace: string;
|
|
6
13
|
type: string;
|
|
7
14
|
status: TaskStatus;
|
|
8
15
|
idempotencyKey: string | null;
|
|
9
16
|
traceId: string | null;
|
|
17
|
+
parentId: string | null;
|
|
10
18
|
tags: string[];
|
|
11
|
-
completeAfterTags: string[];
|
|
12
|
-
scheduleAfterTags: string[];
|
|
13
19
|
failFast: boolean;
|
|
14
|
-
dependencyJoinMode: DependencyJoinMode;
|
|
15
|
-
dependencyTriggerStatuses: TaskStatus[];
|
|
16
20
|
priority: number;
|
|
21
|
+
unresolvedScheduleDependencies: number;
|
|
22
|
+
unresolvedCompleteDependencies: number;
|
|
17
23
|
token: string | null;
|
|
18
24
|
creationTimestamp: Timestamp;
|
|
19
25
|
priorityAgeTimestamp: Timestamp;
|
|
@@ -31,9 +37,14 @@ export declare abstract class PostgresTaskBase<Data extends ObjectLiteral = Obje
|
|
|
31
37
|
}
|
|
32
38
|
export declare class PostgresTask<Data extends ObjectLiteral = ObjectLiteral, State extends ObjectLiteral = ObjectLiteral, Result extends ObjectLiteral = ObjectLiteral> extends PostgresTaskBase<Data, State, Result> implements Task {
|
|
33
39
|
static readonly entityName = "Task";
|
|
34
|
-
parentId: string | null;
|
|
35
40
|
}
|
|
36
41
|
export declare class PostgresTaskArchive<Data extends ObjectLiteral = ObjectLiteral, State extends ObjectLiteral = ObjectLiteral, Result extends ObjectLiteral = ObjectLiteral> extends PostgresTaskBase<Data, State, Result> implements PostgresTask<Data, State, Result> {
|
|
37
42
|
static readonly entityName = "TaskArchive";
|
|
38
|
-
|
|
43
|
+
}
|
|
44
|
+
export declare class PostgresTaskDependency extends BaseEntity {
|
|
45
|
+
static readonly entityName = "TaskDependency";
|
|
46
|
+
taskId: string;
|
|
47
|
+
dependencyTaskId: string;
|
|
48
|
+
type: TaskDependencyType;
|
|
49
|
+
requiredStatuses: TaskStatus[];
|
|
39
50
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** biome-ignore-all lint/nursery/noExcessiveClassesPerFile: <explanation> */
|
|
1
2
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -7,22 +8,28 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
10
|
};
|
|
10
|
-
import { BaseEntity, Index, JsonProperty,
|
|
11
|
+
import { BaseEntity, ForeignKey, Index, JsonProperty, Table, TimestampProperty, Unique, UuidProperty } from '../../orm/index.js';
|
|
11
12
|
import { Array as ArrayProperty, BooleanProperty, Enumeration, Integer, NumberProperty, StringProperty } from '../../schema/index.js';
|
|
12
|
-
import {
|
|
13
|
+
import { isNotNull } from 'drizzle-orm';
|
|
14
|
+
import { TaskDependencyType, TaskStatus } from '../task-queue.js';
|
|
15
|
+
export const terminalStatuses = [TaskStatus.Completed, TaskStatus.Cancelled, TaskStatus.Dead, TaskStatus.TimedOut, TaskStatus.Expired, TaskStatus.Skipped, TaskStatus.Orphaned];
|
|
16
|
+
export const finalizedStatuses = terminalStatuses;
|
|
17
|
+
export const nonFinalizedStatuses = [TaskStatus.Pending, TaskStatus.Retrying, TaskStatus.Waiting, TaskStatus.WaitingChildren, TaskStatus.Running];
|
|
18
|
+
export const queueableStatuses = [TaskStatus.Pending, TaskStatus.Retrying];
|
|
19
|
+
export const waitableStatuses = [TaskStatus.Waiting, TaskStatus.WaitingChildren];
|
|
20
|
+
export const queueableOrWaitableStatuses = [...queueableStatuses, ...waitableStatuses];
|
|
13
21
|
export class PostgresTaskBase extends BaseEntity {
|
|
14
22
|
namespace;
|
|
15
23
|
type;
|
|
16
24
|
status;
|
|
17
25
|
idempotencyKey;
|
|
18
26
|
traceId;
|
|
27
|
+
parentId;
|
|
19
28
|
tags;
|
|
20
|
-
completeAfterTags;
|
|
21
|
-
scheduleAfterTags;
|
|
22
29
|
failFast;
|
|
23
|
-
dependencyJoinMode;
|
|
24
|
-
dependencyTriggerStatuses;
|
|
25
30
|
priority;
|
|
31
|
+
unresolvedScheduleDependencies;
|
|
32
|
+
unresolvedCompleteDependencies;
|
|
26
33
|
token;
|
|
27
34
|
creationTimestamp;
|
|
28
35
|
priorityAgeTimestamp;
|
|
@@ -59,33 +66,29 @@ __decorate([
|
|
|
59
66
|
__metadata("design:type", Object)
|
|
60
67
|
], PostgresTaskBase.prototype, "traceId", void 0);
|
|
61
68
|
__decorate([
|
|
62
|
-
|
|
63
|
-
__metadata("design:type",
|
|
64
|
-
], PostgresTaskBase.prototype, "
|
|
65
|
-
__decorate([
|
|
66
|
-
ArrayProperty(String),
|
|
67
|
-
__metadata("design:type", Array)
|
|
68
|
-
], PostgresTaskBase.prototype, "completeAfterTags", void 0);
|
|
69
|
+
UuidProperty({ nullable: true }),
|
|
70
|
+
__metadata("design:type", Object)
|
|
71
|
+
], PostgresTaskBase.prototype, "parentId", void 0);
|
|
69
72
|
__decorate([
|
|
70
73
|
ArrayProperty(String),
|
|
71
74
|
__metadata("design:type", Array)
|
|
72
|
-
], PostgresTaskBase.prototype, "
|
|
75
|
+
], PostgresTaskBase.prototype, "tags", void 0);
|
|
73
76
|
__decorate([
|
|
74
77
|
BooleanProperty(),
|
|
75
78
|
__metadata("design:type", Boolean)
|
|
76
79
|
], PostgresTaskBase.prototype, "failFast", void 0);
|
|
77
80
|
__decorate([
|
|
78
|
-
|
|
79
|
-
__metadata("design:type",
|
|
80
|
-
], PostgresTaskBase.prototype, "
|
|
81
|
+
Integer(),
|
|
82
|
+
__metadata("design:type", Number)
|
|
83
|
+
], PostgresTaskBase.prototype, "priority", void 0);
|
|
81
84
|
__decorate([
|
|
82
|
-
|
|
83
|
-
__metadata("design:type",
|
|
84
|
-
], PostgresTaskBase.prototype, "
|
|
85
|
+
Integer(),
|
|
86
|
+
__metadata("design:type", Number)
|
|
87
|
+
], PostgresTaskBase.prototype, "unresolvedScheduleDependencies", void 0);
|
|
85
88
|
__decorate([
|
|
86
89
|
Integer(),
|
|
87
90
|
__metadata("design:type", Number)
|
|
88
|
-
], PostgresTaskBase.prototype, "
|
|
91
|
+
], PostgresTaskBase.prototype, "unresolvedCompleteDependencies", void 0);
|
|
89
92
|
__decorate([
|
|
90
93
|
UuidProperty({ nullable: true }),
|
|
91
94
|
__metadata("design:type", Object)
|
|
@@ -144,35 +147,58 @@ __decorate([
|
|
|
144
147
|
], PostgresTaskBase.prototype, "error", void 0);
|
|
145
148
|
let PostgresTask = class PostgresTask extends PostgresTaskBase {
|
|
146
149
|
static entityName = 'Task';
|
|
147
|
-
parentId;
|
|
148
150
|
};
|
|
149
|
-
__decorate([
|
|
150
|
-
Reference(() => PostgresTask),
|
|
151
|
-
UuidProperty({ nullable: true }),
|
|
152
|
-
__metadata("design:type", Object)
|
|
153
|
-
], PostgresTask.prototype, "parentId", void 0);
|
|
154
151
|
PostgresTask = __decorate([
|
|
155
152
|
Table('task', { schema: 'task_queue' }),
|
|
156
153
|
Unique(['namespace', 'idempotencyKey']),
|
|
157
|
-
Index(['namespace', '
|
|
158
|
-
Index(['
|
|
159
|
-
Index(['
|
|
160
|
-
Index(['
|
|
161
|
-
Index(['
|
|
162
|
-
Index(['
|
|
163
|
-
Index(['
|
|
154
|
+
Index(['namespace', 'tags'], { using: 'gin' }),
|
|
155
|
+
Index(['namespace', 'priority', 'scheduleTimestamp'], { where: () => ({ status: { $in: queueableStatuses } }) }),
|
|
156
|
+
Index(['namespace', 'type', 'priority', 'scheduleTimestamp'], { where: () => ({ status: { $in: queueableStatuses } }) }),
|
|
157
|
+
Index(['namespace', 'priorityAgeTimestamp'], { where: () => ({ status: { $in: queueableStatuses } }) }),
|
|
158
|
+
Index(['namespace', 'timeToLive'], { where: () => ({ status: { $in: queueableOrWaitableStatuses } }) }),
|
|
159
|
+
Index(['namespace', 'visibilityDeadline'], { where: () => ({ status: TaskStatus.Running }) }),
|
|
160
|
+
Index(['namespace', 'startTimestamp'], { where: () => ({ status: TaskStatus.Running }) }),
|
|
161
|
+
Index(['namespace', 'completeTimestamp'], { where: () => ({ status: { $in: terminalStatuses } }) }),
|
|
162
|
+
Index(['parentId'], { where: (table) => isNotNull(table.parentId) }),
|
|
163
|
+
ForeignKey(() => PostgresTask, ['parentId'], ['id'])
|
|
164
164
|
], PostgresTask);
|
|
165
165
|
export { PostgresTask };
|
|
166
166
|
let PostgresTaskArchive = class PostgresTaskArchive extends PostgresTaskBase {
|
|
167
167
|
static entityName = 'TaskArchive';
|
|
168
|
-
parentId;
|
|
169
168
|
};
|
|
170
|
-
__decorate([
|
|
171
|
-
UuidProperty({ nullable: true }),
|
|
172
|
-
__metadata("design:type", Object)
|
|
173
|
-
], PostgresTaskArchive.prototype, "parentId", void 0);
|
|
174
169
|
PostgresTaskArchive = __decorate([
|
|
175
170
|
Table('task_archive', { schema: 'task_queue' }),
|
|
176
171
|
Index(['namespace', 'completeTimestamp'])
|
|
177
172
|
], PostgresTaskArchive);
|
|
178
173
|
export { PostgresTaskArchive };
|
|
174
|
+
let PostgresTaskDependency = class PostgresTaskDependency extends BaseEntity {
|
|
175
|
+
static entityName = 'TaskDependency';
|
|
176
|
+
taskId;
|
|
177
|
+
dependencyTaskId;
|
|
178
|
+
type;
|
|
179
|
+
requiredStatuses;
|
|
180
|
+
};
|
|
181
|
+
__decorate([
|
|
182
|
+
UuidProperty(),
|
|
183
|
+
__metadata("design:type", String)
|
|
184
|
+
], PostgresTaskDependency.prototype, "taskId", void 0);
|
|
185
|
+
__decorate([
|
|
186
|
+
UuidProperty(),
|
|
187
|
+
__metadata("design:type", String)
|
|
188
|
+
], PostgresTaskDependency.prototype, "dependencyTaskId", void 0);
|
|
189
|
+
__decorate([
|
|
190
|
+
Enumeration(TaskDependencyType),
|
|
191
|
+
__metadata("design:type", String)
|
|
192
|
+
], PostgresTaskDependency.prototype, "type", void 0);
|
|
193
|
+
__decorate([
|
|
194
|
+
Enumeration(TaskStatus, { array: true }),
|
|
195
|
+
__metadata("design:type", Array)
|
|
196
|
+
], PostgresTaskDependency.prototype, "requiredStatuses", void 0);
|
|
197
|
+
PostgresTaskDependency = __decorate([
|
|
198
|
+
Table('task_dependency', { schema: 'task_queue' }),
|
|
199
|
+
Unique(['taskId', 'dependencyTaskId', 'type']),
|
|
200
|
+
Index(['dependencyTaskId', 'type']),
|
|
201
|
+
ForeignKey(() => PostgresTask, ['taskId'], ['id'], { onDelete: 'cascade' }),
|
|
202
|
+
ForeignKey(() => PostgresTask, ['dependencyTaskId'], ['id'], { onDelete: 'cascade' })
|
|
203
|
+
], PostgresTaskDependency);
|
|
204
|
+
export { PostgresTaskDependency };
|
|
@@ -3,15 +3,15 @@ import type { Logger } from '../logger/index.js';
|
|
|
3
3
|
import type { Transaction } from '../orm/server/index.js';
|
|
4
4
|
import { TaskQueue, type EnqueueManyItem, type EnqueueOptions } from './task-queue.js';
|
|
5
5
|
import type { TaskData, TaskDefinitionMap, TaskOfType, TaskResult, TaskState, TaskTypes } from './types.js';
|
|
6
|
-
|
|
6
|
+
declare class TaskContextImplementation<Definitions extends TaskDefinitionMap, Type extends TaskTypes<Definitions> = TaskTypes<Definitions>> {
|
|
7
7
|
#private;
|
|
8
8
|
constructor(queue: TaskQueue<Definitions>, task: TaskOfType<Definitions, Type>, signal: CancellationToken, logger: Logger);
|
|
9
9
|
get id(): string;
|
|
10
10
|
get type(): Type;
|
|
11
11
|
get parentId(): string | null;
|
|
12
12
|
get tags(): string[];
|
|
13
|
-
get
|
|
14
|
-
get
|
|
13
|
+
get unresolvedScheduleDependencies(): number;
|
|
14
|
+
get unresolvedCompleteDependencies(): number;
|
|
15
15
|
get data(): TaskData<Definitions, Type>;
|
|
16
16
|
get state(): TaskState<Definitions, Type> | null;
|
|
17
17
|
get attempt(): number;
|
|
@@ -27,10 +27,10 @@ export declare class TaskContext<Definitions extends TaskDefinitionMap, Type ext
|
|
|
27
27
|
state?: TaskState<Definitions, Type>;
|
|
28
28
|
transaction?: Transaction;
|
|
29
29
|
}): Promise<void>;
|
|
30
|
-
spawn<
|
|
31
|
-
spawn<OtherDefinitions extends TaskDefinitionMap,
|
|
32
|
-
spawnMany<
|
|
33
|
-
spawnMany<OtherDefinitions extends TaskDefinitionMap,
|
|
30
|
+
spawn<SpawnType extends TaskTypes<Definitions>>(type: SpawnType, data: TaskData<Definitions, SpawnType>, options?: Omit<EnqueueOptions, 'parentId'>): Promise<TaskOfType<Definitions, SpawnType>>;
|
|
31
|
+
spawn<OtherDefinitions extends TaskDefinitionMap, SpawnType extends TaskTypes<OtherDefinitions>>(queue: TaskQueue<OtherDefinitions>, type: SpawnType, data: OtherDefinitions[SpawnType]['data'], options?: Omit<EnqueueOptions, 'parentId'>): Promise<TaskOfType<OtherDefinitions, SpawnType>>;
|
|
32
|
+
spawnMany<SpawnType extends TaskTypes<Definitions>>(items: EnqueueManyItem<Definitions, SpawnType>[]): Promise<TaskOfType<Definitions, SpawnType>[]>;
|
|
33
|
+
spawnMany<OtherDefinitions extends TaskDefinitionMap, SpawnType extends TaskTypes<OtherDefinitions>>(queue: TaskQueue<OtherDefinitions>, items: EnqueueManyItem<OtherDefinitions, SpawnType>[]): Promise<TaskOfType<OtherDefinitions, SpawnType>[]>;
|
|
34
34
|
/** Stop execution and reschedule the task for later without incrementing tries if possible */
|
|
35
35
|
reschedule(timestamp: number, options?: {
|
|
36
36
|
transaction?: Transaction;
|
|
@@ -44,3 +44,8 @@ export declare class TaskContext<Definitions extends TaskDefinitionMap, Type ext
|
|
|
44
44
|
transaction?: Transaction;
|
|
45
45
|
}): Promise<void>;
|
|
46
46
|
}
|
|
47
|
+
export type TaskContext<Definitions extends TaskDefinitionMap, Type extends TaskTypes<Definitions> = TaskTypes<Definitions>> = Type extends any ? TaskContextImplementation<Definitions, Type> : never;
|
|
48
|
+
export declare const TaskContext: {
|
|
49
|
+
new <Definitions extends TaskDefinitionMap, Type extends TaskTypes<Definitions>>(queue: TaskQueue<Definitions>, task: TaskOfType<Definitions, Type>, signal: CancellationToken, logger: Logger): TaskContext<Definitions, Type>;
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { currentTimestamp } from '../utils/date-time.js';
|
|
2
2
|
import { isInstanceOf, isNumber, isUndefined } from '../utils/type-guards.js';
|
|
3
3
|
import { TaskQueue } from './task-queue.js';
|
|
4
|
-
|
|
4
|
+
class TaskContextImplementation {
|
|
5
5
|
#queue;
|
|
6
6
|
#logger;
|
|
7
7
|
#signal;
|
|
@@ -24,11 +24,11 @@ export class TaskContext {
|
|
|
24
24
|
get tags() {
|
|
25
25
|
return this.#task.tags;
|
|
26
26
|
}
|
|
27
|
-
get
|
|
28
|
-
return this.#task.
|
|
27
|
+
get unresolvedScheduleDependencies() {
|
|
28
|
+
return this.#task.unresolvedScheduleDependencies;
|
|
29
29
|
}
|
|
30
|
-
get
|
|
31
|
-
return this.#task.
|
|
30
|
+
get unresolvedCompleteDependencies() {
|
|
31
|
+
return this.#task.unresolvedCompleteDependencies;
|
|
32
32
|
}
|
|
33
33
|
get data() {
|
|
34
34
|
return this.#task.data;
|
|
@@ -76,10 +76,11 @@ export class TaskContext {
|
|
|
76
76
|
}
|
|
77
77
|
async spawnMany(queueOrItems, itemsOrNothing) {
|
|
78
78
|
const isForOtherQueue = isInstanceOf(queueOrItems, TaskQueue);
|
|
79
|
-
const items = (isForOtherQueue ? itemsOrNothing : queueOrItems).map((item) => ({ ...item, parentId: this.#task.id }));
|
|
80
79
|
if (isForOtherQueue) {
|
|
80
|
+
const items = itemsOrNothing.map((item) => ({ ...item, parentId: this.#task.id }));
|
|
81
81
|
return await queueOrItems.enqueueMany(items, { returnTasks: true });
|
|
82
82
|
}
|
|
83
|
+
const items = queueOrItems.map((item) => ({ ...item, parentId: this.#task.id }));
|
|
83
84
|
return await this.#queue.enqueueMany(items, { returnTasks: true });
|
|
84
85
|
}
|
|
85
86
|
async reschedule(timestampOrDelay) {
|
|
@@ -95,3 +96,4 @@ export class TaskContext {
|
|
|
95
96
|
this.#signal.set();
|
|
96
97
|
}
|
|
97
98
|
}
|
|
99
|
+
export const TaskContext = TaskContextImplementation;
|