From 0c072579b9c0ccc51ff578d0fead82ba5e072034 Mon Sep 17 00:00:00 2001 From: Harsh Shrikant Bhat <90265455+harshsbhat@users.noreply.github.com> Date: Thu, 1 Aug 2024 02:05:14 +0530 Subject: [PATCH] perf: Enable Prisma Optimize (#44) * Enable Prisma Optimize * Added Environment variable to toggle on and off the Prisma Optimize --------- Co-authored-by: harshsbhat --- apps/docs/get-started/local.mdx | 6 + apps/web/package.json | 1 + apps/web/prisma/schema.prisma | 1 + apps/web/src/env.js | 5 + apps/web/src/server/db.ts | 12 +- pnpm-lock.yaml | 301 ++++++++++++++++++++++++++++++-- 6 files changed, 311 insertions(+), 15 deletions(-) diff --git a/apps/docs/get-started/local.mdx b/apps/docs/get-started/local.mdx index a3c796b..d6ea0e3 100644 --- a/apps/docs/get-started/local.mdx +++ b/apps/docs/get-started/local.mdx @@ -127,6 +127,12 @@ pnpm install Once the app is added you can add the Client ID under ``GITHUB_ID``and CLIENT SECRET under ```GITHUB_SECRET``` + + To enable Prisma Optimize and get insights on queires you can add this in you .env + ```bash + ENABLE_PRISMA_CLIENT=true + ``` + ## Running Unsend locally diff --git a/apps/web/package.json b/apps/web/package.json index c3247b9..753f15d 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -60,6 +60,7 @@ }, "devDependencies": { "@next/eslint-plugin-next": "^14.2.2", + "@prisma/extension-optimize": "^0.10.0", "@types/eslint": "^8.56.2", "@types/mime-types": "^2.1.4", "@types/node": "^20.11.20", diff --git a/apps/web/prisma/schema.prisma b/apps/web/prisma/schema.prisma index 10a32d6..201529f 100644 --- a/apps/web/prisma/schema.prisma +++ b/apps/web/prisma/schema.prisma @@ -3,6 +3,7 @@ generator client { provider = "prisma-client-js" + previewFeatures = ["tracing"] } datasource db { diff --git a/apps/web/src/env.js b/apps/web/src/env.js index 295f71d..fd58688 100644 --- a/apps/web/src/env.js +++ b/apps/web/src/env.js @@ -46,6 +46,10 @@ export const env = createEnv({ ADMIN_EMAIL: z.string().optional(), DISCORD_WEBHOOK_URL: z.string().optional(), REDIS_URL: z.string(), + ENABLE_PRISMA_CLIENT: z + .string() + .default("false") + .transform((str) => str === "true"), // Converts string "true" to boolean true }, /** @@ -84,6 +88,7 @@ export const env = createEnv({ ADMIN_EMAIL: process.env.ADMIN_EMAIL, DISCORD_WEBHOOK_URL: process.env.DISCORD_WEBHOOK_URL, REDIS_URL: process.env.REDIS_URL, + ENABLE_PRISMA_CLIENT: process.env.ENABLE_PRISMA_CLIENT, // Add this line }, /** * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially diff --git a/apps/web/src/server/db.ts b/apps/web/src/server/db.ts index 497c541..c542b8a 100644 --- a/apps/web/src/server/db.ts +++ b/apps/web/src/server/db.ts @@ -1,12 +1,18 @@ import { PrismaClient } from "@prisma/client"; - +import { withOptimize } from "@prisma/extension-optimize"; import { env } from "~/env"; -const createPrismaClient = () => - new PrismaClient({ +const createPrismaClient = () => { + const client = new PrismaClient({ log: env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"], }); + if (env.ENABLE_PRISMA_CLIENT) { + return client.$extends(withOptimize()); + } + + return client; +}; // eslint-disable-next-line no-undef const globalForPrisma = globalThis as unknown as { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d75fba3..7b4f1bf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,7 +165,7 @@ importers: version: 5.0.7 next: specifier: ^14.2.1 - version: 14.2.1(react-dom@18.2.0)(react@18.2.0) + version: 14.2.1(@opentelemetry/api@1.8.0)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.24.6 version: 4.24.7(next@14.2.1)(react-dom@18.2.0)(react@18.2.0) @@ -215,6 +215,9 @@ importers: '@next/eslint-plugin-next': specifier: ^14.2.2 version: 14.2.2 + '@prisma/extension-optimize': + specifier: ^0.10.0 + version: 0.10.0(@prisma/client@5.11.0) '@types/eslint': specifier: ^8.56.2 version: 8.56.5 @@ -2778,6 +2781,145 @@ packages: resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} dev: false + /@opentelemetry/api-logs@0.49.1: + resolution: {integrity: sha512-kaNl/T7WzyMUQHQlVq7q0oV4Kev6+0xFwqzofryC66jgGMacd0QH5TwfpbUwSTby+SdAdprAe5UKMvBw4tKS5Q==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.8.0 + dev: true + + /@opentelemetry/api@1.8.0: + resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + engines: {node: '>=8.0.0'} + + /@opentelemetry/context-async-hooks@1.22.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-Nfdxyg8YtWqVWkyrCukkundAjPhUXi93JtVQmqDT1mZRVKqA7e2r7eJCrI+F651XUBMp0hsOJSGiFk3QSpaIJw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + dev: true + + /@opentelemetry/core@1.22.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 + dev: true + + /@opentelemetry/exporter-trace-otlp-http@0.49.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-KOLtZfZvIrpGZLVvblKsiVQT7gQUZNKcUUH24Zz6Xbi7LJb9Vt6xtUZFYdR5IIjvt47PIqBKDWUQlU0o1wAsRw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.49.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.49.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.22.0(@opentelemetry/api@1.8.0) + dev: true + + /@opentelemetry/instrumentation@0.49.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-0DLtWtaIppuNNRRllSD4bjU8ZIiLp1cDXvJEbp752/Zf+y3gaLNaoGRGIlX4UHhcsrmtL+P2qxi3Hodi8VuKiQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.7.1 + require-in-the-middle: 7.4.0 + semver: 7.6.0 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@opentelemetry/otlp-exporter-base@0.49.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-z6sHliPqDgJU45kQatAettY9/eVF58qVPaTuejw9YWfSRqid9pXPYeegDCSdyS47KAUgAtm+nC28K3pfF27HWg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) + dev: true + + /@opentelemetry/otlp-transformer@0.49.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-Z+koA4wp9L9e3jkFacyXTGphSWTbOKjwwXMpb0CxNb0kjTHGUxhYRN8GnkLFsFo5NbZPjP07hwAqeEG/uCratQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.49.1(@opentelemetry/api-logs@0.49.1)(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.22.0(@opentelemetry/api@1.8.0) + dev: true + + /@opentelemetry/resources@1.22.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-+vNeIFPH2hfcNL0AJk/ykJXoUCtR1YaDUZM+p3wZNU4Hq98gzq+7b43xbkXjadD9VhWIUQqEwXyY64q6msPj6A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.22.0 + dev: true + + /@opentelemetry/sdk-logs@0.49.1(@opentelemetry/api-logs@0.49.1)(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.9.0' + '@opentelemetry/api-logs': '>=0.39.1' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.8.0) + dev: true + + /@opentelemetry/sdk-metrics@1.22.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-k6iIx6H3TZ+BVMr2z8M16ri2OxWaljg5h8ihGJxi/KQWcjign6FEaEzuigXt5bK9wVEhqAcWLCfarSftaNWkkg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.8.0) + lodash.merge: 4.6.2 + dev: true + + /@opentelemetry/sdk-trace-base@1.22.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-pfTuSIpCKONC6vkTpv6VmACxD+P1woZf4q0K46nSUvXFvOFqjBYKFaAMkKD3M1mlKUUh0Oajwj35qNjMl80m1Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.22.0 + dev: true + + /@opentelemetry/semantic-conventions@1.22.0: + resolution: {integrity: sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw==} + engines: {node: '>=14'} + dev: true + /@panva/hkdf@1.1.1: resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} dev: false @@ -2804,15 +2946,16 @@ packages: optional: true dependencies: prisma: 5.11.0 - dev: false /@prisma/debug@5.11.0: resolution: {integrity: sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==} - dev: false + + /@prisma/debug@5.12.1: + resolution: {integrity: sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A==} + dev: true /@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102: resolution: {integrity: sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==} - dev: false /@prisma/engines@5.11.0: resolution: {integrity: sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==} @@ -2822,7 +2965,29 @@ packages: '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102 '@prisma/fetch-engine': 5.11.0 '@prisma/get-platform': 5.11.0 - dev: false + + /@prisma/extension-optimize@0.10.0(@prisma/client@5.11.0): + resolution: {integrity: sha512-1xid5tnxSlZkwJVTCQFYd/MtmblFr3fkAmaSBU0boqWchTjVKYOso5MiyoO7HSIbCxNe5q9cS85fU04yivMkJg==} + peerDependencies: + '@prisma/client': 5.x + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/context-async-hooks': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-http': 0.49.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.49.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.22.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.22.0 + '@prisma/client': 5.11.0(prisma@5.11.0) + '@prisma/debug': 5.12.1 + '@prisma/instrumentation': 5.14.0-dev.65 + kleur: 4.1.5 + node-notifier: 10.0.1 + readline-sync: 1.4.10 + xdg-app-paths: 8.3.0 + transitivePeerDependencies: + - supports-color + dev: true /@prisma/fetch-engine@5.11.0: resolution: {integrity: sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==} @@ -2830,13 +2995,21 @@ packages: '@prisma/debug': 5.11.0 '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102 '@prisma/get-platform': 5.11.0 - dev: false /@prisma/get-platform@5.11.0: resolution: {integrity: sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==} dependencies: '@prisma/debug': 5.11.0 - dev: false + + /@prisma/instrumentation@5.14.0-dev.65: + resolution: {integrity: sha512-UPWFu0N0w54BEVBvORUgiTLS55E7iYnz+rH2ODD7etjFYwmAlddDl19o8askqLe0CyMT+1RfOcmyAOhF7OYkDw==} + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.49.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.22.0(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: true /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} @@ -4157,7 +4330,7 @@ packages: '@trpc/client': 11.0.0-next-beta.318(@trpc/server@11.0.0-next-beta.318) '@trpc/react-query': 11.0.0-next-beta.318(@tanstack/react-query@5.28.4)(@trpc/client@11.0.0-next-beta.318)(@trpc/server@11.0.0-next-beta.318)(react-dom@18.2.0)(react@18.2.0) '@trpc/server': 11.0.0-next-beta.318 - next: 14.2.1(react-dom@18.2.0)(react@18.2.0) + next: 14.2.1(@opentelemetry/api@1.8.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -4384,6 +4557,10 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true + /@types/shimmer@1.2.0: + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + dev: true + /@types/ua-parser-js@0.7.39: resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} dev: true @@ -4786,6 +4963,14 @@ packages: negotiator: 0.6.3 dev: true + /acorn-import-assertions@1.9.0(acorn@8.11.3): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.3 + dev: true + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -5378,6 +5563,10 @@ packages: engines: {node: '>=8'} dev: true + /cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + dev: true + /class-variance-authority@0.7.0: resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} dependencies: @@ -5706,6 +5895,18 @@ packages: dependencies: ms: 2.1.2 + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + /decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} dev: false @@ -7349,6 +7550,10 @@ packages: strip-bom-string: 1.0.0 dev: true + /growly@1.3.0: + resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true @@ -7712,6 +7917,15 @@ packages: resolve-from: 4.0.0 dev: true + /import-in-the-middle@1.7.1: + resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==} + dependencies: + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + cjs-module-lexer: 1.3.1 + module-details-from-path: 1.0.3 + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -9125,6 +9339,10 @@ packages: hasBin: true dev: true + /module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -9205,7 +9423,7 @@ packages: '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.15.5 - next: 14.2.1(react-dom@18.2.0)(react@18.2.0) + next: 14.2.1(@opentelemetry/api@1.8.0)(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.6.5 preact: 10.19.6 @@ -9281,7 +9499,7 @@ packages: - babel-plugin-macros dev: false - /next@14.2.1(react-dom@18.2.0)(react@18.2.0): + /next@14.2.1(@opentelemetry/api@1.8.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-SF3TJnKdH43PMkCcErLPv+x/DY1YCklslk3ZmwaVoyUfDgHKexuKlf9sEfBQ69w+ue8jQ3msLb+hSj1T19hGag==} engines: {node: '>=18.17.0'} hasBin: true @@ -9300,6 +9518,7 @@ packages: optional: true dependencies: '@next/env': 14.2.1 + '@opentelemetry/api': 1.8.0 '@swc/helpers': 0.5.5 busboy: 1.6.0 caniuse-lite: 1.0.30001597 @@ -9354,6 +9573,17 @@ packages: dev: false optional: true + /node-notifier@10.0.1: + resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} + dependencies: + growly: 1.3.0 + is-wsl: 2.2.0 + semver: 7.6.0 + shellwords: 0.1.1 + uuid: 8.3.2 + which: 2.0.2 + dev: true + /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true @@ -9572,6 +9802,13 @@ packages: wcwidth: 1.0.1 dev: true + /os-paths@7.4.0: + resolution: {integrity: sha512-Ux1J4NUqC6tZayBqLN1kUlDAEvLiQlli/53sSddU4IN+h+3xxnv2HmRSMpVSvr1hvJzotfMs3ERvETGK+f4OwA==} + engines: {node: '>= 4.0'} + optionalDependencies: + fsevents: 2.3.3 + dev: true + /p-any@4.0.0: resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==} engines: {node: '>=12.20'} @@ -10098,7 +10335,6 @@ packages: requiresBuild: true dependencies: '@prisma/engines': 5.11.0 - dev: false /prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} @@ -10377,6 +10613,11 @@ packages: dependencies: picomatch: 2.3.1 + /readline-sync@1.4.10: + resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} + engines: {node: '>= 0.8.0'} + dev: true + /recharts-scale@0.4.5: resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} dependencies: @@ -10575,6 +10816,17 @@ packages: engines: {node: '>=0.10.0'} dev: true + /require-in-the-middle@7.4.0: + resolution: {integrity: sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==} + engines: {node: '>=8.6.0'} + dependencies: + debug: 4.3.6 + module-details-from-path: 1.0.3 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true @@ -10893,6 +11145,14 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shellwords@0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + dev: true + + /shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + dev: true + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -11867,7 +12127,6 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - dev: false /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} @@ -12091,6 +12350,24 @@ packages: optional: true dev: true + /xdg-app-paths@8.3.0: + resolution: {integrity: sha512-mgxlWVZw0TNWHoGmXq+NC3uhCIc55dDpAlDkMQUaIAcQzysb0kxctwv//fvuW61/nAAeUBJMQ8mnZjMmuYwOcQ==} + engines: {node: '>= 4.0'} + dependencies: + xdg-portable: 10.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /xdg-portable@10.6.0: + resolution: {integrity: sha512-xrcqhWDvtZ7WLmt8G4f3hHy37iK7D2idtosRgkeiSPZEPmBShp0VfmRBLWAPC6zLF48APJ21yfea+RfQMF4/Aw==} + engines: {node: '>= 4.0'} + dependencies: + os-paths: 7.4.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'}