From d926a2acd13db6324b4ab5477745406731561c81 Mon Sep 17 00:00:00 2001 From: jessy-david-dev Date: Sun, 18 Jan 2026 23:33:05 +0100 Subject: [PATCH] Initial commit --- .gitignore | 44 + .prettierignore | 6 + .prettierrc | 8 + .vscode/extensions.json | 9 + .vscode/settings.json | 13 + README.md | 62 + apps/web/eslint.config.mjs | 14 + apps/web/next-env.d.ts | 6 + apps/web/next.config.ts | 11 + apps/web/package.json | 39 + apps/web/postcss.config.mjs | 6 + apps/web/public/android-chrome-192x192.png | Bin 0 -> 53877 bytes apps/web/public/android-chrome-512x512.png | Bin 0 -> 226910 bytes apps/web/public/apple-touch-icon.png | Bin 0 -> 48508 bytes apps/web/public/favicon-16x16.png | Bin 0 -> 884 bytes apps/web/public/favicon-32x32.png | Bin 0 -> 2763 bytes apps/web/public/favicon.ico | Bin 0 -> 15406 bytes apps/web/public/manifest.json | 21 + apps/web/public/robots.txt | 4 + apps/web/src/app/api/export/route.ts | 46 + apps/web/src/app/api/parse/route.ts | 53 + apps/web/src/app/globals.css | 42 + apps/web/src/app/layout.tsx | 89 + apps/web/src/app/page.tsx | 115 + apps/web/src/components/diagram-controls.tsx | 51 + apps/web/src/components/export-buttons.tsx | 191 ++ apps/web/src/components/footer.tsx | 40 + apps/web/src/components/header.tsx | 41 + apps/web/src/components/index.ts | 6 + apps/web/src/components/nodes/enum-node.tsx | 67 + apps/web/src/components/nodes/index.ts | 2 + apps/web/src/components/nodes/model-node.tsx | 113 + apps/web/src/components/schema-editor.tsx | 174 + apps/web/src/components/uml-diagram.tsx | 234 ++ apps/web/src/hooks/index.ts | 2 + apps/web/src/hooks/use-auto-layout.ts | 95 + apps/web/src/hooks/use-export-image.ts | 203 ++ apps/web/src/lib/index.ts | 2 + apps/web/src/lib/prisma-parser.ts | 17 + apps/web/src/lib/utils.ts | 42 + apps/web/src/types/css.d.ts | 4 + apps/web/tsconfig.json | 34 + package.json | 23 + packages/prisma-parser/README.md | 22 + packages/prisma-parser/package.json | 51 + .../src/__tests__/parser.test.ts | 192 ++ .../src/__tests__/renderers.test.ts | 107 + packages/prisma-parser/src/adapters/index.ts | 3 + .../prisma-parser/src/adapters/prisma5.ts | 349 ++ .../prisma-parser/src/adapters/prisma6.ts | 25 + .../prisma-parser/src/adapters/prisma7.ts | 44 + packages/prisma-parser/src/index.ts | 29 + packages/prisma-parser/src/parser.ts | 60 + packages/prisma-parser/src/renderers/dbml.ts | 192 ++ packages/prisma-parser/src/renderers/index.ts | 3 + .../prisma-parser/src/renderers/mermaid.ts | 106 + .../prisma-parser/src/renderers/plantuml.ts | 95 + packages/prisma-parser/src/types.ts | 100 + .../prisma-parser/src/version-detector.ts | 40 + packages/prisma-parser/tsconfig.json | 22 + packages/prisma-parser/tsup.config.ts | 16 + pnpm-lock.yaml | 2903 +++++++++++++++++ pnpm-workspace.yaml | 3 + tsconfig.json | 17 + turbo.json | 23 + 65 files changed, 6331 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 apps/web/eslint.config.mjs create mode 100644 apps/web/next-env.d.ts create mode 100644 apps/web/next.config.ts create mode 100644 apps/web/package.json create mode 100644 apps/web/postcss.config.mjs create mode 100644 apps/web/public/android-chrome-192x192.png create mode 100644 apps/web/public/android-chrome-512x512.png create mode 100644 apps/web/public/apple-touch-icon.png create mode 100644 apps/web/public/favicon-16x16.png create mode 100644 apps/web/public/favicon-32x32.png create mode 100644 apps/web/public/favicon.ico create mode 100644 apps/web/public/manifest.json create mode 100644 apps/web/public/robots.txt create mode 100644 apps/web/src/app/api/export/route.ts create mode 100644 apps/web/src/app/api/parse/route.ts create mode 100644 apps/web/src/app/globals.css create mode 100644 apps/web/src/app/layout.tsx create mode 100644 apps/web/src/app/page.tsx create mode 100644 apps/web/src/components/diagram-controls.tsx create mode 100644 apps/web/src/components/export-buttons.tsx create mode 100644 apps/web/src/components/footer.tsx create mode 100644 apps/web/src/components/header.tsx create mode 100644 apps/web/src/components/index.ts create mode 100644 apps/web/src/components/nodes/enum-node.tsx create mode 100644 apps/web/src/components/nodes/index.ts create mode 100644 apps/web/src/components/nodes/model-node.tsx create mode 100644 apps/web/src/components/schema-editor.tsx create mode 100644 apps/web/src/components/uml-diagram.tsx create mode 100644 apps/web/src/hooks/index.ts create mode 100644 apps/web/src/hooks/use-auto-layout.ts create mode 100644 apps/web/src/hooks/use-export-image.ts create mode 100644 apps/web/src/lib/index.ts create mode 100644 apps/web/src/lib/prisma-parser.ts create mode 100644 apps/web/src/lib/utils.ts create mode 100644 apps/web/src/types/css.d.ts create mode 100644 apps/web/tsconfig.json create mode 100644 package.json create mode 100644 packages/prisma-parser/README.md create mode 100644 packages/prisma-parser/package.json create mode 100644 packages/prisma-parser/src/__tests__/parser.test.ts create mode 100644 packages/prisma-parser/src/__tests__/renderers.test.ts create mode 100644 packages/prisma-parser/src/adapters/index.ts create mode 100644 packages/prisma-parser/src/adapters/prisma5.ts create mode 100644 packages/prisma-parser/src/adapters/prisma6.ts create mode 100644 packages/prisma-parser/src/adapters/prisma7.ts create mode 100644 packages/prisma-parser/src/index.ts create mode 100644 packages/prisma-parser/src/parser.ts create mode 100644 packages/prisma-parser/src/renderers/dbml.ts create mode 100644 packages/prisma-parser/src/renderers/index.ts create mode 100644 packages/prisma-parser/src/renderers/mermaid.ts create mode 100644 packages/prisma-parser/src/renderers/plantuml.ts create mode 100644 packages/prisma-parser/src/types.ts create mode 100644 packages/prisma-parser/src/version-detector.ts create mode 100644 packages/prisma-parser/tsconfig.json create mode 100644 packages/prisma-parser/tsup.config.ts create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 tsconfig.json create mode 100644 turbo.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..86ba49a --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# Dependencies +node_modules +.pnpm-store + +# Build outputs +dist +.next +out +build + +# Cache +.turbo +.cache +*.tsbuildinfo + +# Environment +.env +.env.local +.env.*.local + +# IDE +.vscode/* +!.vscode/extensions.json +!.vscode/settings.json +.idea + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Test +coverage +.nyc_output + +# Misc +*.swp +*.swo diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..be013d5 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +node_modules +.next +dist +build +coverage +pnpm-lock.yaml diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..fe7e2a6 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "printWidth": 100, + "bracketSpacing": true +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..4349cf4 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "prisma.prisma", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "bradlc.vscode-tailwindcss", + "vitest.explorer" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bd67cf7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "typescript.preferences.importModuleSpecifier": "relative", + "typescript.tsdk": "node_modules/typescript/lib", + "tailwindCSS.experimental.classRegex": [["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"]], + "files.associations": { + "*.css": "tailwindcss" + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..5dcbaef --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# Prisma UML Viewer + +![Next.js](https://img.shields.io/badge/Next.js-16-black?logo=next.js) +![React](https://img.shields.io/badge/React-19-61DAFB?logo=react) +![Tailwind CSS](https://img.shields.io/badge/Tailwind-4-38B2AC?logo=tailwindcss) +![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?logo=typescript) +![License](https://img.shields.io/badge/License-MIT-green) + +Visualize your Prisma schemas as interactive ERD diagrams. + +## Features + +- Real-time schema parsing +- Interactive drag & drop diagrams with zoom and minimap +- Compatible with Prisma 5, 6 and 7 +- Export to Mermaid, PlantUML, DBML +- Auto-layout with dagre + +## Tech Stack + +- **Framework:** Next.js 16 (App Router) +- **UI:** React 19, Tailwind CSS 4 +- **Diagrams:** ReactFlow +- **Monorepo:** pnpm + Turborepo + +## Packages + +- [`@prisma-uml/parser`](./packages/prisma-parser/) - Schema parsing and export + +## Getting Started + +```bash +pnpm install +pnpm dev +``` + +Open http://localhost:3000 + +## Build + +```bash +pnpm build +pnpm start +``` + +## Author + +[Jessy DAVID](https://jessy-david.dev) + +## Acknowledgements + +- [prisma-generate-uml](https://github.com/AbianS/prisma-generate-uml) - Inspiration for this project +- [Prisma](https://www.prisma.io/) - Next-generation ORM +- [ReactFlow](https://reactflow.dev/) - Interactive node-based diagrams +- [Next.js](https://nextjs.org/) - React framework +- [Tailwind CSS](https://tailwindcss.com/) - Utility-first CSS +- [dagre](https://github.com/dagrejs/dagre) - Graph layout algorithm +- [Monaco Editor](https://microsoft.github.io/monaco-editor/) - Code editor + +## License + +MIT diff --git a/apps/web/eslint.config.mjs b/apps/web/eslint.config.mjs new file mode 100644 index 0000000..5b67bd0 --- /dev/null +++ b/apps/web/eslint.config.mjs @@ -0,0 +1,14 @@ +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { FlatCompat } from '@eslint/eslintrc'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [...compat.extends('next/core-web-vitals', 'next/typescript')]; + +export default eslintConfig; diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts new file mode 100644 index 0000000..9edff1c --- /dev/null +++ b/apps/web/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +import "./.next/types/routes.d.ts"; + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts new file mode 100644 index 0000000..72c9e0a --- /dev/null +++ b/apps/web/next.config.ts @@ -0,0 +1,11 @@ +import type { NextConfig } from 'next'; + +const nextConfig: NextConfig = { + transpilePackages: ['@prisma-uml/parser'], + output: 'standalone', + experimental: { + optimizePackageImports: ['@heroicons/react'], + }, +}; + +export default nextConfig; diff --git a/apps/web/package.json b/apps/web/package.json new file mode 100644 index 0000000..2766efd --- /dev/null +++ b/apps/web/package.json @@ -0,0 +1,39 @@ +{ + "name": "@prisma-uml/web", + "version": "1.0.0", + "author": "Jessy DAVID - https://jessy-david.dev", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@dagrejs/dagre": "^1.1.8", + "@heroicons/react": "^2.2.0", + "@icons-pack/react-simple-icons": "^13.8.0", + "@monaco-editor/react": "^4.7.0", + "@prisma-uml/parser": "workspace:*", + "@xyflow/react": "^12.4.0", + "clsx": "^2.1.0", + "html-to-image": "^1.11.0", + "next": "^16.1.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "tailwind-merge": "^2.6.0", + "use-debounce": "^10.0.4", + "zod": "^3.24.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.1.18", + "@types/dagre": "^0.7.53", + "@types/react": "^19.1.0", + "@types/react-dom": "^19.1.0", + "autoprefixer": "^10.4.20", + "postcss": "^8.5.0", + "tailwindcss": "^4.1.18", + "typescript": "^5.7.0" + } +} diff --git a/apps/web/postcss.config.mjs b/apps/web/postcss.config.mjs new file mode 100644 index 0000000..51a6e4e --- /dev/null +++ b/apps/web/postcss.config.mjs @@ -0,0 +1,6 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +}; diff --git a/apps/web/public/android-chrome-192x192.png b/apps/web/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..75886b2d56a0156c47fd97ceeff93a5862b39855 GIT binary patch literal 53877 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≈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 P00000NkvXXu0mjfr3H$* literal 0 HcmV?d00001 diff --git a/apps/web/public/android-chrome-512x512.png b/apps/web/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..51884d48ef1e90e34d0d2e0be62802b59fc41339 GIT binary patch literal 226910 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

