From d5a27d488966a9a03aa34d77df611adb9899559c Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 5 Dec 2024 12:11:31 +0100 Subject: [PATCH 01/19] setup: installation vite svelte and tailwind in the back environment --- microblogging/manage.py | 22 + .../microblogging_project/__init__.py | 0 .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 220 bytes .../__pycache__/settings.cpython-313.pyc | Bin 0 -> 3443 bytes .../supabase_utils.cpython-313.pyc | Bin 0 -> 1151 bytes .../__pycache__/urls.cpython-313.pyc | Bin 0 -> 1646 bytes .../__pycache__/views.cpython-313.pyc | Bin 0 -> 1129 bytes .../__pycache__/wsgi.cpython-313.pyc | Bin 0 -> 720 bytes microblogging/microblogging_project/asgi.py | 16 + .../microblogging_project/frontend/.gitignore | 24 + .../frontend/.vscode/extensions.json | 3 + .../microblogging_project/frontend/README.md | 47 + .../microblogging_project/frontend/index.html | 13 + .../frontend/jsconfig.json | 32 + .../frontend/package-lock.json | 2724 +++++++++++++++++ .../frontend/package.json | 19 + .../frontend/postcss.config.cjs | 6 + .../frontend/public/vite.svg | 1 + .../frontend/src/App.svelte | 12 + .../frontend/src/TailwindCSS.svelte | 5 + .../frontend/src/app.css | 3 + .../frontend/src/assets/svelte.svg | 1 + .../frontend/src/lib/Counter.svelte | 10 + .../frontend/src/main.js | 9 + .../frontend/src/vite-env.d.ts | 2 + .../frontend/svelte.config.js | 7 + .../frontend/tailwind.config.cjs | 8 + .../frontend/vite.config.js | 7 + .../microblogging_project/settings.py | 144 + .../microblogging_project/supabase_utils.py | 21 + .../templates/index.html | 16 + microblogging/microblogging_project/urls.py | 29 + microblogging/microblogging_project/views.py | 16 + microblogging/microblogging_project/wsgi.py | 16 + microblogging/package-lock.json | 6 + microblogging/requirements.txt | 12 + 36 files changed, 3231 insertions(+) create mode 100755 microblogging/manage.py create mode 100644 microblogging/microblogging_project/__init__.py create mode 100644 microblogging/microblogging_project/__pycache__/__init__.cpython-313.pyc create mode 100644 microblogging/microblogging_project/__pycache__/settings.cpython-313.pyc create mode 100644 microblogging/microblogging_project/__pycache__/supabase_utils.cpython-313.pyc create mode 100644 microblogging/microblogging_project/__pycache__/urls.cpython-313.pyc create mode 100644 microblogging/microblogging_project/__pycache__/views.cpython-313.pyc create mode 100644 microblogging/microblogging_project/__pycache__/wsgi.cpython-313.pyc create mode 100644 microblogging/microblogging_project/asgi.py create mode 100644 microblogging/microblogging_project/frontend/.gitignore create mode 100644 microblogging/microblogging_project/frontend/.vscode/extensions.json create mode 100644 microblogging/microblogging_project/frontend/README.md create mode 100644 microblogging/microblogging_project/frontend/index.html create mode 100644 microblogging/microblogging_project/frontend/jsconfig.json create mode 100644 microblogging/microblogging_project/frontend/package-lock.json create mode 100644 microblogging/microblogging_project/frontend/package.json create mode 100644 microblogging/microblogging_project/frontend/postcss.config.cjs create mode 100644 microblogging/microblogging_project/frontend/public/vite.svg create mode 100644 microblogging/microblogging_project/frontend/src/App.svelte create mode 100644 microblogging/microblogging_project/frontend/src/TailwindCSS.svelte create mode 100644 microblogging/microblogging_project/frontend/src/app.css create mode 100644 microblogging/microblogging_project/frontend/src/assets/svelte.svg create mode 100644 microblogging/microblogging_project/frontend/src/lib/Counter.svelte create mode 100644 microblogging/microblogging_project/frontend/src/main.js create mode 100644 microblogging/microblogging_project/frontend/src/vite-env.d.ts create mode 100644 microblogging/microblogging_project/frontend/svelte.config.js create mode 100644 microblogging/microblogging_project/frontend/tailwind.config.cjs create mode 100644 microblogging/microblogging_project/frontend/vite.config.js create mode 100644 microblogging/microblogging_project/settings.py create mode 100644 microblogging/microblogging_project/supabase_utils.py create mode 100644 microblogging/microblogging_project/templates/index.html create mode 100644 microblogging/microblogging_project/urls.py create mode 100644 microblogging/microblogging_project/views.py create mode 100644 microblogging/microblogging_project/wsgi.py create mode 100644 microblogging/package-lock.json create mode 100644 microblogging/requirements.txt diff --git a/microblogging/manage.py b/microblogging/manage.py new file mode 100755 index 00000000..3af7f2d2 --- /dev/null +++ b/microblogging/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'microblogging.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/microblogging/microblogging_project/__init__.py b/microblogging/microblogging_project/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/microblogging/microblogging_project/__pycache__/__init__.cpython-313.pyc b/microblogging/microblogging_project/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7e4ee538f81233568bf035cfb7321c0d50f7cda GIT binary patch literal 220 zcmey&%ge<81U1k7(n0iN5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa|L#erR!OQL%nv zQC?zcN=9O3exANdesXDUYFa0S4}=Z%Tr`cSwnrtT<>&NZi@kncvLL$1dMT zqag~O=YM%rogbs9pY4hJ&^_Y)s+XevK_QAz$b-BOJ>PhVH)Yelhd$zSMnCbx=zlo! zO@IVa)OKKjTIs37%vXxJp#8BgLFkJmN)vr)ml{Czmy#~GKQ2&cWX02+lkoP(WCCY0 zk!|k+wH z0tigsic6K2U8+BB$5C_zGGsrj2hk`7NMnyYw>&7$_*oCRjK;|fN}vgpM3+A5*`(_k znnKg)G84GvAy?20x&k;eXx4epIq&&f9@bB0(N!{sQe+ zrl#O$)MT(LEBH%r1BYsc(a?X*vXWNOnXVDng^E^ZvC0A>YiJF*qO-2wY!}|B;nZ$Z zQBsPm8!2tKzb{dhzz~*6>V>E@vHt(qB6xSe(7)}}E_p2frfAd(K!g=dlmtmLu=>J^ zpsh`Al|#I+Rmu;{9`aAEiL*7tXG(lo0A_h9U?#h}WGb3!5P64jLTXM7bDKuZyfVbJ zRj_IphYhToQ$ve7)^&*ShYNLB5UZduGpu1iRw{Nb^rfJg?yc5kNmB5ENHC-0N|VUO zA%l9v#@U*AXBez!o*B?bUEYA!(uYPM&2>#>GS2WnM0K*uWZ?B!#s>qUzZ~*Kgy0SO z!NDBjCRdy)98etIgd3_s<&AFm2DI*8un9%3?C*({eP{*d_iIF~<6^@ud3``Hajw;v zCQ)>g?O_?X-cX?1m>mGYs^m5UlXV)e+*^k1o&#ZBJ>5z;)$s>Ifc~j~&l=H}M$8+- z_#a9!65eT6&6}SfN$_*%Cd2$iPxh>a?SNl^Y$w9JJtTY<wsHPbB=cYhb5!!ZOo zUGiJORW9?8FJvu$HdjIx&24T94izkJmUG1dGUv}ljXBV(G9xw`kTs_yte}K<#inAI zb3JFJoqi@7nr>7H)}JdD?b7C)OEILT)+AY}AMVLDd8cu(UuhcF_*wUFatJ*sma^ue zc%Y|mrExQT05MG8W*VBNV8ZClhPWf@7`9lq{C8LG++GS;0lu)FEAW=Tz-_>L3-Kk3 zcA+f)gCZ)!nN%#5NdgWi^TAMzoepS-x_+P$Nq|F8mYj_;TRJA3VIMqA10%UEE27=u zkGm2YG4FpW(uS;Lvs^}7wf+4Hdv@Vie1C^YMs$dwNfMzET0>XvV- zoH2vlB4Mp?mvBxy^UAq$V0Vdguu7~17s+4=)HMk!IKm(3p)v##ij)9W4LjB9c8p-mjTkBSo%jb(v_^eSs99G}nrlX?&F zqO5OOyP9=YB&yhyYT}`$vRSPHWuY26%Q;+DltjV6m71VeYS3?NRW^Xd?r7S6+NpxH z`|Xpqk6!j%Wu&|DKhHe-I$#=y7JUzDq^aQht*)0F4( zk5ueOYV;>+{%wHrME)G@1gK!_yZvwX|5R`J+Ennn@E^l(sN^w~{1-KOIyU~p;rEBH z=TF9Nv?A?uGtiI3|3?4y{+sZ%u@N$dp#Hd*Oho|2^J(~LR zB${r8z|v^6HF6qHw4(1q!GyOJdzYYNURX&|@$0Qfho+Ler#(LLYU<_GtJ#;cuWLs) zxRdeKqj;vBoIZ`D-cfcYIkFMT3PTo73_}X?a PL`|+7Qwj1LNX>r%vW+dJ literal 0 HcmV?d00001 diff --git a/microblogging/microblogging_project/__pycache__/supabase_utils.cpython-313.pyc b/microblogging/microblogging_project/__pycache__/supabase_utils.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0c61334a3e8d9e665e15396c2fdf7b4000efc57 GIT binary patch literal 1151 zcmah|&1(}u6rcUbN1LSEHefJbV(DcM$x_6F(kkf(6f0G-29*k7vzctRO?K9qT_K@` zc+-05sgPr@f=B<5_GDNq2%fxEbMxezP1Cf3^ufIM=FOX#_kO>bK`J$gK+NA{*xzfszMNF*z;`1Vx4Kjb(^+ncs6mgZAP3=QNy)& zaJ!RSA&!R~FaNCV;viM@y#}FnC){KTqYA)AU`Q|q+n^577U-c&L4Rcgl}V1U1y~HF zG(uq%06T}u!q!FKx_D1?#IjhLxRi44-aWVTNR>AKOlTA{PkXbVL4UCZHfoqMH4-HC z^3&pSQD3W+OOJy%#jkzHV}WF0k8&IXnYRty#<5d#iS2lSf> zsYmNa_m3wF-IY@%bFjO=+gtgRIZ+n6>-|LfVCntRhlj^y0=O@b2RkSGIr^bf`C2HG-W08VMoI2%* zg~eWaZyReb!!|;GD8Ke23Qri;7GG?Un%~3^Xcm_EFJh~p&Llw)z9Qut%6(TdUzGV1 qWxkv2kKMBbo=FK_MH(T zinb2gd(fwGH|&iV79ovcmogZIKBI>N+UtdJ4-Of9Kz!j?)_$MB`y)0OVj&2N`F%JD zxqyt01mRHT;!sfdZAcz*2kxpwlo1%lGG{c+J{%Ct3FL&-EhxXf5JO%^D4;%ff(JP6 z(eyZ}%orSe^7^2W|%e#4!w`A!VWt zVVBVeMn@hV4rkz0rsiLt@l^$?fQ1U>R#|L+vr^fb)zzmF*@7{S$mbOmSE|hDK{b^`p zpp+upqqtr=a??QoRgsmK|3OPlha)vB9>q=D&46$R+Lm1@;`q3&tbNOCxc z!dM2Ta{Pt-BWqNfB+&vVLdc4^jPqQ`>*OEj^%it&cZu-(wEzo@5=&1!HBre_r;eAy zm=h*u40}4$lmsNXFb>FL$t}rSIEqLtJVvSbs(LwD@;r%oUUF$>hV)Rd@Q`Jty2M^^ zh{-1jux0g=UtCkBvn7SRJ5SNo#XHj~SV66tJQO4`mDx#oUV(0Jva%ppBdnzMSnmGz ze&e<$dz-9GPM3%LO#-=PEP14o#}cog*U5slH#tZ0t5HHvV6 zJwg1w$NfH~1JnzJgwP?S4{Q2msHIPXyz~A;^xA7t8)7CMd>zz(T4#8a6h4b+FdC3A zn0nn*i}{c8=VjI~jPp#{F#m?Y_+SFAPQc{}fD`c1c^>47Cu=|7cvgQ}e|GEXtv}2U z|1=9H@1N$*)@tLm+Vj1!xvh}()3?vApz#&-JQ|xj3Ryil`03sc_f8*;&C1JSuADiy nK+Zn-^vqr#+v~sf&z!qs=kD*u*lCW<*14T4?-@^Qrk>_kjL6%; literal 0 HcmV?d00001 diff --git a/microblogging/microblogging_project/__pycache__/views.cpython-313.pyc b/microblogging/microblogging_project/__pycache__/views.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e19f8d26a730b785b19accb0bfe9c7eaf8c0a8c9 GIT binary patch literal 1129 zcmZuwK~EDw6rR~`+l2xPHi3u{H;REZ!iup64IwcSVoFk#wTTIbX4@{?m3FtzOhpVq zOf=$2FC;w@Pw;ObJxDes9z1a)_7C{pwnZSmq_1zj_h#nJ_r7iQ_xBR8AD>@135k&3 zxabI7pnaQvwro0$U$5;&F=qO=vGX`EU>GF|kdgQO)v1bGVE$CT>^qL@Ia7J7uxfK)qsm^{+TJGuMSr~^Y<3JpuM>B!^{F(WZp)eO% z0=ym#VijAI{31)j5@z8R1dBn~9#e$%V?2O4g>|&Wae|trF%{v#j+p*2HUcnqz){^> z0atkojFiu zPUA$;*bp3XfmRuSP?4h$oL6KPKB6uKpg$?|zSjjkzndk5k0kOf-`=yNWlm?$-gTsd(JSjZ|XfQdx2z_3)426Col+8oGU!!DZ7Ui zV{W2#t{xE*L8!dwn2H#dOd({13G&c;KoXc}AQ8(`m}X39GEp%n?(cHgUehY>#7qZe zEVzPEG}^n{z0Q8%?;IX>dmTS`vEM#=zH{2Rb_bqfTARC2&1z8%0s|5Rg$=5>wZQR0 zGlf?cmyT&yRGAoa38HX~Fk(YGN_A1Y()R9ikzje>tFKGQET0d`i=bO(yqwe?m#;5w-vzokVME?LD CliAw< literal 0 HcmV?d00001 diff --git a/microblogging/microblogging_project/asgi.py b/microblogging/microblogging_project/asgi.py new file mode 100644 index 00000000..2e045bcd --- /dev/null +++ b/microblogging/microblogging_project/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for microblogging project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'microblogging.settings') + +application = get_asgi_application() diff --git a/microblogging/microblogging_project/frontend/.gitignore b/microblogging/microblogging_project/frontend/.gitignore new file mode 100644 index 00000000..a547bf36 --- /dev/null +++ b/microblogging/microblogging_project/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/microblogging/microblogging_project/frontend/.vscode/extensions.json b/microblogging/microblogging_project/frontend/.vscode/extensions.json new file mode 100644 index 00000000..bdef8201 --- /dev/null +++ b/microblogging/microblogging_project/frontend/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/microblogging/microblogging_project/frontend/README.md b/microblogging/microblogging_project/frontend/README.md new file mode 100644 index 00000000..382941e0 --- /dev/null +++ b/microblogging/microblogging_project/frontend/README.md @@ -0,0 +1,47 @@ +# Svelte + Vite + +This template should help get you started developing with Svelte in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). + +## Need an official Svelte framework? + +Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. + +## Technical considerations + +**Why use this over SvelteKit?** + +- It brings its own routing solution which might not be preferable for some users. +- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. + +This template contains as little as possible to get started with Vite + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. + +Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. + +**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** + +Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. + +**Why include `.vscode/extensions.json`?** + +Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. + +**Why enable `checkJs` in the JS template?** + +It is likely that most cases of changing variable types in runtime are likely to be accidental, rather than deliberate. This provides advanced typechecking out of the box. Should you like to take advantage of the dynamically-typed nature of JavaScript, it is trivial to change the configuration. + +**Why is HMR not preserving my local component state?** + +HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/sveltejs/svelte-hmr/tree/master/packages/svelte-hmr#preservation-of-local-state). + +If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. + +```js +// store.js +// An extremely simple external store +import { writable } from 'svelte/store' +export default writable(0) +``` diff --git a/microblogging/microblogging_project/frontend/index.html b/microblogging/microblogging_project/frontend/index.html new file mode 100644 index 00000000..feaf27cc --- /dev/null +++ b/microblogging/microblogging_project/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + Svelte + + +
+ + + diff --git a/microblogging/microblogging_project/frontend/jsconfig.json b/microblogging/microblogging_project/frontend/jsconfig.json new file mode 100644 index 00000000..bbf2c809 --- /dev/null +++ b/microblogging/microblogging_project/frontend/jsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "moduleResolution": "bundler", + "target": "ESNext", + "module": "ESNext", + /** + * svelte-preprocess cannot figure out whether you have + * a value or a type, so tell TypeScript to enforce using + * `import type` instead of `import` for Types. + */ + "verbatimModuleSyntax": true, + "isolatedModules": true, + "resolveJsonModule": true, + /** + * To have warnings / errors of the Svelte compiler at the + * correct position, enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable this if you'd like to use dynamic types. + */ + "checkJs": true + }, + /** + * Use global.d.ts instead of compilerOptions.types + * to avoid limiting type declarations. + */ + "include": ["./src/**/*.d.ts", "./src/**/*.js", "./src/**/*.svelte"] +} diff --git a/microblogging/microblogging_project/frontend/package-lock.json b/microblogging/microblogging_project/frontend/package-lock.json new file mode 100644 index 00000000..da44ca88 --- /dev/null +++ b/microblogging/microblogging_project/frontend/package-lock.json @@ -0,0 +1,2724 @@ +{ + "name": "book-microblogging", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "book-microblogging", + "version": "0.0.0", + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "svelte": "^5.2.7", + "tailwindcss": "^3.4.16", + "vite": "^6.0.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz", + "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz", + "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz", + "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz", + "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz", + "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz", + "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz", + "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz", + "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz", + "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz", + "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz", + "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz", + "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz", + "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz", + "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz", + "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz", + "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz", + "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz", + "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.1.tgz", + "integrity": "sha512-D5l5+STmywGoLST07T9mrqqFFU+xgv5fqyTWM+VbxTvQ6jujNn4h3lQNCvlwVYs4Erov8i0K5Rwr3LQtmBYmBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^4.0.0", + "debug": "^4.3.7", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.13", + "vitefu": "^1.0.3" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz", + "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.7" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "svelte": "^5.0.0", + "vite": "^6.0.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001686", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", + "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.70", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.70.tgz", + "integrity": "sha512-P6FPqAWIZrC3sHDAwBitJBs7N7IF58m39XVny7DFseQXK2eiMn7nNQizFf63mWDDUnFvaqsM8FI0+ZZfLkdUGA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/esm-env": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.1.tgz", + "integrity": "sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng==", + "dev": true, + "license": "MIT" + }, + "node_modules/esrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.3.tgz", + "integrity": "sha512-ZlQmCCK+n7SGoqo7DnfKaP1sJZa49P01/dXzmjCASSo04p72w8EksT2NMK8CEX8DhKsfJXANioIw8VyHNsBfvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz", + "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.28.0", + "@rollup/rollup-android-arm64": "4.28.0", + "@rollup/rollup-darwin-arm64": "4.28.0", + "@rollup/rollup-darwin-x64": "4.28.0", + "@rollup/rollup-freebsd-arm64": "4.28.0", + "@rollup/rollup-freebsd-x64": "4.28.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", + "@rollup/rollup-linux-arm-musleabihf": "4.28.0", + "@rollup/rollup-linux-arm64-gnu": "4.28.0", + "@rollup/rollup-linux-arm64-musl": "4.28.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", + "@rollup/rollup-linux-riscv64-gnu": "4.28.0", + "@rollup/rollup-linux-s390x-gnu": "4.28.0", + "@rollup/rollup-linux-x64-gnu": "4.28.0", + "@rollup/rollup-linux-x64-musl": "4.28.0", + "@rollup/rollup-win32-arm64-msvc": "4.28.0", + "@rollup/rollup-win32-ia32-msvc": "4.28.0", + "@rollup/rollup-win32-x64-msvc": "4.28.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.6.2.tgz", + "integrity": "sha512-fyq4gCUW9OoR9X8I1BzmMVIOxzTlyCLI5gArRRTUuJj+jIUSHtud7c+MguQNGLv7Z/rGWxJyG9ZRFd/cFp/klA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "esm-env": "^1.2.1", + "esrap": "^1.2.3", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.16", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz", + "integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.2.tgz", + "integrity": "sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "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 + } + } + }, + "node_modules/vitefu": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.4.tgz", + "integrity": "sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/microblogging/microblogging_project/frontend/package.json b/microblogging/microblogging_project/frontend/package.json new file mode 100644 index 00000000..2aa02a09 --- /dev/null +++ b/microblogging/microblogging_project/frontend/package.json @@ -0,0 +1,19 @@ +{ + "name": "book-microblogging", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "svelte": "^5.2.7", + "tailwindcss": "^3.4.16", + "vite": "^6.0.1" + } +} diff --git a/microblogging/microblogging_project/frontend/postcss.config.cjs b/microblogging/microblogging_project/frontend/postcss.config.cjs new file mode 100644 index 00000000..12a703d9 --- /dev/null +++ b/microblogging/microblogging_project/frontend/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/microblogging/microblogging_project/frontend/public/vite.svg b/microblogging/microblogging_project/frontend/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/microblogging/microblogging_project/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/microblogging/microblogging_project/frontend/src/App.svelte b/microblogging/microblogging_project/frontend/src/App.svelte new file mode 100644 index 00000000..6ef942d2 --- /dev/null +++ b/microblogging/microblogging_project/frontend/src/App.svelte @@ -0,0 +1,12 @@ + + + + +
+

