From b0dfde89ab2513f55c42b34567bf743bb6fdee91 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 15 Jan 2025 01:24:31 +0530 Subject: [PATCH] started github actions --- .github/intro.md | 28 + .github/workflows/basic-workflow.yml | 19 + ansible/passwordless-authentication.md | 10 +- assets/adding_shared-lib.JPG | Bin 0 -> 63805 bytes assets/bridge2.png | Bin 0 -> 104730 bytes assets/github-webhook.JPG | Bin 0 -> 74629 bytes assets/jenkins-assign_roles.JPG | Bin 0 -> 63967 bytes assets/jenkins-manage_roles.JPG | Bin 0 -> 124979 bytes assets/jenkins-scm-pipeline.JPG | Bin 0 -> 78787 bytes cicd-basics/add-linux-node.md | 130 + cicd-basics/basics.md | 29 +- cicd-basics/first-jenkins-pipeline.md | 107 + cicd-basics/jenkins-installation.md | 106 + cicd-basics/multistage-multiagent-pipeline.md | 28 + cicd-basics/shared-library.md | 83 + cicd-basics/user-management.md | 42 + docker-basics/docker-commands.md | 6 +- docker-basics/docker-compose.md | 5 +- docker-basics/docker-flow.md | 17 +- docker-basics/docker-networking.md | 11 +- docker-basics/dockerVolumes.md | 4 +- docker-basics/first-docker-image/Dockerfile | 11 +- docker-basics/installation.md | 4 +- docker-basics/multistage-builds.md | 55 +- docker-basics/node-server/.dockerignore | 12 + docker-basics/node-server/Dockerfile | 13 + docker-basics/node-server/app.js | 16 + docker-basics/node-server/package-lock.json | 359 ++ docker-basics/node-server/package.json | 15 + docker-basics/vite-react/.dockerignore | 11 + docker-basics/vite-react/Dockerfile | 17 + docker-basics/vite-react/README.md | 8 + docker-basics/vite-react/index.html | 13 + docker-basics/vite-react/package-lock.json | 4149 +++++++++++++++++ docker-basics/vite-react/package.json | 28 + docker-basics/vite-react/public/vite.svg | 1 + docker-basics/vite-react/src/App.css | 42 + docker-basics/vite-react/src/App.jsx | 35 + docker-basics/vite-react/src/assets/react.svg | 1 + docker-basics/vite-react/src/index.css | 68 + docker-basics/vite-react/src/main.jsx | 10 + docker-basics/vite-react/vite.config.js | 13 + nginx/basic-auth/basic-auth.conf | 21 + nginx/basic-auth/basic-authentication.md | 81 + nginx/configuration-details.md | 42 + nginx/intro.md | 303 ++ .../load-balancing/basic-load-balancing.conf | 19 + nginx/load-balancing/demo/compose.yaml | 18 + .../demo/nginx-config/Dockerfile | 2 + .../demo/nginx-config/load-balancer.conf | 16 + .../demo/node-server/.dockerignore | 3 + .../demo/node-server/Dockerfile | 13 + .../load-balancing/demo/node-server/index.js | 10 + .../demo/node-server/package-lock.json | 708 +++ .../demo/node-server/package.json | 15 + nginx/nginx.conf | 84 + nginx/rate-limiting.md | 101 + nginx/regular-expressions.md | 120 + nginx/reverse-proxy/intro.md | 6 + nginx/reverse-proxy/reverse-proxy.config | 12 + nginx/rewrites-redirects.md | 100 + nginx/test.nginx.conf | 60 + production-deployment/secureVM.md | 28 + yaml-basics/intro.md | 3 + 64 files changed, 7249 insertions(+), 22 deletions(-) create mode 100644 .github/intro.md create mode 100644 .github/workflows/basic-workflow.yml create mode 100644 assets/adding_shared-lib.JPG create mode 100644 assets/bridge2.png create mode 100644 assets/github-webhook.JPG create mode 100644 assets/jenkins-assign_roles.JPG create mode 100644 assets/jenkins-manage_roles.JPG create mode 100644 assets/jenkins-scm-pipeline.JPG create mode 100644 cicd-basics/add-linux-node.md create mode 100644 cicd-basics/first-jenkins-pipeline.md create mode 100644 cicd-basics/jenkins-installation.md create mode 100644 cicd-basics/multistage-multiagent-pipeline.md create mode 100644 cicd-basics/shared-library.md create mode 100644 cicd-basics/user-management.md create mode 100644 docker-basics/node-server/.dockerignore create mode 100644 docker-basics/node-server/Dockerfile create mode 100644 docker-basics/node-server/app.js create mode 100644 docker-basics/node-server/package-lock.json create mode 100644 docker-basics/node-server/package.json create mode 100644 docker-basics/vite-react/.dockerignore create mode 100644 docker-basics/vite-react/Dockerfile create mode 100644 docker-basics/vite-react/README.md create mode 100644 docker-basics/vite-react/index.html create mode 100644 docker-basics/vite-react/package-lock.json create mode 100644 docker-basics/vite-react/package.json create mode 100644 docker-basics/vite-react/public/vite.svg create mode 100644 docker-basics/vite-react/src/App.css create mode 100644 docker-basics/vite-react/src/App.jsx create mode 100644 docker-basics/vite-react/src/assets/react.svg create mode 100644 docker-basics/vite-react/src/index.css create mode 100644 docker-basics/vite-react/src/main.jsx create mode 100644 docker-basics/vite-react/vite.config.js create mode 100644 nginx/basic-auth/basic-auth.conf create mode 100644 nginx/basic-auth/basic-authentication.md create mode 100644 nginx/configuration-details.md create mode 100644 nginx/intro.md create mode 100644 nginx/load-balancing/basic-load-balancing.conf create mode 100644 nginx/load-balancing/demo/compose.yaml create mode 100644 nginx/load-balancing/demo/nginx-config/Dockerfile create mode 100644 nginx/load-balancing/demo/nginx-config/load-balancer.conf create mode 100644 nginx/load-balancing/demo/node-server/.dockerignore create mode 100644 nginx/load-balancing/demo/node-server/Dockerfile create mode 100644 nginx/load-balancing/demo/node-server/index.js create mode 100644 nginx/load-balancing/demo/node-server/package-lock.json create mode 100644 nginx/load-balancing/demo/node-server/package.json create mode 100644 nginx/nginx.conf create mode 100644 nginx/rate-limiting.md create mode 100644 nginx/regular-expressions.md create mode 100644 nginx/reverse-proxy/intro.md create mode 100644 nginx/reverse-proxy/reverse-proxy.config create mode 100644 nginx/rewrites-redirects.md create mode 100644 nginx/test.nginx.conf create mode 100644 production-deployment/secureVM.md diff --git a/.github/intro.md b/.github/intro.md new file mode 100644 index 0000000..a8a69da --- /dev/null +++ b/.github/intro.md @@ -0,0 +1,28 @@ +## GitHub Actions +GitHub Actions is a continuous integration and continuous delivery (CI/CD) platform that allows us to automate your build, test, and deployment pipeline. We can create workflows that build and test every pull request to our repository, or deploy merged pull requests to production. + +GitHub Actions goes beyond just DevOps and lets us run workflows when other events happen in our repository. For example, we can run a workflow to automatically add the appropriate labels whenever someone creates a new issue in our repository. +#### Resources +- [Docs](https://docs.github.com/en/actions/about-github-actions/understanding-github-actions) +- [Mickey Goussel YT](https://youtube.com/playlist?list=PLiO7XHcmTsleVSRaY7doSfZryYWMkMOxB&si=kT7crVPw3xdNlznG) + +#### Overview +- **Workflow** - A workflow is a configurable automated process made up of one or more jobs. Workflows are defined in `.yml` files in the `.github/workflows` directory of your repository. + +- **Jobs** - A job is a set of steps that execute on the same _runner_. Runner is a server that has the GitHub Actions runner application installed. Jobs can run sequentially or in parallel. + +- **Steps** - A step is an individual task that can run commands or actions e.g. `actions/checkout@v2`. Each step in a job executes on the same runner, allowing for direct file sharing. + +> Summary: The workflow is a set of jobs and each job is a set of steps. Each step can be an action or a shell command. + +- **Event** - An event is a specific activity that triggers a workflow. For example, activity that occurs on GitHub, such as opening a pull request or pushing a commit. + +- **Action** - An action is a reusable unit of code. You can use an action defined in the same repository as the workflow, a public repository, or in a published Docker container image. See these examples [here](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsuses) + + +For detailed syntax, checkout [workflow-syntax](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#about-yaml-syntax-for-workflows) + + + + + diff --git a/.github/workflows/basic-workflow.yml b/.github/workflows/basic-workflow.yml new file mode 100644 index 0000000..29abe2c --- /dev/null +++ b/.github/workflows/basic-workflow.yml @@ -0,0 +1,19 @@ +name: CI # name of the workflow + +on: workflow_dispatch # to trigger the workflow manually (with a button), we use this event. This event will only trigger a workflow run if the workflow file exists on the default branch. + +jobs: # This workflow contains a single job called "build" + + build: # name of the job + + runs-on: ubuntu-latest # runs-on is the type of machine to run the job on - runner + + steps: # steps are the individual tasks that make up a job + + # selecting an action to run as part of a step in a job + - uses: actions/checkout@v4 # 'actions' is a public repo containing useful GitHub actions, 'checkout' is the action that checks-out repository so the workflow can access it, 'v4' indicates the 4th major release of it. + + - name: Wohoooo # the name of the step, if not specified, he step name will default to the text specified in the run command + + # Runs command-line programs. Each run keyword represents a new process and shell in the runner environment. When you provide multi-line commands, each line runs in the same shell. + run: echo Hello, world! \ No newline at end of file diff --git a/ansible/passwordless-authentication.md b/ansible/passwordless-authentication.md index 404dc9e..7d426d0 100644 --- a/ansible/passwordless-authentication.md +++ b/ansible/passwordless-authentication.md @@ -7,7 +7,7 @@ Suppose, we have two servers, namely *host1* and *host2* . We should be able to In *host1*, - run `ssh-keygen` . -- Keep pressing **enter** to accept all the default options. +- Keep pressing **enter↲** to accept all the default options. - Now, a bunch of files are created at `/home/user/.ssh` (default location). ```bash @@ -15,8 +15,8 @@ In *host1*, >> authorized_keys id_rsa id_rsa.pub known_hosts ``` -- *id_isa* is private key which is used to login to machine. Never share this with anyone. -- *id_isa.pub* is public key which is used for communication with others. +- *id_rsa* is private key which is used to login to machine. Never share this with anyone. +- *id_rsa.pub* is public key which is used for communication with others. In *host2*, @@ -32,4 +32,6 @@ In *host2*, ssh-ed23uoirut... ``` -Now, in *host1*, we can simply run `ssh ` to connect to *host2* . To disconnect, use **logout** command. \ No newline at end of file +Now, in *host1*, we can simply run `ssh ` to connect to *host2* . To disconnect, use **logout** command. + +A documentation on how to use SSH public key authentication on Linux, click [here](https://www.linode.com/docs/guides/use-public-key-authentication-with-ssh/?tabs=ed25519-recommended%2Cssh-add%2Cusing-ssh-copy-id-recommended) \ No newline at end of file diff --git a/assets/adding_shared-lib.JPG b/assets/adding_shared-lib.JPG new file mode 100644 index 0000000000000000000000000000000000000000..3f8bf5613438449d868f6afc6b58e66b2bfcdb84 GIT binary patch literal 63805 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 literal 0 HcmV?d00001 diff --git a/assets/bridge2.png b/assets/bridge2.png new file mode 100644 index 0000000000000000000000000000000000000000..5da492a19760487462eb1c13a74b7d24a15dd6b0 GIT binary patch literal 104730 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%0A&=BfmD~!#4;~u>{(P+OYJ#K+4u3*kl9IOfxaWKK z>|we+JJHA*I#GtgA%T=0>)!k9?`VBo)% z>}3A$f|W7g1^#n@Y11oEMcDC7)q&yWO0lvXr4h#?2{x1dnOYeB^36LPAfTQCRfbR& zl#6%7^zbQ~po(iD&?TFg--4_Zg#JZD=}~p#Rhg7$l!Yc!L>OHk<_4sGmthb5zAo3i zNd%E0gcgWFGh$zTOVe!eo=)95rrt20M^y?@O1Br3$_eRrSaj(lJIy2_vd*ah-P zHVO?^b_jCX^<11p#$Z)}^k)$ydhU`H)bt=rjHVl^%WGNuxSm`J6EJe@q2^`s4!f=+ zr8%8mGyGcXZbnjT^vHsb=6VEZbRWA^3e+C`4V1F?%v(T@<+4XWV zWrL+^pWN3*Che}(`Z*`rNaTw6#80dmiU$E+I7#LZ%XOGMlK&ZLr0b!2P?MoY3g)f?C8A zq4Ks%Km%wklZc#+VF3=e@84Y-vAe8fr@di-NKlrnWzohfO3rU>4Z)Uk{bT_hrMxW= zt)fV7<;I2kGYV`r1*BF#$gkAvbyuY4kb% z;S%@G*Mkl==jSj@r>&C*5~1oL&Iq%ZOB~CC26>AO7+or6JLJoS+Z92F@Mz~b_@9stZ8o-9Q8p}{FirF7nomXLyJ1l^d%Z>3PYOGS zYoZ+WU%ed_hqQJ84NdEWq0je#r|l0L_mE6k4!gxTVdIc!J~~I0+SmQcryFZ zd<%l2z5N()K=p;zBU6Hey7<1`MCzAFpTIB5D_R<0a*d{qm>Ml3K@4{Bi!6ZRpWCg< zh~x~vT7NA^n_y^S#|@~E#Yy*P<2S!yk&+W1N#ZsTZdy?;`_gW0G+Sz*)M&apUX#U_ zvZmVdT_ULq&C~~2LK3NQAcKj~%U1^MI1J6oWgRFAKB56J}b%tzA)-OrZihiM+n z07Ntks3LWO681}ZmyoBK^W)(u%A*in4Dl>s?%%>Td^6@W02;*ui>x?11x*ST6jbyV zuppX?Z>J7Gss%x!|Ip`$M!N^#h>Q!}W}lU;Uie-<-V{LbOeOgtq_iypZHwXk08;g& z8|5tA2lLkVLmSv9Ll}RK6zUC3u3x%ow|~a}$JBTKMe#ci|10noMEdS^s)#6vGz9@+ z0lDLrru5zsDFRZYN|z!?m7??}NS7i-q!$6{Aier56F#r+^UGZ_nUYN=Gm~tRrT3F> z3u9NnSYb4kOZQokm{&7r<>&oKo>|otVYhvxHrxj09HW1WE4JvcEMEPQ_DBNeTNqnh zNJxCM>=?wO#W0LHfTc8)+J7$CeSvBP-1w%`*Iv#nb=tkTF1Ku!``hJW+ueG^5{W}R zP7M~FJN^%Vn^%uTxKUm>Xxm+p+i|(|;8oD^vTBHal(&_9PB(Ar-r1P0Z2SGnDz6(a zu)jxp))OVo(`cCU6@d>+)8a?9f_t@@Nit`?pE_!?(>bm?f`*EPZKP9fRsku|eeJJz z>n&w-G#IwG_hpB@T^_HwZO%-ip~yeYnWRA-NnlF~=2yNn6w&aSnLe$mnMG!T)wom` znCGXo7`PiHGAQ}IKE^k^@bb~yPe6jhFQ+vkt4mBF^F{U_bBKm9tRpo_vhZ&zwZ$3) zV4j77chH0kB;xe7u$Pfbrd_8PI3A3iPPn83DtSVX)gzF^Yv-+zo5RiB4;_Qwy6pj+ z1;1=DcEv3bNuyk($?Rsi36G?!66ys_c2)U}DgBEVb8f+e-2wo?h+^bxn1Eo+O5lMV zSeMzWOTP7m9Alh%lUuP!xYP#3{|^1%F6ES`)PBz^^TYMBK4~m)8GJrFTWEN0iRM&H z=hhRctbpyytOChLWoHv_0G0f1_pCS`l1%OQ1wKzVQHTMi0OzO%yoiHBYWEKA9IIL5 z{?~|ba_d4vfdO^9);*fPd7$=f&^uh_{L5$Yt$L1Ne%}+<+Kx>mDhf3gv*G1c9>?Q8 z?K~vx*kY(HNa+sM*&ai@DXkCCY1?gU$q8w zp~-Oaous3wz!xat&-X|}A#dsSq==xjlJD;XYk4SQo~3z*fl!QbsopO5ET{w9_&Nh+ zNCW8a6BdTMt3Uh{g(~2@Fq2)q4~{OtkbJvm*c{H@(gXtbX7sR(l2m>W`@Q9k;WH*uz0jx_ zi{G&CfN3|ZIV$$rJ{d{^E!ST>BA_hV1GF+=e|n*sCJsrKvF z9r4q9)UF2Lg?~VQiKiV|76zae7=GYRxD2`FikU^NdnZ6S7y*pwJ8hGPl$d3)WeYMf zI#M;Z0w5w&jW6xag$jIDEbcd-M|#U$uls01{KvgQ!stbE=WC~lLHU()=-J4%Y1#JA zw}Ar#P`E;Y`_yLTWTa3Q!|?zmXAC6W_0@wb(@R>DZP$dJiK^rgP7+^Ykv^O2e<$n= zZ$1kIMqHPi>zADDUzG&;NM38T^j6f2tuSeD=P(cds>L7&O;5fVB`)9Zn*3MX0;7&P ziD{Q?4fHaXQbIW(mS*rYScV`4vL2gzrlQ3;jC?$uYP}DL

