Skip to content

"Could not find a declaration file for module '@mgcrea/prisma-queue'."Β #13

@sunweiyang

Description

@sunweiyang

I have a Node.js Prisma project that uses TypeScript. When I updated @mgcrea/prisma-queue from 1.12.0 to 1.12.1, I got the following TS error:

Could not find a declaration file for module '@mgcrea/prisma-queue'.  '/Users/****/****/node_modules/.pnpm/@m
[email protected]_@[email protected]/node_modules/@mgcrea/prisma-queue/dist/index.cjs' implicitly has an 
'any' type.

To resolve this, I had to create my own mgcrea-prisma-queue.d.ts file, but it's not ideal. Here it is, both for reference and as potential inspiration for patching?

declare module "@mgcrea/prisma-queue" {
  import { PrismaClient } from "@prisma/client";

  export interface QueueJob<TPayload = any, TResult = any> {
    id: string;
    name: string;
    payload: TPayload;
    result?: TResult;
    status: "pending" | "running" | "completed" | "failed";
    createdAt: Date;
    updatedAt: Date;
    startedAt?: Date;
    completedAt?: Date;
    failedAt?: Date;
    error?: string;
    attempts: number;
    maxAttempts: number;
  }

  export interface QueueOptions {
    name: string;
    maxAttempts?: number;
    pollInterval?: number;
    jobInterval?: number;
    backoff?: {
      type: "exponential" | "fixed";
      delay: number;
    };
  }

  export interface ScheduleOptions {
    key: string;
    cron: string;
  }

  export interface EnqueueOptions {
    key?: string;
    runAt?: Date;
    maxAttempts?: number;
  }

  export interface Queue<TPayload = any, TResult = any> {
    name: string;
    push(payload: TPayload): Promise<QueueJob<TPayload, TResult>>;
    enqueue(
      payload: TPayload,
      options?: EnqueueOptions
    ): Promise<QueueJob<TPayload, TResult>>;
    schedule(options: ScheduleOptions, payload: TPayload): Promise<void>;
    start(prismaClient?: PrismaClient): Promise<void>;
    process(
      prismaClient: PrismaClient,
      options?: { concurrency?: number }
    ): Promise<void>;
    stop(): Promise<void>;
  }

  export function createQueue<TPayload = any, TResult = any>(
    options: QueueOptions,
    handler: (
      job: QueueJob<TPayload, TResult>,
      prismaClient: PrismaClient
    ) => Promise<TResult>
  ): Queue<TPayload, TResult>;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions