diff --git a/backend/Dockerfile b/backend/Dockerfile index 7a1e382ed9..2065a69c27 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -20,6 +20,8 @@ RUN npm --loglevel=error install -g npm@11.4.2 COPY package.json ./ COPY package-lock.json ./ +COPY scripts/patch-prisma-exports.js ./scripts/ +COPY vendor/ ./vendor/ RUN npm ci @@ -28,6 +30,7 @@ COPY tools/install-duckdb-extensions.js ./tools/ RUN node tools/install-duckdb-extensions.js COPY prisma/schema.prisma ./prisma/ +COPY prisma.config.ts ./ RUN npx prisma generate diff --git a/backend/package-lock.json b/backend/package-lock.json index 40b718564e..2919787aa5 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "smae", "version": "0.0.1", + "hasInstallScript": true, "license": "UNLICENSED", "dependencies": { "@dagrejs/graphlib": "^2.2.4", @@ -23,7 +24,8 @@ "@nestjs/schedule": "^6.0.0", "@nestjs/serve-static": "^5.0.3", "@nestjs/swagger": "^11.2.0", - "@prisma/client": "^6.12.0", + "@prisma/adapter-pg": "^7.4.2", + "@prisma/client": "^7.4.2", "@ts-graphviz/adapter": "^2.0.6", "@turf/simplify": "^7.2.0", "@types/geojson": "^7946.0.16", @@ -51,7 +53,7 @@ "passport-local": "^1.0.0", "percentile": "^1.6.0", "pg": "^8.16.3", - "prisma-field-encryption": "^1.6.0", + "prisma-field-encryption": "file:vendor/prisma-field-encryption.tgz", "reflect-metadata": "^0.2.2", "request-ip": "^3.3.0", "rimraf": "^6.0.1", @@ -99,7 +101,7 @@ "jest": "30.0.4", "mjml": "^4.15.3", "prettier": "^3.6.2", - "prisma": "^6.12.0", + "prisma": "^7.4.2", "source-map-support": "^0.5.21", "supertest": "^7.1.3", "ts-jest": "29.4.0", @@ -108,6 +110,10 @@ "tsconfig-paths": "4.2.0", "typescript": "^5.8.3", "yargs": "17.7.2" + }, + "engines": { + "node": ">=18.18.0", + "npm": ">=9.0.0" } }, "node_modules/@47ng/cloak": { @@ -846,6 +852,49 @@ "dev": true, "license": "MIT" }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.5.0.tgz", + "integrity": "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "10.5.0", + "@chevrotain/types": "10.5.0", + "lodash": "4.17.21" + } + }, + "node_modules/@chevrotain/gast": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-10.5.0.tgz", + "integrity": "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "10.5.0", + "lodash": "4.17.21" + } + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.1.2.tgz", + "integrity": "sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-10.5.0.tgz", + "integrity": "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-10.5.0.tgz", + "integrity": "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==", + "devOptional": true, + "license": "Apache-2.0" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -1007,6 +1056,36 @@ "node": ">17.0.0" } }, + "node_modules/@electric-sql/pglite": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.15.tgz", + "integrity": "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@electric-sql/pglite-socket": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.0.20.tgz", + "integrity": "sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "pglite-server": "dist/scripts/server.js" + }, + "peerDependencies": { + "@electric-sql/pglite": "0.3.15" + } + }, + "node_modules/@electric-sql/pglite-tools": { + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.2.20.tgz", + "integrity": "sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A==", + "devOptional": true, + "license": "Apache-2.0", + "peerDependencies": { + "@electric-sql/pglite": "0.3.15" + } + }, "node_modules/@emnapi/core": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz", @@ -1710,6 +1789,19 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "license": "MIT" }, + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -3284,6 +3376,20 @@ "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", "license": "MIT" }, + "node_modules/@mrleebo/prisma-ast": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@mrleebo/prisma-ast/-/prisma-ast-0.13.1.tgz", + "integrity": "sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chevrotain": "^10.5.0", + "lilconfig": "^2.1.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", @@ -3967,18 +4073,40 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@prisma/adapter-pg": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.4.2.tgz", + "integrity": "sha512-oUo2Zhe9Tf6YwVL8kLPuOLTK1Z2pwi/Ua77t2PuGyBan2w7shRKqHvYK+3XXmRH9RWhPJ4SMtHZKpNo6Ax/4bQ==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/driver-adapter-utils": "7.4.2", + "pg": "^8.16.3", + "postgres-array": "3.0.4" + } + }, + "node_modules/@prisma/adapter-pg/node_modules/postgres-array": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz", + "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/@prisma/client": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.12.0.tgz", - "integrity": "sha512-wn98bJ3Cj6edlF4jjpgXwbnQIo/fQLqqQHPk2POrZPxTlhY3+n90SSIF3LMRVa8VzRFC/Gec3YKJRxRu+AIGVA==", - "hasInstallScript": true, + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.4.2.tgz", + "integrity": "sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA==", "license": "Apache-2.0", + "dependencies": { + "@prisma/client-runtime-utils": "7.4.2" + }, "engines": { - "node": ">=18.18" + "node": "^20.19 || ^22.12 || >=24.0" }, "peerDependencies": { "prisma": "*", - "typescript": ">=5.1.0" + "typescript": ">=5.4.0" }, "peerDependenciesMeta": { "prisma": { @@ -3989,93 +4117,198 @@ } } }, + "node_modules/@prisma/client-runtime-utils": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.4.2.tgz", + "integrity": "sha512-cID+rzOEb38VyMsx5LwJMEY4NGIrWCNpKu/0ImbeooQ2Px7TI+kOt7cm0NelxUzF2V41UVVXAmYjANZQtCu1/Q==", + "license": "Apache-2.0" + }, "node_modules/@prisma/config": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.12.0.tgz", - "integrity": "sha512-HovZWzhWEMedHxmjefQBRZa40P81N7/+74khKFz9e1AFjakcIQdXgMWKgt20HaACzY+d1LRBC+L4tiz71t9fkg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.4.2.tgz", + "integrity": "sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "jiti": "2.4.2" + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.12.0.tgz", - "integrity": "sha512-wK3fQLxPLMqf5riT5ZIhl8NffPSzFUwtzFX5CH7z/oI9Swmo9UhQlUgZABIVgdXSJ5OAlmRcDZtDKaMApIl8sg==" + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.13.0.tgz", + "integrity": "sha512-um+9pfKJW0ihmM83id9FXGi5qEbVJ0Vxi1Gm0xpYsjwUBnw6s2LdPBbrsG9QXRX46K4CLWCTNvskXBup4i9hlw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/dev": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.20.0.tgz", + "integrity": "sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "@electric-sql/pglite": "0.3.15", + "@electric-sql/pglite-socket": "0.0.20", + "@electric-sql/pglite-tools": "0.2.20", + "@hono/node-server": "1.19.9", + "@mrleebo/prisma-ast": "0.13.1", + "@prisma/get-platform": "7.2.0", + "@prisma/query-plan-executor": "7.2.0", + "foreground-child": "3.3.1", + "get-port-please": "3.2.0", + "hono": "4.11.4", + "http-status-codes": "2.3.0", + "pathe": "2.0.3", + "proper-lockfile": "4.1.2", + "remeda": "2.33.4", + "std-env": "3.10.0", + "valibot": "1.2.0", + "zeptomatch": "2.1.0" + } + }, + "node_modules/@prisma/dmmf": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@prisma/dmmf/-/dmmf-6.13.0.tgz", + "integrity": "sha512-69qWP2ddIpI2L3VyQkwGjhtyj1CNXUJ0qZPLa1VmZ27h20rUXBPflLAel9EtOyct/GSTjSq8qjBbhW5ohrfbSw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/driver-adapter-utils": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.4.2.tgz", + "integrity": "sha512-REdjFpT/ye9KdDs+CXAXPIbMQkVLhne9G5Pe97sNY4Ovx4r2DAbWM9hOFvvB1Oq8H8bOCdu0Ri3AoGALquQqVw==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.4.2" + } + }, + "node_modules/@prisma/driver-adapter-utils/node_modules/@prisma/debug": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.4.2.tgz", + "integrity": "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w==", + "license": "Apache-2.0" }, "node_modules/@prisma/engines": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.12.0.tgz", - "integrity": "sha512-4BRZZUaAuB4p0XhTauxelvFs7IllhPmNLvmla0bO1nkECs8n/o1pUvAVbQ/VOrZR5DnF4HED0PrGai+rIOVePA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.4.2.tgz", + "integrity": "sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/fetch-engine": "6.12.0", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "7.4.2", + "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", + "@prisma/fetch-engine": "7.4.2", + "@prisma/get-platform": "7.4.2" } }, "node_modules/@prisma/engines-version": { - "version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc.tgz", - "integrity": "sha512-70vhecxBJlRr06VfahDzk9ow4k1HIaSfVUT3X0/kZoHCMl9zbabut4gEXAyzJZxaCGi5igAA7SyyfBI//mmkbQ==", + "version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919.tgz", + "integrity": "sha512-5FIKY3KoYQlBuZC2yc16EXfVRQ8HY+fLqgxkYfWCtKhRb3ajCRzP/rPeoSx11+NueJDANdh4hjY36mdmrTcGSg==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines/node_modules/@prisma/debug": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.12.0.tgz", - "integrity": "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.4.2.tgz", + "integrity": "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w==", "devOptional": true, "license": "Apache-2.0" }, + "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.4.2.tgz", + "integrity": "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.4.2" + } + }, "node_modules/@prisma/fetch-engine": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.12.0.tgz", - "integrity": "sha512-EamoiwrK46rpWaEbLX9aqKDPOd8IyLnZAkiYXFNuq0YsU0Z8K09/rH8S7feOWAVJ3xzeSgcEJtBlVDrajM9Sag==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.4.2.tgz", + "integrity": "sha512-f/c/MwYpdJO7taLETU8rahEstLeXfYgQGlz5fycG7Fbmva3iPdzGmjiSWHeSWIgNnlXnelUdCJqyZnFocurZuA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "7.4.2", + "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", + "@prisma/get-platform": "7.4.2" } }, "node_modules/@prisma/fetch-engine/node_modules/@prisma/debug": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.12.0.tgz", - "integrity": "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.4.2.tgz", + "integrity": "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w==", "devOptional": true, "license": "Apache-2.0" }, + "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.4.2.tgz", + "integrity": "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.4.2" + } + }, + "node_modules/@prisma/generator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@prisma/generator/-/generator-6.13.0.tgz", + "integrity": "sha512-vlV1qiEEb1w7D1J0h5/rz3ppgM/BRcJP5xz2QqHBlbjcAWzJjHkHsxeuC/OmkO4uHZXe9T2dGtf/nTw29UsBzA==", + "license": "Apache-2.0" + }, "node_modules/@prisma/generator-helper": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@prisma/generator-helper/-/generator-helper-5.12.0.tgz", - "integrity": "sha512-GspOjzdcct2ScxUv5gsU/8GyUzPq3Ei4DJCDjv+DMvrDSm/znkC4CbvG4P0MrUuUBMkctJ3+/9BdbY/p1pmhug==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@prisma/generator-helper/-/generator-helper-6.13.0.tgz", + "integrity": "sha512-6v5k9sGMhRDAnWxVfIo7QlewgVyOhr2NykyNh/PaH55g0LDswiTSYDfPPKyCPLxjDG0eA7FFX+gDyf94QkLT1A==", + "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "5.12.0" + "@prisma/debug": "6.13.0", + "@prisma/dmmf": "6.13.0", + "@prisma/generator": "6.13.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.12.0.tgz", - "integrity": "sha512-nRerTGhTlgyvcBlyWgt8OLNIV7QgJS2XYXMJD1hysorMCuLAjuDDuoxmVt7C2nLxbuxbWPp7OuFRHC23HqD9dA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.2.0.tgz", + "integrity": "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0" + "@prisma/debug": "7.2.0" } }, "node_modules/@prisma/get-platform/node_modules/@prisma/debug": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.12.0.tgz", - "integrity": "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.2.0.tgz", + "integrity": "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==", "devOptional": true, "license": "Apache-2.0" }, + "node_modules/@prisma/query-plan-executor": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/query-plan-executor/-/query-plan-executor-7.2.0.tgz", + "integrity": "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/studio-core": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.13.1.tgz", + "integrity": "sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg==", + "devOptional": true, + "license": "Apache-2.0", + "peerDependencies": { + "@types/react": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@scarf/scarf": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", @@ -4139,6 +4372,13 @@ "integrity": "sha512-sDL1aB2U8FIpj7SjQJMxbOFIFkKvDKQGPHSrYejHZhtLNSK3qHe6ZIfa0woWkOiaJsdYslFzrc0VWXJZHmSIQQ==", "license": "MIT" }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@streamparser/json": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.20.tgz", @@ -4812,6 +5052,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, "node_modules/@types/request-ip": { "version": "0.0.41", "resolved": "https://registry.npmjs.org/@types/request-ip/-/request-ip-0.0.41.tgz", @@ -5943,6 +6194,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/babel-jest": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.4.tgz", @@ -6285,6 +6546,48 @@ "node": ">= 0.8" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, + "license": "MIT", + "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.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -6678,11 +6981,26 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/chevrotain": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-10.5.0.tgz", + "integrity": "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "10.5.0", + "@chevrotain/gast": "10.5.0", + "@chevrotain/types": "10.5.0", + "@chevrotain/utils": "10.5.0", + "lodash": "4.17.21", + "regexp-to-ast": "0.5.0" + } + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -6728,6 +7046,16 @@ "node": ">=8" } }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/cjs-module-lexer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", @@ -7040,6 +7368,13 @@ "typedarray": "^0.0.6" } }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -7251,6 +7586,14 @@ "node": ">=18" } }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT", + "peer": true + }, "node_modules/csv-parse": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz", @@ -7356,6 +7699,16 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -7393,6 +7746,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -7409,6 +7769,16 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "license": "MIT" }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -7418,6 +7788,13 @@ "node": ">= 0.8" } }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -7663,6 +8040,17 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -7702,6 +8090,16 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -8475,6 +8873,53 @@ "node": ">= 0.6" } }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fast-check/node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8729,11 +9174,12 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -8962,6 +9408,16 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -9022,6 +9478,13 @@ "node": ">=8.0.0" } }, + "node_modules/get-port-please": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", + "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", + "devOptional": true, + "license": "MIT" + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -9049,6 +9512,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob": { "version": "10.4.2", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", @@ -9145,12 +9626,26 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/grammex": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.12.tgz", + "integrity": "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/graphmatch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/graphmatch/-/graphmatch-1.1.1.tgz", + "integrity": "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9232,6 +9727,16 @@ "he": "bin/he" } }, + "node_modules/hono": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", + "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", @@ -9341,6 +9846,13 @@ "node": ">= 14" } }, + "node_modules/http-status-codes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", + "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -9428,9 +9940,10 @@ } }, "node_modules/immer": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.4.tgz", - "integrity": "sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -9675,6 +10188,13 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "devOptional": true, + "license": "MIT" + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -10796,6 +11316,15 @@ "integrity": "sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==", "license": "MIT" }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -10851,6 +11380,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "license": "MIT" + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -10946,6 +11481,13 @@ "node": ">=0.1.90" } }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "devOptional": true, + "license": "Apache-2.0" + }, "node_modules/lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -10971,6 +11513,22 @@ "yallist": "^3.0.2" } }, + "node_modules/lru.min": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", + "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", + "devOptional": true, + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, "node_modules/luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -12102,6 +12660,57 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/mysql2": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz", + "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.7.0", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "lru.min": "^1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/napi-postinstall": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz", @@ -12193,6 +12802,13 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -12468,6 +13084,31 @@ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", "license": "MIT" }, + "node_modules/nypm": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", + "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.2.0", + "pathe": "^2.0.3", + "tinyexec": "^1.0.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", + "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -12492,10 +13133,18 @@ "version": "0.11.8", "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", + "license": "MIT", "engines": { "node": ">= 10.12.0" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -12850,6 +13499,13 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "devOptional": true, + "license": "MIT" + }, "node_modules/pause": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", @@ -12860,6 +13516,13 @@ "resolved": "https://registry.npmjs.org/percentile/-/percentile-1.6.0.tgz", "integrity": "sha512-8vSyjdzwxGDHHwH+cSGch3A9Uj2On3UpgOWxWXMKwUvoAbnujx6DaqmV1duWXNiH/oEWpyVd6nSQccix6DM3Ng==" }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/pg": { "version": "8.16.3", "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", @@ -13048,6 +13711,18 @@ "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -13066,6 +13741,20 @@ "node": ">= 0.4" } }, + "node_modules/postgres": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", + "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", + "devOptional": true, + "license": "Unlicense", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/porsager" + } + }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -13183,49 +13872,119 @@ } }, "node_modules/prisma": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.12.0.tgz", - "integrity": "sha512-pmV7NEqQej9WjizN6RSNIwf7Y+jeh9mY1JEX2WjGxJi4YZWexClhde1yz/FuvAM+cTwzchcMytu2m4I6wPkIzg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.4.2.tgz", + "integrity": "sha512-2bP8Ruww3Q95Z2eH4Yqh4KAENRsj/SxbdknIVBfd6DmjPwmpsC4OVFMLOeHt6tM3Amh8ebjvstrUz3V/hOe1dA==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.12.0", - "@prisma/engines": "6.12.0" + "@prisma/config": "7.4.2", + "@prisma/dev": "0.20.0", + "@prisma/engines": "7.4.2", + "@prisma/studio-core": "0.13.1", + "mysql2": "3.15.3", + "postgres": "3.4.7" }, "bin": { "prisma": "build/index.js" }, "engines": { - "node": ">=18.18" + "node": "^20.19 || ^22.12 || >=24.0" }, "peerDependencies": { - "typescript": ">=5.1.0" + "better-sqlite3": ">=9.0.0", + "typescript": ">=5.4.0" }, "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, "typescript": { "optional": true } } }, "node_modules/prisma-field-encryption": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/prisma-field-encryption/-/prisma-field-encryption-1.6.0.tgz", - "integrity": "sha512-JEKHyq5z0Wn6x74UtQN6n7ppXEGRq7ViyRophzELRAhCVnZv4JGrBOlrX4aWKiU+ZPL2BO9E1HxzcSjAN7pWKQ==", + "version": "0.0.0-semantically-released", + "resolved": "file:vendor/prisma-field-encryption.tgz", + "integrity": "sha512-T74Jo0Onp0jVNQHYqX1iPjugOa2A7Tm++Ksl7MaeHqKdtcG3JdNWdJ7MTZ/0QAf/4T3rTNmcl17ihLAgmmEJmw==", "license": "MIT", "dependencies": { "@47ng/cloak": "^1.2.0", - "@prisma/generator-helper": "^5.9.1", - "debug": "^4.3.4", - "immer": "^10.0.3", + "@47ng/codec": "^1.1.0", + "@mrleebo/prisma-ast": "0.14.0", + "@prisma/generator-helper": "6.13.0", + "debug": "^4.4.0", + "immer": "^10.1.1", "object-path": "^0.11.8", - "zod": "^3.22.4" + "zod": "^3.24.0" }, "bin": { "prisma-field-encryption": "dist/generator/main.js" }, "peerDependencies": { - "@prisma/client": ">= 4.7" + "@prisma/client": ">=4.7.0" + } + }, + "node_modules/prisma-field-encryption/node_modules/@chevrotain/cst-dts-gen": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.1.2.tgz", + "integrity": "sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "11.1.2", + "@chevrotain/types": "11.1.2", + "lodash-es": "4.17.23" + } + }, + "node_modules/prisma-field-encryption/node_modules/@chevrotain/gast": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.1.2.tgz", + "integrity": "sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "11.1.2", + "lodash-es": "4.17.23" + } + }, + "node_modules/prisma-field-encryption/node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" + }, + "node_modules/prisma-field-encryption/node_modules/@chevrotain/utils": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.1.2.tgz", + "integrity": "sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA==", + "license": "Apache-2.0" + }, + "node_modules/prisma-field-encryption/node_modules/@mrleebo/prisma-ast": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@mrleebo/prisma-ast/-/prisma-ast-0.14.0.tgz", + "integrity": "sha512-nKouX7rsrzk/5nk6Wayvgqt81tnAbSbPFC5XzRTDc5/tSCrBf/tSMAXEm1CeUznC/ZL664iH5KNwvvmPtJ8jqQ==", + "license": "MIT", + "dependencies": { + "chevrotain": "^11.1.1", + "lilconfig": "^2.1.0" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/prisma-field-encryption/node_modules/chevrotain": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.1.2.tgz", + "integrity": "sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "11.1.2", + "@chevrotain/gast": "11.1.2", + "@chevrotain/regexp-to-ast": "11.1.2", + "@chevrotain/types": "11.1.2", + "@chevrotain/utils": "11.1.2", + "lodash-es": "4.17.23" } }, "node_modules/promise-inflight": { @@ -13247,6 +14006,25 @@ "node": ">=10" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -13406,6 +14184,42 @@ "node": ">= 0.8" } }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "devOptional": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -13430,7 +14244,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -13445,6 +14259,13 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, + "node_modules/regexp-to-ast": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "devOptional": true, + "license": "MIT" + }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -13455,6 +14276,16 @@ "node": ">= 0.10" } }, + "node_modules/remeda": { + "version": "2.33.4", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.33.4.tgz", + "integrity": "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/remeda" + } + }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -13787,6 +14618,14 @@ "node": ">=v12.22.7" } }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "devOptional": true, + "license": "MIT", + "peer": true + }, "node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -13890,6 +14729,12 @@ "node": ">= 0.6" } }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", + "devOptional": true + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -14221,6 +15066,16 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "license": "BSD-3-Clause" }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/ssf": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", @@ -14302,6 +15157,13 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/stream-chain": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", @@ -14851,6 +15713,16 @@ "readable-stream": "3" } }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tldts": { "version": "6.1.86", "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", @@ -15479,6 +16351,21 @@ "node": ">=10.12.0" } }, + "node_modules/valibot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", + "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/valid-data-url": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", @@ -16219,10 +17106,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zeptomatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.1.0.tgz", + "integrity": "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "grammex": "^3.1.11", + "graphmatch": "^1.1.0" + } + }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/backend/package.json b/backend/package.json index 43143e92ab..1a9e34b693 100644 --- a/backend/package.json +++ b/backend/package.json @@ -5,6 +5,10 @@ "author": "", "private": true, "license": "UNLICENSED", + "engines": { + "node": ">=18.18.0", + "npm": ">=9.0.0" + }, "scripts": { "db:migrate:gen": "./bin/db-migrate-gen", "db:migrate:up": "prisma migrate dev", @@ -34,7 +38,8 @@ "test:e2e:watch": "jest --config ./test/jest-e2e.json --watch", "test:e2e:cov": "jest --config ./test/jest-e2e.json --coverage --forceExit", "test:e2e:ci": "jest --config ./test/jest-e2e.json --coverage --forceExit --ci --reporters=default --reporters=jest-junit", - "check:modules": "ts-node tools/check-module-imports.ts" + "check:modules": "ts-node tools/check-module-imports.ts", + "postinstall": "node scripts/patch-prisma-exports.js" }, "dependencies": { "@dagrejs/graphlib": "^2.2.4", @@ -51,7 +56,8 @@ "@nestjs/schedule": "^6.0.0", "@nestjs/serve-static": "^5.0.3", "@nestjs/swagger": "^11.2.0", - "@prisma/client": "^6.12.0", + "@prisma/adapter-pg": "^7.4.2", + "@prisma/client": "^7.4.2", "@ts-graphviz/adapter": "^2.0.6", "@turf/simplify": "^7.2.0", "@types/geojson": "^7946.0.16", @@ -79,7 +85,7 @@ "passport-local": "^1.0.0", "percentile": "^1.6.0", "pg": "^8.16.3", - "prisma-field-encryption": "^1.6.0", + "prisma-field-encryption": "file:vendor/prisma-field-encryption.tgz", "reflect-metadata": "^0.2.2", "request-ip": "^3.3.0", "rimraf": "^6.0.1", @@ -127,7 +133,7 @@ "jest": "30.0.4", "mjml": "^4.15.3", "prettier": "^3.6.2", - "prisma": "^6.12.0", + "prisma": "^7.4.2", "source-map-support": "^0.5.21", "supertest": "^7.1.3", "ts-jest": "29.4.0", diff --git a/backend/prisma.config.ts b/backend/prisma.config.ts new file mode 100644 index 0000000000..c3f2a61c45 --- /dev/null +++ b/backend/prisma.config.ts @@ -0,0 +1,12 @@ +import 'dotenv/config'; +import { defineConfig, env } from 'prisma/config'; + +export default defineConfig({ + schema: 'prisma/schema.prisma', + migrations: { + path: 'prisma/migrations', + }, + datasource: { + url: env('DATABASE_URL'), + }, +}); diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index 7886a69728..fc93839453 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -5,7 +5,6 @@ generator client { datasource db { provider = "postgresql" - url = env("DATABASE_URL") } model Pessoa { @@ -4103,7 +4102,7 @@ model CompromissoOrigem { } view ViewProjetoMDO { - id Int @id + id Int nome String codigo String? portfolio_id Int @@ -4138,7 +4137,7 @@ view ViewProjetoMDO { } view ViewProjetoV2 { - id Int @id + id Int nome String codigo String? portfolio_id Int @@ -4183,7 +4182,7 @@ view ViewProjetoV2 { } view ViewVariavelGlobal { - id Int @id + id Int variavel Variavel @relation(fields: [id], references: [id]) titulo String codigo String @@ -4963,7 +4962,7 @@ view view_api_request_log { // view que já faz o join dos registros da meta_orgao onde responsavel=true view view_meta_pessoa_responsavel { - id Int @id @default(autoincrement()) + id Int meta_id Int pessoa_id Int @@ -4973,7 +4972,7 @@ view view_meta_pessoa_responsavel { } view view_atividade_pessoa_responsavel { - id Int @id @default(autoincrement()) + id Int atividade_id Int iniciativa_id Int @@ -4984,7 +4983,7 @@ view view_atividade_pessoa_responsavel { } view view_iniciativa_pessoa_responsavel { - id Int @id @default(autoincrement()) + id Int iniciativa_id Int meta_id Int @@ -4995,7 +4994,7 @@ view view_iniciativa_pessoa_responsavel { // view que já faz o join o filtro onde PDM.coordenador_responsavel_cp=true view view_meta_pessoa_responsavel_na_cp { - id Int @id @default(autoincrement()) + id Int meta_id Int pessoa_id Int @@ -5289,7 +5288,7 @@ model MetaStatusAtrasoVariavel { } view view_pdm_meta_iniciativa_atividade { - meta_id Int @id + meta_id Int pdm_id Int iniciativa_id Int? atividade_id Int? @@ -5304,13 +5303,13 @@ view view_pdm_meta_iniciativa_atividade { // helper para subir atividade/iniciativa -> meta_id view view_meta_cronograma { - cronograma_id Int @id + cronograma_id Int meta_id Int } // helper para subir etapa com atividade/iniciativa -> meta_id view view_etapa_rel_meta { - etapa_id Int @id + etapa_id Int meta_id Int atividade_id Int? iniciativa_id Int? @@ -5319,7 +5318,7 @@ view view_etapa_rel_meta { } view view_etapa_rel_meta_indicador { - etapa_id Int @id @default(autoincrement()) + etapa_id Int tipo String meta_id Int? @@ -6798,7 +6797,7 @@ model Nota { } view ViewNotas { - id Int @id @default(autoincrement()) + id Int bloco_nota_id Int tipo_nota_id Int @@ -6833,7 +6832,7 @@ view ViewNotas { } view ViewNotasTransferencias { - id Int @id @default(autoincrement()) + id Int bloco_nota_id Int data_nota DateTime @db.Date @@ -6930,7 +6929,7 @@ model TransferenciaStatusConsolidado { } view ViewTransferenciaAnalise { - transferencia_id Int @id + transferencia_id Int transferencia Transferencia @relation(fields: [transferencia_id], references: [id]) workflow_finalizado Boolean @@ -6951,7 +6950,7 @@ view ViewTransferenciaAnalise { } view ViewRankingTransferenciaParlamentar { - parlamentar_id Int @id + parlamentar_id Int parlamentar Parlamentar @relation(fields: [parlamentar_id], references: [id]) nome_popular String @@ -7743,7 +7742,7 @@ model SerieVariavelHistorico { } view ViewPainelEstrategicoProjetos { - projeto_id Int @id + projeto_id Int projeto Projeto @relation(fields: [projeto_id], references: [id]) orgao_responsavel_id Int? orgao_responsavel Orgao? @relation(fields: [orgao_responsavel_id], references: [id]) @@ -7819,7 +7818,7 @@ model PsDashboardConsolidado { } view view_ps_dashboard_consolidado { - id Int @id + id Int item_id Int tipo PsDashboardConsolidadoTipo pdm_id Int diff --git a/backend/scripts/patch-prisma-exports.js b/backend/scripts/patch-prisma-exports.js new file mode 100644 index 0000000000..8e5fa84cbf --- /dev/null +++ b/backend/scripts/patch-prisma-exports.js @@ -0,0 +1,48 @@ +#!/usr/bin/env node +/** + * Patches @prisma/client-runtime-utils package.json to export ./dist subpath. + * + * Prisma 7's NestJS swagger plugin generates require("@prisma/client-runtime-utils/dist") + * in metadata, but the package's exports map doesn't include "./dist". + * Node 24 enforces exports strictly, causing ERR_PACKAGE_PATH_NOT_EXPORTED. + * + * This patch adds "./dist" and "./dist/*" to the exports map. + * Can be removed once Prisma fixes this upstream. + */ +const fs = require('fs'); +const path = require('path'); + +const pkgPath = path.join( + __dirname, + '..', + 'node_modules', + '@prisma', + 'client-runtime-utils', + 'package.json' +); + +if (!fs.existsSync(pkgPath)) { + // Package not installed yet, skip + process.exit(0); +} + +const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); + +if (pkg.exports && !pkg.exports['./dist']) { + pkg.exports['./dist'] = { + require: { + types: './dist/index.d.ts', + default: './dist/index.js', + }, + import: { + types: './dist/index.d.ts', + default: './dist/index.mjs', + }, + }; + pkg.exports['./dist/*'] = './dist/*'; + + fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n'); + console.log('[patch] Added ./dist exports to @prisma/client-runtime-utils'); +} else { + console.log('[patch] @prisma/client-runtime-utils exports already patched or not needed'); +} diff --git a/backend/src/api-logs/backup-scheduler.service.ts b/backend/src/api-logs/backup-scheduler.service.ts index 8505d92ec1..c75e814003 100644 --- a/backend/src/api-logs/backup-scheduler.service.ts +++ b/backend/src/api-logs/backup-scheduler.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { Cron, CronExpression } from '@nestjs/schedule'; -import { task_type } from '@prisma/client'; +import { Prisma, task_type } from '@prisma/client'; import { DateTime } from 'luxon'; import { SmaeConfigService } from 'src/common/services/smae-config.service'; import { PrismaService } from 'src/prisma/prisma.service'; @@ -55,9 +55,7 @@ export class BackupSchedulerService { } } - private async scheduleApiLogBackupTasks( - tx: Omit - ) { + private async scheduleApiLogBackupTasks(tx: Prisma.TransactionClient) { await tx.apiRequestLogControl.updateMany({ where: { status: 'BACKING_UP', diff --git a/backend/src/casa-civil/dash/transferencia.service.ts b/backend/src/casa-civil/dash/transferencia.service.ts index ea454913fd..2641ce6c67 100644 --- a/backend/src/casa-civil/dash/transferencia.service.ts +++ b/backend/src/casa-civil/dash/transferencia.service.ts @@ -23,7 +23,7 @@ import { } from './dto/transferencia.dto'; import { TransferenciaTipoEsfera } from '@prisma/client'; import { UploadService } from 'src/upload/upload.service'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { Date2YMD } from '../../common/date2ymd'; import { Object2Hash } from 'src/common/object2hash'; diff --git a/backend/src/casa-civil/distribuicao-recurso/entities/distribuicao-recurso.entity.ts b/backend/src/casa-civil/distribuicao-recurso/entities/distribuicao-recurso.entity.ts index d6ba9558ec..edb47f7d57 100644 --- a/backend/src/casa-civil/distribuicao-recurso/entities/distribuicao-recurso.entity.ts +++ b/backend/src/casa-civil/distribuicao-recurso/entities/distribuicao-recurso.entity.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { DistribuicaoStatusTipo, ParlamentarCargo } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { IdSigla, IdSiglaDescricao } from 'src/common/dto/IdSigla.dto'; import { ParlamnetarIdNomes } from 'src/parlamentar/entities/parlamentar.entity'; import { SeiIntegracaoDto } from '../../../sei-integracao/entities/sei-entidade.entity'; diff --git a/backend/src/casa-civil/transferencia/entities/transferencia.dto.ts b/backend/src/casa-civil/transferencia/entities/transferencia.dto.ts index 3bfcdcaf5d..25b5cb1c3a 100644 --- a/backend/src/casa-civil/transferencia/entities/transferencia.dto.ts +++ b/backend/src/casa-civil/transferencia/entities/transferencia.dto.ts @@ -6,7 +6,7 @@ import { TransferenciaInterface, TransferenciaTipoEsfera, } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { IdNomeDto } from 'src/common/dto/IdNome.dto'; import { IdSigla, IdSiglaDescricao } from 'src/common/dto/IdSigla.dto'; import { ParlamnetarIdNomes } from 'src/parlamentar/entities/parlamentar.entity'; diff --git a/backend/src/casa-civil/vinculo/entities/vinculo.entity.ts b/backend/src/casa-civil/vinculo/entities/vinculo.entity.ts index 191f4dad41..edf03892a2 100644 --- a/backend/src/casa-civil/vinculo/entities/vinculo.entity.ts +++ b/backend/src/casa-civil/vinculo/entities/vinculo.entity.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { CampoVinculo, TipoPdm } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { IdNomeDto } from 'src/common/dto/IdNome.dto'; import { IdSiglaDescricao } from 'src/common/dto/IdSigla.dto'; diff --git a/backend/src/indicador/entities/indicador.entity.ts b/backend/src/indicador/entities/indicador.entity.ts index 690172dabf..9e6892642e 100644 --- a/backend/src/indicador/entities/indicador.entity.ts +++ b/backend/src/indicador/entities/indicador.entity.ts @@ -1,5 +1,5 @@ import { IndicadorPreviaOpcao, IndicadorTipo, Periodicidade, Polaridade } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { FormulaVariaveis } from '../dto/update-indicador.dto'; import { IsDateYMD } from '../../auth/decorators/date.decorator'; diff --git a/backend/src/orcamento-planejado/entities/orcamento-planejado.entity.ts b/backend/src/orcamento-planejado/entities/orcamento-planejado.entity.ts index 444da03542..ed9ed5d957 100644 --- a/backend/src/orcamento-planejado/entities/orcamento-planejado.entity.ts +++ b/backend/src/orcamento-planejado/entities/orcamento-planejado.entity.ts @@ -1,4 +1,4 @@ -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { IdCodTituloDto } from '../../common/dto/IdCodTitulo.dto'; export class OrcamentoPlanejado { diff --git a/backend/src/orcamento-planejado/orcamento-planejado.service.ts b/backend/src/orcamento-planejado/orcamento-planejado.service.ts index 4060fdda94..47a96390b5 100644 --- a/backend/src/orcamento-planejado/orcamento-planejado.service.ts +++ b/backend/src/orcamento-planejado/orcamento-planejado.service.ts @@ -1,6 +1,6 @@ import { forwardRef, HttpException, Inject, Injectable } from '@nestjs/common'; import { Prisma } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { PessoaFromJwt } from '../auth/models/PessoaFromJwt'; import { RecordWithId } from '../common/dto/record-with-id.dto'; import { DotacaoService } from '../dotacao/dotacao.service'; diff --git a/backend/src/orcamento-realizado/orcamento-realizado.service.ts b/backend/src/orcamento-realizado/orcamento-realizado.service.ts index 799d6f28b7..7ad47ea700 100644 --- a/backend/src/orcamento-realizado/orcamento-realizado.service.ts +++ b/backend/src/orcamento-realizado/orcamento-realizado.service.ts @@ -1,7 +1,7 @@ import { BadRequestException, HttpException, Injectable, Logger } from '@nestjs/common'; import { Cron, CronExpression } from '@nestjs/schedule'; import { Prisma } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { DateTime } from 'luxon'; import { SmaeConfigService } from 'src/common/services/smae-config.service'; import { SYSTEM_TIMEZONE } from '../common/date2ymd'; diff --git a/backend/src/painel/dto/detalhe-painel.dto.ts b/backend/src/painel/dto/detalhe-painel.dto.ts index c468f8b155..ecf7460d7c 100644 --- a/backend/src/painel/dto/detalhe-painel.dto.ts +++ b/backend/src/painel/dto/detalhe-painel.dto.ts @@ -1,5 +1,5 @@ import { Periodicidade, Periodo, Prisma, Serie } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; export class DetailPainelVisualizacaoDto { id: number; diff --git a/backend/src/painel/painel.service.ts b/backend/src/painel/painel.service.ts index 76bd34f280..cdce0ee802 100644 --- a/backend/src/painel/painel.service.ts +++ b/backend/src/painel/painel.service.ts @@ -1,6 +1,6 @@ import { BadRequestException, HttpException, Injectable } from '@nestjs/common'; import { PainelConteudoTipoDetalhe, Periodicidade, Periodo, Prisma } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { DateTime } from 'luxon'; import * as moment from 'moment'; import { PessoaFromJwt } from '../auth/models/PessoaFromJwt'; diff --git a/backend/src/pp/contrato-aditivo/entities/contrato-aditivo.entity.ts b/backend/src/pp/contrato-aditivo/entities/contrato-aditivo.entity.ts index b45ed22f72..10763199a6 100644 --- a/backend/src/pp/contrato-aditivo/entities/contrato-aditivo.entity.ts +++ b/backend/src/pp/contrato-aditivo/entities/contrato-aditivo.entity.ts @@ -1,4 +1,4 @@ -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { ProjetoTipoAditivoDto } from 'src/tipo-aditivo/dto/tipo-aditivo.dto'; import { IsDateYMD } from '../../../auth/decorators/date.decorator'; diff --git a/backend/src/pp/contrato/contrato.service.ts b/backend/src/pp/contrato/contrato.service.ts index 3c8912dd7f..e88be9c387 100644 --- a/backend/src/pp/contrato/contrato.service.ts +++ b/backend/src/pp/contrato/contrato.service.ts @@ -1,6 +1,6 @@ import { HttpException, Injectable, NotFoundException } from '@nestjs/common'; import { Prisma } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { RecordWithId } from 'src/common/dto/record-with-id.dto'; import { PessoaFromJwt } from '../../auth/models/PessoaFromJwt'; diff --git a/backend/src/pp/contrato/entities/contrato.entity.ts b/backend/src/pp/contrato/entities/contrato.entity.ts index a17d458844..8b8c488ff5 100644 --- a/backend/src/pp/contrato/entities/contrato.entity.ts +++ b/backend/src/pp/contrato/entities/contrato.entity.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { StatusContrato } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { IdNomeDto } from 'src/common/dto/IdNome.dto'; import { IdSiglaDescricao } from 'src/common/dto/IdSigla.dto'; import { ContratoAditivoItemDto } from 'src/pp/contrato-aditivo/entities/contrato-aditivo.entity'; diff --git a/backend/src/pp/orcamento-planejado/orcamento-planejado.service.ts b/backend/src/pp/orcamento-planejado/orcamento-planejado.service.ts index 4aaedab85e..67fac5f906 100644 --- a/backend/src/pp/orcamento-planejado/orcamento-planejado.service.ts +++ b/backend/src/pp/orcamento-planejado/orcamento-planejado.service.ts @@ -11,7 +11,7 @@ import { } from './dto/create-orcamento-planejado.dto'; import { PPOrcamentoPlanejadoDto } from './entities/orcamento-planejado.entity'; import { ProjetoDetailDto } from '../projeto/entities/projeto.entity'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; @Injectable() export class OrcamentoPlanejadoService { diff --git a/backend/src/pp/orcamento-realizado/orcamento-realizado.service.ts b/backend/src/pp/orcamento-realizado/orcamento-realizado.service.ts index 2c8c3491e4..0953b43c40 100644 --- a/backend/src/pp/orcamento-realizado/orcamento-realizado.service.ts +++ b/backend/src/pp/orcamento-realizado/orcamento-realizado.service.ts @@ -21,7 +21,7 @@ import { LIBERAR_LIQUIDADO_VALORES_MAIORES_QUE_SOF, verificaValorLiqEmpenhoMaiorEmp, } from '../../orcamento-realizado/orcamento-realizado.service'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { SmaeConfigService } from 'src/common/services/smae-config.service'; import { VinculoService } from 'src/casa-civil/vinculo/vinculo.service'; diff --git a/backend/src/prisma/prisma.service.ts b/backend/src/prisma/prisma.service.ts index a3c81fde22..41d0c7c28b 100644 --- a/backend/src/prisma/prisma.service.ts +++ b/backend/src/prisma/prisma.service.ts @@ -1,107 +1,71 @@ import { Injectable, OnModuleInit } from '@nestjs/common'; +import { PrismaPg } from '@prisma/adapter-pg'; import { Prisma, PrismaClient } from '@prisma/client'; -import { UnwrapTuple } from '@prisma/client/runtime/library'; -import { fieldEncryptionMiddleware } from 'prisma-field-encryption'; +import { UnwrapTuple } from '@prisma/client/runtime/client'; +import { fieldEncryptionExtension } from 'prisma-field-encryption'; import { RetryPromise } from '../common/retryPromise'; -class PrismaServiceBase extends PrismaClient implements OnModuleInit { - constructor() { - super({ - log: [ - { - emit: 'event', - level: 'query', - }, - { - emit: 'stdout', - level: 'error', - }, - { - emit: 'stdout', - level: 'info', - }, - { - emit: 'stdout', - level: 'warn', - }, - ], - }); - // ta deprecated, mas o extensions ta um caos no nestjs: - // ver https://github.com/prisma/prisma/issues/18628 - this.$use(fieldEncryptionMiddleware()); - } - - async onModuleInit() { - await this.$connect(); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - this.$on('query', async (e: any) => { - if (process.env.NODE_ENV == 'test' && !process.env.DEBUG) return; - if (process.env.DISABLE_QUERY_LOG) return; - // se ta diferente de 1, entao ta ligado sempre - // já faz o log - if (process.env.INTERNAL_DISABLE_QUERY_LOG !== '1' && e.query != 'SELECT 1' && e.query != 'COMMIT') { - console.log(`${e.query} ${e.params} took ${e.duration}ms`); - } else { - // aqui apenas algumas queries que não queremos o log - // as outras queries, se por acaso acontecer de ter um evento - // entre o await a mudança do INTERNAL_DISABLE_QUERY_LOG - // esse if vai pegar pra tratar - const query = e.query as string; - - if ( - query && - query !== 'BEGIN' && - query !== 'COMMIT' && - query !== 'SELECT 1' && - query !== 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED' && - /(?:pg_try_advisory_xact_lock|task_queue|org_device_activation_data_pending_sync_queue|formula_composta|relatorio_fila)/.test( - query - ) !== true - ) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - console.log(`${e.query} ${e.params} took ${e.duration}ms`); - } - }); - } -} +const logConfig = [ + { + emit: 'event' as const, + level: 'query' as const, + }, + { + emit: 'stdout' as const, + level: 'error' as const, + }, + { + emit: 'stdout' as const, + level: 'info' as const, + }, + { + emit: 'stdout' as const, + level: 'warn' as const, + }, +]; @Injectable() -export class PrismaService extends PrismaServiceBase { - constructor() { - super(); - } - - async $transaction