1xw;Fv$YJNnNCzncm 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

m^` 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 z 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%0DJ+aE3X-L4a|;zSn$gV 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

n%2NQPsfk@9c?nhM4|le zq&-8t5m)0h3w*;R?{R`KCbDQ$f)@s*Z9v-#%M7^b;>ZdFKEg=m(ZrM+#@5rQA(si* zknwa8Y7F#vuAU;bs}MwtmqSpqpd@xqGpV9-1>zkjd0~uwB0oalT;eEHa%NgJqHzV< z*iK65BSfu06IV(yL55lNV#XZ(1n9~@q9+6x#$s-hm@T0S;g48z*HulMnjq`H~4!3n+vv`5;Igq;u6V z52v|_*;JbX383J=VwU_Tp4ItcJs2=F1Edtm5r5Oi4hN6@v+OfxcsI zxEW27y6%HdeTi%cC!XgnE0K^hds8I6)a)&1&AF8r^}3^XFv1NZlY;I0ap$LdawBYQ z*Azy)lZh~Oy~TRJ%C{UK$haxx1h(h6hac~IJtvu@iQV_mHc0QpxmPX44LmLAG5j_G zRJQ6wlIRVJM>UVpOQCeOzHH|t_c&2Hwg_A4;>GjeU5Lzp+kt})lNcyktioMjzi&*$ z@l!6Kda#B*qHZ^u5lt$-suud3aT9!pzzyLMad#X+v1Z8AZx<|>=RhaX%x zX`(CJ;HZ3(zvh0vSq=ylKF0u~ zP;(kw=Xhp6SD1@!_!;{vdi-_+6NmXF)qZaT_yD#0m3A^lR(FGTW+KVM#H!4U?r)7^ zJ^!%Qa=`EK#sKkC26&!af8{#^lwi~vxzLg3Ksh8;dTiFb;jtW7rovg-P~RpV-m6oR zFdy$XVudVJQDSvSZ7AuP%_2VW1V}&7=OZ^^j{ob{>u0UrU;iF;YzSiz&2u za4Lh?-Sr@Z$X8z$#?%i)dran31{gG+ox2pLDeOekdspRfalDHo^L&Qou4gBH_bE~_ zZ7mU*l}*F?;!GyiIDmH7d!Hqz@a9FeorATAEAGUrF{W@{OU6w#YwEb^mY#CBy4(Gr z6t-TYc>v?Hb%Rl=d?*F=whH3SN2=9`XR)zY1|=(oT^^viDDpqCJp!Mqq`&2#IlG-~xb-@krR zIA?E4pRtm;U2=AvX}}hrQPC$tvuG&z^~oT%%LfjO^Ci-7S@*Ahh-Wv++1Q11WvyL- zB-3I8_rh9SxjFag6kON24hxa1l&v0+r&p7^iBAl%vK3r@UZ(nXr;bjh={o8gce<&m z*KAUor{R78nk9h>B{eTuPuZ_$6iY+KJ))vaBm+r+UuxT6jX+CO@}@&-N{l)l|Ft;L z2>3->u~$>eYjM$U2RKPGDg=qj8zpZ*)=A%QsKp7$l@>PGH{HxZ2Rd|+Q%A0HfoyqSPau%ltoy_!RR=Ny z==ujM#@2ZQs6uLLQ583 zLoQaZVfpD|H!)CAcY6tO={ES+;C~!t|AV837)VV~^geoi**$iA&yVl$&Lid|f>Nj7 zmx^CfzTzbZSD^0*zQ*F$g0HO?0DkyaXTf7B?P^U>;3!q|nWbN}Kz)?`&*FpmO3JC) zXOso1fK+{b8VD468bze~Bv3K*XPz@>aK1kcbmG%#AZMpmse^|cit#Mw#@8o-j#z)i z1GKO~%t-zlet``r`Pv3hl9kPP74?v>KmI%Y_(`E&Z6`j>)&D)I5VD0?HJcxe%QOct ziwYd&N=|P-+s5}64NT^zKlHsZ`_HyA{99Z3(^?TeLZT`sTg7i|#0Psu7QWS_zv2A7 zRsUpm%|07+ig5|OfN!k&k5T&8HT*oKFRtK&llgf{e;-eOh0rzb)j}w zYaY{cxfJuUK21S731;UI$3?9eH%y#ON|uU`^?A{OyZAYiE(yf&=-$pr(@qvG_c4u# z^+Ib+P30%=DZy^vTR_Y7E7NZpZcDf{4_CTq!{#?dKy{F%hXMyv zU?U&m2dr+OO RvF0-iyH%FJMb4GZe*ty=;NAcL literal 0 HcmV?d00001 diff --git a/assets/jenkins-manage_roles.JPG b/assets/jenkins-manage_roles.JPG new file mode 100644 index 0000000000000000000000000000000000000000..74a861157e9c3afcffa4881474c48f3454b5f6d9 GIT binary patch literal 124979 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

