@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.
Files changed (123) hide show
  1. package/application/application.d.ts +1 -1
  2. package/application/application.js +1 -1
  3. package/application/providers.d.ts +20 -2
  4. package/application/providers.js +34 -7
  5. package/audit/module.d.ts +5 -0
  6. package/audit/module.js +9 -1
  7. package/authentication/client/authentication.service.d.ts +1 -0
  8. package/authentication/client/authentication.service.js +3 -2
  9. package/authentication/server/module.d.ts +5 -0
  10. package/authentication/server/module.js +9 -1
  11. package/authentication/tests/authentication.api-controller.test.js +1 -1
  12. package/authentication/tests/authentication.api-request-token.provider.test.js +1 -1
  13. package/authentication/tests/authentication.client-service.test.js +1 -1
  14. package/circuit-breaker/circuit-breaker.d.ts +6 -4
  15. package/circuit-breaker/postgres/circuit-breaker.d.ts +1 -0
  16. package/circuit-breaker/postgres/circuit-breaker.js +8 -5
  17. package/circuit-breaker/postgres/module.d.ts +1 -0
  18. package/circuit-breaker/postgres/module.js +5 -1
  19. package/circuit-breaker/tests/circuit-breaker.test.js +20 -0
  20. package/document-management/server/configure.js +5 -1
  21. package/document-management/server/module.d.ts +1 -1
  22. package/document-management/server/module.js +1 -1
  23. package/document-management/server/services/document-management-ancillary.service.js +1 -1
  24. package/document-management/tests/ai-config-hierarchy.test.js +0 -5
  25. package/document-management/tests/document-management-ai-overrides.test.js +0 -1
  26. package/document-management/tests/document-validation-ai-overrides.test.js +0 -1
  27. package/examples/document-management/main.d.ts +1 -0
  28. package/examples/document-management/main.js +14 -11
  29. package/key-value-store/postgres/module.d.ts +1 -0
  30. package/key-value-store/postgres/module.js +5 -1
  31. package/lock/postgres/module.d.ts +1 -0
  32. package/lock/postgres/module.js +5 -1
  33. package/mail/module.d.ts +5 -1
  34. package/mail/module.js +11 -6
  35. package/module/modules/web-server.module.js +2 -3
  36. package/notification/server/module.d.ts +1 -0
  37. package/notification/server/module.js +5 -1
  38. package/notification/tests/notification-api.test.js +5 -1
  39. package/notification/tests/notification-flow.test.js +8 -5
  40. package/orm/decorators.d.ts +22 -5
  41. package/orm/decorators.js +10 -1
  42. package/orm/server/bootstrap.d.ts +11 -0
  43. package/orm/server/bootstrap.js +31 -0
  44. package/orm/server/drizzle/schema-converter.d.ts +3 -1
  45. package/orm/server/drizzle/schema-converter.js +85 -56
  46. package/orm/server/encryption.d.ts +0 -1
  47. package/orm/server/encryption.js +1 -4
  48. package/orm/server/extension.d.ts +14 -0
  49. package/orm/server/extension.js +27 -0
  50. package/orm/server/index.d.ts +3 -6
  51. package/orm/server/index.js +3 -6
  52. package/orm/server/migration.d.ts +18 -0
  53. package/orm/server/migration.js +58 -0
  54. package/orm/server/repository.d.ts +2 -1
  55. package/orm/server/repository.js +19 -9
  56. package/orm/server/transaction.d.ts +6 -10
  57. package/orm/server/transaction.js +25 -26
  58. package/orm/server/transactional.js +3 -3
  59. package/orm/tests/database-extension.test.js +63 -0
  60. package/orm/tests/database-migration.test.js +83 -0
  61. package/orm/tests/encryption.test.js +3 -4
  62. package/orm/tests/repository-compound-primary-key.test.d.ts +2 -0
  63. package/orm/tests/repository-compound-primary-key.test.js +234 -0
  64. package/orm/tests/schema-generation.test.d.ts +1 -0
  65. package/orm/tests/schema-generation.test.js +52 -5
  66. package/orm/utils.d.ts +17 -2
  67. package/orm/utils.js +49 -1
  68. package/package.json +5 -4
  69. package/rate-limit/postgres/module.d.ts +1 -0
  70. package/rate-limit/postgres/module.js +5 -1
  71. package/reflection/decorator-data.js +11 -12
  72. package/task-queue/README.md +2 -10
  73. package/task-queue/postgres/drizzle/0000_great_gwen_stacy.sql +84 -0
  74. package/task-queue/postgres/drizzle/meta/0000_snapshot.json +250 -89
  75. package/task-queue/postgres/drizzle/meta/_journal.json +2 -2
  76. package/task-queue/postgres/module.d.ts +1 -0
  77. package/task-queue/postgres/module.js +6 -1
  78. package/task-queue/postgres/schemas.d.ts +15 -6
  79. package/task-queue/postgres/schemas.js +4 -3
  80. package/task-queue/postgres/task-queue.d.ts +18 -15
  81. package/task-queue/postgres/task-queue.js +797 -499
  82. package/task-queue/postgres/task.model.d.ts +20 -9
  83. package/task-queue/postgres/task.model.js +65 -39
  84. package/task-queue/task-context.d.ts +12 -7
  85. package/task-queue/task-context.js +8 -6
  86. package/task-queue/task-queue.d.ts +364 -43
  87. package/task-queue/task-queue.js +153 -41
  88. package/task-queue/tests/coverage-branch.test.d.ts +1 -0
  89. package/task-queue/tests/coverage-branch.test.js +395 -0
  90. package/task-queue/tests/coverage-enhancement.test.d.ts +1 -0
  91. package/task-queue/tests/coverage-enhancement.test.js +150 -0
  92. package/task-queue/tests/dag.test.d.ts +1 -0
  93. package/task-queue/tests/dag.test.js +188 -0
  94. package/task-queue/tests/dependencies.test.js +165 -47
  95. package/task-queue/tests/enqueue-batch.test.d.ts +1 -0
  96. package/task-queue/tests/enqueue-batch.test.js +125 -0
  97. package/task-queue/tests/fan-out-spawning.test.d.ts +1 -0
  98. package/task-queue/tests/fan-out-spawning.test.js +94 -0
  99. package/task-queue/tests/idempotent-replacement.test.d.ts +1 -0
  100. package/task-queue/tests/idempotent-replacement.test.js +114 -0
  101. package/task-queue/tests/missing-idempotent-tasks.test.d.ts +1 -0
  102. package/task-queue/tests/missing-idempotent-tasks.test.js +39 -0
  103. package/task-queue/tests/queue.test.js +294 -49
  104. package/task-queue/tests/shutdown.test.d.ts +1 -0
  105. package/task-queue/tests/shutdown.test.js +41 -0
  106. package/task-queue/tests/transactions.test.d.ts +1 -0
  107. package/task-queue/tests/transactions.test.js +47 -0
  108. package/task-queue/tests/worker.test.js +63 -15
  109. package/task-queue/tests/zombie-parent.test.d.ts +1 -0
  110. package/task-queue/tests/zombie-parent.test.js +45 -0
  111. package/task-queue/tests/zombie-recovery.test.d.ts +1 -0
  112. package/task-queue/tests/zombie-recovery.test.js +51 -0
  113. package/test5.js +5 -5
  114. package/testing/integration-setup.d.ts +4 -4
  115. package/testing/integration-setup.js +56 -29
  116. package/text/localization.service.js +2 -2
  117. package/utils/file-reader.js +1 -2
  118. package/utils/timing.d.ts +2 -2
  119. package/task-queue/postgres/drizzle/0000_simple_invisible_woman.sql +0 -74
  120. package/task-queue/tests/complex.test.js +0 -306
  121. package/task-queue/tests/extensive-dependencies.test.js +0 -234
  122. /package/{task-queue/tests/complex.test.d.ts → orm/tests/database-extension.test.d.ts} +0 -0
  123. /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, TypedOmit } from '../../types/types.js';
3
- import { DependencyJoinMode, type Task, TaskStatus } from '../task-queue.js';
4
- export declare abstract class PostgresTaskBase<Data extends ObjectLiteral = ObjectLiteral, State extends ObjectLiteral = ObjectLiteral, Result extends ObjectLiteral = ObjectLiteral> extends BaseEntity implements TypedOmit<Task, 'parentId'> {
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
- parentId: string | null;
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, Reference, Table, TimestampProperty, Unique, UuidProperty } from '../../orm/index.js';
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 { DependencyJoinMode, TaskStatus } from '../task-queue.js';
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
- ArrayProperty(String),
63
- __metadata("design:type", Array)
64
- ], PostgresTaskBase.prototype, "tags", void 0);
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, "scheduleAfterTags", void 0);
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
- Enumeration(DependencyJoinMode),
79
- __metadata("design:type", String)
80
- ], PostgresTaskBase.prototype, "dependencyJoinMode", void 0);
81
+ Integer(),
82
+ __metadata("design:type", Number)
83
+ ], PostgresTaskBase.prototype, "priority", void 0);
81
84
  __decorate([
82
- Enumeration(TaskStatus, { array: true }),
83
- __metadata("design:type", Array)
84
- ], PostgresTaskBase.prototype, "dependencyTriggerStatuses", void 0);
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, "priority", void 0);
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', 'status', 'scheduleTimestamp', 'priority']),
158
- Index(['tags'], { using: 'gin' }),
159
- Index(['completeAfterTags'], { using: 'gin' }),
160
- Index(['scheduleAfterTags'], { using: 'gin' }),
161
- Index(['status', 'completeTimestamp']),
162
- Index(['status', 'visibilityDeadline']),
163
- Index(['parentId'])
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
- export declare class TaskContext<Definitions extends TaskDefinitionMap, Type extends TaskTypes<Definitions> = TaskTypes<Definitions>> {
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 completeAfterTags(): string[];
14
- get scheduleAfterTags(): string[];
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<Type extends TaskTypes<Definitions>>(type: Type, data: TaskData<Definitions, Type>, options?: Omit<EnqueueOptions, 'parentId'>): Promise<TaskOfType<Definitions, Type>>;
31
- spawn<OtherDefinitions extends TaskDefinitionMap, T extends TaskTypes<OtherDefinitions>>(queue: TaskQueue<OtherDefinitions>, type: T, data: OtherDefinitions[T]['data'], options?: Omit<EnqueueOptions, 'parentId'>): Promise<TaskOfType<OtherDefinitions, T>>;
32
- spawnMany<Type extends TaskTypes<Definitions>>(items: EnqueueManyItem<Definitions, Type>[]): Promise<TaskOfType<Definitions, Type>[]>;
33
- spawnMany<OtherDefinitions extends TaskDefinitionMap, Type extends TaskTypes<OtherDefinitions>>(queue: TaskQueue<OtherDefinitions>, items: EnqueueManyItem<OtherDefinitions, Type>[]): Promise<TaskOfType<OtherDefinitions, Type>[]>;
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
- export class TaskContext {
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 completeAfterTags() {
28
- return this.#task.completeAfterTags;
27
+ get unresolvedScheduleDependencies() {
28
+ return this.#task.unresolvedScheduleDependencies;
29
29
  }
30
- get scheduleAfterTags() {
31
- return this.#task.scheduleAfterTags;
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;