a7FKbqw5}hy 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 literal 0 HcmV?d00001 diff --git a/apps/web/public/apple-touch-icon.png b/apps/web/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c004361ea0be0920fc4a4cd3eb1d1b69048f3aec GIT binary patch literal 48508 zcmV)6K*+y|P)4Y9=RBz=4<;ZD01`P8BtZg3-HsZ%&6sjac;nHig!p0eud1*@;Gw3^BpTbQ4+s(G$GI%)&Gm+j)|Q`UF! zyiE)b^SW6_ORKdtw{efnR$EhNwY7CtQCY#~7Hocg-k-Cxvp&8#u49a6p79mO7z3=Y z*Jo>&O@Q8~Ys}5f`gQcIsj21t^;X5b>u=N3jGKGcqoN`%q3_e2*E9E3+}{kJ)1#`Y ziuc5uX1L#xkrBU!uGiGuY^JfN`P2LK*0J#s8yp<8EnBzRJeTR~8?m{CDx2c|8#~wA zuIp~H>ZTT(sWhAA2CJ%c{dukv_dm~1&4;e1@2RV+^Kq1})AE(qHPX$bKk{`eJj%S6 z``10^Ih$qvG$-7V36o1775^y!I;NqL8?3TQCRh_7;M4%<#>Q$EV8$j!2W{~3MH{|! z$wvG7Y;tPC0bU1~>Z+=(wzAslYa6Vtw%#{KC7TPl+WedrbiqM9$M0I$1w933&8Ghh zFvmhK2eiL8fkKOsH%11uz^3a8m;!Y_Xnj@!KtHRis{vZAE$E^S z@;gbDxF81j7o#|vl&Pr3b%#E9GT{{mwHpsGrCGGLyb7`DNli+1V!IUDck zwfV^jt81vUb{4jyrP&$)$Na2zJ&U`5v;??wE=>hsq%n^GG5~j}R~*P9EwTcjvt$lQ z&*tz&k>ss)DW~hr^8IUmW0-vOixey zoM}z9Cb7YmW5MU`udRfZ>Mb30=?!F6%2XqNd<{eS1fbEje00_(QLzKP7i{3tc^ez- zLx0a(Bhsr05Y-}?8>&&|NVFP$*ChoO(G{l^vjOUO6ji1sbEU^h5<2L_R9Y0@at>@s zS?2-nPan^_#4!smUh!o=N5a4#(e^Sqb|z2U$A)8Qiwi3WmbC6m*W#}opy!#$DR!i8f{`!Bjtj_;$^qsD7KSG;REakN+S%C|8yy<7 zOBc?#WL}t_Knhn`13+#7K((muN&$++t_r>CV4LA{v(Ax=G@^6>SsGp~pmps@w1R$? zZjcOUsni)HXjbPAA4hcXZoN+uc}7y4Yg8e1>zsQ7TAq67^P(#PuO8Ld651^KyCmEw zw!_TqwAI#&w>MZd6pOp()~j4f*VHvYJG!jCt=$&*?2ITE8-4*Ax4^vSEuHV70cw)3 z|HI_anwyDXt&$t#_Ovt(@C88G-`8W8FPyjGfgYQKD>v0tWAHTrXckyY12E=zR?R1h;uIr{ zJ(obj_+mSza2KnATK5nf8VZw)N$1}(bdk`DxnBi*myHEr#P>s`>ZUT7k7m&j>CY5J_r)xV&i=z3xVyh*fNa;NGGWVMw~=uQf_ErkZ<}VH^CNacHAf0$tGv9+f_a zv2!b-9U9#P^S+>Kx8dz+?}C1`T2*5cs;}DTOV_GmW97}_IFP5|3LdC;;^mM8mbQ^_ z)6Y_m&1xE9&4AV<_|A9r$IdJG{C_(W&s9qm{5(EQZZh1AM` z&c@pEjd^v~_IKlb5q1P)f*4n!7ew6?7zf8fuW(q8l~ZFmfGUQEd6Z(=+b*N^ZOCRr2q2o2HDW zUSaxH1avvos@Jqwq8(S1(pL#+cQNTdH*#d4&Ds<^I&;Dh1BnYHiBQ4hOFHX0iCeA* z&V2s#3ApjRb+k5HGwNTGdrs2Djjr%AXz|>mp)0!7i%G8#eQ{9hpYIINq5%R@_FcPo z#Jw)7im^4In|lYax{hdyfLru!hX+9SqIJ>w=$T!1;X6m-;e3{)mawnpy)|5?noW}D zcAjz1aGi1HY#cf=-_T~Ao3~lVx(z<{x{j{jAP&x^D$ZRVeyLhp`F?$7{jFNh!aoYY zUo4&D-q!k95zyr*g*Z#8l&+S#S&4dFEubA-i9gDB>b})5bh4i}15cBXC3H2Dk3zJb z^JnbL@xwMdIcl9Pjn>-KXmit(HY@3c+IN5{9^&H-^_>@_(ic^#LDC+1^$r2;c7Vep zgIFW}et}#BOYrEB!~#_2>HaNC0G*9RryTwagK}2)$meAkI}MZXK7GZ40z3p$W|^B& z=IZjq91?nyZRp-o2-Z}~Gn9fsi>ZW6^Wwt|_QETR=O6%`!0+5HZ-fB2#u(CBlr!5F zYlC!IK>Jse0jdBUlL?nbLR8CJP$pVa*mG-H%e+aY_?$<_^h)~3(=k1TboKj9654mQ zK*#1{5v!%ZW+v?X$)k4e_>ll}BZjM_%;+!}O%vi17aTM|9e{RfiURgACkg%i06G>R zadBoit2R6b;atRIJ6@SiiSfD)e;YwR+-ndR3@2S@s^1G7` zDF8N!JQ@n^OfczV^VK#!3;2m1ZrZ%X>YFea8woxEXsuJWGh!2mSssrPFH`~88Q@|0 zln1ovrfhb&v#5ryjTb}7l0Z_l2=2n>O9L;A?;TK%45IKQmrj4tue_E;DgU0hpi>tC+9R1o@M!)t zZ+hJUE`?K|JHbIcM3Oue^>}<5;Nfz0R!K98Ch;z*dr?-r-8NTQYh%R4iMd)Uw4;?yQ2p)N#Vr-%A1mOgC{uzKydZ9!@XA0$^?t*mAL6oI{ zS|0ZHwOk75a$wFA>~0eNCypp7AoU|@Ek3qZ3A8jPBkyvj6+W>6Xx*GV9r8)Ll`A7X z`CT=MlBNn>&rgioCA=CVeV42nKWme6LS`qOZiqq@LevF7=ZIoR>lGj02cXMcbFK4p zCBPR0FQp3_9NmHC(mKM{;r1&UR1USo6G z8Ht;(*=_BcHd!SSnwM>g`4&BJ_h1G2D+NBj9MBGOtuX^DN@!`@5H#7&@LUb|w?j9Q zXQ;gWQA$;cvsM7~N;IQ%A!059c;aZH94@I*b8B6&rGO4dg+wVl63?AR%E})-J0qtO z6CyxME%Gne9(Eh5X>8Qa9y@AN!vof&v;TMe1dQ3J7pJ{4t1q-+lF(ivpIb)?Lp?&Nw6Eo$=fR1rVD+|aH zV39+UsarX9zXG5i`1$|A-@Ou`WAS4e^Dc5g@uFMQM6ha05@oKmAf-47Uvhp(ZH0ys zrSNDU99U5zy;jY4Xc6>tW_~6jgK{&GWp?W5A)6(v+lm^UC&W85F$SP#u;Q2Abn)M1 zZG=1#SGtK+{{B}5Xdil7s1*SnsP)l1poto4M#5W}vI-s4dO?2sdM;XR(~90Q=WXjZ z*t+h`R@2gAmj(uHc#6m)e(FtlLhAHh7aEyn1bP<|f1xj}Q==*19NYG;4 zJ&5DpsNm1#)=HkLa*vAlBtVx=Na-7wN;0W?H_F80d{mXf5HCMq;S zisQgQpN)@?!G))N3bbkJkPP)C71cB-d`m9ES`*1O8oH^O*9Rj+%;j+xvn0>0QHRQ-w+GXU$ zuH~^JpvBFB?l?IIedH@&zHq@NCq^C6bL?7yQxU3K88fY9hbc=AaEn@;KYiMP-H67R z)+Qj#D~?^0+-Nbb#nSpeehHl=R8dlum(T&Mr0W++=sF~{fFo6(v)Me;&{?H&u$#$U zBK!@#o5lDZ$6j$`5g|4)S7Gb6?yxO8c3UHqqXv2+L(nC?u9>5)p4i-OVY z6ePeqg-1(KVu9N?+A99%6(#h8zwkenAt>R_Dn6FHMWA-8TJ9rUKuBnLJl2xqv5Z4! z+My7vJ1^i+cs3@X5F?~I4)*sD&K~lNIN3bnSkq+E3D}a-V${=PNDFSh4ggP&k7E#$ z*d#BAj7$%rWI&h5>T+($E|Aa3IgmIEbEHu$SrZu$~P+ZV*>eUvt9H6rsUZ0cqLZR$Rq;NG) zabqPK_4fn?(QZ`$K#qM62JjiBfI66!`=Q999I1sM$$tiPNaz5GD|miJa4hAVB!BfH zKzkArMt108|6S8MuKC41*S%$%8-z+Hm>{A%F$Soii{s;y zlF%8<^U2Zf`57p-N>PuA5t|wrBu`_As*@2L!cZKAen?#^pVuFHJu{~it_133ft7->hHUnA5TKz9Sk?WPquOL< zeAuP+y!@Wk*!FRh<`7CH3NO{ySHel1Bb?SnFac4^^Q zk3X&{wRBByDzg_#CTK0L@S;0i_mIZtmt88svUHBg5nyu?RXK^~fM%ZMXI4&Q4S-&N zhKxWfMzL9%pc3*t$?&e^^@(ZNHTlzRT~HC_ezbKEYpIuL@)||YjZ7>d+~rZVQ%*WB znw1|8pvwuN;xsrXN+46xOb&;a#x=@ap^FC=GX>;=GTE~jg99Gc9wT9Yiqz0b zj18r%EBioTRz8P9q{_;3BT!O1S-Z}HAf|VS)^UX>lIg)(5r#D_)RV~Qw4)pU%Naj&vQzz=s^Lf@%z3zGTC=@n+#@HK;WlL_X0<3-wA3KrH}AvQesXc3`W-NYuo2NKB?w zsM6V;m!;{JzsUho1hqUz1<5SKvjkv;q#O_R=11whCf$0~{3U}kuDPm&b}1(ib1%$O zLW_eq6{Y$8$A-=ZlvI{dk5U_enE^R7I&^Q$Wcuzpy8 z4mht3(B#IE!z=@Z>Wev&ikS4uY9+k@RPr)r$49L~mUK^#jr8^r-UhfC&`MrXR#wb> z$t(y|Q8VWvL5r87RsyvHLE&P+T;Z8C#iwtMfKFLEm#rI z8K08M6#{gm2E-$42dVjV?|%RKTY9f5e6&eZ&P)J$@pz?x1nBIVRfN{ZS7bbTD&|`mEP*F3N~p+r0g?1~lz6@Kneb zIc-BjeN-n8S#xteJQ?K(pr;l6gSSmmUNtj1W(`EK1ZXAgt6HP9T6*!m7NFe(@#QLp zVH0Q^*jZgCDV?cAlF%;kO1XyrJHHS?gLq`Aym$of^j`t7yvg!alE)@#Z;flAAf+|n z_I8*ggz`_2wpmW*7~3rt<9AA2++KyK*=Og zD*dcsA{#_4R2%4kj%1eLXG`G|Ad8m+#Qr-A>N#J`awQ4v>JX%ovMP5wstyk+;(aor zxr`^wEHbN8GNfyS66tmoDswfUXVOqgDhnDT=WCRL+JTyGQJXhu82R8csN?$r%)Svc z@uDi&|l~i0zIm#=O$eL5DfmuM? zD?neoNJWK+mTY8{S1rf}jB>EcHCL;4RH{PpYU*MEYJopzm`Tlrea$Oj2-R{e)&14f zss4{JI^lCY747u0e0bq3*Hqf7+)~m23i(cXobj$j6*0NzE1-2bfM!D)#EzVQMyCWfjW_oy) zx(kXZI#|r*)=oJb)Ec_}a|*@pANhyBN=!n=m15`$Y-YZdZ?6d2;tekcvlt1bs%z--Wt$;`u2zejCSgGd`v7uIz(*Qal9g2{zq9AC znku#H z)WeQVw!Wjq)^$+NN0IOP^_^b+REJTP`(Su+stO&rpf=Yi_C-J0ZB8~EBvq|l>pGWweBkwwL>@z6V24>%cDcGWqMsaWi_9{O9%fALjQn|P% zR4>)ti$kKZD9ZuuyVrf2Qr*!wQ8&Nzk=3EIL%GVlVw=3@;XXTagsi#Y5v!M*NPt$D zRXNYRX9hpC3$wptG(H_ZP{qsQH$FE^rlT4 zt)sIQUupvhI7nt%9Y~i%uLpfcL>h~?NjVtOXq1gMI5YiEP$+06LbT3e#ZT7}6j9Yab-q%@N9rw~TN_=o%1 zWCH{`hKBX~s9m_&YiG}0vI`gJ=Qlp#(o}>_az|i-yZe=ooJ)kM{CAl9g20A#vy} z#-t^6zv}FyoF0tA%{%v6ZA&|V7MIRmmRJ*QqiF9HNk}VEhvl=i_!SohX@N8^>V=|l zRXqBSe+_S0u@%+wqQtdH==^nAQmf3q8b|w;0Ie|h{NymMxwCfm$U&>X$Js_BK_x07 z8r}2ZMU#4;r~{MW28ICa7ccH=sUA<8V&YVV(biON-JQ+0Z`XFadH+7U?%KW9*49GO zjFQ(~aJW>K`^(j#sF%Jar7vbcN0>HUo6R(bYMH~(n!zQg-+goPe_9|ll#y@TKT>Y$ zN`@?7u7e}_gk8O}32S&(GbWd4u1bT(Xl@f#jyv~ClkjHftDJh^QJ5vpJUKOI=g(iZ z!-tRCfkTJw!llcuRR+hfMR<4a_8OUPDTT?$8-os@WmTRuuPBfJ?fLIPCnaI0*wAv_ zjj4GL^@lgya=SIr&2&aFU%C2x{0Y!pR+=mr!S@GfeZQz~P$JnsNa#oZ@xO2m?Nz~i ziI={F6LuLGi!WsEl5T&=dxNV=MdFOttt8Ba#hvY!xW1x-<9!$H;)#PcJv3l7e0MFA zFo!A^y^wEOIoRPbcIbp;PT#pSUpsOD45PBi_Fc2X?z!~_yME6OTi@B@61k>E!0-!j z9l5cBKBmGTUqtr?q(#p25ZXXBd*ZKx8c#KLjAbtXO*F+zhgO?DzgAq&U1z$ctCqMw z&u2-z+5wl!qKe=S%@pv<8Z~SdbxsXeC7_;A3ox_^Qv2Ac)As7YBlgCT6V^XGmg+Rc zy*<%$@o>{noTB(+=^R`bLKIPw(yPhJd{nrUJSU+C9MYF(3+z~k5E z|5{p_Y!6_5&pmhAE!XX`_3e#>XaNc9?DW-x~==S|0&ghWC{)w!-uUrUYml2WqI}R3lBEOX$#O z49Z(@<$egO@IXno;;O{JmPjN?Xm9zdT-Zf`mO+=g9Wmn*L;cos=7ja0Ic4pQYyvg) zhIUM#8kIHY`zEQ}BH*&M9*tfDKLCK)YJp~4yJwf(aoa6+_iZ=Z#*SuO{NWPRWO`Bz zKj+az^5Mp<#{hj&{MQ8DQgr(*ru%g18kN_2INit^!^c|$*=mbY_|ELX(Ac;k(H4D| zcMwg@(4!M-_?Y97KwX&nw6Q}@#69`sgh3~2Bua3he*{1uu$NzZ+YTQ;X@f}cnarbk zd(LSOgEjPFcoD)VRH!=xIz|zIme3kj+X-~;uIq2Mwhi65@EV;5!9GN?s0d?XT>E}_#uG(h*e%1Fe>QFu92b9$73_(}_B7<3;W?Tj+Tnr^Z7nylbkp$Sn-Y(s>ncMn~C}OO1j!Go{s`FJM z9kL5GZPnt(oZly~mRxKZDAEvP^Q8@tG>JUEDtH}2lD>85ggyK6>-Ofsqt-h#=591S zGB~`2n0)jdLlxr}Gthip7_^e-FsS001BWNkluj@V}0MtHrXmZYuow;P+{_Zn?`>6Hc z=2QA-woO9m%8L?WAl6d`SgdKG^JoS%^Q?_BjU?Z(??%!`w^|hq)g929L+|XGdJHmQhx-O(rHpNpi3uywWabNYYiEhkLCn(>ktMx^-idmw@LVJF#Py2#x>}J7XdeEeir~`xarFCl{RY0 zTDY_h-Vj={47FQnEy@Er&PlSa~7$F(vlcopd_J}4rC=MA-W)6v|K&z`;?>v%(Y1A$>Cl*^7_j*Nv(=fR<0UU|}x;bZQOd*0J7{WYU}sX@Aq=_vQ6i{MqGzah)c^j5Aec2sur_ z1qQ~Z?Dgok{y9ltAxsX=6U`HfR=7c-&cq;xZf9_vuoctk41p)CmV8nL9nZT@pG2T9#@=2-gm1pGT)Ht~UI!Dxf1bI3D>J1`&AAQ%%Ptyc0l29)Kc; zaeRWNXJLL4BW)HSU$EDnd&(+E+V5;^#=C)IUQsQDm_5J~8>qDKHZ0}Hl#|O%_gPJd zSiy+*+;g{m@}rN~CM0!3Ey?L{Z0{TG?_ZmQ4jH++guWu6ON9AfH$cZGQwuLq4=PL$ zB-6O~E)QZTzW$bduuBaJ=WB|u0%ph^UDwnKwkx(!`~jey&&kspUYB?PyFLj2_5c`5C$omD&?xW1-XKR z&JtqTPx);<9FDJ0kwcAZj?mo6{62H%a!l9|BSq5}L+{GOw zFiUO(H*Ta9e-D9^_uhYx-GA5Z^yW|%g*+Z90m;1sGDa6mgrFSB7%bRyk_5|BUKekN zkQVXjlHW@|w?fBl}Ky9rBhW4jsMo za=*G2kyHG`BDNRQD}02=ehdjzi&cz_q<4ugiKmYpUcJSy4Y6p?I?kOzIe=c54{@<{1bczP z`I{qhCF4-Nq*dUcknZ?kubn?}*iOCmD&0cst&1ZNB%M_s=#56M1ZYtg@;^wya5vqj zKJihz?WXIk1!-N)4ZHM|MsYAljIltz3PUYQ=={>v0NOvD-F?YmS~j^?1?cidVWAz- z3LN@s0Uc&^UdNQE3ZSQ;9_M-n>}!vI*PeUnbvsWU$c%TKNr2W2mhgmpPND!^OY=qt zG&$=p%*IQwqxo+*Qh;1JDiRArJJNx08q7w2K5)*0nY|py$-se2sus;(rAadh5nc zJRA4f19#nKTQ_t#1&Q-tBMVvp$P&5`RQWz7v>Qh08rewFKUbt28m_cZB zj;io}>ETIL`ZQ~-o`V$tZHP8(8PJ=r0nh|j=4hJkIWN-o3a-2ZKnJxGnAHO&n(X`C zz7s%eAildi=_bwL;<1Cao@m}W`Zuf<(8?>* z8QwKihAZjlCm#JUKet;uX`lkMsD`9Y&Opn6US<>~vu^Rd1czRFhov0)Y5?ug&6NP{ z=q&|sIS#EI>2C^Yoh7vY8viaz^WvSX9#T$KJ96J8`r%>#qkW-@Hn|Hm_T6V+vM+z_ zTXyu!MYuFY%koJlnvk#UnQh#g=wz+VvY~0spa4BSZS9-k(AQiGpf{u4BZ*5V2PhXi zj#^%l47CcNGPMimLOdPN$;Mmy(JM-5-<6s>54L1tFGH#PC>BTEB9t8GEvW#2L(&_n zZHVl;Q%L9wM-BkyCcGQ~ny{(!=TtCR-sKfxY&nTqiJaW=t{d#9KJ_u%hIB55xaHK7 z1)q*Da~ZV6ZC8*}OK+kC(2M?5lC0_yx=1zhEMy7o7)zgBfQ0T+&EDA{qVgSYILrd<%)OAog)Bz$zLEYE{SPub&7KX2cC{tfFPw|a(PiOv!a zjTASSDTk+Ss&P8rsy=er`{|&xZu@S0(KonJs5I6&JXjKhE)G3o>PjN9NR9MP2XiVO ziIcY!>-g9g{}{7H9&jVBdu(tHM*N#RU=q(BZF{gz|nln*4={G#9 z<8M>Kin|C`5N$fuN`UU(&~EqNd5eAOqYv4}_9nsvao~@nnG6xRqkJ;1641V|%Qov` zKxgkp=@<)uF8S=LfKGT;vG0`tos-#JDlKu~ULBxI*Q^8$c`?0`rOGa196tNX0sFIW ze8*|Tv~e=* zE^xq)yd0evg`KpVTpGm`VPig(nZZxq#G+Po(tx`DnOUOA#DB+)bc|0aiN&(J zHB0EFMvm_=WlAMbOHP;FA&J130y+qX0!kFTA~>hVhwSp{V|M(tm!11|Qf4GTE17@w zM^Fv~g561K=m+ke-f#bF$ezf3^8i70KIGxJK(TWUZqxv?C^T@BE|G$ob8 z1M-8F&?N&Zk(gRO+GN6?d+fLW_{;Xn!4o!u=R#o0C*&$|tn@UrDhiL~4C$pjZGfVJ zT{qlf8+TkoHFyU!GLA=$Fqit|1@~X8gx2@^A)j6-ygHb5M=MI`XZVyoVr^k zp_KxfIJ8Qg)I4Txih|Q~C+)~9&s%GKO-N|9^D0RxEH9-a{j{EAVjp_&UV8)&$IeY{ zL>sA;_JB)F)L$l`eG*Ij(B&m`Br@eibeJX%xDue_Jw*;3T>1w|If{TT=2*vT@_3xO zIAFj3g>TsNZyW-sqrR~`Ad>{!Qa~#~sb`3KO9C=`Zhp6|+p?2(U@dIMsGx~PjY|8y zIzUHNN}SHCIb6vY%y(1q$zT3e%~Bd}ssa{GNb&PhIb15GBW<(jmn>W`N$6m&sS$RP z(7spkPE^cMV0!V49eCkcYhcs0b4aGDxT6hjd}H1$i+QLr=jN=bp~fEl@CWT94?TcU zNu@N`tWHruO}bJR1^r<0Yc~qlN;!1lqCYwth`E_f2~bMx0RL+VqO+G`DWLOxhl?}= zy7)6o_ELfW&UtiPWjUa0>|F1tec@Z*v!`Bs-A-S)>@%5;#@$fQIeQyG8;AU~;m2&$ zQNOxoZVOd%+0Ygtd#m|;2dxKw>=PdW(Dx&q;pIsENRII;CfR1*%k@K-OFULxN zj)bL{Jl|l8ycjA%DDQ_Zyua}2C397VL;D)%{XHd&7BEj3}1_p!E(8*eHDarh6Ws&)rsLp8nGA z;Ygja4v?2SN;+#7pTZK#QGnHIfKC7l@mVUV7lZPL1?bDeQ}*Ob z2kjf*dCqe@mI69L&|wrRsG_Es10*L+EZntlB8a&0!lBRCA4TqPWX|3Xcj=zl69!Z zPQU$z4PUxo^r>{$og}IH1?LcJmWHK(ZpMh*yL-ERc8fuchkmTBP*>o7SWf(jaq4&6eubKMZbO|vqjEE zp0iSWqL?4P5}?au+hy)j&KH~|v^T;|ftKl-ojY=vDB-wu(;H14Nb>!I;o6EuB7>1YSxhMLxxK zsex5ga>egiO4Fi=VJwv9zhG>;SS*5dIlW83UlFjS26p*iRlK7(7y7qym?_~;j=k{8YYr_5mOQrT_ypy^hpPGP85p3ica3#%9L2_+`>eXL9iXeCCAusXS{bk4 zjYtS(K}>v8xT~e7D_u$1S#NdpA-U3C$!ap`Y9p z|4eicim|DjOIcdEvrZ&imBu+2t1d|iZ@J}0P6Gc=Z| z(`7EZETvQM#f|azwd&)!hV7=i{`L=^HjX*%z zFG--$uMX_A6geNf0LU_-X9NFBULe~L(ArkA(j>z)D3B#&Y_1V?CF=@v~Pds z8GHNCk;10(NO7{C8US-G&4hH+n{uhud35LXH<1UunZQ83r={uu&yct3Qk4K*vZjSq zNOoI}3Oe@6YW^~SEZrE7{-a-6gyt~BO4MW7&xfiLuac|HOKMUAcj?}6?j$#mFLQKp zS0088IC(nMarEGe&sp!;)A*C=S}DJ#SGmOZFWryoI=sER(?0#^!*=U_BtaWT_qx;% zv%_0(xvmNXL^WXmM_>&4P%=^eJplw?(t?yw;cfCOCvS@bDBc~7T%>}zf4^!*vA(us z(79ujFHVUt$$&1E?2g++ZRQn-NaG4kbyV4q#b;W5TIfL*ujEw}Cr5GwXiZTDbXdrqi-Dx5ReRBy zaq^1@WS@?c57j5O}G}- z-nO-|k$?^j(@~+-ax-K>FW@HdYT4B9trW~b6C{a)h=5~50|caSHxO5K)4?@a##JIC|4u&pt-5ZT6G_EVO85S z9m}TEtm@=`lU|Sn2GHkwhwaPXewwVix9s%!Oa7gHJ4vhQ+PbEMLLcpg@$%XFZM*Cm zCFu$;zFzC;xlBh(_NroZJeSYoTtf*2%Mxg5^e{wsjoIc6ngb zzVwYJ?fF;Vw6hm!La!FVnj1G#wfUosfKCkPp-t}sZND~hkbO73p>+U~tF{P-t7Z0l%`+s{IuJay7eoIFWq z{azd7yy^Y{j)9{S(}X%)`nW_xg6C^A@_0za=60;!0LP_8YIUUoOy8{8L!hQ6s?LZC z_J;au_l0ljY_r{4y6wh&du-Rv9kzkh0nYj#8ug9Yklyi4K=OpU%qLYzaXR+y>f_N{L z=zZa8J8|A@BgnRpCTs@GYCF7!gIlf0Td=bMQ`mrCe`B%ve9D!+5gZ`c)U zp}pnb^L+z4FPs~NCC?0K@1RivXmtox`BasTzo5t66uHsoj~ubnhYnEz-sqrks-gdJ zJq=sCR#LkTK(Fg+x1BpS(YJ5b-77|*U9+wI01 zuC-fky2-Y42DWI5H}w`hK=Mkuxzq%NHK}{2zHb}~bmrVyd*P)Q?X3fc?8NEwaMvNH zOuF+%(F5u&C1Irjd=t0}PSiC*!%ZZ1H3Le4+NoD^HAeTTNGQ@7+ynTD`}+rc^9*yU zn0ge5Zq%@W)!U>M>D@s)i4Fo>-QC^RjFEok`~^Epzm6faoQ|PzFC}wRBX5b<6q=1O zFMSA-ExWHpLhrF!x+N`CbLc%%dS0|6sj3WU8Pfhz5+c!!DUR5PKU@u{Lu>&VSPIR*{oA|vQ&e+7U4yaN^NoJRl@^&PM^jf{ThLl*-+c+^N?JD`YCBQ0FcH2|Ezk}3EJMUB#L6Sxtm$Y zjqt;rNXz{{VZljP@Ms~Dy8)H0u%;Tvu=j@F)-n3UYqeKB+D3{+_RbnO|3DwAas+pfswZ@yW3&QOK&2jH ze(mmEcK_XX+wHgC2B>#h7pk+K;(>bl+$qmPXSKN6=f9{Lmg^2FEeQ?Zo|>k=G2J-D zTL&oLAHhqa46=|?I!;(Yi8!<;KO&K)(%wFBz@B^lc{_XlTsjphB;?|`2sIlE8GdeE zyp~1nMw{Gq#~s)Qd!SEvH2~c#W70#L!96*AP8voOqrJ1sHUa)k8@ebKZs1vuq1Wzy z;oRyrj)RMOP6xC~r_e%E%;^O8BTaLPV=BJ)?DO{Icb~F@1WzW}=sK>>{lPdQuwDtN7?Y`oG}kl3ppGk!gt=Gi$kU z_MxV5YFbEzpWTJ$mq>}-fX{a~bfX3zbo2a_wX&|0@Vk?=b3J|P6s7b?p0@Vb1kPFn z=xL5AyX=4tgAvIg`hwR(UH`A&vy=ReJM5mj?zEjdcUdc+_oQ>>cvLD2Pra^rCjOZ` zz^VF1X1IV(mrN{}N!(>}{e|~r!cS|GfjLfzm<*svbw`zoW}(}Nj9s&LFC25ko`3Nr z`{uX5ZO2X=_eIw5U8-^q8mp$$13mhkdseWr5lOy#`*!=l``>4G)5=U9hZmlI!Oo$v zX8E3a04%N0iU*pmk z>kyydZ3{Lw%GoQ&kK40+=Xaj|p1t(?o1Oxyj!ABYXcP0^W{mYNBDtl27C1+T2RT|| z(l&0|Y<-HNVm$jOvsh zB*WJ?N@(AT5C6me18-B5iTfM%(|5}nuAII(?~p8^^)ooBKpmYzJ=EdnoM4rsN*j>Q z8>;7Q6M(El-JK#D_3U#m*f?Wrh67J0%A$m&89M#jJ%(T#<2^;!&OiG1e{A1=;t4x-`ecBZ4a6Bmv{(R0 zIxJV9mSEh(NXG|r@w2x96VaZ^_!tz%@}LzH>?9R z>j5)I(LpiX>w}V3R7%0HHL}-|LO$Z@>Lk+e-`G z1%P~hWXgsr8*B{9p@TIdI+~ZxYY{2u=jB(lwr~}Xv0BlsoFgDO@8_0hA#G@Z2QEVr{AhQ#_Lw0tYU<<{u6I#L) zTno}6&A>Gr(BbbdB*9$`pe5z~!ZO-Ja2Bd*9{#0&3ZNBsj3`-9k5D&jePlOV7W*E0 z_N*+0YT>*9S^-@T6*E(vWD{+rQOv%MM%#}1Y{flwv2Vcszu*5uJ4l$dq7h43VQ4ja zbg6^ui#o&+04=Lrr=!*ZvU_g5#eV7M{|meM`aRyLG5n)&IBs-+gE3Fz+dV@@-(@79 zJ~u%{@;qP{nB~M*&W`3W!oX6mQr*=Uk_1!mj&$KUXvgB0TTJwz7K2cmG{Wcfs^CT| z0bLE_<%9=&{f)QnU;ox`**CxW4f>5V(R}?zd)E!u*%qYhJR+j5sqjcpqYzOHG4VLRxY?H zDzdd%JY=nf^|Mhzi-~hLGyX38%pG`7Hj>e}W%Cw-DxFAK-iM%2zd@yT4l|xNkAfPkEA}tycg#aCWs4I&uw)G&i$@iVyz%f8r8a(#V4u3DiEMn5>I`VP>Bw6Km~}{&%}sT-m(!_sx6+dX$L-50-hbac1T8lC&XK$9iD#a( z-~Y2O;^Vyp-FOdR_$j;b+I@I6w8185_&!0=uR`KTT%9=%I0v9Pm+?-NyS>XX(2FehorJIKkp zhX*F?1T~45CNM(b(uK3X3F&*lpCuKIuT&53Y-1M;!nNVfO+4}E5@&?gu;QV=_rC<7 zlf@p=O6nlg%bFif>V4Cs46t-UmAlqd^EYGl0J@nbi`R6(J=e9_RvI@}6ChFd$~oLr zU&Ao@-fM5#DbB2(VFyZ*>dbIIQi2^lhD7KeAh3ZOs{=RE!}Nvz<-hlHwwY^*9Mmvo z9shgm#2I_}%>(xKiBni!O`OQI$vW0=K>ek_(2fS#XV@1oJv>7M&g z;H4klu3U@`qZeM@;S$q8`MpZ4Z(TcSK$rov;^8k-i zQAdX0(G#|H(+2w}b%lTDXFkipnmUUxB40Az-bAgxL1E_*s(9P=`>mT!n9Zo%W&$3S z7%M}#<&G0#9w8z(PX32}%8%SiZo_7zX(xxrkM#H0Q13;Xq&fQl%_Xbho83^5{T#0> zzi$f$seI-xYDkeB#;|>vyocZU-G67#KKm^1+hzaY@BRXL+qXphxg;*4@Wr>@wqO4@ zpW_IK19sE(H`-@@#n=b`SKWE7P2=j{uB{&hQe@R)1CR?hCO#e*{EYk-j`mm3;$nq;XPFl0aYz+Lv9TW_{G zyikyFjz(^^69D=UfIc}qV?DFAHo*Z!0<=6yam)xe0H9?sW|#>x1<%DAq^K7f=$PuH zi84cQ3B451F0I{%xi&yAH6X)q5vWs+hk^ET~j+?X2Gy0J@*1tKZzS{1Oso3;(*;dw%Nx&_&)m^pZ-J~t|`jF zfW@y59^rgzt~Eo}*Nu1IZ{5510SFGN$4@K1dFfKW9XfE-Pg3or(&EhNbI_C#{JZV8 zhunrij%q)rtwL09?Za{vvhYFK^t`1o*i4A7dMlXB=?gfX5Y}LJ^9r4?BD-~ zFWQmAhwbiL_uDW0t)GV9U++Cf{CH#T<4wl)JOBRk_7ojHH?QAlk3RgcJ@mf!*v9pW z%qi)Jv%+M5CZX0mfkuV0Zz4@gJJb)+T69e`^+895IP`PpER-3te9!`yv<};^9rXA47 zhGy*IOr4FHB8N%aYLNi+f-09v8dM5tk;}1Mke0)DR1-y#S&m@(HGU9)c7JjD)=Y(> z#HW}TREczMTo|*>RTH*IFtEV5|uRVdH_ZfUV**)_Szk{zuP)!BH2iXrgnKLpgVmR zPTLs(F^XlsbIV5ChlfS2fa~xW%pnQSa_sPzzVcQ3>SIsX7@Ona_uWep)yJS7G+arB zn!F;%p$>oc^>5o(zW#*2{=WO}wV(WnAGd8>bB;|kj-l31z~aQY^MJbFy6Hf)nYLQ( zU7JW$s^m!H%O24j#V>vUd*kGZV?+}N;ri`%H-V)aZn%-KHHJ1qVjc6+MiGP@AL>kX zoN~7}U-%vgRXgC(TL_y2H2M7WU>$nl=70F7Ujooyv$p|s6Oy@^&E#Qk1+(0xi{QZ3 zSBp0J_`~nFPk!hj>&6zE?zw1F!%--EX>#5U^^U=%(K54g;WZ(V)qgN5y1fh-VYbwj zwiZAaXe~m*0iAj+I+%Z8fL=jGom z?Mu|K{TYir1pk6wBMro%#gL&KP>o?Ev;e&qKuJ3M$(lL zW7i&n8r>MQjrhUG?Fg-Id-~*xoU+%*e>rvX7y*(Yz}alK+;X#ByN|xiN)ILbZ|l|# zfV$mXj6-aWgRhgU|MshP{~hnLUE4OgQRwjj8GHb`#{vCim(Xv&1)%ZlC@)2+0N%}2 z)Ra#^!|8TaXOBMeewzKf$692!Q^h~792e-#Af;D_dWP*l@3>u@Z?cI>s2LJk=}azv zJ;x`E(bC720PW!sr*GkK$ZhHTGP(!-_XCm8D*)OvzjTb3AM!)K!osL^SB}_C-7U5c zKsO>C)V`n@KkjrT$GX82zxT?UUTOR`-7m*R6>E}o92RxCeFblXf}6fj&JwgZQ4O?J$KA z$C1!O!vmh*ybtZty=kK-Xzkg3jcrBhw;+Yb@RA&O^9{Rj>bSLn#+xXP=;AC#9FG7& zsvpUVcSsWY4*>M%0rY{lj}!o1%bDFW8a+HBt%?_DFErz$A9$bL$L6R;`_`}#M|5sG zq5E;x>o8+{>(Yo_vSyp8!X9Ex1ZdZyd~>eoc_)B&8!bua==v3TI{vfN%i&?km7Bz!68F9G3t!)*>4TPlHY*z~FlNrC01<{`&90wJ-ZwM3lB#K)F`)ExDceNGHU1g_uoY; z;|K32?O-<^4_Gpscoc*EVqcFA}bH9CQ*e)%!xP(?qgDMxv;SKX@%qvLfMZN~d zSh2V_QhU8HEz#Y$nERoZdM^t8#**rR6@;+A?71LI-;f-Io_DM|!i6bvH%4tE5_LO%1zjGww9y{7%Wx;5sMC1bh0~7b%~A+SHC}p_UGoNN?S|vgF3(>7adB6ZM1- zz2`3bZ+`J-vD(*p6^smaRV^yhOQD=mEc|nHX3`{!zg|Pm?t0Fk*7+^333#nu6o19QD*^wcj9H9C_0f>FGRjX z0rKfnN4Oud`S8~(Xw-mhpm4lO;amzx`XZq(vQd5$FU^-9d)&^U#X8&8;|4^-h$yf& zvQs#d&(=3r+s81-@4Nd>0yW)G!!hg)*(XTkzRNbj+MnR8!$X%x?7}=6!sN#$b=S{6 zj5(SuNDBk z9tnLNEpYd4#3#%xZh-G8QaA%(L{H9~J!j7&?Y{BEGj<;L&vZ=-MwfDY6{VYV7gRq{ zG94WBzWeXA|L!0BqV3#F;*3LC-xhr(WW>yHy;1n?2sC8`2|SL}mSI)FSt8A?a9gCm z)VP8ON<>%oU4>LC-ir<*eQFBXqWogH9knTyTqQxP0E~=v?rW0!`pVUuF+h&K}5V1K=-jJUVHl>8{jYOsi$AI9hdG+eCpCjN)Of8>u`tFS2N#49i~6VnQZUckn^^D9zWkOQy-2R|3{Vp7VAADlRM22}Xn?To6hVty?3aJ( z@7T5QIi-+hK+DDCdDz;`HVH6r!I48TfI&7w^2{vmz`6#Gk|VER5>JT2ypsMhGIUax zsyF0kZb0hjT*V07Mx}<5+r7U9^P=;uFXFHMqc42H{`iYu^kBxPXd?L|k33}C@C)Nw zkoVsMK9R^SIz)g7FTo|G^q+t2ar=|ce+Bbm#y;_}kJzVv^pivtw=f2E?F>JwQa<%m z1-Lu~^5RUXfRcGSN?@P{@rKscO&WBH=-S|AKX=~{EcaAshG5#T@Ci&-M8Ai$T=6F z-L1;ns9a13*k8iSa~w@_d~n=)7aDE6LVj$L&>YZ`(2-KSl7wCi=*3|63U_~&55lYn zXvcp7b!6kMa@e7h@1p$9*?OT7lwTVO{f+aq&Yd5z-JK0~Ei_>pX`U?ru}Noh^BjPm zULe!#46dysXD{0;N2s&wA*mmU>Id35NC^i6{7Izl4SRRmFaF%m*sV9+;ObqymNk&v zV?wT>iYmFKBB@7Re5B4NiA+q9$gkfWEXssK)obPC+EZGl5}lkgD%F+y*W!Ep!9fuD zV}nHDUcz(mXBbh>z4$U7hVAy5AN>TbxO=Pt(9aVdUO;ks@{K@)YHeedFl@nrX(e z7C?Jisnd*T*HFxTeg}YF4(do=TKaGfzEt{aG5n2^(BjajKSH}Lb7Qu%y&l@pg`}q3 z2!J+{d8b^43rZxS`eQ^n0XQ_De*KueeE6)5;m(uPjefy#fad_bctdBaedbf2u=f&r z-GW4n7VAkBxkf<^1L!#xLRo0lMD&#NEQ3l7P?U1%K3cE&OG%ER6#&C?NCXqrKI#^< zs2;Y}#wLtSYUxo5bpPm2{)3;7E$REQk9@#BNRVWo`<~fIO5nkm6dJu&5mb413qVqX z_v09@!*6`+N&CVVA9I8A&O6?1KmAibP0)km90+FUbGad=t60$-Pm4t=d!qg%(pgc% zs5H^N*RgRL@Qq6XD<7nSjp~%ZTbS|vGEnt5KfqGgigZ#H7(c_N{O7;^Ti7w@@tUmj z1Ma;hFiGfIwCqhgH`skQ@3M_;4Mb?$sIHM~a05XqYC0LrIP~Yhg&sSCjdE^m)`kJ| z6w+CMmebFZh^_+AiwY%@SPJ}IC7>4@ilQIs(8I8t7GZiBpi9(&OGW^#7P@tA7*5*O zmRh?Gx7~g~-3ZrfAPK*Tb0yB5JB5@UWU@(hZ0@qJfA2MWoTJ5b+^!^(C{QE(c0K(2 zIF;Vxco#nOzWeRRe&iFl*LJ&)wAQWnl!L2uODuUs;8d>V#kPJTQ_i?kIhD9-G?j^R z1ZkAw{)`?W%AJnlR3$&Dn*7wcbN0kjPumy1^qBP$qQ3FkYwV{#`)Rv*Kc_zt%J&c_ z?kq*|R4vm;PKo!+b5tVz$yXjB<@9xOPJZtX{@C8Y@7qdv{u3X6#2)#;2W;0)`ok%! z4|?L+bDoN;xs0{YPk}g!26PXMlL6{Gs+HI!JIKi@<7U@}W|5S`9uSyyautA9nys{- z{PJJ;(pT({zW7z&w7bYHzrcM>z}L0f%I{V(();hY(LVCPZ8kSC;B>5u>Y0rk-!?o% zYA%9jtg69YKZjeCz8)7zZXZXx3ea*{R-|q`f^=yosSKvuvs;@fV0EAvdMM+K(aP<1bnf_adfjhn9BV?X;d zKW%s1`fg7GlBF*$DL^T8Ro@-QAY{8aO68S)7=5d?Tv?Zd!@u}%xBOg^2Q}duY>FO? zr)OVy$-eZp$Lx(a4|9rbmp%O8efF^reF#7BhRBc5W@58W;sH=1zN*h95u*q!(kPW4 zaG|Hy9{c7u-K%qggD$VTcDMZ)T>Acdl_TBhZ6B1Vq&mi^-Hh%--r7tCol}r(e#_Y* zH=&+kQ)KNDXizy9X}ru)1&K$>2cZQB_hw#S_}l;XcPZF?10VKodl#v%$BrNK#3pS3 z6%2IZ!FlkGo9w~cueW|8r}Fm5<+_<1lX3F0N2h74yHIB@pCh%PZ`3YNVeHBOzCG_Lin(Mb7T8CY z7d}SlPhWHWCn=B&7ccOIV@g9zDM6n^rk7visD>w=v}ay;**zbRJop|A!AEQt{VW=& zz>z1x^D@W-8HZ=j;XP?1ykCnaK^v$7V^oRma+j$?(kW^Yzwni>*;l{y1le>IcGsP^ z+6TFx+tD|E>Hq*B07*naRByc%gHC<3i(KCQ9&(@gn3K>D#1p8~g!|u$U=AoKC?ao- zKIT=~08NQbm*Bfke&@UJ`9CC#K4kZ?neN3Uclpves$od^g)XW3r5hLKHJfR&(^O^s z7tcD_8}U_d*^Da`*)cppiY&?fFPs}B+it>oU|XtUnUz5=Kuds>0(wajP*FmsJm&=F z(wf050{Y?q>VI|dv>d=?Tq2$+mAVT#?TGiR4CrVBHLtk60>4OSGSaORx6+>08oPBv zqZ^1F_(>H5e`F|;J~>4mF_~Pb?I@r{(h(eag|70CJ@FlTnVf@t zMD`y2@FVu{2j0u6wEP`aFLkd?A_Ghu(*py5QoPci8kvJyzlQ|y#)nB-%L;b`4v8%P zucT=|UXoYec+0-_^>5m9FTCh21s%$K|Xm{_wiM$W_ivbt9ewOd|B2p5Z&$7jcRtZMkTcaOpqI;U_t!KKHkRQd8(zeaAzVFD$)?ERcD zb}Ny~iaF9wF~H?P5j|1Bsk50vT$0Q#lessEcc!7SmBcEv65;LvjKE_6`NfMQCJmFv zO)d^M?e>qxS>+o!;u4~vE9G){>j)*bB?+BwC9TmFB(wm%*3L;ek{D-Si)5ssTUWRL&FQ*ijVy;a!9ANhdYbK5PnR3Ndxf_!Si*=iQRsmYADN8DNVW-EP)GRcJad9C>NTep2N+X|%AMkS zUZo=X6_S|Fk!&xcX+NRm50lGqI|)IX2$vJbi_#>IxZpdUrhy?@a6?qsNWyKV#a2Bz z7UH%QNkYprBEPa)2TbtY@=d=?bMeQ%`2;{afCQW)3vZMAdvCh&I(*a{9Mnw|8K|JQ z+DoD&T$I`w^`LIEXVXC2(|Zo8X%8Ehu=*U{nNe~(&XYp>)}iC}-KU=+m_;%_rB-*6 zl=X>^d>D5e!UW^JdWM3Eo(o>>-rBX%D_80%pObJoM*>w9iT^FsRN|pV@e;De89?;=8W?;W>!3Tr13#X7ZSaHlce1PNUv&kWRQ43EtKwUV=J;w`&& zVbChcC>d;SkmdkT_?V{vc0X+d4jeyWPe1oOwS6zrq;b##Hp=SjAfc#}B7}8BSJ#n@ zB!6|2S9PoS6;~ZmP1O)I!laHF%sRdr$2Zr0vcUjXi(9hgwU@*$9MeBs1?e zD9(fTlbMLiQOQTjRiVEG-JveBx#z44!>^k8^P@cwJOec6X`no-4gpY6GjfLiZc9D8on!g_;}jeOAzac!7mfxOR#t-w7&~-=LoF00}kcNk&qVjC`*W zRVtIJQjcO4-NFO2r^frbA>C9QtGQ92LM>|5rAUV9IE$|qS^|Ztz&DYFx0~Y@_ERn; zTC}0nN3ylEl+MDrR^&#G}J#mK!e_F)qm{$s^iE zP2SlvNYF!e`0!EB20RbtQJ%G2a_V*0pu%0XH)9TR<3za>-6aQ@b00hzq;nXa;`{T; zd}J&Fb`_FSz3g_N39qA|L2gfJ0C|dJyw6Y4QFL4yrpJBWs+OriB7564_`D>){OObA z!(1e2aO(1;o$dq7YGc4XOfuKg3fKss3DCiW^nXh5&xY+%n1w+YbgB$u)7w`%{VM@_ zNwCD-oXd^ELYa&BsEjN<71Av+5aatYphH3jpmnehg|Yy;8ns@-lav+0-_^FGliXtR zJ2sGa+(q_U3&}HTFFU6k20l40fDQGsFq5b`7O`s`5;~|vJIq`Dm*=P<}Ajg zTF~~{AT@GYyj)D0U2j@gb$ST{G5I*;0!#NJpsT`LO;#F|Qc88owWMa=NcG7z1Uy5>up?igTfFKoJLL=R^DYw#)rh%-#3~0~33wZd9MVVRjlvcOCX*R_$ zM&%ir&K#ndR1@*X7a=XHu>4=TofmHOPma%(NA2zlB>r2B2yhnP}(9(<8mqRt|Y+ylul~Z*dkh4MK^5K1Q^)cVx!S z0q7F|`t0De^&?;=xu;qFKFxQkQ=cQ&Dz)n5nTGQs2TijiRQH!bkYUhzs&H#5@(q8?o zk=&Em3Zh2R9^Md=f9rno8fYDK4~-b0ey9&pTj!uuGgtKhQURWPj)@YA)R#k?T))pj zB_uq&X9r>XValpz5iGUh${j>v(FWS+O19E*6NB^vxiC0sCofaT+dpNO$4DWCP0S#j z=b?wQ0<<{1Z`S0(b*Yu&y9 zKQ&98l+gt58B<4*IFAHO&Rh=P~qTO3Wf;)TK&gS(4Vh^feI-8=*?IK^7L?v(r=dB|UI(klpBbX@Ccj73o!;Kv zwiH$hXy;dzg|9Ni0dW=96+`6_j*NJ^rdmWG#AIr*CIs#o{k%LmBCE$lx_)^&U6UP@ zqmUpW7rhZs?%w&xMb6L3jZAr}NySkEXuys6i&$Ytab$%yoF@_2!82k!;!(V4UekO) zHHlYKFUVUoK9{|7MZ#LDayJ>!#9k2azKMlItsJ%$;yI~O08c(EKr7X(lork_=?zil zsrFLxQgPYm1t;DlpDrEiT`5}it5KOCbMsh%SP6rfS*wn;*B8m=ml zf;!QQvVyQFp$$;ARc+QAch=Hdq8jfms~oawe(fj->2R3r@aQZXUl(@fBf<~Zr~uqT zCPOg?gn3^UCD4-k^aq%51=p^}(AWRtA8VtAM(N0|E^*)4j;!~qIza8CC8V0)nE^B` z$IM4(GKW%zZE&|Nq`0nhqA~} z17l0&YVRq42}*Nbwfe3qTV_H>cWC_ahz3iwbD;n_|22a>C|-^w?bZBS0L|yIvsate zcOQ+FVg-w+3>yniT-*l=OF&YibCBw`uX(0)FK&B64zPD`DWHn@lQ)%U{KnngbaQh^ z5$=kp6PStF2p2cs5F0htIXtjO)vYtO05u0uC7lPL8fESPbhK*je4Gi;u?X#;_AzcO zu?6FKpEwG=ol2Tk6GKeI&FOEpT4l}6HY*OdMw>jEXL%E7cF zpb$2?A_bA$zeQ0GXa`}TD!yhHwU6{N2EHvTTLH?DMpcYM_hgu4#3PRC{CoAjqR5p) zi+^L5;z=Nlz@Ra1%b~I*C&`jxyC*cZD~~9TPaUF0sM_S2$d3Y4Z}OT)$265!3e5;g z6Z4tuCfRTN2`vXrZci4gGc z)zs6wp&l@=-nf_EUOAM_c{1&e&k4{}M~YB~SZ{~%$9gk28PL(ZK3BLkm~$M;8Nkfg z9~huxuKP)9^t3p?ee76TOEOc`5McZEi0z(jy<@tmDc#)E{${#3w3!~8IZoFf zQqdQ+KE9+0b%h;=a2}*}@#qiUd&`Y`E~)4@+!;_0E2_)Mw7f4Xq+ahz3^$~9d~E|* z1-MPg9)RwQpNV@bjyU(|&TsOfiEeDl%(bdSg>^Y*Hk2whFS>D6bv5P{VmT~lkjK^p zw7Igkg%`bMkSIsNqa&LQ;1%0!WBx7RyVs*xuBC{BfLQ4^SPGDv4l)J-`k2^l{k*GF za7AwW%U2cbB}a}!P4z9Lc@fC;rpko9`O#XsA?bWiWeWDkRXNoyC}L&+GzNg^&6NQS zH6v)NIvlvM05roNgl06CtS_Johc@NN%1HC#MLVq*AxJ~pqtXL2s4Why2qFz4!p#eW zlBK7$Uv`^b9M^YG$%A-aDLz-mMLiTV{lXIur^l`=I<|vmJ1qN_B*zEuyzcZU3V+ks zku;$Z1=;{=H>%-y#bM&LtmSM|;&uSKx|yI$AU5LqcaP+osbcp)-xm zcNTXOfQ}O)T13#MTBsuU2ul!&z%&7pp0cS}l}8lxHK{TU-e>~)hHT*PeYBijSG+Se z=a2SAljOJxGAg1DQ(cb5D1Z(xLJeqa^800O=K2h{&K+F08Oj|d^f|Y#^KxXNW2Lb7t~&wUxJK=I43kRp(Rq~D05HbOmoybH3%U;2XGmme zuRqxlEGb1Oxb}Nm963xcT$of*8Z`n^llm#uPacw}rzrU9(ns=Ot+*`f1<{TXNoWIF z^&g`968t^DNa66(t@WgP@Ywx~apt`mAIXy#{|K=0cNeuZI^+NmAZRbQvAU!VS$c{Z z4GAdM9)BV|B@4%hs&W#49IZ#2v@L@;TLfa>u{OoZ7kM2YYB6bLpqDYX!yy0FU@p1= zig{R^j!6(!nJV1%+Zy}6-2dZp%v`*x_zlW{NqX-oNbBvJDjuoO(AU>ex+|OWrUpsr zFDy*QmX=u|&-_2zR>Drt|M9 zKzqN&a@1d*4P!;(@n_vnfrx`n_3sI3*Ym1U`YA=@eO5N|%CDk?YYpb*; z`@n?_A5t{hgeHGj$KLR$f|dYH<_vtB!(#HJm8t6_8t_t|< zO{V3;F<0o1>=VWx_L6!mdF>74>W=+hBI#;d_+Wq@1k9%bx=cyoZKZ$5K!8Ts$QP(R zkwsa_axe&}Zmt>Az_K66gtwEfjUT1wFQ|g(wabdnRaYzVX56y$7yRJXdkTzSOBa=w z2%yI#0Y_Efk&;uksKj2uh~(dz=fh79=mvN=^4KuCJW~45fL=;VYG1snj$N4UIE1f0 z_IP?+Cc7bx@0g=Go9zP2O;Bg>W(ggC&ZaMezaOAa2Xk4+IMUHAf=h>jrm@Qr1fY-Q zT3;5RC#08L7MRBsCo>|q`L0eHx*@#u&dv1t>T$YxIHLe0O5~Om&eAta;htSrHe427 z26WlTjZNCu`qZEq{UmdBk0(j!=D>>5SeCSDpKlJN`a(@!FQCKVU%(ab&Gu11?IVe) z7C%U$sOgHer+D2<6n&JVg|zz#fyVu!O*2s3f^QWv zQEgDxu@C7ySweR%Rf%VziO!)+UTdNoH09ioLtlV+cCn{TRE z`g?L}y?u8ry}zqE(rHfBkSGrpEkk%<<>8d+9!;A?tU7mmuk|PT0lEahod#xa*Fgbo zC8Zn{U4S?%p#8-i+G8jO;Y}jvO<|@2?X)EE1zr4MDTRwP^C6?#)sy9>RRz*?h8BZ;s3;A}|V=7yTpvT?`2M2KyKk z4Cwr~GXBg;I!@AplgL=_wP>{6=g@D<$`Q7w_D6I6D&Ax0)sMEF6|y%gSO!GA-yrbs zyjI`17f#aoP=E&1qq^Y za2;baIu@*^Gbb%{HM+KmD^fm>yD|sn`wCK{Ig#0JPwwMgDObdB6AedD5oX1QuRbnn zq!@1J*OmLOu^mAfMOkdn4_InLLdWl?-%0bz<=s99;LJR+To8IHzJ4ro-MTj6J2J_= zd}}o=@5-nro#a>|Ra3(-!5SJZSvKESTK2~@s_DXjC zsFEy4Wq(6SaTOpMX-X1MnDLyVZm*0Vrso$YU4@ARPE1V0gm>lucRMVcXX+UU~ z1kJb(u1Wr5KscmaakRL*EmBn`MdBf_4iM4D`v`NTxQ$iih5#w1D!b^*oLWH)4sCN@ z6VUdu4D#r`=isfJv=K*5RVM&VAID`S54`fhz4U_*RbX*P<;E17ai2mnCVAl$QP~as zjPL^J3d8ihXKr4!mL{N^#)JysnM?Nr^dJggzZE?*pv$CZtEnfx&3@QdLRWy!pg`MZ z*=%&@w@98GVdpC^ZRj|ZJXel)+eq3WBe~@!AKgvQFN~#UQ9?z^;Rkm)8p6<3b%;gx3h|<%$bN*ma%8GfXJ{xNu9hQ$!oNPyU z0Dz9GIhHSCc5>}Jg1+ucp}nh6*B`%sFa41Cj9pa{Reg;il3a76AIk;86}aylhhr@0 zX}t)2rLv^d2AMMfI-jadK=)g#zJUIn|L|W=-16NLy4-|0bvgc8l$Fx}&2<>KJ%;-I zh*kxfD5NlT)JC0pEkH|31U-rDkmBK*INVN`hj!94^Fyj+svJTohcgN}B>;a?%FH;) zeev$FOE+9Q4+7A!ut8_CK`d`NU>*@0kwjb+y%<9XGrjJk*&^A)DNz;$#349(Ids1` z;38&O>vDmOTQZ8;R8}e$oPou(T_r>*ZE8yry0`#lv_tS@a%0>~OhjZ1}0|O`+@rFgC|2oB4&_q|erM4V{g9AFZ z?6unsK&t{M$)=(jL&{fErfjUc>o^3Uk$&UKs$NXn>H7Trbp6sf)tR16^D5*$Ls1j~ zdJ<~~If;^t?m0b>QZbl>#;sle9Yw@4?Z~d=64eLw;kLZ*HSAFJShPY?Vh)3{`9ERT zt@!i<1ax+y+@~F~LqsX~C=nq^y`g|3`qI3j-ZSs+s0Q`%q-@N1Un9b<)7g}zyas(h ztvnOx2s~4zun2GPW^7QXZe&7xGKQLe@=2EgeG-^s%k%;CZ%abAA-x=ctru>5z@V;T z4C3AK=ltKSNLk31fi!4Gv57`p2gh}eG4L5jVUlbwbuwyko$5WRd$DkTTj8ch>B;ls z>G6kD!CsxU&MEF=hCbKgt4GaANdY&t!Jqp0;vEx$9Diy?$?%(c$7n| z$m9B33ZS!)C{_*6MomL1Wza&zSIif#e~nkYWhxL>-;-V4uEdI>C-2~{tQm)zW14!t zrDjC0s|3N#z45e`3oN>jV|K)JV+8uan&Be1@UoN+XYW>GR;-! z>Ru~-|8D{4u3gc_dt%*s%~~asqxaH{!8Vnk2B;l3ZD2&e5{nU0V6jMHa?6jRG#MNM zK5gPu&GgbJflRVhKXP7~*k&C-=|$Dy;b0 z&876#lBmbN=!RpPkga-oX-~PrQWwUArkLcKxWsq&hL70JhRmTnwP>Y22VwczBd>(KU zmZMfCJeixOl;v_^^e{bhVM5V)ial0GEE?yG)0c#%m^LwW0nj`z!wQ*`zGzTD2h|7@ zT!+`RaI40O2jgyeR6r^0I(A0r+MQCZL9GKw1>Fq^-EYo4RK{SAFOon;y<%cEWG|0`Y8+`3i@8_Qah?KW^Uy;)}mbY!MrrlV9S!Bm^_4!(15 zBmGDSokthjWQ zLDMDi+P6%fSM7Psk4!n@N8T*_UXkhUYh*>S2NwAw+4NbaB9n}s9mv~)?i4Pazi?0q zZJk8yT!045MA%XF^z~aS=|}etRF6*Ga;fL+FOo8-EcgI)ZIOu?z%^*?~4ayjFJxcAm9x2iCLO($F{cIjgEa1uDbpUsd#0)^kilekB z+*F0duTJcy=N3|WUOf7W`f<}^j}loW?5@e#%JlZYw~t5B?<+LGN)Aem7M4ZN651om z;LLB&%ijQWzMt~FVIj(fKW~sskE-0k*zP5fH1Zs~M%`B_?0jDl0swkPy$cT%d$OkJ zx|iO&n_gZ%R<%%BH{=S$q(|(;uwr5Wb5Agp#?#o|WtT@W_?AaFTk<;RwTxu5fL$fP zP8DS3tFrBY7uzGS&%9(=AKL8z`&Eg{Jq8vTIjYjevW|+L41J3;cZM$B$=2V>*if_vM+sE*@0DXRFD?K7t_+#qQ z^u*=r(?}4k%d8dcaIS1C!wRLdFSNy8pnITpx+m@z25HxXdXkYmK9G&?0bAI zS}rLKnS0rOoNaBaJ9 z&PjJdZeXAvpu@S8KVSW*0X_%|XhQuT9H4_e*Aq-2Ke5x}@*Ga9W!wdYls=}K)0F6a zL;*{4D%VS0X@ZvEg;9&Ic@WlTOPu^Il!J|+KSDR?D?&)90c}8ba>r;?Drug(H&q44 zGgmf01+Y0Huqei5VX>Q2O3U>|C`jq*u5nG`k82r|$8DXYc|O)MwAjGQT^*@M%$BOL zex#byZ_3U6mMk1ghofovXe@2grjs%dG&Zt*J@$6bY;cmam}%Qgx8C5br)-IH8B8ko zNamB2!gdK=OedYU)6WjwCb`WBTX@J%OF3#ln~~alM-S>zS2Nv9(~70Oq#AjT2-J@) z&ZI}?$J2sJj7_SD_Xt)GNxrDK6BT}fE`UtN+iNlAo=eX{SCub{9DpvLEr8;^xn0MB zq#(d|hgwNxBp6_a54)bTPmI`DFKNN~y; z@f!pp?WzsM@`~CP3(W7_TT36hkKkBZ7kA#Fj3%9G6~7U-=VI~fTErGWd;F#X)j1ra zDT1R%u^$l7eSq7<&_I-<45qn%`q>D3Nct(8t{wa}w{82*?n{Q7BA{SrfhN)&o^ns_ zb5hpMtIqUeYE1Oph0%0%M&3ht5XTf?Kbng?*5QufIjfv66;JJz)EWAL|0>j|b9A(; z;9<#3l~5~w`T!e1e`9k51&Ql-p9r1f$d;4*6-A(U9R4_`LqyRPFcS?En@|cJ)kIZ| z>X3{Sz`S;tZr-8NzS4@? z*!?=0@pW)hbEXEdHMe5x1nF$twn^wVK=WFgIqzoyXa|sIKnEnu6#`_oK+q&obtNW` z(lfGrJab+WTakFA=2PpK0*@}%ZbI#J(Xc!iC`hL^)u)o>d0mQRkAGIg!`P+8h05I` znR&XGh`i zti5~ZAl=zeZD*qF^!Xi0^8?BdYb*rryX9Qg3|!o@i&9yMt$2I2#Tzvd>(?0aPXp*C zjp-+q2a?eJi2C0rK*##_$hS&*jA@}48UFShij)JZ}xC=Wm zJ;aqYeqOaPA5jar$Hk|gRPo2fd9_BPIVZhDL`_D?jf3lX5hMP%>56XNLw(d2Asv#u z`Fa5;(wQd?3|jyQe%E{1L@uIkg)gf8^*&AkbO_{%v=m^Mimvc{8XVD3etknd1=URH z*4@o?OOZ$)sX)w{as~GVG|CVhYYaRC%*9ljcQ$d~U6b7D5$u!x(Fi>1?d}k_d=j7w zMh20}JrepXfbOTU_S*m-8=&)o_W$1C)-;HmlI7#PN{c-tMe&+iUOc8MOqbQia7;yO z=!WGg_t{~Qi)FP){&F64S?)AFiJ?pw9ySpJoFAXabkUWX?OMsNZ>Y zoV++AP^-uIwM)uDoS#lJY6t|Mb(o}PnL_rX*38>kN3Vpgt);nt?B0R0VDHq<6UwdigwZ>p)!cDlQLl-5+Bc}J!>Duou)T)mxqg>v|X zWIdjf#j2lKH1M1)9e5i} zGgLcc9WaYx0A?wJcXp4Z1gfvNB=Z3UBXueTq@s&%04(@;D4RBj>NUbgJEQH+3TW#8 z^~9fa0lJ@I;Up^Cm%5%+LbplSvwC|5mC|k3_2jo6)4f-9e-#5;oj(*eJ)u&)bL02Z zC7D33%}u38FQ|#7+A`0n3m4^iM**{Fge@R;2*fp;EH?*_$7@j$GTzgV(B})ZWyag| z*!OcasQcSp0W+pS%A=u#-dFE#mARF}is^XUuzHjkKACbbCAH)}GoVk9zReZx3ur1Q4GOS+@B6p_-EZ@p1=O5k z(GEkPmXbKBKI3!Z)EAZI@~E6I*A&e3uq5`vwE7=XYg$sw?hbqCAh{XT4d7Mr4PA@f z57d@|#%K3b^F3{MS>6|*t`;v}!+-S!1wK)#0|o2v$_sdBZAYD{1mv|nf%zaU@7z~L z%CMa#2f8n+pC0QTgTa!^H8fY7!V`CQDQY$$j zpWAkArfc1tc|bt-#Ud$Kty9|O=Ie8nPZH3cwm$CE?%`$QkzaOc1YG25$vmOwjB*h# z&y1w23lpLsQ|Yn_d(SJfZE8XRO|n8*J2$BPg_Q&j+L2jyPU0<=j(+Ao=lAxR&$bMi z+NzzUboRm-F4c7c(EDm(ytTESmbcZ(b$KVcqnTtqRDofJq=b=)!T}a0TeniCt>cIeAKwEZitj1}8?s1v_;{V>O z0+-V)k3avjGis(>B-VsS4|Vv*2+6dUQecJ=FOAlFEursgE`RO-SjYC`GbuQJ7d{SD)_OUG-^Ok1xO0cJPKn zCxax=nm-poKwfYIPrYay6OBt-B?uIpzowRPAE}r42kKUPOID4$1R6;qudBYmo-Gtb zsUtq40Cl@fwK=xdgo2P!@vOjHgSuod zhL=&}&ha683S(Vg+epjniky>4?v|_?H>C_Nt2oTY(1a@MNBuo3cX^Ce1-|V0t2bA@ z+d}w<@6iIH${jo%&@~1+*QWrw1Ta;%+%;!|;;j|X4MFyg4$uWyOrW}h2+*=oj{s=J zdx(B4iiVuiu{*0SThmIm9ha?oN?GLeLmX1}OJsQ?oq1yZ>P;eT6AvL{OHmM{OfBy@i_ zdE2>;FzuFyp7F(9;HCZ)>} zX-H=PU4LimQP(z^J+B1_B6v0Eg%^s97TkV{pCH@BKvq%3ErEGgvDt?z26Ink2i{j0 z==)pB5mb==wmN|+{lK|_TqG!0RG<3SL*?53irUIC&=i%u z-(u%%;;(9re9}d`4c|Tf^8xL`XBjx}{dfQ!+_45UUAI&?U4VW2nd+)W$kL$nIroK`&NIo@~<1}(tKzy7Ep=gC#l~tuY#F(-MFD~oo`-m)Wo34c*#;LHG-D*LpVCZ>8wk$StL7dK?0dt-f1HR%WkRnI_i=zW2=3h}IJYoOd^f|M1_ zYF;y-ix7$RZ49)paB1FGd4DJ6XoV=ZT3!Ei5SMrK1+xW7eE(p8jyvt?175zUza;(1 zcHzmlSmJJq8JRgpv3zJp+TSO?#bYB@Jdy>L5@Z6U2 zw=cRu3*ZT5d;?}%Xq*Cta7ikvIG*0vJV>vs@26Yz4OGViC8Fu?8ncFAb&_(z`Yf~~ zY{H))pvy+?+CZ@lPPPm^ctBg4gw(OL@#)fEN}nuMALL(a35{fFN}C=D?bf@9%?QMy zP@z+bY)Bw(BLF=o)7@18`Gv))^wj)BnpDpb7T(o0X|b&5A%K>GcBpF@uzDcn3Dln! z9hsITWMWeN#%+%!Yete=z%NO&J`xSaQo?{b%@Kr8%=8XTF9EW81@5a!57!}XdQ9nB z6mRDztvPI)X43#@6;*s~V?Vtl@8B(Uc3qQ{-jl2QNQ$C+tJ4Qvd6YxS(1D_`yCRtB zlatUrw6Owr4QPY6%h>S10o{GUB8B@!Mm{;oi` zr|O-6c2bHX5}PMUvLxZ+X+&y|NxGJj5C)=y{z=UuMT;a_1s3UA0C`KGre8Qz1j&C+ zPX|hAyez-jdX~^f`ne%MzbrfS5AJRW(8pf=vXU+Hi6oBrnZD-lsVYvt%$m8P!bm!zW zd0q1_e!Ylg{lSae1aR?KSu#_LLNUT_{kstIa);7kxe_VBb>h_jv`!&{&>U)O6CmjTF5%@UZY z&2gl$St-;9$pjxQ@!5H?&Cwmw3P`g%Tw$Wf*-dfi?|-zKzI$s~t%_9!_jp3Di*m^N z;?4n?{_IPft7@*YbW}HcX3ixNY}F_j<-J|t_JQ2D=0`WUyMSFCn>B7aJ`sy}Wx8F?r&da8>GO0{36I!16^_Y|(Ld|ON{7#lNpc+GQA_jxJJ}Fk4 ztE&RCB&l9=iwIc|M)ibC(>--q7L6$Z`=aW3{L%|gq+fXUF##IoOq^D>-hKTHLk9Ne zV#(m%!Yy60Qp!<&KnX8NU_fYqySh>YIUy9H{1?=X_H?2Xm;kva>Up@*Qj|Ba@PN8B ztSEMj@IO0u6nLaA1%Lb22kHO4{(f2(hu%{U!DE^2u)a(w}xz9hlp=;{jiO#%E0qSO?hu_!0dfZmI@af*wYQGf=hCkl< z?cL++>nR*0&D`UK`*hni^Xom6;qkN$C}&*con0k+wgMV3a|}0t&HLPUPx6V9Sp@C~ z#5*dga;S`F%noA;;vZFVDhp}fh$8O}cehn{i;&Wzw5Udi|Mas@r>}nYDZv8CxvyaP z9al;6eP%$GZ5Db(^WJ0o(Z=lv+Tc&syr}3S)!pk}om&VM@SJ3qO2dQ}@hN#0p&sJW zqdZX%C1nprr_x`&@^<>>58p_4#G$cp97|CgR?V4w&_GRCZ^I)KKRR+CbZg zzj^Jw^v&GS6#mmT;PgX;pEs;ZH`?jj$3k>PYBR+3+nBt zxk2gmcNaisfJ18>sMKMl$q;Wy-XLdX8anAmE1)fS@xtX^E)0 zZ$WFgCc3FcOm;0RETIjE$VlM>rXAv=8>?zhtVlG>bkhR!oC1tUh9!WVNHX4h?0OY) zZ>#n4kfbS%hMv5#kbdcNPp2XQ_2wA39+Y zED&(H7LPj?yhE~ClJPwmOpR?(92?lTQ96T)L@f^#Jzl2(<-U}{@4R^{{lyR8OmBX; zlD4sMNP^QSX;Sx1xdh$1#u`fKvCMf#ipE=!BDp78MD4u!3ky2AsF;*FwWA9I+<>{Q zoNl*t#Q9Wl3vcF5P?z_Y)44P7slHl2A^6Dyy4swl(~o9LvreOXkz_S@ZcbcGa!gj~ zFI}1o0ct?JB_{-KVoYV{qyWv}(Q}oeko?EtS&*c~-n%6!t*8er^t3?o>|<9foj-T| zin?fV5=Q|-Ky2kNo7bQehX!@7wrR{}iCoq(d)jLD5SuO*x_A{s5ct*ja}5Js6Yh*8 z#?@XxZABJ)a(2kj3+1Kv?xer`(c9_ecWU!sOTTeo2#RKWq*sUIU{!4jJ1~dv^Wz&^Z zhCgpBaEB-6u6Zrcj7(_64H(l>GJhlqJ*>~qN&zQh!mexU&3!wdC2627#a?FHuWS-&4 z2DC)%h<+Mu^^_QFd$MS}rrz9t^YXjtyRW{dCP17*bp1*Kvm~?tJ*v}Z7#p6`t=J6F ze{g$eH?2tktZQRqi6H=MT%Q?%cT-nS&tcIQ$ARR{7L>4nOZT0RDC<#WI}RwJy8+!D zUeUxK03JBJv|mnPPrL?`nJa6yfxUVy(~m(15LnJT59>sk7%M>`5~6-`1`V4A5K|N! z#ZT_xL-9khwWlT~C7CDnQ=U7_Uw{T>5zxsiVT{pVPZD-_TM=tp8>So=6?F9F&pw;J z_}pVEMx$=DitQ*wz#}WZ2(FhU2@=|+zKYu#QyOCoziusyD^QmWTTAHZDP@LH8t~-@Uh!{_ZtdI==H`wU|(0Mr!Nna{v^ek^t*4R38KE zBpp9UUHy(-eMc6Mm9q*tqhN@t@9uW_p7?b^4))db?CQI(c)lv0XB)-R%3rglY zZf?4MI0@~brT%z>x&|!TsZ04=+uw%<1vD2qORI{0R86+i+h;NZ5Ko=UxdvVNCW7KLm%oI+i7=mBi+}6 zUQ$n%uYU2f=?l+3lCCaJ=o<3WRT3vJktsv{Fb%PiNE`+~u`x#vZJ!>1v`}dNRp|iL zixtJNH<9}#JxT*F-bJeD`|55th8@JN`{_F3il`T;yEFhYXDH#?CHte#aStr%$xwSU&;uum0i}(`P?*C0&^# zPFmbD!_9Y)HPW7-9{!jW#Hb|)Mafdy7LIt7LNNY!RvOFNnGcqe&nJ{EX>mFgidS|+ zW5H3_4#bD=?u@1%zI8kO>7V~qT3Xu@m}LopZqTO@37Y$(o7Yx=&WQ@;*7QBN^l8Sq zr_;+P8Fo9BMJRz#G!a5FW3xW?PZ1a_F4Wz2`@G(wG|hW#f-rfqGAsZ99S2E7K~!7Q zyWks()kI8F0uSc<(6~Py2_0<~8fs4O;PcP{iF@aX>tafSKJ4$odsQHYe%%~#*=fS@ zW^bB`!?-q_q}s94_W?mE+M4yg45p%R6?0&?v*D9R^3?6iw0ERMyeL5b`q%zRdf~~% zv@j+5B0zg%R2)92PYC!TYV&KEUw9umMT!RTY|boMy|Iwc@wo!(@_W1-rn#_?MO<|J zo|AktZ>>*=SonPbdj0rZdilmu`jh|pf6|?$HO-A&<})R(y&Xn?hve9Uj~`^LdkOXzZ9Fu3Ak3BXn`uQ^hEIv8v?JMtg> z@t8aQi-g`DnM<$UT1)@^fBadxb!XY&npH9aWj zQc2uVy_fkX9%UGv1jSTBL?p{ihgR0by(NGqaHo%}7l^C>!_Vt=w?fy{_VYNp-73B- zf36!dvE#aN{!;=v?5k06J{Gxrb%!^rV>tETVw@S^EDG*mAESgrN}>r^#{x7?kXfSE zq|`B~VXwq)9L2*?!uItOcQmSAa8$2G@bCg?Pg(#vZ?70{B`6RFx*n&2xb%6MtiJy1 zznY$ZWIoN_->`&sB~N?NkaC<7gm~&S&`-OvIXQ~$HWQq@cd9jMu4B-ZBDrH5bOh$) zBOs_j88!H;gNcfnlb|ZDwJ$5g&gi_F&Tpna`O`m7?|*n#z#2E8nVf(qGBeA~G6}); zsx^#xisabL{=I3TdxWo6Ei?pXQqi!Wum)>NK3JFe56jB^aaHb-D;|ZkoHk{<+Ch_J zUjSmL1f5db|6&;npaUKOHpbWDh&hu|7*oz86H@)wJSLjg54&It5CKpu1l7W1Fo#JC zp8#elb~2TJWargx9~IrWtoqH9vQl_@jnM*Rz#LvW$4)dRKUO6G5M^;QH3-O5(xG$j zhY|{x-j_FVPF0hB=bwKqeOj%R=Z`m3j7Hu;%zGRTy5@+?T;}kiLc`iz0GdTUR&~cP zW9g zZr%1c&S`@-#7PEp%u&hYZpy*qyqFzpsyB33rQ`22qBFCqU4k-+fWiE?v>{6q6`91} z;n>~)raR@7j36$r9jB=UTCeN7p1W8?Kpe&y+`MtE(;j^}boIg7)WDvtuh-C!q9J5? zSOv4>4SQE@uJSuH!f3H3xgm;iMBtFXGB5k*0^Ti63di3rbU+|35o1^o%I+<`sE(tJ z#V(^@KJsu%m7{Jzb7JtGJt?5)5S(-P#dvHMK(dD@=3meW2l&yN+p=jo32Z zZr;A<4TwT$T{SC6ceXCmo)577~4SF7&G-%kZ}b^k@=m!AdDMKTu1#Pkys<1{Asmd3VB+;4dO z9mWXPzBqzYR>r8*2W?!)eI?juL5c@bJnYlBN@Z`;ai8YV-S zFV+tei~wR$4*hOfIb>jbcWEnq_w}3UTR(c0z2>YL+HDvtMae3PWSrkMX1I<~*8eE? zj5YW!uJ;K=^PN+06R|FvifG)HE&m9M6ExBU87ZB4uLWGt5OgObI8O@;1G{`T_gD~Z zNzxo@HRf^(_f-nd256tb`Ql+WX40^^`}YhK6fWC80W1!Y+@1l7!CjDpN2x6`I#4>W z2_GmHV?jB3llmK<*}_JQL~JZ#y?y%wx`T$W85&!;lG2$!vjI?6jug{Dp#N7t_iXx= zpZj#0R~xty0Xj|^4Z$thXn-T>;sAX$f7f+gDh$tDHmk)FHBPGnhB$9ed=!1d%WKn& zej~xvVu5kyK%op6z`lKWKYjbvchleg_>FW|)suJ)n=o{UM*y*GOMa~f;aBsYZP(9# zs+51`Ca0R!I#QfgxaDb2w<#~}E|g7XPnn4ZkWVL7S1@E4;!@XK6K6C#&Hyz zHty4-&LSiO-9KV*wWb!QcH84r30;4Py^(F0UZ9Y2&ee+udjoS<)`~;jBt4}G)5KzN z&ft}8lXNBho0#N~(i*Kkw<9obDh`88Yu?Y3=(b4jZyk0lc;iw2Wf!eCLgeICUaD$Z z;zJfpC@F-65=y$em7aOzQu^`>Pp9Xeyq3-pKdpNl$0e=zjAj?|5s`WVKcB^vg}01T z1W>Su+*ey$>29Y??_Gt2W@^c>0c|cphVrT3h25Ne4q(Uq`_1LG^cUa$VfwCOqDK_t zJSOSPbP*j`8hh5?6BFr^JWEGQNZkivvM6|D%Zxibm5di^=taUWa}_$`BUNLuc0nhh{BFS=+^NLmg`pDA*XXYK_Y}GAxQ>lIoUt5e$Wi*4rA& zha@SFeq1B}{Y-$aqrL;sI70x#zQAy(aLgm|QLG13x;d!B7-|1QSm5JC{lV4+?jiw)v0>^!Ufx^gUu9EDS|hoIVbL} zHVxmkkBc3lKoSN|))n9rlUSIY&~PZd2T8_s#hG8R|W)hAi?HOX4d95 zff=Q4cQfs%r0cPc?Qt#ei~`FS&tFJ$Ds~91@JVA_mUN|vdx(D5`rXGr8P)PYi8r&8 z$)m$Gggd+a(FkD5(U6C23}6h&NHR`&H(gY1~e8Q zuH~2~B&OO)(1LAU;h*o^yq&)JH{VG&K3Y=9sP0(}?iovw&{Ygb&(4bRv5}FO+X5%f z6VpGEdwqIFZX|#Pl&(9Hh0ueNL1DNo>i*?u>BDIKHwi(noz{QQOcC_0a$KB`Ma3{E}^R zPLnkys|OOd_t7Guk@Uo8=xLfGDc^1DtU(qvMyiy4EDIXT-sYNsy_=qT_)7ZP&wnL- z`uY>fHx#8(w)il`XBvQxBv(-qP9I7IpcLgmC?70&&;`U5m^tzrH&l7j^9K+bdzxb& z69!7q8IwB!nyi#}KD?K{^YZKI<+t8TTZ*?B6A*@w=H~O+dXT@zm+ja|Az0wLd(_9% zPX~7aJOSI1ICB#2k8AQ80tgf5rfkm4@wDc5Mp23rq78fjx{%Gfjh)Qt68DhXK-)IW zdYhd1gxIGqjIO<{dtToZEy1!SkK^?0ynZmRSdt*NK|u<4?#rRS{`-I2d8Q-9igxTt z3FQwv?Cz$jUv6x;7|M`letJq7Au5kGdv08ull(YbrdScOo0?=$AM15{v)Y^#-XqU9 z5&=a)-@C1ABdM9_IZ0`xz#xFeasl_;5q01@ks8#?=mmA=cT7;GGnT5l%R{AP?W!97 zr1Ebl=p%w`>VK?m>qf3NND;FDmRa~6MY}%D~@`C@a+iVnE~z7pn<1w`gCgV z+4tbUDpu@R76&K?K(7Fe6GO^4;iAhb%=q1x-w=0x$zUFxq(Z8aW34=QZKHgDm5V!{ zN=_}yK}eivP(t(#K3-0=*zh$ysn$jJj2`4VB+wHj2zZVw#j?_7EScF1Y|0^7N8r=L zSigA6Y-FnxLQk{5D`1oJxFcZi9>^r=%yxYqol2W$i1`JLF->8X?AWUzMuz@%1?ZT1 z=k#Set#=dUsYn>5qK_0eYODd;S$U%tmA-Rc8txb#GbV^k4yXDsAnH%#U?2}71IWil zEx!CK-lc5H!(_K5Q_z}HsmRut(f3SB*{OlqBlBWY_qnsWoSuF3O8W9=o=u;7`tfvrN|HuWMUdBNgM~x)CR5e^t|*Si$oPmo z=03cE5dfLqcx(WJpBP~oXQ4j+?hJYWMDhTcF<4bdxzfqUeZx2R1n6}YW_<14Tj{TV z_*(jrvb`tgR2fyKPVx&w35$u1YqI!tVIW=uq)>$|Q3ez@3Q-cN=s+(h4JV8dQ#qhL zvwUW4ZB6U4t@#{J^Yfw^R#;0Wy-o&OxSD5RHbXKN+w%R3$A%FBLyQv{uw9F?xi~u~ zfdur9HuS3MUlXIvSv5xcJ$kh3y%fm|8seF(Or24NSpWXr-~Vs|#kFY{Y2x zM|)doM?ol?q5}8#k0p(#)5S$ar72!uf<@E=+bs6vqL^7ynKNbJ#xll#Gq}rN;z$gT zMygHZ@}VSRi{>wj`aX>L1=Ph=+q`;F#;jm!L!h{DZKU*+Idxb(3hiM5y?CDF?B&x@ zhs}I*Who8quBT_OUQWOImCvWAuU$^_Q(8dH$>D+W5QWe~N&~2ZKJ+TGL*!`4M1dR`46@w`3UD9Ez~C1tW|FD20IA`I4HP9aYSMU$1NPVdrMkj?0oW zDqtJbc84P@_*NA5Y?S@oZ~U>WD-Kxn)3OwWM-_!o^wyR?OxvqVX-Z#s>B7ZyVPR2J z18%Fu=jauH;Ku=AKAUe0e%yVF4Hswy#xC_g<|jbCva(_Y1m$S);-ZhnQuV0v`sEAR zf}$rU101g`9OH5wI&DBNa+c2dR^!td(1bvu^B&0bxVdyI%?=-?7oT}D{j*>Ga(d#* zqReuXjV0rLe}Gtg@yu&ndpJ}q6Z6+l-UzDuh5{>`hy z(H51SNINS^ws^bn1+ec53p75O6t|u{H|Nr3%yR*>J-^8AuYco@xP>Z+$8Qi&4<(tm z)|W*ymZTJ^wXgtnaq*%WRZd%`VCy6`9urZa5KW>UzXwOosIgr#-rKx&Z?nexBD;gl z0dJ%FCK3XP1#e?9MssVj=KQ&27M?1&G*NljJ_Qcw2MaetA}C?0+4C5ltSq4!5t0+< zg*Ut$JFEB7;nu2}2u-A4{?d!-^Uq&TkE*3I{SL>pcn2C2V{?5w16mddd&;s~x1t_jjvOc-syWcH>OxOS zu#Bpt?+Crht7!0;O2+}07>x|}v*AWWqx0S!=*X@7G6EJ$zJIk%U`?qeGN`YgF9^am=9yag>{8FS=Crp(BZ^E2$3C~ znzq!2s#eZ)ko+6pD18cpk03aX_QfMNlor3XBJQX*4T=}Oa`BRPDfe<9bB@#cT_>(6 z5}muYO$!ZrR^I0`GS5kKGU9c1E)xf+SE*Vr3W6pMfAhpT-nY43Vq#*xBB~2%&F7u2 zr3at}c%~;My{U1HDDf3%)jra4V^x%E)2)=h^5XO93(s9w0>Fq)EB3rhUefq6F#>43 zpXTZr&^3n!*+dqWYX5+mBN974P3>j7##<@S9VnFb0LzJ_Gr>Mvq8Yd40sO&hZ>8_Q zD#@%qgvWBKAf=`hgN&mi0(Zh(Rt|YjjP3)ab)T}lngamJ_~v9chBBCb5%~uAGeG$} zv=NES20${#XJ##(9fsgF?3Tq%Xm|b|=EGR(`g3)-Rf*>aj-C0oz6Tq8amJPEQFnAo z5eT&-{EaI>YDxwJ!Vkhq7GCS2U;oB`mL3?3i0KM9@1`im#`3*1Ez8BjY9V~({CR7^ zOu()@J!s+Vb{-+|8k1Qd+UKUx;^T2LpnYvjRvHhJ3;lo_b0l54{IF?6iSwwZkZWdR zyw_CJfCXZ4aHVVESj<^XL^v&)!B%>|0UZ+qmnIc#PgakE?X~pu)hp?XpME-h>e`ib zep=E4+o(45xB)GXm#iIV^VO!x5;`<RP|hggUG!ZCSRe4X>Nr(C zdb+F5RW58#xdK#VC&_TXlEQ%*qEmx`vvX3Vk92?wB2 z4tYCfwI-mMFQhpN`G)3;??8C)8Cu;H4`6@z_Wq>}&{cf4-d+IB`&>v8+Nvi4$3BHp zScd}d+Mr8P7H{2CCj*Ut+(qbT0@QpK()??`_lIQH2+Y#WWs2I>G0Gy2YLc%kUPzZz zT?g|V5*dU4zIF$|1{`4_C}8g8Ro%De$@USKx9kZLIyOsO6F$8mb0OxueJKl*QVgu@ z>FA-HRWUV%fUW^uHXOCx_$-Ud$Ta1i@INNSiXbdnk%z-QGCYsYI{Cu$O+xjb)gyA zF3(9q3ai+RsEl>g%QB%#qbB`L7Mt}oqH zIOnl~?dQ{F0eYH7IrcWJ#;<_Aw|>?#Wz+ z#G$DVz_x204LQ4Xo3`%aF~mN-VNR%ecKSM`G*aFst4dO5RTH4Vryb{k2XRBE*1a?; zh4A^OuBOjOQM|6gG#BQixQRYEa!-?Q;9$ZN;B3c@wF{c%g$6JsWkNO$}qWc*NLv`A#jc3p0u`?1?fVbl{>h zl48sg_gYMOj(p6Um*P3NvI#xdmT3+UVgWhtevQ$Dv~b_%N)3YT4nUU=APhSQW1lO* zMD?c;ZCFZFj4OA3vL6w*x8ZKUnYP~`Bw(gOF140phMv1|3o1~_#L3eV}+z)p%z4mkR%xT zd4wyS1Phla%*xEm`(O{%v;Ln84J=4*N+j<8PCO( zR5lkBf`vmW;nX-UP%kW;H}5j2eH>F(ppLI#?0h~7j7tH_!9+--Nt+^>tf<8tX-;|~ zeQl4I5~#v7+j9Aj$_0L1w&|~a@rCsC;}4}7+`l-JG*7gTnACO5&XF*gUJzd$&O9t0 z5mknV4E4|rFbw8RIZb|?zAc(@V`)`R1u10Wuv3cD7$;v3>XI9Mx=5R}E zqvM!@e&8^nRtYB*r-uu}=>2S7P7iF+=oM?C7|aKt2QVnkP%>gW!h+Db*q^9`=G*=C z!LKKz(^0PvZck|KicZ{jm3FqH2&c&zQDZrohJN$k{HOa{N=e_6d2UE?3|Akzm@Z#X zV353ju1rK|AwGQtkGMvI9@&K2K=sEAXx~%N562G1FFh1f($fE8h+8pd^fA zK&;6JUu02Blo{3;q_jUP0Ps42@e?uyjjMgb7`#nT!|n{^2$3NPfWWB@nT~dM)>J<1 zI6eRP#q{MDpG{9aeoaLoXI%AEv*Z#0-t+`V(b)ZSzdY2C{tP6rZEU00pa;4ObV9CnPMR^z%bu)2AKqJ) zloob1m$UQd)dlO{{=xlwcW=uRxRe%DrSRHAmn5APhNu#(UT}_XP2LD~huysKX9Vah zso{Nxm<_SG2te3^k<@HHK#Ziu&I*;_xUAwuFy2>YJ**#be-2U?xRK1~X4Q{SM;F05 zl++zl>;~RJcrF!_lgx^v^3g?}@9|9FH+fYzWc6y_f#_2R}&v_d7pGH)Lntn@~7`94EAsn~?T5fzyGlr3E~u zWgFWKfJ-6VkmF-r{sQO~(wEH)&6reR4<^Mh&*?14dIIybB-2-km*F#odRY(<Qf+d?yGe3D2f9@alKC+!m#!y*o zNJ!CF$g;3p=1%M;@a#IrBac_ z>q{Ivaf)^KkKpEW7@1J*J9yL@$8cM`!Nt?3c;UGbY;lNu++ptWA0p&4aO)j}CW~rS z`0}f7*t+{kraNxW3H8{kAKHYtFnmME;L2tCZr;T3wkKZ@Who_zMiV#A#4yyM2oc|^we9Q2vE{pio0KFMP7V=cYBiJdRav% zU8&6R{;ySug$=WNgpfDC_XWkLS5M?-Pmdakq=O5eF1?4F3T;{b>B@m^>H&0000< KMNUMnLSTYoHngw+ literal 0 HcmV?d00001 diff --git a/apps/web/public/favicon-32x32.png b/apps/web/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..b50a18034dc3290b1b84ef62af6e32593c7d9aba GIT binary patch literal 2763 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 E0@L1&?EnA( literal 0 HcmV?d00001 diff --git a/apps/web/public/manifest.json b/apps/web/public/manifest.json new file mode 100644 index 0000000..e97f85e --- /dev/null +++ b/apps/web/public/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "Prisma UML Viewer", + "short_name": "Prisma UML", + "description": "A online tool to visualize and explore your Prisma schema as an interactive ERD diagram.", + "theme_color": "#2563eb", + "background_color": "#09090b", + "display": "standalone", + "start_url": "/", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/apps/web/public/robots.txt b/apps/web/public/robots.txt new file mode 100644 index 0000000..3fb6894 --- /dev/null +++ b/apps/web/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://prisma.jessy-david.dev/sitemap.xml diff --git a/apps/web/src/app/api/export/route.ts b/apps/web/src/app/api/export/route.ts new file mode 100644 index 0000000..de0cb1f --- /dev/null +++ b/apps/web/src/app/api/export/route.ts @@ -0,0 +1,46 @@ +// Export endpoint - converts Prisma schema to various diagram formats + +import { NextRequest, NextResponse } from 'next/server'; +import { parsePrismaSchema, toMermaid, toPlantUML, toDBML } from '@prisma-uml/parser'; +import { z } from 'zod'; + +const requestSchema = z.object({ + schema: z.string().min(1, 'Schema is required'), + format: z.enum(['mermaid', 'plantuml', 'dbml']), +}); + +// map format names to renderer functions +const renderers = { + mermaid: toMermaid, + plantuml: toPlantUML, + dbml: toDBML, +} as const; + +type ExportFormat = keyof typeof renderers; + +export async function POST(req: NextRequest) { + try { + const body = await req.json(); + const { schema, format } = requestSchema.parse(body); + + // first parse the schema, then render to requested format + const parsed = await parsePrismaSchema(schema); + const render = renderers[format as ExportFormat]; + const output = render(parsed); + + return NextResponse.json({ success: true, output, format }); + } catch (error) { + if (error instanceof z.ZodError) { + return NextResponse.json( + { success: false, message: 'Validation error', errors: error.errors }, + { status: 400 } + ); + } + + if (error instanceof Error) { + return NextResponse.json({ success: false, message: error.message }, { status: 500 }); + } + + return NextResponse.json({ success: false, message: 'Internal server error' }, { status: 500 }); + } +} diff --git a/apps/web/src/app/api/parse/route.ts b/apps/web/src/app/api/parse/route.ts new file mode 100644 index 0000000..a1c3a05 --- /dev/null +++ b/apps/web/src/app/api/parse/route.ts @@ -0,0 +1,53 @@ +/** + * API endpoint to parse Prisma schemas + * Returns a structured representation of the schema for visualization + */ + +import { NextRequest, NextResponse } from 'next/server'; +import { parsePrismaSchema, validatePrismaSchema } from '@prisma-uml/parser'; +import { z } from 'zod'; + +// validate incoming request body +const requestSchema = z.object({ + schema: z.string().min(1, 'Schema is required'), + version: z.enum(['5', '6', '7']).optional(), +}); + +export async function POST(req: NextRequest) { + try { + const body = await req.json(); + const { schema, version } = requestSchema.parse(body); + + // quick validation before parsing + const validation = validatePrismaSchema(schema); + if (!validation.valid) { + return NextResponse.json( + { success: false, message: 'Invalid schema', errors: validation.errors }, + { status: 422 } + ); + } + + // parse the schema - version is auto-detected if not specified + const parsedSchema = await parsePrismaSchema(schema, { + version: version ? (parseInt(version) as 5 | 6 | 7) : undefined, + }); + + return NextResponse.json({ success: true, data: parsedSchema }); + } catch (error) { + // handle validation errors from zod + if (error instanceof z.ZodError) { + return NextResponse.json( + { success: false, message: 'Validation error', errors: error.errors }, + { status: 400 } + ); + } + + // handle parsing errors + if (error instanceof Error) { + return NextResponse.json({ success: false, message: error.message }, { status: 422 }); + } + + // something unexpected happened + return NextResponse.json({ success: false, message: 'Internal server error' }, { status: 500 }); + } +} diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css new file mode 100644 index 0000000..872886d --- /dev/null +++ b/apps/web/src/app/globals.css @@ -0,0 +1,42 @@ +@import 'tailwindcss'; + +@theme { + --font-sans: var(--font-ibm-plex-sans), ui-sans-serif, system-ui, sans-serif; +} + +/* React Flow Controls - Dark Theme */ +.react-flow__controls { + background-color: #27272a !important; + border: 1px solid #3f3f46 !important; + border-radius: 8px !important; + box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.3) !important; +} + +.react-flow__controls-button { + background-color: #27272a !important; + border: none !important; + border-bottom: 1px solid #3f3f46 !important; + fill: #a1a1aa !important; + color: #a1a1aa !important; +} + +.react-flow__controls-button:hover { + background-color: #3f3f46 !important; + fill: #ffffff !important; + color: #ffffff !important; +} + +.react-flow__controls-button:last-child { + border-bottom: none !important; +} + +.react-flow__controls-button svg { + fill: currentColor !important; +} + +/* MiniMap - Dark Theme */ +.react-flow__minimap { + background-color: #18181b !important; + border: 1px solid #3f3f46 !important; + border-radius: 8px !important; +} diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx new file mode 100644 index 0000000..4ec2ae5 --- /dev/null +++ b/apps/web/src/app/layout.tsx @@ -0,0 +1,89 @@ +import type { Metadata } from 'next'; +import { IBM_Plex_Sans } from 'next/font/google'; +import './globals.css'; + +const ibmPlexSans = IBM_Plex_Sans({ + subsets: ['latin'], + weight: ['300', '400', '500', '600', '700'], + variable: '--font-ibm-plex-sans', +}); + +export const metadata: Metadata = { + title: { + default: 'Prisma UML Viewer', + template: '%s | Prisma UML Viewer', + }, + description: + 'A online tool to visualize and explore your Prisma schema as an interactive ERD diagram.', + keywords: [ + 'prisma', + 'uml', + 'erd', + 'diagram', + 'database', + 'schema', + 'visualization', + 'prisma schema', + 'database diagram', + 'entity relationship diagram', + 'prisma viewer', + 'schema visualization', + 'prisma 7', + 'prisma 6', + 'prisma 5', + ], + authors: [{ name: 'Jessy DAVID', url: 'https://jessy-david.dev' }], + creator: 'Jessy DAVID', + publisher: 'Jessy DAVID', + metadataBase: new URL('https://prisma.jessy-david.dev'), + alternates: { + canonical: '/', + }, + icons: { + icon: [ + { url: '/favicon-16x16.png', sizes: '16x16', type: 'image/png' }, + { url: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, + ], + apple: '/apple-touch-icon.png', + shortcut: '/favicon.ico', + }, + manifest: '/manifest.json', + openGraph: { + title: 'Prisma UML Viewer', + description: + ' A online tool to visualize and explore your Prisma schema as an interactive ERD diagram. ', + type: 'website', + locale: 'en_US', + url: 'https://prisma.jessy-david.dev', + siteName: 'Prisma UML Viewer', + }, + twitter: { + card: 'summary_large_image', + title: 'Prisma UML Viewer', + description: 'Visualize your Prisma schemas as interactive UML/ERD diagrams', + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + 'max-video-preview': -1, + 'max-image-preview': 'large', + 'max-snippet': -1, + }, + }, + category: 'technology', +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + {children} + + ); +} diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx new file mode 100644 index 0000000..437b421 --- /dev/null +++ b/apps/web/src/app/page.tsx @@ -0,0 +1,115 @@ +'use client'; + +// Main page component +import { useState, useCallback } from 'react'; +import { SchemaEditor } from '@/components/schema-editor'; +import { UMLDiagram } from '@/components/uml-diagram'; +import { DiagramControls } from '@/components/diagram-controls'; +import { ExportButtons } from '@/components/export-buttons'; +import { Header } from '@/components/header'; +import { Footer } from '@/components/footer'; +import type { PrismaSchema } from '@prisma-uml/parser'; + +// I went with 40% for the editor panel, feels like a good balance +const DEFAULT_PANEL_SIZE = 40; +const MIN_PANEL = 20; +const MAX_PANEL = 80; + +export default function HomePage() { + const [schema, setSchema] = useState(null); + const [rawSchema, setRawSchema] = useState(''); + const [error, setError] = useState(null); + const [panelSize, setPanelSize] = useState(DEFAULT_PANEL_SIZE); + const [isResizing, setIsResizing] = useState(false); + + // when parsing succeeds, update both the parsed schema and raw text + const handleSchemaChange = useCallback((parsedSchema: PrismaSchema, raw: string) => { + setSchema(parsedSchema); + setRawSchema(raw); + setError(null); // clear any previous errors + }, []); + + // if there's an error, we still want to show it but clear the diagram + const handleError = useCallback((errorMessage: string | null) => { + setError(errorMessage); + if (errorMessage) setSchema(null); + }, []); + + const handleMouseDown = useCallback(() => { + setIsResizing(true); + }, []); + + const handleMouseUp = useCallback(() => { + setIsResizing(false); + }, []); + + // drag handler for the resizable divider + const handleMouseMove = useCallback( + (e: React.MouseEvent) => { + if (!isResizing) return; + + const container = e.currentTarget as HTMLElement; + const rect = container.getBoundingClientRect(); + const percentage = ((e.clientX - rect.left) / rect.width) * 100; + + // clamp to reasonable bounds so panels don't get too small + const clamped = Math.min(Math.max(percentage, MIN_PANEL), MAX_PANEL); + setPanelSize(clamped); + }, + [isResizing] + ); + + return ( +

+
+ +
+ +
+ {/* Editor Panel */} +
+
+

Prisma Schema

+
+
+ +
+
+ + {/* Resizer */} +
+ + {/* Diagram Panel */} +
+ + + {error ? ( +
+
+

Parsing Error

+

{error}

+
+
+ ) : ( + + )} +
+
+ +
+
+ ); +} diff --git a/apps/web/src/components/diagram-controls.tsx b/apps/web/src/components/diagram-controls.tsx new file mode 100644 index 0000000..35140a4 --- /dev/null +++ b/apps/web/src/components/diagram-controls.tsx @@ -0,0 +1,51 @@ +'use client'; + +// Toolbar above the diagram showing schema stats + +import type { PrismaSchema } from '@prisma-uml/parser'; +import { CubeIcon, RectangleStackIcon, CircleStackIcon } from '@heroicons/react/24/outline'; + +interface DiagramControlsProps { + schema: PrismaSchema | null; +} + +export function DiagramControls({ schema }: DiagramControlsProps) { + // show a minimal bar when no schema is loaded + if (!schema) { + return ( +
+
+ UML Diagram +
+
+ ); + } + + return ( +
+
+
+

UML Diagram

+
+ + + Prisma {schema.version} + +
+ +
+ + + {schema.models.length} models + + {schema.enums.length > 0 && ( + + + {schema.enums.length} enums + + )} +
+
+
+ ); +} diff --git a/apps/web/src/components/export-buttons.tsx b/apps/web/src/components/export-buttons.tsx new file mode 100644 index 0000000..af0324e --- /dev/null +++ b/apps/web/src/components/export-buttons.tsx @@ -0,0 +1,191 @@ +'use client'; + +import { useState, useCallback } from 'react'; +import type { PrismaSchema } from '@prisma-uml/parser'; +import { + ArrowDownTrayIcon, + DocumentDuplicateIcon, + CheckIcon, + PhotoIcon, +} from '@heroicons/react/24/outline'; +import { useExportImage, type ImageFormat } from '@/hooks/use-export-image'; + +type ExportFormat = 'mermaid' | 'plantuml' | 'dbml'; + +interface ExportButtonsProps { + schema: PrismaSchema | null; + rawSchema: string; +} + +export function ExportButtons({ schema, rawSchema }: ExportButtonsProps) { + const [isExporting, setIsExporting] = useState(false); + const [copiedFormat, setCopiedFormat] = useState(null); + const [showDropdown, setShowDropdown] = useState(false); + const { downloadImage } = useExportImage(); + + const exportAs = useCallback( + async (format: ExportFormat) => { + if (!rawSchema) return; + + setIsExporting(true); + try { + const response = await fetch('/api/export', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ schema: rawSchema, format }), + }); + + const result = await response.json(); + + if (result.success) { + await navigator.clipboard.writeText(result.output); + setCopiedFormat(format); + setTimeout(() => setCopiedFormat(null), 2000); + } + } catch (error) { + console.error('Export failed:', error); + } finally { + setIsExporting(false); + setShowDropdown(false); + } + }, + [rawSchema] + ); + + const downloadAs = useCallback( + async (format: ExportFormat) => { + if (!rawSchema) return; + + setIsExporting(true); + try { + const response = await fetch('/api/export', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ schema: rawSchema, format }), + }); + + const result = await response.json(); + + if (result.success) { + const extensions: Record = { + mermaid: 'mmd', + plantuml: 'puml', + dbml: 'dbml', + }; + + const blob = new Blob([result.output], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `schema.${extensions[format]}`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + } + } catch (error) { + console.error('Download failed:', error); + } finally { + setIsExporting(false); + setShowDropdown(false); + } + }, + [rawSchema] + ); + + const downloadImageAs = useCallback( + async (format: ImageFormat) => { + setIsExporting(true); + try { + await downloadImage({ + format, + filename: 'prisma-diagram', + backgroundColor: '#18181b', + }); + } catch (error) { + console.error('Image export failed:', error); + } finally { + setIsExporting(false); + setShowDropdown(false); + } + }, + [downloadImage] + ); + + if (!schema) { + return null; + } + + return ( +
+ + + {showDropdown && ( + <> +
setShowDropdown(false)} /> +
+
+

Copy to clipboard

+ {(['mermaid', 'plantuml', 'dbml'] as ExportFormat[]).map((format) => ( + + ))} +
+ +
+

Download Code

+ {(['mermaid', 'plantuml', 'dbml'] as ExportFormat[]).map((format) => ( + + ))} +
+ +
+

Download Image

+ {(['png', 'svg', 'jpeg'] as ImageFormat[]).map((format) => ( + + ))} +
+
+ + )} +
+ ); +} diff --git a/apps/web/src/components/footer.tsx b/apps/web/src/components/footer.tsx new file mode 100644 index 0000000..80638aa --- /dev/null +++ b/apps/web/src/components/footer.tsx @@ -0,0 +1,40 @@ +// Simple footer with GitHub link and credits + +import { SiGithub } from '@icons-pack/react-simple-icons'; +import packageJson from '../../package.json'; + +export function Footer() { + return ( + + ); +} diff --git a/apps/web/src/components/header.tsx b/apps/web/src/components/header.tsx new file mode 100644 index 0000000..5c56768 --- /dev/null +++ b/apps/web/src/components/header.tsx @@ -0,0 +1,41 @@ +// Site header with branding and nav links + +import type { ReactNode } from 'react'; +import { SiPrisma } from '@icons-pack/react-simple-icons'; + +interface HeaderProps { + children?: ReactNode; +} + +export function Header({ children }: HeaderProps) { + return ( +
+ {/* logo + title */} +
+
+ +