lF%QImb 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 uqamNJ#aJ~9kZQ7zN?G3Of7IZh^XrM Nodes`. Click on **New Node** button. + + - Provide a name and select the **Permanent Agent** radio button, click **Create**. + + - Provide an optional **Description**. + + - Leave the **Number of executors** as 1 (default). + + - Provide the **Remote root directory** as `/home/ubuntu/jenkins-test` . As the name suggests, Jenkins uses this directory as its root in the slave node. If the provided directory is not present in the agent, it will be created. + - Inside this, folders like `jobs/`, `workspace/` etc. will be present. + + - Provide a name in **Labels**. It will be used by the master to identify this slave. + + - Keep **Usage** to **Use this node as much as possible** (default). + + - In the **Launch method**, select **Launch agents via SSH** + + - Provide the public IP of the slave in **Host**. + + - Click on `Add` button under **Credentials**, and select **Jenkins**. + + - In the modal, select **SSH Username with private key** from the dropdown of **Kind** . + + - Leave the **Scope** to its default value. Provide a name in the **ID** and an optional description in **Description**. + + - In the **Username**, add the username of the slave instance (e.g. ubuntu). Leave the **Treat username as secret** checkbox as empty. + + - Click on the **Enter directly** radio button and paste the **private-key** generated initially. Add **Passphrase** (if any). + + - Click on **Add**. + + - Now, select the added key from **Credentials** dropdown. Also, select **Non verifying Verification Strategy** from the dropdown of **Host Key Verification Strategy**. + +Check if the connection is working properly. + +## Example: Declarative Pipeline +```groovy +pipeline { + agent {label 'agent-demo'} // this has to be the same as provided in 'Labels' box above + + stages { // each stage will be executed in the agent + stage('first') { + steps { + sh 'echo "Hello World" > test.txt' // this file will be created at `workspace/{JOBNAME}/` folder which is inside the specified Remote root directory. + + } + } + } +} + +``` + +## Example: Declarative Pipeline with credentials +```groovy +pipeline { + agent {label 'agent-demo'} + + stages { + + stage('show how to use credentials') { + steps { + + withCredentials([usernamePassword(credentialsId: 'fake-docker-passwd', passwordVariable: 'PASSWD', usernameVariable: 'USERNAME')]) { // this is generated by Pipeline Syntax Snippet Generator. Here we store the password and username in PASSWD and USERNAME variables for future usage. + + sh 'echo username is $USERNAME, password is $PASSWD' // always use single quotes or triple-single quote here to prevent Groovy interpolate the secrets. + + // using triple-single quotes + sh ''' + echo username is $USERNAME + echo password is $PASSWD + ''' + } + + } + } + + + } +} + +``` +## Example: Declarative Pipeline - Cloning from GitHub +```groovy +pipeline { + + agent {label 'agent-demo'} + + stages { + + stage('show how to clone from GitHub') { + steps { + // the following line will clone the repo from GitHub to `workspace/{JOBNAME}/` folder + + //(For private repo, we need to set the credentials first) + git branch: 'master', credentialsId: 'test-github', url: 'https://github.com/SteveSayantan/Web_BootCamp.git' // this is generated by Pipeline Syntax Snippet Generator + sh 'echo cloning successful' + + // or, if the repo is public, we can also do it simply as: + sh 'git clone https://github.com/xyz' + + } + } + } +} + +``` + +## How to Trigger Pipeline using GitHub Webhook + +In Jenkins configuration of the corresponding pipeline, make sure the **Definition** of the pipeline says **Pipeline script from SCM** i.e. it fetches Jenkinsfile from a remote repo. Also, check the **GitHub hook trigger for GITScm polling** box under **Build Triggers**. + +In GitHub, +- Go to **Webhooks** under the **Settings** tab of the corresponding repository. +- Click on **Add webhook** +- In **Payload URL**, write `http://:8080/github-webhook/`. GitHub will hit this endpoint to trigger the pipeline. +- Disable the **SSL verification** if working with http. +- Choose the type of event which would run this webhook, as per requirement. +- Click on **Add webhook** . +- Check the **Recent Deliveries** section in the webhook configuration to verify if the connection was successful. +- Example: + ![example_webhook](../assets/github-webhook.JPG) diff --git a/cicd-basics/basics.md b/cicd-basics/basics.md index 3e099fe..97ae1c0 100644 --- a/cicd-basics/basics.md +++ b/cicd-basics/basics.md @@ -11,9 +11,29 @@ - Reports: Stats about test coverage, code quality checks etc. - Deployment -CI/CD helps automate all these steps. Otherwise, performing all these steps for every change in the code will take very long and thereby delaying the delivery. +CI/CD helps automate all these steps. Otherwise, performing all these steps manually for every change in the code will take very long and thereby delaying the delivery. -- Jenkins Pipeline: Suppose, some changes are pushed to our Github. We shall set up Jenkins such that for any PR/commit on the repo it will run a set of actions automatically with the help of multiple tools. Hence Jenkins is called an orchestrator. +### Differences between Continuous Integration, Continuous Delivery and Continuous Deployment + +1. **Continuous Integration (CI)**: + - **Purpose**: CI focuses on **automating the integration** of code changes from multiple developers into a single project. The goal is to frequently integrate code (several times a day) and **run automated tests** to detect issues early. + - **Example**: Imagine a team of developers working on a JavaScript application. Each developer pushes their code changes to a shared repository on GitHub. With CI configured (using tools like Jenkins or GitLab CI), every code push triggers a **build** and a set of **unit tests**. If any test fails, the team is notified immediately to fix it, ensuring that the main branch remains stable and bug-free. + +1. **Continuous Delivery (CD)**: + - **Purpose**: Continuous Delivery automates the process of preparing code for release but requires a **manual approval step** before production deployment. This stage ensures that the codebase is always in a deployable state, even if the actual deployment is not automated. + - **Example**: In the same JavaScript application, the CI pipeline automatically runs integration tests and builds the application. In a CD setup, this pipeline also deploys the tested application to a **staging environment**. Once tested and approved by the QA team, a manager can trigger a **manual deployment to production**. This approach provides a higher level of control over what goes into production. + +1. **Continuous Deployment (CD)**: + - **Purpose**: Continuous Deployment takes Continuous Delivery a step further by **automating the entire process**, including deployment to production. Each successful change that passes all tests is deployed automatically without manual intervention, enabling rapid delivery of updates. + - **Example**: For a high-frequency application like a social media platform, the development team may practice continuous deployment. Each change pushed to the repository, once it passes all tests (unit, integration, and end-to-end tests), is **automatically deployed to production**. This allows users to see new features, improvements, or fixes almost immediately after they’re completed by developers. + +##### **Key Differences**: +- **Continuous Integration**: Focuses on code integration and testing automation. +- **Continuous Delivery**: Adds automation up to the staging environment, with a manual step for production. +- **Continuous Deployment**: Automates everything, including deployment to production, without manual steps. + +### Jenkins Pipeline +Suppose, some changes are pushed to our Github. We shall set up Jenkins such that for any PR/commit on the repo it will run a set of actions automatically with the help of multiple tools. Hence Jenkins is called an orchestrator. - e.g. for a Java application, Jenkin can be configured to run Maven for building, Junit for testing, ALM for reporting etc. whenever there is a PR/commit on our repo. @@ -27,7 +47,7 @@ CI/CD helps automate all these steps. Otherwise, performing all these steps for - Disadvantages of Jenkins - - While working with Jenkins, generally, we do not put all the load in a single machine. Instead, we create a master node, and connect several ec2 instances to it. Now using the master node, we configure those as worker nodes and schedule them to execute the pipelines. + - While working with Jenkins, generally, we do not put all the load in a single machine (as it may cause dependency conflicts and not practical). Instead, we create a master node, and connect several ec2 instances to it. Now using the master node, we configure those as worker nodes and schedule them to execute the pipelines/builds. - But this setup is not scalable as the setup becomes very costly as well as less maintainable. @@ -37,4 +57,7 @@ CI/CD helps automate all these steps. Otherwise, performing all these steps for For every PR, GitHub Actions will spin up a docker container in a remote server for us and everything is executed in it. When there is no change in the code, the container will be deleted and server will be used for some other project in another repo. As a result, there will be no wastage of resources. +### References +- [TrainWithShubham](https://youtu.be/XaSdKR2fOU4?si=awS9KPt3gys0P8TM) +- [Abhishek Veeramalla](https://youtube.com/playlist?list=PLdpzxOOAlwvLUH6ww022l7OZGakJYP9WY&si=KUAtAdWDxiEX-Ewf) diff --git a/cicd-basics/first-jenkins-pipeline.md b/cicd-basics/first-jenkins-pipeline.md new file mode 100644 index 0000000..e0c5104 --- /dev/null +++ b/cicd-basics/first-jenkins-pipeline.md @@ -0,0 +1,107 @@ +## Jenkins Pipeline +There are multiple ways to create a pipeline in Jenkins e.g., **Freestyle project**, **Pipeline**, **Multi-configuration project** etc. + +Jenkins freestyle projects are the traditional method of configuring jobs in Jenkins, where most configurations are done through the GUI (without the need to write any code)by setting parameters, build triggers, and post-build actions. While Jenkins freestyle projects are simple and quick to set up, they come with certain limitations, sucn as: + +- Job configurations in freestyle projects are stored in Jenkins itself, making it hard to track changes or collaborate on job configurations. + +- We need to duplicate configurations across multiple jobs for similar workflows, which is error-prone and time-consuming, i.e. lack of reusability. + +- Freestyle jobs struggle to handle complex workflows, especially those with multiple stages or conditional steps. + +To overcome these issues, Pipeline approach is used. It is a declarative in nature and uses Groovy scripting. A `Jenkinsfile` contains the configuration of Jenkins Pipeline. We shall focus on the Declarative syntax of writing a Jenkinsfile. + +### Default Storage Locations + +Every time we create a new job (i.e. a pipeline or freestyle project etc.) in Jenkins, a new folder is created at `/var/lib/jenkins/jobs/`. + +- Whenever a job is executed, a new build is created. Each job stores its related build-data in the directory `/var/lib/jenkins/jobs/{JOBNAME}` + +Each job folder contains: + +- The job configuration file is `/var/lib/jenkins/jobs/{JOBNAME}/config.xml` + +- The job builds are stored in `/var/lib/jenkins/jobs/{JOBNAME}/builds/` + +However, the files related to our project (e.g. source code pulled from SCM) is stored at `/var/lib/jenkins/workspace/{JOBNAME}/` by default. + +### Declarative Pipeline fundamentals +This is the basic structure of a Jenkinsfile: +```groovy + +pipeline { //block defines all the work done throughout your entire Pipeline. + + //The agent directive, which is required, instructs Jenkins to allocate an executor and workspace for the Pipeline. + + agent any // Execute this Pipeline or any of its stages, on any available agent. Since no external agent is specified, jenkins uses its built-in agent or the same machine where the Jenkins controller is running to execute the jobs + + stages { + stage('Build') { // Defines the "Build" stage + steps { + //Perform some steps related to the "Build" stage. + } + } + stage('Test') { + steps { + // + } + } + stage('Deploy') { + steps { + // + } + } + } +} +``` +We can also refer to the pipeline-syntax generator at `http://:8080/pipeline-syntax` and the directive-generator at `http://:8080/directive-generator` + +### Building the first Pipeline +- Using pipeline script, check out the steps [here](https://www.jenkins.io/doc/book/pipeline/getting-started/#through-the-classic-ui) + +- Using Pipeline Script from SCM, + ![Pipeline Script from SCM](../assets/jenkins-scm-pipeline.JPG) + + - The jenkins file in the [git repo](https://github.com/iam-veeramalla/Jenkins-Zero-To-Hero) looks like: + + ```groovy + pipeline { + agent { + docker { image 'node:16-alpine' } + } + stages { + stage('Test') { + steps { + sh 'node --version' + } + } + } + } + ``` + Explanation + - first, Jenkins gets the Jenkinsfile from the repo by cloning it. + - Builds a container based on the given image to run the script + - removes the container + +## Plugin +- To get a nice view of the pipeline, install **Pipeline: Stage View** plugin. + + +## Adding Credentials +To add credentials (e.g. private-SSHkey, GitHub API token, DockerHub secret token etc.): +- Go to **Manage Jenkins** > **Credentials** +- Click on **(global)** Domain +- Click on **Add Credentials** + - select the appropriate alternative from the dropdown of **Kind** . + + - Leave the **Scope** to its default value. Provide a name in the **ID** and an optional description in **Description**. + + - In the **Username**, add the username. Leave the **Treat username as secret** checkbox as empty. + + - In the **Password**, add the password. + + - Click on **Create** . + +## Referenes +- [Pipeline](https://www.jenkins.io/doc/book/pipeline/) + diff --git a/cicd-basics/jenkins-installation.md b/cicd-basics/jenkins-installation.md new file mode 100644 index 0000000..f64d257 --- /dev/null +++ b/cicd-basics/jenkins-installation.md @@ -0,0 +1,106 @@ +## Jenkins Installation on EC2 Instance +Pre-Requisites: + - Java (JDK) + +### Run the below commands to install Java and Jenkins + +Install Java + +```bash +sudo apt update +sudo apt install fontconfig openjdk-17-jre +``` + +Verify Java is Installed + +```bash +java -version +``` + +Now, we can proceed with installing Jenkins. Check the [docs](https://www.jenkins.io/doc/book/installing/linux/#debianubuntu) for latest instructions. + +```bash +sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \ + https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key +echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \ + https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ + /etc/apt/sources.list.d/jenkins.list > /dev/null +sudo apt-get update +sudo apt-get install jenkins + +``` + +**Note:** By default, Jenkins will not be accessible to the external world due to the inbound traffic restriction by AWS. Open port 8080 to allow *custom TCP* in the inbound traffic rules. + + +### Login to Jenkins using the below URL: + +`http://:8080 ` + +After you login to Jenkins, + - Run the command to copy the Jenkins Admin Password - `sudo cat /var/lib/jenkins/secrets/initialAdminPassword` + - Enter the Administrator password + - Click on Install suggested plugins + +Wait for the Jenkins to Install suggested plugins + + +Create First Admin User. + + +Jenkins Installation is Successful. You can now starting using the Jenkins. + +Installing Jenkins will create a *jenkins* user. + +Nowadays, Jenkins is used with docker as agents i.e. the jenkins stages will be executed in docker containers. It is useful in terms of cost and efficiency. + +## Install the Docker Pipeline plugin in Jenkins: + + - Log in to Jenkins. + - Go to Manage Jenkins > Manage Plugins. + - In the Available tab, search for **Docker Pipeline**. + - Select the plugin and click the Install button. + - Restart Jenkins after the plugin is installed. + + +Wait for the Jenkins to be restarted. + + +## Docker Agent Configuration + +Run the below command to Install Docker + +```bash +sudo apt update +sudo apt install docker.io -y +``` + + +### Grant Jenkins user and Ubuntu user permission to docker deamon + +```bash +sudo su # switching to the root user +usermod -aG docker jenkins +usermod -aG docker ubuntu +systemctl restart docker +``` + +Once you are done with the above steps, re-login to the ec2 instance to see the changes. Also, it is better to restart Jenkins at this point. + +Go to:`http://:8080/restart` + +### Final Step +- Run `sudo su - jenkins` to switch to jenkins user. +- Run `docker run hello-world` + +If we can see **Hello from Docker!** in the terminal, the docker agent configuration is successful. + +## Important +Everytime an ec2 instance is restarted, it gets a new public IP. So, when using Jenkins with an ec2 instance, we need to update the IP in the Jenkins configuration whenever the server is restarted. + +- Go to Manage Jenkins > System. +- Scroll down to Jenkins Location section. +- Update the Jenkins URL as `http://:8080/` +- Click on Save button. + + diff --git a/cicd-basics/multistage-multiagent-pipeline.md b/cicd-basics/multistage-multiagent-pipeline.md new file mode 100644 index 0000000..238bd06 --- /dev/null +++ b/cicd-basics/multistage-multiagent-pipeline.md @@ -0,0 +1,28 @@ +## WHAT +In a multi-agent pipeline, each stage runs on a unique agent. This approach is useful in case of an application with multiple technologies or containing conflicting dependencies. + +## Example + +```groovy +pipeline { + agent none + stages { + stage('Back-end') { + agent { + docker { image 'maven:3.9.9-eclipse-temurin-21-alpine' } + } + steps { // each step in a stage will be executed on the agent specified for that stage + sh 'mvn --version' + } + } + stage('Front-end') { + agent { + docker { image 'node:22.11.0-alpine3.20' } + } + steps { + sh 'node --version' + } + } + } +} +``` \ No newline at end of file diff --git a/cicd-basics/shared-library.md b/cicd-basics/shared-library.md new file mode 100644 index 0000000..e061fda --- /dev/null +++ b/cicd-basics/shared-library.md @@ -0,0 +1,83 @@ +## WHAT AND WHY +It is basically a remote repo containing Groovy scripts which can be reused across multiple pipelines in Jenkins. Hence, this eliminates code duplication and makes maintainence easier. + +In future, any modification to shared libraries automatically reflect in all dependent pipelines, thereby reducing the need to modify individual pipeline scripts when introducing new features or fixing bugs. + +Additionally, shared libraries are stored in version control systems like Git, enabling versioning, tracking changes, and rolling back if needed. + +## HOW +In the same GitHub repo containing our project or a separate one, we need to create a `vars` directory (in the root). Inside it, we shall store our Groovy scripts to be used in our pipelines. Each script should contain a **call** method. + +>The scripts must be named in camelCase or all lowercase. + +#### Adding the Library to Jenkins +- Navigate to **Manage Jenkins** » **System** » **Global Trusted Pipeline Libraries**, click on **Add**. +- Provide a name to the library. This name would be used in the pipeline to fetch it. +- Provide the name of the branch (e.g. **main**) of the remote repo where the `vars` directory is present. +- Under **Retrieval method**, provide the GitHub URL of the remote repo in **Project Repository** . By default, Jenkins looks for the `vars` directory in this. +- Add **Credentials** if it is a private repo. +- Click on **Save**. +- Example: + ![example_shared-lib](../assets/adding_shared-lib.JPG) + +Now, we can use the scripts stored in that repo in our pipelines. In case of any changes to the remote repo, Jenkins will pick up those automatically. + +See the below examples for clarity. + +## Examples + +- This is `helloWorld.groovy`, located in the remote repo. + + ```groovy + def call(){ + sh 'echo Hello World' + } + ``` + To use it in our pipeline, + ```groovy + @Library("name-of-library") _ //provide the same name used to add the library to Jenkins + + pipeline { + agent {label 'agent-demo'} + + stages { + stage('first') { + steps { + helloWorld() // use the script-name, not the method name present in it!! This executes the call() in helloWorld.groovy + } + } + } + } + ``` + +- This is `clone.groovy`, located in the remote repo. + + ```groovy + def call(rem_url,rem_branch){ + git url:rem_url, branch:rem_branch // using the args provided to clone a repo + } + ``` + To use it in our pipeline, + ```groovy + @Library("name-of-library") _ //provide the same name used to add the library to Jenkins + + pipeline { + agent {label 'agent-demo'} + + stages { + stage('first') { + steps { + clone("https://github.com/SteveSayantan/Python-Extravaganza.git","main") //this executes the call() in clone.groovy + } + } + } + } + ``` + +## Groovy Resources +- [YT Tutorial](https://youtu.be/vDtENU-3Lwo?si=JYK2gUj3EI76cIL-) + +- [Groovy Docs](https://groovy-lang.org/single-page-documentation.html) + +- [Online Article](https://www.tutorialspoint.com/groovy/index.htm) + diff --git a/cicd-basics/user-management.md b/cicd-basics/user-management.md new file mode 100644 index 0000000..21e7caf --- /dev/null +++ b/cicd-basics/user-management.md @@ -0,0 +1,42 @@ +By default, when you create a user in Jenkins, it can access almost everything. Hence, managing users and roles in Jenkins is essential to prevent unauthorized access and simplification of management. + +The user created while setting up Jenkins is the primary user. However, we can create other users as well. + +Let's create the following three users with three types of access: +- UserA --> Read Only Access +- UserB --> Read and Manage jobs starting with "hello" +- UserC --> Only build jobs + +## Steps +- Create new user: navigate to **Jenkins Dashboard** → **Manage Jenkins** → **Users**. Click on **Create User**. Enter the user name, password, full name and email-address and then click **Create User** button. Create UserA, UserB and UserC by following these steps. + +- Install **Role-based Authorization Strategy** plugin. +- After successful installation of plugin, Go to **Manage Jenkins** → **Security** and select the **Role-Based Strategy** under the **Authorization** section, click on **Apply** and **Save**. + +- Now, go to **Manage Jenkins** → **Manage and Assign Roles**. + +Under **Manage Roles**, + +- **Global** roles -> Global roles govern access permissions that affect the entire Jenkins system, beyond individual jobs, folders, or pipelines. + + In the **Overall** section, + - `Read`: Allows users to view the Jenkins interface without making any changes. *This is mandatory for all users*. + - `Administer`: Grants complete administrative control over the Jenkins system. + + The **View** section allows to define permissions related to viewing and modifying the **Dashboard** i.e. by organizing and displaying jobs in a customized manner. Any changes to the **Dashboard** will be visible to all the users, as the **Dashboard** is the same for all. + +Here, we create three roles i.e. **readOnly_Users**, **overall_Read**, **build_Users**. + +- **Item** roles -> These are specific to particular jobs or folders. They provide granular permissions to individual projects. We can also set a regular expression pattern for matching items, in the **Pattern** text-box. Here, users with **hello_Users** role can access and manage the jobs that start with **hello**. The pattern used is `hello.*`. For further details, check out [this](https://plugins.jenkins.io/role-strategy/). + +Hover the mouse pointer on the columns containing permissions for more details. +![Manage Roles](../assets/jenkins-manage_roles.JPG) + +Under **Assign Roles**, + +- we assign the created roles to different users. The **Global roles** section is used to assign the **Global** roles and the **Item roles** section assign the **Item**-specific roles. +![Assign Roles](../assets/jenkins-assign_roles.JPG) + + **userB** is assigned two roles i.e. **overall_Read** (provides overall read permission) and **hello_Users** (provides job-related permissions) + + diff --git a/docker-basics/docker-commands.md b/docker-basics/docker-commands.md index 0cdddce..0f29681 100644 --- a/docker-basics/docker-commands.md +++ b/docker-basics/docker-commands.md @@ -12,9 +12,9 @@ 1. `docker pull image_name:tag` : pulls the image with the specified tag from docker hub, e.g. `docker pull ubuntu:16.04`. The default value of tag is *latest* . -1. `docker run -it image_name:tag` : runs the new container in an interactive environment created from the image. We can optionally specify the tag as `docker run -it ubuntu:16.04` . The default value of tag is *latest* . +1. `docker run -it image_name:tag` : runs the new container created from the image with an interactive terminal attached to it, thereby stopping the container from exiting immediately after creation. We can optionally specify the tag as `docker run -it ubuntu:16.04` . The default value of tag is *latest* . -1. `docker container exec -it container_id bash` : executes the command *bash* to a running container having id *container_id*. This command fails if the container isn't running. +1. `docker container exec -it container_id bash` : executes the command *bash* in a running container having id *container_id*. `-it` flag attaches an interactive terminal to it. This command fails if the container isn't running. 1. `docker stop container1_id container2_id ...` : To stop one or more running containers. We can also use the assigned name instead of container id. @@ -32,7 +32,7 @@ 1. `docker commit -m "commit message" container_id new_image_name:tag` : Creates a new image with the given name from the changes done in the container. We can also optionally provide a tag. To run the newly created image, we use `docker run new_image_name:tag`. -1. `docker build -t username/repo_name:tag path` : Starts building an image with the name *username/repo_name*, using the dockerfile present at *path* .We can also optionally provide a tag (defaults as *latest* ). `username` refers to the one associated with dockerhub, `repo_name` refers to the remote repo on dockerhub, where the image will be uploaded. +1. `docker build -t username/repo_name:tag path` : Starts building an image with the name *username/repo_name*, using the dockerfile present at *path* .We can also optionally provide a tag (defaults as *latest* ). `username` refers to the one associated with dockerhub, `repo_name` refers to the remote repo on dockerhub, where the image will be uploaded. Optionally, we can use `--no-cache` flag with this to invalidate the cache for RUN instruction in dockerfile. diff --git a/docker-basics/docker-compose.md b/docker-basics/docker-compose.md index 99341c8..c15e1e9 100644 --- a/docker-basics/docker-compose.md +++ b/docker-basics/docker-compose.md @@ -11,7 +11,10 @@ Using docker compose we can do these very easily only using two commands `docker For details, check out the [docs](https://docs.docker.com/compose/) ### HOW -For using docker compose, we need to still write Dockerfiles. Additionally, we create a YAML file (compose.yaml) that builds and runs our containers using our Dockerfiles (or sometimes from images). +For using docker compose, we need to still write Dockerfiles. Additionally, we create a YAML file (**compose.yaml**) that builds and runs our containers using our Dockerfiles (or sometimes from images). + +Each container for a service joins the default network created by Compose and is both reachable by other containers on that network, and discoverable by the service's name. + For examples of docker-compose, checkout [this](https://github.com/docker/awesome-compose) diff --git a/docker-basics/docker-flow.md b/docker-basics/docker-flow.md index 3c03a9d..e948024 100644 --- a/docker-basics/docker-flow.md +++ b/docker-basics/docker-flow.md @@ -13,6 +13,19 @@ If the image is already present, then daemon directly creates the container from ## Docker Image -Docker Images contain a smaller version of Operating System and all the dependecies of our app. Images are built in layers. Each layer is immutable and a collection of files and directories. +Docker Images contain a smaller version of Operating System and all binaries, config files, and other dependencies of our app. Images are built in layers. Each image is immutable, we can only add changes on top of it or create a new image. -Layers receive an ID, calculated via a SHA 256 hash of the layer contents. Thus, if the layer contents change the SHA 256 hash changes as well. If any layer of an image is already present in the local system, it is not downloaded. \ No newline at end of file +Each layer is immutable as well. Each layer in an image contains a set of filesystem changes - additions, deletions, or modifications.Layers receive an ID, calculated via a SHA 256 hash of the layer contents. Layers can be reused between images, i.e. if any layer of an image is already present in the local system, it is not downloaded. + +#### Caching +When you run the docker build command to create a new image, Docker executes each instruction in your Dockerfile, creating a layer for each command and in the order specified. + +Subsequent builds after the initial are faster due to the caching mechanism, as long as the commands and context remain unchanged. Docker caches the intermediate layers generated during the build process. When you rebuild the image without making any changes to the Dockerfile or the source code, Docker can reuse the cached layers, significantly speeding up the build process. + +Here are a few examples of situations that can cause cache to be invalidated: + +- Any changes to the command of a RUN instruction invalidates that layer. Docker detects the change and invalidates the build cache if there's any modification to a RUN command in your Dockerfile. + +- Any changes to files copied into the image with the COPY or ADD instructions. Docker keeps an eye on any alterations to files within our project directory. Whether it's a change in content or properties like permissions, Docker considers these modifications as triggers to invalidate the cache. + +- Once one layer is invalidated, all following layers are also invalidated. If any previous layer, including the base image or intermediary layers, has been invalidated due to changes, Docker ensures that subsequent layers relying on it are also invalidated. This keeps the build process synchronized and prevents inconsistencies. \ No newline at end of file diff --git a/docker-basics/docker-networking.md b/docker-basics/docker-networking.md index 83d1a5a..7b6658c 100644 --- a/docker-basics/docker-networking.md +++ b/docker-basics/docker-networking.md @@ -4,16 +4,19 @@ Containers need to communicate to other containers and the host system. However, ### HOW Useful network drivers provided by Docker: -- Whenever we create a container, it is connected to Docker's default bridge network **docker0**, aka **bridge** . A container is connected to **docker0** using a **veth** interface. One end of the **veth** pair is placed inside the container's network namespace, acting as its network interface, while the other end is attached to **docker0**, enabling communication with other containers and the host. +- Whenever we create a container, it is connected to Docker's default bridge network **docker0**, aka **bridge** . A container is connected to **docker0** using a **veth** interface. One end of the **veth** pair is placed inside the container's network namespace, acting as its network interface, while the other end is attached to **docker0**, enabling communication with other containers on the same bridge only. Containers on the default bridge network can only access each other by IP addresses. + ![default_bridge](../assets/bridge1.png) -- In **host** networking, a container directly shares the networking namespace of the Docker host and the container doesn't get its own IP-address allocated. Anyone having access to the host can have access to the container. Hence it can be a security risk. +- In **host** networking, a container directly shares the networking namespace of the Docker host and the container doesn't get its own IP-address allocated. Port mapping also doesn't work. Anyone having access to the host can have access to the container. Hence it can be a security risk. - Overlay Networking: This mode enables communication between containers across multiple Docker host machines, allowing containers to be connected to a single network even when they are running on different hosts. ### User-defined Networks We can create custom, user-defined networks, and connect multiple containers to the same network. Once connected to a user-defined network, containers can communicate with each other using container IP addresses or container names. +![user_defined](../assets/bridge2.png) + Here, we shall create bridge networks. Containers in different bridge can not communicate with each other. A container can be connected to more than one networks. ### Useful Commands @@ -36,4 +39,6 @@ Here, we shall create bridge networks. Containers in different bridge can not co By default, Compose sets up a separate network for our app. Each container for a service joins that network and is both reachable by other containers on that network, and discoverable by the service's name. -Our app's network is given a name based on the project name. \ No newline at end of file +Our app's network is given a name based on the project name. + +Go through the [networking documentation](https://docs.docker.com/engine/network/) and [compose networking](https://docs.docker.com/compose/networking/) for more details. \ No newline at end of file diff --git a/docker-basics/dockerVolumes.md b/docker-basics/dockerVolumes.md index e318798..2730cfe 100644 --- a/docker-basics/dockerVolumes.md +++ b/docker-basics/dockerVolumes.md @@ -1,5 +1,5 @@ ### WHY -When our container needs to store some data in it, the data persists till the container is running. If the container is restarted or gone down, all the data is destroyed. So, it is a very common requirement to persist the data in a Docker container beyond the lifetime of the container. +When our container needs to store some data in it, the data persists till the container is running. If the container is restarted or removed, all the data is destroyed. So, it is a very common requirement to persist the data in a Docker container beyond the lifetime of the container. ### HOW There are 2 different ways how docker solves this problem. @@ -36,6 +36,8 @@ Check the syntactical differences, [here](https://docs.docker.com/engine/storage - `docker run -d --name devtest -v myvol2:/app nginx:latest` : To mount the volume myvol2 into /app/ in the container. +- `docker inspect container_name` : Look for *Mounts* section to check if the volume is correctly mounted to the container. + **If we start a container with a volume that doesn't yet exist, Docker creates the volume for us.** **If we start a container which creates a new volume, and the container has files or directories to be mounted, Docker copies the directory's contents into the volume.** diff --git a/docker-basics/first-docker-image/Dockerfile b/docker-basics/first-docker-image/Dockerfile index 27f7e12..91379b7 100644 --- a/docker-basics/first-docker-image/Dockerfile +++ b/docker-basics/first-docker-image/Dockerfile @@ -4,10 +4,17 @@ FROM ubuntu:latest # it creates and sets the working directory for following instructions WORKDIR /app -# this is to copy the source file inside /app (The destination dir must have a trailing slash ) +# this is to copy the source file inside /app (The destination dir must have a trailing slash ). Also creates a new layer. COPY . /app/ # it sets the command to be executed when running a container from an image -CMD ./simple-bash +ENTRYPOINT ["./simple-bash"] +# ENTRYPOINT vs CMD +# --------------------- +# Both CMD and ENTRYPOINT instructions define what command gets executed when running a container. +# But, ENTRYPOINT instructions can not be overridden unlike CMD instructions. +# hence, we can use ENTRYPOINT to set fairly stable default commands and arguments +# and then use CMD to set additional defaults that are more likely to be changed. +# we can override the ENTRYPOINT instruction using the "--entrypoint" flag with `docker run`. \ No newline at end of file diff --git a/docker-basics/installation.md b/docker-basics/installation.md index 6aeb4b5..3f0fa6b 100644 --- a/docker-basics/installation.md +++ b/docker-basics/installation.md @@ -73,7 +73,9 @@ docker run hello-world 1. The name of the image should be same as that of the repository. Inside a repo, each image is identified using its tag. Hence, every image to be pushed must have a tag. -1. Login to Docker Hub from CLI using `docker login`. +1. Login to Docker Hub from CLI using `docker login`. Optionally, we can specify the username and password/token with **-u** and **-p** flags respectively, e.g. `docker login -u myUserName -p myPasswd`. 1. Push the image using `docker push repo_name:tag` +## Docker Compose +Install Docker Compose using `sudo apt install docker-compose-v2` \ No newline at end of file diff --git a/docker-basics/multistage-builds.md b/docker-basics/multistage-builds.md index 221642e..7031087 100644 --- a/docker-basics/multistage-builds.md +++ b/docker-basics/multistage-builds.md @@ -14,7 +14,9 @@ We can have multiple stages as per our requirement. As a result, we can separate the build process from the runtime environment, resulting in a smaller image size that only includes the dependencies and libraries required to run our application. -In multi-stage, the build stages of Dockefile size, will not be added to the docker image, only the final stage, where we pass certain commands to run our application with a specific runtime is added. +In multi-stage builds, until we selectively copy something, nothing will be added to the resultant docker image from the previous stages. Only the final stage is added by default. + +Because, in multi-stage Dockerfile, the final stage is the default target for building. This means that if we don't explicitly specify a target stage using the **--target** flag in the docker build command, Docker will automatically build the last stage by default. We could use the **--target** flag to build one of the previous stages. ### Distroless Images @@ -28,7 +30,7 @@ So when we use distroless images, we are free from the os related vulnerabilitie - Find distroless images [here](https://github.com/GoogleContainerTools/distroless) -### Example +### Example 1 The following example demonstrates a multi-staged build for a GO app: ```dockerfile @@ -58,4 +60,53 @@ COPY --from=build /app /app # Set the entrypoint for the container to run the binary ENTRYPOINT ["/app"] +``` + +### Example 2 + +```dockerfile +# syntax=docker/dockerfile:1.4 + +# 1. For build React app +FROM node:lts AS development + +# Set working directory +WORKDIR /app + + +COPY package.json /app/package.json +COPY package-lock.json /app/package-lock.json + +# Same as npm install +RUN npm ci + +COPY . /app + +ENV CI=true +ENV PORT=3000 + +# this CMD instruction will not be executed in the container made of the final image +CMD [ "npm", "start" ] # unless, we use "--target development" flag in the build command. + +FROM development AS build + +RUN npm run build + +# 2. For Nginx setup +FROM nginx:alpine + +# Copy config nginx +COPY --from=build /app/.nginx/nginx.conf /etc/nginx/conf.d/default.conf + +WORKDIR /usr/share/nginx/html + +# Remove default nginx static assets +RUN rm -rf ./* + +# Copy static assets from builder stage +COPY --from=build /app/build . + +# Containers run nginx with global directives and daemon off +ENTRYPOINT ["nginx", "-g", "daemon off;"] + ``` \ No newline at end of file diff --git a/docker-basics/node-server/.dockerignore b/docker-basics/node-server/.dockerignore new file mode 100644 index 0000000..4ffaded --- /dev/null +++ b/docker-basics/node-server/.dockerignore @@ -0,0 +1,12 @@ +# IMPORTANT: the .dockerignore file should be located at the root directory of the build context !!! +.git +.vscode +.dockerignore +.gitignore +.env +config +build +node_modules +docker-compose.yaml +Dockerfile +README.md \ No newline at end of file diff --git a/docker-basics/node-server/Dockerfile b/docker-basics/node-server/Dockerfile new file mode 100644 index 0000000..99334d0 --- /dev/null +++ b/docker-basics/node-server/Dockerfile @@ -0,0 +1,13 @@ +FROM node:slim + +WORKDIR /app/ + +COPY package.json . + +RUN npm i + +COPY . . + +EXPOSE 3000 + +CMD [ "npm", "start"] \ No newline at end of file diff --git a/docker-basics/node-server/app.js b/docker-basics/node-server/app.js new file mode 100644 index 0000000..a589de3 --- /dev/null +++ b/docker-basics/node-server/app.js @@ -0,0 +1,16 @@ +const http= require('node:http') + +const server=http.createServer() + +server.on('request', (req,res)=>{ + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ + data: 'Hellll yeaaaaah!!!!!', + })); +}) + +server.listen(3000,()=>{ + console.log("server is listening on http://localhost:3000") +}) + +// When this dir is mounted on a container,to restart the server on file change, we use the `-L` flag with nodemon. Check package.json. \ No newline at end of file diff --git a/docker-basics/node-server/package-lock.json b/docker-basics/node-server/package-lock.json new file mode 100644 index 0000000..efc6f4f --- /dev/null +++ b/docker-basics/node-server/package-lock.json @@ -0,0 +1,359 @@ +{ + "name": "server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "server", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "nodemon": "^3.1.4" + } + }, + "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, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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 + }, + "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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "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/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nodemon": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + } + } +} diff --git a/docker-basics/node-server/package.json b/docker-basics/node-server/package.json new file mode 100644 index 0000000..c4d4ec6 --- /dev/null +++ b/docker-basics/node-server/package.json @@ -0,0 +1,15 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "start":"nodemon -L app.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "nodemon": "^3.1.4" + } +} diff --git a/docker-basics/vite-react/.dockerignore b/docker-basics/vite-react/.dockerignore new file mode 100644 index 0000000..4755ba3 --- /dev/null +++ b/docker-basics/vite-react/.dockerignore @@ -0,0 +1,11 @@ +.git +.vscode +.dockerignore +.gitignore +.env +config +build +node_modules +docker-compose.yaml +Dockerfile +*.md \ No newline at end of file diff --git a/docker-basics/vite-react/Dockerfile b/docker-basics/vite-react/Dockerfile new file mode 100644 index 0000000..198fb6f --- /dev/null +++ b/docker-basics/vite-react/Dockerfile @@ -0,0 +1,17 @@ +FROM node:18.20.4-slim + +WORKDIR /app/ + +COPY package.json . + +RUN npm i + +COPY . . + +EXPOSE 3000 + +CMD [ "npm", "run", "dev"] + +# We'll want to reinstall the dependencies if that file changes, but use cached dependencies if the file is unchanged. +# So, start by copying only that file first, then install the dependencies, and finally copy everything else. +# Then, we only need to recreate the npm dependencies if there was a change to the package.json file. \ No newline at end of file diff --git a/docker-basics/vite-react/README.md b/docker-basics/vite-react/README.md new file mode 100644 index 0000000..f768e33 --- /dev/null +++ b/docker-basics/vite-react/README.md @@ -0,0 +1,8 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/docker-basics/vite-react/index.html b/docker-basics/vite-react/index.html new file mode 100644 index 0000000..0c589ec --- /dev/null +++ b/docker-basics/vite-react/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +

+ + + diff --git a/docker-basics/vite-react/package-lock.json b/docker-basics/vite-react/package-lock.json new file mode 100644 index 0000000..f488fc9 --- /dev/null +++ b/docker-basics/vite-react/package-lock.json @@ -0,0 +1,4149 @@ +{ + "name": "docker-volume-test", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "docker-volume-test", + "version": "0.0.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.9.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.9.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "vite": "^5.4.1" + } + }, + "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, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz", + "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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, + "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, + "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, + "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 + }, + "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, + "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, + "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, + "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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", + "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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 + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001655", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", + "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.9.1.tgz", + "integrity": "sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.9.1", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.35.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz", + "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0-rc-fb9a90fa48-20240614", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz", + "integrity": "sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.11.tgz", + "integrity": "sha512-wrAKxMbVr8qhXTtIKfXqAn5SAtRZt0aXxe5P23Fh4pUAdC6XEsybGLB8P0PI4j1yYqOgUEUlzKAGDfo7rJOjcw==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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 + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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, + "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, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "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 + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "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 + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "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/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", + "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.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", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/docker-basics/vite-react/package.json b/docker-basics/vite-react/package.json new file mode 100644 index 0000000..9406106 --- /dev/null +++ b/docker-basics/vite-react/package.json @@ -0,0 +1,28 @@ +{ + "name": "docker-volume-test", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.9.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.9.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "vite": "^5.4.1" + } +} diff --git a/docker-basics/vite-react/public/vite.svg b/docker-basics/vite-react/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/docker-basics/vite-react/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docker-basics/vite-react/src/App.css b/docker-basics/vite-react/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/docker-basics/vite-react/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/docker-basics/vite-react/src/App.jsx b/docker-basics/vite-react/src/App.jsx new file mode 100644 index 0000000..1eb3220 --- /dev/null +++ b/docker-basics/vite-react/src/App.jsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> + +

Vite and React

+
+ +

+ Edit src/App.jsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/docker-basics/vite-react/src/assets/react.svg b/docker-basics/vite-react/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/docker-basics/vite-react/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docker-basics/vite-react/src/index.css b/docker-basics/vite-react/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/docker-basics/vite-react/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/docker-basics/vite-react/src/main.jsx b/docker-basics/vite-react/src/main.jsx new file mode 100644 index 0000000..89f91e5 --- /dev/null +++ b/docker-basics/vite-react/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import App from './App.jsx' +import './index.css' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/docker-basics/vite-react/vite.config.js b/docker-basics/vite-react/vite.config.js new file mode 100644 index 0000000..b94a081 --- /dev/null +++ b/docker-basics/vite-react/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + + // to enable HMR when this dir is mounted on a container + server:{ + host:true, + port:3000 + } +}) diff --git a/nginx/basic-auth/basic-auth.conf b/nginx/basic-auth/basic-auth.conf new file mode 100644 index 0000000..d3f6c61 --- /dev/null +++ b/nginx/basic-auth/basic-auth.conf @@ -0,0 +1,21 @@ +server{ + listen 80; + + root /var/www/html; + + index index.html index.htm; + + # auth_basic directive enables the Basic Authentication protocol in this server. The supplied arg is used as realm + auth_basic "Website under development"; # Now, WWW-Authenticate header will have the value: Basic realm="Website under development" + + auth_basic_user_file /etc/nginx/.htpasswd; # Specifies the location of the .hdpasswd file + + location / { + auth_basic off; # off disables Basic Authentication that was inherited from the server context, for this location + try_files $uri $uri/ = 404; + } + + location /auth { # to access this route we must undergo Basic Authentication + try_files $uri $uri/ =404; + } +} \ No newline at end of file diff --git a/nginx/basic-auth/basic-authentication.md b/nginx/basic-auth/basic-authentication.md new file mode 100644 index 0000000..46b0d90 --- /dev/null +++ b/nginx/basic-auth/basic-authentication.md @@ -0,0 +1,81 @@ +## HTTP authentication +HTTP provides a general framework for access control and authentication. The idea is that the a server would challenge a client request, and then the client would provide authentication information. For details, click [here](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication). + +The challenge and response flow works like this: + +- The server responds to a client with a 401 (Unauthorized) response status and provides a **WWW-Authenticate** response header containing at least one challenge (authentication procedure). + +- A client that wants to authenticate itself with the server can then do so by including an **Authorization** request header with the credentials. + +On receiving the **WWW-Authenticate** header in response, usually a client will present a password prompt to the user. Then, the client will issue the request again including the correct Authorization header. + +### Basic Authentication +There are several types of authentication methods (aka challenges) supported by **WWW-Authenticate** header, read about [them](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate). + +We shall focus on Basic Authentication method. Read about it [here](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#basic_authentication). + +In short, the workflow will look like: + +- The server would send a **WWW-Authenticate** header in the response which looks like `WWW-Authenticate: Basic realm="Some description"` (*realm* is just a string describing a protected area). + +- Receving this response, a browser receiving this header would first prompt the user for their username and password, and then re-request the resource: this time including the (encoded) credentials in the **Authorization** header. + - For "Basic" authentication the credentials are constructed by first combining the username and the password with a colon (aladdin:opensesame), and then by encoding the resulting string in base64. + - e.g., the Authorization header might look like this: `Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l`. + + +## Implementation in nginx +Now, we shall implement "Basic" authentication in our nginx server, i.e. if a request does not have the *Authorization* header, nginx will send a 401 response along with a **WWW-Authenticate** header. So that, the browser will prompt the user for their username and password, and then re-request nginx with *Authorization* header. + +We shall use two directives from [ngx_http_auth_basic_module](https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html#auth_basic), + +- **auth-basic** : The specified parameter is used as a *realm*. + +- **auth_basic_user_file**: Specifies a `.htpasswd` file that stores user names and passwords, in **name:password** format. But the *password* has to be encrypted before it is stored. + +Our configuration file looks like: +```nginx +# /etc/nginx/basic-auth.conf + +server{ + listen 80; + + root /var/www/html; + + index index.html index.htm; + + auth_basic "Website under development"; + auth_basic_user_file /etc/nginx/.htpasswd; + + location / { + auth_basic off; + try_files $uri $uri/ = 404; + } + + location /auth { + try_files $uri $uri/ =404; + } +} +``` +- Now, we need to add the credentials of the users in the `/etc/nginx/.htpasswd` file. To get an encrypted password we use the *openssl* tool. + - `openssl passwd -apr1`: This command prompts for a password in the cli and returns the encrypted form of it. **-apr1** is the algorithm for encryption. + + - To add the credentials of the first user, run + ```bash + echo -n "user1:`openssl passwd -apr1`">>/etc/nginx/.htpasswd + ``` + **-n** flag removes the trailing newline. + + - To add the credentials of the subsequent users, run + ```bash + echo -ne "\nuser2:`openssl passwd -apr1`">>/etc/nginx/.htpasswd + ``` + **\n** ensures the subsequent credentials are added in a new line. **-e** flag interprets \n as a newline character. When using **-e** flag, we need to use double quotes. + + - switch to the root user with `sudo su` to avoid permission issues. + + - Now, `/etc/nginx/.htpasswd` file looks like, + ``` + user1:$apr1$D7cays6T$DdimziR0/LhQYuZq91p991 + user2:$apr1$NY8FX2l1$RckKiptchceITv7dqQGsG0 + ``` +- reload nginx to see the effects. \ No newline at end of file diff --git a/nginx/configuration-details.md b/nginx/configuration-details.md new file mode 100644 index 0000000..50ee4e3 --- /dev/null +++ b/nginx/configuration-details.md @@ -0,0 +1,42 @@ +- The entire nginx configuration follows a tree-like / hierarchical structure. + +- Each context has its specific settings which can be overwritten in the child context. + +- We have **main** context which is the outermost one. The directives present outside any context in `/etc/nginx/nginx.conf` belong to the **main** context. We have the followings in it: + + ``` + main context + ├── no. of worker processes to run + ├── user to run the nginx process + ├── info. about PID + ├── error log location + ├── event context + │ ├── No. of connections per worker process + │ └── ... + ├── stream context + │ ├── TCP/UDP settings + │ └── ... + └── http context + ├── access-log location (for incoming req) + ├── server context (multiple may exist) + │ └── location context + └── upstream context (used for reverse proxy,loadbalancing etc.) + ``` +- Generally, Nginx creates one master process and multiple worker processes. +- Virtual Server: We can host multiple domains from one physical server using multiple server blocks in NGINX config . This feature is called virtual server. + +- It is recommended to keep `/etc/nginx/nginx.conf` (contains main, http and event contexts, generally) intact. So, we put our custom configuration files (containing server and upstream context, generally) inside `/etc/nginx/conf.d/` and attach those at the end of **http** context in `/etc/nginx/nginx.conf` using *include* directive. + +- In some distros like Ubuntu, there are folders like **modules-enabled**, **site-enabled** for holding config files, but we would stick to the above approach. + - Hence, we can remove the following lines from `/etc/nginx/nginx.conf` . + + ```nginx + include /etc/nginx/modules-enabled/*.conf; + + include /etc/nginx/sites-enabled/*; + ``` + +- config files are named as follows: + - cafe.codersgyan.com.conf + - cornhub.com.conf + \ No newline at end of file diff --git a/nginx/intro.md b/nginx/intro.md new file mode 100644 index 0000000..8409ec4 --- /dev/null +++ b/nginx/intro.md @@ -0,0 +1,303 @@ +**Nginx** is an open-source, high-performance web server. Originally designed to handle high concurrency, it's known for its event-driven, non-blocking architecture, making it ideal for high-traffic websites. +- **Web Server**: Nginx serves static content (like HTML, CSS, JavaScript) and handles HTTP requests efficiently. +- **Reverse Proxy**: It forwards client requests to backend servers (e.g., Node.js, Python) and returns the response, enhancing security and performance. +- **Load Balancer**: Nginx distributes traffic across multiple servers to optimize resource use and prevent overload. +- **HTTP Cache**: It can cache responses from backend servers to speed up content delivery for repeated requests. + +By default, nginx listens to port 80 for http requests. + +Static files are served from `/var/www/html` directory. +Important configurations are stored in `/etc/nginx` directory. + +### Useful Commands + +- `sudo apt install nginx` : To install nginx. +- `sudo systemctl status nginx` : To check the status of nginx service. +- `nginx` : To start nginx service. +- `sudo nginx -t` : Test the Nginx configuration for syntax errors +- `sudo nginx -T` : To display the entire Nginx configuration (including all included configuration files) in the terminal, along with validating the syntax of the configuration. +- `nginx -s reload` : To reload the server w/o stopping the Nginx service to reflect the changes made to Nginx configuration files. +- `nginx -s quit` : To stop nginx processes with waiting for the worker processes to finish serving current requests. + + +### Important References + +- [Nginx HTTP core module](https://nginx.org/en/docs/http/ngx_http_core_module.html) +- [How nginx processes a request](https://nginx.org/en/docs/http/request_processing.html) + +- [NGINX as a WebSocket Proxy](https://www.f5.com/company/blog/nginx/websocket-nginx) + +- [Using Free Let’s Encrypt SSL/TLS Certificates with NGINX](https://www.f5.com/company/blog/nginx/using-free-ssltls-certificates-from-lets-encrypt-with-nginx) + +- [Setup SSL in Nginx on Ubuntu by ChaiCode](https://docs.chaicode.com/ssl-in-nginx-ubuntu/) + +### Terminologies + +`/etc/nginx/nginx.conf` is the entry-point for nginx. + +An Nginx configuration file contains a set of key-value pairs, with some key-value pairs residing inside a block. + +- Each key-value pair is called a **directive**. E.g., + + ```nginx + include /etc/nginx/modules-enabled/*.conf; + ``` +- Each block is called a **context**. Each context contains directives specific to it. E.g., + + ```nginx + http{ # this block is a context + ... + } + ``` + +### Static Folder Structure +``` +/var/www/ +└── mysite/ + ├── index.html + ├── styles.css + ├── fruits/ + │ ├── apple.png + │ └── fruit-list.html + └── vegetables/ + └── potato.html +``` +### Serving a simple HTML file + +- The **listen** directive in Nginx is used to specify the port number on which the server will accept incoming connections. + - Optionally, we can also specify the IP address if our server has multiple IP addresses, and we want to bind Nginx to a specific one. + +- Inside the **server** context, we can set the name of the virtual server with **server_name** directive. It defines the domain names or hostnames that this particular server block will respond to. Its default value is `""` (empty string). The *Host* header field ( **that specifies the host and port number of the server to which the request is being sent** ) of the request against the **server_name** entries of the server are checked. If the server name is not found, the request will be processed by the default server. + + - As we haven't mentioned any **server_name**, Nginx fails to find a server block, hence serves the request using the default server (i.e. this one itself,as there's only one server block). + +```nginx +# /etc/nginx/conf.d/test.nginx.conf + +server{ + listen 80 ; + root /var/www/mysite; # path to the directory containing our static files. + # This directory must have executable permission for others +} + +``` +Test the configuration for syntax errors and reload the server if it is already running. + +### Serving an HTML page with CSS + +First, we need to link the CSS file to the HTML file. Now, if we reload the server, it would serve the css file but the browser would not be able to parse it because of incorrect mime-type in 'Content-Type' header of the response. + +So, we have to specify the mime-type for different files as follows: + +```nginx +# /etc/nginx/conf.d/test.nginx.conf +types{ + text/html html; + text/css css; +} + +server{ + ... +} + +``` +However, this way of adding mime-types is not practical. To solve this, Nginx comes with a list of default mime-types that we can use instead: + +```nginx +# /etc/nginx/conf.d/test.nginx.conf + +include mime.types; # this mime.types file is located inside /etc/nginx itself. + +server{ + ... +} + +``` +However, **mime.types** is already included in /etc/nginx/nginx.conf file. + +### Adding routes (Location context) +In Nginx, the location context is used to define how Nginx should process requests based on the URI (Uniform Resource Identifier) of the incoming request. Nginx matches the incoming URI against the location blocks in a particular order. + +In a nutshell, it allows us to serve different html files for different endpoints. Refer to the HTTP module of the docs for details. + +```nginx +# /etc/nginx/conf.d/test.nginx.conf + +server{ + listen 80; + + location / { + # root directive sets the root directory for requests. File is served from the path created by + # appending the incoming URI to the value of the root directive + + root /var/www/mysite; # The `/var/www/mysite/index.html` file will be sent in response to the “/index.html” (or, "/") request. + } + + location /fruits { + + root /var/www/mysite; # for this request, nginx will search this directory. + index fruit-list.html; # Telling nginx that the `/var/www/mysite/fruits/fruit-list.html` file will be sent in response to "/fruits". + # since, no index.html is present, "/fruits/index.html" will cause a 404 error. + } +} + +``` +We can use the **alias** directive to define a replacement for the specified location. + +```nginx +# /etc/nginx/conf.d/test.nginx.conf + +server{ + ... + location /nutritious-fruits { + + alias /var/www/mysite/fruits; + + index fruit-list.html; # since, index.html is not present in /var/www/mysite/fruits, so we need to set the index. + + # on request of `/nutritious-fruits/apple.png`, the file '/var/www/mysite/fruits/apple.png' will be sent. + + # on request of `/nutritious-fruits`, the file '/var/www/mysite/fruits/fruit-list.html' will be sent. + + # i.e. we don't need to have a separate directory as previous case. Basically, we are using the contents of `/fruits` route for `/nutritious-fruits` as well. + } +} + +``` + +### try_files Directive +It checks the existence of files in the specified order and uses the first found file for request processing. It's typically used for handling errors, fallback scenarios. + +```nginx +# /etc/nginx/conf.d/test.nginx.conf + +server{ + listen 80; + + ... + + location /vegetables{ + + root /var/www/mysite; + + # The path to a file is constructed appending the file mentioned to the root directive + try_files $uri $uri/ /vegetables/veggies.html /vegetables/potato.html =404; + + # For any incoming request (say, /vegetables/hello), nginx will search + + # 1. if a static file "/var/www/mysite/vegetables/hello" exists. Otherwise, + + # 2. if the directory "/var/www/mysite/vegetables/hello/" exists (to serve a default file, such as index.html, within that directory). Otherwise, + + # 3. if the "/var/www/mysite/vegetables/veggies.html" file exists. Otherwise, + + # 4. if "/var/www/mysite/vegetables/potato.html" exists. If no file is found, we would get a 404 response. + } +} + +``` + +### Regular Expressions + +We need to use ~ or ~* when defining a regular expression location block. + +- `~`: Indicates a case-sensitive regular expression. +- `~*`: Indicates a case-insensitive regular expression. + +```nginx +# /etc/nginx/conf.d/test.nginx.conf +server{ + listen 80; + ... + location ~* /count/[0-9] { + return 301 /; + + # on request of `/count/2` or `/count/4` or `/count/345` , the user will be redirected. + + # `/count/345` matches because nginx only needs to match a digit after count, it does not care about the rest. + } +} + +``` + +### How Maching is Done +Nginx matches the incoming URI against the `location` blocks in a particular order. + +##### Matching Process: +1. Nginx first tries to match **exact locations** (`=`). This matches the exact URI and takes priority over other matches. +1. Then it looks for the **longest prefix** match (`/`). +1. If no prefix matches, it checks **regular expressions** (`~`, `~*`). +1. Finally, if no match is found, the default **catch-all** location (`/`) is applied. Incoming URIs that don’t match any specific locations will hit this block. + +##### Example Combined Configuration: + +```nginx +server { + location = / { + return 200 "Exact Root Match\n"; + } + + location /images/ { + return 200 "Images Folder\n"; + } + + location ~ \.php$ { + return 200 "PHP File\n"; + } + + location / { + return 200 "Default Location\n"; + } +} +``` + +- `/` matches the exact root URI. +- `/images/logo.png` matches the `/images/` prefix. +- `/about.php` matches the regex for PHP files. +- Anything else, like `/blog`, hits the default `/` location. + + + +In Nginx, the `^~` modifier is used to tell Nginx to give **priority** to a prefix match over any regular expression matches. + +### Purpose of `^~`: +- It ensures that if a prefix match is found with `^~`, **regular expression** location blocks will be skipped, even if they might also match the incoming URI. +- This is useful when you have a prefix match that you want to apply **before any regex matches**, ensuring that regex blocks are not processed unnecessarily. + +#### Example: +```nginx +server { + location ^~ /images/ { + return 200 "Prefix match for /images/ with ^~\n"; + } + + location ~* \.(jpg|png)$ { + return 200 "Regex match for images\n"; + } + + location / { + return 200 "Default catch-all\n"; + } +} +``` + +#### How Nginx Processes the Request: + +- For an incoming URI like `/images/photo.jpg`: + - **`/images/`** with `^~` is the longest prefix match and has priority over any regex matches. + - Even though `/photo.jpg` would also match the regular expression `~* \.(jpg|png)$`, Nginx will **not** check regex locations after it finds the `^~` match. + - Nginx will use the `/images/` block and return: + ``` + Prefix match for /images/ with ^~ + ``` + +- For an incoming URI like `/gallery/photo.jpg`: + - No `^~` match is found because the prefix `/gallery/` doesn’t match `/images/`. + - Nginx proceeds to check regex locations. The URI matches `~* \.(jpg|png)$`, and it will use that location. + + + + + + + diff --git a/nginx/load-balancing/basic-load-balancing.conf b/nginx/load-balancing/basic-load-balancing.conf new file mode 100644 index 0000000..ab210dd --- /dev/null +++ b/nginx/load-balancing/basic-load-balancing.conf @@ -0,0 +1,19 @@ +upstream backend { # upstream context defines a named group of servers + + lest_conn; # uses the least-connected load-balancing method. If no load-balancing method is mentioned, it defaults to round-robin. + + server backend1.example.com:8080; # defines the domain name or IP address of the server, with an optional port + + server backend2.example.com weight=5; # weight parameter sets the weight of the server, by default, 1. + # here, backend1 will serve one request, backend2 will serve next 5 requests. Then backend1 will serve one request and so on... + + server backup3.example.com:8080 backup; # backup parameter marks the server as a backup server. If the above two servers are down, this one starts serving + + server backup2.example.com:8080 down; # down parameter marks the server as permanently unavailable. +} + +server { + location / { + proxy_pass http://backend; + } +} \ No newline at end of file diff --git a/nginx/load-balancing/demo/compose.yaml b/nginx/load-balancing/demo/compose.yaml new file mode 100644 index 0000000..d219bb8 --- /dev/null +++ b/nginx/load-balancing/demo/compose.yaml @@ -0,0 +1,18 @@ +--- +name: nginx-node-load-balancer # name of the compose project +services: + web1: + build: ./node-server + hostname: web1 + web2: + build: ./node-server + hostname: web2 + nginx: + build: ./nginx-config + depends_on: + - web1 + - web2 + ports: + - "80:80" + + \ No newline at end of file diff --git a/nginx/load-balancing/demo/nginx-config/Dockerfile b/nginx/load-balancing/demo/nginx-config/Dockerfile new file mode 100644 index 0000000..d2908bb --- /dev/null +++ b/nginx/load-balancing/demo/nginx-config/Dockerfile @@ -0,0 +1,2 @@ +FROM nginx:latest +COPY ./load-balancer.conf /etc/nginx/conf.d/default.conf \ No newline at end of file diff --git a/nginx/load-balancing/demo/nginx-config/load-balancer.conf b/nginx/load-balancing/demo/nginx-config/load-balancer.conf new file mode 100644 index 0000000..6cef1a1 --- /dev/null +++ b/nginx/load-balancing/demo/nginx-config/load-balancer.conf @@ -0,0 +1,16 @@ +upstream backend{ + server web1:3000; + server web2:3000; +} + +server{ + listen 80; + + location / { + proxy_pass http://backend; + + # add_header directive Adds the specified field to a response header (if he response code equals 200, 201, 304 etc.). It belongs to ngx_http_headers_module + add_header Cache-Control no-store; # without this header, the browser will cache the response and won't make request to the server repeatedly + # If we don't want to add this header, we could also disable the cache of the browser from the Network section in Developer console for the same result. + } +} \ No newline at end of file diff --git a/nginx/load-balancing/demo/node-server/.dockerignore b/nginx/load-balancing/demo/node-server/.dockerignore new file mode 100644 index 0000000..0db2fc1 --- /dev/null +++ b/nginx/load-balancing/demo/node-server/.dockerignore @@ -0,0 +1,3 @@ +node_modules/ +.dockerignore +Dockerfile \ No newline at end of file diff --git a/nginx/load-balancing/demo/node-server/Dockerfile b/nginx/load-balancing/demo/node-server/Dockerfile new file mode 100644 index 0000000..6a5f7e7 --- /dev/null +++ b/nginx/load-balancing/demo/node-server/Dockerfile @@ -0,0 +1,13 @@ +FROM node:slim + +WORKDIR /app/ + +COPY package.json . + +RUN npm i + +COPY . . + +ENTRYPOINT [ "npm" ] + +CMD [ "start" ] \ No newline at end of file diff --git a/nginx/load-balancing/demo/node-server/index.js b/nginx/load-balancing/demo/node-server/index.js new file mode 100644 index 0000000..8ba95d9 --- /dev/null +++ b/nginx/load-balancing/demo/node-server/index.js @@ -0,0 +1,10 @@ +const app=require('express')(); +const os=require('node:os') + +app.get('/',(req,res)=>{ + res.status(200).json({msg:"success!!",host:os.hostname()}); +}) + +app.listen(3000,()=>{ + console.log("server is listening on port 3000"); +}) diff --git a/nginx/load-balancing/demo/node-server/package-lock.json b/nginx/load-balancing/demo/node-server/package-lock.json new file mode 100644 index 0000000..f3ec42b --- /dev/null +++ b/nginx/load-balancing/demo/node-server/package-lock.json @@ -0,0 +1,708 @@ +{ + "name": "demo", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "demo", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.21.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/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==" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/nginx/load-balancing/demo/node-server/package.json b/nginx/load-balancing/demo/node-server/package.json new file mode 100644 index 0000000..01d8d5c --- /dev/null +++ b/nginx/load-balancing/demo/node-server/package.json @@ -0,0 +1,15 @@ +{ + "name": "demo", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.21.0" + } +} diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..731ca22 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,84 @@ +user www-data; #user responsible for starting nginx process +worker_processes auto; # no. of worker processes, +pid /run/nginx.pid; +error_log /var/log/nginx/error.log; # location of error log +include /etc/nginx/modules-enabled/*.conf; # to include any configuration located inside modules-enabled + +events { + worker_connections 768; # no. of connections handled by each worker process + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + types_hash_max_size 2048; + # server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; # logs about incoming requests + + ## + # Gzip Settings + ## + + gzip on; # for compression + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + + # these config files, as they are inside http context, will contain either server or upstream context + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} + + +#mail { +# # See sample authentication script at: +# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript +# +# # auth_http localhost/auth.php; +# # pop3_capabilities "TOP" "USER"; +# # imap_capabilities "IMAP4rev1" "UIDPLUS"; +# +# server { +# listen localhost:110; +# protocol pop3; +# proxy on; +# } +# +# server { +# listen localhost:143; +# protocol imap; +# proxy on; +# } +#} diff --git a/nginx/rate-limiting.md b/nginx/rate-limiting.md new file mode 100644 index 0000000..20184cc --- /dev/null +++ b/nginx/rate-limiting.md @@ -0,0 +1,101 @@ +Nginx provides a simple way to add rate limiting using the `limit_req_zone` and `limit_req` directives. Refer to [http_limit_req_module](https://nginx.org/en/docs/http/ngx_http_limit_req_module.html) for details. + +1. In `/etc/nginx/nginx.conf`, add the following to the `http` block: + + ```nginx + + http { + limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s; + + ... + } + ``` + - **`$binary_remote_addr`**: This variable stores the client’s IP address in binary format, which is a more compact representation compared to the standard IP format. Using this helps save memory space, which is important when you are tracking many IP addresses in the shared memory zone. + + - **`zone=one`**: + - **`zone`** refers to a named shared memory area that Nginx uses to store request data. + - The name of this zone is `one`. This is an arbitrary name, and you can name it whatever you want (e.g., `zone=clients`, `zone=ratelimit`, etc.). + + - **`10m`**: This defines the size of the shared memory zone, which is **10 megabytes** in this example. The size determines how much data (e.g., how many unique IP addresses or other variables) can be stored in this zone. Typically, 1 MB can store rate-limiting information for about 16,000 IP addresses. So, a 10 MB zone could handle approximately 160,000 IP addresses. + + - **`rate=1r/s`**: This sets the rate at which requests are allowed per client IP. In this case, each client can make **1 request per second**. + + In Nginx, **shared memory zones** are essential for storing data that needs to be accessed across multiple worker processes. These zones are particularly useful for things like rate limiting, caching, and session tracking, where consistency is needed regardless of which worker process handles a particular request. Without a shared memory zone, each worker would have its own data, leading to inconsistent enforcement of rate limits. + +1. Inside the `server` context, add the following: + ```nginx + server { + ... + + location / { + limit_req zone=one burst=20 nodelay; + try_files $uri $uri/ =404; + } + + ... + } + ``` + + - `zone=one` : This applies the rate limiting defined by the one zone. When a client makes requests to `/`, the `one` zone is consulted to see if the rate limit is being followed. + + - `burst=20` : allows a burst of up to 20 requests beyond the defined rate. So, even if the rate limit is set to 2 requests per second, the burst allows up to 20 requests to be made in a second. By default, the maximum burst size is equal to zero. The requests exceeding the max burst size will be rejected immediately. + + - `nodelay` : means that requests that exceed the rate limit should be rejected immediately rather than delayed. + + +1. Reload nginx for the changes to take effect. + +## nodelay vs delay=number parameters + +In Nginx, the `nodelay` and `delay=number` parameters are used with the `limit_req` directive to control how rate limiting is applied to incoming requests. Here's the difference between them: + +1. `nodelay` Parameter: +- **Purpose**: It allows the rate limit to be applied **without delaying** any requests that exceed the rate, as long as they stay within the burst limit. +- **Behavior**: When `nodelay` is specified, Nginx does not slow down (or "throttle") requests to conform to the rate limit but instead allows requests to be processed immediately if they fall within the allowed burst. + +#### Example: + +```nginx +limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; + +server { + location / { + limit_req zone=one burst=5 nodelay; + } +} +``` +- In this example, requests are limited to **1 request per second**, with a **burst** of up to 5 requests. +- The **`nodelay`** parameter allows these 5 requests to be processed immediately without any delay, even if they exceed the 1r/s rate. + +1. `delay=0` (default behavior): +- **Purpose**: It **delays all the requests** that exceed the rate, making them conform to the specified rate limit by spacing them out over time. **0** (default value) signifies all excessive requests are delayed. + +- **Behavior**: Without `nodelay`, Nginx will queue and gradually process requests at the defined rate (e.g., 1 request per second). If requests come in faster than the rate allows, Nginx will delay them, enforcing the rate limit. + +#### Example 1: + +```nginx +limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; + +server { + location / { + limit_req zone=one burst=5; + } +} +``` +- Here, Nginx limits requests to **1 request per second**, with a **burst** of up to 5 requests. +- Requests exceeding the rate of 1r/s will be **queued and delayed** to fit the rate limit, with the maximum queue size being 5. + + +#### Example 2 + +```nginx +limit_req zone=one burst=5 delay=2; +``` + +- **`delay=2`**: Introduces a delay after the first 2 requests in the burst. The first 2 requests in the burst will be processed immediately, but requests 3 to 5 in the burst will be delayed to fit the rate limit. + +### How It Works: +1. **Rate Limiting Zone**: Let's assume the rate limit is set to **1 request per second** (e.g., `rate=1r/s`). +2. **Burst**: A burst of up to 5 requests is allowed. This means Nginx can handle 5 requests that exceed the normal rate of 1 request per second. +3. **Delay**: The first 2 requests in the burst are processed immediately without delay. However, for requests 3 to 5, they will be delayed to conform to the **1 request per second** rate limit. diff --git a/nginx/regular-expressions.md b/nginx/regular-expressions.md new file mode 100644 index 0000000..8e847f0 --- /dev/null +++ b/nginx/regular-expressions.md @@ -0,0 +1,120 @@ +### 1. **`^` (Caret)** +- **Purpose**: Matches the beginning of a string (or URI). +- **Example**: Match URIs that start with `/blog/`. + ```nginx + location ~ ^/blog/ { + # Configuration + } + ``` + +### 2. **`$` (Dollar Sign)** +- **Purpose**: Matches the end of a string. +- **Example**: Match URIs that end with `.html`. + ```nginx + location ~ \.html$ { + # Configuration + } + ``` + +### 3. **`.` (Dot)** +- **Purpose**: Matches any single character (except newlines). +- **Example**: This would match any single character followed by php. For example, it could match `/xphp`, `/9php`, or `/@php` . + + ```nginx + location ~ .php$ { + # Configuration + } + ``` + +### 4. **`.*` (Dot Asterisk)** +- **Purpose**: Matches **zero or more** of any characters. +- **Example**: Match any URI starting with `/images/` followed by any characters. + ```nginx + location ~ ^/images/.* { + # Configuration + } + ``` + +### 5. **`+` (Plus)** +- **Purpose**: Matches **one or more** of the preceding character or group. +- **Example**: Match URIs that contain one or more digits (like `/user/123`). + ```nginx + location ~ /user/[0-9]+ { + # Configuration + } + ``` + +### 6. **`[]` (Square Brackets)** +- **Purpose**: Matches any single character within the brackets. +- **Example**: Match any URI that contains `/file1.html` or `/file2.html` but not `/file12.html`. + ```nginx + location ~ /file[12]\.html$ { + # Configuration + } + ``` + +### 7. **`()` (Parentheses)** +- **Purpose**: Groups multiple characters into a single unit. +- **Example**: Capture any file extension after `/files/`. + ```nginx + location ~ ^/files/(.*)\.(jpg|png|gif)$ { + # Configuration + } + ``` + +### 8. **`|` (Pipe)** +- **Purpose**: Acts as an OR operator to match one or another option. +- **Example**: Match URIs that end with `.jpg` or `.png`. + ```nginx + location ~ \.(jpg|png)$ { + # Configuration + } + ``` + +### 9. **`\d`** +- **Purpose**: Matches any single digit (0-9). +- **Example**: Match any URI that contains a number. + ```nginx + location ~ /id/\d+ { + # Configuration + } + ``` + +### 10. **`\w`** +- **Purpose**: Matches any alphanumeric character or underscore. +- **Example**: Match any alphanumeric username in the URI. + ```nginx + location ~ ^/user/\w+$ { + # Configuration + } + ``` + +### 11. **`?`** +- **Purpose**: Makes the preceding character optional. + +- **Example**: Match URIs that start with `/blog/` or `/blog`. + + ```nginx + location ~ ^/blog/? { + # Configuration + } + ``` + +### 12. **`\` (Escape Character)** +- **Purpose**: Escapes special characters in regular expressions. + +- **Example**: The literal period (`.`) has been escaped. + ```nginx + location ~ \.html$ { + # Configuration + } + ``` + +### 13. **`{}` (Quantifiers)** +- **Purpose**: Specifies a specific number of matches. +- **Example**: Match a URI that contains exactly three digits. + ```nginx + location ~ /product/[0-9]{3} { + # Configuration + } + ``` diff --git a/nginx/reverse-proxy/intro.md b/nginx/reverse-proxy/intro.md new file mode 100644 index 0000000..74776ba --- /dev/null +++ b/nginx/reverse-proxy/intro.md @@ -0,0 +1,6 @@ +### Reverse Proxy +A forward proxy acts on behalf of clients (or requesting hosts). Forward proxies can hide the identities of clients whereas reverse proxies can hide the identities of servers. Reverse proxies have several use cases, a few are: + +- Load balancing: distribute the load to several web servers, +- Cache static content: offload the web servers by caching static content like pictures, +- Compression: compress and optimize content to speed up load time. \ No newline at end of file diff --git a/nginx/reverse-proxy/reverse-proxy.config b/nginx/reverse-proxy/reverse-proxy.config new file mode 100644 index 0000000..25703ad --- /dev/null +++ b/nginx/reverse-proxy/reverse-proxy.config @@ -0,0 +1,12 @@ +server { + listen 80; + server_name localhost; # responds to the requests having the header < Host:localhost > + + location / { + proxy_pass http://127.0.0.1:8080; # forward client requests from Nginx to http://127.0.0.1:8080. The protocol(http/https) must be mentioned. + proxy_set_header Host $host; # Set the Host header to the client's original host + proxy_set_header X-Real-IP $remote_addr; # Set the X-Real-IP header to the client's IP address + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Append client's IP addresses to X-Forwarded-For header + proxy_set_header X-Forwarded-Proto $scheme; # Set the X-Forwarded-Proto header to the client's protocol (http or https) + } +} \ No newline at end of file diff --git a/nginx/rewrites-redirects.md b/nginx/rewrites-redirects.md new file mode 100644 index 0000000..3ebe757 --- /dev/null +++ b/nginx/rewrites-redirects.md @@ -0,0 +1,100 @@ +## Rewrite +A rewrite changes the URI of a request internally without informing the client (browser). It allows you to modify the request URL on the server-side. + +```nginx + +location /blog { + rewrite ^/blog/(.*)$ /articles/$1 break; # The (.*) part captures everything after /blog/, and stores it in a variable $1. + + # Without the "()", '.*' will only match but it doesn't capture that part of the string for further use. + +} + +``` +- If a user requests /blog/post1, Nginx internally rewrites it to /articles/post1, serving content from the /articles/ directory instead. + +- break: Stops processing and uses the rewritten URI in the same location block. + +### last and break flags + +In Nginx, the `last` and `break` flags are used in **rewrite** rules to control how Nginx processes the request after applying the rewrite. They determine whether Nginx should continue looking for more matching location blocks or stop further processing. Here’s a simple breakdown: + +1. **`last` Flag** + +- The `last` flag tells Nginx to **stop rewriting** the URI and reprocess the request using the newly rewritten URI. Nginx will look for a new matching location block based on the rewritten URI. + +#### Example: + +```nginx + +server { + listen 80; + + location /blog { + rewrite ^/blog/(.*)$ /articles/$1 last; + } + + location /articles { + root /var/www/mysite; + index index.html; + } +} +``` +- **Request**: `http://example.com/blog/post1` + +- **What happens**: + - The URI `/blog/post1` is rewritten to `/articles/post1` because of the `rewrite` rule. + - The `last` flag tells Nginx to stop rewriting and **reprocess** the new URI `/articles/post1` by searching for a new matching location block. + - Nginx will now look for the `location /articles` block to serve the file. + +2. **`break` Flag** + +- The `break` flag tells Nginx to stop rewriting the URI **and process the request using the current location block**. It will **not** look for any new location blocks after the rewrite. + +#### Example: +```nginx +server { + listen 80; + + location /blog { + rewrite ^/blog/(.*)$ /static/$1 break; + root /var/www/mysite; + } +} +``` +- **Request**: `http://example.com/blog/image.png` + +- **What happens**: + - The URI `/blog/image.png` is rewritten to `/static/image.png`. + - The `break` flag tells Nginx to **stop processing any further location blocks** and serve the file `/var/www/mysite/static/image.png` from within the **same location block**. + +--- + +## Redirect +A redirect informs the client (browser) that the requested resource has been moved to a new URL. The browser is then redirected to the new URL, either temporarily or permanently. + +```nginx +location /old-page { + return 302 /new-page; # temporary redirect (Used for URLs that may change again in the future.) +} + +location /new-page { + ... +} +``` +or, + +```nginx +location /old-page { + return 302 /new-page; # permanent redirect +} + +location /new-page { + ... +} +``` + + + + + diff --git a/nginx/test.nginx.conf b/nginx/test.nginx.conf new file mode 100644 index 0000000..0a9ac4a --- /dev/null +++ b/nginx/test.nginx.conf @@ -0,0 +1,60 @@ +http{ + include mime.types; + + server{ + listen 80; + + location / { + # root directive sets the root directory for requests, i.e. nginx will search the given directory for that request. + # File is served from the path created by appending the incoming URI to the value of the root directive + + root /var/www/mysite; # Here, the `/var/www/mysite/index.html` file will be sent in response to the “/index.html” (or, "/") request. + } + + location /fruits { + + root /var/www/mysite; # for this request, nginx will search this directory. + index fruit-list.html; # Telling nginx that the `/var/www/mysite/fruits/fruit-list.html` file will be sent in response to "/fruits". + # since, no index.html is present, "/fruits/index.html" will cause a 404 error. + } + + + location /nutritious-fruits { + + alias /var/www/mysite/fruits; + + index fruit-list.html; # since, index.html is not present in /var/www/mysite/fruits, so we need to set the index. + + # on request of `/nutritious-fruits/apple.png`, the file '/var/www/mysite/fruits/apple.png' will be sent. + + # on request of `/nutritious-fruits`, the file '/var/www/mysite/fruits/fruit-list.html' will be sent. + + # i.e. we don't need to have a separate directory as previous case. Basically, we are using the contents of `/fruits` route for `/nutritious-fruits` as well. + } + + + location /vegetables{ + + root /var/www/mysite; + + # The path to a file is constructed appending the file mentioned to the root directive + try_files $uri $uri/ /vegetables/veggies.html /vegetables/potato.html =404; + + # Initially, nginx will look for "/var/www/mysite/vegetables/veggies.html" and then + # "/var/www/mysite/vegetables/potato.html". If no file is found, we would get a 404 response. + } + + + location /numbers { + rewrite ^/numbers/(\d)$ /count/$1 last; + } + + location ~* /count/[0-9] { + return 301 /; + } + + + } +} + +events{} \ No newline at end of file diff --git a/production-deployment/secureVM.md b/production-deployment/secureVM.md new file mode 100644 index 0000000..434cc67 --- /dev/null +++ b/production-deployment/secureVM.md @@ -0,0 +1,28 @@ +## Server Setup and Hardening +- Log in to the instance. + +- Upgrade and update the system. + + - Updating retrieves information about the latest versions of the packages from the repositories but doesn't install or upgrade them yet. + - While Upgrading, the system will compare the installed packages with the versions listed in the updated package database and install the latest ones if available. + + ```bash + apt update + apt upgrade + apt update + ``` + Always run the apt update command before apt upgrade to ensure that we have the latest packages available. + +- Create a non-root user and add it to **sudo** group. + - create a password for the new user + - Log in using the newly created user. + +- Setup SSH authentication and connect to the server using SSH. + +- Disable password login in the server + + - Open `sudo nano /etc/ssh/sshd_config` in vim or nano. + - Search for **PasswordAuthentication** and change it to *no*. Optionally, we can also change the **PermitRootLogin** to *no* to prevent root user from logging in. + - restart the ssh service using `sudo systemctl restart ssh` + +- Add Inbound and Outbound rules for network. diff --git a/yaml-basics/intro.md b/yaml-basics/intro.md index 900f476..68e877f 100644 --- a/yaml-basics/intro.md +++ b/yaml-basics/intro.md @@ -27,3 +27,6 @@ - Most languages support YAML. - It can represent complex data. +- References: + - [Official YAML Docs](https://yaml.org/spec/1.2.2/) + - [Learn X in Y minutes](https://learnxinyminutes.com/docs/yaml/)