effect-mq 0.4.0 → 0.4.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.
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import type * as JobStore from "../JobStore.ts";
|
|
35
35
|
import { type AnyPgColumnBuilder, type PgBuildExtraConfigColumns, type PgTableExtraConfigValue } from "drizzle-orm/pg-core";
|
|
36
|
+
type QueueName = JobStore.QueueName;
|
|
36
37
|
/**
|
|
37
38
|
* Table-factory options: `extraConfig` receives the table's columns (exactly
|
|
38
39
|
* like drizzle's third `pgTable` argument) and returns additional indexes,
|
|
@@ -43,10 +44,10 @@ import { type AnyPgColumnBuilder, type PgBuildExtraConfigColumns, type PgTableEx
|
|
|
43
44
|
export interface MqTableOptions<Columns extends Record<string, AnyPgColumnBuilder>> {
|
|
44
45
|
readonly extraConfig?: ((table: PgBuildExtraConfigColumns<Columns>) => Array<PgTableExtraConfigValue>) | undefined;
|
|
45
46
|
}
|
|
46
|
-
declare const jobsColumns: <JobName extends string>() => {
|
|
47
|
+
declare const jobsColumns: <JobName extends string, Queue extends string>() => {
|
|
47
48
|
id: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobStore.JobId>;
|
|
48
49
|
name: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobName>;
|
|
49
|
-
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>,
|
|
50
|
+
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, Queue>;
|
|
50
51
|
state: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobStore.JobState>;
|
|
51
52
|
priority: import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>>;
|
|
52
53
|
/** FIFO order within a priority; bumped on retry so retries go to the tail. */
|
|
@@ -74,6 +75,8 @@ declare const jobsColumns: <JobName extends string>() => {
|
|
|
74
75
|
/**
|
|
75
76
|
* The jobs table factory. `JobName` types the `name` column — derive it from
|
|
76
77
|
* your job definitions: `mqJobs<typeof GenerateInvoice._tag | typeof Report._tag>()`.
|
|
78
|
+
* `Queue` types the `queue` column the same way — pass your own branded type
|
|
79
|
+
* or literal union (defaults to effect-mq's `QueueName` brand).
|
|
77
80
|
*
|
|
78
81
|
* `extend` adds your own columns (tenant ids, object ids, ...) to the table.
|
|
79
82
|
* At enqueue the Postgres store fills each extended column from the job's
|
|
@@ -94,7 +97,7 @@ declare const jobsColumns: <JobName extends string>() => {
|
|
|
94
97
|
*
|
|
95
98
|
* @since 0.1.0
|
|
96
99
|
*/
|
|
97
|
-
export declare const mqJobs: <JobName extends string = string, Extend extends Record<string, AnyPgColumnBuilder> = Record<never, never>>(tableName?: string, options?: MqTableOptions<ReturnType<typeof jobsColumns<JobName>> & Extend> & {
|
|
100
|
+
export declare const mqJobs: <JobName extends string = string, Queue extends string = QueueName, Extend extends Record<string, AnyPgColumnBuilder> = Record<never, never>>(tableName?: string, options?: MqTableOptions<ReturnType<typeof jobsColumns<JobName, Queue>> & Extend> & {
|
|
98
101
|
/** Extra columns appended to the factory's own (see the JSDoc example). */
|
|
99
102
|
readonly extend?: Extend | undefined;
|
|
100
103
|
}) => import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
@@ -103,7 +106,7 @@ export declare const mqJobs: <JobName extends string = string, Extend extends Re
|
|
|
103
106
|
columns: {
|
|
104
107
|
id: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobStore.JobId>;
|
|
105
108
|
name: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobName>;
|
|
106
|
-
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>,
|
|
109
|
+
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, Queue>;
|
|
107
110
|
state: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobStore.JobState>;
|
|
108
111
|
priority: import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>>;
|
|
109
112
|
/** FIFO order within a priority; bumped on retry so retries go to the tail. */
|
|
@@ -188,7 +191,7 @@ declare const attemptsColumns: (jobs: MqJobsTable) => {
|
|
|
188
191
|
*
|
|
189
192
|
* @since 0.1.0
|
|
190
193
|
*/
|
|
191
|
-
export declare const mqJobAttempts: (jobs:
|
|
194
|
+
export declare const mqJobAttempts: (jobs: MqJobsTable, tableName?: string, options?: MqTableOptions<ReturnType<typeof attemptsColumns>>) => import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
192
195
|
name: string;
|
|
193
196
|
schema: undefined;
|
|
194
197
|
columns: {
|
|
@@ -285,10 +288,10 @@ export declare const mqJobAttempts: (jobs: ReturnType<typeof mqJobs<any>>, table
|
|
|
285
288
|
};
|
|
286
289
|
dialect: 'pg';
|
|
287
290
|
}>;
|
|
288
|
-
declare const schedulesColumns: () => {
|
|
291
|
+
declare const schedulesColumns: <JobName extends string, Queue extends string>() => {
|
|
289
292
|
key: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobStore.ScheduleKey>;
|
|
290
|
-
jobName: import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]
|
|
291
|
-
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>,
|
|
293
|
+
jobName: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobName>;
|
|
294
|
+
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, Queue>;
|
|
292
295
|
cron: import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>;
|
|
293
296
|
tz: import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>;
|
|
294
297
|
everyMs: import("drizzle-orm/pg-core").PgBigInt53Builder;
|
|
@@ -304,9 +307,12 @@ declare const schedulesColumns: () => {
|
|
|
304
307
|
/**
|
|
305
308
|
* Repeatable-job schedules (one row per `Job.schedule` key).
|
|
306
309
|
*
|
|
310
|
+
* `JobName` and `Queue` type the `jobName`/`queue` columns, exactly like
|
|
311
|
+
* `mqJobs` (both default to plain string / effect-mq's `QueueName` brand).
|
|
312
|
+
*
|
|
307
313
|
* @since 0.2.0
|
|
308
314
|
*/
|
|
309
|
-
export declare const mqSchedules: (tableName?: string, options?: MqTableOptions<ReturnType<typeof schedulesColumns
|
|
315
|
+
export declare const mqSchedules: <JobName extends string = string, Queue extends string = QueueName>(tableName?: string, options?: MqTableOptions<ReturnType<typeof schedulesColumns<JobName, Queue>>>) => import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
310
316
|
name: string;
|
|
311
317
|
schema: undefined;
|
|
312
318
|
columns: {
|
|
@@ -325,11 +331,11 @@ export declare const mqSchedules: (tableName?: string, options?: MqTableOptions<
|
|
|
325
331
|
identity: undefined;
|
|
326
332
|
generated: undefined;
|
|
327
333
|
}>;
|
|
328
|
-
jobName: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
|
|
334
|
+
jobName: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobName>, {
|
|
329
335
|
name: string;
|
|
330
336
|
tableName: string;
|
|
331
337
|
dataType: "string";
|
|
332
|
-
data:
|
|
338
|
+
data: JobName;
|
|
333
339
|
driverParam: string;
|
|
334
340
|
notNull: true;
|
|
335
341
|
hasDefault: false;
|
|
@@ -340,11 +346,11 @@ export declare const mqSchedules: (tableName?: string, options?: MqTableOptions<
|
|
|
340
346
|
identity: undefined;
|
|
341
347
|
generated: undefined;
|
|
342
348
|
}>;
|
|
343
|
-
queue: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>,
|
|
349
|
+
queue: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, Queue>, {
|
|
344
350
|
name: string;
|
|
345
351
|
tableName: string;
|
|
346
352
|
dataType: "string";
|
|
347
|
-
data:
|
|
353
|
+
data: Queue;
|
|
348
354
|
driverParam: string;
|
|
349
355
|
notNull: true;
|
|
350
356
|
hasDefault: false;
|
|
@@ -523,8 +529,8 @@ export declare const mqSchedules: (tableName?: string, options?: MqTableOptions<
|
|
|
523
529
|
};
|
|
524
530
|
dialect: 'pg';
|
|
525
531
|
}>;
|
|
526
|
-
declare const dedupeColumns: () => {
|
|
527
|
-
name: import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]
|
|
532
|
+
declare const dedupeColumns: <JobName extends string>() => {
|
|
533
|
+
name: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobName>;
|
|
528
534
|
key: import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>;
|
|
529
535
|
jobId: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobStore.JobId>;
|
|
530
536
|
/** Set for ttl/throttle windows; NULL rows live as long as their job is pending. */
|
|
@@ -535,15 +541,15 @@ declare const dedupeColumns: () => {
|
|
|
535
541
|
*
|
|
536
542
|
* @since 0.3.0
|
|
537
543
|
*/
|
|
538
|
-
export declare const mqDedupe: (tableName?: string, options?: MqTableOptions<ReturnType<typeof dedupeColumns
|
|
544
|
+
export declare const mqDedupe: <JobName extends string = string>(tableName?: string, options?: MqTableOptions<ReturnType<typeof dedupeColumns<JobName>>>) => import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
539
545
|
name: string;
|
|
540
546
|
schema: undefined;
|
|
541
547
|
columns: {
|
|
542
|
-
name: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
|
|
548
|
+
name: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, JobName>, {
|
|
543
549
|
name: string;
|
|
544
550
|
tableName: string;
|
|
545
551
|
dataType: "string";
|
|
546
|
-
data:
|
|
552
|
+
data: JobName;
|
|
547
553
|
driverParam: string;
|
|
548
554
|
notNull: true;
|
|
549
555
|
hasDefault: false;
|
|
@@ -602,8 +608,8 @@ export declare const mqDedupe: (tableName?: string, options?: MqTableOptions<Ret
|
|
|
602
608
|
};
|
|
603
609
|
dialect: 'pg';
|
|
604
610
|
}>;
|
|
605
|
-
declare const queueControlColumns: () => {
|
|
606
|
-
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>,
|
|
611
|
+
declare const queueControlColumns: <Queue extends string>() => {
|
|
612
|
+
queue: import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, Queue>;
|
|
607
613
|
paused: import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgBooleanBuilder>>;
|
|
608
614
|
};
|
|
609
615
|
/**
|
|
@@ -611,15 +617,15 @@ declare const queueControlColumns: () => {
|
|
|
611
617
|
*
|
|
612
618
|
* @since 0.2.0
|
|
613
619
|
*/
|
|
614
|
-
export declare const mqQueueControl: (tableName?: string, options?: MqTableOptions<ReturnType<typeof queueControlColumns
|
|
620
|
+
export declare const mqQueueControl: <Queue extends string = QueueName>(tableName?: string, options?: MqTableOptions<ReturnType<typeof queueControlColumns<Queue>>>) => import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
615
621
|
name: string;
|
|
616
622
|
schema: undefined;
|
|
617
623
|
columns: {
|
|
618
|
-
queue: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>,
|
|
624
|
+
queue: import("drizzle-orm/pg-core").PgBuildColumn<string, import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, Queue>, {
|
|
619
625
|
name: string;
|
|
620
626
|
tableName: string;
|
|
621
627
|
dataType: "string";
|
|
622
|
-
data:
|
|
628
|
+
data: Queue;
|
|
623
629
|
driverParam: string;
|
|
624
630
|
notNull: true;
|
|
625
631
|
hasDefault: false;
|
|
@@ -651,7 +657,7 @@ export declare const mqQueueControl: (tableName?: string, options?: MqTableOptio
|
|
|
651
657
|
/**
|
|
652
658
|
* @since 0.1.0
|
|
653
659
|
*/
|
|
654
|
-
export type MqJobsTable = ReturnType<typeof mqJobs<any>>;
|
|
660
|
+
export type MqJobsTable = ReturnType<typeof mqJobs<any, any>>;
|
|
655
661
|
/**
|
|
656
662
|
* @since 0.1.0
|
|
657
663
|
*/
|
|
@@ -659,14 +665,14 @@ export type MqJobAttemptsTable = ReturnType<typeof mqJobAttempts>;
|
|
|
659
665
|
/**
|
|
660
666
|
* @since 0.2.0
|
|
661
667
|
*/
|
|
662
|
-
export type MqSchedulesTable = ReturnType<typeof mqSchedules
|
|
668
|
+
export type MqSchedulesTable = ReturnType<typeof mqSchedules<any, any>>;
|
|
663
669
|
/**
|
|
664
670
|
* @since 0.2.0
|
|
665
671
|
*/
|
|
666
|
-
export type MqQueueControlTable = ReturnType<typeof mqQueueControl
|
|
672
|
+
export type MqQueueControlTable = ReturnType<typeof mqQueueControl<any>>;
|
|
667
673
|
/**
|
|
668
674
|
* @since 0.3.0
|
|
669
675
|
*/
|
|
670
|
-
export type MqDedupeTable = ReturnType<typeof mqDedupe
|
|
676
|
+
export type MqDedupeTable = ReturnType<typeof mqDedupe<any>>;
|
|
671
677
|
export {};
|
|
672
678
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/drizzle-postgres/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE/C,OAAO,EACL,KAAK,kBAAkB,EAMvB,KAAK,yBAAyB,EAE9B,KAAK,uBAAuB,EAI7B,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/drizzle-postgres/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,8 @@ const jobsColumns = () => ({
|
|
|
31
31
|
/**
|
|
32
32
|
* The jobs table factory. `JobName` types the `name` column — derive it from
|
|
33
33
|
* your job definitions: `mqJobs<typeof GenerateInvoice._tag | typeof Report._tag>()`.
|
|
34
|
+
* `Queue` types the `queue` column the same way — pass your own branded type
|
|
35
|
+
* or literal union (defaults to effect-mq's `QueueName` brand).
|
|
34
36
|
*
|
|
35
37
|
* `extend` adds your own columns (tenant ids, object ids, ...) to the table.
|
|
36
38
|
* At enqueue the Postgres store fills each extended column from the job's
|
|
@@ -97,7 +99,7 @@ export const mqJobAttempts = (jobs, tableName = "effect_mq_job_attempts", option
|
|
|
97
99
|
]);
|
|
98
100
|
const schedulesColumns = () => ({
|
|
99
101
|
key: text("key").primaryKey().$type(),
|
|
100
|
-
jobName: text("job_name").notNull(),
|
|
102
|
+
jobName: text("job_name").notNull().$type(),
|
|
101
103
|
queue: text("queue").notNull().$type(),
|
|
102
104
|
cron: text("cron"),
|
|
103
105
|
tz: text("tz"),
|
|
@@ -114,6 +116,9 @@ const schedulesColumns = () => ({
|
|
|
114
116
|
/**
|
|
115
117
|
* Repeatable-job schedules (one row per `Job.schedule` key).
|
|
116
118
|
*
|
|
119
|
+
* `JobName` and `Queue` type the `jobName`/`queue` columns, exactly like
|
|
120
|
+
* `mqJobs` (both default to plain string / effect-mq's `QueueName` brand).
|
|
121
|
+
*
|
|
117
122
|
* @since 0.2.0
|
|
118
123
|
*/
|
|
119
124
|
export const mqSchedules = (tableName = "effect_mq_schedules", options) => pgTable(tableName, schedulesColumns(), (table) => [
|
|
@@ -121,7 +126,7 @@ export const mqSchedules = (tableName = "effect_mq_schedules", options) => pgTab
|
|
|
121
126
|
...options?.extraConfig?.(table) ?? []
|
|
122
127
|
]);
|
|
123
128
|
const dedupeColumns = () => ({
|
|
124
|
-
name: text("name").notNull(),
|
|
129
|
+
name: text("name").notNull().$type(),
|
|
125
130
|
key: text("key").notNull(),
|
|
126
131
|
jobId: text("job_id").notNull().$type(),
|
|
127
132
|
/** Set for ttl/throttle windows; NULL rows live as long as their job is pending. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/drizzle-postgres/schema.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAEL,MAAM,EACN,OAAO,EACP,KAAK,EACL,OAAO,EACP,KAAK,EAEL,OAAO,EAEP,UAAU,EACV,IAAI,EACJ,SAAS,EACV,MAAM,qBAAqB,CAAA;AAwB5B,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/drizzle-postgres/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-mq",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Effect-native background jobs: schema-first definitions, storage-agnostic queue core, worker runtime, and a Postgres store through drizzle.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Adam Rankin",
|
|
@@ -70,10 +70,10 @@ export interface MqTableOptions<Columns extends Record<string, AnyPgColumnBuilde
|
|
|
70
70
|
| undefined
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
const jobsColumns = <JobName extends string>() => ({
|
|
73
|
+
const jobsColumns = <JobName extends string, Queue extends string>() => ({
|
|
74
74
|
id: text("id").primaryKey().$type<JobId>(),
|
|
75
75
|
name: text("name").notNull().$type<JobName>(),
|
|
76
|
-
queue: text("queue").notNull().$type<
|
|
76
|
+
queue: text("queue").notNull().$type<Queue>(),
|
|
77
77
|
state: text("state").notNull().$type<JobState>(),
|
|
78
78
|
priority: integer("priority").notNull().default(0),
|
|
79
79
|
/** FIFO order within a priority; bumped on retry so retries go to the tail. */
|
|
@@ -102,6 +102,8 @@ const jobsColumns = <JobName extends string>() => ({
|
|
|
102
102
|
/**
|
|
103
103
|
* The jobs table factory. `JobName` types the `name` column — derive it from
|
|
104
104
|
* your job definitions: `mqJobs<typeof GenerateInvoice._tag | typeof Report._tag>()`.
|
|
105
|
+
* `Queue` types the `queue` column the same way — pass your own branded type
|
|
106
|
+
* or literal union (defaults to effect-mq's `QueueName` brand).
|
|
105
107
|
*
|
|
106
108
|
* `extend` adds your own columns (tenant ids, object ids, ...) to the table.
|
|
107
109
|
* At enqueue the Postgres store fills each extended column from the job's
|
|
@@ -124,16 +126,17 @@ const jobsColumns = <JobName extends string>() => ({
|
|
|
124
126
|
*/
|
|
125
127
|
export const mqJobs = <
|
|
126
128
|
JobName extends string = string,
|
|
129
|
+
Queue extends string = QueueName,
|
|
127
130
|
Extend extends Record<string, AnyPgColumnBuilder> = Record<never, never>
|
|
128
131
|
>(
|
|
129
132
|
tableName = "effect_mq_jobs",
|
|
130
|
-
options?: MqTableOptions<ReturnType<typeof jobsColumns<JobName>> & Extend> & {
|
|
133
|
+
options?: MqTableOptions<ReturnType<typeof jobsColumns<JobName, Queue>> & Extend> & {
|
|
131
134
|
/** Extra columns appended to the factory's own (see the JSDoc example). */
|
|
132
135
|
readonly extend?: Extend | undefined
|
|
133
136
|
}
|
|
134
137
|
) =>
|
|
135
138
|
pgTable(tableName, {
|
|
136
|
-
...jobsColumns<JobName>(),
|
|
139
|
+
...jobsColumns<JobName, Queue>(),
|
|
137
140
|
// SAFETY: when `extend` is absent, `Extend` was never inferred from a
|
|
138
141
|
// value and stays at its empty-record default, which {} satisfies.
|
|
139
142
|
...options?.extend ?? ({} as Extend)
|
|
@@ -175,7 +178,7 @@ const attemptsColumns = (jobs: MqJobsTable) => ({
|
|
|
175
178
|
* @since 0.1.0
|
|
176
179
|
*/
|
|
177
180
|
export const mqJobAttempts = (
|
|
178
|
-
jobs:
|
|
181
|
+
jobs: MqJobsTable,
|
|
179
182
|
tableName = "effect_mq_job_attempts",
|
|
180
183
|
options?: MqTableOptions<ReturnType<typeof attemptsColumns>>
|
|
181
184
|
) =>
|
|
@@ -184,10 +187,10 @@ export const mqJobAttempts = (
|
|
|
184
187
|
...options?.extraConfig?.(table) ?? []
|
|
185
188
|
])
|
|
186
189
|
|
|
187
|
-
const schedulesColumns = () => ({
|
|
190
|
+
const schedulesColumns = <JobName extends string, Queue extends string>() => ({
|
|
188
191
|
key: text("key").primaryKey().$type<ScheduleKey>(),
|
|
189
|
-
jobName: text("job_name").notNull(),
|
|
190
|
-
queue: text("queue").notNull().$type<
|
|
192
|
+
jobName: text("job_name").notNull().$type<JobName>(),
|
|
193
|
+
queue: text("queue").notNull().$type<Queue>(),
|
|
191
194
|
cron: text("cron"),
|
|
192
195
|
tz: text("tz"),
|
|
193
196
|
everyMs: bigint("every_ms", { mode: "number" }),
|
|
@@ -204,19 +207,22 @@ const schedulesColumns = () => ({
|
|
|
204
207
|
/**
|
|
205
208
|
* Repeatable-job schedules (one row per `Job.schedule` key).
|
|
206
209
|
*
|
|
210
|
+
* `JobName` and `Queue` type the `jobName`/`queue` columns, exactly like
|
|
211
|
+
* `mqJobs` (both default to plain string / effect-mq's `QueueName` brand).
|
|
212
|
+
*
|
|
207
213
|
* @since 0.2.0
|
|
208
214
|
*/
|
|
209
|
-
export const mqSchedules = (
|
|
215
|
+
export const mqSchedules = <JobName extends string = string, Queue extends string = QueueName>(
|
|
210
216
|
tableName = "effect_mq_schedules",
|
|
211
|
-
options?: MqTableOptions<ReturnType<typeof schedulesColumns
|
|
217
|
+
options?: MqTableOptions<ReturnType<typeof schedulesColumns<JobName, Queue>>>
|
|
212
218
|
) =>
|
|
213
|
-
pgTable(tableName, schedulesColumns(), (table) => [
|
|
219
|
+
pgTable(tableName, schedulesColumns<JobName, Queue>(), (table) => [
|
|
214
220
|
index(`${tableName}_due_idx`).on(table.nextRunAt),
|
|
215
221
|
...options?.extraConfig?.(table) ?? []
|
|
216
222
|
])
|
|
217
223
|
|
|
218
|
-
const dedupeColumns = () => ({
|
|
219
|
-
name: text("name").notNull(),
|
|
224
|
+
const dedupeColumns = <JobName extends string>() => ({
|
|
225
|
+
name: text("name").notNull().$type<JobName>(),
|
|
220
226
|
key: text("key").notNull(),
|
|
221
227
|
jobId: text("job_id").notNull().$type<JobId>(),
|
|
222
228
|
/** Set for ttl/throttle windows; NULL rows live as long as their job is pending. */
|
|
@@ -228,17 +234,17 @@ const dedupeColumns = () => ({
|
|
|
228
234
|
*
|
|
229
235
|
* @since 0.3.0
|
|
230
236
|
*/
|
|
231
|
-
export const mqDedupe = (
|
|
237
|
+
export const mqDedupe = <JobName extends string = string>(
|
|
232
238
|
tableName = "effect_mq_dedupe",
|
|
233
|
-
options?: MqTableOptions<ReturnType<typeof dedupeColumns
|
|
239
|
+
options?: MqTableOptions<ReturnType<typeof dedupeColumns<JobName>>>
|
|
234
240
|
) =>
|
|
235
|
-
pgTable(tableName, dedupeColumns(), (table) => [
|
|
241
|
+
pgTable(tableName, dedupeColumns<JobName>(), (table) => [
|
|
236
242
|
primaryKey({ columns: [table.name, table.key] }),
|
|
237
243
|
...options?.extraConfig?.(table) ?? []
|
|
238
244
|
])
|
|
239
245
|
|
|
240
|
-
const queueControlColumns = () => ({
|
|
241
|
-
queue: text("queue").primaryKey().$type<
|
|
246
|
+
const queueControlColumns = <Queue extends string>() => ({
|
|
247
|
+
queue: text("queue").primaryKey().$type<Queue>(),
|
|
242
248
|
paused: boolean("paused").notNull().default(false)
|
|
243
249
|
})
|
|
244
250
|
|
|
@@ -247,18 +253,18 @@ const queueControlColumns = () => ({
|
|
|
247
253
|
*
|
|
248
254
|
* @since 0.2.0
|
|
249
255
|
*/
|
|
250
|
-
export const mqQueueControl = (
|
|
256
|
+
export const mqQueueControl = <Queue extends string = QueueName>(
|
|
251
257
|
tableName = "effect_mq_queue_control",
|
|
252
|
-
options?: MqTableOptions<ReturnType<typeof queueControlColumns
|
|
258
|
+
options?: MqTableOptions<ReturnType<typeof queueControlColumns<Queue>>>
|
|
253
259
|
) =>
|
|
254
|
-
pgTable(tableName, queueControlColumns(), (table) => [
|
|
260
|
+
pgTable(tableName, queueControlColumns<Queue>(), (table) => [
|
|
255
261
|
...options?.extraConfig?.(table) ?? []
|
|
256
262
|
])
|
|
257
263
|
|
|
258
264
|
/**
|
|
259
265
|
* @since 0.1.0
|
|
260
266
|
*/
|
|
261
|
-
export type MqJobsTable = ReturnType<typeof mqJobs<any>>
|
|
267
|
+
export type MqJobsTable = ReturnType<typeof mqJobs<any, any>>
|
|
262
268
|
|
|
263
269
|
/**
|
|
264
270
|
* @since 0.1.0
|
|
@@ -268,14 +274,14 @@ export type MqJobAttemptsTable = ReturnType<typeof mqJobAttempts>
|
|
|
268
274
|
/**
|
|
269
275
|
* @since 0.2.0
|
|
270
276
|
*/
|
|
271
|
-
export type MqSchedulesTable = ReturnType<typeof mqSchedules
|
|
277
|
+
export type MqSchedulesTable = ReturnType<typeof mqSchedules<any, any>>
|
|
272
278
|
|
|
273
279
|
/**
|
|
274
280
|
* @since 0.2.0
|
|
275
281
|
*/
|
|
276
|
-
export type MqQueueControlTable = ReturnType<typeof mqQueueControl
|
|
282
|
+
export type MqQueueControlTable = ReturnType<typeof mqQueueControl<any>>
|
|
277
283
|
|
|
278
284
|
/**
|
|
279
285
|
* @since 0.3.0
|
|
280
286
|
*/
|
|
281
|
-
export type MqDedupeTable = ReturnType<typeof mqDedupe
|
|
287
|
+
export type MqDedupeTable = ReturnType<typeof mqDedupe<any>>
|