@lokalise/prisma-utils 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/prismaError.ts","../src/prismaTransaction.ts"],"sourcesContent":["import { PrismaClientKnownRequestError } from '@prisma/client/runtime/library'\nimport { isError } from '@lokalise/node-core'\n\n/**\n * What is checked?\n * \t1. error is defined and not null\n * \t2. error is an `Error`\n * \t3. error contains the field code which is a string\n * \t4. code starts by `P` ([doc](https://www.prisma.io/docs/reference/api-reference/error-reference#error-codes))\n */\nexport const isPrismaClientKnownRequestError = (\n\terror: unknown,\n): error is PrismaClientKnownRequestError =>\n\t!!error &&\n\tisError(error) &&\n\t'code' in error &&\n\ttypeof error.code === 'string' &&\n\terror.code.startsWith('P')\n\n/*\n * Prisma error code P2025 indicates that the operation failed because it depends on one or more\n * records that were required but not found\n */\nexport const PRISMA_NOT_FOUND_ERROR = 'P2025'\n\n/*\n * Prisma error code P2034 indicates a serialization error and that the transaction must be retried.\n * A different error code would indicate that an internal state error happened and that\n * the cluster itself is experiencing an issue which requires intervention\n */\nexport const PRISMA_SERIALIZATION_ERROR = 'P2034'\n\n/*\n * Prisma error code P2002 indicates that the operation failed because a unique constraint was\n * violated. This can happen if you try to create a record with a unique field that already exists\n */\nexport const PRISMA_UNIQUE_CONSTRAINT_ERROR = 'P2002'\n","import type { Either } from '@lokalise/node-core'\n\nimport type { PrismaClient, Prisma } from '@prisma/client'\nimport type * as runtime from '@prisma/client/runtime/library'\n\nimport { isPrismaClientKnownRequestError, PRISMA_SERIALIZATION_ERROR } from './prismaError'\nimport type { Types } from '@prisma/client/runtime/library'\n\nexport type PrismaTransactionOptions = {\n\tretriesAllowed: number\n\tmaxWait?: number\n\ttimeout?: number\n\tisolationLevel?: string\n}\n\nexport type PrismaTransactionBasicOptions = Pick<\n\tPrismaTransactionOptions,\n\t'retriesAllowed' | 'isolationLevel'\n>\n\nexport type PrismaTransactionClient = Omit<PrismaClient, runtime.ITXClientDenyList>\n\nexport type PrismaTransactionFn<T> = (prisma: PrismaTransactionClient) => Promise<T>\n\ntype PrismaTransactionReturnType<T> = Either<\n\tunknown,\n\tT | Types.Utils.UnwrapTuple<Prisma.PrismaPromise<unknown>[]>\n>\n\n/**\n * Perform a Prisma DB transaction with automatic retries if needed.\n *\n * @template T | T extends Prisma.PrismaPromise<unknown>[]\n * @param {PrismaClient} prisma\n * @param {PrismaTransactionFn<T> | Prisma.PrismaPromise<unknown>[]} arg\t\t operation to perform into the transaction\n * @param {PrismaTransactionOptions | PrismaTransactionBasicOptions} options transaction configuration\n * @return {Promise<PrismaTransactionReturnType<T>>}\n */\nexport const prismaTransaction = (async <T>(\n\tprisma: PrismaClient,\n\targ: PrismaTransactionFn<T>,\n\toptions: PrismaTransactionOptions = { retriesAllowed: 3 },\n): Promise<PrismaTransactionReturnType<T>> => {\n\tlet result: PrismaTransactionReturnType<T> | undefined = undefined\n\n\tlet retries = 0\n\twhile (retries < options.retriesAllowed) {\n\t\tresult = await executeTransactionTry(prisma, arg, options)\n\n\t\tif (\n\t\t\tresult.result ||\n\t\t\t!isPrismaClientKnownRequestError(result.error) ||\n\t\t\tresult.error.code !== PRISMA_SERIALIZATION_ERROR\n\t\t) {\n\t\t\tbreak\n\t\t}\n\n\t\tretries++\n\t}\n\n\treturn result ?? { error: new Error('No transaction retry executed') }\n}) as {\n\t<T>(\n\t\tprisma: PrismaClient,\n\t\tfn: PrismaTransactionFn<T>,\n\t\toptions?: PrismaTransactionOptions,\n\t): Promise<Either<unknown, T>>\n\t<T extends Prisma.PrismaPromise<unknown>[]>(\n\t\tprisma: PrismaClient,\n\t\targs: [...T],\n\t\toptions?: PrismaTransactionBasicOptions,\n\t): Promise<Either<unknown, runtime.Types.Utils.UnwrapTuple<T>>>\n}\n\nconst executeTransactionTry = async <T>(\n\tprisma: PrismaClient,\n\targ: PrismaTransactionFn<T>,\n\toptions: PrismaTransactionOptions,\n): Promise<PrismaTransactionReturnType<T>> => {\n\ttry {\n\t\treturn {\n\t\t\t// @ts-ignore\n\t\t\tresult: await prisma.$transaction<T>(arg, options),\n\t\t}\n\t} catch (error) {\n\t\treturn { error }\n\t}\n}\n"],"names":["isPrismaClientKnownRequestError","error","isError","PRISMA_NOT_FOUND_ERROR","PRISMA_SERIALIZATION_ERROR","PRISMA_UNIQUE_CONSTRAINT_ERROR","prismaTransaction","prisma","arg","options","result","retries","executeTransactionTry"],"mappings":"uHAUaA,EACZC,GAEA,CAAC,CAACA,GACFC,UAAQD,CAAK,GACb,SAAUA,GACV,OAAOA,EAAM,MAAS,UACtBA,EAAM,KAAK,WAAW,GAAG,EAMbE,EAAyB,QAOzBC,EAA6B,QAM7BC,EAAiC,QCEjCC,EAAqB,MACjCC,EACAC,EACAC,EAAoC,CAAE,eAAgB,KACT,CAC7C,IAAIC,EAEAC,EAAU,EACP,KAAAA,EAAUF,EAAQ,iBACxBC,EAAS,MAAME,EAAsBL,EAAQC,EAAKC,CAAO,EAGxD,EAAAC,EAAO,QACP,CAACV,EAAgCU,EAAO,KAAK,GAC7CA,EAAO,MAAM,OAASN,KAKvBO,IAGD,OAAOD,GAAU,CAAE,MAAO,IAAI,MAAM,+BAA+B,CAAE,CACtE,EAaME,EAAwB,MAC7BL,EACAC,EACAC,IAC6C,CACzC,GAAA,CACI,MAAA,CAEN,OAAQ,MAAMF,EAAO,aAAgBC,EAAKC,CAAO,CAAA,QAE1CR,EAAO,CACf,MAAO,CAAE,MAAAA,CAAM,CAChB,CACD"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/prismaError.ts","../src/prismaTransaction.ts"],"sourcesContent":["import { isError } from '@lokalise/node-core'\nimport type { PrismaClientKnownRequestError } from '@prisma/client/runtime/library'\n\n/**\n * What is checked?\n * \t1. error is defined and not null\n * \t2. error is an `Error`\n * \t3. error contains the field code which is a string\n * \t4. code starts by `P` ([doc](https://www.prisma.io/docs/reference/api-reference/error-reference#error-codes))\n */\nexport const isPrismaClientKnownRequestError = (\n\terror: unknown,\n): error is PrismaClientKnownRequestError =>\n\t!!error &&\n\tisError(error) &&\n\t'code' in error &&\n\ttypeof error.code === 'string' &&\n\terror.code.startsWith('P')\n\n/*\n * Prisma error code P2025 indicates that the operation failed because it depends on one or more\n * records that were required but not found\n */\nexport const PRISMA_NOT_FOUND_ERROR = 'P2025'\n\n/*\n * Prisma error code P2034 indicates a serialization error and that the transaction must be retried.\n * A different error code would indicate that an internal state error happened and that\n * the cluster itself is experiencing an issue which requires intervention\n */\nexport const PRISMA_SERIALIZATION_ERROR = 'P2034'\n\n/*\n * Prisma error code P2002 indicates that the operation failed because a unique constraint was\n * violated. This can happen if you try to create a record with a unique field that already exists\n */\nexport const PRISMA_UNIQUE_CONSTRAINT_ERROR = 'P2002'\n","import type { Either } from '@lokalise/node-core'\nimport type { PrismaClient, Prisma } from '@prisma/client'\nimport type * as runtime from '@prisma/client/runtime/library'\n\nimport { isPrismaClientKnownRequestError, PRISMA_SERIALIZATION_ERROR } from './prismaError'\n\nexport type PrismaTransactionOptions = {\n\tretriesAllowed: number\n\tmaxWait?: number\n\ttimeout?: number\n\tisolationLevel?: string\n}\n\nexport type PrismaTransactionBasicOptions = Pick<\n\tPrismaTransactionOptions,\n\t'retriesAllowed' | 'isolationLevel'\n>\n\nexport type PrismaTransactionClient<P> = Omit<P, runtime.ITXClientDenyList>\n\nexport type PrismaTransactionFn<T, P> = (prisma: PrismaTransactionClient<P>) => Promise<T>\n\ntype PrismaTransactionReturnType<T> = Either<\n\tunknown,\n\tT | runtime.Types.Utils.UnwrapTuple<Prisma.PrismaPromise<unknown>[]>\n>\n\n/**\n * Perform a Prisma DB transaction with automatic retries if needed.\n *\n * @template T | T extends Prisma.PrismaPromise<unknown>[]\n * @param {PrismaClient} prisma\n * @param {PrismaTransactionFn<T> | Prisma.PrismaPromise<unknown>[]} arg\t\t operation to perform into the transaction\n * @param {PrismaTransactionOptions | PrismaTransactionBasicOptions} options transaction configuration\n * @return {Promise<PrismaTransactionReturnType<T>>}\n */\nexport const prismaTransaction = (async <T, P extends PrismaClient>(\n\tprisma: P,\n\targ: PrismaTransactionFn<T, P>,\n\toptions: PrismaTransactionOptions = { retriesAllowed: 3 },\n): Promise<PrismaTransactionReturnType<T>> => {\n\tlet result: PrismaTransactionReturnType<T> | undefined = undefined\n\n\tlet retries = 0\n\twhile (retries < options.retriesAllowed) {\n\t\tresult = await executeTransactionTry(prisma, arg, options)\n\n\t\tif (\n\t\t\tresult.result ||\n\t\t\t!isPrismaClientKnownRequestError(result.error) ||\n\t\t\tresult.error.code !== PRISMA_SERIALIZATION_ERROR\n\t\t) {\n\t\t\tbreak\n\t\t}\n\n\t\tretries++\n\t}\n\n\treturn result ?? { error: new Error('No transaction retry executed') }\n}) as {\n\t<T, P extends PrismaClient>(\n\t\tprisma: P,\n\t\tfn: PrismaTransactionFn<T, P>,\n\t\toptions?: PrismaTransactionOptions,\n\t): Promise<Either<unknown, T>>\n\t<T extends Prisma.PrismaPromise<unknown>[], P extends PrismaClient>(\n\t\tprisma: P,\n\t\targs: [...T],\n\t\toptions?: PrismaTransactionBasicOptions,\n\t): Promise<Either<unknown, runtime.Types.Utils.UnwrapTuple<T>>>\n}\n\nconst executeTransactionTry = async <T, P extends PrismaClient>(\n\tprisma: P,\n\targ: PrismaTransactionFn<T, P>,\n\toptions: PrismaTransactionOptions,\n): Promise<PrismaTransactionReturnType<T>> => {\n\ttry {\n\t\treturn {\n\t\t\t// @ts-ignore\n\t\t\tresult: await prisma.$transaction<T>(arg, options),\n\t\t}\n\t} catch (error) {\n\t\treturn { error }\n\t}\n}\n"],"names":["isPrismaClientKnownRequestError","error","isError","PRISMA_NOT_FOUND_ERROR","PRISMA_SERIALIZATION_ERROR","PRISMA_UNIQUE_CONSTRAINT_ERROR","prismaTransaction","prisma","arg","options","result","retries","executeTransactionTry"],"mappings":"uHAUaA,EACZC,GAEA,CAAC,CAACA,GACFC,UAAQD,CAAK,GACb,SAAUA,GACV,OAAOA,EAAM,MAAS,UACtBA,EAAM,KAAK,WAAW,GAAG,EAMbE,EAAyB,QAOzBC,EAA6B,QAM7BC,EAAiC,QCAjCC,EAAqB,MACjCC,EACAC,EACAC,EAAoC,CAAE,eAAgB,KACT,CAC7C,IAAIC,EAEAC,EAAU,EACP,KAAAA,EAAUF,EAAQ,iBACxBC,EAAS,MAAME,EAAsBL,EAAQC,EAAKC,CAAO,EAGxD,EAAAC,EAAO,QACP,CAACV,EAAgCU,EAAO,KAAK,GAC7CA,EAAO,MAAM,OAASN,KAKvBO,IAGD,OAAOD,GAAU,CAAE,MAAO,IAAI,MAAM,+BAA+B,CAAE,CACtE,EAaME,EAAwB,MAC7BL,EACAC,EACAC,IAC6C,CACzC,GAAA,CACI,MAAA,CAEN,OAAQ,MAAMF,EAAO,aAAgBC,EAAKC,CAAO,CAAA,QAE1CR,EAAO,CACf,MAAO,CAAE,MAAAA,CAAM,CAChB,CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"prismaError.js","sources":["../src/prismaError.ts"],"sourcesContent":["import { PrismaClientKnownRequestError } from '@prisma/client/runtime/library'\nimport { isError } from '@lokalise/node-core'\n\n/**\n * What is checked?\n * \t1. error is defined and not null\n * \t2. error is an `Error`\n * \t3. error contains the field code which is a string\n * \t4. code starts by `P` ([doc](https://www.prisma.io/docs/reference/api-reference/error-reference#error-codes))\n */\nexport const isPrismaClientKnownRequestError = (\n\terror: unknown,\n): error is PrismaClientKnownRequestError =>\n\t!!error &&\n\tisError(error) &&\n\t'code' in error &&\n\ttypeof error.code === 'string' &&\n\terror.code.startsWith('P')\n\n/*\n * Prisma error code P2025 indicates that the operation failed because it depends on one or more\n * records that were required but not found\n */\nexport const PRISMA_NOT_FOUND_ERROR = 'P2025'\n\n/*\n * Prisma error code P2034 indicates a serialization error and that the transaction must be retried.\n * A different error code would indicate that an internal state error happened and that\n * the cluster itself is experiencing an issue which requires intervention\n */\nexport const PRISMA_SERIALIZATION_ERROR = 'P2034'\n\n/*\n * Prisma error code P2002 indicates that the operation failed because a unique constraint was\n * violated. This can happen if you try to create a record with a unique field that already exists\n */\nexport const PRISMA_UNIQUE_CONSTRAINT_ERROR = 'P2002'\n"],"names":["isPrismaClientKnownRequestError","error","isError","PRISMA_NOT_FOUND_ERROR","PRISMA_SERIALIZATION_ERROR","PRISMA_UNIQUE_CONSTRAINT_ERROR"],"mappings":";AAUO,MAAMA,IAAkC,CAC9CC,MAEA,CAAC,CAACA,KACFC,EAAQD,CAAK,KACb,UAAUA,KACV,OAAOA,EAAM,QAAS,YACtBA,EAAM,KAAK,WAAW,GAAG,GAMbE,IAAyB,SAOzBC,IAA6B,SAM7BC,IAAiC;"}
1
+ {"version":3,"file":"prismaError.js","sources":["../src/prismaError.ts"],"sourcesContent":["import { isError } from '@lokalise/node-core'\nimport type { PrismaClientKnownRequestError } from '@prisma/client/runtime/library'\n\n/**\n * What is checked?\n * \t1. error is defined and not null\n * \t2. error is an `Error`\n * \t3. error contains the field code which is a string\n * \t4. code starts by `P` ([doc](https://www.prisma.io/docs/reference/api-reference/error-reference#error-codes))\n */\nexport const isPrismaClientKnownRequestError = (\n\terror: unknown,\n): error is PrismaClientKnownRequestError =>\n\t!!error &&\n\tisError(error) &&\n\t'code' in error &&\n\ttypeof error.code === 'string' &&\n\terror.code.startsWith('P')\n\n/*\n * Prisma error code P2025 indicates that the operation failed because it depends on one or more\n * records that were required but not found\n */\nexport const PRISMA_NOT_FOUND_ERROR = 'P2025'\n\n/*\n * Prisma error code P2034 indicates a serialization error and that the transaction must be retried.\n * A different error code would indicate that an internal state error happened and that\n * the cluster itself is experiencing an issue which requires intervention\n */\nexport const PRISMA_SERIALIZATION_ERROR = 'P2034'\n\n/*\n * Prisma error code P2002 indicates that the operation failed because a unique constraint was\n * violated. This can happen if you try to create a record with a unique field that already exists\n */\nexport const PRISMA_UNIQUE_CONSTRAINT_ERROR = 'P2002'\n"],"names":["isPrismaClientKnownRequestError","error","isError","PRISMA_NOT_FOUND_ERROR","PRISMA_SERIALIZATION_ERROR","PRISMA_UNIQUE_CONSTRAINT_ERROR"],"mappings":";AAUO,MAAMA,IAAkC,CAC9CC,MAEA,CAAC,CAACA,KACFC,EAAQD,CAAK,KACb,UAAUA,KACV,OAAOA,EAAM,QAAS,YACtBA,EAAM,KAAK,WAAW,GAAG,GAMbE,IAAyB,SAOzBC,IAA6B,SAM7BC,IAAiC;"}
@@ -1,4 +1,3 @@
1
- import { Types } from '@prisma/client/runtime/library';
2
1
  import { PrismaClient, Prisma } from '@prisma/client';
3
2
  import { Either } from '@lokalise/node-core';
4
3
 
@@ -10,8 +9,8 @@ export type PrismaTransactionOptions = {
10
9
  isolationLevel?: string;
11
10
  };
12
11
  export type PrismaTransactionBasicOptions = Pick<PrismaTransactionOptions, 'retriesAllowed' | 'isolationLevel'>;
13
- export type PrismaTransactionClient = Omit<PrismaClient, runtime.ITXClientDenyList>;
14
- export type PrismaTransactionFn<T> = (prisma: PrismaTransactionClient) => Promise<T>;
12
+ export type PrismaTransactionClient<P> = Omit<P, runtime.ITXClientDenyList>;
13
+ export type PrismaTransactionFn<T, P> = (prisma: PrismaTransactionClient<P>) => Promise<T>;
15
14
  /**
16
15
  * Perform a Prisma DB transaction with automatic retries if needed.
17
16
  *
@@ -22,6 +21,6 @@ export type PrismaTransactionFn<T> = (prisma: PrismaTransactionClient) => Promis
22
21
  * @return {Promise<PrismaTransactionReturnType<T>>}
23
22
  */
24
23
  export declare const prismaTransaction: {
25
- <T>(prisma: PrismaClient, fn: PrismaTransactionFn<T>, options?: PrismaTransactionOptions): Promise<Either<unknown, T>>;
26
- <T_1 extends Prisma.PrismaPromise<unknown>[]>(prisma: PrismaClient, args: [...T_1], options?: PrismaTransactionBasicOptions): Promise<Either<unknown, runtime.UnwrapTuple<T_1>>>;
24
+ <T, P extends PrismaClient<Prisma.PrismaClientOptions, never, runtime.DefaultArgs>>(prisma: P, fn: PrismaTransactionFn<T, P>, options?: PrismaTransactionOptions): Promise<Either<unknown, T>>;
25
+ <T_1 extends Prisma.PrismaPromise<unknown>[], P_1 extends PrismaClient<Prisma.PrismaClientOptions, never, runtime.DefaultArgs>>(prisma: P_1, args: [...T_1], options?: PrismaTransactionBasicOptions): Promise<Either<unknown, runtime.UnwrapTuple<T_1>>>;
27
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"prismaTransaction.js","sources":["../src/prismaTransaction.ts"],"sourcesContent":["import type { Either } from '@lokalise/node-core'\n\nimport type { PrismaClient, Prisma } from '@prisma/client'\nimport type * as runtime from '@prisma/client/runtime/library'\n\nimport { isPrismaClientKnownRequestError, PRISMA_SERIALIZATION_ERROR } from './prismaError'\nimport type { Types } from '@prisma/client/runtime/library'\n\nexport type PrismaTransactionOptions = {\n\tretriesAllowed: number\n\tmaxWait?: number\n\ttimeout?: number\n\tisolationLevel?: string\n}\n\nexport type PrismaTransactionBasicOptions = Pick<\n\tPrismaTransactionOptions,\n\t'retriesAllowed' | 'isolationLevel'\n>\n\nexport type PrismaTransactionClient = Omit<PrismaClient, runtime.ITXClientDenyList>\n\nexport type PrismaTransactionFn<T> = (prisma: PrismaTransactionClient) => Promise<T>\n\ntype PrismaTransactionReturnType<T> = Either<\n\tunknown,\n\tT | Types.Utils.UnwrapTuple<Prisma.PrismaPromise<unknown>[]>\n>\n\n/**\n * Perform a Prisma DB transaction with automatic retries if needed.\n *\n * @template T | T extends Prisma.PrismaPromise<unknown>[]\n * @param {PrismaClient} prisma\n * @param {PrismaTransactionFn<T> | Prisma.PrismaPromise<unknown>[]} arg\t\t operation to perform into the transaction\n * @param {PrismaTransactionOptions | PrismaTransactionBasicOptions} options transaction configuration\n * @return {Promise<PrismaTransactionReturnType<T>>}\n */\nexport const prismaTransaction = (async <T>(\n\tprisma: PrismaClient,\n\targ: PrismaTransactionFn<T>,\n\toptions: PrismaTransactionOptions = { retriesAllowed: 3 },\n): Promise<PrismaTransactionReturnType<T>> => {\n\tlet result: PrismaTransactionReturnType<T> | undefined = undefined\n\n\tlet retries = 0\n\twhile (retries < options.retriesAllowed) {\n\t\tresult = await executeTransactionTry(prisma, arg, options)\n\n\t\tif (\n\t\t\tresult.result ||\n\t\t\t!isPrismaClientKnownRequestError(result.error) ||\n\t\t\tresult.error.code !== PRISMA_SERIALIZATION_ERROR\n\t\t) {\n\t\t\tbreak\n\t\t}\n\n\t\tretries++\n\t}\n\n\treturn result ?? { error: new Error('No transaction retry executed') }\n}) as {\n\t<T>(\n\t\tprisma: PrismaClient,\n\t\tfn: PrismaTransactionFn<T>,\n\t\toptions?: PrismaTransactionOptions,\n\t): Promise<Either<unknown, T>>\n\t<T extends Prisma.PrismaPromise<unknown>[]>(\n\t\tprisma: PrismaClient,\n\t\targs: [...T],\n\t\toptions?: PrismaTransactionBasicOptions,\n\t): Promise<Either<unknown, runtime.Types.Utils.UnwrapTuple<T>>>\n}\n\nconst executeTransactionTry = async <T>(\n\tprisma: PrismaClient,\n\targ: PrismaTransactionFn<T>,\n\toptions: PrismaTransactionOptions,\n): Promise<PrismaTransactionReturnType<T>> => {\n\ttry {\n\t\treturn {\n\t\t\t// @ts-ignore\n\t\t\tresult: await prisma.$transaction<T>(arg, options),\n\t\t}\n\t} catch (error) {\n\t\treturn { error }\n\t}\n}\n"],"names":["prismaTransaction","prisma","arg","options","result","retries","executeTransactionTry","isPrismaClientKnownRequestError","PRISMA_SERIALIZATION_ERROR","error"],"mappings":";AAsCa,MAAAA,IAAqB,OACjCC,GACAC,GACAC,IAAoC,EAAE,gBAAgB,QACT;AAC7C,MAAIC,GAEAC,IAAU;AACP,SAAAA,IAAUF,EAAQ,mBACxBC,IAAS,MAAME,EAAsBL,GAAQC,GAAKC,CAAO,GAGxD,EAAAC,EAAO,UACP,CAACG,EAAgCH,EAAO,KAAK,KAC7CA,EAAO,MAAM,SAASI;AAKvB,IAAAH;AAGD,SAAOD,KAAU,EAAE,OAAO,IAAI,MAAM,+BAA+B,EAAE;AACtE,GAaME,IAAwB,OAC7BL,GACAC,GACAC,MAC6C;AACzC,MAAA;AACI,WAAA;AAAA;AAAA,MAEN,QAAQ,MAAMF,EAAO,aAAgBC,GAAKC,CAAO;AAAA,IAAA;AAAA,WAE1CM,GAAO;AACf,WAAO,EAAE,OAAAA,EAAM;AAAA,EAChB;AACD;"}
1
+ {"version":3,"file":"prismaTransaction.js","sources":["../src/prismaTransaction.ts"],"sourcesContent":["import type { Either } from '@lokalise/node-core'\nimport type { PrismaClient, Prisma } from '@prisma/client'\nimport type * as runtime from '@prisma/client/runtime/library'\n\nimport { isPrismaClientKnownRequestError, PRISMA_SERIALIZATION_ERROR } from './prismaError'\n\nexport type PrismaTransactionOptions = {\n\tretriesAllowed: number\n\tmaxWait?: number\n\ttimeout?: number\n\tisolationLevel?: string\n}\n\nexport type PrismaTransactionBasicOptions = Pick<\n\tPrismaTransactionOptions,\n\t'retriesAllowed' | 'isolationLevel'\n>\n\nexport type PrismaTransactionClient<P> = Omit<P, runtime.ITXClientDenyList>\n\nexport type PrismaTransactionFn<T, P> = (prisma: PrismaTransactionClient<P>) => Promise<T>\n\ntype PrismaTransactionReturnType<T> = Either<\n\tunknown,\n\tT | runtime.Types.Utils.UnwrapTuple<Prisma.PrismaPromise<unknown>[]>\n>\n\n/**\n * Perform a Prisma DB transaction with automatic retries if needed.\n *\n * @template T | T extends Prisma.PrismaPromise<unknown>[]\n * @param {PrismaClient} prisma\n * @param {PrismaTransactionFn<T> | Prisma.PrismaPromise<unknown>[]} arg\t\t operation to perform into the transaction\n * @param {PrismaTransactionOptions | PrismaTransactionBasicOptions} options transaction configuration\n * @return {Promise<PrismaTransactionReturnType<T>>}\n */\nexport const prismaTransaction = (async <T, P extends PrismaClient>(\n\tprisma: P,\n\targ: PrismaTransactionFn<T, P>,\n\toptions: PrismaTransactionOptions = { retriesAllowed: 3 },\n): Promise<PrismaTransactionReturnType<T>> => {\n\tlet result: PrismaTransactionReturnType<T> | undefined = undefined\n\n\tlet retries = 0\n\twhile (retries < options.retriesAllowed) {\n\t\tresult = await executeTransactionTry(prisma, arg, options)\n\n\t\tif (\n\t\t\tresult.result ||\n\t\t\t!isPrismaClientKnownRequestError(result.error) ||\n\t\t\tresult.error.code !== PRISMA_SERIALIZATION_ERROR\n\t\t) {\n\t\t\tbreak\n\t\t}\n\n\t\tretries++\n\t}\n\n\treturn result ?? { error: new Error('No transaction retry executed') }\n}) as {\n\t<T, P extends PrismaClient>(\n\t\tprisma: P,\n\t\tfn: PrismaTransactionFn<T, P>,\n\t\toptions?: PrismaTransactionOptions,\n\t): Promise<Either<unknown, T>>\n\t<T extends Prisma.PrismaPromise<unknown>[], P extends PrismaClient>(\n\t\tprisma: P,\n\t\targs: [...T],\n\t\toptions?: PrismaTransactionBasicOptions,\n\t): Promise<Either<unknown, runtime.Types.Utils.UnwrapTuple<T>>>\n}\n\nconst executeTransactionTry = async <T, P extends PrismaClient>(\n\tprisma: P,\n\targ: PrismaTransactionFn<T, P>,\n\toptions: PrismaTransactionOptions,\n): Promise<PrismaTransactionReturnType<T>> => {\n\ttry {\n\t\treturn {\n\t\t\t// @ts-ignore\n\t\t\tresult: await prisma.$transaction<T>(arg, options),\n\t\t}\n\t} catch (error) {\n\t\treturn { error }\n\t}\n}\n"],"names":["prismaTransaction","prisma","arg","options","result","retries","executeTransactionTry","isPrismaClientKnownRequestError","PRISMA_SERIALIZATION_ERROR","error"],"mappings":";AAoCa,MAAAA,IAAqB,OACjCC,GACAC,GACAC,IAAoC,EAAE,gBAAgB,QACT;AAC7C,MAAIC,GAEAC,IAAU;AACP,SAAAA,IAAUF,EAAQ,mBACxBC,IAAS,MAAME,EAAsBL,GAAQC,GAAKC,CAAO,GAGxD,EAAAC,EAAO,UACP,CAACG,EAAgCH,EAAO,KAAK,KAC7CA,EAAO,MAAM,SAASI;AAKvB,IAAAH;AAGD,SAAOD,KAAU,EAAE,OAAO,IAAI,MAAM,+BAA+B,EAAE;AACtE,GAaME,IAAwB,OAC7BL,GACAC,GACAC,MAC6C;AACzC,MAAA;AACI,WAAA;AAAA;AAAA,MAEN,QAAQ,MAAMF,EAAO,aAAgBC,GAAKC,CAAO;AAAA,IAAA;AAAA,WAE1CM,GAAO;AACf,WAAO,EAAE,OAAAA,EAAM;AAAA,EAChB;AACD;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lokalise/prisma-utils",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "files": [
@@ -27,8 +27,8 @@
27
27
  "build": "rimraf dist && npm run db:update-client && vite build",
28
28
  "dev": "vite watch",
29
29
  "clean": "rimraf dist .eslintcache",
30
- "lint": "eslint --cache --max-warnings=0 && prettier --check --log-level warn src \\\"**/*.{json,md}\\\" && tsc --noEmit",
31
- "lint:fix": "eslint --fix && prettier --write src \\\"**/*.{json,md}\\\"",
30
+ "lint": "eslint --cache --max-warnings=0 . && prettier --check --log-level warn src \"**/*.{json,md,ts,tsx}\" && tsc --noEmit",
31
+ "lint:fix": "prettier --write src \"**/*.{json,md,ts,tsx}\" --log-level=warn && eslint . --fix",
32
32
  "docker:start:ci": "docker compose up -d cockroachdb",
33
33
  "db:migration:dev": "dotenv -c test -- dotenv prisma migrate dev",
34
34
  "db:update-client": "dotenv -c test prisma generate",
@@ -38,7 +38,8 @@
38
38
  "pretest:ci": "npm run docker:start:ci && npm run db:wait && npm run test:migrate",
39
39
  "test:ci": "npm run test -- --coverage",
40
40
  "test:ci:teardown": "docker compose down",
41
- "prepublishOnly": "npm run build"
41
+ "prepublishOnly": "npm run build",
42
+ "package-version": "echo $npm_package_version"
42
43
  },
43
44
  "dependencies": {
44
45
  "@lokalise/node-core": "^9.16.0"