Coucou bisous

+
+ + diff --git a/microblogging/microblogging_project/frontend/src/TailwindCSS.svelte b/microblogging/microblogging_project/frontend/src/TailwindCSS.svelte new file mode 100644 index 00000000..3fe3d776 --- /dev/null +++ b/microblogging/microblogging_project/frontend/src/TailwindCSS.svelte @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/microblogging/microblogging_project/frontend/src/app.css b/microblogging/microblogging_project/frontend/src/app.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/microblogging/microblogging_project/frontend/src/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/microblogging/microblogging_project/frontend/src/assets/svelte.svg b/microblogging/microblogging_project/frontend/src/assets/svelte.svg new file mode 100644 index 00000000..c5e08481 --- /dev/null +++ b/microblogging/microblogging_project/frontend/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/microblogging/microblogging_project/frontend/src/lib/Counter.svelte b/microblogging/microblogging_project/frontend/src/lib/Counter.svelte new file mode 100644 index 00000000..770c9226 --- /dev/null +++ b/microblogging/microblogging_project/frontend/src/lib/Counter.svelte @@ -0,0 +1,10 @@ + + + diff --git a/microblogging/microblogging_project/frontend/src/main.js b/microblogging/microblogging_project/frontend/src/main.js new file mode 100644 index 00000000..458c7a8a --- /dev/null +++ b/microblogging/microblogging_project/frontend/src/main.js @@ -0,0 +1,9 @@ +import { mount } from 'svelte' +import './app.css' +import App from './App.svelte' + +const app = mount(App, { + target: document.getElementById('app'), +}) + +export default app diff --git a/microblogging/microblogging_project/frontend/src/vite-env.d.ts b/microblogging/microblogging_project/frontend/src/vite-env.d.ts new file mode 100644 index 00000000..4078e747 --- /dev/null +++ b/microblogging/microblogging_project/frontend/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/microblogging/microblogging_project/frontend/svelte.config.js b/microblogging/microblogging_project/frontend/svelte.config.js new file mode 100644 index 00000000..b0683fd2 --- /dev/null +++ b/microblogging/microblogging_project/frontend/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +} diff --git a/microblogging/microblogging_project/frontend/tailwind.config.cjs b/microblogging/microblogging_project/frontend/tailwind.config.cjs new file mode 100644 index 00000000..4b7c46ab --- /dev/null +++ b/microblogging/microblogging_project/frontend/tailwind.config.cjs @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./index.html", "./src/**/*.{js,jsx,html,svelte}"], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/microblogging/microblogging_project/frontend/vite.config.js b/microblogging/microblogging_project/frontend/vite.config.js new file mode 100644 index 00000000..d32eba1d --- /dev/null +++ b/microblogging/microblogging_project/frontend/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [svelte()], +}) diff --git a/microblogging/microblogging_project/settings.py b/microblogging/microblogging_project/settings.py new file mode 100644 index 00000000..ae673b08 --- /dev/null +++ b/microblogging/microblogging_project/settings.py @@ -0,0 +1,144 @@ +""" +Django settings for microblogging project. + +Generated by 'django-admin startproject' using Django 4.2.16. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +from pathlib import Path +import environ +import os +from dotenv import load_dotenv + +# Load environment variables from .env file +load_dotenv() + +# Access environment variables +env = environ.Env() +environ.Env.read_env() + +SUPABASE_URL = os.getenv('SUPABASE_URL') +SUPABASE_KEY = os.getenv('SUPABASE_KEY') + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.getenv('SUPABASE_SECRET_KEY') + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'microblogging.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [os.path.join(BASE_DIR, 'microblogging/templates')], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + 'django.template.context_processors.static', + ], + }, + }, +] + +WSGI_APPLICATION = 'microblogging.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'postgres', + 'USER': 'postgres.rhnhdilmyjihibpwkcut', + 'PASSWORD': os.getenv('SUPABASE_PASSWORD'), + 'HOST': 'aws-0-eu-west-3.pooler.supabase.com', + 'PORT': '6543', + + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = 'static/' +STATIC_ROOT = BASE_DIR / 'staticfiles' +STATICFILES_DIRS = [BASE_DIR / "microblogging/frontend/dist"] + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/microblogging/microblogging_project/supabase_utils.py b/microblogging/microblogging_project/supabase_utils.py new file mode 100644 index 00000000..e4ad5191 --- /dev/null +++ b/microblogging/microblogging_project/supabase_utils.py @@ -0,0 +1,21 @@ +import requests +from django.conf import settings + +SUPABASE_URL = settings.SUPABASE_URL +SUPABASE_KEY = settings.SUPABASE_KEY + +headers = { +"apikey": SUPABASE_KEY, +"Content-Type": "application/json", +"Authorization": f"Bearer {SUPABASE_KEY}" +} + +def fetch_from_supabase(endpoint): + url = f"{SUPABASE_URL}/rest/v1/{endpoint}" + response = requests.get(url, headers=headers) + return response.json() + +def insert_to_supabase(endpoint, data): + url = f"{SUPABASE_URL}/rest/v1/{endpoint}" + response = requests.post(url, json=data, headers=headers) + return response.json() \ No newline at end of file diff --git a/microblogging/microblogging_project/templates/index.html b/microblogging/microblogging_project/templates/index.html new file mode 100644 index 00000000..f810e146 --- /dev/null +++ b/microblogging/microblogging_project/templates/index.html @@ -0,0 +1,16 @@ + + + + + + Django + Svelte + {% load static %} + + + +
+ + + + + diff --git a/microblogging/microblogging_project/urls.py b/microblogging/microblogging_project/urls.py new file mode 100644 index 00000000..250b7bb5 --- /dev/null +++ b/microblogging/microblogging_project/urls.py @@ -0,0 +1,29 @@ +""" +URL configuration for microblogging project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path +from . import views +from django.conf import settings +from django.conf.urls.static import static + +urlpatterns = [ + path('admin/', admin.site.urls), + path('fetch-data/', views.fetch_data_view, name='fetch_data'), + path('insert-data/', views.insert_data_view, name='insert_data'), + path('', views.index, name='index'), +] + static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS[0]) + diff --git a/microblogging/microblogging_project/views.py b/microblogging/microblogging_project/views.py new file mode 100644 index 00000000..3a1e3509 --- /dev/null +++ b/microblogging/microblogging_project/views.py @@ -0,0 +1,16 @@ +from django.http import JsonResponse +from .supabase_utils import fetch_from_supabase, insert_to_supabase +from django.shortcuts import render + +def fetch_data_view(request): + data = fetch_from_supabase('users') + return JsonResponse(data, safe=False) + +def insert_data_view(request): + if request.method == 'POST': + data = request.POST.dict() + response = insert_to_supabase('users', data) + return JsonResponse(response, safe=False) + +def index(request): + return render(request, 'index.html') diff --git a/microblogging/microblogging_project/wsgi.py b/microblogging/microblogging_project/wsgi.py new file mode 100644 index 00000000..279b5a95 --- /dev/null +++ b/microblogging/microblogging_project/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for microblogging project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'microblogging.settings') + +application = get_wsgi_application() diff --git a/microblogging/package-lock.json b/microblogging/package-lock.json new file mode 100644 index 00000000..f8f4862a --- /dev/null +++ b/microblogging/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "microblogging-parent", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/microblogging/requirements.txt b/microblogging/requirements.txt new file mode 100644 index 00000000..4182583e --- /dev/null +++ b/microblogging/requirements.txt @@ -0,0 +1,12 @@ +asgiref==3.8.1 +certifi==2024.8.30 +charset-normalizer==3.4.0 +Django==4.2.16 +django-environ==0.11.2 +idna==3.10 +psycopg2==2.9.10 +python-dotenv==1.0.1 +requests==2.32.3 +sqlparse==0.5.2 +typing_extensions==4.12.2 +urllib3==2.2.3 From c0f8a0f9eb17b8e028c3abf650d85420f00cbf04 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 5 Dec 2024 12:17:29 +0100 Subject: [PATCH 02/19] Removed renamed file --- microblogging-parent/.DS_Store | Bin 6148 -> 0 bytes microblogging-parent/manage.py | 22 --- .../microblogging/__init__.py | 0 .../__pycache__/__init__.cpython-313.pyc | Bin 220 -> 0 bytes .../__pycache__/settings.cpython-313.pyc | Bin 3163 -> 0 bytes .../supabase_utils.cpython-313.pyc | Bin 1151 -> 0 bytes .../__pycache__/urls.cpython-313.pyc | Bin 1328 -> 0 bytes .../__pycache__/views.cpython-313.pyc | Bin 927 -> 0 bytes .../__pycache__/wsgi.cpython-313.pyc | Bin 720 -> 0 bytes microblogging-parent/microblogging/asgi.py | 16 -- .../microblogging/settings.py | 141 ------------------ .../microblogging/supabase_utils.py | 21 --- microblogging-parent/microblogging/urls.py | 25 ---- microblogging-parent/microblogging/views.py | 12 -- microblogging-parent/microblogging/wsgi.py | 16 -- microblogging-parent/requirements.txt | 12 -- 16 files changed, 265 deletions(-) delete mode 100644 microblogging-parent/.DS_Store delete mode 100755 microblogging-parent/manage.py delete mode 100644 microblogging-parent/microblogging/__init__.py delete mode 100644 microblogging-parent/microblogging/__pycache__/__init__.cpython-313.pyc delete mode 100644 microblogging-parent/microblogging/__pycache__/settings.cpython-313.pyc delete mode 100644 microblogging-parent/microblogging/__pycache__/supabase_utils.cpython-313.pyc delete mode 100644 microblogging-parent/microblogging/__pycache__/urls.cpython-313.pyc delete mode 100644 microblogging-parent/microblogging/__pycache__/views.cpython-313.pyc delete mode 100644 microblogging-parent/microblogging/__pycache__/wsgi.cpython-313.pyc delete mode 100644 microblogging-parent/microblogging/asgi.py delete mode 100644 microblogging-parent/microblogging/settings.py delete mode 100644 microblogging-parent/microblogging/supabase_utils.py delete mode 100644 microblogging-parent/microblogging/urls.py delete mode 100644 microblogging-parent/microblogging/views.py delete mode 100644 microblogging-parent/microblogging/wsgi.py delete mode 100644 microblogging-parent/requirements.txt diff --git a/microblogging-parent/.DS_Store b/microblogging-parent/.DS_Store deleted file mode 100644 index 4e0bf4a00b3cf572eb17c6ca9519781f99fa2973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKK~BR!3>-rbMF^?fxFGEdD)ED~Du_j zNZot?c2zZP#aX3hMxDN!&;!nxvB3&YXi=e|t@+!qM!jr$nQsS~=Xl1B43*3)>929i z=NINSd~)vgE6C+R1zkTR7zhS}fnXpQ_&EbSvsK2Y8N&tx!9XzZ#enV)iK>P{wB#AY&>+I)f&o-%5reCLr%KNa|L#erR!OQL%nv zQC?zcN=9O3exANdesXDUYFfthjVV-E2;DH>j(!nAztU9k!SDI37+aipLwsN zXR!%gSsU3-ualEh)~C6n{Y5;Qc(32k#1CD-3{CQgF7gP^J@n8Nyu66Z2ge^L~$)MveH&{*0f}5jWs`EyQX6}hQ7mn&TZTU z^DPJ3poCR*@Y0qo)zDe^vsxERyW-DS<0%kQG?4?Gha0pFp>_3+q`_Ky9ueYe& zCZ^5&FX@|{-Wx>PfJ{20q3?T!ZB#?=9Y=*pxSxSZQ~)v?&LlWr0G#*&~-8W5U6 z&9uMw=`757ElwfzZnJmu12if53Yy01{dBB*TB=T7FFZIhW>e+lP6smXUZ)*W$e!HQtlru<0;PVI z#g1WGO-jtKG@F_1dux*&M_YPJQMLBrbG4<`I|uuXu4ONrc5Yd~_;IO{>)ntK%*?F} z>1GZfF`3(3$1pTPIkVf5>#|88D{b3gHMvi%QA zxC-;6RH@P=442-6nZ&u(+mTK4z@Ul*158!igK{;KP{DGBM%N-(ZL6B>bmyayhCzGx zJ``zJ)zx;lT_AeXYMt5t@|pt`Xg-p%K71@W;^5$$NDRH`~(k8G*9 zWzSW`-Eu*wir7v(#@l&EzmU%gP9xZJIic!)Y_Po|)T$4pNl8hMghC#KCFq}6K`3t5 zgl$pEmU1Eh=66NuX$h*4fjX4(8($RdptGw!g~+RboOQol$(*<))CyGzkW125UM%GP zj^08Nko{ZUDLj*xsV;YwmV9XFe9maV4eFN33oe(J6KyVCz1I+a{{Lb V4x=c(43US?(&jNr(z}rE{{p1U+D!le diff --git a/microblogging-parent/microblogging/__pycache__/supabase_utils.cpython-313.pyc b/microblogging-parent/microblogging/__pycache__/supabase_utils.cpython-313.pyc deleted file mode 100644 index b0c61334a3e8d9e665e15396c2fdf7b4000efc57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1151 zcmah|&1(}u6rcUbN1LSEHefJbV(DcM$x_6F(kkf(6f0G-29*k7vzctRO?K9qT_K@` zc+-05sgPr@f=B<5_GDNq2%fxEbMxezP1Cf3^ufIM=FOX#_kO>bK`J$gK+NA{*xzfszMNF*z;`1Vx4Kjb(^+ncs6mgZAP3=QNy)& zaJ!RSA&!R~FaNCV;viM@y#}FnC){KTqYA)AU`Q|q+n^577U-c&L4Rcgl}V1U1y~HF zG(uq%06T}u!q!FKx_D1?#IjhLxRi44-aWVTNR>AKOlTA{PkXbVL4UCZHfoqMH4-HC z^3&pSQD3W+OOJy%#jkzHV}WF0k8&IXnYRty#<5d#iS2lSf> zsYmNa_m3wF-IY@%bFjO=+gtgRIZ+n6>-|LfVCntRhlj^y0=O@b2RkSGIr^bf`C2HG-W08VMoI2%* zg~eWaZyReb!!|;GD8Ke23Qri;7GG?Un%~3^Xcm_EFJh~p&Llw)z9Qut%6(TdUzGV1 qWxkv2kKMBTYC1_B$>VeXvVLC!wePAP1a zIxv=@f~k9@4*V;q1L{dko#+HY-D^8{N{Upe^^p7g`T2eCd$w~mG-Mlclz%QaKj#hO zhni%gKMk(F%HWexH<(d3>$yd9A;)q+#rehjg2gNuTlKVn(;HCmh>e4KUbfvsR3Rz>M$>&hdpj##4+F)*K8n1AVkb-5c<^Pj=zOSlV;^S8bM6p zQ)dzi8iyW-3Jhg=4(-?PP$ao{&7Nx$PYc&&HR%%v%=kV)1cXscnWzEKU^D{Ju8ZP0 zO?G5z{A7w(9jFF+I+R;wv%z?|JdySl&b9Fx}W>P?Y6cQO&%JFkE&1#eO zih2?5l^R%hLDfeB!Nk@RS54G5btZd*A>o*b6jAETG-SClnDn`>ylJkR+(?^~o(L9h zGWoELq}0_8DfL{SFUFN*Fp?d(CUtR$7(s16 zK)aN{S?aYTOazBBIt!7HT!Fp7)DEW) yroUN_zgzwL_m2vvqt%nq>haQvHKQ^Qj_#a}!ILp~9GzIR7k$=n?tO`=Kb_yhaE^lj diff --git a/microblogging-parent/microblogging/__pycache__/views.cpython-313.pyc b/microblogging-parent/microblogging/__pycache__/views.cpython-313.pyc deleted file mode 100644 index 803df6919c6ed16925805a17731336b90b6b4ec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmZuvL2J}N6rRb>Zlc>ZYH39U4N{SaZLGKlMG9gmvV~R}7laG*>z3We?!{LE$zY-?=o#h$KeN1aa`H>Xte)j;TuS{A zuL2{n3I>Ufl__MBr8pnSyZOQajtO@fo~banjsaWhQJMEH^0BtE2XjQxSFMGrGiUoeWBO=?>?UV@2>sAg8f( zl{k#fFbp;d@TGKj{&s9a!tey2lgBnXR>wYXecb9!_S9R)`sCNmFPqjf?fSPUzE_rVyP(T0E9*Z#5D@ ziw~D7Q4SMhAmRWe^+TQ7(>AR~EpLv&AYp4ca87d=;~!}1Cwl&yDEQt$Bluxb_6Ijr B(k5k0kOf-`=yNWlm?$-gTsd(JSjZ|XfQdx2z_3)426Col+8oGU!!DZ7Ui zV{W2#t{xE*L8!dwn2H#dOd({13G&c;KoXc}AQ8(`m}X39GEp%n?(cHgUehY>#7qZe zEVzPEG}^n{z0Q8%?;IX>dmTS`vEM#=zH{2Rb_bqfTARC2&1z8%0s|5Rg$=5>wZQR0 zGlf?cmyT&yRGAoa38HX~Fk(YGN_A1Y()R9ikzje>tFKGQET0d`i=bO(yqwe?m#;5w-vzokVME?LD CliAw< diff --git a/microblogging-parent/microblogging/asgi.py b/microblogging-parent/microblogging/asgi.py deleted file mode 100644 index 2e045bcd..00000000 --- a/microblogging-parent/microblogging/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for microblogging project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'microblogging.settings') - -application = get_asgi_application() diff --git a/microblogging-parent/microblogging/settings.py b/microblogging-parent/microblogging/settings.py deleted file mode 100644 index 6f84efbc..00000000 --- a/microblogging-parent/microblogging/settings.py +++ /dev/null @@ -1,141 +0,0 @@ -""" -Django settings for microblogging project. - -Generated by 'django-admin startproject' using Django 4.2.16. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/4.2/ref/settings/ -""" - -from pathlib import Path -import environ -import os -from dotenv import load_dotenv - -# Load environment variables from .env file -load_dotenv() - -# Access environment variables -env = environ.Env() -environ.Env.read_env() - -SUPABASE_URL = os.getenv('SUPABASE_URL') -SUPABASE_KEY = os.getenv('SUPABASE_KEY') - -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.getenv('SUPABASE_SECRET_KEY') - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', -] - -MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'microblogging.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'microblogging.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/4.2/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': 'postgres', - 'USER': 'postgres.rhnhdilmyjihibpwkcut', - 'PASSWORD': os.getenv('SUPABASE_PASSWORD'), - 'HOST': 'aws-0-eu-west-3.pooler.supabase.com', - 'PORT': '6543', - - } -} - - -# Password validation -# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/4.2/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/4.2/howto/static-files/ - -STATIC_URL = 'static/' - -# Default primary key field type -# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/microblogging-parent/microblogging/supabase_utils.py b/microblogging-parent/microblogging/supabase_utils.py deleted file mode 100644 index e4ad5191..00000000 --- a/microblogging-parent/microblogging/supabase_utils.py +++ /dev/null @@ -1,21 +0,0 @@ -import requests -from django.conf import settings - -SUPABASE_URL = settings.SUPABASE_URL -SUPABASE_KEY = settings.SUPABASE_KEY - -headers = { -"apikey": SUPABASE_KEY, -"Content-Type": "application/json", -"Authorization": f"Bearer {SUPABASE_KEY}" -} - -def fetch_from_supabase(endpoint): - url = f"{SUPABASE_URL}/rest/v1/{endpoint}" - response = requests.get(url, headers=headers) - return response.json() - -def insert_to_supabase(endpoint, data): - url = f"{SUPABASE_URL}/rest/v1/{endpoint}" - response = requests.post(url, json=data, headers=headers) - return response.json() \ No newline at end of file diff --git a/microblogging-parent/microblogging/urls.py b/microblogging-parent/microblogging/urls.py deleted file mode 100644 index 1dee723c..00000000 --- a/microblogging-parent/microblogging/urls.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -URL configuration for microblogging project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/4.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import path -from . import views - -urlpatterns = [ - path('admin/', admin.site.urls), - path('fetch-data/', views.fetch_data_view, name='fetch_data'), - path('insert-data/', views.insert_data_view, name='insert_data'), -] diff --git a/microblogging-parent/microblogging/views.py b/microblogging-parent/microblogging/views.py deleted file mode 100644 index 9f7a6354..00000000 --- a/microblogging-parent/microblogging/views.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.http import JsonResponse -from .supabase_utils import fetch_from_supabase, insert_to_supabase - -def fetch_data_view(request): - data = fetch_from_supabase('users') - return JsonResponse(data, safe=False) - -def insert_data_view(request): - if request.method == 'POST': - data = request.POST.dict() - response = insert_to_supabase('users', data) - return JsonResponse(response, safe=False) \ No newline at end of file diff --git a/microblogging-parent/microblogging/wsgi.py b/microblogging-parent/microblogging/wsgi.py deleted file mode 100644 index 279b5a95..00000000 --- a/microblogging-parent/microblogging/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for microblogging project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'microblogging.settings') - -application = get_wsgi_application() diff --git a/microblogging-parent/requirements.txt b/microblogging-parent/requirements.txt deleted file mode 100644 index 4182583e..00000000 --- a/microblogging-parent/requirements.txt +++ /dev/null @@ -1,12 +0,0 @@ -asgiref==3.8.1 -certifi==2024.8.30 -charset-normalizer==3.4.0 -Django==4.2.16 -django-environ==0.11.2 -idna==3.10 -psycopg2==2.9.10 -python-dotenv==1.0.1 -requests==2.32.3 -sqlparse==0.5.2 -typing_extensions==4.12.2 -urllib3==2.2.3 From 4643b143b96cb18a71b30cf9d911e3021c01f163 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 5 Dec 2024 15:13:16 +0100 Subject: [PATCH 03/19] update: plug svelte in Django --- microblogging/microblogging_project/settings.py | 6 +++--- .../frontend/.gitignore | 0 .../frontend/.vscode/extensions.json | 0 .../{microblogging_project => users_app}/frontend/README.md | 0 .../frontend/index.html | 0 .../frontend/jsconfig.json | 0 .../frontend/package-lock.json | 0 .../frontend/package.json | 0 .../frontend/postcss.config.cjs | 0 .../frontend/public/vite.svg | 0 .../frontend/src/App.svelte | 0 .../frontend/src/TailwindCSS.svelte | 0 .../frontend/src/app.css | 0 .../frontend/src/assets/svelte.svg | 0 .../frontend/src/lib/Counter.svelte | 0 .../frontend/src/main.js | 0 .../frontend/src/vite-env.d.ts | 0 .../frontend/svelte.config.js | 0 .../frontend/tailwind.config.cjs | 0 .../frontend/vite.config.js | 0 .../templates/index.html | 0 microblogging/users_app/views.py | 4 ++-- 22 files changed, 5 insertions(+), 5 deletions(-) rename microblogging/{microblogging_project => users_app}/frontend/.gitignore (100%) rename microblogging/{microblogging_project => users_app}/frontend/.vscode/extensions.json (100%) rename microblogging/{microblogging_project => users_app}/frontend/README.md (100%) rename microblogging/{microblogging_project => users_app}/frontend/index.html (100%) rename microblogging/{microblogging_project => users_app}/frontend/jsconfig.json (100%) rename microblogging/{microblogging_project => users_app}/frontend/package-lock.json (100%) rename microblogging/{microblogging_project => users_app}/frontend/package.json (100%) rename microblogging/{microblogging_project => users_app}/frontend/postcss.config.cjs (100%) rename microblogging/{microblogging_project => users_app}/frontend/public/vite.svg (100%) rename microblogging/{microblogging_project => users_app}/frontend/src/App.svelte (100%) rename microblogging/{microblogging_project => users_app}/frontend/src/TailwindCSS.svelte (100%) rename microblogging/{microblogging_project => users_app}/frontend/src/app.css (100%) rename microblogging/{microblogging_project => users_app}/frontend/src/assets/svelte.svg (100%) rename microblogging/{microblogging_project => users_app}/frontend/src/lib/Counter.svelte (100%) rename microblogging/{microblogging_project => users_app}/frontend/src/main.js (100%) rename microblogging/{microblogging_project => users_app}/frontend/src/vite-env.d.ts (100%) rename microblogging/{microblogging_project => users_app}/frontend/svelte.config.js (100%) rename microblogging/{microblogging_project => users_app}/frontend/tailwind.config.cjs (100%) rename microblogging/{microblogging_project => users_app}/frontend/vite.config.js (100%) rename microblogging/{microblogging_project => users_app}/templates/index.html (100%) diff --git a/microblogging/microblogging_project/settings.py b/microblogging/microblogging_project/settings.py index ea277b72..2f1bf7f1 100644 --- a/microblogging/microblogging_project/settings.py +++ b/microblogging/microblogging_project/settings.py @@ -51,7 +51,7 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'rest_framework', + # 'rest_framework', 'users_app', ] @@ -71,7 +71,7 @@ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'microblogging/templates')], + 'DIRS': [os.path.join(BASE_DIR, 'microblogging_project/views/templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -139,7 +139,7 @@ STATIC_URL = 'static/' STATIC_ROOT = BASE_DIR / 'staticfiles' -STATICFILES_DIRS = [BASE_DIR / "microblogging/frontend/dist"] +STATICFILES_DIRS = [BASE_DIR / "microblogging_project/frontend/dist"] # Default primary key field type # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field diff --git a/microblogging/microblogging_project/frontend/.gitignore b/microblogging/users_app/frontend/.gitignore similarity index 100% rename from microblogging/microblogging_project/frontend/.gitignore rename to microblogging/users_app/frontend/.gitignore diff --git a/microblogging/microblogging_project/frontend/.vscode/extensions.json b/microblogging/users_app/frontend/.vscode/extensions.json similarity index 100% rename from microblogging/microblogging_project/frontend/.vscode/extensions.json rename to microblogging/users_app/frontend/.vscode/extensions.json diff --git a/microblogging/microblogging_project/frontend/README.md b/microblogging/users_app/frontend/README.md similarity index 100% rename from microblogging/microblogging_project/frontend/README.md rename to microblogging/users_app/frontend/README.md diff --git a/microblogging/microblogging_project/frontend/index.html b/microblogging/users_app/frontend/index.html similarity index 100% rename from microblogging/microblogging_project/frontend/index.html rename to microblogging/users_app/frontend/index.html diff --git a/microblogging/microblogging_project/frontend/jsconfig.json b/microblogging/users_app/frontend/jsconfig.json similarity index 100% rename from microblogging/microblogging_project/frontend/jsconfig.json rename to microblogging/users_app/frontend/jsconfig.json diff --git a/microblogging/microblogging_project/frontend/package-lock.json b/microblogging/users_app/frontend/package-lock.json similarity index 100% rename from microblogging/microblogging_project/frontend/package-lock.json rename to microblogging/users_app/frontend/package-lock.json diff --git a/microblogging/microblogging_project/frontend/package.json b/microblogging/users_app/frontend/package.json similarity index 100% rename from microblogging/microblogging_project/frontend/package.json rename to microblogging/users_app/frontend/package.json diff --git a/microblogging/microblogging_project/frontend/postcss.config.cjs b/microblogging/users_app/frontend/postcss.config.cjs similarity index 100% rename from microblogging/microblogging_project/frontend/postcss.config.cjs rename to microblogging/users_app/frontend/postcss.config.cjs diff --git a/microblogging/microblogging_project/frontend/public/vite.svg b/microblogging/users_app/frontend/public/vite.svg similarity index 100% rename from microblogging/microblogging_project/frontend/public/vite.svg rename to microblogging/users_app/frontend/public/vite.svg diff --git a/microblogging/microblogging_project/frontend/src/App.svelte b/microblogging/users_app/frontend/src/App.svelte similarity index 100% rename from microblogging/microblogging_project/frontend/src/App.svelte rename to microblogging/users_app/frontend/src/App.svelte diff --git a/microblogging/microblogging_project/frontend/src/TailwindCSS.svelte b/microblogging/users_app/frontend/src/TailwindCSS.svelte similarity index 100% rename from microblogging/microblogging_project/frontend/src/TailwindCSS.svelte rename to microblogging/users_app/frontend/src/TailwindCSS.svelte diff --git a/microblogging/microblogging_project/frontend/src/app.css b/microblogging/users_app/frontend/src/app.css similarity index 100% rename from microblogging/microblogging_project/frontend/src/app.css rename to microblogging/users_app/frontend/src/app.css diff --git a/microblogging/microblogging_project/frontend/src/assets/svelte.svg b/microblogging/users_app/frontend/src/assets/svelte.svg similarity index 100% rename from microblogging/microblogging_project/frontend/src/assets/svelte.svg rename to microblogging/users_app/frontend/src/assets/svelte.svg diff --git a/microblogging/microblogging_project/frontend/src/lib/Counter.svelte b/microblogging/users_app/frontend/src/lib/Counter.svelte similarity index 100% rename from microblogging/microblogging_project/frontend/src/lib/Counter.svelte rename to microblogging/users_app/frontend/src/lib/Counter.svelte diff --git a/microblogging/microblogging_project/frontend/src/main.js b/microblogging/users_app/frontend/src/main.js similarity index 100% rename from microblogging/microblogging_project/frontend/src/main.js rename to microblogging/users_app/frontend/src/main.js diff --git a/microblogging/microblogging_project/frontend/src/vite-env.d.ts b/microblogging/users_app/frontend/src/vite-env.d.ts similarity index 100% rename from microblogging/microblogging_project/frontend/src/vite-env.d.ts rename to microblogging/users_app/frontend/src/vite-env.d.ts diff --git a/microblogging/microblogging_project/frontend/svelte.config.js b/microblogging/users_app/frontend/svelte.config.js similarity index 100% rename from microblogging/microblogging_project/frontend/svelte.config.js rename to microblogging/users_app/frontend/svelte.config.js diff --git a/microblogging/microblogging_project/frontend/tailwind.config.cjs b/microblogging/users_app/frontend/tailwind.config.cjs similarity index 100% rename from microblogging/microblogging_project/frontend/tailwind.config.cjs rename to microblogging/users_app/frontend/tailwind.config.cjs diff --git a/microblogging/microblogging_project/frontend/vite.config.js b/microblogging/users_app/frontend/vite.config.js similarity index 100% rename from microblogging/microblogging_project/frontend/vite.config.js rename to microblogging/users_app/frontend/vite.config.js diff --git a/microblogging/microblogging_project/templates/index.html b/microblogging/users_app/templates/index.html similarity index 100% rename from microblogging/microblogging_project/templates/index.html rename to microblogging/users_app/templates/index.html diff --git a/microblogging/users_app/views.py b/microblogging/users_app/views.py index ff9dcd23..2faef987 100644 --- a/microblogging/users_app/views.py +++ b/microblogging/users_app/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render from django.http import JsonResponse -from . import templates +from users_app import templates from microblogging_project.supabase_utils import fetch_from_supabase, insert_to_supabase from users_app.models import User @@ -9,7 +9,7 @@ def index(request): context = { 'users': users, } - return render(request, 'first_template.html', context) + return render(request, 'index.html', context) def fetch_users(request): data = fetch_from_supabase('users') From a3616a235a19680a76d1a271ffcbea245f74120b Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 5 Dec 2024 15:39:58 +0100 Subject: [PATCH 04/19] update: connect Django and Svelte to show content from db in front --- microblogging/users_app/frontend/src/App.svelte | 5 ++++- microblogging/users_app/templates/index.html | 3 +++ microblogging/users_app/views.py | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/microblogging/users_app/frontend/src/App.svelte b/microblogging/users_app/frontend/src/App.svelte index 6ef942d2..ea347997 100644 --- a/microblogging/users_app/frontend/src/App.svelte +++ b/microblogging/users_app/frontend/src/App.svelte @@ -1,12 +1,15 @@
-

Coucou bisous

+

Coucou bisous {username}

diff --git a/microblogging/users_app/templates/index.html b/microblogging/users_app/templates/index.html index f810e146..dc7bad13 100644 --- a/microblogging/users_app/templates/index.html +++ b/microblogging/users_app/templates/index.html @@ -11,6 +11,9 @@
+ diff --git a/microblogging/users_app/views.py b/microblogging/users_app/views.py index 2faef987..5c87307c 100644 --- a/microblogging/users_app/views.py +++ b/microblogging/users_app/views.py @@ -7,7 +7,7 @@ def index(request): users = User.objects.all().values() context = { - 'users': users, + 'user': users[0], } return render(request, 'index.html', context) From 0444a2743583d998f9e420762d4c6c4713d345e5 Mon Sep 17 00:00:00 2001 From: anaisrandria Date: Thu, 5 Dec 2024 15:44:38 +0100 Subject: [PATCH 05/19] fix: statif files path --- microblogging/microblogging_project/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microblogging/microblogging_project/settings.py b/microblogging/microblogging_project/settings.py index 2f1bf7f1..b5117e31 100644 --- a/microblogging/microblogging_project/settings.py +++ b/microblogging/microblogging_project/settings.py @@ -139,7 +139,7 @@ STATIC_URL = 'static/' STATIC_ROOT = BASE_DIR / 'staticfiles' -STATICFILES_DIRS = [BASE_DIR / "microblogging_project/frontend/dist"] +STATICFILES_DIRS = [BASE_DIR / "../microblogging/users_app/frontend/dist"] # Default primary key field type # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field From c1e6713b9ea5612910eeab0a330b3ad67428763a Mon Sep 17 00:00:00 2001 From: anaisrandria Date: Thu, 5 Dec 2024 17:03:28 +0100 Subject: [PATCH 06/19] update: remove versioning __pycache__ --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index dc64d4f1..5a38cec4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .DS_Store .env my_venv/* +__pycache__ +*/__pycache__/ */*/__pycache__/ */*/*/__pycache__/ \ No newline at end of file From 6631c32dcd9be4b25d82fb077ca1fb95aafad804 Mon Sep 17 00:00:00 2001 From: anaisrandria Date: Thu, 5 Dec 2024 17:04:03 +0100 Subject: [PATCH 07/19] update: remove versioning __pycache__ --- .gitignore | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 5a38cec4..77fddc41 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store .env my_venv/* -__pycache__ -*/__pycache__/ -*/*/__pycache__/ -*/*/*/__pycache__/ \ No newline at end of file +__pycache__/* +*/__pycache__/* +*/*/__pycache__/* +*/*/*/__pycache__/* \ No newline at end of file From d82bd038962c5a1a9fa00685cab9f1f37fe2b498 Mon Sep 17 00:00:00 2001 From: anaisrandria Date: Thu, 5 Dec 2024 17:04:33 +0100 Subject: [PATCH 08/19] update: remove versioning __pycache__ --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 77fddc41..b2c496ff 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ my_venv/* __pycache__/* */__pycache__/* */*/__pycache__/* -*/*/*/__pycache__/* \ No newline at end of file +*/*/*/__pycache__/* +*/*/*/*/__pycache__/* \ No newline at end of file From e1a62688849687bf3d8f3b1d887d553d1ded7c07 Mon Sep 17 00:00:00 2001 From: anaisrandria Date: Thu, 5 Dec 2024 17:15:35 +0100 Subject: [PATCH 09/19] add: fixtures dummy data + test display posts --- .../users_app/fixtures/sample-posts.json | 57 +++++++++++++++++++ .../users_app/fixtures/sample-users.json | 26 +++++++++ .../users_app/templates/first_template.html | 8 +-- microblogging/users_app/views.py | 22 +++++-- 4 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 microblogging/users_app/fixtures/sample-posts.json create mode 100644 microblogging/users_app/fixtures/sample-users.json diff --git a/microblogging/users_app/fixtures/sample-posts.json b/microblogging/users_app/fixtures/sample-posts.json new file mode 100644 index 00000000..47475173 --- /dev/null +++ b/microblogging/users_app/fixtures/sample-posts.json @@ -0,0 +1,57 @@ +[ + { + "model": "users_app.post", + "pk": 1, + "fields": { + "user": 1, + "content": "Learning Django ORM is fun!", + "parent_id": null, + "created_at": "2024-12-04T08:30:00Z", + "updated_at": "2024-12-04T08:30:00Z" + } + }, + { + "model": "users_app.post", + "pk": 2, + "fields": { + "user": 2, + "content": "Exploring the beauty of the mountains.", + "parent_id": null, + "created_at": "2024-12-04T09:30:00Z", + "updated_at": "2024-12-04T09:30:00Z" + } + }, + { + "model": "users_app.post", + "pk": 3, + "fields": { + "user": 5, + "content": "Top 10 travel tips for 2024.", + "parent_id": null, + "created_at": "2024-12-04T10:30:00Z", + "updated_at": "2024-12-04T10:30:00Z" + } + }, + { + "model": "users_app.post", + "pk": 4, + "fields": { + "user": 1, + "content": "Can’t wait to start the new project!", + "parent_id": null, + "created_at": "2024-12-05T11:00:00Z", + "updated_at": "2024-12-05T11:00:00Z" + } + }, + { + "model": "users_app.post", + "pk": 5, + "fields": { + "user": 2, + "content": "What are your favorite Django packages?", + "parent_id": 1, + "created_at": "2024-12-05T12:00:00Z", + "updated_at": "2024-12-05T12:00:00Z" + } + } +] diff --git a/microblogging/users_app/fixtures/sample-users.json b/microblogging/users_app/fixtures/sample-users.json new file mode 100644 index 00000000..7b06da51 --- /dev/null +++ b/microblogging/users_app/fixtures/sample-users.json @@ -0,0 +1,26 @@ +[ + { + "model": "users_app.user", + "pk": 1, + "fields": { + "email": "alice@example.com", + "username": "alice", + "password": "hashed_password_1", + "bio": "Software engineer and cat lover.", + "created_at": "2024-12-01T10:00:00Z", + "updated_at": "2024-12-01T10:00:00Z" + } + }, + { + "model": "users_app.user", + "pk": 2, + "fields": { + "email": "bob@example.com", + "username": "bob", + "password": "hashed_password_2", + "bio": "Photography enthusiast.", + "created_at": "2024-12-02T11:00:00Z", + "updated_at": "2024-12-02T11:00:00Z" + } + } +] diff --git a/microblogging/users_app/templates/first_template.html b/microblogging/users_app/templates/first_template.html index a96964e6..eb72e439 100644 --- a/microblogging/users_app/templates/first_template.html +++ b/microblogging/users_app/templates/first_template.html @@ -1,11 +1,11 @@
    - {% for user in users %} + {% for post in posts %}
  • - Email : {{ user.email }}
    - Username : {{ user.username }}
    - Bio : {{ user.bio }} + Email : {{ post.user.email }}
    + Post : {{ post.content }}
    + Date : {{ post.created_at }}

  • {% endfor %}
diff --git a/microblogging/users_app/views.py b/microblogging/users_app/views.py index 5c87307c..6efcc007 100644 --- a/microblogging/users_app/views.py +++ b/microblogging/users_app/views.py @@ -2,21 +2,31 @@ from django.http import JsonResponse from users_app import templates from microblogging_project.supabase_utils import fetch_from_supabase, insert_to_supabase -from users_app.models import User +# from users_app.models import User +from users_app.models import Post + +# def index(request): +# users = User.objects.all().values() +# context = { +# 'users': users, +# } +# print(f"🦄 {users}") +# return render(request, 'first_template.html', context) def index(request): - users = User.objects.all().values() + posts = Post.objects.all() context = { - 'user': users[0], + 'posts': posts, } - return render(request, 'index.html', context) + print(f"🦄 {posts}") + return render(request, 'first_template.html', context) def fetch_users(request): - data = fetch_from_supabase('users') + data = fetch_from_supabase('users_app_user') return JsonResponse(data, safe=False) def insert_user(request): if request.method == 'POST': data = request.POST.dict() - response = insert_to_supabase('users', data) + response = insert_to_supabase('users_app_user', data) return JsonResponse(response, safe=False) \ No newline at end of file From dd75e0ec80cef398a90f3b15e051ffdf84e0c34d Mon Sep 17 00:00:00 2001 From: anaisrandria Date: Thu, 5 Dec 2024 17:15:54 +0100 Subject: [PATCH 10/19] update: remove versioning __pycache__ --- .gitignore | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index b2c496ff..f1670805 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ .DS_Store .env my_venv/* -__pycache__/* -*/__pycache__/* -*/*/__pycache__/* -*/*/*/__pycache__/* -*/*/*/*/__pycache__/* \ No newline at end of file +*.log +*.pot +__pycache__ +*/*/__pycache__/ +*/*/*/__pycache__/ +*.pyc \ No newline at end of file From eda12fa2ddf3f295b0c6f50e9b0e9dee1bc362af Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 5 Dec 2024 18:01:37 +0100 Subject: [PATCH 11/19] update: distinct routes and relation between Django and Svelte --- microblogging/microblogging_project/urls.py | 3 ++- microblogging/users_app/frontend/src/App.svelte | 15 +++++++++++++-- microblogging/users_app/templates/index.html | 2 ++ microblogging/users_app/views.py | 14 ++++++++++++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/microblogging/microblogging_project/urls.py b/microblogging/microblogging_project/urls.py index 7acb1fa7..1f44cd4e 100644 --- a/microblogging/microblogging_project/urls.py +++ b/microblogging/microblogging_project/urls.py @@ -22,7 +22,8 @@ urlpatterns = [ path('admin/', admin.site.urls), - path('', views.index, name='index'), + path('users', views.users, name='users'), + path('index', views.index, name='index'), path('fetch-users/', views.fetch_users, name='fetch_users'), path('insert-user/', views.insert_user, name='insert_user'), ] + static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS[0]) \ No newline at end of file diff --git a/microblogging/users_app/frontend/src/App.svelte b/microblogging/users_app/frontend/src/App.svelte index ea347997..f2da05a2 100644 --- a/microblogging/users_app/frontend/src/App.svelte +++ b/microblogging/users_app/frontend/src/App.svelte @@ -3,13 +3,24 @@ import TailwindCSS from "./TailwindCSS.svelte"; // @ts-ignore - let username = (window.initialAppState)? window.initialAppState : 'Unknown' + let username = (window.initialAppState) ? window.initialAppState : 'Unknown'; + // @ts-ignore + let post = (window.initialPost) ? window.initialPost : 'Unknown'; + // @ts-ignore + let userName = window.users +
-

Coucou bisous {username}

+

Bonjour {username}

+

Le premier post : {post}

+{#each userName as user} +
  • {user.username} + +
+{/each}
diff --git a/microblogging/users_app/templates/index.html b/microblogging/users_app/templates/index.html index dc7bad13..e156f7d3 100644 --- a/microblogging/users_app/templates/index.html +++ b/microblogging/users_app/templates/index.html @@ -13,6 +13,8 @@ diff --git a/microblogging/users_app/views.py b/microblogging/users_app/views.py index 6efcc007..d6de6167 100644 --- a/microblogging/users_app/views.py +++ b/microblogging/users_app/views.py @@ -2,8 +2,9 @@ from django.http import JsonResponse from users_app import templates from microblogging_project.supabase_utils import fetch_from_supabase, insert_to_supabase + # from users_app.models import User -from users_app.models import Post +from users_app.models import Post, User # def index(request): # users = User.objects.all().values() @@ -16,11 +17,20 @@ def index(request): posts = Post.objects.all() context = { - 'posts': posts, + 'posts': posts, } print(f"🦄 {posts}") return render(request, 'first_template.html', context) +def users(request): + users = User.objects.first() + posts = Post.objects.first() + context = { + 'users': [{"username":users.username}] + } + return render(request, 'index.html', context) + + def fetch_users(request): data = fetch_from_supabase('users_app_user') return JsonResponse(data, safe=False) From 15464b607127eeb34d674af7c73851ed78300228 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 5 Dec 2024 18:09:48 +0100 Subject: [PATCH 12/19] fix: clean up gitignore to avoid commiting pycache folder --- .gitignore | 174 +++++++++++++++++- .../__pycache__/__init__.cpython-313.pyc | Bin 244 -> 0 bytes .../__pycache__/admin.cpython-313.pyc | Bin 288 -> 0 bytes .../__pycache__/apps.cpython-313.pyc | Bin 613 -> 0 bytes .../__pycache__/models.cpython-313.pyc | Bin 1021 -> 0 bytes .../__pycache__/views.cpython-313.pyc | Bin 1437 -> 0 bytes 6 files changed, 166 insertions(+), 8 deletions(-) delete mode 100644 microblogging/users_app/__pycache__/__init__.cpython-313.pyc delete mode 100644 microblogging/users_app/__pycache__/admin.cpython-313.pyc delete mode 100644 microblogging/users_app/__pycache__/apps.cpython-313.pyc delete mode 100644 microblogging/users_app/__pycache__/models.cpython-313.pyc delete mode 100644 microblogging/users_app/__pycache__/views.cpython-313.pyc diff --git a/.gitignore b/.gitignore index f1670805..90c0e30f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,167 @@ -.DS_Store -.env -my_venv/* -*.log +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo *.pot -__pycache__ -*/*/__pycache__/ -*/*/*/__pycache__/ -*.pyc \ No newline at end of file + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +.DS_Store + +microblogging/my_venv/ +microblogging/users_app/frontend/.vite/ \ No newline at end of file diff --git a/microblogging/users_app/__pycache__/__init__.cpython-313.pyc b/microblogging/users_app/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index d2a03812530702a2a47749b612aac239b9fcd2b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmY+9O$x#=5QQ6mK!o0*TNicQ=t=~^wFv4uq-ji}X{IFY!gGk=6}*yLPawU3iRi+& znEB?-z|6F9JdC`iw~Y+>8NyHG3vJKCHImVYtnZQS_^J)9#|8FISO?576{s(?~uR88r)IzI;U67xojh3)$r!w)XNt4j#6T~BY9Ku1>q diff --git a/microblogging/users_app/__pycache__/admin.cpython-313.pyc b/microblogging/users_app/__pycache__/admin.cpython-313.pyc deleted file mode 100644 index 8cb0332aa6d90275288480d6cbc7d88b40b68951..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmY*T!Ait15KUT?MOg6@dhMY*Ui2i2;7LJ*uID99Vm7-;rcBy{f8j;&7yP9jym;E1 z&>t{e+=CB>dGF1GdE2qFj@Nd!e!z#Yoo>(E8GRiapGxh`tC zMs&~;ZgdwbiOy-+*_R0Cmn&~2VbwS^#s&io;e!Ue~JoI3W zD5CfkdWiv#&@J=;(dZ7M@gd%eyF7@>B<-CAC&lf?w632UJ(FeL(VfLBXK~kqIXXmu zDT0V%h-m}~jiE;q=$E~;-(Gra1=#aCXNi}5yjL7^U7AUeO)66eWhc*MIc=PIA%!a1 zjV5Rquj}vVAidBI7}LBGjJ2DLc|oHBzR1}7hN~5GnX#D!>y*?&8&6*?#Edt}G4AVn zE)-5ea(ja@>$sCSEVQh$JO#H9(_vqNt_qtn}ueEwcH?vaMn&9#_JNdJ!%I} ixH({9Uj+@cVPMn=ZdkYjw zdn!G64?WqNhyEkUp^<@}dh%A#-aC^uTETW;cYhym=Dm3{d!El5K#jte*B*fY{M2MP z(wE@;i2_H!1~z;NHXw&3FbVDhJ23_9Vp-^B!9c2hk>yaR#D#BDnoT~@O z&z9~_XyE|UkmJDR6kBV|iJBx3q4mtgr5bS>CEIB*=36b!c8Lfp4)cBD2)Ywm50_Ds zI-FJNKJz>pcvhXUy~<6kQpe7oHPD7(YS)3KcN!wxYFY6GU1+`K`d$uRx>cd8Uhl!F zd8cpA^vsz~t!vJ=*G~%*{laXoFnj#yM05+)_KPc}qxb{Gjq$!Q)ib6#PS==kubvj~ z^^0@8;@rt%xA?fdam9~Cx48IjgHI3BZkAIr=kDUbV+(FQKCtvF{r|+J>E^}JGYZLU nH9q>MyrihQKOodM_g4}^_ybH|q%v^n!}6!<$LepO;9%w-n#BSP diff --git a/microblogging/users_app/__pycache__/views.cpython-313.pyc b/microblogging/users_app/__pycache__/views.cpython-313.pyc deleted file mode 100644 index a597710fbc6e4db2401d04d2fd23ca61262d5b79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1437 zcmb7E&1)M+6rb4-Y3*HGu0`TD3GOzrF(e@$)ykW?fcT~d%yP^4d>=& z5yrRhlWzvRSax7Z5XD1GMGNfSzm4I_7Kn2?xh1Mxr`lU|B^@qcY(g8gcR(kJ2-O zv^$|E2zQh?+aSVkRU3@9tGwIsY91%?VgTh#R0W;J;4rNML0=v+5giN_p5ZR2J+wWE zqw-|lX#}CNtUe=!v0qM~Nq{@aMcBm^yn!QSduCEq0n92&L4F%#1v%9hlutjK2 zLdUOx>Y*cR;mOU%HxI2#ee2S|T0XQ^`_}5fTI+rNkCAzL?nG5GsouA5Q^;C;x^{4J z0Ts<(Zo}`gsCx~u2^YKD`$BUXY$6J&Mzbi(UBsRz4mJpq!*%+~u>~rN5VXF!G zeUY2|p;Wsf2>FNxa?p5TO6gpi)(Pa~{Y>bbEI%3Q1xorEjcj}gh24-`XRA;t8OX1I mI#Dsk$LPv2S~*5buh8vd^wAql$JgG>EBND~q2W)HL;eGo9716L From f5905e9a1c3da2b24ac8a2721dc0e0476505130b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alix=20Lev=C3=A9?= Date: Sun, 8 Dec 2024 13:30:09 +0100 Subject: [PATCH 13/19] add: related name in Post modele --- microblogging/users_app/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microblogging/users_app/models.py b/microblogging/users_app/models.py index abb332b1..47c7823c 100644 --- a/microblogging/users_app/models.py +++ b/microblogging/users_app/models.py @@ -36,7 +36,7 @@ class Tag(models.Model): class Post(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) content = models.TextField() - tags = models.ManyToManyField(Tag) + tags = models.ManyToManyField(Tag, related_name="posts") parent_id = models.IntegerField(default=None, blank=True, null=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) From af4bb690a1998192badc98ae14d1fe04d2dc42fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alix=20Lev=C3=A9?= Date: Sun, 8 Dec 2024 13:31:13 +0100 Subject: [PATCH 14/19] add: modified def index() --- microblogging/users_app/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/microblogging/users_app/views.py b/microblogging/users_app/views.py index d6de6167..008b4510 100644 --- a/microblogging/users_app/views.py +++ b/microblogging/users_app/views.py @@ -4,7 +4,7 @@ from microblogging_project.supabase_utils import fetch_from_supabase, insert_to_supabase # from users_app.models import User -from users_app.models import Post, User +from users_app.models import Post, User, Tag # def index(request): # users = User.objects.all().values() @@ -17,9 +17,11 @@ def index(request): posts = Post.objects.all() context = { - 'posts': posts, + 'posts': posts, } print(f"🦄 {posts}") + + return render(request, 'first_template.html', context) def users(request): From 4d4080e5a7e872bf10f9cb78f27d4c9c167c2e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alix=20Lev=C3=A9?= Date: Sun, 8 Dec 2024 13:31:46 +0100 Subject: [PATCH 15/19] add: display tags for each post --- .../users_app/templates/first_template.html | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/microblogging/users_app/templates/first_template.html b/microblogging/users_app/templates/first_template.html index eb72e439..dfabd68d 100644 --- a/microblogging/users_app/templates/first_template.html +++ b/microblogging/users_app/templates/first_template.html @@ -3,8 +3,19 @@
    {% for post in posts %}
  • - Email : {{ post.user.email }}
    + Username : {{ post.user.username }}
    Post : {{ post.content }}
    + + Tags : {% if post.tags.all %} + + {% for tag in post.tags.all %} + + {{tag.tag}} {% if not forloop.last %}, {% endif %} + {% endfor %} + {% else %} + Aucun tag + {% endif %} +
    Date : {{ post.created_at }}

  • {% endfor %} From 07dac70bf7eaa56aeb8acd936a3d241b4e8a85bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alix=20Lev=C3=A9?= Date: Sun, 8 Dec 2024 13:32:58 +0100 Subject: [PATCH 16/19] add: fixtures for though table posts_tags --- .../users_app/fixtures/sample-posts-tags.json | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 microblogging/users_app/fixtures/sample-posts-tags.json diff --git a/microblogging/users_app/fixtures/sample-posts-tags.json b/microblogging/users_app/fixtures/sample-posts-tags.json new file mode 100644 index 00000000..f748d713 --- /dev/null +++ b/microblogging/users_app/fixtures/sample-posts-tags.json @@ -0,0 +1,41 @@ +[{ + "model": "users_app.post_tags", + "pk": 1, + "fields": { + "post_id": 1, + "tag_id": 2 + } +}, +{ + "model": "users_app.post_tags", + "pk": 2, + "fields": { + "post_id": 2, + "tag_id": 3 + } +}, +{ + "model": "users_app.post_tags", + "pk": 3, + "fields": { + "post_id": 3, + "tag_id": 4 + } +}, +{ + "model": "users_app.post_tags", + "pk": 4, + "fields": { + "post_id": 4, + "tag_id": 4 + } +}, +{ + "model": "users_app.post_tags", + "pk": 5, + "fields": { + "post_id": 5, + "tag_id": 1 + } +} +] \ No newline at end of file From 83d435d38ba4f6017c402db515ce40ef38f84e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alix=20Lev=C3=A9?= Date: Sun, 8 Dec 2024 13:33:29 +0100 Subject: [PATCH 17/19] add: tags in though table posts_tags --- microblogging/users_app/fixtures/sample-tags.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 microblogging/users_app/fixtures/sample-tags.json diff --git a/microblogging/users_app/fixtures/sample-tags.json b/microblogging/users_app/fixtures/sample-tags.json new file mode 100644 index 00000000..638e1672 --- /dev/null +++ b/microblogging/users_app/fixtures/sample-tags.json @@ -0,0 +1,14 @@ +[ + {"model": "users_app.tag", + "pk": 1, + "fields": {"tag" : "#lovereading"}}, + {"model": "users_app.tag", + "pk": 2, + "fields": {"tag" : "#horrostory"}}, + {"model": "users_app.tag", + "pk": 3, + "fields": {"tag": "#romance"}}, + {"model": "users_app.tag", + "pk": 4, + "fields": {"tag": "#booklover"}} +] \ No newline at end of file From 76ee46de36db538eec923fbbd761f85d595b4bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alix=20Lev=C3=A9?= Date: Sun, 8 Dec 2024 13:34:02 +0100 Subject: [PATCH 18/19] add: migration after adding fixtures for though table posts_tags --- .../migrations/0006_alter_post_tags.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 microblogging/users_app/migrations/0006_alter_post_tags.py diff --git a/microblogging/users_app/migrations/0006_alter_post_tags.py b/microblogging/users_app/migrations/0006_alter_post_tags.py new file mode 100644 index 00000000..cf05949f --- /dev/null +++ b/microblogging/users_app/migrations/0006_alter_post_tags.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.16 on 2024-12-06 15:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users_app', '0005_follower_alter_user_password_delete_subscription_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='post', + name='tags', + field=models.ManyToManyField(related_name='posts', to='users_app.tag'), + ), + ] From 2c7194b41b64a93e7227ed8b576e6cfd803d9e5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alix=20Lev=C3=A9?= Date: Sun, 8 Dec 2024 13:38:19 +0100 Subject: [PATCH 19/19] change name: microblogging --- microblogging/package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microblogging/package-lock.json b/microblogging/package-lock.json index f8f4862a..b575e298 100644 --- a/microblogging/package-lock.json +++ b/microblogging/package-lock.json @@ -1,5 +1,5 @@ { - "name": "microblogging-parent", + "name": "microblogging", "lockfileVersion": 3, "requires": true, "packages": {}