[]>( - arg: [...P], - options?: { isolationLevel?: Prisma.TransactionIsolationLevel } - ): Promise>; - async $transaction( - fn: (prisma: Omit) => Promise, - options?: { maxWait?: number; timeout?: number; isolationLevel?: Prisma.TransactionIsolationLevel } - ): Promise; - - async $transaction(arg: any, options?: any): Promise { - if (Array.isArray(arg)) { - const transactionPromiseFn = async () => { - return super.$transaction(arg, options); - }; +export class PrismaService extends PrismaClient implements OnModuleInit { + // Stub method - will be replaced by Proxy + async onModuleInit() {} - return RetryPromise(transactionPromiseFn, 10, 10000, 2000); - } else if (typeof arg === 'function') { - if (!options) options = {}; - - if (options.timeout === undefined) options.timeout = 60 * 1000; - if (options.maxWait === undefined) options.maxWait = 45 * 1000; - - const transactionPromiseFn = async () => { - return super.$transaction(arg, options); - }; + constructor() { + const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }); + super({ adapter, log: logConfig }); + // Apply field encryption extension immediately + const extended = this.$extends(fieldEncryptionExtension()); - return RetryPromise(transactionPromiseFn, 10, 10000, 2000); - } + // Proxy to intercept onModuleInit and $transaction while delegating everything else + return new Proxy(extended, { + get(target, prop, receiver) { + if (prop === 'onModuleInit') { + return async function (this: any) { + await target.$connect(); + }; + } + if (prop === '$transaction') { + return async function (arg: any, options?: any) { + if (Array.isArray(arg)) { + const transactionPromiseFn = async () => { + return target.$transaction(arg, options); + }; + return RetryPromise(transactionPromiseFn, 10, 10000, 2000); + } else if (typeof arg === 'function') { + if (!options) options = {}; + if (options.timeout === undefined) options.timeout = 60 * 1000; + if (options.maxWait === undefined) options.maxWait = 45 * 1000; - throw new Error('Invalid arguments passed to $transaction'); + const transactionPromiseFn = async () => { + return target.$transaction(arg, options); + }; + return RetryPromise(transactionPromiseFn, 10, 10000, 2000); + } + throw new Error('Invalid arguments passed to $transaction'); + }; + } + // Delegate everything else to the extended client + return Reflect.get(target, prop, receiver); + }, + }) as any; } } diff --git a/backend/src/reports/relatorios/helpers/reports.params-processado.ts b/backend/src/reports/relatorios/helpers/reports.params-processado.ts index ae083f1f48..f14b32ebe2 100644 --- a/backend/src/reports/relatorios/helpers/reports.params-processado.ts +++ b/backend/src/reports/relatorios/helpers/reports.params-processado.ts @@ -1,4 +1,4 @@ -import { InputJsonValue } from '@prisma/client/runtime/library'; +import { InputJsonValue } from '@prisma/client/runtime/client'; import { PrismaService } from '../../../prisma/prisma.service'; import { CreateReportDto } from '../dto/create-report.dto'; import { RelatorioParamDto } from '../entities/report.entity'; diff --git a/backend/src/variavel/dto/list-variavel.dto.ts b/backend/src/variavel/dto/list-variavel.dto.ts index bb2830aae9..dcd653d7a2 100644 --- a/backend/src/variavel/dto/list-variavel.dto.ts +++ b/backend/src/variavel/dto/list-variavel.dto.ts @@ -1,6 +1,6 @@ import { ApiHideProperty, ApiProperty, OmitType } from '@nestjs/swagger'; import { Periodicidade, Serie, TipoPdm } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { IdNomeDto } from '../../common/dto/IdNome.dto'; import { IdSigla, IdSiglaDescricao } from '../../common/dto/IdSigla.dto'; import { IdTituloDto } from '../../common/dto/IdTitulo.dto'; diff --git a/backend/src/variavel/entities/variavel.entity.ts b/backend/src/variavel/entities/variavel.entity.ts index f77e16e6c6..01e4d3e7d8 100644 --- a/backend/src/variavel/entities/variavel.entity.ts +++ b/backend/src/variavel/entities/variavel.entity.ts @@ -1,6 +1,6 @@ import { ApiHideProperty, ApiProperty, getSchemaPath, OmitType, PickType, refs } from '@nestjs/swagger'; import { Periodicidade, Polaridade, Prisma, Serie, TipoVariavel } from '@prisma/client'; -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal } from '@prisma/client/runtime/client'; import { Transform } from 'class-transformer'; import { IsArray, IsBoolean, IsDate, IsEnum, IsOptional, IsString } from 'class-validator'; import { IdSigla } from 'src/common/dto/IdSigla.dto'; diff --git a/backend/vendor/prisma-field-encryption.tgz b/backend/vendor/prisma-field-encryption.tgz new file mode 100644 index 0000000000..dce4e5bab9 Binary files /dev/null and b/backend/vendor/prisma-field-encryption.tgz differ