Socket
Socket
Sign inDemoInstall

graphile-worker-zod

Package Overview
Dependencies
94
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    graphile-worker-zod

A group of simple utilities that make working with the already joyous [graphile-worker](https://github.com/graphile/worker) that much easier and safer.


Version published
Weekly downloads
127
increased by182.22%
Maintainers
1
Install size
5.24 kB
Created
Weekly downloads
 

Readme

Source

graphile-worker-zod

A group of simple utilities that make working with the already joyous graphile-worker that much easier and safer.

It adds typed and validated tasks and addJob functions.

Usage

// worker.ts
import { createTask, createTaskList, AddJobFn } from 'graphile-worker-zod';
import { run, TaskList } from 'graphile-worker';
import { z } from 'zod'

const sendEmail = createTask(
  z.object({
    email: z.string().email(),
  }),
  async (payload, jobHelpers) => {
    // payload is typed as { email: string }
    // send email
  }
)

const taskList = {
  sendEmail,
} as const; // you need this as const declaration!!!

let runner: Runner;

export const startWorker = async () => {
  runner = await run({
    pgPool: pool // definition not shown,
    taskList: taskList as TaskList // cast required because type has extra info graphile-worker doesn't want
  })
}

export const addJob: AddJobFn<typeof TaskList> = async (taskName, payload) => {
  if (!runner) {
    throw new Error('Add job called before worker started');
  }

  return runner.addJob(taskName, payload);
}

Then, when you call startWorker() in some application start up script, you can get a fully typed addJob function and jobs that validate their own inputs before your task code executes.

Motivation

It's better for a job to fail than for unknown behavior to happen.

Although with the typed addJob function it's relatively easy to ensure your input is correct, it's still possible to queue jobs incorrectly, especially when using the graphile_worker.add_job function in the database.

Note

Note that there is no Zod based validation on the addJob function itself. This is just an opinion: it's better for whatever data is recorded in the job payload to be written, and for the job to fail, than for the job to not be queued.

FAQs

Last updated on 21 Jan 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc