DavidHancu / prisma-util

Merge multiple Prisma schema files, model inheritance, resolving name conflicts and timings reports, all in a simple tool.
Apache License 2.0
41 stars 1 forks source link

Middleware Context API - Accepted Proposal #6

Closed DavidHancu closed 1 year ago

DavidHancu commented 1 year ago

Scope

The aim of this proposal is to provide a sneak-peek for the new feature that will be added to Prisma Util v2.0. In this issue, I'll be outlining the process of how Middleware Context can be used for passing down metadata to middleware.

Introduction

This feature will be released under the middlewareContext flag and will require manual activation. Because this feature uses Project Toolchain's Generation API, it will create the typings necessary for configuring context.

Code Example

prisma.user.findMany({
    where: {
        name: "David"
    },
    // The new Context API
    context: {
        anyKey: "anyValue",
        anotherKey: 2
    }
});

Then, in your middleware:

const middleware = async (params, next) => {
    if(params.args.context && params.args.context.anotherKey == 2)
    {
        // do something
    }
    return next(params);
}

Middleware

This feature makes use of Project Toolchain's Middleware API and defines a middleware called contextRemover. To use it, you have to import it like this and add it to your Prisma middleware chain:

import contextRemover from "prisma-util/toolchain/middleware/middlewareContext";
prisma.$use(contextRemover(prisma));

And that's it! Now everything will function correctly whenever you create a new model.

Caveat

This context remover middleware must be the last one in the chain, otherwise you'll be removing the context from further middleware. This must be done to ensure that the context parameter isn't sent to Prisma.

DavidHancu commented 1 year ago

Feature implemented.