From 6f48e5d2ed77de6eb81ad8ebc0a50015f61252c3 Mon Sep 17 00:00:00 2001 From: 0qln <0qln@proton.me> Date: Thu, 16 Apr 2026 23:36:34 +0200 Subject: [PATCH] initial commit --- .envrc | 1 + .gitignore | 49 + .idea/.gitignore | 8 + .idea/encodings.xml | 7 + .idea/misc.xml | 14 + .idea/uiDesigner.xml | 124 + .idea/vcs.xml | 6 + .mvn/wrapper/maven-wrapper.jar | Bin 0 -> 58727 bytes .mvn/wrapper/maven-wrapper.properties | 2 + bin/Kapitel7_Angular_Teil2_Praktikum.war | Bin 0 -> 2962 bytes docs/.gitignore | 4 + docs/uebungen/.latexmkrc | 2 + docs/uebungen/uebung-1.tex | 140 + docs/uebungen/uebung.cls | 146 + flake.lock | 78 + flake.nix | 172 + mvnw | 316 ++ mvnw.cmd | 188 + package-lock.json | 4037 +++++++++++++++++ package.json | 6 + pom.xml | 76 + .../demo/uebung1/aufgabe16/Client.java | 22 + .../demo/uebung1/aufgabe16/Encryptor.java | 14 + .../uebung1/aufgabe16/EncryptorRemote.java | 7 + .../demo/uebung1/aufgabe17/Counter.java | 12 + .../demo/uebung1/aufgabe17/CounterClient.java | 21 + .../demo/uebung1/aufgabe17/CounterRemote.java | 7 + src/main/resources/META-INF/beans.xml | 6 + src/main/resources/META-INF/persistence.xml | 9 + src/main/webapp/WEB-INF/beans.xml | 6 + src/main/webapp/WEB-INF/faces-config.xml | 3 + src/main/webapp/WEB-INF/web.xml | 22 + 32 files changed, 5505 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 .mvn/wrapper/maven-wrapper.jar create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 bin/Kapitel7_Angular_Teil2_Praktikum.war create mode 100644 docs/.gitignore create mode 100644 docs/uebungen/.latexmkrc create mode 100644 docs/uebungen/uebung-1.tex create mode 100644 docs/uebungen/uebung.cls create mode 100644 flake.lock create mode 100644 flake.nix create mode 100755 mvnw create mode 100755 mvnw.cmd create mode 100644 package-lock.json create mode 100644 package.json create mode 100755 pom.xml create mode 100644 src/main/java/org/example/demo/uebung1/aufgabe16/Client.java create mode 100644 src/main/java/org/example/demo/uebung1/aufgabe16/Encryptor.java create mode 100644 src/main/java/org/example/demo/uebung1/aufgabe16/EncryptorRemote.java create mode 100644 src/main/java/org/example/demo/uebung1/aufgabe17/Counter.java create mode 100644 src/main/java/org/example/demo/uebung1/aufgabe17/CounterClient.java create mode 100644 src/main/java/org/example/demo/uebung1/aufgabe17/CounterRemote.java create mode 100755 src/main/resources/META-INF/beans.xml create mode 100755 src/main/resources/META-INF/persistence.xml create mode 100644 src/main/webapp/WEB-INF/beans.xml create mode 100755 src/main/webapp/WEB-INF/faces-config.xml create mode 100755 src/main/webapp/WEB-INF/web.xml diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..993dfb7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,49 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +### nix / direnv +.direnv +result + +### jetty +**/.jetty/home +**/.jetty/base + +### Angualr Demo ### +**/node_modules diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..1c2fda5 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..a156f52 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..9881e8d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..6d50cd4 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..c1dd12f17644411d6e840bd5a10c6ecda0175f18 GIT binary patch literal 58727 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

Q*ss04{b)&}#@R@3 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 literal 0 HcmV?d00001 diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..41d2d76 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar \ No newline at end of file diff --git a/bin/Kapitel7_Angular_Teil2_Praktikum.war b/bin/Kapitel7_Angular_Teil2_Praktikum.war new file mode 100644 index 0000000000000000000000000000000000000000..202649736843345243b62e2d7280b6709138441d GIT binary patch literal 2962 zcmWIWW@h1H0D*}<{k|X?hB+Ao7<^qr9CbbY-1I{uco-D+io^)*6^Z%ED8c~JCc?nM zz`-Ckp%F!!2(mU`M?X(D*WeI6UpJ5mVtYkmZ1ypMP5A74=CqHuuHHpnZ(Xf(XU=a9 zGPq*=;Azo0PaVB$ydF9yHv~O+`sgVWLx49s$DzDEi>59 zZ)e!@H8}{h-dAAlJUeY#HEaF`#VRKK2mD#dPKj?;+DvyBzO#H1LuZ&&ZM@M>uC(-p zH*YdFJYAl|Wx*i1sL)Mcax_z^q>(}y?Y41D4Y5nH*>+7kN8^pUg z6k7xyrQV3!{4qV=nd4)t$@Avr%(1T0^VLgkMLo{&XW!Lj_Dr?JD}BpiTiF*{v)ZQ> z{xEo#GbiB8#d&=BwVMR$4{Mw<{afF6@Mk>7$HNg;(PxTm*qZo!*MBY5nOVG3UuFk~ z%E$JHEaz=NW?f5l=SWB2Tv3=9k`68Pc>TX-dwrllt)r5b{R9TZ-esZ0+o z*!8dkJKPwT#FEn7@YJN>)S|M?+L9zbAjv}_(<#lwrF9iJ*V-4KC zAg9OBaHXLkliTJM8@Jk>-*(w($z9)Vn_d5gzG@bd|HJrC*X9Nq4@A~gJ3sQ<>-mkoNhT+rgWxif)9 ze$V20;@|f?-@Ww|OIqPor_K#YdxDl;?|QWE!o7KotNz`X$oI_P{QsT%cYl6#*Dmp@ z{LytcB93foRXy}eKwo#?vDb|8r*9nOS|^ycc$%f~S5Gs4%a#MOb2Go>RaR7M*os%n zW{c$sJUf45*_7aQ&82sqoaSAud}veky|4Q7Htu@*!0g?JNM0c!x!6zKheKnkrr%ta zCusK1-G9UCKq2!d^Sq*0mMkpZ7Tmq%?K$%U(hK<`X1wqAJ0$gK1Djvhmy;iQs;9em zhx1Ex8t(ro`#Ap0wzG@Ra#);5GlluUz-z>Yn2f zANn`$`pPRkU*AGpqWf57-U5rlZH9c}so%~dT+Z0$GtIN_&eQjC{I~1D#mVoAnxKuf&cr$k2*(k2k z@YPK_id)NXY0p}NU;4Sz%Vtg}nWX#T^ba1Z#RjK(_#Zf1&RY`U&22yD%)GPn=6rs8 z^L@>1aN;W9&y=^}`5X0i!5YyYt7e(?G6#M;cv`^fO5axgSDkC4wndrfu3NS$G*-k^ z)2I1hKKJ4^#hFrOj45*xwyL$Rd$z;J;L8)2n-@~fKH@2!zF+ONcdYTLtZfA+x{WqE zO72^eiBX3pVbWbV#76d7-k*&EyZu&I)~B%*@Os z^5v&Mf<%t<=VSq9+XRWg3!QrMO+4AlLc{pEm-*@xL>Ha?w<7FoRHVcWCJoUv^RC*nsYi8g>RzzS416p+(YAf1Dy!{>-y6;t zT)S{VZR_8R`Qk-)ti)X3U9fuX;UZD9ye#BFSe*6?m2QV)mQUxUai-Tk{Bo+R;K#`= z9+PIh(l@h6>q!5%-?-(X``#0#oaGC*@?Y<`>|gnE|1TNN_=T=qU9nI1yDhFu(qH*N zQBJVp+?v3hAu56wqV3;rntasY-?B81!Xw{XbUWrxNt|(MZ$rqjlx08L%wo^Q`i8BT zb1vC;y`YkT^X$?KZx*&s@ztKc`_(eXzu9Z5A1*E5rI?aG;kj^XWk#K-t#kbsndbNB z48HIlelD?e`$nHPB99wSzMt_a!CoxF;^^BK;XKD*_0@kg{B(?|+;8E#`oiy#in~3m zo0mLvW%w)MCZMeHJTNFxps?pLr`iTz@r*Mq&?P%rtFhVQE*jQ$bC&r>f~~dEo#Q* zHy`&MUw3!G;-(ep6<*4zk8jF@>V{UMcba_63=H#FAsG&PP0WLo;c_yQuv7<(Orp%# z^>Q-sz#1+NZyiBQq_ztOyzLU;4Kf0f-$5-G_;Td60~M>sZ8rFdmYoA&!Iu1}hsVrE)TG OGF)I{U|7Qe;sF4e_Zsj3 literal 0 HcmV?d00001 diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..e39aab5 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,4 @@ +out +latexout +latex.out +direnv diff --git a/docs/uebungen/.latexmkrc b/docs/uebungen/.latexmkrc new file mode 100644 index 0000000..80954ed --- /dev/null +++ b/docs/uebungen/.latexmkrc @@ -0,0 +1,2 @@ +$out_dir = "out"; +$pdf_mode = 4; # lualatex diff --git a/docs/uebungen/uebung-1.tex b/docs/uebungen/uebung-1.tex new file mode 100644 index 0000000..94038d6 --- /dev/null +++ b/docs/uebungen/uebung-1.tex @@ -0,0 +1,140 @@ +\documentclass{uebung} + +\author{Linus Nagel} +\chapter{1} + +\usepackage{listings} +\usepackage{xcolor} + +\lstset{ + language=Java, + basicstyle=\ttfamily\small, + keywordstyle=\color{blue}, + commentstyle=\color{green!60!black}, + stringstyle=\color{red}, + numbers=left, + numberstyle=\tiny, + frame=single, + breaklines=true, + showspaces=false, + showtabs=false, + tabsize=2 +} + +\begin{document} + +\maketitle + +\begin{exercises} + \item \textbf{Welche Nachteile ergeben sich durch bisherige Schichtentrennung bei der Client-Server-Programmierung mit Stand-Alone Clients?} + + Bei Stand-Alone Clients ergeben sich folgende Nachteile: + \begin{itemize} + \item Jeder Client öffnet eigene Datenbankverbindungen, was bei vielen Clients zu einer hohen Belastung des Datenbankservers führt. + \item Die Datenbankverbindungsdaten liegen als \texttt{.class}-Dateien auf dem Client und können per Decompiler ausgelesen werden – ein erhebliches Sicherheitsrisiko. + \item Es fehlt eine zentrale Kontrolle über Transaktionen, Caching und Ressourcenpooling. + \end{itemize} + + \item \textbf{Welche Nachteile ergeben sich durch bisherige Schichtentrennung bei der Client-Server-Programmierung mit Web Clients?} + + Bei Web Clients treten folgende Nachteile auf: + \begin{itemize} + \item Kein einfaches Clustering (Lastverteilung und Ausfallsicherheit). + \item Kein zentraler Cache – häufig angefragte Daten müssen immer wieder neu aus der Datenbank geladen werden. + \item Threadinterferenzen müssen manuell durch den Programmierer verhindert werden. + \end{itemize} + + \item \textbf{Was ist ein Application Server?} + + Ein Application Server ist eine Laufzeitumgebung für Jakarta EE-Komponenten. Er stellt Container (z.B. EJB-Container, Web-Container) bereit und bietet standardisierte Dienste wie Transaktionssteuerung (JTA), Sicherheit (JAAS), Namensdienst (JNDI), Messaging (JMS) und Persistenz (JPA). Bekannte Beispiele sind WildFly, WebSphere und WebLogic. + + \item \textbf{Worum handelt es sich bei einer Session Bean?} + + Eine Session Bean ist eine Komponente der Jakarta Enterprise Beans (EJB), die die Geschäftslogik einer verteilten Anwendung kapselt. Sie wird im EJB-Container des Application Servers ausgeführt und kann von Clients (lokal, remote oder als Webservice) aufgerufen werden. Es gibt drei Typen: Stateless, Stateful und Singleton Session Beans. + + \item \textbf{Worin liegt der Unterschied zwischen Stateless und Stateful Session Beans?} + + \begin{itemize} + \item \textbf{Stateless Session Bean:} Sie speichert keinen client-spezifischen Zustand. Der Container verwaltet einen Pool von Instanzen. Bei jedem Aufruf kann eine beliebige Instanz verwendet werden. Nach der Methode werden die Daten nicht aufbewahrt. + \item \textbf{Stateful Session Bean:} Sie behält über mehrere Aufrufe hinweg einen client-spezifischen Zustand. Für jeden Client wird eine eigene Instanz erzeugt und bei späteren Aufrufen dieselbe Instanz wiederverwendet. + \end{itemize} + + \item \textbf{Welche Möglichkeiten gibt es für einen Aufruf einer Session Bean?} + + \begin{itemize} + \item \textbf{Lokaler Aufruf:} Innerhalb derselben Java Virtual Machine (z.B. von einer anderen Bean). + \item \textbf{Remoter Aufruf:} Von einer anderen JVM (z.B. Standalone-Client). + \item \textbf{Webservice-Aufruf:} Nur für Stateless Session Beans möglich, über SOAP oder REST. + \end{itemize} + + \item \textbf{Wie wird eine Stateless Session Bean erstellt?} + + \begin{enumerate} + \item Erstellen eines Business-Interfaces (mit \texttt{@Remote} oder \texttt{@Local}), das die öffentlichen Methoden deklariert. + \item Erstellen einer Klasse, die das Interface implementiert und mit \texttt{@Stateless} annotiert wird. + \end{enumerate} + + \item \textbf{Welche Schritte sind für einen Client notwendig, um eine Methode einer Stateless Session Bean aufzurufen?} + + \begin{enumerate} + \item Erstellen eines \texttt{InitialContext} mit den nötigen Properties (z.B. Provider-URL, Context Factory). + \item Aufruf von \texttt{lookup()} mit dem JNDI-Namen der Bean. + \item Cast des zurückgegebenen Proxy-Objekts auf das Remote-Interface. + \item Aufruf der gewünschten Methode auf dem Proxy. + \end{enumerate} + + \item \textbf{Wie muss eine Stateful Session Bean annotiert werden?} + + Die Bean-Klasse wird mit \texttt{@Stateful} annotiert. + + \item \textbf{Wie kann bei einer Stateful Session Bean angegeben werden, dass eine Bean-Instanz nicht mehr benötigt wird und vom Server zerstört werden kann?} + + Eine Methode (z.B. \texttt{beenden()}) wird mit der Annotation \texttt{@Remove} versehen. Nach dem Aufruf dieser Methode zerstört der Container die Instanz. + + \item \textbf{Welchen Unterschied gibt es bei Stateful Session Beans bezüglich des JNDI-Namens?} + + Beim Lookup muss an den JNDI-Namen \texttt{?stateful} angehängt werden. Beispiel: \texttt{ejb:/meineBean?stateful} + + \item \textbf{Worum handelt es sich bei Singleton Session Beans?} + + Eine Singleton Session Bean wird nur einmal pro Application Server instanziiert. Diese eine Instanz wird von allen Clients gemeinsam genutzt. Sie eignet sich für globale Ressourcen oder zentrale Dienste. + + \item \textbf{Wie werden Singleton Session Beans erstellt?} + + Die Klasse wird mit \texttt{@Singleton} annotiert. Optional kann \texttt{@Startup} hinzugefügt werden, damit die Instanz bereits beim Serverstart erzeugt wird (sonst beim ersten Lookup). + + \item \textbf{Welche Probleme können durch einen gemeinsamen Zugriff von mehreren Clients auf eine Singleton Session Bean theoretisch entstehen?} + + Da mehrere Threads gleichzeitig auf dieselbe Instanz zugreifen können, kommt es zu Threadinterferenzen, wenn sie lesend und schreibend auf gemeinsame Daten zugreifen. Dies kann zu Dateninkonsistenz und unerwartetem Verhalten führen. + + \item \textbf{Wie kann diesen Problemen programmatisch entgegnet werden?} + + Es gibt zwei Ansätze: + \begin{itemize} + \item \textbf{Container Managed Concurrency (Standard):} Mit \texttt{@Lock(LockType.READ)} für lesende und \texttt{@Lock(LockType.WRITE)} für schreibende Methoden. Der Container sorgt dann für die nötige Synchronisation. + \item \textbf{Bean Managed Concurrency:} Die Bean wird mit \texttt{@ConcurrencyManagement(ConcurrencyManagementType.BEAN)} annotiert und der Programmierer verwendet eigene Synchronisationsmechanismen (z.B. \texttt{synchronized}). + \end{itemize} + + \item \textbf{Erstellen Sie eine Stateless Session Bean, die eine Methode zur Verschlüsselung eines Strings bereitstellt.} + + \textbf{Remote-Interface:} \lstinputlisting{code/aufgabe16/EncryptorRemote.java} + + \textbf{Bean-Klasse:} \lstinputlisting{code/aufgabe16/Encryptor.java} + + \textbf{Standalone-Client:} \lstinputlisting{code/aufgabe16/Client.java} + + \item \textbf{Erstellen Sie eine Stateful Session Bean, die einen Zähler zur Verfügung stellt.} + + \textbf{Remote-Interface:} \lstinputlisting{code/aufgabe17/CounterRemote.java} + + \textbf{Bean-Klasse:} \lstinputlisting{code/aufgabe17/Counter.java} + + \textbf{Client (mehrfache Aufrufe auf derselben Instanz):} \lstinputlisting{code/aufgabe17/CounterClient.java} + + \item \textbf{Warum liefert die get-Methode aus Aufgabe 17 bei einem erneuten Aufruf der Testklasse immer wieder den Startwert des Zählers?} + + Bei jedem Aufruf der \texttt{main}-Methode wird eine neue Instanz der Stateful Session Bean erzeugt, da der \texttt{lookup} jedes Mal eine frische Bean-Instanz zurückgibt. Der alte Zustand (Zählerstand) ist nur innerhalb derselben Client-Sitzung gültig. Wird das Client-Programm neu gestartet, gibt es eine neue Instanz mit dem Anfangswert 0. Möchte man den Zähler über mehrere Programmstarts hinweg speichern, müsste man ihn in einer Datenbank oder Datei persistieren. + +\end{exercises} + +\end{document} diff --git a/docs/uebungen/uebung.cls b/docs/uebungen/uebung.cls new file mode 100644 index 0000000..6e263e7 --- /dev/null +++ b/docs/uebungen/uebung.cls @@ -0,0 +1,146 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{uebung}[Sem3 Web Engineering Exercise Sheet Class] + +% Base class with options +\LoadClass[11pt,a4paper]{article} + +% Required packages +\RequirePackage[german]{babel} +\RequirePackage{geometry} +\RequirePackage{fancyhdr} +\RequirePackage{titlesec} +\RequirePackage{enumitem} +\RequirePackage{listings} +\RequirePackage{xcolor} +\RequirePackage{graphicx} +\RequirePackage{amsmath} +\RequirePackage{hyperref} +\RequirePackage{minted} + +% Minted config +\usemintedstyle{default} + +% Define chapter counter for exercise sheets +\newcounter{chapter} +\renewcommand{\thechapter}{\arabic{chapter}} + +% Page geometry +\geometry{a4paper, left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm} + +% Colors for code listings +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} + +% Code listing style +\lstdefinestyle{mystyle}{ + backgroundcolor=\color{backcolour}, + commentstyle=\color{codegreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2, + frame=single, + framesep=5pt +} + +\lstset{style=mystyle} + +% Header and footer setup +\pagestyle{fancy} +\fancyhf{} +\fancyhead[L]{\textbf{Übung Web-Engineering}} +\fancyhead[R]{\textbf{Aufgabenblatt zu Kapitel \thechapter}} +\fancyfoot[C]{\thepage} + +% Title format +\renewcommand{\maketitle}{ + \begin{center} + \LARGE\textbf{Übung Web-Engineering}\\ + \Large\textbf{Aufgabenblatt zu Kapitel \thechapter} + \vspace{1cm} + + \large\textbf{Aufgaben – \@author} + \end{center} + \vspace{0.5cm} +} + +% Section formatting +\titleformat{\section} + {\large\bfseries} + {} + {0em} + {} + [\titlerule] + +% Exercise item formatting +\newlist{exercises}{enumerate}{1} +\setlist[exercises]{ + label=\arabic*), + leftmargin=*, + itemsep=1em, + before=\vspace{1.0cm} +} + +% Java code environment +\lstnewenvironment{javaCode}[1][] + {\lstset{style=mystyle, language=Java, #1}} + {} + +% JSP/HTML code environment +\lstnewenvironment{htmlCode}[1][] + {\lstset{style=mystyle, language=HTML, #1}} + {} + +% XML code environment +\lstnewenvironment{xmlCode}[1][] + {\lstset{style=mystyle, language=XML, #1}} + {} + +% Subsection for code examples +\newcommand{\codeexample}[1]{ + \vspace{0.5em} + \noindent\textbf{Beispiel:} + \vspace{0.3em} + #1 +} + +% Environment for multi-page content +\newenvironment{multipagecontent} + {\par\vspace{1em}} + {\par\vspace{1em}} + +% Command for page breaks with continuation marker +\newcommand{\continuepage}{ + \vfill + \centerline{\textit{Fortsetzung auf nächster Seite...}} + \newpage + \centerline{\textit{Fortsetzung von vorheriger Seite...}} + \vspace{1em} +} + +% Hyperref setup +\hypersetup{ + colorlinks=true, + linkcolor=blue, + filecolor=magenta, + urlcolor=cyan, + pdftitle={Web Engineering Übungen}, + pdfauthor={Linus Nagel} +} + +% Chapter command for exercise sheets +\newcommand{\chapter}[1]{\setcounter{chapter}{#1}} + +\endinput diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..010cb6f --- /dev/null +++ b/flake.lock @@ -0,0 +1,78 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1762844143, + "narHash": "sha256-SlybxLZ1/e4T2lb1czEtWVzDCVSTvk9WLwGhmxFmBxI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4", + "type": "github" + } + }, + "nixpkgs-angular-cli": { + "locked": { + "lastModified": 1764947035, + "narHash": "sha256-EYHSjVM4Ox4lvCXUMiKKs2vETUSL5mx+J2FfutM7T9w=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a672be65651c80d3f592a89b3945466584a22069", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a672be65651c80d3f592a89b3945466584a22069", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1761765539, + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "nixpkgs-angular-cli": "nixpkgs-angular-cli" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..016b1e7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,172 @@ +{ + description = "Web Engineering"; + + inputs = { + flake-parts.url = "github:hercules-ci/flake-parts"; + nixpkgs.url = "github:NixOS/nixpkgs/9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4"; + nixpkgs-angular-cli.url = "github:NixOS/nixpkgs/a672be65651c80d3f592a89b3945466584a22069"; + }; + + outputs = inputs @ { + flake-parts, + self, + ... + }: + flake-parts.lib.mkFlake {inherit inputs;} { + imports = []; + systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"]; + perSystem = { + config, + self', + inputs', + pkgs, + system, + ... + }: + with pkgs.lib; let + latexPackages = with pkgs; [ + latexrun + (texlive.withPackages + (ps: + with ps; [ + amsmath + biber + biblatex + changepage + csquotes + enumitem + fontaxes + latexmk + listings + minted + newtx + newtxsf + newtxtt + scheme-medium + textpos + times + titlesec + transparent + upquote + ])) + ]; + + wildfly = pkgs.stdenvNoCC.mkDerivation { + name = "wildfly-39.0.0.Final"; + src = pkgs.fetchzip { + url = "https://github.com/wildfly/wildfly/releases/download/39.0.0.Final/wildfly-39.0.0.Final.zip"; + hash = "sha256-nfdb4doRRn4AwMQZkNYwIDBKIq4iY6diFX/WlPFQqZI="; + }; + installPhase = '' + mkdir -p $out + cp -r $src/* $out/ + ''; + }; + + wildfly-fhs = pkgs.buildFHSEnv { + name = "wildfly-fhs"; + targetPkgs = pkgs: + with pkgs; [ + openjdk21 + bash + coreutils + ]; + runScript = "${wildfly}/bin/standalone.sh"; + profile = + # bash + '' + export WILDFLY_BASE_DIR="$HOME/.wildfly-fhs-base" + mkdir -p "$WILDFLY_BASE_DIR"/{log,data,deployments,tmp,configuration} + if [ ! -f "$WILDFLY_BASE_DIR/configuration/standalone.xml" ]; then + cp -r ${wildfly}/standalone/configuration/* "$WILDFLY_BASE_DIR/configuration/" + chmod -R u+w "$WILDFLY_BASE_DIR/configuration/" + fi + export JBOSS_HOME=${wildfly} + export JBOSS_BASE_DIR="$WILDFLY_BASE_DIR" + ''; + }; + in { + # Per-system attributes can be defined here. The self' and inputs' + # module parameters provide easy access to attributes of the same + # system. + packages = with pkgs; let + fmtNum = strings.fixedWidthNumber 2; + fmtReleaseName = sem: author: chap: "${fmtNum sem} - ${fmtNum chap} - ${author.lastName}, ${author.firstName}.pdf"; + fmtRelease = fmtReleaseName 3 { + firstName = "Linus"; + lastName = "Nagel"; + }; + mkUebungPdf = n: args: + stdenvNoCC.mkDerivation rec { + name = fmtRelease n; + version = "1.0.0"; + src = ./.; + buildInputs = latexPackages; + buildPhase = + # sh + '' + cd docs/uebungen + + latexmk \ + -pdf \ + -l -dir-report -file-line-error -verbose \ + -interaction=nonstopmode \ + "uebung-${toString n}.tex" + ''; + installPhase = + # sh + '' + mkdir -p $out/share $out/log $out/artifacts + cp out/uebung-${toString n}.pdf "$out/share/${name}" + cp out/*.log $out/log/ + cp -r out/* $out/artifacts + ''; + } + // args; + in { + "uebung-5" = mkUebungPdf 5 {}; + "uebung-6" = mkUebungPdf 6 {}; + "uebung-7" = mkUebungPdf 7 {}; + }; + + devShells.default = with pkgs; + mkShell { + buildInputs = [wildfly-fhs pkgs.openjdk21]; + nativeBuildInputs = []; + packages = + [ + mermaid-cli + openjdk + jetty + maven + ] + ++ latexPackages; + + shellHook = + # bash + '' + export WILDFLY_BASE_DIR="$HOME/.wildfly-fhs-base" + + build() { + # builds target/demo.war + mvn clean package + } + + # e.g. 'deploy target/demo.war' + deploy() { + cp -v "$1" "$WILDFLY_BASE_DIR/deployments/" + } + + start() { + wildfly-fhs + } + ''; + }; + }; + flake = { + # The usual flake attributes can be defined here, including system- + # agnostic ones like nixosModule and system-enumerating ones, although + # those are more easily expressed in perSystem. + }; + }; +} diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..8a8fb22 --- /dev/null +++ b/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100755 index 0000000..1d8ab01 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9615904 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4037 @@ +{ + "name": "itc.webengineering", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@angular/cli": "^21.0.2", + "@angular/core": "^21.0.3" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.6.1.tgz", + "integrity": "sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.40.1.tgz", + "integrity": "sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.40.1.tgz", + "integrity": "sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.40.1.tgz", + "integrity": "sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.40.1.tgz", + "integrity": "sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.40.1.tgz", + "integrity": "sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.40.1.tgz", + "integrity": "sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.40.1.tgz", + "integrity": "sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.40.1.tgz", + "integrity": "sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.40.1.tgz", + "integrity": "sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.40.1.tgz", + "integrity": "sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.40.1.tgz", + "integrity": "sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.40.1.tgz", + "integrity": "sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.40.1.tgz", + "integrity": "sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.2100.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2100.2.tgz", + "integrity": "sha512-zSMF82F2wb6b6mvqmDFQyGiKaeFGcgfpXAg7M+ihlJF+GG47H3pNEUzO8+Be5GPoAtpSv0VVoXBwURU2SOnV/Q==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.2", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.0.2.tgz", + "integrity": "sha512-ePttMRRua9kv7df6fu2i5jTVJr5bzqwrKBBEtdXnWqOrYLUnU0G6XIpyGYVM6SyqpTwkTPlVsXZo5e8Lq356tg==", + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.0.2.tgz", + "integrity": "sha512-mFKWTI56D5VmqyIonEK6myIdlGVJpxtxLW44uB1/jiVj7vUSnJCRFHSPH8syaIJ4/Y1B/T4kPTYCx/KEwnO/Ng==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.2", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.19", + "ora": "9.0.0", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli": { + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.0.2.tgz", + "integrity": "sha512-SkyI0ZchUF0ZVBXSZDF4s4hMZs8AazLlI2PlpHSt+QXM+UX+1hhAp8F50WYOdOf1a+93VUzstI9um1CQgMHz2Q==", + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2100.2", + "@angular-devkit/core": "21.0.2", + "@angular-devkit/schematics": "21.0.2", + "@inquirer/prompts": "7.9.0", + "@listr2/prompt-adapter-inquirer": "3.0.5", + "@modelcontextprotocol/sdk": "1.24.0", + "@schematics/angular": "21.0.2", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.40.1", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "npm-package-arg": "13.0.1", + "pacote": "21.0.3", + "parse5-html-rewriting-stream": "8.0.0", + "resolve": "1.22.11", + "semver": "7.7.3", + "yargs": "18.0.0", + "zod": "4.1.13" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/core": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.3.tgz", + "integrity": "sha512-/7a2FyZp5cyjNiwuNLr889KA8DVKSTcTtZJpz57Z9DpmZhPscDOWQqLn9f8jeEwbWllvgrXJi8pKSa78r8JAwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.0.3", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", + "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@inquirer/checkbox": "^4.3.0", + "@inquirer/confirm": "^5.1.19", + "@inquirer/editor": "^4.2.21", + "@inquirer/expand": "^4.0.21", + "@inquirer/input": "^4.2.5", + "@inquirer/number": "^3.0.21", + "@inquirer/password": "^4.0.21", + "@inquirer/rawlist": "^4.1.9", + "@inquirer/search": "^3.2.0", + "@inquirer/select": "^4.4.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", + "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.5" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.24.0.tgz", + "integrity": "sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==", + "license": "MIT", + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.1.tgz", + "integrity": "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==", + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.4.tgz", + "integrity": "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", + "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@schematics/angular": { + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.0.2.tgz", + "integrity": "sha512-JzFHwSNmagzmfBJVSfoJc2i4TqmlXv0iyrVke3vP2b+/CqOBhuDLQSkkdiC+8zI0qJFzgDHn2RlCd0WaIwLfiw==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.2", + "@angular-devkit/schematics": "21.0.2", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.0.0.tgz", + "integrity": "sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg==", + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.0.1.tgz", + "integrity": "sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.0.tgz", + "integrity": "sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.0.0.tgz", + "integrity": "sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.0.0.tgz", + "integrity": "sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ==", + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.40.1.tgz", + "integrity": "sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.6.1", + "@algolia/client-abtesting": "5.40.1", + "@algolia/client-analytics": "5.40.1", + "@algolia/client-common": "5.40.1", + "@algolia/client-insights": "5.40.1", + "@algolia/client-personalization": "5.40.1", + "@algolia/client-query-suggestions": "5.40.1", + "@algolia/client-search": "5.40.1", + "@algolia/ingestion": "1.40.1", + "@algolia/monitoring": "1.40.1", + "@algolia/recommend": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/cacache/node_modules/ssri": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "license": "MIT" + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz", + "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==", + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", + "license": "MIT", + "dependencies": { + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.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==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-fetch-happen": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz", + "integrity": "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==", + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.0.tgz", + "integrity": "sha512-fiCdUALipqgPWrOVTz9fw0XhcazULXOSU6ie40DDbX1F49p1dBrSRBuswndTx1x3vEb/g0FT7vC4c4C2u/mh3A==", + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-gyp": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.1.0.tgz", + "integrity": "sha512-W+RYA8jBnhSr2vrTtlPYPc1K+CSjGpVDRZxcqJcERZ8ND3A1ThWPHRwctTx3qC3oW99jt726jhdz3Y6ky87J4g==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.2", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-package-arg": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.1.tgz", + "integrity": "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", + "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.2.2", + "string-width": "^8.1.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", + "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^12.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.0.0.tgz", + "integrity": "sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "license": "CC0-1.0" + }, + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.0.0.tgz", + "integrity": "sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==", + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.0.0", + "debug": "^4.4.1", + "make-fetch-happen": "^15.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unique-filename": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", + "license": "ISC", + "dependencies": { + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/unique-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", + "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e0a8702 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "@angular/cli": "^21.0.2", + "@angular/core": "^21.0.3" + } +} diff --git a/pom.xml b/pom.xml new file mode 100755 index 0000000..8db13bb --- /dev/null +++ b/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + org.example + demo + 1.0-SNAPSHOT + demo + war + + UTF-8 + UTF-8 + 21 + 5.11.0-M2 + 3.13.0 + 3.4.0 + + + + jakarta.platform + jakarta.jakartaee-web-api + 11.0.0 + provided + + + org.glassfish + jakarta.faces + 4.1.3 + + + jakarta.enterprise + jakarta.enterprise.cdi-api + 4.1.0 + + + jakarta.enterprise + jakarta.enterprise.cdi-el-api + 4.1.0 + + + org.jboss.weld.servlet + weld-servlet-core + 5.1.2.Final + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + + + org.projectlombok + lombok + 1.18.30 + + + org.primefaces + primefaces + 15.0.3 + jakarta + + + + demo + + + org.apache.maven.plugins + maven-compiler-plugin + ${compiler-plugin.version} + + + org.apache.maven.plugins + maven-war-plugin + ${war-plugin.version} + + + + diff --git a/src/main/java/org/example/demo/uebung1/aufgabe16/Client.java b/src/main/java/org/example/demo/uebung1/aufgabe16/Client.java new file mode 100644 index 0000000..4f32eb3 --- /dev/null +++ b/src/main/java/org/example/demo/uebung1/aufgabe16/Client.java @@ -0,0 +1,22 @@ +package org.example.demo.uebung1.aufgabe16; +import javax.naming.InitialContext; +import javax.naming.Context; +import java.util.Properties; + +public class Client { + public static void main(String[] args) throws Exception { + Properties props = new Properties(); + props.setProperty(Context.INITIAL_CONTEXT_FACTORY, + "org.wildfly.naming.client.WildFlyInitialContextFactory"); + props.setProperty(Context.PROVIDER_URL, "http-remoting://localhost:8080"); + + InitialContext ctx = new InitialContext(props); + EncryptorRemote encryptor = (EncryptorRemote) ctx.lookup( + "ejb:/IhrProjektname/Encryptor!encryption.EncryptorRemote"); + + String original = "Hallo Welt"; + String encrypted = encryptor.encrypt(original); + System.out.println("Original: " + original); + System.out.println("Verschlüsselt: " + encrypted); + } +} diff --git a/src/main/java/org/example/demo/uebung1/aufgabe16/Encryptor.java b/src/main/java/org/example/demo/uebung1/aufgabe16/Encryptor.java new file mode 100644 index 0000000..f5aa55b --- /dev/null +++ b/src/main/java/org/example/demo/uebung1/aufgabe16/Encryptor.java @@ -0,0 +1,14 @@ +package org.example.demo.uebung1.aufgabe16; +import jakarta.ejb.Stateless; + +@Stateless +public class Encryptor implements EncryptorRemote { + @Override + public String encrypt(String input) { + StringBuilder result = new StringBuilder(); + for (char c : input.toCharArray()) { + result.append((char)(c + 5)); + } + return result.toString(); + } +} diff --git a/src/main/java/org/example/demo/uebung1/aufgabe16/EncryptorRemote.java b/src/main/java/org/example/demo/uebung1/aufgabe16/EncryptorRemote.java new file mode 100644 index 0000000..032e7c9 --- /dev/null +++ b/src/main/java/org/example/demo/uebung1/aufgabe16/EncryptorRemote.java @@ -0,0 +1,7 @@ +package org.example.demo.uebung1.aufgabe16; +import jakarta.ejb.Remote; + +@Remote +public interface EncryptorRemote { + String encrypt(String input); +} diff --git a/src/main/java/org/example/demo/uebung1/aufgabe17/Counter.java b/src/main/java/org/example/demo/uebung1/aufgabe17/Counter.java new file mode 100644 index 0000000..cef46bb --- /dev/null +++ b/src/main/java/org/example/demo/uebung1/aufgabe17/Counter.java @@ -0,0 +1,12 @@ +package org.example.demo.uebung1.aufgabe17; +import jakarta.ejb.Stateful; + +@Stateful +public class Counter implements CounterRemote { + private int value = 0; + + @Override + public int getAndIncrement() { + return value++; + } +} diff --git a/src/main/java/org/example/demo/uebung1/aufgabe17/CounterClient.java b/src/main/java/org/example/demo/uebung1/aufgabe17/CounterClient.java new file mode 100644 index 0000000..02bc891 --- /dev/null +++ b/src/main/java/org/example/demo/uebung1/aufgabe17/CounterClient.java @@ -0,0 +1,21 @@ +package org.example.demo.uebung1.aufgabe17; +import javax.naming.InitialContext; +import javax.naming.Context; +import java.util.Properties; + +public class CounterClient { + public static void main(String[] args) throws Exception { + Properties props = new Properties(); + props.setProperty(Context.INITIAL_CONTEXT_FACTORY, + "org.wildfly.naming.client.WildFlyInitialContextFactory"); + props.setProperty(Context.PROVIDER_URL, "http-remoting://localhost:8080"); + + InitialContext ctx = new InitialContext(props); + CounterRemote counter = (CounterRemote) ctx.lookup( + "ejb:/IhrProjektname/Counter!counter.CounterRemote?stateful"); + + System.out.println(counter.getAndIncrement()); + System.out.println(counter.getAndIncrement()); + System.out.println(counter.getAndIncrement()); + } +} diff --git a/src/main/java/org/example/demo/uebung1/aufgabe17/CounterRemote.java b/src/main/java/org/example/demo/uebung1/aufgabe17/CounterRemote.java new file mode 100644 index 0000000..54f24cb --- /dev/null +++ b/src/main/java/org/example/demo/uebung1/aufgabe17/CounterRemote.java @@ -0,0 +1,7 @@ +package org.example.demo.uebung1.aufgabe17; +import jakarta.ejb.Remote; + +@Remote +public interface CounterRemote { + int getAndIncrement(); +} diff --git a/src/main/resources/META-INF/beans.xml b/src/main/resources/META-INF/beans.xml new file mode 100755 index 0000000..96b4c76 --- /dev/null +++ b/src/main/resources/META-INF/beans.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100755 index 0000000..4e83e2c --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/src/main/webapp/WEB-INF/beans.xml b/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000..26dc70a --- /dev/null +++ b/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,6 @@ + + + diff --git a/src/main/webapp/WEB-INF/faces-config.xml b/src/main/webapp/WEB-INF/faces-config.xml new file mode 100755 index 0000000..faa4977 --- /dev/null +++ b/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,3 @@ + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100755 index 0000000..cb1c621 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,22 @@ + + + + + jakarta.faces.CONFIG_FILES + /WEB-INF/faces-config.xml + + + + Faces Servlet + jakarta.faces.webapp.FacesServlet + 1 + + + + Faces Servlet + *.xhtml + +