From 28d682dfd3fbf36864c98a98feb54e63184cd8b5 Mon Sep 17 00:00:00 2001 From: CSenshi Date: Wed, 8 Oct 2025 20:05:28 +0400 Subject: [PATCH 1/4] refactor(url-shortener): update prisma engine to not use rust --- .gitignore | 3 +- apps/url-shortener/prisma/schema.prisma | 5 +- .../postgres-batch-counter.service.ts | 2 +- .../postgres/postgres-counter.service.ts | 2 +- apps/url-shortener/src/prisma/index.ts | 2 + .../src/prisma/prisma.service.ts | 10 +- package.json | 5 +- pnpm-lock.yaml | 486 ++++++++++++++++-- 8 files changed, 458 insertions(+), 57 deletions(-) create mode 100644 apps/url-shortener/src/prisma/index.ts diff --git a/.gitignore b/.gitignore index 91d3f8b..aff473f 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,5 @@ test-output apps/*/.env e2e/*/.env .vscode -.cursor \ No newline at end of file +.cursor +apps/url-shortener/src/prisma/generated/* diff --git a/apps/url-shortener/prisma/schema.prisma b/apps/url-shortener/prisma/schema.prisma index 29f2c4a..87eb57f 100644 --- a/apps/url-shortener/prisma/schema.prisma +++ b/apps/url-shortener/prisma/schema.prisma @@ -1,5 +1,8 @@ generator client { - provider = "prisma-client-js" + provider = "prisma-client" + output = "../src/prisma/generated" + engineType = "client" + moduleFormat = "cjs" previewFeatures = ["typedSql"] } diff --git a/apps/url-shortener/src/counter/implementations/postgres/postgres-batch-counter.service.ts b/apps/url-shortener/src/counter/implementations/postgres/postgres-batch-counter.service.ts index 7e19e19..840fcae 100644 --- a/apps/url-shortener/src/counter/implementations/postgres/postgres-batch-counter.service.ts +++ b/apps/url-shortener/src/counter/implementations/postgres/postgres-batch-counter.service.ts @@ -1,5 +1,5 @@ import { Inject, Injectable } from '@nestjs/common'; -import { Prisma } from '@prisma/client'; +import { Prisma } from '../../../prisma/generated/client'; import { PrismaService } from '../../../prisma/prisma.service'; import { COUNTER_BATCH_SIZE } from '../../counter.constants'; import { BatchCounterService } from '../base/batch-counter.service'; diff --git a/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts b/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts index 79af3b8..a0bbb85 100644 --- a/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts +++ b/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { getNextShortUrlId } from '@prisma/client/sql'; +import { getNextShortUrlId } from '../../../prisma/generated/sql'; import { PrismaService } from '../../../prisma/prisma.service'; import { CounterService } from '../../counter.service'; diff --git a/apps/url-shortener/src/prisma/index.ts b/apps/url-shortener/src/prisma/index.ts new file mode 100644 index 0000000..8bb71d7 --- /dev/null +++ b/apps/url-shortener/src/prisma/index.ts @@ -0,0 +1,2 @@ +export * from './prisma.module'; +export * from './prisma.service'; diff --git a/apps/url-shortener/src/prisma/prisma.service.ts b/apps/url-shortener/src/prisma/prisma.service.ts index ba00c9f..2f07a7c 100644 --- a/apps/url-shortener/src/prisma/prisma.service.ts +++ b/apps/url-shortener/src/prisma/prisma.service.ts @@ -1,11 +1,19 @@ import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'; -import { PrismaClient } from '@prisma/client'; +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from './generated/client'; @Injectable() export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { + constructor() { + const adapter = new PrismaPg({ + connectionString: process.env['DATABASE_URL'], + }); + super({ adapter }); + } + async onModuleInit() { await this.$connect(); } diff --git a/package.json b/package.json index 6ac5816..48b6574 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "@nestjs/platform-express": "^11.1.3", "@nestjs/platform-fastify": "^11.1.6", "@nestjs/swagger": "^11.2.0", - "@prisma/client": "^6.9.0", + "@prisma/client": "^6.17.0", + "@prisma/adapter-pg": "^6.17.0", "axios": "^1.10.0", "class-validator": "^0.14.2", "fastify": "^5.6.1", @@ -59,7 +60,7 @@ "nx": "21.2.0", "pino-pretty": "^13.0.0", "prettier": "^3.0.0", - "prisma": "^6.9.0", + "prisma": "^6.17.0", "supertest": "^7.1.1", "ts-jest": "^29.4.0", "ts-node": "10.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 02a313b..0098ef0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,9 +34,12 @@ importers: '@nestjs/swagger': specifier: ^11.2.0 version: 11.2.0(@fastify/static@8.2.0)(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14) + '@prisma/adapter-pg': + specifier: ^6.17.0 + version: 6.17.0 '@prisma/client': - specifier: ^6.9.0 - version: 6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3) + specifier: ^6.17.0 + version: 6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3) axios: specifier: ^1.10.0 version: 1.10.0 @@ -76,7 +79,7 @@ importers: version: 11.1.3(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@nestjs/platform-express@11.1.3) '@nx-tools/nx-prisma': specifier: ^6.7.1 - version: 6.7.1(@nx/devkit@21.2.0(nx@21.2.0(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))))(prisma@6.9.0(typescript@5.8.3))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@18.16.20)(typescript@5.8.3))(tslib@2.8.1) + version: 6.7.1(@nx/devkit@21.2.0(nx@21.2.0(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))))(prisma@6.17.0(typescript@5.8.3))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@18.16.20)(typescript@5.8.3))(tslib@2.8.1) '@nx/eslint': specifier: 21.2.0 version: 21.2.0(@babel/traverse@7.27.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.29.0(jiti@2.4.2))(nx@21.2.0(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) @@ -159,8 +162,8 @@ importers: specifier: ^3.0.0 version: 3.5.3 prisma: - specifier: ^6.9.0 - version: 6.9.0(typescript@5.8.3) + specifier: ^6.17.0 + version: 6.17.0(typescript@5.8.3) supertest: specifier: ^7.1.1 version: 7.1.1 @@ -187,7 +190,7 @@ importers: dependencies: '@nestjs-redis/kit': specifier: 0.10.0 - version: 0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1) + version: 0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1) '@nestjs/throttler': specifier: ^6.4.0 version: 6.4.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(reflect-metadata@0.1.14) @@ -2970,10 +2973,16 @@ packages: } engines: { node: '>=14' } - '@prisma/client@6.9.0': + '@prisma/adapter-pg@6.17.0': resolution: { - integrity: sha512-Gg7j1hwy3SgF1KHrh0PZsYvAaykeR0PaxusnLXydehS96voYCGt1U5zVR31NIouYc63hWzidcrir1a7AIyCsNQ==, + integrity: sha512-jEX0+1ROugaQRyh6aUwLM2IzyQwCJBrjm8hctwJEyWcqrdKjKA49QAm0uBS8cYOQjASvP38uXMA3JWnU1ivkSw==, + } + + '@prisma/client@6.17.0': + resolution: + { + integrity: sha512-b42mTLOdLEZ6e/igu8CLdccAUX9AwHknQQ1+pHOftnzDP2QoyZyFvcANqSLs5ockimFKJnV7Ljf+qrhNYf6oAg==, } engines: { node: '>=18.18' } peerDependencies: @@ -2985,40 +2994,46 @@ packages: typescript: optional: true - '@prisma/config@6.9.0': + '@prisma/config@6.17.0': + resolution: + { + integrity: sha512-k8tuChKpkO/Vj7ZEzaQMNflNGbaW4X0r8+PC+W2JaqVRdiS2+ORSv1SrDwNxsb8YyzIQJucXqLGZbgxD97ZhsQ==, + } + + '@prisma/debug@6.17.0': resolution: { - integrity: sha512-Wcfk8/lN3WRJd5w4jmNQkUwhUw0eksaU/+BlAJwPQKW10k0h0LC9PD/6TQFmqKVbHQL0vG2z266r0S1MPzzhbA==, + integrity: sha512-eE2CB32nr1hRqyLVnOAVY6c//iSJ/PN+Yfoa/2sEzLGpORaCg61d+nvdAkYSh+6Y2B8L4BVyzkRMANLD6nnC2g==, } - '@prisma/debug@6.9.0': + '@prisma/driver-adapter-utils@6.17.0': resolution: { - integrity: sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg==, + integrity: sha512-JqK4STDoZVQnj7ac6+daN5w6l0Vns82tHdj8FVzMdCLMdWd2JgDzDS688gTMZt7rEDNJSb/z9U5XtIP0C08sWg==, } - '@prisma/engines-version@6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e': + '@prisma/engines-version@6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a': resolution: { - integrity: sha512-Qp9gMoBHgqhKlrvumZWujmuD7q4DV/gooEyPCLtbkc13EZdSz2RsGUJ5mHb3RJgAbk+dm6XenqG7obJEhXcJ6Q==, + integrity: sha512-G0VU4uFDreATgTz4sh3dTtU2C+jn+J6c060ixavWZaUaSRZsNQhSPW26lbfez7GHzR02RGCdqs5UcSuGBC3yLw==, } - '@prisma/engines@6.9.0': + '@prisma/engines@6.17.0': resolution: { - integrity: sha512-im0X0bwDLA0244CDf8fuvnLuCQcBBdAGgr+ByvGfQY9wWl6EA+kRGwVk8ZIpG65rnlOwtaWIr/ZcEU5pNVvq9g==, + integrity: sha512-XhE9v3hDQTNgCYMjogcCYKi7HCEkZf9WwTGuXy8cmY8JUijvU0ap4M7pGLx4pBblkp5EwUsYzw1YLtH7yi0GZw==, } - '@prisma/fetch-engine@6.9.0': + '@prisma/fetch-engine@6.17.0': resolution: { - integrity: sha512-PMKhJdl4fOdeE3J3NkcWZ+tf3W6rx3ht/rLU8w4SXFRcLhd5+3VcqY4Kslpdm8osca4ej3gTfB3+cSk5pGxgFg==, + integrity: sha512-YSl5R3WIAPrmshYPkaaszOsBIWRAovOCHn3y7gkTNGG51LjYW4pi6PFNkGouW6CA06qeTjTbGrDRCgFjnmVWDg==, } - '@prisma/get-platform@6.9.0': + '@prisma/get-platform@6.17.0': resolution: { - integrity: sha512-/B4n+5V1LI/1JQcHp+sUpyRT1bBgZVPHbsC4lt4/19Xp4jvNIVcq5KYNtQDk5e/ukTSjo9PZVAxxy9ieFtlpTQ==, + integrity: sha512-3tEKChrnlmLXPd870oiVfRvj7vVKuxqP349hYaMDsbV4TZd3+lFqw8KTI2Tbq5DopamfNuNqhVCj+R6ZxKKYGQ==, } '@redis-kit/lock@0.1.0-3': @@ -3535,6 +3550,12 @@ packages: '@nestjs/common': ^6.10.11 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 '@nestjs/core': ^6.10.11 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + '@standard-schema/spec@1.0.0': + resolution: + { + integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==, + } + '@swc-node/core@1.13.3': resolution: { @@ -4823,6 +4844,17 @@ packages: } engines: { node: '>= 0.8' } + c12@3.1.0: + resolution: + { + integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==, + } + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + call-bind-apply-helpers@1.0.2: resolution: { @@ -4933,6 +4965,12 @@ packages: } engines: { node: '>=8' } + citty@0.1.6: + resolution: + { + integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==, + } + cjs-module-lexer@1.4.3: resolution: { @@ -5158,6 +5196,12 @@ packages: } engines: { '0': node >= 6.0 } + confbox@0.2.2: + resolution: + { + integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==, + } + confusing-browser-globals@1.0.11: resolution: { @@ -5571,6 +5615,13 @@ packages: integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, } + deepmerge-ts@7.1.5: + resolution: + { + integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==, + } + engines: { node: '>=16.0.0' } + deepmerge@4.3.1: resolution: { @@ -5612,6 +5663,12 @@ packages: } engines: { node: '>=12' } + defu@6.1.4: + resolution: + { + integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==, + } + delayed-stream@1.0.0: resolution: { @@ -5647,6 +5704,12 @@ packages: } engines: { node: '>=6' } + destr@2.0.5: + resolution: + { + integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==, + } + destroy@1.2.0: resolution: { @@ -5770,6 +5833,13 @@ packages: } engines: { node: '>=12' } + dotenv@16.6.1: + resolution: + { + integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==, + } + engines: { node: '>=12' } + dunder-proto@1.0.1: resolution: { @@ -5789,6 +5859,12 @@ packages: integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, } + effect@3.16.12: + resolution: + { + integrity: sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==, + } + ejs@3.1.10: resolution: { @@ -5835,6 +5911,13 @@ packages: } engines: { node: '>= 4' } + empathic@2.0.0: + resolution: + { + integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==, + } + engines: { node: '>=14' } + encodeurl@1.0.2: resolution: { @@ -6154,6 +6237,19 @@ packages: } engines: { node: '>= 18' } + exsolve@1.0.7: + resolution: + { + integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==, + } + + fast-check@3.23.2: + resolution: + { + integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==, + } + engines: { node: '>=8.0.0' } + fast-copy@3.0.2: resolution: { @@ -6574,6 +6670,13 @@ packages: integrity: sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==, } + giget@2.0.0: + resolution: + { + integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==, + } + hasBin: true + git-raw-commits@4.0.0: resolution: { @@ -8322,6 +8425,12 @@ packages: integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==, } + node-fetch-native@1.6.7: + resolution: + { + integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==, + } + node-forge@1.3.1: resolution: { @@ -8402,6 +8511,14 @@ packages: '@swc/core': optional: true + nypm@0.6.2: + resolution: + { + integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==, + } + engines: { node: ^14.16.0 || >=16.10.0 } + hasBin: true + object-assign@4.1.1: resolution: { @@ -8428,6 +8545,12 @@ packages: integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==, } + ohash@2.0.11: + resolution: + { + integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==, + } + on-exit-leak-free@2.1.2: resolution: { @@ -8681,6 +8804,76 @@ packages: } engines: { node: '>=8' } + pathe@2.0.3: + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + } + + perfect-debounce@1.0.0: + resolution: + { + integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==, + } + + pg-cloudflare@1.2.7: + resolution: + { + integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==, + } + + pg-connection-string@2.9.1: + resolution: + { + integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==, + } + + pg-int8@1.0.1: + resolution: + { + integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==, + } + engines: { node: '>=4.0.0' } + + pg-pool@3.10.1: + resolution: + { + integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==, + } + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.10.3: + resolution: + { + integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==, + } + + pg-types@2.2.0: + resolution: + { + integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==, + } + engines: { node: '>=4' } + + pg@8.16.3: + resolution: + { + integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==, + } + engines: { node: '>= 16.0.0' } + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: + { + integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==, + } + picocolors@1.1.1: resolution: { @@ -8776,6 +8969,12 @@ packages: } engines: { node: '>=14.16' } + pkg-types@2.3.0: + resolution: + { + integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==, + } + pluralize@8.0.0: resolution: { @@ -9115,6 +9314,41 @@ packages: } engines: { node: ^10 || ^12 || >=14 } + postgres-array@2.0.0: + resolution: + { + integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==, + } + engines: { node: '>=4' } + + postgres-array@3.0.4: + resolution: + { + integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==, + } + engines: { node: '>=12' } + + postgres-bytea@1.0.0: + resolution: + { + integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==, + } + engines: { node: '>=0.10.0' } + + postgres-date@1.0.7: + resolution: + { + integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==, + } + engines: { node: '>=0.10.0' } + + postgres-interval@1.2.0: + resolution: + { + integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==, + } + engines: { node: '>=0.10.0' } + prelude-ls@1.2.1: resolution: { @@ -9137,10 +9371,10 @@ packages: } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - prisma@6.9.0: + prisma@6.17.0: resolution: { - integrity: sha512-resJAwMyZREC/I40LF6FZ6rZTnlrlrYrb63oW37Gq+U+9xHwbyMSPJjKtM7VZf3gTO86t/Oyz+YeSXr3CmAY1Q==, + integrity: sha512-rcvldz98r+2bVCs0MldQCBaaVJRCj9Ew4IqphLATF89OJcSzwRQpwnKXR+W2+2VjK7/o2x3ffu5+2N3Muu6Dbw==, } engines: { node: '>=18.18' } hasBin: true @@ -9273,6 +9507,12 @@ packages: } engines: { node: '>= 0.8' } + rc9@2.1.2: + resolution: + { + integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==, + } + react-is@18.3.1: resolution: { @@ -13369,17 +13609,17 @@ snapshots: redis: 5.6.1 tslib: 2.8.1 - '@nestjs-redis/health-indicator@0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1)': + '@nestjs-redis/health-indicator@0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1)': dependencies: '@nestjs/common': 11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/terminus': 11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/terminus': 11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2) redis: 5.6.1 tslib: 2.8.1 - '@nestjs-redis/kit@0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1)': + '@nestjs-redis/kit@0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1)': dependencies: '@nestjs-redis/client': 0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(redis@5.6.1) - '@nestjs-redis/health-indicator': 0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1) + '@nestjs-redis/health-indicator': 0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1) '@nestjs-redis/lock': 0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(redis@5.6.1) '@nestjs-redis/throttler-storage': 0.10.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)) tslib: 2.8.1 @@ -13520,7 +13760,7 @@ snapshots: class-transformer: 0.5.1 class-validator: 0.14.2 - '@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2)': + '@nestjs/terminus@11.0.0(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@prisma/client@6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.2)': dependencies: '@nestjs/common': 11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/core': 11.1.3(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.3)(@nestjs/platform-express@11.1.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) @@ -13530,7 +13770,7 @@ snapshots: rxjs: 7.8.2 optionalDependencies: '@nestjs/microservices': 11.1.3(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(ioredis@5.6.1)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@prisma/client': 6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3) + '@prisma/client': 6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3) '@nestjs/testing@11.1.3(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.3)(@nestjs/microservices@11.1.3)(@nestjs/platform-express@11.1.3)': dependencies: @@ -13575,11 +13815,11 @@ snapshots: csv-parse: 5.6.0 tslib: 2.8.1 - '@nx-tools/nx-prisma@6.7.1(@nx/devkit@21.2.0(nx@21.2.0(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))))(prisma@6.9.0(typescript@5.8.3))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@18.16.20)(typescript@5.8.3))(tslib@2.8.1)': + '@nx-tools/nx-prisma@6.7.1(@nx/devkit@21.2.0(nx@21.2.0(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))))(prisma@6.17.0(typescript@5.8.3))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@18.16.20)(typescript@5.8.3))(tslib@2.8.1)': dependencies: '@nx-tools/core': 6.7.1(@nx/devkit@21.2.0(nx@21.2.0(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))))(tslib@2.8.1) '@nx/devkit': 21.2.0(nx@21.2.0(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)(typescript@5.8.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - prisma: 6.9.0(typescript@5.8.3) + prisma: 6.17.0(typescript@5.8.3) ts-node: 10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@18.16.20)(typescript@5.8.3) tslib: 2.8.1 @@ -13959,36 +14199,53 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3)': + '@prisma/adapter-pg@6.17.0': + dependencies: + '@prisma/driver-adapter-utils': 6.17.0 + pg: 8.16.3 + postgres-array: 3.0.4 + transitivePeerDependencies: + - pg-native + + '@prisma/client@6.17.0(prisma@6.17.0(typescript@5.8.3))(typescript@5.8.3)': optionalDependencies: - prisma: 6.9.0(typescript@5.8.3) + prisma: 6.17.0(typescript@5.8.3) typescript: 5.8.3 - '@prisma/config@6.9.0': + '@prisma/config@6.17.0': dependencies: - jiti: 2.4.2 + c12: 3.1.0 + deepmerge-ts: 7.1.5 + effect: 3.16.12 + empathic: 2.0.0 + transitivePeerDependencies: + - magicast - '@prisma/debug@6.9.0': {} + '@prisma/debug@6.17.0': {} - '@prisma/engines-version@6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e': + '@prisma/driver-adapter-utils@6.17.0': + dependencies: + '@prisma/debug': 6.17.0 + + '@prisma/engines-version@6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a': {} - '@prisma/engines@6.9.0': + '@prisma/engines@6.17.0': dependencies: - '@prisma/debug': 6.9.0 - '@prisma/engines-version': 6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e - '@prisma/fetch-engine': 6.9.0 - '@prisma/get-platform': 6.9.0 + '@prisma/debug': 6.17.0 + '@prisma/engines-version': 6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a + '@prisma/fetch-engine': 6.17.0 + '@prisma/get-platform': 6.17.0 - '@prisma/fetch-engine@6.9.0': + '@prisma/fetch-engine@6.17.0': dependencies: - '@prisma/debug': 6.9.0 - '@prisma/engines-version': 6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e - '@prisma/get-platform': 6.9.0 + '@prisma/debug': 6.17.0 + '@prisma/engines-version': 6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a + '@prisma/get-platform': 6.17.0 - '@prisma/get-platform@6.9.0': + '@prisma/get-platform@6.17.0': dependencies: - '@prisma/debug': 6.9.0 + '@prisma/debug': 6.17.0 '@redis-kit/lock@0.1.0-3(redis@5.6.1)': dependencies: @@ -14444,6 +14701,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@standard-schema/spec@1.0.0': {} + '@swc-node/core@1.13.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.23)': dependencies: '@swc/core': 1.5.29(@swc/helpers@0.5.17) @@ -15307,6 +15566,21 @@ snapshots: bytes@3.1.2: {} + c12@3.1.0: + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 16.6.1 + exsolve: 1.0.7 + giget: 2.0.0 + jiti: 2.4.2 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -15365,6 +15639,10 @@ snapshots: ci-info@4.2.0: {} + citty@0.1.6: + dependencies: + consola: 3.4.2 + cjs-module-lexer@1.4.3: {} class-transformer@0.5.1: {} @@ -15485,6 +15763,8 @@ snapshots: readable-stream: 3.6.2 typedarray: 0.0.6 + confbox@0.2.2: {} + confusing-browser-globals@1.0.11: {} connect-history-api-fallback@2.0.0: {} @@ -15737,6 +16017,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge-ts@7.1.5: {} + deepmerge@4.3.1: {} default-browser-id@5.0.0: {} @@ -15754,6 +16036,8 @@ snapshots: define-lazy-prop@3.0.0: {} + defu@6.1.4: {} + delayed-stream@1.0.0: {} denque@2.1.0: @@ -15765,6 +16049,8 @@ snapshots: dequal@2.0.3: {} + destr@2.0.5: {} + destroy@1.2.0: {} detect-libc@1.0.3: @@ -15830,6 +16116,8 @@ snapshots: dotenv@16.4.7: {} + dotenv@16.6.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -15840,6 +16128,11 @@ snapshots: ee-first@1.1.1: {} + effect@3.16.12: + dependencies: + '@standard-schema/spec': 1.0.0 + fast-check: 3.23.2 + ejs@3.1.10: dependencies: jake: 10.9.2 @@ -15856,6 +16149,8 @@ snapshots: emojis-list@3.0.0: {} + empathic@2.0.0: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -16105,6 +16400,12 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.7: {} + + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + fast-copy@3.0.2: {} fast-decode-uri-component@1.0.1: {} @@ -16390,6 +16691,15 @@ snapshots: get-them-args@1.3.2: {} + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + git-raw-commits@4.0.0: dependencies: dargs: 8.1.0 @@ -17532,6 +17842,8 @@ snapshots: node-addon-api@7.1.1: optional: true + node-fetch-native@1.6.7: {} + node-forge@1.3.1: {} node-int64@0.4.0: {} @@ -17614,6 +17926,14 @@ snapshots: transitivePeerDependencies: - debug + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.1 + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -17622,6 +17942,8 @@ snapshots: obuf@1.1.2: {} + ohash@2.0.11: {} + on-exit-leak-free@2.1.2: {} on-finished@2.4.1: @@ -17770,6 +18092,45 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + pg-cloudflare@1.2.7: + optional: true + + pg-connection-string@2.9.1: {} + + pg-int8@1.0.1: {} + + pg-pool@3.10.1(pg@8.16.3): + dependencies: + pg: 8.16.3 + + pg-protocol@1.10.3: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg@8.16.3: + dependencies: + pg-connection-string: 2.9.1 + pg-pool: 3.10.1(pg@8.16.3) + pg-protocol: 1.10.3 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.2.7 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -17836,6 +18197,12 @@ snapshots: dependencies: find-up: 6.3.0 + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + pluralize@8.0.0: {} portfinder@1.0.37: @@ -18046,6 +18413,18 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres-array@2.0.0: {} + + postgres-array@3.0.4: {} + + postgres-bytea@1.0.0: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + prelude-ls@1.2.1: {} prettier@3.5.3: {} @@ -18056,12 +18435,14 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prisma@6.9.0(typescript@5.8.3): + prisma@6.17.0(typescript@5.8.3): dependencies: - '@prisma/config': 6.9.0 - '@prisma/engines': 6.9.0 + '@prisma/config': 6.17.0 + '@prisma/engines': 6.17.0 optionalDependencies: typescript: 5.8.3 + transitivePeerDependencies: + - magicast proc-log@3.0.0: {} @@ -18127,6 +18508,11 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + react-is@18.3.1: {} read-cache@1.0.0: From dba18be6a2b77af72063e1ffeb19acc930e84f1a Mon Sep 17 00:00:00 2001 From: CSenshi Date: Wed, 8 Oct 2025 20:41:41 +0400 Subject: [PATCH 2/4] fix(webpack): remove redundant sourceMap configuration --- apps/url-shortener/webpack.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/url-shortener/webpack.config.js b/apps/url-shortener/webpack.config.js index 08c93c6..f1fb7f0 100644 --- a/apps/url-shortener/webpack.config.js +++ b/apps/url-shortener/webpack.config.js @@ -15,6 +15,7 @@ module.exports = { optimization: false, outputHashing: 'none', generatePackageJson: true, + sourceMap: false, }), ], }; From 7bff0f0503f1feafa13023ef46dac5f66c6a5f22 Mon Sep 17 00:00:00 2001 From: CSenshi Date: Wed, 8 Oct 2025 20:46:09 +0400 Subject: [PATCH 3/4] feat(ci): add step to generate Prisma clients for affected projects --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e2bcf7e..af071d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,6 +42,9 @@ jobs: - run: pnpm install --frozen-lockfile - uses: nrwl/nx-set-shas@v4 + # Generate Prisma clients for affected projects before running other targets + - run: pnpm exec nx affected -t prisma-generate + # Prepend any command with "nx-cloud record --" to record its logs to Nx Cloud # - run: pnpm exec nx-cloud record -- echo Hello World # Nx Affected runs only tasks affected by the changes in this PR/commit. Learn more: https://nx.dev/ci/features/affected From fda7ca54623edefb81cb42cc6abe08ca10f42f71 Mon Sep 17 00:00:00 2001 From: CSenshi Date: Wed, 8 Oct 2025 20:55:50 +0400 Subject: [PATCH 4/4] refactor(counter): update getNextCount method to use raw SQL query for sequence retrieval --- apps/url-shortener/package.json | 9 +-------- apps/url-shortener/prisma/schema.prisma | 1 - .../implementations/postgres/postgres-counter.service.ts | 7 +++++-- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/apps/url-shortener/package.json b/apps/url-shortener/package.json index 994c62f..074c4a3 100644 --- a/apps/url-shortener/package.json +++ b/apps/url-shortener/package.json @@ -77,14 +77,7 @@ "executor": "@nx-tools/nx-prisma:format" }, "prisma-generate": { - "executor": "nx:run-commands", - "options": { - "command": "prisma generate", - "args": [ - "--sql" - ], - "cwd": "apps/url-shortener" - } + "executor": "@nx-tools/nx-prisma:generate" }, "prisma-migrate": { "executor": "@nx-tools/nx-prisma:migrate" diff --git a/apps/url-shortener/prisma/schema.prisma b/apps/url-shortener/prisma/schema.prisma index 87eb57f..f6665ed 100644 --- a/apps/url-shortener/prisma/schema.prisma +++ b/apps/url-shortener/prisma/schema.prisma @@ -3,7 +3,6 @@ generator client { output = "../src/prisma/generated" engineType = "client" moduleFormat = "cjs" - previewFeatures = ["typedSql"] } datasource db { diff --git a/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts b/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts index a0bbb85..031dade 100644 --- a/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts +++ b/apps/url-shortener/src/counter/implementations/postgres/postgres-counter.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { getNextShortUrlId } from '../../../prisma/generated/sql'; +import { Prisma } from '../../../prisma/generated/client'; import { PrismaService } from '../../../prisma/prisma.service'; import { CounterService } from '../../counter.service'; @@ -10,7 +10,10 @@ export class PostgresCounterService extends CounterService { } async getNextCount(): Promise { - const result = await this.prisma.$queryRawTyped(getNextShortUrlId()); + const result = await this.prisma.$queryRaw<{ nextval: bigint }[]>( + Prisma.sql`SELECT nextval('next_shortend_urls_id_seq') AS nextval`, + ); + const nextSequenceNum = result[0].nextval; return Number(nextSequenceNum);