Provide rollback for transactional operations
npm install @kitsuyui/intended-rollbackProvide intended rollback feature for testing.
``sh`
$ npm install @kitsuyui/intended-rollback
`sh`
$ yarn add @kitsuyui/intended-rollback
`sh`
$ pnpm add @kitsuyui/intended-rollback
Following example is for prisma. But you can use this library for any other libraries.
`typescript
import { Prisma, PrismaClient } from '...'
import { intendedRollback } from '@kitsuyui/intended-rollback'
export const prismaIntendedRollback = async
prisma: PrismaClient,
rollback: boolean,
innerBlock: (prisma: Prisma.TransactionClient) => Promise
): Promise
const wrapped = wrapWithRollback
async (prisma, callback) => await prisma.$transaction(callback),
)
return await wrapped(prisma, rollback, innerBlock)
}
`
`typescript
import { Prisma, PrismaClient } from '...'
import { prismaIntendedRollback } from '...'
const rollback = process.env.NODE_ENV === 'test'
const result = await prismaIntendedRollback(
prisma,
rollback,
async (prisma) => await createUser(prisma, { email, password }),
)
if (result.success) {
const user = result.content
console.log(User created successfully. ID: ${user.id})``
if (result.rollback.intended) {
console.log(
'Rollback for testing purposes. No actual data changes were made.',
)
}
} else {
// When the error is not from this library, you can throw it.
throw result.error
}
MIT