Prisma UML Viewer

+
+
+ + v5/v6/v7 + + beta +
+
+ + {/* right side: docs link + export buttons */} + +
+ ); +} diff --git a/apps/web/src/components/index.ts b/apps/web/src/components/index.ts new file mode 100644 index 0000000..2d2784c --- /dev/null +++ b/apps/web/src/components/index.ts @@ -0,0 +1,6 @@ +export { SchemaEditor } from './schema-editor'; +export { UMLDiagram } from './uml-diagram'; +export { DiagramControls } from './diagram-controls'; +export { ExportButtons } from './export-buttons'; +export { Header } from './header'; +export { Footer } from './footer'; diff --git a/apps/web/src/components/nodes/enum-node.tsx b/apps/web/src/components/nodes/enum-node.tsx new file mode 100644 index 0000000..917298d --- /dev/null +++ b/apps/web/src/components/nodes/enum-node.tsx @@ -0,0 +1,67 @@ +'use client'; + +// ReactFlow node for Prisma enums +// Purple theme to distinguish from models (blue) + +import { memo } from 'react'; +import { Handle, Position } from '@xyflow/react'; +import type { NodeProps, Node } from '@xyflow/react'; +import type { PrismaEnum } from '@prisma-uml/parser'; + +type EnumNodeData = { enum: PrismaEnum }; +type EnumNodeType = Node; + +export const EnumNode = memo(function EnumNode({ data }: NodeProps) { + const enumDef = data.enum; + const values = enumDef.values; + + return ( +
+
+
+ {enumDef.name} + + enum + +
+ +
+ {enumDef.values.map((value, index) => ( +
+
+ {index} + {value.name} +
+ {value.dbName && ( + + @map("{value.dbName}") + + )} +
+ ))} +
+ + {enumDef.documentation && ( +
+ {enumDef.documentation} +
+ )} + + + +
+ ); +}); diff --git a/apps/web/src/components/nodes/index.ts b/apps/web/src/components/nodes/index.ts new file mode 100644 index 0000000..d4a0e1e --- /dev/null +++ b/apps/web/src/components/nodes/index.ts @@ -0,0 +1,2 @@ +export { ModelNode } from './model-node'; +export { EnumNode } from './enum-node'; diff --git a/apps/web/src/components/nodes/model-node.tsx b/apps/web/src/components/nodes/model-node.tsx new file mode 100644 index 0000000..9e73344 --- /dev/null +++ b/apps/web/src/components/nodes/model-node.tsx @@ -0,0 +1,113 @@ +'use client'; + +// Custom ReactFlow node for Prisma models +// Shows fields with their types and various indicators (PK, FK, unique, etc) + +import { memo } from 'react'; +import { Handle, Position } from '@xyflow/react'; +import type { NodeProps, Node } from '@xyflow/react'; +import type { PrismaModel, PrismaField } from '@prisma-uml/parser'; +import { + KeyIcon, + LinkIcon, + ListBulletIcon, + QuestionMarkCircleIcon, +} from '@heroicons/react/24/outline'; + +type ModelNodeData = { model: PrismaModel }; +type ModelNodeType = Node; + +export const ModelNode = memo(function ModelNode({ data }: NodeProps) { + const { model } = data; + + return ( +
+
+
+
+ {model.name} +
+ {model.dbName && ( + + {model.dbName} + + )} +
+ +
+ {model.fields.map((field) => ( + + ))} +
+ + {model.primaryKey && ( +
+ Composite PK: {model.primaryKey.fields.join(', ')} +
+ )} + + + + +
+ ); +}); + +// individual field row with icons and badges +function FieldRow({ field }: { field: PrismaField }) { + const isRelation = field.kind === 'object'; + + // build the type string (e.g., "User[]" or "String?") + let typeStr = field.type; + if (field.isList) typeStr += '[]'; + else if (!field.isRequired) typeStr += '?'; + + return ( +
+
+
+ {field.isId && } + {isRelation && } + {field.isList && } + {!field.isRequired && !field.isId && ( + + )} +
+ + + {field.name} + +
+ +
+ + {typeStr} + + + {field.isUnique && !field.isId && ( + + UK + + )} + + {field.isOmitted && ( + + omit + + )} +
+
+ ); +} diff --git a/apps/web/src/components/schema-editor.tsx b/apps/web/src/components/schema-editor.tsx new file mode 100644 index 0000000..ba54021 --- /dev/null +++ b/apps/web/src/components/schema-editor.tsx @@ -0,0 +1,174 @@ +'use client'; + +// Monaco-based editor for Prisma schemas +// Uses debouncing to avoid hammering the API on every keystroke + +import { useState, useCallback, useRef } from 'react'; +import Editor from '@monaco-editor/react'; +import type { OnMount } from '@monaco-editor/react'; +import { useDebouncedCallback } from 'use-debounce'; +import type { PrismaSchema } from '@prisma-uml/parser'; + +interface SchemaEditorProps { + initialValue?: string; + onSchemaChange: (schema: PrismaSchema, raw: string) => void; + onError: (error: string | null) => void; +} + +// sample schema to show when the page loads +// includes common patterns: relations, enums, optional fields +const DEFAULT_SCHEMA = `// Paste your Prisma schema here + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Profile { + id Int @id @default(autoincrement()) + bio String? + avatar String? + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + tags Tag[] + comments Comment[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Comment { + id Int @id @default(autoincrement()) + content String + post Post @relation(fields: [postId], references: [id]) + postId Int + createdAt DateTime @default(now()) +} + +model Tag { + id Int @id @default(autoincrement()) + name String @unique + posts Post[] +} + +enum Role { + ADMIN + USER + GUEST +} +`; + +export function SchemaEditor({ + initialValue = DEFAULT_SCHEMA, + onSchemaChange, + onError, +}: SchemaEditorProps) { + const [value, setValue] = useState(initialValue); + const [isLoading, setIsLoading] = useState(false); + const editorRef = useRef(null); + + // sends the schema to our API endpoint for parsing + async function parseSchema(schema: string) { + setIsLoading(true); + + try { + const res = await fetch('/api/parse', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ schema }), + }); + + const result = await res.json(); + + if (!res.ok || !result.success) { + // try to extract a meaningful error message + const msg = result.errors + ? result.errors.map((e: { message?: string }) => e.message ?? String(e)).join(', ') + : (result.message ?? 'Parsing error'); + onError(msg); + return; + } + + onError(null); + onSchemaChange(result.data, schema); + } catch (err) { + // network error or something unexpected + onError('Server connection error'); + } finally { + setIsLoading(false); + } + } + + // 500ms debounce seems like a good tradeoff between responsiveness and API load + const debouncedParse = useDebouncedCallback(parseSchema, 500); + + const handleChange = useCallback( + (newValue: string | undefined) => { + if (newValue === undefined) return; + setValue(newValue); + debouncedParse(newValue); + }, + [debouncedParse] + ); + + // parse the initial schema when editor mounts + const handleEditorMount: OnMount = (editor) => { + editorRef.current = editor; + parseSchema(initialValue); + }; + + return ( +
+ {isLoading && ( +
+
+
+ )} + +
+ ); +} diff --git a/apps/web/src/components/uml-diagram.tsx b/apps/web/src/components/uml-diagram.tsx new file mode 100644 index 0000000..e0e7128 --- /dev/null +++ b/apps/web/src/components/uml-diagram.tsx @@ -0,0 +1,234 @@ +'use client'; + +import { useMemo, useCallback, useEffect, useState } from 'react'; +import { + ReactFlow, + Background, + Controls, + MiniMap, + useNodesState, + useEdgesState, + useReactFlow, + ReactFlowProvider, + MarkerType, + BackgroundVariant, + Panel, +} from '@xyflow/react'; +import type { Node, Edge } from '@xyflow/react'; +import '@xyflow/react/dist/style.css'; +import { ArrowsPointingOutIcon } from '@heroicons/react/24/outline'; + +import { ModelNode } from './nodes/model-node'; +import { EnumNode } from './nodes/enum-node'; +import { useAutoLayout } from '../hooks'; +import type { PrismaSchema } from '@prisma-uml/parser'; + +// custom node types for models and enums +const nodeTypes = { + model: ModelNode, + enum: EnumNode, +} as const; + +interface UMLDiagramProps { + schema: PrismaSchema | null; +} + +// wrapper component to provide ReactFlow context +export function UMLDiagram({ schema }: UMLDiagramProps) { + return ( + + + + ); +} + +// the actual diagram logic lives here +function DiagramCanvas({ schema }: UMLDiagramProps) { + const [mounted, setMounted] = useState(false); + const { fitView } = useReactFlow(); + const { getLayoutedElements } = useAutoLayout(); + + useEffect(() => { + setMounted(true); + }, []); + + const { nodes: initialNodes, edges: initialEdges } = useMemo(() => { + if (!schema) return { nodes: [], edges: [] }; + return schemaToReactFlow(schema); + }, [schema]); + + const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); + const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + + useEffect(() => { + if (schema) { + const { nodes: newNodes, edges: newEdges } = schemaToReactFlow(schema); + setNodes(newNodes); + setEdges(newEdges); + } + }, [schema, setNodes, setEdges]); + + // auto-layout using dagre - tweaked these values until it looked good + const onAutoLayout = useCallback(() => { + const layoutConfig = { + direction: 'LR' as const, + nodeWidth: 300, + baseNodeHeight: 150, + fieldHeight: 36, + rankSep: 80, // space between columns + nodeSep: 30, // space between nodes in same column + }; + + const { nodes: layoutedNodes, edges: layoutedEdges } = getLayoutedElements( + nodes, + edges, + layoutConfig + ); + + setNodes(layoutedNodes); + setEdges(layoutedEdges); + + // small delay before fitting view, otherwise it doesn't work properly + setTimeout(() => fitView({ padding: 0.2, duration: 300 }), 50); + }, [nodes, edges, getLayoutedElements, setNodes, setEdges, fitView]); + + if (!mounted) { + return ( +
+
Loading diagram...
+
+ ); + } + + if (!schema) { + return ( +
+
+

No schema to display

+

Enter a valid Prisma schema in the editor

+
+
+ ); + } + + return ( +
+ + + + + + + + + {schema.models.length} models • {schema.enums.length} enums + + +
+ ); +} + +function schemaToReactFlow(schema: PrismaSchema): { nodes: Node[]; edges: Edge[] } { + const nodes: Node[] = []; + const edges: Edge[] = []; + + const GRID_COLS = Math.min(3, Math.ceil(Math.sqrt(schema.models.length + schema.enums.length))); + const NODE_WIDTH = 300; + const NODE_HEIGHT = 250; + const GAP_X = 120; + const GAP_Y = 100; + + schema.models.forEach((model, index) => { + const col = index % GRID_COLS; + const row = Math.floor(index / GRID_COLS); + + nodes.push({ + id: model.name, + type: 'model', + position: { + x: col * (NODE_WIDTH + GAP_X), + y: row * (NODE_HEIGHT + GAP_Y), + }, + data: { model }, + }); + + model.fields + .filter((field) => field.kind === 'object' && field.relationFromFields?.length) + .forEach((field) => { + const targetModel = field.type.replace('[]', '').replace('?', ''); + + edges.push({ + id: `${model.name}-${field.name}-${targetModel}`, + source: model.name, + target: targetModel, + sourceHandle: 'source', + targetHandle: 'target', + type: 'smoothstep', + animated: false, + markerEnd: { + type: MarkerType.ArrowClosed, + color: '#3b82f6', + width: 20, + height: 20, + }, + style: { + stroke: '#3b82f6', + strokeWidth: 2, + }, + label: field.relationName || undefined, + labelStyle: { + fill: '#a1a1aa', + fontSize: 11, + fontWeight: 500, + }, + labelBgStyle: { + fill: '#18181b', + fillOpacity: 0.9, + }, + labelBgPadding: [4, 4] as [number, number], + labelBgBorderRadius: 4, + }); + }); + }); + + schema.enums.forEach((enumDef, index) => { + const totalModels = schema.models.length; + const enumIndex = totalModels + index; + const col = enumIndex % GRID_COLS; + const row = Math.floor(enumIndex / GRID_COLS); + + nodes.push({ + id: enumDef.name, + type: 'enum', + position: { + x: col * (NODE_WIDTH + GAP_X), + y: row * (NODE_HEIGHT + GAP_Y), + }, + data: { enum: enumDef }, + }); + }); + + return { nodes, edges }; +} diff --git a/apps/web/src/hooks/index.ts b/apps/web/src/hooks/index.ts new file mode 100644 index 0000000..5ae9baa --- /dev/null +++ b/apps/web/src/hooks/index.ts @@ -0,0 +1,2 @@ +export { useExportImage, type ImageFormat } from './use-export-image'; +export { useAutoLayout } from './use-auto-layout'; diff --git a/apps/web/src/hooks/use-auto-layout.ts b/apps/web/src/hooks/use-auto-layout.ts new file mode 100644 index 0000000..c99fcb5 --- /dev/null +++ b/apps/web/src/hooks/use-auto-layout.ts @@ -0,0 +1,95 @@ +'use client'; + +import { useCallback } from 'react'; +import Dagre from '@dagrejs/dagre'; +import type { Node, Edge } from '@xyflow/react'; + +interface LayoutOptions { + direction?: 'TB' | 'LR' | 'BT' | 'RL'; + nodeWidth?: number; + baseNodeHeight?: number; + fieldHeight?: number; + rankSep?: number; + nodeSep?: number; +} + +function calculateNodeHeight(node: Node, baseHeight: number, fieldHeight: number): number { + const data = node.data as { model?: { fields?: unknown[] }; enum?: { values?: unknown[] } }; + + if (data.model?.fields) { + const fieldsCount = data.model.fields.length; + return Math.max(baseHeight, 52 + fieldsCount * 36 + 16); + } + + if (data.enum?.values) { + const valuesCount = data.enum.values.length; + return Math.max(baseHeight, 44 + valuesCount * 32 + 16); + } + + return baseHeight; +} + +export function useAutoLayout() { + const getLayoutedElements = useCallback( + ( + nodes: Node[], + edges: Edge[], + options: LayoutOptions = {} + ): { nodes: Node[]; edges: Edge[] } => { + const { + direction = 'LR', + nodeWidth = 300, + baseNodeHeight = 150, + fieldHeight = 36, + rankSep = 100, + nodeSep = 50, + } = options; + + const g = new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})); + + g.setGraph({ + rankdir: direction, + ranksep: rankSep, + nodesep: nodeSep, + marginx: 50, + marginy: 50, + }); + + const nodeHeights = new Map(); + + nodes.forEach((node) => { + const height = calculateNodeHeight(node, baseNodeHeight, fieldHeight); + nodeHeights.set(node.id, height); + + g.setNode(node.id, { + width: nodeWidth, + height: height, + }); + }); + + edges.forEach((edge) => { + g.setEdge(edge.source, edge.target); + }); + + Dagre.layout(g); + + const layoutedNodes = nodes.map((node) => { + const nodeWithPosition = g.node(node.id); + const height = nodeHeights.get(node.id) || baseNodeHeight; + + return { + ...node, + position: { + x: nodeWithPosition.x - nodeWidth / 2, + y: nodeWithPosition.y - height / 2, + }, + }; + }); + + return { nodes: layoutedNodes, edges }; + }, + [] + ); + + return { getLayoutedElements }; +} diff --git a/apps/web/src/hooks/use-export-image.ts b/apps/web/src/hooks/use-export-image.ts new file mode 100644 index 0000000..ea500c8 --- /dev/null +++ b/apps/web/src/hooks/use-export-image.ts @@ -0,0 +1,203 @@ +'use client'; + +import { useCallback } from 'react'; +import { toPng, toSvg, toJpeg } from 'html-to-image'; + +export type ImageFormat = 'png' | 'svg' | 'jpeg'; + +interface ExportImageOptions { + format: ImageFormat; + quality?: number; + backgroundColor?: string; + filename?: string; + includeGrid?: boolean; +} + +function drawGridBackground( + ctx: CanvasRenderingContext2D, + width: number, + height: number, + gridSize: number = 50, + backgroundColor: string = '#18181b', + gridColor: string = '#3f3f46' +) { + ctx.fillStyle = backgroundColor; + ctx.fillRect(0, 0, width, height); + + ctx.strokeStyle = gridColor; + ctx.lineWidth = 1; + + for (let x = 0; x <= width; x += gridSize) { + ctx.beginPath(); + ctx.moveTo(x, 0); + ctx.lineTo(x, height); + ctx.stroke(); + } + + for (let y = 0; y <= height; y += gridSize) { + ctx.beginPath(); + ctx.moveTo(0, y); + ctx.lineTo(width, y); + ctx.stroke(); + } +} + +export function useExportImage() { + const downloadImage = useCallback(async (options: ExportImageOptions) => { + const { + format, + quality = 0.92, + backgroundColor = '#18181b', + filename = 'prisma-schema', + includeGrid = true, + } = options; + + const reactFlowContainer = document.querySelector('.react-flow') as HTMLElement; + if (!reactFlowContainer) { + console.error('React Flow container not found'); + return false; + } + + const nodeElements = document.querySelectorAll('.react-flow__node') as NodeListOf; + if (nodeElements.length === 0) { + console.error('No nodes to export'); + return false; + } + + const viewport = document.querySelector('.react-flow__viewport') as HTMLElement; + if (!viewport) { + console.error('React Flow viewport not found'); + return false; + } + + let minX = Infinity; + let minY = Infinity; + let maxX = -Infinity; + let maxY = -Infinity; + + nodeElements.forEach((nodeEl) => { + const transform = nodeEl.style.transform; + const match = transform.match(/translate\((-?[\d.]+)px,\s*(-?[\d.]+)px\)/); + + if (match) { + const x = parseFloat(match[1]); + const y = parseFloat(match[2]); + const width = nodeEl.offsetWidth; + const height = nodeEl.offsetHeight; + + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x + width); + maxY = Math.max(maxY, y + height); + } + }); + + if (minX === Infinity) { + console.error('Could not calculate node bounds'); + return false; + } + + const padding = 80; + const contentWidth = maxX - minX; + const contentHeight = maxY - minY; + const imageWidth = Math.ceil(contentWidth + padding * 2); + const imageHeight = Math.ceil(contentHeight + padding * 2); + + const originalTransform = viewport.style.transform; + + viewport.style.transform = `translate(${-minX + padding}px, ${-minY + padding}px) scale(1)`; + + await new Promise((resolve) => setTimeout(resolve, 30)); + + const imageOptions = { + backgroundColor: includeGrid ? 'transparent' : backgroundColor, + width: imageWidth, + height: imageHeight, + quality, + pixelRatio: 2, + skipFonts: true, + cacheBust: true, + filter: (node: Element) => { + const classList = (node as HTMLElement).classList; + if (!classList) return true; + + if ( + classList.contains('react-flow__controls') || + classList.contains('react-flow__minimap') || + classList.contains('react-flow__panel') || + classList.contains('react-flow__background') + ) { + return false; + } + return true; + }, + }; + + try { + const diagramDataUrl = await toPng(reactFlowContainer, imageOptions); + + viewport.style.transform = originalTransform; + + if (includeGrid && format !== 'svg') { + const finalCanvas = document.createElement('canvas'); + const pixelRatio = 2; + finalCanvas.width = imageWidth * pixelRatio; + finalCanvas.height = imageHeight * pixelRatio; + const ctx = finalCanvas.getContext('2d')!; + + ctx.scale(pixelRatio, pixelRatio); + + drawGridBackground(ctx, imageWidth, imageHeight, 50, backgroundColor, '#3f3f46'); + + const img = new Image(); + await new Promise((resolve, reject) => { + img.onload = () => resolve(); + img.onerror = reject; + img.src = diagramDataUrl; + }); + + ctx.drawImage(img, 0, 0, imageWidth, imageHeight); + + let finalDataUrl: string; + if (format === 'jpeg') { + finalDataUrl = finalCanvas.toDataURL('image/jpeg', quality); + } else { + finalDataUrl = finalCanvas.toDataURL('image/png'); + } + + const link = document.createElement('a'); + link.download = `${filename}.${format}`; + link.href = finalDataUrl; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + let dataUrl: string; + + if (format === 'svg') { + viewport.style.transform = `translate(${-minX + padding}px, ${-minY + padding}px) scale(1)`; + await new Promise((resolve) => setTimeout(resolve, 30)); + dataUrl = await toSvg(reactFlowContainer, { ...imageOptions, backgroundColor }); + viewport.style.transform = originalTransform; + } else { + dataUrl = diagramDataUrl; + } + + const link = document.createElement('a'); + link.download = `${filename}.${format}`; + link.href = dataUrl; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + + return true; + } catch (error) { + console.error('Failed to export image:', error); + viewport.style.transform = originalTransform; + return false; + } + }, []); + + return { downloadImage }; +} diff --git a/apps/web/src/lib/index.ts b/apps/web/src/lib/index.ts new file mode 100644 index 0000000..491bf54 --- /dev/null +++ b/apps/web/src/lib/index.ts @@ -0,0 +1,2 @@ +export { parsePrismaSchema, validatePrismaSchema, detectPrismaVersion } from './prisma-parser'; +export type { PrismaSchema } from './prisma-parser'; diff --git a/apps/web/src/lib/prisma-parser.ts b/apps/web/src/lib/prisma-parser.ts new file mode 100644 index 0000000..f13246b --- /dev/null +++ b/apps/web/src/lib/prisma-parser.ts @@ -0,0 +1,17 @@ +import { + parsePrismaSchema as parse, + validatePrismaSchema, + detectPrismaVersion, + type PrismaSchema, + type ParserOptions, +} from '@prisma-uml/parser'; + +export async function parsePrismaSchema( + schemaContent: string, + options?: ParserOptions +): Promise { + return parse(schemaContent, options); +} + +export { validatePrismaSchema, detectPrismaVersion }; +export type { PrismaSchema }; diff --git a/apps/web/src/lib/utils.ts b/apps/web/src/lib/utils.ts new file mode 100644 index 0000000..a6c17be --- /dev/null +++ b/apps/web/src/lib/utils.ts @@ -0,0 +1,42 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +/** + * Merge Tailwind CSS classes with clsx + */ +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +export function encodeSchema(schema: string): string { + return btoa(encodeURIComponent(schema)); +} + +export function decodeSchema(encoded: string): string { + try { + return decodeURIComponent(atob(encoded)); + } catch { + return ''; + } +} + +export async function copyToClipboard(text: string): Promise { + try { + await navigator.clipboard.writeText(text); + return true; + } catch { + return false; + } +} + +export function downloadFile(content: string, filename: string, mimeType = 'text/plain'): void { + const blob = new Blob([content], { type: mimeType }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); +} diff --git a/apps/web/src/types/css.d.ts b/apps/web/src/types/css.d.ts new file mode 100644 index 0000000..444f793 --- /dev/null +++ b/apps/web/src/types/css.d.ts @@ -0,0 +1,4 @@ +declare module '*.css' { + const content: { [className: string]: string }; + export default content; +} diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json new file mode 100644 index 0000000..66237b5 --- /dev/null +++ b/apps/web/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["DOM", "DOM.Iterable", "ES2022"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"], + "@prisma-uml/parser": ["./../../packages/prisma-parser/src"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": ["node_modules"] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..299d7a8 --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "prisma-uml-viewer", + "private": true, + "scripts": { + "dev": "turbo dev", + "build": "turbo build", + "start": "pnpm --filter @prisma-uml/web start", + "lint": "turbo lint", + "test": "turbo test", + "typecheck": "turbo typecheck", + "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"" + }, + "devDependencies": { + "@types/node": "^22.10.0", + "prettier": "^3.4.0", + "turbo": "^2.4.0", + "typescript": "^5.7.0" + }, + "packageManager": "pnpm@9.15.0", + "engines": { + "node": ">=20.0.0" + } +} diff --git a/packages/prisma-parser/README.md b/packages/prisma-parser/README.md new file mode 100644 index 0000000..1a0bd0f --- /dev/null +++ b/packages/prisma-parser/README.md @@ -0,0 +1,22 @@ +# @prisma-uml/parser + +Internal package for parsing Prisma schemas. + +## Features + +- Parse Prisma schemas (v5, v6, v7) +- Auto-detect Prisma version +- Export to Mermaid, PlantUML, DBML + +## Usage + +```typescript +import { parsePrismaSchema, toMermaid } from '@prisma-uml/parser'; + +const parsed = await parsePrismaSchema(schemaString); +const mermaid = toMermaid(parsed); +``` + +## License + +MIT diff --git a/packages/prisma-parser/package.json b/packages/prisma-parser/package.json new file mode 100644 index 0000000..5a7bce2 --- /dev/null +++ b/packages/prisma-parser/package.json @@ -0,0 +1,51 @@ +{ + "name": "@prisma-uml/parser", + "version": "0.1.0", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./renderers/mermaid": { + "types": "./dist/renderers/mermaid.d.ts", + "import": "./dist/renderers/mermaid.mjs", + "require": "./dist/renderers/mermaid.js" + }, + "./renderers/plantuml": { + "types": "./dist/renderers/plantuml.d.ts", + "import": "./dist/renderers/plantuml.mjs", + "require": "./dist/renderers/plantuml.js" + }, + "./renderers/dbml": { + "types": "./dist/renderers/dbml.d.ts", + "import": "./dist/renderers/dbml.mjs", + "require": "./dist/renderers/dbml.js" + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "test": "vitest", + "test:run": "vitest run", + "typecheck": "tsc --noEmit" + }, + "dependencies": {}, + "peerDependencies": { + "@prisma/internals": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "@prisma/internals": { + "optional": true + } + }, + "devDependencies": { + "@prisma/internals": "^6.3.0", + "tsup": "^8.4.0", + "typescript": "^5.7.0", + "vitest": "^4.0.0" + } +} diff --git a/packages/prisma-parser/src/__tests__/parser.test.ts b/packages/prisma-parser/src/__tests__/parser.test.ts new file mode 100644 index 0000000..2e4ce39 --- /dev/null +++ b/packages/prisma-parser/src/__tests__/parser.test.ts @@ -0,0 +1,192 @@ +import { describe, it, expect } from 'vitest'; +import { parsePrismaSchema, detectPrismaVersion, validatePrismaSchema } from '../index'; + +describe('Prisma Schema Parser', () => { + it('should parse a basic Prisma 5 schema', async () => { + const schema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + generator client { + provider = "prisma-client-js" + } + + model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + } + `; + + const result = await parsePrismaSchema(schema); + + expect(result.version).toBe(5); + expect(result.models).toHaveLength(1); + expect(result.models[0].name).toBe('User'); + expect(result.models[0].fields).toHaveLength(3); + }); + + it('should detect Prisma 6 features', () => { + const schema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + model User { + id Int @id + password String @omit + } + `; + + expect(detectPrismaVersion(schema)).toBe(6); + }); + + it('should detect Prisma 7 features', () => { + const schema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + generator client { + provider = "prisma-client" + } + + model User { + id Int @id + } + `; + + expect(detectPrismaVersion(schema)).toBe(7); + }); + + it('should handle relations correctly', async () => { + const schema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + model User { + id Int @id + posts Post[] + } + + model Post { + id Int @id + author User @relation(fields: [authorId], references: [id]) + authorId Int + } + `; + + const result = await parsePrismaSchema(schema); + + const userModel = result.models.find((m) => m.name === 'User'); + const postModel = result.models.find((m) => m.name === 'Post'); + + expect(userModel?.fields.find((f) => f.name === 'posts')?.kind).toBe('object'); + expect(postModel?.fields.find((f) => f.name === 'author')?.relationFromFields).toEqual([ + 'authorId', + ]); + }); + + it('should parse enums correctly', async () => { + const schema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + enum Role { + ADMIN + USER + GUEST + } + + model User { + id Int @id + role Role @default(USER) + } + `; + + const result = await parsePrismaSchema(schema); + + expect(result.enums).toHaveLength(1); + expect(result.enums[0].name).toBe('Role'); + expect(result.enums[0].values).toHaveLength(3); + expect(result.enums[0].values.map((v) => v.name)).toEqual(['ADMIN', 'USER', 'GUEST']); + }); + + it('should validate schema correctly', () => { + const validSchema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + model User { + id Int @id + } + `; + + const invalidSchema = ` + model User { + id Int @id + `; + + expect(validatePrismaSchema(validSchema).valid).toBe(true); + expect(validatePrismaSchema(invalidSchema).valid).toBe(false); + }); + + it('should parse composite primary keys', async () => { + const schema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + model PostTag { + postId Int + tagId Int + + @@id([postId, tagId]) + } + `; + + const result = await parsePrismaSchema(schema); + const model = result.models[0]; + + expect(model.primaryKey).toBeDefined(); + expect(model.primaryKey?.fields).toEqual(['postId', 'tagId']); + }); + + it('should parse indexes and unique constraints', async () => { + const schema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + model User { + id Int @id + email String + firstName String + lastName String + + @@unique([email]) + @@index([firstName, lastName]) + } + `; + + const result = await parsePrismaSchema(schema); + const model = result.models[0]; + + expect(model.uniqueConstraints).toHaveLength(1); + expect(model.uniqueConstraints[0].fields).toEqual(['email']); + expect(model.indexes).toHaveLength(1); + expect(model.indexes[0].fields).toEqual(['firstName', 'lastName']); + }); +}); diff --git a/packages/prisma-parser/src/__tests__/renderers.test.ts b/packages/prisma-parser/src/__tests__/renderers.test.ts new file mode 100644 index 0000000..80c6924 --- /dev/null +++ b/packages/prisma-parser/src/__tests__/renderers.test.ts @@ -0,0 +1,107 @@ +import { describe, it, expect } from 'vitest'; +import { parsePrismaSchema, toMermaid, toPlantUML, toDBML } from '../index'; + +const testSchema = ` + datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + } + + generator client { + provider = "prisma-client-js" + } + + enum Role { + ADMIN + USER + } + + model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) + posts Post[] + createdAt DateTime @default(now()) + } + + model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + } +`; + +describe('Renderers', () => { + describe('Mermaid Renderer', () => { + it('should generate valid Mermaid ER diagram', async () => { + const schema = await parsePrismaSchema(testSchema); + const mermaid = toMermaid(schema); + + expect(mermaid).toContain('erDiagram'); + expect(mermaid).toContain('User {'); + expect(mermaid).toContain('Post {'); + expect(mermaid).toContain('int id "PK"'); + expect(mermaid).toContain('string email "UK"'); + }); + + it('should include relations', async () => { + const schema = await parsePrismaSchema(testSchema); + const mermaid = toMermaid(schema); + + expect(mermaid).toMatch(/User.*Post/); + }); + }); + + describe('PlantUML Renderer', () => { + it('should generate valid PlantUML diagram', async () => { + const schema = await parsePrismaSchema(testSchema); + const plantuml = toPlantUML(schema); + + expect(plantuml).toContain('@startuml'); + expect(plantuml).toContain('@enduml'); + expect(plantuml).toContain('entity'); + expect(plantuml).toContain('User'); + expect(plantuml).toContain('Post'); + }); + + it('should include enums', async () => { + const schema = await parsePrismaSchema(testSchema); + const plantuml = toPlantUML(schema); + + expect(plantuml).toContain('enum Role'); + expect(plantuml).toContain('ADMIN'); + expect(plantuml).toContain('USER'); + }); + }); + + describe('DBML Renderer', () => { + it('should generate valid DBML', async () => { + const schema = await parsePrismaSchema(testSchema); + const dbml = toDBML(schema); + + expect(dbml).toContain('Project prisma_schema'); + expect(dbml).toContain('Table User'); + expect(dbml).toContain('Table Post'); + expect(dbml).toContain('Ref:'); + }); + + it('should include field constraints', async () => { + const schema = await parsePrismaSchema(testSchema); + const dbml = toDBML(schema); + + expect(dbml).toContain('pk'); + expect(dbml).toContain('unique'); + }); + + it('should include enums', async () => { + const schema = await parsePrismaSchema(testSchema); + const dbml = toDBML(schema); + + expect(dbml).toContain('Enum Role'); + }); + }); +}); diff --git a/packages/prisma-parser/src/adapters/index.ts b/packages/prisma-parser/src/adapters/index.ts new file mode 100644 index 0000000..555116e --- /dev/null +++ b/packages/prisma-parser/src/adapters/index.ts @@ -0,0 +1,3 @@ +export { Prisma5Adapter } from './prisma5'; +export { Prisma6Adapter } from './prisma6'; +export { Prisma7Adapter } from './prisma7'; diff --git a/packages/prisma-parser/src/adapters/prisma5.ts b/packages/prisma-parser/src/adapters/prisma5.ts new file mode 100644 index 0000000..81ca9f3 --- /dev/null +++ b/packages/prisma-parser/src/adapters/prisma5.ts @@ -0,0 +1,349 @@ +import type { + PrismaAdapter, + PrismaSchema, + PrismaModel, + PrismaField, + PrismaEnum, + EnumValue, + Datasource, + Generator, + UniqueConstraint, + Index, + CompositePrimaryKey, + DefaultValue, +} from '../types'; + +export class Prisma5Adapter implements PrismaAdapter { + async parse(schemaContent: string): Promise { + const models = this.parseModels(schemaContent); + const enums = this.parseEnums(schemaContent); + const datasource = this.parseDatasource(schemaContent); + const generators = this.parseGenerators(schemaContent); + + return { + version: 5, + models, + enums, + datasource, + generators, + }; + } + + private parseModels(schema: string): PrismaModel[] { + const models: PrismaModel[] = []; + const modelRegex = /(?:\/\/\/\s*(.+?)\n)?model\s+(\w+)\s*\{([^}]+)\}/gs; + + let match; + while ((match = modelRegex.exec(schema)) !== null) { + const documentation = match[1]?.trim(); + const name = match[2]; + const body = match[3]; + + const model: PrismaModel = { + name, + fields: this.parseFields(body), + uniqueConstraints: this.parseUniqueConstraints(body), + indexes: this.parseIndexes(body), + documentation, + }; + + // Parse @@map for dbName + const mapMatch = body.match(/@@map\("([^"]+)"\)/); + if (mapMatch) { + model.dbName = mapMatch[1]; + } + + // Parse @@id for composite primary key + const idMatch = body.match(/@@id\(\[([^\]]+)\]\)/); + if (idMatch) { + model.primaryKey = { + fields: idMatch[1].split(',').map((f) => f.trim()), + }; + } + + models.push(model); + } + + return models; + } + + private parseFields(body: string): PrismaField[] { + const fields: PrismaField[] = []; + const lines = body.split('\n'); + + let currentDoc = ''; + + for (const line of lines) { + const trimmedLine = line.trim(); + + // Capture documentation + if (trimmedLine.startsWith('///')) { + currentDoc = trimmedLine.replace('///', '').trim(); + continue; + } + + // Skip empty lines and block attributes + if (!trimmedLine || trimmedLine.startsWith('@@')) { + currentDoc = ''; + continue; + } + + // Parse field + const fieldMatch = trimmedLine.match(/^(\w+)\s+(\w+)(\[\])?\??(.*)$/); + if (fieldMatch) { + const [, fieldName, fieldType, isList, attributes] = fieldMatch; + + const field: PrismaField = { + name: fieldName, + type: fieldType, + kind: this.getFieldKind(fieldType, attributes), + isList: !!isList, + isRequired: !trimmedLine.includes('?') || trimmedLine.includes('@id'), + isUnique: attributes.includes('@unique'), + isId: attributes.includes('@id'), + isUpdatedAt: attributes.includes('@updatedAt'), + hasDefaultValue: attributes.includes('@default'), + documentation: currentDoc || undefined, + }; + + // Parse @default value + if (field.hasDefaultValue) { + field.default = this.parseDefaultValue(attributes); + } + + // Parse @relation + if (attributes.includes('@relation')) { + this.parseRelation(field, attributes); + } + + fields.push(field); + currentDoc = ''; + } + } + + return fields; + } + + private getFieldKind( + type: string, + attributes: string + ): 'scalar' | 'object' | 'enum' | 'unsupported' { + const scalarTypes = [ + 'String', + 'Int', + 'Float', + 'Boolean', + 'DateTime', + 'Json', + 'Bytes', + 'BigInt', + 'Decimal', + ]; + + if (attributes.includes('@relation')) { + return 'object'; + } + + if (scalarTypes.includes(type)) { + return 'scalar'; + } + + if (attributes.includes('Unsupported')) { + return 'unsupported'; + } + + // If it's not a scalar and not a relation, it's likely an enum + return 'enum'; + } + + private parseDefaultValue(attributes: string): DefaultValue | undefined { + const defaultMatch = attributes.match(/@default\(([^)]+)\)/); + if (!defaultMatch) return undefined; + + const value = defaultMatch[1].trim(); + + // Function call (e.g., autoincrement(), now(), uuid()) + if (value.includes('(')) { + const funcMatch = value.match(/(\w+)\(([^)]*)\)/); + if (funcMatch) { + return { + name: funcMatch[1], + args: funcMatch[2] ? [funcMatch[2]] : [], + }; + } + } + + // Boolean + if (value === 'true') return true; + if (value === 'false') return false; + + // Number + if (/^-?\d+(\.\d+)?$/.test(value)) { + return parseFloat(value); + } + + // String + if (value.startsWith('"') && value.endsWith('"')) { + return value.slice(1, -1); + } + + return value; + } + + private parseRelation(field: PrismaField, attributes: string): void { + // Parse relation name + const nameMatch = attributes.match(/@relation\("([^"]+)"/); + if (nameMatch) { + field.relationName = nameMatch[1]; + } + + // Parse fields + const fieldsMatch = attributes.match(/fields:\s*\[([^\]]+)\]/); + if (fieldsMatch) { + field.relationFromFields = fieldsMatch[1].split(',').map((f) => f.trim()); + } + + // Parse references + const refsMatch = attributes.match(/references:\s*\[([^\]]+)\]/); + if (refsMatch) { + field.relationToFields = refsMatch[1].split(',').map((f) => f.trim()); + } + } + + private parseUniqueConstraints(body: string): UniqueConstraint[] { + const constraints: UniqueConstraint[] = []; + const regex = /@@unique\(\[([^\]]+)\](?:,\s*name:\s*"([^"]+)")?\)/g; + + let match; + while ((match = regex.exec(body)) !== null) { + constraints.push({ + fields: match[1].split(',').map((f) => f.trim()), + name: match[2], + }); + } + + return constraints; + } + + private parseIndexes(body: string): Index[] { + const indexes: Index[] = []; + const regex = /@@index\(\[([^\]]+)\](?:,\s*name:\s*"([^"]+)")?\)/g; + + let match; + while ((match = regex.exec(body)) !== null) { + indexes.push({ + fields: match[1].split(',').map((f) => f.trim()), + name: match[2], + }); + } + + return indexes; + } + + private parseEnums(schema: string): PrismaEnum[] { + const enums: PrismaEnum[] = []; + const enumRegex = /(?:\/\/\/\s*(.+?)\n)?enum\s+(\w+)\s*\{([^}]+)\}/gs; + + let match; + while ((match = enumRegex.exec(schema)) !== null) { + const documentation = match[1]?.trim(); + const name = match[2]; + const body = match[3]; + + const values = this.parseEnumValues(body); + + enums.push({ + name, + values, + documentation, + }); + } + + return enums; + } + + private parseEnumValues(body: string): EnumValue[] { + const values: EnumValue[] = []; + const lines = body.split('\n'); + + let currentDoc = ''; + + for (const line of lines) { + const trimmedLine = line.trim(); + + if (trimmedLine.startsWith('///')) { + currentDoc = trimmedLine.replace('///', '').trim(); + continue; + } + + if (!trimmedLine) { + currentDoc = ''; + continue; + } + + const valueMatch = trimmedLine.match(/^(\w+)(?:\s+@map\("([^"]+)"\))?/); + if (valueMatch) { + values.push({ + name: valueMatch[1], + dbName: valueMatch[2], + documentation: currentDoc || undefined, + }); + currentDoc = ''; + } + } + + return values; + } + + private parseDatasource(schema: string): Datasource { + const dsMatch = schema.match(/datasource\s+(\w+)\s*\{([^}]+)\}/s); + + if (!dsMatch) { + return { + name: 'db', + provider: 'postgresql', + url: 'env("DATABASE_URL")', + }; + } + + const name = dsMatch[1]; + const body = dsMatch[2]; + + const providerMatch = body.match(/provider\s*=\s*"([^"]+)"/); + const urlMatch = body.match(/url\s*=\s*(?:env\("([^"]+)"\)|"([^"]+)")/); + const directUrlMatch = body.match(/directUrl\s*=\s*(?:env\("([^"]+)"\)|"([^"]+)")/); + + return { + name, + provider: providerMatch?.[1] || 'postgresql', + url: urlMatch?.[1] ? `env("${urlMatch[1]}")` : urlMatch?.[2] || '', + directUrl: directUrlMatch?.[1] ? `env("${directUrlMatch[1]}")` : directUrlMatch?.[2], + }; + } + + private parseGenerators(schema: string): Generator[] { + const generators: Generator[] = []; + const genRegex = /generator\s+(\w+)\s*\{([^}]+)\}/gs; + + let match; + while ((match = genRegex.exec(schema)) !== null) { + const name = match[1]; + const body = match[2]; + + const providerMatch = body.match(/provider\s*=\s*"([^"]+)"/); + const outputMatch = body.match(/output\s*=\s*"([^"]+)"/); + const previewMatch = body.match(/previewFeatures\s*=\s*\[([^\]]+)\]/); + const binaryMatch = body.match(/binaryTargets\s*=\s*\[([^\]]+)\]/); + + generators.push({ + name, + provider: providerMatch?.[1] || 'prisma-client-js', + output: outputMatch?.[1], + previewFeatures: previewMatch?.[1]?.split(',').map((f) => f.trim().replace(/"/g, '')), + binaryTargets: binaryMatch?.[1]?.split(',').map((t) => t.trim().replace(/"/g, '')), + }); + } + + return generators; + } +} diff --git a/packages/prisma-parser/src/adapters/prisma6.ts b/packages/prisma-parser/src/adapters/prisma6.ts new file mode 100644 index 0000000..3842830 --- /dev/null +++ b/packages/prisma-parser/src/adapters/prisma6.ts @@ -0,0 +1,25 @@ +import type { PrismaAdapter, PrismaSchema } from '../types'; +import { Prisma5Adapter } from './prisma5'; + +export class Prisma6Adapter extends Prisma5Adapter implements PrismaAdapter { + async parse(schemaContent: string): Promise { + const baseSchema = await super.parse(schemaContent); + + baseSchema.version = 6; + + this.parsePrisma6Features(baseSchema, schemaContent); + + return baseSchema; + } + + private parsePrisma6Features(schema: PrismaSchema, schemaContent: string): void { + for (const model of schema.models) { + for (const field of model.fields) { + const fieldPattern = new RegExp(`${field.name}\\s+${field.type}[^\\n]*@omit`, 'g'); + if (fieldPattern.test(schemaContent)) { + field.isOmitted = true; + } + } + } + } +} diff --git a/packages/prisma-parser/src/adapters/prisma7.ts b/packages/prisma-parser/src/adapters/prisma7.ts new file mode 100644 index 0000000..8572016 --- /dev/null +++ b/packages/prisma-parser/src/adapters/prisma7.ts @@ -0,0 +1,44 @@ +import type { PrismaAdapter, PrismaSchema } from '../types'; +import { Prisma6Adapter } from './prisma6'; + +export class Prisma7Adapter extends Prisma6Adapter implements PrismaAdapter { + async parse(schemaContent: string): Promise { + const baseSchema = await super.parse(schemaContent); + + baseSchema.version = 7; + + this.parsePrisma7Features(baseSchema, schemaContent); + + return baseSchema; + } + + private parsePrisma7Features(schema: PrismaSchema, schemaContent: string): void { + for (const model of schema.models) { + for (const field of model.fields) { + const fieldLine = this.findFieldLine(schemaContent, model.name, field.name); + if (fieldLine) { + const nativeTypeMatch = fieldLine.match(/@db\.(\w+)(?:\(([^)]*)\))?/); + if (nativeTypeMatch) { + field.nativeType = nativeTypeMatch[1]; + } + } + } + } + } + + private findFieldLine(schema: string, modelName: string, fieldName: string): string | null { + const modelRegex = new RegExp(`model\\s+${modelName}\\s*\\{([^}]+)\\}`, 's'); + const modelMatch = schema.match(modelRegex); + + if (!modelMatch) return null; + + const lines = modelMatch[1].split('\n'); + for (const line of lines) { + if (line.trim().startsWith(fieldName)) { + return line; + } + } + + return null; + } +} diff --git a/packages/prisma-parser/src/index.ts b/packages/prisma-parser/src/index.ts new file mode 100644 index 0000000..816bdab --- /dev/null +++ b/packages/prisma-parser/src/index.ts @@ -0,0 +1,29 @@ +// Main exports +export { parsePrismaSchema, validatePrismaSchema } from './parser'; +export { detectPrismaVersion, getVersionFeatures } from './version-detector'; + +// Adapters +export { Prisma5Adapter, Prisma6Adapter, Prisma7Adapter } from './adapters'; + +// Renderers +export { toMermaid } from './renderers/mermaid'; +export { toPlantUML } from './renderers/plantuml'; +export { toDBML } from './renderers/dbml'; + +// Types +export type { + PrismaSchema, + PrismaModel, + PrismaField, + PrismaEnum, + EnumValue, + Datasource, + Generator, + PrismaVersion, + ParserOptions, + PrismaAdapter, + DefaultValue, + CompositePrimaryKey, + UniqueConstraint, + Index, +} from './types'; diff --git a/packages/prisma-parser/src/parser.ts b/packages/prisma-parser/src/parser.ts new file mode 100644 index 0000000..5839854 --- /dev/null +++ b/packages/prisma-parser/src/parser.ts @@ -0,0 +1,60 @@ +/** + * Main parser module + * Detects Prisma version and delegates to the appropriate adapter + */ + +import type { PrismaSchema, ParserOptions, PrismaVersion } from './types'; +import { detectPrismaVersion } from './version-detector'; +import { Prisma5Adapter, Prisma6Adapter, Prisma7Adapter } from './adapters'; + +// each Prisma version has slightly different features +const adapters = { + 5: Prisma5Adapter, + 6: Prisma6Adapter, + 7: Prisma7Adapter, +} as const; + +/** + * Parse a Prisma schema string into a structured format + */ +export async function parsePrismaSchema( + schemaContent: string, + options?: ParserOptions +): Promise { + // auto-detect version if not specified + const version: PrismaVersion = options?.version ?? detectPrismaVersion(schemaContent); + + const AdapterClass = adapters[version]; + const adapter = new AdapterClass(); + + return adapter.parse(schemaContent); +} + +/** + * Basic validation - checks for common issues before parsing + */ +export function validatePrismaSchema(schemaContent: string): { + valid: boolean; + errors: string[]; +} { + const errors: string[] = []; + + // must have a datasource + if (!schemaContent.includes('datasource')) { + errors.push('Missing datasource block'); + } + + // should have at least one model + if (!schemaContent.includes('model ')) { + errors.push('No models found in schema'); + } + + // check for balanced braces (common mistake) + const openBraces = (schemaContent.match(/{/g) || []).length; + const closeBraces = (schemaContent.match(/}/g) || []).length; + if (openBraces !== closeBraces) { + errors.push('Mismatched braces in schema'); + } + + return { valid: errors.length === 0, errors }; +} diff --git a/packages/prisma-parser/src/renderers/dbml.ts b/packages/prisma-parser/src/renderers/dbml.ts new file mode 100644 index 0000000..15b9b75 --- /dev/null +++ b/packages/prisma-parser/src/renderers/dbml.ts @@ -0,0 +1,192 @@ +import type { PrismaSchema, PrismaField } from '../types'; + +export function toDBML(schema: PrismaSchema): string { + const lines: string[] = []; + + lines.push('// Generated from Prisma Schema'); + lines.push(`// Prisma Version: ${schema.version}`); + lines.push(''); + + lines.push('Project prisma_schema {'); + lines.push(` database_type: '${mapProviderToDBType(schema.datasource.provider)}'`); + lines.push('}'); + lines.push(''); + + for (const enumDef of schema.enums) { + if (enumDef.documentation) { + lines.push(`// ${enumDef.documentation}`); + } + lines.push(`Enum ${enumDef.name} {`); + for (const value of enumDef.values) { + const note = value.documentation ? ` [note: '${value.documentation}']` : ''; + lines.push(` ${value.name}${note}`); + } + lines.push('}'); + lines.push(''); + } + + for (const model of schema.models) { + if (model.documentation) { + lines.push(`// ${model.documentation}`); + } + + const tableName = model.dbName || model.name; + lines.push(`Table ${tableName} {`); + + for (const field of model.fields) { + // Skip relation fields (object kind) + if (field.kind === 'object') continue; + + const dbmlField = fieldToDBML(field); + lines.push(` ${dbmlField}`); + } + + // Add indexes + if (model.indexes.length > 0 || model.uniqueConstraints.length > 0) { + lines.push(''); + lines.push(' indexes {'); + + for (const idx of model.indexes) { + const idxName = idx.name ? ` [name: '${idx.name}']` : ''; + lines.push(` (${idx.fields.join(', ')})${idxName}`); + } + + for (const unique of model.uniqueConstraints) { + const uniqueName = unique.name ? ` [name: '${unique.name}']` : ''; + lines.push(` (${unique.fields.join(', ')}) [unique]${uniqueName}`); + } + + lines.push(' }'); + } + + lines.push('}'); + lines.push(''); + } + + for (const model of schema.models) { + for (const field of model.fields) { + if (field.kind === 'object' && field.relationFromFields?.length) { + const targetModel = field.type.replace('[]', ''); + const sourceFields = field.relationFromFields.join(', '); + const targetFields = field.relationToFields?.join(', ') || 'id'; + + const relationType = field.isList ? '<>' : field.isRequired ? '-' : '-'; + const sourceName = model.dbName || model.name; + const targetName = schema.models.find((m) => m.name === targetModel)?.dbName || targetModel; + + lines.push( + `Ref: ${sourceName}.${sourceFields} ${relationType} ${targetName}.${targetFields}` + ); + } + } + } + + return lines.join('\n'); +} + +function fieldToDBML(field: PrismaField): string { + const parts: string[] = []; + + parts.push(field.name); + + const dbmlType = mapPrismaTypeToDBML(field.type, field.isList); + parts.push(dbmlType); + + const settings: string[] = []; + + if (field.isId) { + settings.push('pk'); + } + + if (field.isUnique && !field.isId) { + settings.push('unique'); + } + + if (!field.isRequired && !field.isId) { + settings.push('null'); + } else if (!field.isId) { + settings.push('not null'); + } + + if (field.hasDefaultValue && field.default !== undefined) { + const defaultStr = formatDefault(field.default); + if (defaultStr) { + settings.push(`default: ${defaultStr}`); + } + } + + if (field.isUpdatedAt) { + settings.push("note: 'Updated automatically'"); + } + + if (field.documentation) { + settings.push(`note: '${field.documentation}'`); + } + + if (settings.length > 0) { + parts.push(`[${settings.join(', ')}]`); + } + + return parts.join(' '); +} + +function mapPrismaTypeToDBML(type: string, isList: boolean): string { + const mapping: Record = { + String: 'varchar', + Int: 'integer', + BigInt: 'bigint', + Float: 'float', + Decimal: 'decimal', + Boolean: 'boolean', + DateTime: 'timestamp', + Json: 'json', + Bytes: 'bytea', + }; + + const mappedType = mapping[type] || type.toLowerCase(); + return isList ? `${mappedType}[]` : mappedType; +} + +function mapProviderToDBType(provider: string): string { + const mapping: Record = { + postgresql: 'PostgreSQL', + mysql: 'MySQL', + sqlite: 'SQLite', + sqlserver: 'SQL Server', + mongodb: 'MongoDB', + cockroachdb: 'CockroachDB', + }; + return mapping[provider] || provider; +} + +function formatDefault(value: unknown): string | null { + if (typeof value === 'object' && value !== null && 'name' in value) { + const func = value as { name: string; args: unknown[] }; + switch (func.name) { + case 'autoincrement': + return null; // Handled by pk + case 'now': + return '`now()`'; + case 'uuid': + return '`uuid()`'; + case 'cuid': + return '`cuid()`'; + default: + return `\`${func.name}()\``; + } + } + + if (typeof value === 'string') { + return `'${value}'`; + } + + if (typeof value === 'boolean') { + return value ? 'true' : 'false'; + } + + if (typeof value === 'number') { + return String(value); + } + + return null; +} diff --git a/packages/prisma-parser/src/renderers/index.ts b/packages/prisma-parser/src/renderers/index.ts new file mode 100644 index 0000000..d81944d --- /dev/null +++ b/packages/prisma-parser/src/renderers/index.ts @@ -0,0 +1,3 @@ +export { toMermaid } from './mermaid'; +export { toPlantUML } from './plantuml'; +export { toDBML } from './dbml'; diff --git a/packages/prisma-parser/src/renderers/mermaid.ts b/packages/prisma-parser/src/renderers/mermaid.ts new file mode 100644 index 0000000..868d3cd --- /dev/null +++ b/packages/prisma-parser/src/renderers/mermaid.ts @@ -0,0 +1,106 @@ +import type { PrismaSchema, PrismaField } from '../types'; + +export function toMermaid(schema: PrismaSchema): string { + const lines: string[] = ['erDiagram']; + + for (const model of schema.models) { + lines.push(` ${model.name} {`); + + for (const field of model.fields) { + if (field.kind === 'scalar' || field.kind === 'enum') { + const type = mapPrismaTypeToMermaid(field.type); + const constraints: string[] = []; + + if (field.isId) constraints.push('PK'); + if (field.isUnique) constraints.push('UK'); + if (field.relationFromFields?.length) constraints.push('FK'); + + const constraintStr = constraints.length ? ` "${constraints.join(', ')}"` : ''; + lines.push(` ${type} ${field.name}${constraintStr}`); + } + } + + lines.push(' }'); + } + + lines.push(''); + + for (const enumDef of schema.enums) { + lines.push(` ${enumDef.name} {`); + for (const value of enumDef.values) { + lines.push(` string ${value.name}`); + } + lines.push(' }'); + } + + lines.push(''); + + const processedRelations = new Set(); + + for (const model of schema.models) { + for (const field of model.fields) { + if (field.kind === 'object') { + const targetModel = field.type.replace('[]', ''); + const relationKey = [model.name, targetModel].sort().join('-'); + + if (processedRelations.has(relationKey)) continue; + processedRelations.add(relationKey); + + const cardinality = getCardinality(field, schema, model.name, targetModel); + const relationLabel = field.relationName || field.name; + + lines.push(` ${model.name} ${cardinality} ${targetModel} : "${relationLabel}"`); + } + } + } + + return lines.join('\n'); +} + +function getCardinality( + field: PrismaField, + schema: PrismaSchema, + sourceModel: string, + targetModel: string +): string { + const target = schema.models.find((m) => m.name === targetModel); + const inverseField = target?.fields.find( + (f) => f.kind === 'object' && f.type.replace('[]', '') === sourceModel + ); + + const sourceIsList = field.isList; + const targetIsList = inverseField?.isList ?? false; + + // One-to-Many + if (!sourceIsList && targetIsList) { + return '||--o{'; + } + + // Many-to-One + if (sourceIsList && !targetIsList) { + return '}o--||'; + } + + // Many-to-Many + if (sourceIsList && targetIsList) { + return '}o--o{'; + } + + // One-to-One + return '||--||'; +} + +function mapPrismaTypeToMermaid(type: string): string { + const mapping: Record = { + String: 'string', + Int: 'int', + BigInt: 'bigint', + Float: 'float', + Decimal: 'decimal', + Boolean: 'boolean', + DateTime: 'datetime', + Json: 'json', + Bytes: 'bytes', + }; + return mapping[type] || type.toLowerCase(); +} diff --git a/packages/prisma-parser/src/renderers/plantuml.ts b/packages/prisma-parser/src/renderers/plantuml.ts new file mode 100644 index 0000000..2f15078 --- /dev/null +++ b/packages/prisma-parser/src/renderers/plantuml.ts @@ -0,0 +1,95 @@ +import type { PrismaSchema } from '../types'; + +export function toPlantUML(schema: PrismaSchema): string { + const lines: string[] = [ + '@startuml', + '!theme blueprint', + 'skinparam linetype ortho', + 'skinparam class {', + ' BackgroundColor #1e1e2e', + ' BorderColor #89b4fa', + ' ArrowColor #89b4fa', + ' FontColor #cdd6f4', + '}', + '', + ]; + + for (const model of schema.models) { + const displayName = model.dbName ? `"${model.name}\\n(${model.dbName})"` : `"${model.name}"`; + lines.push(`entity ${displayName} as ${model.name} {`); + + const pkFields = model.fields.filter((f) => f.isId); + const fkFields = model.fields.filter( + (f) => f.relationFromFields?.length && !f.isId && f.kind !== 'object' + ); + const regularFields = model.fields.filter( + (f) => !f.isId && f.kind !== 'object' && !f.relationFromFields?.length + ); + + // Primary keys + for (const field of pkFields) { + const nullable = field.isRequired ? '' : ' (nullable)'; + lines.push(` * ${field.name} : ${field.type}${nullable} <>`); + } + + if (pkFields.length && (fkFields.length || regularFields.length)) { + lines.push(' --'); + } + + // Foreign keys + for (const field of fkFields) { + const optional = field.isRequired ? '*' : 'o'; + const unique = field.isUnique ? ' <>' : ''; + lines.push(` ${optional} ${field.name} : ${field.type}${unique} <>`); + } + + if (fkFields.length && regularFields.length) { + lines.push(' ..'); + } + + // Regular fields + for (const field of regularFields) { + const optional = field.isRequired ? '*' : 'o'; + const unique = field.isUnique ? ' <>' : ''; + const updatedAt = field.isUpdatedAt ? ' <>' : ''; + lines.push(` ${optional} ${field.name} : ${field.type}${unique}${updatedAt}`); + } + + lines.push('}'); + lines.push(''); + } + + for (const enumDef of schema.enums) { + lines.push(`enum ${enumDef.name} {`); + for (const value of enumDef.values) { + const dbName = value.dbName ? ` [${value.dbName}]` : ''; + lines.push(` ${value.name}${dbName}`); + } + lines.push('}'); + lines.push(''); + } + + const processedRelations = new Set(); + + for (const model of schema.models) { + for (const field of model.fields) { + if (field.kind === 'object' && field.relationFromFields?.length) { + const target = field.type.replace('[]', ''); + const relationKey = `${model.name}-${target}-${field.relationName || field.name}`; + + if (processedRelations.has(relationKey)) continue; + processedRelations.add(relationKey); + + const sourceCard = field.isRequired ? '1' : '0..1'; + const targetCard = field.isList ? '*' : '1'; + + lines.push(`${model.name} "${sourceCard}" --> "${targetCard}" ${target} : ${field.name}`); + } + } + } + + lines.push(''); + lines.push('@enduml'); + + return lines.join('\n'); +} diff --git a/packages/prisma-parser/src/types.ts b/packages/prisma-parser/src/types.ts new file mode 100644 index 0000000..ec4880e --- /dev/null +++ b/packages/prisma-parser/src/types.ts @@ -0,0 +1,100 @@ +export type PrismaVersion = 5 | 6 | 7; + +export type ScalarDefaultValue = string | number | boolean; + +export interface FunctionDefaultValue { + name: string; + args: unknown[]; +} + +export type DefaultValue = ScalarDefaultValue | FunctionDefaultValue; + +export interface PrismaField { + name: string; + type: string; + kind: 'scalar' | 'object' | 'enum' | 'unsupported'; + isList: boolean; + isRequired: boolean; + isUnique: boolean; + isId: boolean; + isUpdatedAt: boolean; + hasDefaultValue: boolean; + default?: DefaultValue; + relationName?: string; + relationFromFields?: string[]; + relationToFields?: string[]; + documentation?: string; + isOmitted?: boolean; + nativeType?: string; +} + +export interface CompositePrimaryKey { + name?: string; + fields: string[]; +} + +export interface UniqueConstraint { + name?: string; + fields: string[]; +} + +export interface Index { + name?: string; + fields: string[]; + type?: 'btree' | 'hash' | 'gist' | 'gin' | 'spgist' | 'brin'; +} + +export interface PrismaModel { + name: string; + dbName?: string; + fields: PrismaField[]; + primaryKey?: CompositePrimaryKey; + uniqueConstraints: UniqueConstraint[]; + indexes: Index[]; + documentation?: string; +} + +export interface EnumValue { + name: string; + dbName?: string; + documentation?: string; +} + +export interface PrismaEnum { + name: string; + values: EnumValue[]; + documentation?: string; +} + +export interface Datasource { + name: string; + provider: string; + url: string; + directUrl?: string; + shadowDatabaseUrl?: string; +} + +export interface Generator { + name: string; + provider: string; + output?: string; + previewFeatures?: string[]; + binaryTargets?: string[]; +} + +export interface PrismaSchema { + version: PrismaVersion; + models: PrismaModel[]; + enums: PrismaEnum[]; + datasource: Datasource; + generators: Generator[]; +} + +export interface ParserOptions { + version?: PrismaVersion; + strict?: boolean; +} + +export interface PrismaAdapter { + parse(schemaContent: string): Promise; +} diff --git a/packages/prisma-parser/src/version-detector.ts b/packages/prisma-parser/src/version-detector.ts new file mode 100644 index 0000000..b8f66eb --- /dev/null +++ b/packages/prisma-parser/src/version-detector.ts @@ -0,0 +1,40 @@ +import type { PrismaVersion } from './types'; + +export function detectPrismaVersion(schema: string): PrismaVersion { + if ( + schema.includes('typedSql') || + schema.includes('@prisma/client/sql') || + /generator\s+\w+\s*\{[^}]*provider\s*=\s*"prisma-client"/s.test(schema) + ) { + return 7; + } + + if ( + schema.includes('@omit') || + schema.includes('strictUndefinedChecks') || + schema.includes('prismaSchemaFolder') || + schema.includes('omitApi') + ) { + return 6; + } + + return 5; +} + +export function getVersionFeatures(version: PrismaVersion): string[] { + const features: Record = { + 5: ['relations', 'enums', 'compositeTypes', 'views'], + 6: ['relations', 'enums', 'compositeTypes', 'views', 'omit', 'strictUndefinedChecks'], + 7: [ + 'relations', + 'enums', + 'compositeTypes', + 'views', + 'omit', + 'strictUndefinedChecks', + 'typedSql', + ], + }; + + return features[version]; +} diff --git a/packages/prisma-parser/tsconfig.json b/packages/prisma-parser/tsconfig.json new file mode 100644 index 0000000..484fb19 --- /dev/null +++ b/packages/prisma-parser/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": ["ES2022"], + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "**/*.test.ts"] +} diff --git a/packages/prisma-parser/tsup.config.ts b/packages/prisma-parser/tsup.config.ts new file mode 100644 index 0000000..51b3afe --- /dev/null +++ b/packages/prisma-parser/tsup.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + index: 'src/index.ts', + 'renderers/mermaid': 'src/renderers/mermaid.ts', + 'renderers/plantuml': 'src/renderers/plantuml.ts', + 'renderers/dbml': 'src/renderers/dbml.ts', + }, + format: ['cjs', 'esm'], + dts: true, + sourcemap: true, + clean: true, + splitting: false, + treeshake: true, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..99a4eef --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2903 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@types/node': + specifier: ^22.10.0 + version: 22.19.7 + prettier: + specifier: ^3.4.0 + version: 3.8.0 + turbo: + specifier: ^2.4.0 + version: 2.7.5 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + + apps/web: + dependencies: + '@dagrejs/dagre': + specifier: ^1.1.8 + version: 1.1.8 + '@heroicons/react': + specifier: ^2.2.0 + version: 2.2.0(react@19.2.3) + '@icons-pack/react-simple-icons': + specifier: ^13.8.0 + version: 13.8.0(react@19.2.3) + '@monaco-editor/react': + specifier: ^4.7.0 + version: 4.7.0(monaco-editor@0.55.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@prisma-uml/parser': + specifier: workspace:* + version: link:../../packages/prisma-parser + '@xyflow/react': + specifier: ^12.4.0 + version: 12.10.0(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + clsx: + specifier: ^2.1.0 + version: 2.1.1 + html-to-image: + specifier: ^1.11.0 + version: 1.11.13 + next: + specifier: ^16.1.0 + version: 16.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: + specifier: ^19.1.0 + version: 19.2.3 + react-dom: + specifier: ^19.1.0 + version: 19.2.3(react@19.2.3) + tailwind-merge: + specifier: ^2.6.0 + version: 2.6.0 + use-debounce: + specifier: ^10.0.4 + version: 10.1.0(react@19.2.3) + zod: + specifier: ^3.24.0 + version: 3.25.76 + devDependencies: + '@tailwindcss/postcss': + specifier: ^4.1.18 + version: 4.1.18 + '@types/dagre': + specifier: ^0.7.53 + version: 0.7.53 + '@types/react': + specifier: ^19.1.0 + version: 19.2.8 + '@types/react-dom': + specifier: ^19.1.0 + version: 19.2.3(@types/react@19.2.8) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.23(postcss@8.5.6) + postcss: + specifier: ^8.5.0 + version: 8.5.6 + tailwindcss: + specifier: ^4.1.18 + version: 4.1.18 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + + packages/prisma-parser: + devDependencies: + '@prisma/internals': + specifier: ^6.3.0 + version: 6.19.2(typescript@5.9.3) + tsup: + specifier: ^8.4.0 + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3) + typescript: + specifier: ^5.7.0 + version: 5.9.3 + vitest: + specifier: ^4.0.0 + version: 4.0.17(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2) + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@dagrejs/dagre@1.1.8': + resolution: {integrity: sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw==} + + '@dagrejs/graphlib@2.2.4': + resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==} + engines: {node: '>17.0.0'} + + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@heroicons/react@2.2.0': + resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==} + peerDependencies: + react: '>= 16 || ^19.0.0-rc' + + '@icons-pack/react-simple-icons@13.8.0': + resolution: {integrity: sha512-iZrhL1fSklfCCVn68IYHaAoKfcby3RakUTn2tRPyHBkhr2tkYqeQbjJWf+NizIYBzKBn2IarDJXmTdXd6CuEfw==} + peerDependencies: + react: ^16.13 || ^17 || ^18 || ^19 + + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@monaco-editor/loader@1.7.0': + resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} + + '@monaco-editor/react@4.7.0': + resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@next/env@16.1.3': + resolution: {integrity: sha512-BLP14oBOvZWXgfdJf9ao+VD8O30uE+x7PaV++QtACLX329WcRSJRO5YJ+Bcvu0Q+c/lei41TjSiFf6pXqnpbQA==} + + '@next/swc-darwin-arm64@16.1.3': + resolution: {integrity: sha512-CpOD3lmig6VflihVoGxiR/l5Jkjfi4uLaOR4ziriMv0YMDoF6cclI+p5t2nstM8TmaFiY6PCTBgRWB57/+LiBA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.1.3': + resolution: {integrity: sha512-aF4us2JXh0zn3hNxvL1Bx3BOuh8Lcw3p3Xnurlvca/iptrDH1BrpObwkw9WZra7L7/0qB9kjlREq3hN/4x4x+Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.1.3': + resolution: {integrity: sha512-8VRkcpcfBtYvhGgXAF7U3MBx6+G1lACM1XCo1JyaUr4KmAkTNP8Dv2wdMq7BI+jqRBw3zQE7c57+lmp7jCFfKA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@16.1.3': + resolution: {integrity: sha512-UbFx69E2UP7MhzogJRMFvV9KdEn4sLGPicClwgqnLht2TEi204B71HuVfps3ymGAh0c44QRAF+ZmvZZhLLmhNg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@16.1.3': + resolution: {integrity: sha512-SzGTfTjR5e9T+sZh5zXqG/oeRQufExxBF6MssXS7HPeZFE98JDhCRZXpSyCfWrWrYrzmnw/RVhlP2AxQm+wkRQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@16.1.3': + resolution: {integrity: sha512-HlrDpj0v+JBIvQex1mXHq93Mht5qQmfyci+ZNwGClnAQldSfxI6h0Vupte1dSR4ueNv4q7qp5kTnmLOBIQnGow==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@16.1.3': + resolution: {integrity: sha512-3gFCp83/LSduZMSIa+lBREP7+5e7FxpdBoc9QrCdmp+dapmTK9I+SLpY60Z39GDmTXSZA4huGg9WwmYbr6+WRw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.1.3': + resolution: {integrity: sha512-1SZVfFT8zmMB+Oblrh5OKDvUo5mYQOkX2We6VGzpg7JUVZlqe4DYOFGKYZKTweSx1gbMixyO1jnFT4thU+nNHQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@prisma/config@6.19.2': + resolution: {integrity: sha512-kadBGDl+aUswv/zZMk9Mx0C8UZs1kjao8H9/JpI4Wh4SHZaM7zkTwiKn/iFLfRg+XtOAo/Z/c6pAYhijKl0nzQ==} + + '@prisma/debug@6.19.2': + resolution: {integrity: sha512-lFnEZsLdFLmEVCVNdskLDCL8Uup41GDfU0LUfquw+ercJC8ODTuL0WNKgOKmYxCJVvFwf0OuZBzW99DuWmoH2A==} + + '@prisma/dmmf@6.19.2': + resolution: {integrity: sha512-ZHGDQlnrWKwFPAOvJ8hVbmIqNPdE0XXptTeYqmUGhYMDySSts60O8g3KNY1uAqr3nHiyDcpaGIpO1MBYoDW6gQ==} + + '@prisma/driver-adapter-utils@6.19.2': + resolution: {integrity: sha512-tkHsL3jhx81eXg2oqtJH/1IEs8uEeUb1RpqHtwYqdNb176u9D0mnHRZM1/cKca/XhLpq49Nnd9XDxdMfWcKAYA==} + + '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': + resolution: {integrity: sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==} + + '@prisma/engines@6.19.2': + resolution: {integrity: sha512-TTkJ8r+uk/uqczX40wb+ODG0E0icVsMgwCTyTHXehaEfb0uo80M9g1aW1tEJrxmFHeOZFXdI2sTA1j1AgcHi4A==} + + '@prisma/fetch-engine@6.19.2': + resolution: {integrity: sha512-h4Ff4Pho+SR1S8XerMCC12X//oY2bG3Iug/fUnudfcXEUnIeRiBdXHFdGlGOgQ3HqKgosTEhkZMvGM9tWtYC+Q==} + + '@prisma/generator-helper@6.19.2': + resolution: {integrity: sha512-vSjDbHhtKjRDgywTDYyAJLEe+kMxq4DNLNiurk/tGca8W/H7duX4Z4UdvYXcv3kWmmgJJmdndh41dgIsrewa3w==} + + '@prisma/generator@6.19.2': + resolution: {integrity: sha512-2xDQQUJh2s6Ty9I9CIGRz7Z8pEGxKxjU/lkFyLI5f83fDoISUaGhWQZGW35xMqKVDoNRM93w1ghm+1ScRy0mAA==} + + '@prisma/get-platform@6.19.2': + resolution: {integrity: sha512-PGLr06JUSTqIvztJtAzIxOwtWKtJm5WwOG6xpsgD37Rc84FpfUBGLKz65YpJBGtkRQGXTYEFie7pYALocC3MtA==} + + '@prisma/internals@6.19.2': + resolution: {integrity: sha512-ciXNy15WKIg4rjuA0dNZ03CMJEneoEi47a3E6Yp59KI90M7r/nieaiqSRtWakl9nKj2YKfRX6nraYC3zaeSQXQ==} + peerDependencies: + typescript: '>=5.1.0' + peerDependenciesMeta: + typescript: + optional: true + + '@prisma/prisma-schema-wasm@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': + resolution: {integrity: sha512-/5JrsJQAOIWSl+9WMM/0ugd737kT9zdMNr7EFaP7ogeMxAhxQ78uaOV6JYGEocD8LC0gZx7MXmVE/CTfYdJ2iA==} + + '@prisma/schema-engine-wasm@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': + resolution: {integrity: sha512-mXtzeePkSdqpr/HAIclqzQEf+tBzLawy7NQ9AaRCfg8N/cruavpsocgbSwOOfV7JTk9JubyzKuR3tp2bNNuWbQ==} + + '@prisma/schema-files-loader@6.19.2': + resolution: {integrity: sha512-v4dHwmYn0rsn6E6Lo6EH4oT7rYVlbJTKWUL3j4gjX0AyQefm3NIITFdYuonDy1S4y2Z/3D1r8gCVjFLskKfK/A==} + + '@rollup/rollup-android-arm-eabi@4.55.1': + resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.55.1': + resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.55.1': + resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.55.1': + resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.55.1': + resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.55.1': + resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.55.1': + resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.55.1': + resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.55.1': + resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.55.1': + resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.55.1': + resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.55.1': + resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.55.1': + resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.55.1': + resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.55.1': + resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.55.1': + resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.55.1': + resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.55.1': + resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.55.1': + resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.55.1': + resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.55.1': + resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + cpu: [x64] + os: [win32] + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} + + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.18': + resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/dagre@0.7.53': + resolution: {integrity: sha512-f4gkWqzPZvYmKhOsDnhq/R8mO4UMcKdxZo+i5SCkOU1wvGeHJeUXGIHeE9pnwGyPMDof1Vx5ZQo4nxpeg2TTVQ==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/node@22.19.7': + resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.8': + resolution: {integrity: sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@vitest/expect@4.0.17': + resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} + + '@vitest/mocker@4.0.17': + resolution: {integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.17': + resolution: {integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==} + + '@vitest/runner@4.0.17': + resolution: {integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==} + + '@vitest/snapshot@4.0.17': + resolution: {integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==} + + '@vitest/spy@4.0.17': + resolution: {integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==} + + '@vitest/utils@4.0.17': + resolution: {integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==} + + '@xyflow/react@12.10.0': + resolution: {integrity: sha512-eOtz3whDMWrB4KWVatIBrKuxECHqip6PfA8fTpaS2RUGVpiEAe+nqDKsLqkViVWxDGreq0lWX71Xth/SPAzXiw==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@xyflow/system@0.0.74': + resolution: {integrity: sha512-7v7B/PkiVrkdZzSbL+inGAo6tkR/WQHHG0/jhSvLQToCsfa8YubOGmBYd1s08tpKpihdHDZFwzQZeR69QSBb4Q==} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + autoprefixer@10.4.23: + resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + baseline-browser-mapping@2.9.15: + resolution: {integrity: sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==} + hasBin: true + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + c12@3.1.0: + resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + caniuse-lite@1.0.30001765: + resolution: {integrity: sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + classcat@5.0.5: + resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dompurify@3.2.7: + resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + effect@3.18.4: + resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} + + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + + enhanced-resolve@5.18.4: + resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} + engines: {node: '>=10.13.0'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + html-to-image@1.11.13: + resolution: {integrity: sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + marked@14.0.0: + resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} + engines: {node: '>= 18'} + hasBin: true + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + + monaco-editor@0.55.1: + resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + next@16.1.3: + resolution: {integrity: sha512-gthG3TRD+E3/mA0uDQb9lqBmx1zVosq5kIwxNN6+MRNd085GzD+9VXMPUs+GGZCbZ+GDZdODUq4Pm7CTXK6ipw==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + nypm@0.6.2: + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.8.0: + resolution: {integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==} + engines: {node: '>=14'} + hasBin: true + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + peerDependencies: + react: ^19.2.3 + + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + engines: {node: '>=0.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + rollup@4.55.1: + resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + state-local@1.0.7: + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@8.5.1: + resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + turbo-darwin-64@2.7.5: + resolution: {integrity: sha512-nN3wfLLj4OES/7awYyyM7fkU8U8sAFxsXau2bYJwAWi6T09jd87DgHD8N31zXaJ7LcpyppHWPRI2Ov9MuZEwnQ==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.7.5: + resolution: {integrity: sha512-wCoDHMiTf3FgLAbZHDDx/unNNonSGhsF5AbbYODbxnpYyoKDpEYacUEPjZD895vDhNvYCH0Nnk24YsP4n/cD6g==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.7.5: + resolution: {integrity: sha512-KKPvhOmJMmzWj/yjeO4LywkQ85vOJyhru7AZk/+c4B6OUh/odQ++SiIJBSbTG2lm1CuV5gV5vXZnf/2AMlu3Zg==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.7.5: + resolution: {integrity: sha512-8PIva4L6BQhiPikUTds9lSFSHXVDAsEvV6QUlgwPsXrtXVQMVi6Sv9p+IxtlWQFvGkdYJUgX9GnK2rC030Xcmw==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.7.5: + resolution: {integrity: sha512-rupskv/mkIUgQXzX/wUiK00mKMorQcK8yzhGFha/D5lm05FEnLx8dsip6rWzMcVpvh+4GUMA56PgtnOgpel2AA==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.7.5: + resolution: {integrity: sha512-G377Gxn6P42RnCzfMyDvsqQV7j69kVHKlhz9J4RhtJOB5+DyY4yYh/w0oTIxZQ4JRMmhjwLu3w9zncMoQ6nNDw==} + cpu: [arm64] + os: [win32] + + turbo@2.7.5: + resolution: {integrity: sha512-7Imdmg37joOloTnj+DPrab9hIaQcDdJ5RwSzcauo/wMOSAgO+A/I/8b3hsGGs6PWQz70m/jkPgdqWsfNKtwwDQ==} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + use-debounce@10.1.0: + resolution: {integrity: sha512-lu87Za35V3n/MyMoEpD5zJv0k7hCn0p+V/fK2kWD+3k2u3kOCwO593UArbczg1fhfs2rqPEnHpULJ3KmGdDzvg==} + engines: {node: '>= 16.0.0'} + peerDependencies: + react: '*' + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.17: + resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.17 + '@vitest/browser-preview': 4.0.17 + '@vitest/browser-webdriverio': 4.0.17 + '@vitest/ui': 4.0.17 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zustand@4.5.7: + resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@dagrejs/dagre@1.1.8': + dependencies: + '@dagrejs/graphlib': 2.2.4 + + '@dagrejs/graphlib@2.2.4': {} + + '@emnapi/runtime@1.8.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + + '@heroicons/react@2.2.0(react@19.2.3)': + dependencies: + react: 19.2.3 + + '@icons-pack/react-simple-icons@13.8.0(react@19.2.3)': + dependencies: + react: 19.2.3 + + '@img/colour@1.0.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.8.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@monaco-editor/loader@1.7.0': + dependencies: + state-local: 1.0.7 + + '@monaco-editor/react@4.7.0(monaco-editor@0.55.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@monaco-editor/loader': 1.7.0 + monaco-editor: 0.55.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@next/env@16.1.3': {} + + '@next/swc-darwin-arm64@16.1.3': + optional: true + + '@next/swc-darwin-x64@16.1.3': + optional: true + + '@next/swc-linux-arm64-gnu@16.1.3': + optional: true + + '@next/swc-linux-arm64-musl@16.1.3': + optional: true + + '@next/swc-linux-x64-gnu@16.1.3': + optional: true + + '@next/swc-linux-x64-musl@16.1.3': + optional: true + + '@next/swc-win32-arm64-msvc@16.1.3': + optional: true + + '@next/swc-win32-x64-msvc@16.1.3': + optional: true + + '@prisma/config@6.19.2': + dependencies: + c12: 3.1.0 + deepmerge-ts: 7.1.5 + effect: 3.18.4 + empathic: 2.0.0 + transitivePeerDependencies: + - magicast + + '@prisma/debug@6.19.2': {} + + '@prisma/dmmf@6.19.2': {} + + '@prisma/driver-adapter-utils@6.19.2': + dependencies: + '@prisma/debug': 6.19.2 + + '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': {} + + '@prisma/engines@6.19.2': + dependencies: + '@prisma/debug': 6.19.2 + '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 + '@prisma/fetch-engine': 6.19.2 + '@prisma/get-platform': 6.19.2 + + '@prisma/fetch-engine@6.19.2': + dependencies: + '@prisma/debug': 6.19.2 + '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 + '@prisma/get-platform': 6.19.2 + + '@prisma/generator-helper@6.19.2': + dependencies: + '@prisma/debug': 6.19.2 + '@prisma/dmmf': 6.19.2 + '@prisma/generator': 6.19.2 + + '@prisma/generator@6.19.2': {} + + '@prisma/get-platform@6.19.2': + dependencies: + '@prisma/debug': 6.19.2 + + '@prisma/internals@6.19.2(typescript@5.9.3)': + dependencies: + '@prisma/config': 6.19.2 + '@prisma/debug': 6.19.2 + '@prisma/dmmf': 6.19.2 + '@prisma/driver-adapter-utils': 6.19.2 + '@prisma/engines': 6.19.2 + '@prisma/fetch-engine': 6.19.2 + '@prisma/generator': 6.19.2 + '@prisma/generator-helper': 6.19.2 + '@prisma/get-platform': 6.19.2 + '@prisma/prisma-schema-wasm': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 + '@prisma/schema-engine-wasm': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 + '@prisma/schema-files-loader': 6.19.2 + arg: 5.0.2 + prompts: 2.4.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - magicast + + '@prisma/prisma-schema-wasm@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': {} + + '@prisma/schema-engine-wasm@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': {} + + '@prisma/schema-files-loader@6.19.2': + dependencies: + '@prisma/prisma-schema-wasm': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 + fs-extra: 11.3.0 + + '@rollup/rollup-android-arm-eabi@4.55.1': + optional: true + + '@rollup/rollup-android-arm64@4.55.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.55.1': + optional: true + + '@rollup/rollup-darwin-x64@4.55.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.55.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.55.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.55.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.55.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.55.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.55.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.55.1': + optional: true + + '@standard-schema/spec@1.1.0': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.1.18': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.4 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.18 + + '@tailwindcss/oxide-android-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide@4.1.18': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + + '@tailwindcss/postcss@4.1.18': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + postcss: 8.5.6 + tailwindcss: 4.1.18 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/d3-color@3.1.3': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/dagre@0.7.53': {} + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + + '@types/node@22.19.7': + dependencies: + undici-types: 6.21.0 + + '@types/react-dom@19.2.3(@types/react@19.2.8)': + dependencies: + '@types/react': 19.2.8 + + '@types/react@19.2.8': + dependencies: + csstype: 3.2.3 + + '@types/trusted-types@2.0.7': + optional: true + + '@vitest/expect@4.0.17': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.17 + '@vitest/utils': 4.0.17 + chai: 6.2.2 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.17(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2))': + dependencies: + '@vitest/spy': 4.0.17 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2) + + '@vitest/pretty-format@4.0.17': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.17': + dependencies: + '@vitest/utils': 4.0.17 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.17': + dependencies: + '@vitest/pretty-format': 4.0.17 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.17': {} + + '@vitest/utils@4.0.17': + dependencies: + '@vitest/pretty-format': 4.0.17 + tinyrainbow: 3.0.3 + + '@xyflow/react@12.10.0(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@xyflow/system': 0.0.74 + classcat: 5.0.5 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + zustand: 4.5.7(@types/react@19.2.8)(react@19.2.3) + transitivePeerDependencies: + - '@types/react' + - immer + + '@xyflow/system@0.0.74': + dependencies: + '@types/d3-drag': 3.0.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-zoom: 3.0.0 + + acorn@8.15.0: {} + + any-promise@1.3.0: {} + + arg@5.0.2: {} + + assertion-error@2.0.1: {} + + autoprefixer@10.4.23(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + caniuse-lite: 1.0.30001765 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + baseline-browser-mapping@2.9.15: {} + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.15 + caniuse-lite: 1.0.30001765 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + + bundle-require@5.1.0(esbuild@0.27.2): + dependencies: + esbuild: 0.27.2 + load-tsconfig: 0.2.5 + + c12@3.1.0: + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 16.6.1 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + + cac@6.7.14: {} + + caniuse-lite@1.0.30001765: {} + + chai@6.2.2: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + classcat@5.0.5: {} + + client-only@0.0.1: {} + + clsx@2.1.1: {} + + commander@4.1.1: {} + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + consola@3.4.2: {} + + csstype@3.2.3: {} + + d3-color@3.1.0: {} + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-ease@3.0.1: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-selection@3.0.0: {} + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deepmerge-ts@7.1.5: {} + + defu@6.1.4: {} + + destr@2.0.5: {} + + detect-libc@2.1.2: {} + + dompurify@3.2.7: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + dotenv@16.6.1: {} + + effect@3.18.4: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 3.23.2 + + electron-to-chromium@1.5.267: {} + + empathic@2.0.0: {} + + enhanced-resolve@5.18.4: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + es-module-lexer@1.7.0: {} + + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + escalade@3.2.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + expect-type@1.3.0: {} + + exsolve@1.0.8: {} + + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.21 + mlly: 1.8.0 + rollup: 4.55.1 + + fraction.js@5.3.4: {} + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + + graceful-fs@4.2.11: {} + + html-to-image@1.11.13: {} + + jiti@2.6.1: {} + + joycon@3.1.1: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kleur@3.0.3: {} + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + load-tsconfig@0.2.5: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + marked@14.0.0: {} + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + + monaco-editor@0.55.1: + dependencies: + dompurify: 3.2.7 + marked: 14.0.0 + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + next@16.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@next/env': 16.1.3 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.9.15 + caniuse-lite: 1.0.30001765 + postcss: 8.4.31 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + styled-jsx: 5.1.6(react@19.2.3) + optionalDependencies: + '@next/swc-darwin-arm64': 16.1.3 + '@next/swc-darwin-x64': 16.1.3 + '@next/swc-linux-arm64-gnu': 16.1.3 + '@next/swc-linux-arm64-musl': 16.1.3 + '@next/swc-linux-x64-gnu': 16.1.3 + '@next/swc-linux-x64-musl': 16.1.3 + '@next/swc-win32-arm64-msvc': 16.1.3 + '@next/swc-win32-x64-msvc': 16.1.3 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-fetch-native@1.6.7: {} + + node-releases@2.0.27: {} + + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.2 + + object-assign@4.1.1: {} + + obug@2.1.1: {} + + ohash@2.0.11: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + pirates@4.0.7: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.6.1 + postcss: 8.5.6 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@3.8.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + pure-rand@6.1.0: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + + react-dom@19.2.3(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.27.0 + + react@19.2.3: {} + + readdirp@4.1.2: {} + + resolve-from@5.0.0: {} + + rollup@4.55.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.55.1 + '@rollup/rollup-android-arm64': 4.55.1 + '@rollup/rollup-darwin-arm64': 4.55.1 + '@rollup/rollup-darwin-x64': 4.55.1 + '@rollup/rollup-freebsd-arm64': 4.55.1 + '@rollup/rollup-freebsd-x64': 4.55.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 + '@rollup/rollup-linux-arm-musleabihf': 4.55.1 + '@rollup/rollup-linux-arm64-gnu': 4.55.1 + '@rollup/rollup-linux-arm64-musl': 4.55.1 + '@rollup/rollup-linux-loong64-gnu': 4.55.1 + '@rollup/rollup-linux-loong64-musl': 4.55.1 + '@rollup/rollup-linux-ppc64-gnu': 4.55.1 + '@rollup/rollup-linux-ppc64-musl': 4.55.1 + '@rollup/rollup-linux-riscv64-gnu': 4.55.1 + '@rollup/rollup-linux-riscv64-musl': 4.55.1 + '@rollup/rollup-linux-s390x-gnu': 4.55.1 + '@rollup/rollup-linux-x64-gnu': 4.55.1 + '@rollup/rollup-linux-x64-musl': 4.55.1 + '@rollup/rollup-openbsd-x64': 4.55.1 + '@rollup/rollup-openharmony-arm64': 4.55.1 + '@rollup/rollup-win32-arm64-msvc': 4.55.1 + '@rollup/rollup-win32-ia32-msvc': 4.55.1 + '@rollup/rollup-win32-x64-gnu': 4.55.1 + '@rollup/rollup-win32-x64-msvc': 4.55.1 + fsevents: 2.3.3 + + scheduler@0.27.0: {} + + semver@7.7.3: + optional: true + + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + + siginfo@2.0.0: {} + + sisteransi@1.0.5: {} + + source-map-js@1.2.1: {} + + source-map@0.7.6: {} + + stackback@0.0.2: {} + + state-local@1.0.7: {} + + std-env@3.10.0: {} + + styled-jsx@5.1.6(react@19.2.3): + dependencies: + client-only: 0.0.1 + react: 19.2.3 + + sucrase@3.35.1: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.15 + ts-interface-checker: 0.1.13 + + tailwind-merge@2.6.0: {} + + tailwindcss@4.1.18: {} + + tapable@2.3.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyrainbow@3.0.3: {} + + tree-kill@1.2.2: {} + + ts-interface-checker@0.1.13: {} + + tslib@2.8.1: {} + + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3): + dependencies: + bundle-require: 5.1.0(esbuild@0.27.2) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.3 + esbuild: 0.27.2 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6) + resolve-from: 5.0.0 + rollup: 4.55.1 + source-map: 0.7.6 + sucrase: 3.35.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.6 + typescript: 5.9.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + turbo-darwin-64@2.7.5: + optional: true + + turbo-darwin-arm64@2.7.5: + optional: true + + turbo-linux-64@2.7.5: + optional: true + + turbo-linux-arm64@2.7.5: + optional: true + + turbo-windows-64@2.7.5: + optional: true + + turbo-windows-arm64@2.7.5: + optional: true + + turbo@2.7.5: + optionalDependencies: + turbo-darwin-64: 2.7.5 + turbo-darwin-arm64: 2.7.5 + turbo-linux-64: 2.7.5 + turbo-linux-arm64: 2.7.5 + turbo-windows-64: 2.7.5 + turbo-windows-arm64: 2.7.5 + + typescript@5.9.3: {} + + ufo@1.6.3: {} + + undici-types@6.21.0: {} + + universalify@2.0.1: {} + + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + use-debounce@10.1.0(react@19.2.3): + dependencies: + react: 19.2.3 + + use-sync-external-store@1.6.0(react@19.2.3): + dependencies: + react: 19.2.3 + + vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2): + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.55.1 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.19.7 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + + vitest@4.0.17(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2): + dependencies: + '@vitest/expect': 4.0.17 + '@vitest/mocker': 4.0.17(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)) + '@vitest/pretty-format': 4.0.17 + '@vitest/runner': 4.0.17 + '@vitest/snapshot': 4.0.17 + '@vitest/spy': 4.0.17 + '@vitest/utils': 4.0.17 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.19.7 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + zod@3.25.76: {} + + zustand@4.5.7(@types/react@19.2.8)(react@19.2.3): + dependencies: + use-sync-external-store: 1.6.0(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.8 + react: 19.2.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..e9b0dad --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - 'apps/*' + - 'packages/*' diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..5326016 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "allowJs": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true + }, + "exclude": ["node_modules"] +} diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..c499b68 --- /dev/null +++ b/turbo.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://turbo.build/schema.json", + "globalDependencies": ["**/.env.*local"], + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": [".next/**", "!.next/cache/**", "dist/**"] + }, + "dev": { + "cache": false, + "persistent": true + }, + "lint": { + "dependsOn": ["^build"] + }, + "test": { + "dependsOn": ["^build"] + }, + "typecheck": { + "dependsOn": ["^build"] + } + } +}