Skip to content

Commit 50e8dc3

Browse files
committed
organization
1 parent 1fb25d4 commit 50e8dc3

10 files changed

Lines changed: 58 additions & 82 deletions

File tree

src/adapters/mongoose.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,7 @@ export function createQueueModel(
251251
export const QueueJob = createQueueModel();
252252

253253
// Re-export for convenience
254-
export { DbQueue };
254+
export { DbQueue };
255+
256+
// Re-export job interface for Mongoose adapter
257+
export type { MongooseJobRequest } from '../interfaces/job.ts';

src/drivers/db.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import type { JobStatus, JobMeta, QueueMessage, DbJobRequest } from '../interfac
33
import type { DatabaseAdapter, QueueJobRecord } from '../interfaces/database.ts';
44
import type { QueueOptions } from '../interfaces/plugin.ts';
55

6+
// Re-export job interface for this driver
7+
export type { DbJobRequest } from '../interfaces/job.ts';
8+
69
export class DbQueue<TJobMap = Record<string, any>> extends Queue<TJobMap, DbJobRequest<any>> {
710
constructor(
811
private db: DatabaseAdapter,

src/drivers/file.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import { promises as fs } from 'fs';
22
import { open } from 'fs/promises';
33
import path from 'path';
4-
import { Queue } from '../core/queue.js';
5-
import type { QueueMessage, JobMeta, JobStatus, FileJobRequest } from '../interfaces/job.js';
6-
import type { QueueOptions } from '../interfaces/plugin.js';
4+
import { Queue } from '../core/queue.ts';
5+
import type { QueueMessage, JobMeta, JobStatus, FileJobRequest } from '../interfaces/job.ts';
6+
import type { QueueOptions } from '../interfaces/plugin.ts';
7+
8+
// Re-export job interface for this driver
9+
export type { FileJobRequest } from '../interfaces/job.ts';
710

811
interface IndexData {
912
lastId: number;

src/drivers/memory.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import { Queue } from '../core/queue.ts';
22
import type { JobStatus, JobMeta, QueueMessage, InMemoryJobRequest } from '../interfaces/job.ts';
33
import type { QueueOptions } from '../interfaces/plugin.ts';
44

5+
// Re-export job interface for this driver
6+
export type { InMemoryJobRequest } from '../interfaces/job.ts';
7+
58
interface InMemoryJobRecord {
69
id: string;
710
payload: string;

src/drivers/redis.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { Queue } from '../core/queue.ts';
2-
import type { JobStatus, JobMeta, QueueMessage } from '../interfaces/job.ts';
2+
import type { JobStatus, JobMeta, QueueMessage, RedisJobRequest } from '../interfaces/job.ts';
33
import type { QueueOptions } from '../interfaces/plugin.ts';
44

5+
// Re-export job interface for this driver
6+
export type { RedisJobRequest } from '../interfaces/job.ts';
7+
58

69
// Type-safe interface for Redis client based on the popular 'redis' npm package
710
export interface RedisClient {
@@ -36,7 +39,7 @@ export interface RedisClient {
3639
}
3740

3841

39-
export class RedisQueue<TJobMap = Record<string, any>> extends Queue<TJobMap> {
42+
export class RedisQueue<TJobMap = Record<string, any>> extends Queue<TJobMap, RedisJobRequest<any>> {
4043
private messagesKey: string;
4144
private waitingKey: string;
4245
private delayedKey: string;

src/drivers/sqs.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ import type {
1818
} from "../interfaces/job.ts";
1919
import type { QueueOptions } from "../interfaces/plugin.ts";
2020

21+
// Re-export job interface for this driver
22+
export type { SqsJobRequest } from "../interfaces/job.ts";
23+
2124
interface SqsClient {
2225
send: SQSClient["send"];
2326
}

src/index.ts

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,3 @@
1-
export { Queue } from './core/queue.ts';
2-
3-
export type {
4-
JobStatus,
5-
JobMeta,
6-
QueueMessage,
7-
QueueEvent,
8-
JobData,
9-
BaseJobRequest,
10-
BaseJobOptions,
11-
DbJobRequest,
12-
DbJobOptions,
13-
SqsJobRequest,
14-
SqsJobOptions,
15-
FileJobRequest,
16-
FileJobOptions,
17-
InMemoryJobRequest,
18-
InMemoryJobOptions
19-
} from './interfaces/job.ts';
20-
21-
export type {
22-
DatabaseAdapter,
23-
QueueJobRecord
24-
} from './interfaces/database.ts';
25-
26-
27-
export { DbQueue } from './drivers/db.ts';
28-
export { FileQueue } from './drivers/file.ts';
29-
export { InMemoryQueue } from './drivers/memory.ts';
30-
31-
// Mongoose adapter exports
32-
export {
33-
MongooseQueue,
34-
createMongooseQueue,
35-
createQueueModel,
36-
QueueJob,
37-
MongooseDatabaseAdapter,
38-
QueueJobSchema
39-
} from './adapters/mongoose.ts';
40-
export type { IQueueJob } from './adapters/mongoose.ts';
1+
// This file intentionally left empty
2+
// Import directly from specific modules instead of using barrel exports
3+
// Example: import { Queue } from './core/queue.ts';

src/interfaces/job.ts

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -78,73 +78,68 @@ export interface BaseJobOptions {
7878
ttr?: number;
7979
}
8080

81-
// Full options interface (for internal use)
82-
export interface JobOptions extends BaseJobOptions {
83-
/** Number of seconds to delay job execution from now */
84-
delaySeconds?: number;
81+
// Feature interfaces for composable job options
82+
export interface WithPriority {
8583
/** Job priority - higher numbers = higher priority (processed first) */
8684
priority?: number;
8785
}
8886

89-
// Driver-specific options interfaces (without payload)
90-
export interface DbJobOptions extends BaseJobOptions {
91-
// DB adapters may or may not support delay/priority - we allow them for flexibility
92-
// The specific DatabaseAdapter implementation determines actual support
93-
/** Number of seconds to delay job execution from now. Support varies by database adapter. */
87+
export interface WithDelay {
88+
/** Number of seconds to delay job execution from now */
9489
delaySeconds?: number;
95-
/** Job priority - higher numbers = higher priority. Support varies by database adapter. */
96-
priority?: number;
9790
}
9891

99-
export interface SqsJobOptions extends BaseJobOptions {
100-
/** Number of seconds to delay job execution from now (0-900 seconds max for SQS) */
101-
delaySeconds?: number;
102-
}
92+
// Full options interface (for internal use)
93+
export interface JobOptions extends BaseJobOptions, WithPriority, WithDelay {}
10394

104-
export interface FileJobOptions extends BaseJobOptions {
105-
/** Number of seconds to delay job execution from now */
106-
delaySeconds?: number;
95+
96+
export interface JobRequestFull<TPayload> extends BaseJobOptions, WithPriority, WithDelay {
97+
/** Job payload */
98+
payload: TPayload;
10799
}
108100

109-
export interface InMemoryJobOptions extends BaseJobOptions {
110-
/** Number of seconds to delay job execution from now */
111-
delaySeconds?: number;
112-
/** Job priority - higher numbers = higher priority (processed first) */
113-
priority?: number;
101+
// Driver-specific job request interfaces using feature composition
102+
// Each interface defines what features the driver supports
103+
104+
export interface BaseJobRequest<TPayload> extends BaseJobOptions {
105+
/** Job payload */
106+
payload: TPayload;
114107
}
115108

116-
export interface JobRequestFull<TPayload> extends BaseJobOptions {
117-
/** Job priority - higher numbers = higher priority (processed first) */
118-
priority?: number;
119-
/** Job delay - number of seconds to delay job execution from now */
120-
delaySeconds?: number;
109+
export interface DbJobRequest<TPayload> extends BaseJobOptions, WithPriority, WithDelay {
121110
/** Job payload */
122111
payload: TPayload;
112+
// DB adapters may or may not support delay/priority - we allow them for flexibility
113+
// The specific DatabaseAdapter implementation determines actual support
123114
}
124115

125-
// Combined interfaces that include payload for the new API
126-
export interface BaseJobRequest<TPayload> extends BaseJobOptions {
116+
export interface SqsJobRequest<TPayload> extends BaseJobOptions, WithDelay {
127117
/** Job payload */
128118
payload: TPayload;
119+
// SQS supports delays (0-900 seconds max) but not priority ordering
129120
}
130121

131-
export interface DbJobRequest<TPayload> extends DbJobOptions {
122+
export interface FileJobRequest<TPayload> extends BaseJobOptions, WithDelay {
132123
/** Job payload */
133124
payload: TPayload;
125+
// File queue supports delays but not priority ordering
134126
}
135127

136-
export interface SqsJobRequest<TPayload> extends SqsJobOptions {
128+
export interface InMemoryJobRequest<TPayload> extends BaseJobOptions, WithPriority, WithDelay {
137129
/** Job payload */
138130
payload: TPayload;
131+
// In-memory queue supports both priority and delays
139132
}
140133

141-
export interface FileJobRequest<TPayload> extends FileJobOptions {
134+
export interface RedisJobRequest<TPayload> extends BaseJobOptions, WithPriority, WithDelay {
142135
/** Job payload */
143136
payload: TPayload;
137+
// Redis queue supports both priority and delays
144138
}
145139

146-
export interface InMemoryJobRequest<TPayload> extends InMemoryJobOptions {
140+
export interface MongooseJobRequest<TPayload> extends BaseJobOptions, WithPriority, WithDelay {
147141
/** Job payload */
148142
payload: TPayload;
143+
// Mongoose/MongoDB queue supports both priority and delays
149144
}
150145

tests/all-queues.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ const drivers: Array<() => Promise<QueueDriverConfig> | QueueDriverConfig> = [
173173
name: "SqsQueue",
174174
features: {
175175
supportsPriority: false, // SQS doesn't support priority ordering
176-
supportsDelayedJobs: true, // ElasticMQ supports DelaySeconds
176+
supportsDelayedJobs: true,
177177
supportsStatus: false, // SQS doesn't support status queries
178178
},
179179
beforeAll: async () => {

tests/jobs/test-job.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Queue } from '../../src/index.ts';
1+
import type { Queue } from '../../src/core/queue.ts';
22

33
// Simple test job handler functions (not classes)
44
export const simpleJobHandler = async (payload: { data: string }): Promise<string> => {

0 commit comments

Comments
 (0)